18 lines
No EOL
728 KiB
JavaScript
18 lines
No EOL
728 KiB
JavaScript
!function e(t,r,n){function i(s,a){if(!r[s]){if(!t[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(o)return o(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var l=r[s]={exports:{}};t[s][0].call(l.exports,(function(e){return i(t[s][1][e]||e)}),l,l.exports,e,t,r,n)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s<n.length;s++)i(n[s]);return i}({1:[function(e,t,r){t.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}},{}],2:[function(e,t,r){t.exports=function(e){if(Array.isArray(e))return e}},{}],3:[function(e,t,r){var n=e("./arrayLikeToArray");t.exports=function(e){if(Array.isArray(e))return n(e)}},{"./arrayLikeToArray":1}],4:[function(e,t,r){t.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},{}],5:[function(e,t,r){function n(e,t,r,n,i,o,s){try{var a=e[o](s),c=a.value}catch(e){return void r(e)}a.done?t(c):Promise.resolve(c).then(n,i)}t.exports=function(e){return function(){var t=this,r=arguments;return new Promise((function(i,o){var s=e.apply(t,r);function a(e){n(s,i,o,a,c,"next",e)}function c(e){n(s,i,o,a,c,"throw",e)}a(void 0)}))}}},{}],6:[function(e,t,r){t.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},{}],7:[function(e,t,r){var n=e("./setPrototypeOf"),i=e("./isNativeReflectConstruct");function o(e,r,s){return i()?t.exports=o=Reflect.construct:t.exports=o=function(e,t,r){var i=[null];i.push.apply(i,t);var o=new(Function.bind.apply(e,i));return r&&n(o,r.prototype),o},o.apply(null,arguments)}t.exports=o},{"./isNativeReflectConstruct":15,"./setPrototypeOf":21}],8:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}t.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},{}],9:[function(e,t,r){t.exports=function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},{}],10:[function(e,t,r){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(e)}t.exports=n},{}],11:[function(e,t,r){var n=e("./setPrototypeOf");t.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}},{"./setPrototypeOf":21}],12:[function(e,t,r){t.exports=function(e){return e&&e.__esModule?e:{default:e}}},{}],13:[function(e,t,r){var n=e("@babel/runtime/helpers/typeof");function i(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return i=function(){return e},e}t.exports=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==n(e)&&"function"!=typeof e)return{default:e};var t=i();if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var a=o?Object.getOwnPropertyDescriptor(e,s):null;a&&(a.get||a.set)?Object.defineProperty(r,s,a):r[s]=e[s]}return r.default=e,t&&t.set(e,r),r}},{"@babel/runtime/helpers/typeof":24}],14:[function(e,t,r){t.exports=function(e){return-1!==Function.toString.call(e).indexOf("[native code]")}},{}],15:[function(e,t,r){t.exports=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}},{}],16:[function(e,t,r){t.exports=function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}},{}],17:[function(e,t,r){t.exports=function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var r=[],n=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(n=(s=a.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,o=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw o}}return r}}},{}],18:[function(e,t,r){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},{}],19:[function(e,t,r){t.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},{}],20:[function(e,t,r){var n=e("@babel/runtime/helpers/typeof"),i=e("./assertThisInitialized");t.exports=function(e,t){return!t||"object"!==n(t)&&"function"!=typeof t?i(e):t}},{"./assertThisInitialized":4,"@babel/runtime/helpers/typeof":24}],21:[function(e,t,r){function n(e,r){return t.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(e,r)}t.exports=n},{}],22:[function(e,t,r){var n=e("./arrayWithHoles"),i=e("./iterableToArrayLimit"),o=e("./unsupportedIterableToArray"),s=e("./nonIterableRest");t.exports=function(e,t){return n(e)||i(e,t)||o(e,t)||s()}},{"./arrayWithHoles":2,"./iterableToArrayLimit":17,"./nonIterableRest":18,"./unsupportedIterableToArray":25}],23:[function(e,t,r){var n=e("./arrayWithoutHoles"),i=e("./iterableToArray"),o=e("./unsupportedIterableToArray"),s=e("./nonIterableSpread");t.exports=function(e){return n(e)||i(e)||o(e)||s()}},{"./arrayWithoutHoles":3,"./iterableToArray":16,"./nonIterableSpread":19,"./unsupportedIterableToArray":25}],24:[function(e,t,r){function n(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?t.exports=n=function(e){return typeof e}:t.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}t.exports=n},{}],25:[function(e,t,r){var n=e("./arrayLikeToArray");t.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}},{"./arrayLikeToArray":1}],26:[function(e,t,r){var n=e("./getPrototypeOf"),i=e("./setPrototypeOf"),o=e("./isNativeFunction"),s=e("./construct");function a(e){var r="function"==typeof Map?new Map:void 0;return t.exports=a=function(e){if(null===e||!o(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(e))return r.get(e);r.set(e,t)}function t(){return s(e,arguments,n(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),i(t,e)},a(e)}t.exports=a},{"./construct":7,"./getPrototypeOf":10,"./isNativeFunction":14,"./setPrototypeOf":21}],27:[function(e,t,r){t.exports=e("regenerator-runtime")},{"regenerator-runtime":49}],28:[function(e,t,r){"use strict";for(var n=/[\\\"\x00-\x1F]/g,i={},o=0;o<32;++o)i[String.fromCharCode(o)]="\\U"+("0000"+o.toString(16)).slice(-4).toUpperCase();function s(e){return n.lastIndex=0,e.replace(n,(function(e){return i[e]}))}function a(e){switch(typeof e){case"string":return'"'+s(e)+'"';case"number":return isFinite(e)?e:"null";case"boolean":return e;case"object":return null===e?"null":Array.isArray(e)?function(e){for(var t="[",r="",n=0;n<e.length;++n)r+=t,t=",",r+=a(e[n]);return","!=t?"[]":r+"]"}(e):function(e){var t="{",r="",n=Object.keys(e);n.sort();for(var i=0;i<n.length;++i){var o=n[i];r+=t+'"'+s(o)+'":',t=",",r+=a(e[o])}return","!=t?"{}":r+"}"}(e);default:throw new Error("Cannot stringify: "+typeof e)}}i["\b"]="\\b",i["\t"]="\\t",i["\n"]="\\n",i["\f"]="\\f",i["\r"]="\\r",i['"']='\\"',i["\\"]="\\\\",t.exports={stringify:a}},{}],29:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer;t.exports=function(e){if(e.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),r=0;r<t.length;r++)t[r]=255;for(var i=0;i<e.length;i++){var o=e.charAt(i),s=o.charCodeAt(0);if(255!==t[s])throw new TypeError(o+" is ambiguous");t[s]=i}var a=e.length,c=e.charAt(0),u=Math.log(a)/Math.log(256),l=Math.log(256)/Math.log(a);function d(e){if("string"!=typeof e)throw new TypeError("Expected String");if(0===e.length)return n.alloc(0);var r=0;if(" "!==e[r]){for(var i=0,o=0;e[r]===c;)i++,r++;for(var s=(e.length-r)*u+1>>>0,l=new Uint8Array(s);e[r];){var d=t[e.charCodeAt(r)];if(255===d)return;for(var h=0,f=s-1;(0!==d||h<o)&&-1!==f;f--,h++)d+=a*l[f]>>>0,l[f]=d%256>>>0,d=d/256>>>0;if(0!==d)throw new Error("Non-zero carry");o=h,r++}if(" "!==e[r]){for(var g=s-o;g!==s&&0===l[g];)g++;var p=n.allocUnsafe(i+(s-g));p.fill(0,0,i);for(var v=i;g!==s;)p[v++]=l[g++];return p}}}return{encode:function(t){if((Array.isArray(t)||t instanceof Uint8Array)&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError("Expected Buffer");if(0===t.length)return"";for(var r=0,i=0,o=0,s=t.length;o!==s&&0===t[o];)o++,r++;for(var u=(s-o)*l+1>>>0,d=new Uint8Array(u);o!==s;){for(var h=t[o],f=0,g=u-1;(0!==h||f<i)&&-1!==g;g--,f++)h+=256*d[g]>>>0,d[g]=h%a>>>0,h=h/a>>>0;if(0!==h)throw new Error("Non-zero carry");i=f,o++}for(var p=u-i;p!==u&&0===d[p];)p++;for(var v=c.repeat(r);p<u;++p)v+=e.charAt(d[p]);return v},decodeUnsafe:d,decode:function(e){var t=d(e);if(t)return t;throw new Error("Non-base"+a+" character")}}}},{"safe-buffer":53}],30:[function(e,t,r){"use strict";r.byteLength=function(e){var t=u(e),r=t[0],n=t[1];return 3*(r+n)/4-n},r.toByteArray=function(e){var t,r,n=u(e),s=n[0],a=n[1],c=new o(function(e,t,r){return 3*(t+r)/4-r}(0,s,a)),l=0,d=a>0?s-4:s;for(r=0;r<d;r+=4)t=i[e.charCodeAt(r)]<<18|i[e.charCodeAt(r+1)]<<12|i[e.charCodeAt(r+2)]<<6|i[e.charCodeAt(r+3)],c[l++]=t>>16&255,c[l++]=t>>8&255,c[l++]=255&t;2===a&&(t=i[e.charCodeAt(r)]<<2|i[e.charCodeAt(r+1)]>>4,c[l++]=255&t);1===a&&(t=i[e.charCodeAt(r)]<<10|i[e.charCodeAt(r+1)]<<4|i[e.charCodeAt(r+2)]>>2,c[l++]=t>>8&255,c[l++]=255&t);return c},r.fromByteArray=function(e){for(var t,r=e.length,i=r%3,o=[],s=16383,a=0,c=r-i;a<c;a+=s)o.push(l(e,a,a+s>c?c:a+s));1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,c=s.length;a<c;++a)n[a]=s[a],i[s.charCodeAt(a)]=a;function u(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function l(e,t,r){for(var i,o,s=[],a=t;a<r;a+=3)i=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(255&e[a+2]),s.push(n[(o=i)>>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],31:[function(e,t,r){var n,i;n=this,i=function(){var e=XMLHttpRequest;if(!e)throw new Error("missing XMLHttpRequest");function t(o,s){if("function"!=typeof s)throw new Error("Bad callback given: "+s);if(!o)throw new Error("No options given");var a=o.onResponse;if((o="string"==typeof o?{uri:o}:JSON.parse(JSON.stringify(o))).onResponse=a,o.verbose&&(t.log=function(){var e,t,r={},o=["trace","debug","info","warn","error"];for(t=0;t<o.length;t++)r[e=o[t]]=n,"undefined"!=typeof console&&console&&console[e]&&(r[e]=i(console,e));return r}()),o.url&&(o.uri=o.url,delete o.url),!o.uri&&""!==o.uri)throw new Error("options.uri is a required argument");if("string"!=typeof o.uri)throw new Error("options.uri must be a string");for(var c=["proxy","_redirectsFollowed","maxRedirects","followRedirect"],u=0;u<c.length;u++)if(o[c[u]])throw new Error("options."+c[u]+" is not supported");if(o.callback=s,o.method=o.method||"GET",o.headers=o.headers||{},o.body=o.body||null,o.timeout=o.timeout||t.DEFAULT_TIMEOUT,o.headers.host)throw new Error("Options.headers.host is not supported");o.json&&(o.headers.accept=o.headers.accept||"application/json","GET"!==o.method&&(o.headers["content-type"]="application/json"),"boolean"!=typeof o.json?o.body=JSON.stringify(o.json):"string"!=typeof o.body&&(o.body=JSON.stringify(o.body)));var l=function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.join("&")};if(o.qs){var d="string"==typeof o.qs?o.qs:l(o.qs);-1!==o.uri.indexOf("?")?o.uri=o.uri+"&"+d:o.uri=o.uri+"?"+d}if(o.form){if("string"==typeof o.form)throw"form name unsupported";if("POST"===o.method){var h=(o.encoding||"application/x-www-form-urlencoded").toLowerCase();switch(o.headers["content-type"]=h,h){case"application/x-www-form-urlencoded":o.body=l(o.form).replace(/%20/g,"+");break;case"multipart/form-data":var f=function(e){var t={};t.boundry="-------------------------------"+Math.floor(1e9*Math.random());var r=[];for(var n in e)e.hasOwnProperty(n)&&r.push("--"+t.boundry+'\nContent-Disposition: form-data; name="'+n+'"\n\n'+e[n]+"\n");return r.push("--"+t.boundry+"--"),t.body=r.join(""),t.length=t.body.length,t.type="multipart/form-data; boundary="+t.boundry,t}(o.form);o.body=f.body,o.headers["content-type"]=f.type;break;default:throw new Error("unsupported encoding:"+h)}}}return o.onResponse=o.onResponse||n,!0===o.onResponse&&(o.onResponse=s,o.callback=n),!o.headers.authorization&&o.auth&&(o.headers.authorization="Basic "+function(e){var t,r,n,i,o,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a=0,c=0,u="",l=[];if(!e)return e;do{t=(o=e.charCodeAt(a++)<<16|e.charCodeAt(a++)<<8|e.charCodeAt(a++))>>18&63,r=o>>12&63,n=o>>6&63,i=63&o,l[c++]=s.charAt(t)+s.charAt(r)+s.charAt(n)+s.charAt(i)}while(a<e.length);switch(u=l.join(""),e.length%3){case 1:u=u.slice(0,-2)+"==";break;case 2:u=u.slice(0,-1)+"="}return u}(o.auth.username+":"+o.auth.password)),function(n){var i=new e,o=!1,s=function(e){var t,r=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;try{t=location.href}catch(e){(t=document.createElement("a")).href="",t=t.href}var n=r.exec(t.toLowerCase())||[],i=r.exec(e.toLowerCase());return!(!i||i[1]==n[1]&&i[2]==n[2]&&(i[3]||("http:"===i[1]?80:443))==(n[3]||("http:"===n[1]?80:443)))}(n.uri),a="withCredentials"in i;if(r+=1,i.seq_id=r,i.id=r+": "+n.method+" "+n.uri,i._id=i.id,s&&!a){var c=new Error("Browser does not support cross-origin request: "+n.uri);return c.cors="unsupported",n.callback(c,i)}function u(){o=!0;var e=new Error("ETIMEDOUT");return e.code="ETIMEDOUT",e.duration=n.timeout,t.log.error("Timeout",{id:i._id,milliseconds:n.timeout}),n.callback(e,i)}i.timeoutTimer=setTimeout(u,n.timeout);var l={response:!1,loading:!1,end:!1};return i.onreadystatechange=d,i.open(n.method,n.uri,!0),s&&(i.withCredentials=!!n.withCredentials),i.send(n.body),i;function d(r){if(o)return t.log.debug("Ignoring timed out state change",{state:i.readyState,id:i.id});if(t.log.debug("State change",{state:i.readyState,id:i.id,timed_out:o}),i.readyState===e.OPENED)for(var s in t.log.debug("Request started",{id:i.id}),n.headers)i.setRequestHeader(s,n.headers[s]);else i.readyState===e.HEADERS_RECEIVED?h():i.readyState===e.LOADING?(h(),f()):i.readyState===e.DONE&&(h(),f(),g())}function h(){if(!l.response){if(l.response=!0,t.log.debug("Got response",{id:i.id,status:i.status}),clearTimeout(i.timeoutTimer),i.statusCode=i.status,s&&0==i.statusCode){var e=new Error("CORS request rejected: "+n.uri);return e.cors="rejected",l.loading=!0,l.end=!0,n.callback(e,i)}n.onResponse(null,i)}}function f(){l.loading||(l.loading=!0,t.log.debug("Response body loading",{id:i.id}))}function g(){if(!l.end){if(l.end=!0,t.log.debug("Request done",{id:i.id}),i.body=i.responseText,n.json)try{i.body=JSON.parse(i.responseText)}catch(e){return n.callback(e,i)}n.callback(null,i,i.body)}}}(o)}t.log={trace:n,debug:n,info:n,warn:n,error:n};var r=0;function n(){}function i(e,t){return function(r,n){return"object"==typeof n&&(r+=" "+JSON.stringify(n)),e[t].call(e,r)}}return t.withCredentials=!1,t.DEFAULT_TIMEOUT=18e4,t.defaults=function(e,r){var n=function(t){return function(r,n){for(var i in r="string"==typeof r?{uri:r}:JSON.parse(JSON.stringify(r)),e)void 0===r[i]&&(r[i]=e[i]);return t(r,n)}},i=n(t);return i.get=n(t.get),i.post=n(t.post),i.put=n(t.put),i.head=n(t.head),i},["get","put","post","head"].forEach((function(e){var r=e.toUpperCase();t[e.toLowerCase()]=function(e){"string"==typeof e?e={method:r,uri:e}:(e=JSON.parse(JSON.stringify(e))).method=r;var n=[e].concat(Array.prototype.slice.apply(arguments,[1]));return t.apply(this,n)}})),t.couch=function(e,r){return"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,r=r||n,t(e,(function(e,t,n){if(e)return r(e,t,n);if((t.statusCode<200||t.statusCode>299)&&n.error){for(var i in e=new Error("CouchDB error: "+(n.error.reason||n.error.error)),n)e[i]=n[i];return r(e,t,n)}return r(e,t,n)}))},t},"function"==typeof define&&define.amd?define([],i):"object"==typeof r?t.exports=i():n.returnExports=i()},{}],32:[function(e,t,r){(function(e){(function(){!function(n){var i="object"==typeof r&&r&&!r.nodeType&&r,o="object"==typeof t&&t&&!t.nodeType&&t,s="object"==typeof e&&e;s.global!==s&&s.window!==s&&s.self!==s||(n=s);var a,c,u=2147483647,l=36,d=/^xn--/,h=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,g={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},p=Math.floor,v=String.fromCharCode;function y(e){throw new RangeError(g[e])}function m(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function b(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+m((e=e.replace(f,".")).split("."),t).join(".")}function S(e){for(var t,r,n=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(r=e.charCodeAt(i++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),i--):n.push(t);return n}function _(e){return m(e,(function(e){var t="";return e>65535&&(t+=v((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=v(e)})).join("")}function E(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function k(e,t,r){var n=0;for(e=r?p(e/700):e>>1,e+=p(e/t);e>455;n+=l)e=p(e/35);return p(n+36*e/(e+38))}function w(e){var t,r,n,i,o,s,a,c,d,h,f,g=[],v=e.length,m=0,b=128,S=72;for((r=e.lastIndexOf("-"))<0&&(r=0),n=0;n<r;++n)e.charCodeAt(n)>=128&&y("not-basic"),g.push(e.charCodeAt(n));for(i=r>0?r+1:0;i<v;){for(o=m,s=1,a=l;i>=v&&y("invalid-input"),((c=(f=e.charCodeAt(i++))-48<10?f-22:f-65<26?f-65:f-97<26?f-97:l)>=l||c>p((u-m)/s))&&y("overflow"),m+=c*s,!(c<(d=a<=S?1:a>=S+26?26:a-S));a+=l)s>p(u/(h=l-d))&&y("overflow"),s*=h;S=k(m-o,t=g.length+1,0==o),p(m/t)>u-b&&y("overflow"),b+=p(m/t),m%=t,g.splice(m++,0,b)}return _(g)}function I(e){var t,r,n,i,o,s,a,c,d,h,f,g,m,b,_,w=[];for(g=(e=S(e)).length,t=128,r=0,o=72,s=0;s<g;++s)(f=e[s])<128&&w.push(v(f));for(n=i=w.length,i&&w.push("-");n<g;){for(a=u,s=0;s<g;++s)(f=e[s])>=t&&f<a&&(a=f);for(a-t>p((u-r)/(m=n+1))&&y("overflow"),r+=(a-t)*m,t=a,s=0;s<g;++s)if((f=e[s])<t&&++r>u&&y("overflow"),f==t){for(c=r,d=l;!(c<(h=d<=o?1:d>=o+26?26:d-o));d+=l)_=c-h,b=l-h,w.push(v(E(h+_%b,0))),c=p(_/b);w.push(v(E(c,0))),o=k(r,m,n==i),r=0,++n}++r,++t}return w.join("")}if(a={version:"1.4.1",ucs2:{decode:S,encode:_},decode:w,encode:I,toASCII:function(e){return b(e,(function(e){return h.test(e)?"xn--"+I(e):e}))},toUnicode:function(e){return b(e,(function(e){return d.test(e)?w(e.slice(4).toLowerCase()):e}))}},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",(function(){return a}));else if(i&&o)if(t.exports==i)o.exports=a;else for(c in a)a.hasOwnProperty(c)&&(i[c]=a[c]);else n.punycode=a}(this)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],33:[function(e,t,r){var n=e("base-x");t.exports=n("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz")},{"base-x":29}],34:[function(e,t,r){(function(t){(function(){
|
||
/*!
|
||
* The buffer module from node.js, for the browser.
|
||
*
|
||
* @author Feross Aboukhadijeh <https://feross.org>
|
||
* @license MIT
|
||
*/
|
||
"use strict";var t=e("base64-js"),n=e("ieee754");r.Buffer=s,r.SlowBuffer=function(e){+e!=e&&(e=0);return s.alloc(+e)},r.INSPECT_MAX_BYTES=50;var i=2147483647;function o(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=s.prototype,t}function s(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return u(e)}return a(e,t,r)}function a(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!s.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|h(e,t),n=o(r),i=n.write(e,t);i!==r&&(n=n.slice(0,i));return n}(e,t);if(ArrayBuffer.isView(e))return l(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(q(e,ArrayBuffer)||e&&q(e.buffer,ArrayBuffer))return function(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('"length" is outside of buffer bounds');var n;n=void 0===t&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,t):new Uint8Array(e,t,r);return n.__proto__=s.prototype,n}(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return s.from(n,t,r);var i=function(e){if(s.isBuffer(e)){var t=0|d(e.length),r=o(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||j(e.length)?o(0):l(e);if("Buffer"===e.type&&Array.isArray(e.data))return l(e.data)}(e);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return s.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function u(e){return c(e),o(e<0?0:0|d(e))}function l(e){for(var t=e.length<0?0:0|d(e.length),r=o(t),n=0;n<t;n+=1)r[n]=255&e[n];return r}function d(e){if(e>=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function h(e,t){if(s.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||q(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return B(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return N(e).length;default:if(i)return n?-1:B(e).length;t=(""+t).toLowerCase(),i=!0}}function f(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return C(this,t,r);case"utf8":case"utf-8":return w(this,t,r);case"ascii":return T(this,t,r);case"latin1":case"binary":return R(this,t,r);case"base64":return k(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function p(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),j(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=s.from(t,n)),s.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function v(e,t,r,n,i){var o,s=1,a=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,c/=2,r/=2}function u(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var l=-1;for(o=r;o<a;o++)if(u(e,o)===u(t,-1===l?0:o-l)){if(-1===l&&(l=o),o-l+1===c)return l*s}else-1!==l&&(o-=o-l),l=-1}else for(r+c>a&&(r=a-c),o=r;o>=0;o--){for(var d=!0,h=0;h<c;h++)if(u(e,o+h)!==u(t,h)){d=!1;break}if(d)return o}return-1}function y(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=t.length;n>o/2&&(n=o/2);for(var s=0;s<n;++s){var a=parseInt(t.substr(2*s,2),16);if(j(a))return s;e[r+s]=a}return s}function m(e,t,r,n){return L(B(t,e.length-r),e,r,n)}function b(e,t,r,n){return L(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function S(e,t,r,n){return b(e,t,r,n)}function _(e,t,r,n){return L(N(t),e,r,n)}function E(e,t,r,n){return L(function(e,t){for(var r,n,i,o=[],s=0;s<e.length&&!((t-=2)<0);++s)n=(r=e.charCodeAt(s))>>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function k(e,r,n){return 0===r&&n===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(r,n))}function w(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var o,s,a,c,u=e[i],l=null,d=u>239?4:u>223?3:u>191?2:1;if(i+d<=r)switch(d){case 1:u<128&&(l=u);break;case 2:128==(192&(o=e[i+1]))&&(c=(31&u)<<6|63&o)>127&&(l=c);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(c=(15&u)<<12|(63&o)<<6|63&s)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(c=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&c<1114112&&(l=c)}null===l?(l=65533,d=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|1023&l),n.push(l),i+=d}return function(e){var t=e.length;if(t<=I)return String.fromCharCode.apply(String,e);var r="",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=I));return r}(n)}r.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}(),s.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&s[Symbol.species]===s&&Object.defineProperty(s,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),s.poolSize=8192,s.from=function(e,t,r){return a(e,t,r)},s.prototype.__proto__=Uint8Array.prototype,s.__proto__=Uint8Array,s.alloc=function(e,t,r){return function(e,t,r){return c(e),e<=0?o(e):void 0!==t?"string"==typeof r?o(e).fill(t,r):o(e).fill(t):o(e)}(e,t,r)},s.allocUnsafe=function(e){return u(e)},s.allocUnsafeSlow=function(e){return u(e)},s.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==s.prototype},s.compare=function(e,t){if(q(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),q(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0},s.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},s.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return s.alloc(0);var r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;var n=s.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){var o=e[r];if(q(o,Uint8Array)&&(o=s.from(o)),!s.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,i),i+=o.length}return n},s.byteLength=h,s.prototype._isBuffer=!0,s.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)g(this,t,t+1);return this},s.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},s.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},s.prototype.toString=function(){var e=this.length;return 0===e?"":0===arguments.length?w(this,0,e):f.apply(this,arguments)},s.prototype.toLocaleString=s.prototype.toString,s.prototype.equals=function(e){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===s.compare(this,e)},s.prototype.inspect=function(){var e="",t=r.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),"<Buffer "+e+">"},s.prototype.compare=function(e,t,r,n,i){if(q(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),!s.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),c=Math.min(o,a),u=this.slice(n,i),l=e.slice(t,r),d=0;d<c;++d)if(u[d]!==l[d]){o=u[d],a=l[d];break}return o<a?-1:a<o?1:0},s.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},s.prototype.indexOf=function(e,t,r){return p(this,e,t,r,!0)},s.prototype.lastIndexOf=function(e,t,r){return p(this,e,t,r,!1)},s.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return m(this,e,t,r);case"ascii":return b(this,e,t,r);case"latin1":case"binary":return S(this,e,t,r);case"base64":return _(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var I=4096;function T(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(127&e[i]);return n}function R(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function C(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i="",o=t;o<r;++o)i+=K(e[o]);return i}function O(e,t,r){for(var n=e.slice(t,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function D(e,t,r){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,r,n,i,o){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}function P(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function x(e,t,r,i,o){return t=+t,r>>>=0,o||P(e,0,r,4),n.write(e,t,r,i,23,4),r+4}function M(e,t,r,i,o){return t=+t,r>>>=0,o||P(e,0,r,8),n.write(e,t,r,i,52,8),r+8}s.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e);var n=this.subarray(e,t);return n.__proto__=s.prototype,n},s.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||D(e,t,this.length);for(var n=this[e],i=1,o=0;++o<t&&(i*=256);)n+=this[e+o]*i;return n},s.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||D(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},s.prototype.readUInt8=function(e,t){return e>>>=0,t||D(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return e>>>=0,t||D(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return e>>>=0,t||D(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return e>>>=0,t||D(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return e>>>=0,t||D(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||D(e,t,this.length);for(var n=this[e],i=1,o=0;++o<t&&(i*=256);)n+=this[e+o]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*t)),n},s.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||D(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},s.prototype.readInt8=function(e,t){return e>>>=0,t||D(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},s.prototype.readInt16LE=function(e,t){e>>>=0,t||D(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(e,t){e>>>=0,t||D(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(e,t){return e>>>=0,t||D(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return e>>>=0,t||D(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return e>>>=0,t||D(e,4,this.length),n.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return e>>>=0,t||D(e,4,this.length),n.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return e>>>=0,t||D(e,8,this.length),n.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return e>>>=0,t||D(e,8,this.length),n.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||A(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o<r&&(i*=256);)this[t+o]=e/i&255;return t+r},s.prototype.writeUIntBE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||A(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},s.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,1,255,0),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},s.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},s.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},s.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},s.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);A(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o<r&&(s*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+r},s.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);A(this,e,t,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+r},s.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},s.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},s.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},s.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},s.prototype.writeFloatLE=function(e,t,r){return x(this,e,t,!0,r)},s.prototype.writeFloatBE=function(e,t,r){return x(this,e,t,!1,r)},s.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},s.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},s.prototype.copy=function(e,t,r,n){if(!s.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var i=n-r;if(this===e&&"function"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(t,r,n);else if(this===e&&r<t&&t<n)for(var o=i-1;o>=0;--o)e[o+t]=this[o+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},s.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!s.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<r)throw new RangeError("Out of range index");if(r<=t)return this;var o;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o<r;++o)this[o]=e;else{var a=s.isBuffer(e)?e:s.from(e,n),c=a.length;if(0===c)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(o=0;o<r-t;++o)this[o+t]=a[o%c]}return this};var U=/[^+/0-9A-Za-z-_]/g;function K(e){return e<16?"0"+e.toString(16):e.toString(16)}function B(e,t){var r;t=t||1/0;for(var n=e.length,i=null,o=[],s=0;s<n;++s){if((r=e.charCodeAt(s))>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function N(e){return t.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function L(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function q(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function j(e){return e!=e}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":30,buffer:34,ieee754:37}],35:[function(e,t,r){
|
||
/*!
|
||
* content-type
|
||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*/
|
||
"use strict";var n=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,i=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,o=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,s=/\\([\u000b\u0020-\u00ff])/g,a=/([\\"])/g,c=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;function u(e){var t=String(e);if(o.test(t))return t;if(t.length>0&&!i.test(t))throw new TypeError("invalid parameter value");return'"'+t.replace(a,"\\$1")+'"'}function l(e){this.parameters=Object.create(null),this.type=e}r.format=function(e){if(!e||"object"!=typeof e)throw new TypeError("argument obj is required");var t=e.parameters,r=e.type;if(!r||!c.test(r))throw new TypeError("invalid type");var n=r;if(t&&"object"==typeof t)for(var i,s=Object.keys(t).sort(),a=0;a<s.length;a++){if(i=s[a],!o.test(i))throw new TypeError("invalid parameter name");n+="; "+i+"="+u(t[i])}return n},r.parse=function(e){if(!e)throw new TypeError("argument string is required");var t="object"==typeof e?function(e){var t;"function"==typeof e.getHeader?t=e.getHeader("content-type"):"object"==typeof e.headers&&(t=e.headers&&e.headers["content-type"]);if("string"!=typeof t)throw new TypeError("content-type header is missing from object");return t}(e):e;if("string"!=typeof t)throw new TypeError("argument string is required to be a string");var r=t.indexOf(";"),i=-1!==r?t.substr(0,r).trim():t.trim();if(!c.test(i))throw new TypeError("invalid media type");var o=new l(i.toLowerCase());if(-1!==r){var a,u,d;for(n.lastIndex=r;u=n.exec(t);){if(u.index!==r)throw new TypeError("invalid parameter format");r+=u[0].length,a=u[1].toLowerCase(),'"'===(d=u[2])[0]&&(d=d.substr(1,d.length-2).replace(s,"$1")),o.parameters[a]=d}if(r!==t.length)throw new TypeError("invalid parameter format")}return o}},{}],36:[function(e,t,r){"use strict";var n,i="object"==typeof Reflect?Reflect:null,o=i&&"function"==typeof i.apply?i.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};n=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}t.exports=a,t.exports.once=function(e,t){return new Promise((function(r,n){function i(){void 0!==o&&e.removeListener("error",o),r([].slice.call(arguments))}var o;"error"!==t&&(o=function(r){e.removeListener(t,i),n(r)},e.once("error",o)),e.once(t,i)}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var c=10;function u(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function d(e,t,r,n){var i,o,s,a;if(u(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]),void 0===s)s=o[t]=r,++e._eventsCount;else if("function"==typeof s?s=o[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(i=l(e))>0&&s.length>i&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=s.length,a=c,console&&console.warn&&console.warn(a)}return e}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=h.bind(n);return i.listener=r,n.wrapFn=i,i}function g(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(i):v(i,i.length)}function p(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function v(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return c},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");c=e}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return l(this)},a.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n="error"===e,i=this._events;if(void 0!==i)n=n&&void 0===i.error;else if(!n)return!1;if(n){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var c=i[e];if(void 0===c)return!1;if("function"==typeof c)o(c,this,t);else{var u=c.length,l=v(c,u);for(r=0;r<u;++r)o(l[r],this,t)}return!0},a.prototype.addListener=function(e,t){return d(this,e,t,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(e,t){return d(this,e,t,!0)},a.prototype.once=function(e,t){return u(t),this.on(e,f(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){return u(t),this.prependListener(e,f(this,e,t)),this},a.prototype.removeListener=function(e,t){var r,n,i,o,s;if(u(t),void 0===(n=this._events))return this;if(void 0===(r=n[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){s=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,i),1===r.length&&(n[e]=r[0]),void 0!==n.removeListener&&this.emit("removeListener",e,s||t)}return this},a.prototype.off=a.prototype.removeListener,a.prototype.removeAllListeners=function(e){var t,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var i,o=Object.keys(r);for(n=0;n<o.length;++n)"removeListener"!==(i=o[n])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},a.prototype.listeners=function(e){return g(this,e,!0)},a.prototype.rawListeners=function(e){return g(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},a.prototype.listenerCount=p,a.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},{}],37:[function(e,t,r){
|
||
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
||
r.read=function(e,t,r,n,i){var o,s,a=8*i-n-1,c=(1<<a)-1,u=c>>1,l=-7,d=r?i-1:0,h=r?-1:1,f=e[t+d];for(d+=h,o=f&(1<<-l)-1,f>>=-l,l+=a;l>0;o=256*o+e[t+d],d+=h,l-=8);for(s=o&(1<<-l)-1,o>>=-l,l+=n;l>0;s=256*s+e[t+d],d+=h,l-=8);if(0===o)o=1-u;else{if(o===c)return s?NaN:1/0*(f?-1:1);s+=Math.pow(2,n),o-=u}return(f?-1:1)*s*Math.pow(2,o-n)},r.write=function(e,t,r,n,i,o){var s,a,c,u=8*o-i-1,l=(1<<u)-1,d=l>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:o-1,g=n?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-s))<1&&(s--,c*=2),(t+=s+d>=1?h/c:h*Math.pow(2,1-d))*c>=2&&(s++,c/=2),s+d>=l?(a=0,s=l):s+d>=1?(a=(t*c-1)*Math.pow(2,i),s+=d):(a=t*Math.pow(2,d-1)*Math.pow(2,i),s=0));i>=8;e[r+f]=255&a,f+=g,a/=256,i-=8);for(s=s<<i|a,u+=i;u>0;e[r+f]=255&s,f+=g,s/=256,u-=8);e[r+f-g]|=128*p}},{}],38:[function(e,t,r){!function(e,r){"use strict";"function"==typeof define&&define.amd?define(r):"object"==typeof t&&t.exports?t.exports=r():e.log=r()}(this,(function(){"use strict";var e=function(){},t="undefined",r=typeof window!==t&&typeof window.navigator!==t&&/Trident\/|MSIE /.test(window.navigator.userAgent),n=["trace","debug","info","warn","error"];function i(e,t){var r=e[t];if("function"==typeof r.bind)return r.bind(e);try{return Function.prototype.bind.call(r,e)}catch(t){return function(){return Function.prototype.apply.apply(r,[e,arguments])}}}function o(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function s(n){return"debug"===n&&(n="log"),typeof console!==t&&("trace"===n&&r?o:void 0!==console[n]?i(console,n):void 0!==console.log?i(console,"log"):e)}function a(t,r){for(var i=0;i<n.length;i++){var o=n[i];this[o]=i<t?e:this.methodFactory(o,t,r)}this.log=this.debug}function c(e,r,n){return function(){typeof console!==t&&(a.call(this,r,n),this[e].apply(this,arguments))}}function u(e,t,r){return s(e)||c.apply(this,arguments)}function l(e,r,i){var o,s=this,c="loglevel";function l(){var e;if(typeof window!==t&&c){try{e=window.localStorage[c]}catch(e){}if(typeof e===t)try{var r=window.document.cookie,n=r.indexOf(encodeURIComponent(c)+"=");-1!==n&&(e=/^([^;]+)/.exec(r.slice(n))[1])}catch(e){}return void 0===s.levels[e]&&(e=void 0),e}}"string"==typeof e?c+=":"+e:"symbol"==typeof e&&(c=void 0),s.name=e,s.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},s.methodFactory=i||u,s.getLevel=function(){return o},s.setLevel=function(r,i){if("string"==typeof r&&void 0!==s.levels[r.toUpperCase()]&&(r=s.levels[r.toUpperCase()]),!("number"==typeof r&&r>=0&&r<=s.levels.SILENT))throw"log.setLevel() called with invalid level: "+r;if(o=r,!1!==i&&function(e){var r=(n[e]||"silent").toUpperCase();if(typeof window!==t&&c){try{return void(window.localStorage[c]=r)}catch(e){}try{window.document.cookie=encodeURIComponent(c)+"="+r+";"}catch(e){}}}(r),a.call(s,r,e),typeof console===t&&r<s.levels.SILENT)return"No console available for logging"},s.setDefaultLevel=function(e){l()||s.setLevel(e,!1)},s.enableAll=function(e){s.setLevel(s.levels.TRACE,e)},s.disableAll=function(e){s.setLevel(s.levels.SILENT,e)};var d=l();null==d&&(d=null==r?"WARN":r),s.setLevel(d,!1)}var d=new l,h={};d.getLogger=function(e){if("symbol"!=typeof e&&"string"!=typeof e||""===e)throw new TypeError("You must supply a name when creating a logger.");var t=h[e];return t||(t=h[e]=new l(e,d.getLevel(),d.methodFactory)),t};var f=typeof window!==t?window.log:void 0;return d.noConflict=function(){return typeof window!==t&&window.log===d&&(window.log=f),d},d.getLoggers=function(){return h},d.default=d,d}))},{}],39:[function(e,t,r){"use strict";const n=e("retry"),i=["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Network request failed"];class o extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,({message:e}=e)):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}}const s=(e,t)=>new Promise(((r,s)=>{t={onFailedAttempt:()=>{},retries:10,...t};const a=n.operation(t);a.attempt((async n=>{try{r(await e(n))}catch(e){if(!(e instanceof Error))return void s(new TypeError(`Non-error was thrown: "${e}". You should only throw errors.`));if(e instanceof o)a.stop(),s(e.originalError);else if(e instanceof TypeError&&(c=e.message,!i.includes(c)))a.stop(),s(e);else{((e,t,r)=>{const n=r.retries-(t-1);e.attemptNumber=t,e.retriesLeft=n})(e,n,t);try{await t.onFailedAttempt(e)}catch(e){return void s(e)}a.retry(e)||s(a.mainError())}}var c}))}));t.exports=s,t.exports.default=s,t.exports.AbortError=o},{retry:50}],40:[function(e,t,r){var n,i,o=t.exports={};function s(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function c(e){if(n===setTimeout)return setTimeout(e,0);if((n===s||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:s}catch(e){n=s}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(e){i=a}}();var u,l=[],d=!1,h=-1;function f(){d&&u&&(d=!1,u.length?l=u.concat(l):h=-1,l.length&&g())}function g(){if(!d){var e=c(f);d=!0;for(var t=l.length;t;){for(u=l,l=[];++h<t;)u&&u[h].run();h=-1,t=l.length}u=null,d=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function v(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];l.push(new p(e,t)),1!==l.length||d||c(g)},p.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=v,o.addListener=v,o.once=v,o.off=v,o.removeListener=v,o.removeAllListeners=v,o.emit=v,o.prependListener=v,o.prependOnceListener=v,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},{}],41:[function(e,t,r){"use strict";var n=String.prototype.replace,i=/%20/g,o="RFC1738",s="RFC3986";t.exports={default:s,formatters:{RFC1738:function(e){return n.call(e,i,"+")},RFC3986:function(e){return String(e)}},RFC1738:o,RFC3986:s}},{}],42:[function(e,t,r){"use strict";var n=e("./stringify"),i=e("./parse"),o=e("./formats");t.exports={formats:o,parse:i,stringify:n}},{"./formats":41,"./parse":43,"./stringify":44}],43:[function(e,t,r){"use strict";var n=e("./utils"),i=Object.prototype.hasOwnProperty,o=Array.isArray,s={allowDots:!1,allowPrototypes:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:n.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},a=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},c=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},u=function(e,t,r,n){if(e){var o=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,s=/(\[[^[\]]*])/g,a=r.depth>0&&/(\[[^[\]]*])/.exec(o),u=a?o.slice(0,a.index):o,l=[];if(u){if(!r.plainObjects&&i.call(Object.prototype,u)&&!r.allowPrototypes)return;l.push(u)}for(var d=0;r.depth>0&&null!==(a=s.exec(o))&&d<r.depth;){if(d+=1,!r.plainObjects&&i.call(Object.prototype,a[1].slice(1,-1))&&!r.allowPrototypes)return;l.push(a[1])}return a&&l.push("["+o.slice(a.index)+"]"),function(e,t,r,n){for(var i=n?t:c(t,r),o=e.length-1;o>=0;--o){var s,a=e[o];if("[]"===a&&r.parseArrays)s=[].concat(i);else{s=r.plainObjects?Object.create(null):{};var u="["===a.charAt(0)&&"]"===a.charAt(a.length-1)?a.slice(1,-1):a,l=parseInt(u,10);r.parseArrays||""!==u?!isNaN(l)&&a!==u&&String(l)===u&&l>=0&&r.parseArrays&&l<=r.arrayLimit?(s=[])[l]=i:s[u]=i:s={0:i}}i=s}return i}(l,t,r,n)}};t.exports=function(e,t){var r=function(e){if(!e)return s;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?s.charset:e.charset;return{allowDots:void 0===e.allowDots?s.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:s.allowPrototypes,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:s.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:s.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:s.comma,decoder:"function"==typeof e.decoder?e.decoder:s.decoder,delimiter:"string"==typeof e.delimiter||n.isRegExp(e.delimiter)?e.delimiter:s.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:s.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:s.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:s.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:s.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:s.strictNullHandling}}(t);if(""===e||null==e)return r.plainObjects?Object.create(null):{};for(var l="string"==typeof e?function(e,t){var r,u={},l=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,d=t.parameterLimit===1/0?void 0:t.parameterLimit,h=l.split(t.delimiter,d),f=-1,g=t.charset;if(t.charsetSentinel)for(r=0;r<h.length;++r)0===h[r].indexOf("utf8=")&&("utf8=%E2%9C%93"===h[r]?g="utf-8":"utf8=%26%2310003%3B"===h[r]&&(g="iso-8859-1"),f=r,r=h.length);for(r=0;r<h.length;++r)if(r!==f){var p,v,y=h[r],m=y.indexOf("]="),b=-1===m?y.indexOf("="):m+1;-1===b?(p=t.decoder(y,s.decoder,g,"key"),v=t.strictNullHandling?null:""):(p=t.decoder(y.slice(0,b),s.decoder,g,"key"),v=n.maybeMap(c(y.slice(b+1),t),(function(e){return t.decoder(e,s.decoder,g,"value")}))),v&&t.interpretNumericEntities&&"iso-8859-1"===g&&(v=a(v)),y.indexOf("[]=")>-1&&(v=o(v)?[v]:v),i.call(u,p)?u[p]=n.combine(u[p],v):u[p]=v}return u}(e,r):e,d=r.plainObjects?Object.create(null):{},h=Object.keys(l),f=0;f<h.length;++f){var g=h[f],p=u(g,l[g],r,"string"==typeof e);d=n.merge(d,p,r)}return n.compact(d)}},{"./utils":45}],44:[function(e,t,r){"use strict";var n=e("./utils"),i=e("./formats"),o=Object.prototype.hasOwnProperty,s={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},a=Array.isArray,c=Array.prototype.push,u=function(e,t){c.apply(e,a(t)?t:[t])},l=Date.prototype.toISOString,d=i.default,h={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:n.encode,encodeValuesOnly:!1,format:d,formatter:i.formatters[d],indices:!1,serializeDate:function(e){return l.call(e)},skipNulls:!1,strictNullHandling:!1},f=function e(t,r,i,o,s,c,l,d,f,g,p,v,y,m){var b,S=t;if("function"==typeof l?S=l(r,S):S instanceof Date?S=g(S):"comma"===i&&a(S)&&(S=n.maybeMap(S,(function(e){return e instanceof Date?g(e):e}))),null===S){if(o)return c&&!y?c(r,h.encoder,m,"key",p):r;S=""}if("string"==typeof(b=S)||"number"==typeof b||"boolean"==typeof b||"symbol"==typeof b||"bigint"==typeof b||n.isBuffer(S))return c?[v(y?r:c(r,h.encoder,m,"key",p))+"="+v(c(S,h.encoder,m,"value",p))]:[v(r)+"="+v(String(S))];var _,E=[];if(void 0===S)return E;if("comma"===i&&a(S))_=[{value:S.length>0?S.join(",")||null:void 0}];else if(a(l))_=l;else{var k=Object.keys(S);_=d?k.sort(d):k}for(var w=0;w<_.length;++w){var I=_[w],T="object"==typeof I&&void 0!==I.value?I.value:S[I];if(!s||null!==T){var R=a(S)?"function"==typeof i?i(r,I):r:r+(f?"."+I:"["+I+"]");u(E,e(T,R,i,o,s,c,l,d,f,g,p,v,y,m))}}return E};t.exports=function(e,t){var r,n=e,c=function(e){if(!e)return h;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||h.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var r=i.default;if(void 0!==e.format){if(!o.call(i.formatters,e.format))throw new TypeError("Unknown format option provided.");r=e.format}var n=i.formatters[r],s=h.filter;return("function"==typeof e.filter||a(e.filter))&&(s=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:h.addQueryPrefix,allowDots:void 0===e.allowDots?h.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:h.charsetSentinel,delimiter:void 0===e.delimiter?h.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:h.encode,encoder:"function"==typeof e.encoder?e.encoder:h.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:h.encodeValuesOnly,filter:s,format:r,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:h.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:h.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:h.strictNullHandling}}(t);"function"==typeof c.filter?n=(0,c.filter)("",n):a(c.filter)&&(r=c.filter);var l,d=[];if("object"!=typeof n||null===n)return"";l=t&&t.arrayFormat in s?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var g=s[l];r||(r=Object.keys(n)),c.sort&&r.sort(c.sort);for(var p=0;p<r.length;++p){var v=r[p];c.skipNulls&&null===n[v]||u(d,f(n[v],v,g,c.strictNullHandling,c.skipNulls,c.encode?c.encoder:null,c.filter,c.sort,c.allowDots,c.serializeDate,c.format,c.formatter,c.encodeValuesOnly,c.charset))}var y=d.join(c.delimiter),m=!0===c.addQueryPrefix?"?":"";return c.charsetSentinel&&("iso-8859-1"===c.charset?m+="utf8=%26%2310003%3B&":m+="utf8=%E2%9C%93&"),y.length>0?m+y:""}},{"./formats":41,"./utils":45}],45:[function(e,t,r){"use strict";var n=e("./formats"),i=Object.prototype.hasOwnProperty,o=Array.isArray,s=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),a=function(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},n=0;n<e.length;++n)void 0!==e[n]&&(r[n]=e[n]);return r};t.exports={arrayToObject:a,assign:function(e,t){return Object.keys(t).reduce((function(e,r){return e[r]=t[r],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],n=0;n<t.length;++n)for(var i=t[n],s=i.obj[i.prop],a=Object.keys(s),c=0;c<a.length;++c){var u=a[c],l=s[u];"object"==typeof l&&null!==l&&-1===r.indexOf(l)&&(t.push({obj:s,prop:u}),r.push(l))}return function(e){for(;e.length>1;){var t=e.pop(),r=t.obj[t.prop];if(o(r)){for(var n=[],i=0;i<r.length;++i)void 0!==r[i]&&n.push(r[i]);t.obj[t.prop]=n}}}(t),e},decode:function(e,t,r){var n=e.replace(/\+/g," ");if("iso-8859-1"===r)return n.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(n)}catch(e){return n}},encode:function(e,t,r,i,o){if(0===e.length)return e;var a=e;if("symbol"==typeof e?a=Symbol.prototype.toString.call(e):"string"!=typeof e&&(a=String(e)),"iso-8859-1"===r)return escape(a).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var c="",u=0;u<a.length;++u){var l=a.charCodeAt(u);45===l||46===l||95===l||126===l||l>=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||o===n.RFC1738&&(40===l||41===l)?c+=a.charAt(u):l<128?c+=s[l]:l<2048?c+=s[192|l>>6]+s[128|63&l]:l<55296||l>=57344?c+=s[224|l>>12]+s[128|l>>6&63]+s[128|63&l]:(u+=1,l=65536+((1023&l)<<10|1023&a.charCodeAt(u)),c+=s[240|l>>18]+s[128|l>>12&63]+s[128|l>>6&63]+s[128|63&l])}return c},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(o(e)){for(var r=[],n=0;n<e.length;n+=1)r.push(t(e[n]));return r}return t(e)},merge:function e(t,r,n){if(!r)return t;if("object"!=typeof r){if(o(t))t.push(r);else{if(!t||"object"!=typeof t)return[t,r];(n&&(n.plainObjects||n.allowPrototypes)||!i.call(Object.prototype,r))&&(t[r]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(r);var s=t;return o(t)&&!o(r)&&(s=a(t,n)),o(t)&&o(r)?(r.forEach((function(r,o){if(i.call(t,o)){var s=t[o];s&&"object"==typeof s&&r&&"object"==typeof r?t[o]=e(s,r,n):t.push(r)}else t[o]=r})),t):Object.keys(r).reduce((function(t,o){var s=r[o];return i.call(t,o)?t[o]=e(t[o],s,n):t[o]=s,t}),s)}}},{"./formats":41}],46:[function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,r,o){t=t||"&",r=r||"=";var s={};if("string"!=typeof e||0===e.length)return s;var a=/\+/g;e=e.split(t);var c=1e3;o&&"number"==typeof o.maxKeys&&(c=o.maxKeys);var u=e.length;c>0&&u>c&&(u=c);for(var l=0;l<u;++l){var d,h,f,g,p=e[l].replace(a,"%20"),v=p.indexOf(r);v>=0?(d=p.substr(0,v),h=p.substr(v+1)):(d=p,h=""),f=decodeURIComponent(d),g=decodeURIComponent(h),n(s,f)?i(s[f])?s[f].push(g):s[f]=[s[f],g]:s[f]=g}return s};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],47:[function(e,t,r){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};t.exports=function(e,t,r,a){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?o(s(e),(function(s){var a=encodeURIComponent(n(s))+r;return i(e[s])?o(e[s],(function(e){return a+encodeURIComponent(n(e))})).join(t):a+encodeURIComponent(n(e[s]))})).join(t):a?encodeURIComponent(n(a))+r+encodeURIComponent(n(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function o(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n<e.length;n++)r.push(t(e[n],n));return r}var s=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},{}],48:[function(e,t,r){"use strict";r.decode=r.parse=e("./decode"),r.encode=r.stringify=e("./encode")},{"./decode":46,"./encode":47}],49:[function(e,t,r){var n=function(e){"use strict";var t,r=Object.prototype,n=r.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",a=i.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var i=t&&t.prototype instanceof v?t:v,o=Object.create(i.prototype),s=new C(n||[]);return o._invoke=function(e,t,r){var n=d;return function(i,o){if(n===f)throw new Error("Generator is already running");if(n===g){if("throw"===i)throw o;return D()}for(r.method=i,r.arg=o;;){var s=r.delegate;if(s){var a=I(s,r);if(a){if(a===p)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===d)throw n=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=f;var c=l(e,t,r);if("normal"===c.type){if(n=r.done?g:h,c.arg===p)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=g,r.method="throw",r.arg=c.arg)}}}(e,r,s),o}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var d="suspendedStart",h="suspendedYield",f="executing",g="completed",p={};function v(){}function y(){}function m(){}var b={};b[o]=function(){return this};var S=Object.getPrototypeOf,_=S&&S(S(O([])));_&&_!==r&&n.call(_,o)&&(b=_);var E=m.prototype=v.prototype=Object.create(b);function k(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function r(i,o,s,a){var c=l(e[i],e,o);if("throw"!==c.type){var u=c.arg,d=u.value;return d&&"object"==typeof d&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,s,a)}),(function(e){r("throw",e,s,a)})):t.resolve(d).then((function(e){u.value=e,s(u)}),(function(e){return r("throw",e,s,a)}))}a(c.arg)}var i;this._invoke=function(e,n){function o(){return new t((function(t,i){r(e,n,t,i)}))}return i=i?i.then(o,o):o()}}function I(e,r){var n=e.iterator[r.method];if(n===t){if(r.delegate=null,"throw"===r.method){if(e.iterator.return&&(r.method="return",r.arg=t,I(e,r),"throw"===r.method))return p;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var i=l(n,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,p;var o=i.arg;return o?o.done?(r[e.resultName]=o.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,p):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,p)}function T(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 R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function O(e){if(e){var r=e[o];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,s=function r(){for(;++i<e.length;)if(n.call(e,i))return r.value=e[i],r.done=!1,r;return r.value=t,r.done=!0,r};return s.next=s}}return{next:D}}function D(){return{value:t,done:!0}}return y.prototype=E.constructor=m,m.constructor=y,y.displayName=c(m,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,c(e,a,"GeneratorFunction")),e.prototype=Object.create(E),e},e.awrap=function(e){return{__await:e}},k(w.prototype),w.prototype[s]=function(){return this},e.AsyncIterator=w,e.async=function(t,r,n,i,o){void 0===o&&(o=Promise);var s=new w(u(t,r,n,i),o);return e.isGeneratorFunction(r)?s:s.next().then((function(e){return e.done?e.value:s.next()}))},k(E),c(E,a,"Generator"),E[o]=function(){return this},E.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=O,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(R),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},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 r=this;function i(n,i){return a.type="throw",a.arg=e,r.next=n,i&&(r.method="next",r.arg=t),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var c=n.call(s,"catchLoc"),u=n.call(s,"finallyLoc");if(c&&u){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.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,p):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),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;R(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:O(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),p}},e}("object"==typeof t?t.exports:{});try{regeneratorRuntime=n}catch(e){Function("r","regeneratorRuntime = r")(n)}},{}],50:[function(e,t,r){t.exports=e("./lib/retry")},{"./lib/retry":51}],51:[function(e,t,r){var n=e("./retry_operation");r.operation=function(e){var t=r.timeouts(e);return new n(t,{forever:e&&e.forever,unref:e&&e.unref,maxRetryTime:e&&e.maxRetryTime})},r.timeouts=function(e){if(e instanceof Array)return[].concat(e);var t={retries:10,factor:2,minTimeout:1e3,maxTimeout:1/0,randomize:!1};for(var r in e)t[r]=e[r];if(t.minTimeout>t.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],i=0;i<t.retries;i++)n.push(this.createTimeout(i,t));return e&&e.forever&&!n.length&&n.push(this.createTimeout(i,t)),n.sort((function(e,t){return e-t})),n},r.createTimeout=function(e,t){var r=t.randomize?Math.random()+1:1,n=Math.round(r*t.minTimeout*Math.pow(t.factor,e));return n=Math.min(n,t.maxTimeout)},r.wrap=function(e,t,n){if(t instanceof Array&&(n=t,t=null),!n)for(var i in n=[],e)"function"==typeof e[i]&&n.push(i);for(var o=0;o<n.length;o++){var s=n[o],a=e[s];e[s]=function(n){var i=r.operation(t),o=Array.prototype.slice.call(arguments,1),s=o.pop();o.push((function(e){i.retry(e)||(e&&(arguments[0]=i.mainError()),s.apply(this,arguments))})),i.attempt((function(){n.apply(e,o)}))}.bind(e,a),e[s].options=t}}},{"./retry_operation":52}],52:[function(e,t,r){function n(e,t){"boolean"==typeof t&&(t={forever:t}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=t||{},this._maxRetryTime=t&&t.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}t.exports=n,n.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts},n.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null},n.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var t=(new Date).getTime();if(e&&t-this._operationStart>=this._maxRetryTime)return this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var r=this._timeouts.shift();if(void 0===r){if(!this._cachedTimeouts)return!1;this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),r=this._timeouts.shift()}var n=this,i=setTimeout((function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout((function(){n._operationTimeoutCb(n._attempts)}),n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)}),r);return this._options.unref&&i.unref(),!0},n.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var r=this;this._operationTimeoutCb&&(this._timeout=setTimeout((function(){r._operationTimeoutCb()}),r._operationTimeout)),this._operationStart=(new Date).getTime(),this._fn(this._attempts)},n.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)},n.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)},n.prototype.start=n.prototype.try,n.prototype.errors=function(){return this._errors},n.prototype.attempts=function(){return this._attempts},n.prototype.mainError=function(){if(0===this._errors.length)return null;for(var e={},t=null,r=0,n=0;n<this._errors.length;n++){var i=this._errors[n],o=i.message,s=(e[o]||0)+1;e[o]=s,s>=r&&(t=i,r=s)}return t}},{}],53:[function(e,t,r){
|
||
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
||
var n=e("buffer"),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function s(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,r),r.Buffer=s),s.prototype=Object.create(i.prototype),o(i,s),s.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},s.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},s.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},s.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},{buffer:34}],54:[function(e,t,r){t.exports={0:"O",1:"l","֭":"֖","֮":"֘","֨":"֙","֤":"֚","᪴":"ۛ","⃛":"ۛ","ؙ":"̓","ࣳ":"̓","̓":"̓","̕":"̓","ُ":"̓","ٝ":"̔","֜":"́","֝":"́","ؘ":"́","݇":"́","́":"́","॔":"́","َ":"́","̀":"̀","॓":"̀","̌":"̆","꙼":"̆","٘":"̆","ٚ":"̆","ͮ":"̆","ۨ":"̆̇","̐":"̆̇","ँ":"̆̇","ঁ":"̆̇","ઁ":"̆̇","ଁ":"̆̇","ఀ":"̆̇","ಁ":"̆̇","ഁ":"̆̇","𑒿":"̆̇","᳐":"̂","̑":"̂","ٛ":"̂","߮":"̂","꛰":"̂","֯":"̊","۟":"̊","៓":"̊","゚":"̊","ْ":"̊","ஂ":"̊","ံ":"̊","ំ":"̊","𑌀":"̊","ํ":"̊","ໍ":"̊","ͦ":"̊","ⷪ":"̊","࣫":"̈","߳":"̈","ً":"̋","ࣰ":"̋","͂":"̃","ٓ":"̃","ׄ":"̇","۬":"̇","݀":"̇","࣪":"̇","݁":"̇","͘":"̇","ֹ":"̇","ֺ":"̇","ׂ":"̇","ׁ":"̇","߭":"̇","ं":"̇","ਂ":"̇","ં":"̇","்":"̇","̷":"̸","᪷":"̨","̢":"̨","ͅ":"̨","᳒":"̄","̅":"̄","ٙ":"̄","߫":"̄","꛱":"̄","᳚":"̎","ٗ":"̒","͗":"͐","ࣿ":"͐","ࣸ":"͐","ऀ":"͒","᳭":"̖","᳜":"̩","ٖ":"̩","᳕":"̫","͇":"̳","ࣹ":"͔","ࣺ":"͕","゛":"゙","゜":"゚","̶":"̵","〬":"̉","ׅ":"̣","࣭":"̣","᳝":"̣","ִ":"̣","ٜ":"̣","़":"̣","়":"̣","਼":"̣","઼":"̣","଼":"̣","𑇊":"̣","𑓃":"̣","𐨺":"̣","࣮":"̤","᳞":"̤","༷":"̥","〭":"̥","̧":"̦","̡":"̦","̹":"̦","᳙":"̭","᳘":"̮","॒":"̱","̠":"̱","ࣱ":"ٌ","ࣨ":"ٌ","ࣥ":"ٌ","ﱞ":"ﹲّ","ࣲ":"ٍ","ﱟ":"ﹴّ","ﳲ":"ﹷّ","ﱠ":"ﹶّ","ﳳ":"ﹹّ","ﱡ":"ﹸّ","ؚ":"ِ","̗":"ِ","ﳴ":"ﹻّ","ﱢ":"ﹺّ","ﱣ":"ﹼٰ","ٟ":"ٕ","̍":"ٰ","݂":"ܼ","ਃ":"ঃ","ః":"ঃ","ಃ":"ঃ","ഃ":"ঃ","ඃ":"ঃ","း":"ঃ","𑓁":"ঃ","់":"่","່":"่","້":"้","໊":"๊","໋":"๋","꙯":"⃩","\u2028":" ","\u2029":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" ","ߺ":"_","﹍":"_","﹎":"_","﹏":"_","‐":"-","‑":"-","‒":"-","–":"-","﹘":"-","۔":"-","⁃":"-","˗":"-","−":"-","➖":"-","Ⲻ":"-","⨩":"-̓","⸚":"-̈","﬩":"-̇","∸":"-̇","⨪":"-̣","꓾":"-.","~":"〜","؍":",","٫":",","‚":",","¸":",","ꓹ":",","⸲":"،","٬":"،",";":";","⸵":"؛","ः":":","ઃ":":",":":":","։":":","܃":":","܄":":","᛬":":","︰":":","᠃":":","᠉":":","⁚":":","׃":":","˸":":","꞉":":","∶":":","ː":":","ꓽ":":","⩴":"::=","⧴":":→","!":"!","ǃ":"!","ⵑ":"!","‼":"!!","⁉":"!?","ʔ":"?","Ɂ":"?","ॽ":"?","Ꭾ":"?","ꛫ":"?","⁈":"?!","⁇":"??","⸮":"؟","𝅭":".","․":".","܁":".","܂":".","꘎":".","𐩐":".","٠":".","۰":".","ꓸ":".","ꓻ":".,","‥":"..","ꓺ":"..","…":"...","꛴":"꛳꛳","・":"·","・":"·","᛫":"·","·":"·","⸱":"·","𐄁":"·","•":"·","‧":"·","∙":"·","⋅":"·","ꞏ":"·","ᐧ":"·","⋯":"···","ⵈ":"···","ᑄ":"·<","⋗":"·>","ᐷ":"·>","ᑀ":"·>","ᔯ":"·4","ᑾ":"·b","ᒀ":"·ḃ","ᑺ":"·d","ᒘ":"·J","ᒶ":"·L","ᑶ":"·P","ᑗ":"·U","ᐺ":"·V","ᐼ":"·Ʌ","ᒮ":"·Γ","ᐎ":"·Δ","ᑙ":"·Ո","ᐌ":"·ᐁ","ᐐ":"·ᐄ","ᐒ":"·ᐅ","ᐔ":"·ᐆ","ᐗ":"·ᐊ","ᐙ":"·ᐋ","ᐾ":"·ᐲ","ᑂ":"·ᐴ","ᑆ":"·ᐹ","ᑛ":"·ᑏ","ᑔ":"·ᑐ","ᑝ":"·ᑐ","ᑟ":"·ᑑ","ᑡ":"·ᑕ","ᑣ":"·ᑖ","ᑴ":"·ᑫ","ᑸ":"·ᑮ","ᑼ":"·ᑰ","ᒒ":"·ᒉ","ᒔ":"·ᒋ","ᒖ":"·ᒌ","ᒚ":"·ᒎ","ᒜ":"·ᒐ","ᒞ":"·ᒑ","ᒬ":"·ᒣ","ᒰ":"·ᒦ","ᒲ":"·ᒧ","ᒴ":"·ᒨ","ᒸ":"·ᒫ","ᓉ":"·ᓀ","ᣆ":"·ᓂ","ᣈ":"·ᓃ","ᣊ":"·ᓄ","ᣌ":"·ᓅ","ᓋ":"·ᓇ","ᓍ":"·ᓈ","ᓜ":"·ᓓ","ᓞ":"·ᓕ","ᓠ":"·ᓖ","ᓢ":"·ᓗ","ᓤ":"·ᓘ","ᓦ":"·ᓚ","ᓨ":"·ᓛ","ᓶ":"·ᓭ","ᓸ":"·ᓯ","ᓺ":"·ᓰ","ᓼ":"·ᓱ","ᓾ":"·ᓲ","ᔀ":"·ᓴ","ᔂ":"·ᓵ","ᔗ":"·ᔐ","ᔙ":"·ᔑ","ᔛ":"·ᔒ","ᔝ":"·ᔓ","ᔟ":"·ᔔ","ᔡ":"·ᔕ","ᔣ":"·ᔖ","ᔱ":"·ᔨ","ᔳ":"·ᔩ","ᔵ":"·ᔪ","ᔷ":"·ᔫ","ᔹ":"·ᔭ","ᔻ":"·ᔮ","ᣎ":"·ᕃ","ᣏ":"·ᕆ","ᣐ":"·ᕇ","ᣑ":"·ᕈ","ᣒ":"·ᕉ","ᣓ":"·ᕋ","ᕎ":"·ᕌ","ᕛ":"·ᕚ","ᕨ":"·ᕧ","ᢳ":"·ᢱ","ᢶ":"·ᢴ","ᢹ":"·ᢸ","ᣂ":"·ᣀ","꠰":"।","॥":"।।","᰼":"᰻᰻","။":"၊၊","᪩":"᪨᪨","᪫":"᪪᪨","᭟":"᭞᭞","𐩗":"𐩖𐩖","𑑌":"𑑋𑑋","𑙂":"𑙁𑙁","𑱂":"𑱁𑱁","᱿":"᱾᱾","՝":"'","'":"'","‘":"'","’":"'","‛":"'","′":"'","‵":"'","՚":"'","׳":"'","`":"'","`":"'","`":"'","´":"'","΄":"'","´":"'","᾽":"'","᾿":"'","῾":"'","ʹ":"'","ʹ":"'","ˈ":"'","ˊ":"'","ˋ":"'","˴":"'","ʻ":"'","ʽ":"'","ʼ":"'","ʾ":"'","ꞌ":"'","י":"'","ߴ":"'","ߵ":"'","ᑊ":"'","ᛌ":"'","𖽑":"'","𖽒":"'","᳓":"''",'"':"''",""":"''","“":"''","”":"''","‟":"''","″":"''","‶":"''","〃":"''","״":"''","˝":"''","ʺ":"''","˶":"''","ˮ":"''","ײ":"''","‴":"'''","‷":"'''","⁗":"''''","Ɓ":"'B","Ɗ":"'D","ʼn":"'n","Ƥ":"'P","Ƭ":"'T","Ƴ":"'Y","[":"(","❨":"(","❲":"(","〔":"(","﴾":"(","⸨":"((","㈠":"(ー)","⑵":"(2)","⒇":"(2O)","⑶":"(3)","⑷":"(4)","⑸":"(5)","⑹":"(6)","⑺":"(7)","⑻":"(8)","⑼":"(9)","⒜":"(a)","🄐":"(A)","⒝":"(b)","🄑":"(B)","⒞":"(c)","🄒":"(C)","⒟":"(d)","🄓":"(D)","⒠":"(e)","🄔":"(E)","⒡":"(f)","🄕":"(F)","⒢":"(g)","🄖":"(G)","⒣":"(h)","🄗":"(H)","⒤":"(i)","⒥":"(j)","🄙":"(J)","⒦":"(k)","🄚":"(K)","⑴":"(l)","🄘":"(l)","⒧":"(l)","🄛":"(L)","⑿":"(l2)","⒀":"(l3)","⒁":"(l4)","⒂":"(l5)","⒃":"(l6)","⒄":"(l7)","⒅":"(l8)","⒆":"(l9)","⑾":"(ll)","⑽":"(lO)","🄜":"(M)","⒩":"(n)","🄝":"(N)","⒪":"(o)","🄞":"(O)","⒫":"(p)","🄟":"(P)","⒬":"(q)","🄠":"(Q)","⒭":"(r)","🄡":"(R)","⒨":"(rn)","⒮":"(s)","🄢":"(S)","🄪":"(S)","⒯":"(t)","🄣":"(T)","⒰":"(u)","🄤":"(U)","⒱":"(v)","🄥":"(V)","⒲":"(w)","🄦":"(W)","⒳":"(x)","🄧":"(X)","⒴":"(y)","🄨":"(Y)","⒵":"(z)","🄩":"(Z)","㈀":"(ᄀ)","㈎":"(가)","㈁":"(ᄂ)","㈏":"(나)","㈂":"(ᄃ)","㈐":"(다)","㈃":"(ᄅ)","㈑":"(라)","㈄":"(ᄆ)","㈒":"(마)","㈅":"(ᄇ)","㈓":"(바)","㈆":"(ᄉ)","㈔":"(사)","㈇":"(ᄋ)","㈕":"(아)","㈝":"(오전)","㈞":"(오후)","㈈":"(ᄌ)","㈖":"(자)","㈜":"(주)","㈉":"(ᄎ)","㈗":"(차)","㈊":"(ᄏ)","㈘":"(카)","㈋":"(ᄐ)","㈙":"(타)","㈌":"(ᄑ)","㈚":"(파)","㈍":"(ᄒ)","㈛":"(하)","㈦":"(七)","㈢":"(三)","🉁":"(三)","㈨":"(九)","㈡":"(二)","🉂":"(二)","㈤":"(五)","㈹":"(代)","㈽":"(企)","㉁":"(休)","㈧":"(八)","㈥":"(六)","㈸":"(労)","🉇":"(勝)","㈩":"(十)","㈿":"(協)","㈴":"(名)","㈺":"(呼)","㈣":"(四)","㈯":"(土)","㈻":"(学)","🉃":"(安)","🉅":"(打)","🉈":"(敗)","㈰":"(日)","㈪":"(月)","㈲":"(有)","㈭":"(木)","🉀":"(本)","㈱":"(株)","㈬":"(水)","㈫":"(火)","🉄":"(点)","㈵":"(特)","🉆":"(盗)","㈼":"(監)","㈳":"(社)","㈷":"(祝)","㉀":"(祭)","㉂":"(自)","㉃":"(至)","㈶":"(財)","㈾":"(資)","㈮":"(金)","]":")","❩":")","❳":")","〕":")","﴿":")","⸩":"))","❴":"{","𝄔":"{","❵":"}","〚":"⟦","〛":"⟧","⟨":"❬","〈":"❬","〈":"❬","㇛":"❬","く":"❬","𡿨":"❬","⟩":"❭","〉":"❭","〉":"❭","^":"︿","⸿":"¶","⁎":"*","٭":"*","∗":"*","𐌟":"*","᜵":"/","⁁":"/","∕":"/","⁄":"/","╱":"/","⟋":"/","⧸":"/","𝈺":"/","㇓":"/","〳":"/","Ⳇ":"/","ノ":"/","丿":"/","⼃":"/","⧶":"/̄","⫽":"//","⫻":"///","\":"\\","﹨":"\\","∖":"\\","⟍":"\\","⧵":"\\","⧹":"\\","𝈏":"\\","𝈻":"\\","㇔":"\\","丶":"\\","⼂":"\\","⳹":"\\\\","⑊":"\\\\","⟈":"\\ᑕ","ꝸ":"&","૰":"॰","𑂻":"॰","𑇇":"॰","⚬":"॰","𑇛":"꣼","៙":"๏","៕":"๚","៚":"๛","༌":"་","༎":"།།","˄":"^","ˆ":"^","꙾":"ˇ","˘":"ˇ","‾":"ˉ","﹉":"ˉ","﹊":"ˉ","﹋":"ˉ","﹌":"ˉ","¯":"ˉ"," ̄":"ˉ","▔":"ˉ","ъ":"ˉb","ꙑ":"ˉbi","͵":"ˏ","˻":"˪","꜖":"˪","꜔":"˫","。":"˳","⸰":"°","˚":"°","∘":"°","○":"°","◦":"°","⍜":"°̲","⍤":"°̈","℃":"°C","℉":"°F","௵":"௳","༛":"༚༚","༟":"༚༝","࿎":"༝༚","༞":"༝༝","Ⓒ":"©","Ⓡ":"®","Ⓟ":"℗","𝈛":"⅄","⯬":"↞","⯭":"↟","⯮":"↠","⯯":"↡","↵":"↲","⥥":"⇃⇂","⥯":"⇃ᛚ","𝛛":"∂","𝜕":"∂","𝝏":"∂","𝞉":"∂","𝟃":"∂","𞣌":"∂","𞣍":"∂̵","ð":"∂̵","⌀":"∅","𝛁":"∇","𝛻":"∇","𝜵":"∇","𝝯":"∇","𝞩":"∇","𑢨":"∇","⍢":"∇̈","⍫":"∇̴","█":"∎","■":"∎","⨿":"∐","᛭":"+","➕":"+","𐊛":"+","⨣":"+̂","⨢":"+̊","⨤":"+̃","∔":"+̇","⨥":"+̣","⨦":"+̰","⨧":"+₂","➗":"÷","‹":"<","❮":"<","˂":"<","𝈶":"<","ᐸ":"<","ᚲ":"<","⋖":"<·","Ⲵ":"<·","ᑅ":"<·","≪":"<<","⋘":"<<<","᐀":"=","⹀":"=","゠":"=","꓿":"=","≚":"=̆","≙":"=̂","≗":"=̊","≐":"=̇","≑":"=̣̇","⩮":"=⃰","⩵":"==","⩶":"===","≞":"=ͫ","›":">","❯":">","˃":">","𝈷":">","ᐳ":">","𖼿":">","ᑁ":">·","⪥":"><","≫":">>","⨠":">>","⋙":">>>","⁓":"~","˜":"~","῀":"~","∼":"~","⍨":"~̈","⸞":"~̇","⩪":"~̇","⸟":"~̣","𞣈":"∠","⋀":"∧","∯":"∮∮","∰":"∮∮∮","⸫":"∴","⸪":"∵","⸬":"∷","𑇞":"≈","♎":"≏","🝞":"≏","≣":"≡","⨃":"⊍","⨄":"⊎","𝈸":"⊏","𝈹":"⊐","⨅":"⊓","⨆":"⊔","⨂":"⊗","⍟":"⊛","🝱":"⊠","🝕":"⊡","◁":"⊲","▷":"⊳","⍣":"⋆̈","︴":"⌇","◠":"⌒","⨽":"⌙","⌥":"⌤","⧇":"⌻","◎":"⌾","⦾":"⌾","⧅":"⍂","⦰":"⍉","⏃":"⍋","⏂":"⍎","⏁":"⍕","⏆":"⍭","☸":"⎈","︵":"⏜","︶":"⏝","︷":"⏞","︸":"⏟","︹":"⏠","︺":"⏡","▱":"⏥","⏼":"⏻","︱":"│","|":"│","┃":"│","┏":"┌","┣":"├","▐":"▌","▗":"▖","▝":"▘","☐":"□","■":"▪","▸":"▶","►":"▶","⳩":"☧","🜊":"☩","🌒":"☽","🌙":"☽","⏾":"☾","🌘":"☾","⧙":"⦚","🜺":"⧟","⨾":"⨟","𐆠":"⳨","♩":"𝅘𝅥","♪":"𝅘𝅥𝅮","⓪":"🄍","↺":"🄎","˙":"ॱ","ൎ":"ॱ","-":"ー","—":"ー","―":"ー","─":"ー","━":"ー","㇐":"ー","ꟷ":"ー","ᅳ":"ー","ㅡ":"ー","一":"ー","⼀":"ー","ᆖ":"ーー","ힹ":"ーᅡ","ힺ":"ーᅥ","ힻ":"ーᅥ丨","ힼ":"ーᅩ","ᆕ":"ーᅮ","ᅴ":"ー丨","ㅢ":"ー丨","ᆗ":"ー丨ᅮ","🄏":"$⃠","₤":"£","〒":"₸","〶":"₸","᭜":"᭐","꧆":"꧐","𑓑":"১","೧":"౧","ၥ":"၁","①":"➀","⑩":"➉","⏨":"₁₀","𝟐":"2","𝟚":"2","𝟤":"2","𝟮":"2","𝟸":"2","🯲":"2","Ꝛ":"2","Ƨ":"2","Ϩ":"2","Ꙅ":"2","ᒿ":"2","ꛯ":"2","ꧏ":"٢","۲":"٢","૨":"२","𑓒":"২","೨":"౨","②":"➁","ƻ":"2̵","🄃":"2,","⒉":"2.","㏵":"22日","㍮":"22点","㏶":"23日","㍯":"23点","㏷":"24日","㍰":"24点","㏸":"25日","㏹":"26日","㏺":"27日","㏻":"28日","㏼":"29日","㏴":"2l日","㍭":"2l点","⒛":"2O.","㏳":"2O日","㍬":"2O点","෩":"෨ා","෯":"෨ී","㏡":"2日","㋁":"2月","㍚":"2点","𝈆":"3","𝟑":"3","𝟛":"3","𝟥":"3","𝟯":"3","𝟹":"3","🯳":"3","Ɜ":"3","Ȝ":"3","Ʒ":"3","Ꝫ":"3","Ⳍ":"3","З":"3","Ӡ":"3","𖼻":"3","𑣊":"3","۳":"٣","𞣉":"٣","૩":"३","③":"➂","Ҙ":"3̦","🄄":"3,","⒊":"3.","㏾":"3l日","㏽":"3O日","㏢":"3日","㋂":"3月","㍛":"3点","𝟒":"4","𝟜":"4","𝟦":"4","𝟰":"4","𝟺":"4","🯴":"4","Ꮞ":"4","𑢯":"4","۴":"٤","૪":"४","④":"➃","🄅":"4,","⒋":"4.","ᔰ":"4·","㏣":"4日","㋃":"4月","㍜":"4点","𝟓":"5","𝟝":"5","𝟧":"5","𝟱":"5","𝟻":"5","🯵":"5","Ƽ":"5","𑢻":"5","⑤":"➄","🄆":"5,","⒌":"5.","㏤":"5日","㋄":"5月","㍝":"5点","𝟔":"6","𝟞":"6","𝟨":"6","𝟲":"6","𝟼":"6","🯶":"6","Ⳓ":"6","б":"6","Ꮾ":"6","𑣕":"6","۶":"٦","𑓖":"৬","⑥":"➅","🄇":"6,","⒍":"6.","㏥":"6日","㋅":"6月","㍞":"6点","𝈒":"7","𝟕":"7","𝟟":"7","𝟩":"7","𝟳":"7","𝟽":"7","🯷":"7","𐓒":"7","𑣆":"7","⑦":"➆","🄈":"7,","⒎":"7.","㏦":"7日","㋆":"7月","㍟":"7点","ଃ":"8","৪":"8","੪":"8","𞣋":"8","𝟖":"8","𝟠":"8","𝟪":"8","𝟴":"8","𝟾":"8","🯸":"8","ȣ":"8","Ȣ":"8","𐌚":"8","૮":"८","⑧":"➇","🄉":"8,","⒏":"8.","㏧":"8日","㋇":"8月","㍠":"8点","੧":"9","୨":"9","৭":"9","൭":"9","𝟗":"9","𝟡":"9","𝟫":"9","𝟵":"9","𝟿":"9","🯹":"9","Ꝯ":"9","Ⳋ":"9","𑣌":"9","𑢬":"9","𑣖":"9","१":"٩","𑣤":"٩","۹":"٩","೯":"౯","⑨":"➈","🄊":"9,","⒐":"9.","㏨":"9日","㋈":"9月","㍡":"9点","⍺":"a","a":"a","𝐚":"a","𝑎":"a","𝒂":"a","𝒶":"a","𝓪":"a","𝔞":"a","𝕒":"a","𝖆":"a","𝖺":"a","𝗮":"a","𝘢":"a","𝙖":"a","𝚊":"a","ɑ":"a","α":"a","𝛂":"a","𝛼":"a","𝜶":"a","𝝰":"a","𝞪":"a","а":"a","ⷶ":"ͣ","A":"A","𝐀":"A","𝐴":"A","𝑨":"A","𝒜":"A","𝓐":"A","𝔄":"A","𝔸":"A","𝕬":"A","𝖠":"A","𝗔":"A","𝘈":"A","𝘼":"A","𝙰":"A","Α":"A","𝚨":"A","𝛢":"A","𝜜":"A","𝝖":"A","𝞐":"A","А":"A","Ꭺ":"A","ᗅ":"A","ꓮ":"A","𖽀":"A","𐊠":"A","⍶":"a̲","ǎ":"ă","Ǎ":"Ă","ȧ":"å","Ȧ":"Å","ẚ":"ả","℀":"a/c","℁":"a/s","ꜳ":"aa","Ꜳ":"AA","æ":"ae","ӕ":"ae","Æ":"AE","Ӕ":"AE","ꜵ":"ao","Ꜵ":"AO","🜇":"AR","ꜷ":"au","Ꜷ":"AU","ꜹ":"av","ꜻ":"av","Ꜹ":"AV","Ꜻ":"AV","ꜽ":"ay","Ꜽ":"AY","ꭺ":"ᴀ","∀":"Ɐ","𝈗":"Ɐ","ᗄ":"Ɐ","ꓯ":"Ɐ","𐐟":"Ɒ","𝐛":"b","𝑏":"b","𝒃":"b","𝒷":"b","𝓫":"b","𝔟":"b","𝕓":"b","𝖇":"b","𝖻":"b","𝗯":"b","𝘣":"b","𝙗":"b","𝚋":"b","Ƅ":"b","Ь":"b","Ꮟ":"b","ᑲ":"b","ᖯ":"b","B":"B","ℬ":"B","𝐁":"B","𝐵":"B","𝑩":"B","𝓑":"B","𝔅":"B","𝔹":"B","𝕭":"B","𝖡":"B","𝗕":"B","𝘉":"B","𝘽":"B","𝙱":"B","Ꞵ":"B","Β":"B","𝚩":"B","𝛣":"B","𝜝":"B","𝝗":"B","𝞑":"B","В":"B","Ᏼ":"B","ᗷ":"B","ꓐ":"B","𐊂":"B","𐊡":"B","𐌁":"B","ɓ":"b̔","ᑳ":"ḃ","ƃ":"b̄","Ƃ":"b̄","Б":"b̄","ƀ":"b̵","ҍ":"b̵","Ҍ":"b̵","ѣ":"b̵","Ѣ":"b̵","ᑿ":"b·","ᒁ":"ḃ·","ᒈ":"b'","Ы":"bl","в":"ʙ","ᏼ":"ʙ","c":"c","ⅽ":"c","𝐜":"c","𝑐":"c","𝒄":"c","𝒸":"c","𝓬":"c","𝔠":"c","𝕔":"c","𝖈":"c","𝖼":"c","𝗰":"c","𝘤":"c","𝙘":"c","𝚌":"c","ᴄ":"c","ϲ":"c","ⲥ":"c","с":"c","ꮯ":"c","𐐽":"c","ⷭ":"ͨ","🝌":"C","𑣲":"C","𑣩":"C","C":"C","Ⅽ":"C","ℂ":"C","ℭ":"C","𝐂":"C","𝐶":"C","𝑪":"C","𝒞":"C","𝓒":"C","𝕮":"C","𝖢":"C","𝗖":"C","𝘊":"C","𝘾":"C","𝙲":"C","Ϲ":"C","Ⲥ":"C","С":"C","Ꮯ":"C","ꓚ":"C","𐊢":"C","𐌂":"C","𐐕":"C","𐔜":"C","¢":"c̸","ȼ":"c̸","₡":"C⃫","🅮":"C⃠","ç":"c̦","ҫ":"c̦","Ç":"C̦","Ҫ":"C̦","Ƈ":"C'","℅":"c/o","℆":"c/u","🅭":"㏄\t⃝","⋴":"ꞓ","ɛ":"ꞓ","ε":"ꞓ","ϵ":"ꞓ","𝛆":"ꞓ","𝛜":"ꞓ","𝜀":"ꞓ","𝜖":"ꞓ","𝜺":"ꞓ","𝝐":"ꞓ","𝝴":"ꞓ","𝞊":"ꞓ","𝞮":"ꞓ","𝟄":"ꞓ","ⲉ":"ꞓ","є":"ꞓ","ԑ":"ꞓ","ꮛ":"ꞓ","𑣎":"ꞓ","𐐩":"ꞓ","€":"Ꞓ","Ⲉ":"Ꞓ","Є":"Ꞓ","⍷":"ꞓ̲","ͽ":"ꜿ","Ͽ":"Ꜿ","ⅾ":"d","ⅆ":"d","𝐝":"d","𝑑":"d","𝒅":"d","𝒹":"d","𝓭":"d","𝔡":"d","𝕕":"d","𝖉":"d","𝖽":"d","𝗱":"d","𝘥":"d","𝙙":"d","𝚍":"d","ԁ":"d","Ꮷ":"d","ᑯ":"d","ꓒ":"d","Ⅾ":"D","ⅅ":"D","𝐃":"D","𝐷":"D","𝑫":"D","𝒟":"D","𝓓":"D","𝔇":"D","𝔻":"D","𝕯":"D","𝖣":"D","𝗗":"D","𝘋":"D","𝘿":"D","𝙳":"D","Ꭰ":"D","ᗞ":"D","ᗪ":"D","ꓓ":"D","ɗ":"d̔","ɖ":"d̨","ƌ":"d̄","đ":"d̵","Đ":"D̵","Ð":"D̵","Ɖ":"D̵","₫":"ḏ̵","ꝺ":"Ꝺ","ᑻ":"d·","ᒇ":"d'","ʤ":"dȝ","dz":"dz","ʣ":"dz","Dz":"Dz","DZ":"DZ","dž":"dž","Dž":"Dž","DŽ":"DŽ","ʥ":"dʑ","ꭰ":"ᴅ","⸹":"ẟ","δ":"ẟ","𝛅":"ẟ","𝛿":"ẟ","𝜹":"ẟ","𝝳":"ẟ","𝞭":"ẟ","ծ":"ẟ","ᕷ":"ẟ","℮":"e","e":"e","ℯ":"e","ⅇ":"e","𝐞":"e","𝑒":"e","𝒆":"e","𝓮":"e","𝔢":"e","𝕖":"e","𝖊":"e","𝖾":"e","𝗲":"e","𝘦":"e","𝙚":"e","𝚎":"e","ꬲ":"e","е":"e","ҽ":"e","ⷷ":"ͤ","⋿":"E","E":"E","ℰ":"E","𝐄":"E","𝐸":"E","𝑬":"E","𝓔":"E","𝔈":"E","𝔼":"E","𝕰":"E","𝖤":"E","𝗘":"E","𝘌":"E","𝙀":"E","𝙴":"E","Ε":"E","𝚬":"E","𝛦":"E","𝜠":"E","𝝚":"E","𝞔":"E","Е":"E","ⴹ":"E","Ꭼ":"E","ꓰ":"E","𑢦":"E","𑢮":"E","𐊆":"E","ě":"ĕ","Ě":"Ĕ","ɇ":"e̸","Ɇ":"E̸","ҿ":"ę","ꭼ":"ᴇ","ə":"ǝ","ә":"ǝ","∃":"Ǝ","ⴺ":"Ǝ","ꓱ":"Ǝ","ɚ":"ǝ˞","ᴔ":"ǝo","ꭁ":"ǝo̸","ꭂ":"ǝo̵","Ә":"Ə","𝈡":"Ɛ","ℇ":"Ɛ","Ԑ":"Ɛ","Ꮛ":"Ɛ","𖼭":"Ɛ","𐐁":"Ɛ","ᶟ":"ᵋ","ᴈ":"ɜ","з":"ɜ","ҙ":"ɜ̦","𐑂":"ɞ","ꞝ":"ʚ","𐐪":"ʚ","𝐟":"f","𝑓":"f","𝒇":"f","𝒻":"f","𝓯":"f","𝔣":"f","𝕗":"f","𝖋":"f","𝖿":"f","𝗳":"f","𝘧":"f","𝙛":"f","𝚏":"f","ꬵ":"f","ꞙ":"f","ſ":"f","ẝ":"f","ք":"f","𝈓":"F","ℱ":"F","𝐅":"F","𝐹":"F","𝑭":"F","𝓕":"F","𝔉":"F","𝔽":"F","𝕱":"F","𝖥":"F","𝗙":"F","𝘍":"F","𝙁":"F","𝙵":"F","Ꞙ":"F","Ϝ":"F","𝟊":"F","ᖴ":"F","ꓝ":"F","𑣂":"F","𑢢":"F","𐊇":"F","𐊥":"F","𐔥":"F","ƒ":"f̦","Ƒ":"F̦","ᵮ":"f̴","℻":"FAX","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ʩ":"fŋ","ᖵ":"Ⅎ","ꓞ":"Ⅎ","𝈰":"ꟻ","ᖷ":"ꟻ","g":"g","ℊ":"g","𝐠":"g","𝑔":"g","𝒈":"g","𝓰":"g","𝔤":"g","𝕘":"g","𝖌":"g","𝗀":"g","𝗴":"g","𝘨":"g","𝙜":"g","𝚐":"g","ɡ":"g","ᶃ":"g","ƍ":"g","ց":"g","𝐆":"G","𝐺":"G","𝑮":"G","𝒢":"G","𝓖":"G","𝔊":"G","𝔾":"G","𝕲":"G","𝖦":"G","𝗚":"G","𝘎":"G","𝙂":"G","𝙶":"G","Ԍ":"G","Ꮐ":"G","Ᏻ":"G","ꓖ":"G","ᶢ":"ᵍ","ɠ":"g̔","ǧ":"ğ","Ǧ":"Ğ","ǵ":"ģ","ǥ":"g̵","Ǥ":"G̵","Ɠ":"G'","ԍ":"ɢ","ꮐ":"ɢ","ᏻ":"ɢ","h":"h","ℎ":"h","𝐡":"h","𝒉":"h","𝒽":"h","𝓱":"h","𝔥":"h","𝕙":"h","𝖍":"h","𝗁":"h","𝗵":"h","𝘩":"h","𝙝":"h","𝚑":"h","һ":"h","հ":"h","Ꮒ":"h","H":"H","ℋ":"H","ℌ":"H","ℍ":"H","𝐇":"H","𝐻":"H","𝑯":"H","𝓗":"H","𝕳":"H","𝖧":"H","𝗛":"H","𝘏":"H","𝙃":"H","𝙷":"H","Η":"H","𝚮":"H","𝛨":"H","𝜢":"H","𝝜":"H","𝞖":"H","Ⲏ":"H","Н":"H","Ꮋ":"H","ᕼ":"H","ꓧ":"H","𐋏":"H","ᵸ":"ᴴ","ɦ":"h̔","ꚕ":"h̔","Ᏺ":"h̔","Ⱨ":"H̩","Ң":"H̩","ħ":"h̵","ℏ":"h̵","ћ":"h̵","Ħ":"H̵","Ӊ":"H̦","Ӈ":"H̦","н":"ʜ","ꮋ":"ʜ","ң":"ʜ̩","ӊ":"ʜ̦","ӈ":"ʜ̦","Ԋ":"Ƕ","ꮀ":"ⱶ","Ͱ":"Ⱶ","Ꭸ":"Ⱶ","Ꮀ":"Ⱶ","ꚱ":"Ⱶ","ꞕ":"ꜧ","˛":"i","⍳":"i","i":"i","ⅰ":"i","ℹ":"i","ⅈ":"i","𝐢":"i","𝑖":"i","𝒊":"i","𝒾":"i","𝓲":"i","𝔦":"i","𝕚":"i","𝖎":"i","𝗂":"i","𝗶":"i","𝘪":"i","𝙞":"i","𝚒":"i","ı":"i","𝚤":"i","ɪ":"i","ɩ":"i","ι":"i","ι":"i","ͺ":"i","𝛊":"i","𝜄":"i","𝜾":"i","𝝸":"i","𝞲":"i","і":"i","ꙇ":"i","ӏ":"i","ꭵ":"i","Ꭵ":"i","𑣃":"i","ⓛ":"Ⓘ","⍸":"i̲","ǐ":"ĭ","Ǐ":"Ĭ","ɨ":"i̵","ᵻ":"i̵","ᵼ":"i̵","ⅱ":"ii","ⅲ":"iii","ij":"ij","ⅳ":"iv","ⅸ":"ix","j":"j","ⅉ":"j","𝐣":"j","𝑗":"j","𝒋":"j","𝒿":"j","𝓳":"j","𝔧":"j","𝕛":"j","𝖏":"j","𝗃":"j","𝗷":"j","𝘫":"j","𝙟":"j","𝚓":"j","ϳ":"j","ј":"j","J":"J","𝐉":"J","𝐽":"J","𝑱":"J","𝒥":"J","𝓙":"J","𝔍":"J","𝕁":"J","𝕵":"J","𝖩":"J","𝗝":"J","𝘑":"J","𝙅":"J","𝙹":"J","Ʝ":"J","Ϳ":"J","Ј":"J","Ꭻ":"J","ᒍ":"J","ꓙ":"J","ɉ":"j̵","Ɉ":"J̵","ᒙ":"J·","𝚥":"ȷ","յ":"ȷ","ꭻ":"ᴊ","𝐤":"k","𝑘":"k","𝒌":"k","𝓀":"k","𝓴":"k","𝔨":"k","𝕜":"k","𝖐":"k","𝗄":"k","𝗸":"k","𝘬":"k","𝙠":"k","𝚔":"k","K":"K","K":"K","𝐊":"K","𝐾":"K","𝑲":"K","𝒦":"K","𝓚":"K","𝔎":"K","𝕂":"K","𝕶":"K","𝖪":"K","𝗞":"K","𝘒":"K","𝙆":"K","𝙺":"K","Κ":"K","𝚱":"K","𝛫":"K","𝜥":"K","𝝟":"K","𝞙":"K","Ⲕ":"K","К":"K","Ꮶ":"K","ᛕ":"K","ꓗ":"K","𐔘":"K","ƙ":"k̔","Ⱪ":"K̩","Қ":"K̩","₭":"K̵","Ꝁ":"K̵","Ҟ":"K̵","Ƙ":"K'","׀":"l","|":"l","∣":"l","⏽":"l","│":"l","١":"l","۱":"l","𐌠":"l","𞣇":"l","𝟏":"l","𝟙":"l","𝟣":"l","𝟭":"l","𝟷":"l","🯱":"l",I:"l","I":"l","Ⅰ":"l","ℐ":"l","ℑ":"l","𝐈":"l","𝐼":"l","𝑰":"l","𝓘":"l","𝕀":"l","𝕴":"l","𝖨":"l","𝗜":"l","𝘐":"l","𝙄":"l","𝙸":"l","Ɩ":"l","l":"l","ⅼ":"l","ℓ":"l","𝐥":"l","𝑙":"l","𝒍":"l","𝓁":"l","𝓵":"l","𝔩":"l","𝕝":"l","𝖑":"l","𝗅":"l","𝗹":"l","𝘭":"l","𝙡":"l","𝚕":"l","ǀ":"l","Ι":"l","𝚰":"l","𝛪":"l","𝜤":"l","𝝞":"l","𝞘":"l","Ⲓ":"l","І":"l","Ӏ":"l","ו":"l","ן":"l","ا":"l","𞸀":"l","𞺀":"l","ﺎ":"l","ﺍ":"l","ߊ":"l","ⵏ":"l","ᛁ":"l","ꓲ":"l","𖼨":"l","𐊊":"l","𐌉":"l","𝈪":"L","Ⅼ":"L","ℒ":"L","𝐋":"L","𝐿":"L","𝑳":"L","𝓛":"L","𝔏":"L","𝕃":"L","𝕷":"L","𝖫":"L","𝗟":"L","𝘓":"L","𝙇":"L","𝙻":"L","Ⳑ":"L","Ꮮ":"L","ᒪ":"L","ꓡ":"L","𖼖":"L","𑢣":"L","𑢲":"L","𐐛":"L","𐔦":"L","ﴼ":"l̋","ﴽ":"l̋","ł":"l̸","Ł":"L̸","ɭ":"l̨","Ɨ":"l̵","ƚ":"l̵","ɫ":"l̴","إ":"lٕ","ﺈ":"lٕ","ﺇ":"lٕ","ٳ":"lٕ","ŀ":"l·","Ŀ":"l·","ᒷ":"l·","🄂":"l,","⒈":"l.","ױ":"l'","⒓":"l2.","㏫":"l2日","㋋":"l2月","㍤":"l2点","⒔":"l3.","㏬":"l3日","㍥":"l3点","⒕":"l4.","㏭":"l4日","㍦":"l4点","⒖":"l5.","㏮":"l5日","㍧":"l5点","⒗":"l6.","㏯":"l6日","㍨":"l6点","⒘":"l7.","㏰":"l7日","㍩":"l7点","⒙":"l8.","㏱":"l8日","㍪":"l8点","⒚":"l9.","㏲":"l9日","㍫":"l9点","lj":"lj","IJ":"lJ","Lj":"Lj","LJ":"LJ","‖":"ll","∥":"ll","Ⅱ":"ll","ǁ":"ll","װ":"ll","𐆙":"l̵l̵","⒒":"ll.","Ⅲ":"lll","𐆘":"l̵l̵S̵","㏪":"ll日","㋊":"ll月","㍣":"ll点","Ю":"lO","⒑":"lO.","㏩":"lO日","㋉":"lO月","㍢":"lO点","ʪ":"ls","₶":"lt","Ⅳ":"lV","Ⅸ":"lX","ɮ":"lȝ","ʫ":"lz","أ":"lٴ","ﺄ":"lٴ","ﺃ":"lٴ","ٲ":"lٴ","ٵ":"lٴ","ﷳ":"lكبر","ﷲ":"lللّٰo","㏠":"l日","㋀":"l月","㍙":"l点","ⳑ":"ʟ","ꮮ":"ʟ","𐑃":"ʟ","M":"M","Ⅿ":"M","ℳ":"M","𝐌":"M","𝑀":"M","𝑴":"M","𝓜":"M","𝔐":"M","𝕄":"M","𝕸":"M","𝖬":"M","𝗠":"M","𝘔":"M","𝙈":"M","𝙼":"M","Μ":"M","𝚳":"M","𝛭":"M","𝜧":"M","𝝡":"M","𝞛":"M","Ϻ":"M","Ⲙ":"M","М":"M","Ꮇ":"M","ᗰ":"M","ᛖ":"M","ꓟ":"M","𐊰":"M","𐌑":"M","Ӎ":"M̦","🝫":"MB","ⷨ":"ᷟ","𝐧":"n","𝑛":"n","𝒏":"n","𝓃":"n","𝓷":"n","𝔫":"n","𝕟":"n","𝖓":"n","𝗇":"n","𝗻":"n","𝘯":"n","𝙣":"n","𝚗":"n","ո":"n","ռ":"n","N":"N","ℕ":"N","𝐍":"N","𝑁":"N","𝑵":"N","𝒩":"N","𝓝":"N","𝔑":"N","𝕹":"N","𝖭":"N","𝗡":"N","𝘕":"N","𝙉":"N","𝙽":"N","Ν":"N","𝚴":"N","𝛮":"N","𝜨":"N","𝝢":"N","𝞜":"N","Ⲛ":"N","ꓠ":"N","𐔓":"N","𐆎":"N̊","ɳ":"n̨","ƞ":"n̩","η":"n̩","𝛈":"n̩","𝜂":"n̩","𝜼":"n̩","𝝶":"n̩","𝞰":"n̩","Ɲ":"N̦","ᵰ":"n̴","nj":"nj","Nj":"Nj","NJ":"NJ","№":"No","ͷ":"ᴎ","и":"ᴎ","𐑍":"ᴎ","ņ":"ɲ","ం":"o","ಂ":"o","ം":"o","ං":"o","०":"o","੦":"o","૦":"o","௦":"o","౦":"o","೦":"o","൦":"o","๐":"o","໐":"o","၀":"o","٥":"o","۵":"o","o":"o","ℴ":"o","𝐨":"o","𝑜":"o","𝒐":"o","𝓸":"o","𝔬":"o","𝕠":"o","𝖔":"o","𝗈":"o","𝗼":"o","𝘰":"o","𝙤":"o","𝚘":"o","ᴏ":"o","ᴑ":"o","ꬽ":"o","ο":"o","𝛐":"o","𝜊":"o","𝝄":"o","𝝾":"o","𝞸":"o","σ":"o","𝛔":"o","𝜎":"o","𝝈":"o","𝞂":"o","𝞼":"o","ⲟ":"o","о":"o","ჿ":"o","օ":"o","ס":"o","ه":"o","𞸤":"o","𞹤":"o","𞺄":"o","ﻫ":"o","ﻬ":"o","ﻪ":"o","ﻩ":"o","ھ":"o","ﮬ":"o","ﮭ":"o","ﮫ":"o","ﮪ":"o","ہ":"o","ﮨ":"o","ﮩ":"o","ﮧ":"o","ﮦ":"o","ە":"o","ഠ":"o","ဝ":"o","𐓪":"o","𑣈":"o","𑣗":"o","𐐬":"o","߀":"O","০":"O","୦":"O","〇":"O","𑓐":"O","𑣠":"O","𝟎":"O","𝟘":"O","𝟢":"O","𝟬":"O","𝟶":"O","🯰":"O","O":"O","𝐎":"O","𝑂":"O","𝑶":"O","𝒪":"O","𝓞":"O","𝔒":"O","𝕆":"O","𝕺":"O","𝖮":"O","𝗢":"O","𝘖":"O","𝙊":"O","𝙾":"O","Ο":"O","𝚶":"O","𝛰":"O","𝜪":"O","𝝤":"O","𝞞":"O","Ⲟ":"O","О":"O","Օ":"O","ⵔ":"O","ዐ":"O","ଠ":"O","𐓂":"O","ꓳ":"O","𑢵":"O","𐊒":"O","𐊫":"O","𐐄":"O","𐔖":"O","⁰":"º","ᵒ":"º","ǒ":"ŏ","Ǒ":"Ŏ","ۿ":"ô","Ő":"Ö","ø":"o̸","ꬾ":"o̸","Ø":"O̸","ⵁ":"O̸","Ǿ":"Ó̸","ɵ":"o̵","ꝋ":"o̵","ө":"o̵","ѳ":"o̵","ꮎ":"o̵","ꮻ":"o̵","⊖":"O̵","⊝":"O̵","⍬":"O̵","𝈚":"O̵","🜔":"O̵","Ɵ":"O̵","Ꝋ":"O̵","θ":"O̵","ϑ":"O̵","𝛉":"O̵","𝛝":"O̵","𝜃":"O̵","𝜗":"O̵","𝜽":"O̵","𝝑":"O̵","𝝷":"O̵","𝞋":"O̵","𝞱":"O̵","𝟅":"O̵","Θ":"O̵","ϴ":"O̵","𝚯":"O̵","𝚹":"O̵","𝛩":"O̵","𝛳":"O̵","𝜣":"O̵","𝜭":"O̵","𝝝":"O̵","𝝧":"O̵","𝞗":"O̵","𝞡":"O̵","Ө":"O̵","Ѳ":"O̵","ⴱ":"O̵","Ꮎ":"O̵","Ꮻ":"O̵","ꭴ":"ơ","ﳙ":"oٰ","🄁":"O,","🄀":"O.","ơ":"o'","Ơ":"O'","Ꭴ":"O'","%":"º/₀","٪":"º/₀","⁒":"º/₀","‰":"º/₀₀","؉":"º/₀₀","‱":"º/₀₀₀","؊":"º/₀₀₀","œ":"oe","Œ":"OE","ɶ":"oᴇ","∞":"oo","ꝏ":"oo","ꚙ":"oo","Ꝏ":"OO","Ꚙ":"OO","ﳗ":"oج","ﱑ":"oج","ﳘ":"oم","ﱒ":"oم","ﶓ":"oمج","ﶔ":"oمم","ﱓ":"oى","ﱔ":"oى","ൟ":"oരo","တ":"oာ","㍘":"O点","ↄ":"ɔ","ᴐ":"ɔ","ͻ":"ɔ","𐑋":"ɔ","Ↄ":"Ɔ","Ͻ":"Ɔ","ꓛ":"Ɔ","𐐣":"Ɔ","ꬿ":"ɔ̸","ꭢ":"ɔe","𐐿":"ɷ","⍴":"p","p":"p","𝐩":"p","𝑝":"p","𝒑":"p","𝓅":"p","𝓹":"p","𝔭":"p","𝕡":"p","𝖕":"p","𝗉":"p","𝗽":"p","𝘱":"p","𝙥":"p","𝚙":"p","ρ":"p","ϱ":"p","𝛒":"p","𝛠":"p","𝜌":"p","𝜚":"p","𝝆":"p","𝝔":"p","𝞀":"p","𝞎":"p","𝞺":"p","𝟈":"p","ⲣ":"p","р":"p","P":"P","ℙ":"P","𝐏":"P","𝑃":"P","𝑷":"P","𝒫":"P","𝓟":"P","𝔓":"P","𝕻":"P","𝖯":"P","𝗣":"P","𝘗":"P","𝙋":"P","𝙿":"P","Ρ":"P","𝚸":"P","𝛲":"P","𝜬":"P","𝝦":"P","𝞠":"P","Ⲣ":"P","Р":"P","Ꮲ":"P","ᑭ":"P","ꓑ":"P","𐊕":"P","ƥ":"p̔","ᵽ":"p̵","ᑷ":"p·","ᒆ":"P'","ᴩ":"ᴘ","ꮲ":"ᴘ","φ":"ɸ","ϕ":"ɸ","𝛗":"ɸ","𝛟":"ɸ","𝜑":"ɸ","𝜙":"ɸ","𝝋":"ɸ","𝝓":"ɸ","𝞅":"ɸ","𝞍":"ɸ","𝞿":"ɸ","𝟇":"ɸ","ⲫ":"ɸ","ф":"ɸ","𝐪":"q","𝑞":"q","𝒒":"q","𝓆":"q","𝓺":"q","𝔮":"q","𝕢":"q","𝖖":"q","𝗊":"q","𝗾":"q","𝘲":"q","𝙦":"q","𝚚":"q","ԛ":"q","գ":"q","զ":"q","ℚ":"Q","𝐐":"Q","𝑄":"Q","𝑸":"Q","𝒬":"Q","𝓠":"Q","𝔔":"Q","𝕼":"Q","𝖰":"Q","𝗤":"Q","𝘘":"Q","𝙌":"Q","𝚀":"Q","ⵕ":"Q","ʠ":"q̔","🜀":"QE","ᶐ":"ɋ","ᴋ":"ĸ","κ":"ĸ","ϰ":"ĸ","𝛋":"ĸ","𝛞":"ĸ","𝜅":"ĸ","𝜘":"ĸ","𝜿":"ĸ","𝝒":"ĸ","𝝹":"ĸ","𝞌":"ĸ","𝞳":"ĸ","𝟆":"ĸ","ⲕ":"ĸ","к":"ĸ","ꮶ":"ĸ","қ":"ĸ̩","ҟ":"ĸ̵","𝐫":"r","𝑟":"r","𝒓":"r","𝓇":"r","𝓻":"r","𝔯":"r","𝕣":"r","𝖗":"r","𝗋":"r","𝗿":"r","𝘳":"r","𝙧":"r","𝚛":"r","ꭇ":"r","ꭈ":"r","ᴦ":"r","ⲅ":"r","г":"r","ꮁ":"r","𝈖":"R","ℛ":"R","ℜ":"R","ℝ":"R","𝐑":"R","𝑅":"R","𝑹":"R","𝓡":"R","𝕽":"R","𝖱":"R","𝗥":"R","𝘙":"R","𝙍":"R","𝚁":"R","Ʀ":"R","Ꭱ":"R","Ꮢ":"R","𐒴":"R","ᖇ":"R","ꓣ":"R","𖼵":"R","ɽ":"r̨","ɼ":"r̩","ɍ":"r̵","ғ":"r̵","ᵲ":"r̴","ґ":"r'","𑣣":"rn",m:"rn","ⅿ":"rn","𝐦":"rn","𝑚":"rn","𝒎":"rn","𝓂":"rn","𝓶":"rn","𝔪":"rn","𝕞":"rn","𝖒":"rn","𝗆":"rn","𝗺":"rn","𝘮":"rn","𝙢":"rn","𝚖":"rn","𑜀":"rn","₥":"rn̸","ɱ":"rn̦","ᵯ":"rn̴","₨":"Rs","ꭱ":"ʀ","ꮢ":"ʀ","я":"ᴙ","ᵳ":"ɾ̴","℩":"ɿ","s":"s","𝐬":"s","𝑠":"s","𝒔":"s","𝓈":"s","𝓼":"s","𝔰":"s","𝕤":"s","𝖘":"s","𝗌":"s","𝘀":"s","𝘴":"s","𝙨":"s","𝚜":"s","ꜱ":"s","ƽ":"s","ѕ":"s","ꮪ":"s","𑣁":"s","𐑈":"s","S":"S","𝐒":"S","𝑆":"S","𝑺":"S","𝒮":"S","𝓢":"S","𝔖":"S","𝕊":"S","𝕾":"S","𝖲":"S","𝗦":"S","𝘚":"S","𝙎":"S","𝚂":"S","Ѕ":"S","Տ":"S","Ꮥ":"S","Ꮪ":"S","ꓢ":"S","𖼺":"S","𐊖":"S","𐐠":"S","ʂ":"s̨","ᵴ":"s̴","ꞵ":"ß","β":"ß","ϐ":"ß","𝛃":"ß","𝛽":"ß","𝜷":"ß","𝝱":"ß","𝞫":"ß","Ᏸ":"ß","🝜":"sss","st":"st","∫":"ʃ","ꭍ":"ʃ","∑":"Ʃ","⅀":"Ʃ","Σ":"Ʃ","𝚺":"Ʃ","𝛴":"Ʃ","𝜮":"Ʃ","𝝨":"Ʃ","𝞢":"Ʃ","ⵉ":"Ʃ","∬":"ʃʃ","∭":"ʃʃʃ","⨌":"ʃʃʃʃ","𝐭":"t","𝑡":"t","𝒕":"t","𝓉":"t","𝓽":"t","𝔱":"t","𝕥":"t","𝖙":"t","𝗍":"t","𝘁":"t","𝘵":"t","𝙩":"t","𝚝":"t","⊤":"T","⟙":"T","🝨":"T","T":"T","𝐓":"T","𝑇":"T","𝑻":"T","𝒯":"T","𝓣":"T","𝔗":"T","𝕋":"T","𝕿":"T","𝖳":"T","𝗧":"T","𝘛":"T","𝙏":"T","𝚃":"T","Τ":"T","𝚻":"T","𝛵":"T","𝜯":"T","𝝩":"T","𝞣":"T","Ⲧ":"T","Т":"T","Ꭲ":"T","ꓔ":"T","𖼊":"T","𑢼":"T","𐊗":"T","𐊱":"T","𐌕":"T","ƭ":"t̔","⍡":"T̈","Ⱦ":"T̸","Ț":"Ţ","Ʈ":"T̨","Ҭ":"T̩","₮":"T⃫","ŧ":"t̵","Ŧ":"T̵","ᵵ":"t̴","Ⴀ":"Ꞇ","Ꜩ":"T3","ʨ":"tɕ","℡":"TEL","ꝷ":"tf","ʦ":"ts","ʧ":"tʃ","ꜩ":"tȝ","τ":"ᴛ","𝛕":"ᴛ","𝜏":"ᴛ","𝝉":"ᴛ","𝞃":"ᴛ","𝞽":"ᴛ","т":"ᴛ","ꭲ":"ᴛ","ҭ":"ᴛ̩","ţ":"ƫ","ț":"ƫ","Ꮏ":"ƫ","𝐮":"u","𝑢":"u","𝒖":"u","𝓊":"u","𝓾":"u","𝔲":"u","𝕦":"u","𝖚":"u","𝗎":"u","𝘂":"u","𝘶":"u","𝙪":"u","𝚞":"u","ꞟ":"u","ᴜ":"u","ꭎ":"u","ꭒ":"u","ʋ":"u","υ":"u","𝛖":"u","𝜐":"u","𝝊":"u","𝞄":"u","𝞾":"u","ս":"u","𐓶":"u","𑣘":"u","∪":"U","⋃":"U","𝐔":"U","𝑈":"U","𝑼":"U","𝒰":"U","𝓤":"U","𝔘":"U","𝕌":"U","𝖀":"U","𝖴":"U","𝗨":"U","𝘜":"U","𝙐":"U","𝚄":"U","Ս":"U","ሀ":"U","𐓎":"U","ᑌ":"U","ꓴ":"U","𖽂":"U","𑢸":"U","ǔ":"ŭ","Ǔ":"Ŭ","ᵾ":"u̵","ꮜ":"u̵","Ʉ":"U̵","Ꮜ":"U̵","ᑘ":"U·","ᑧ":"U'","ᵫ":"ue","ꭣ":"uo","ṃ":"ꭑ","պ":"ɰ","ሣ":"ɰ","℧":"Ʊ","ᘮ":"Ʊ","ᘴ":"Ʊ","ᵿ":"ʊ̵","∨":"v","⋁":"v","v":"v","ⅴ":"v","𝐯":"v","𝑣":"v","𝒗":"v","𝓋":"v","𝓿":"v","𝔳":"v","𝕧":"v","𝖛":"v","𝗏":"v","𝘃":"v","𝘷":"v","𝙫":"v","𝚟":"v","ᴠ":"v","ν":"v","𝛎":"v","𝜈":"v","𝝂":"v","𝝼":"v","𝞶":"v","ѵ":"v","ט":"v","𑜆":"v","ꮩ":"v","𑣀":"v","𝈍":"V","٧":"V","۷":"V","Ⅴ":"V","𝐕":"V","𝑉":"V","𝑽":"V","𝒱":"V","𝓥":"V","𝔙":"V","𝕍":"V","𝖁":"V","𝖵":"V","𝗩":"V","𝘝":"V","𝙑":"V","𝚅":"V","Ѵ":"V","ⴸ":"V","Ꮩ":"V","ᐯ":"V","ꛟ":"V","ꓦ":"V","𖼈":"V","𑢠":"V","𐔝":"V","𐆗":"V̵","ᐻ":"V·","🝬":"VB","ⅵ":"vi","ⅶ":"vii","ⅷ":"viii","Ⅵ":"Vl","Ⅶ":"Vll","Ⅷ":"Vlll","🜈":"Vᷤ","ᴧ":"ʌ","𐓘":"ʌ","٨":"Ʌ","۸":"Ʌ","Λ":"Ʌ","𝚲":"Ʌ","𝛬":"Ʌ","𝜦":"Ʌ","𝝠":"Ʌ","𝞚":"Ʌ","Л":"Ʌ","ⴷ":"Ʌ","𐒰":"Ʌ","ᐱ":"Ʌ","ꛎ":"Ʌ","ꓥ":"Ʌ","𖼽":"Ʌ","𐊍":"Ʌ","Ӆ":"Ʌ̦","ᐽ":"Ʌ·","ɯ":"w","𝐰":"w","𝑤":"w","𝒘":"w","𝓌":"w","𝔀":"w","𝔴":"w","𝕨":"w","𝖜":"w","𝗐":"w","𝘄":"w","𝘸":"w","𝙬":"w","𝚠":"w","ᴡ":"w","ѡ":"w","ԝ":"w","ա":"w","𑜊":"w","𑜎":"w","𑜏":"w","ꮃ":"w","𑣯":"W","𑣦":"W","𝐖":"W","𝑊":"W","𝑾":"W","𝒲":"W","𝓦":"W","𝔚":"W","𝕎":"W","𝖂":"W","𝖶":"W","𝗪":"W","𝘞":"W","𝙒":"W","𝚆":"W","Ԝ":"W","Ꮃ":"W","Ꮤ":"W","ꓪ":"W","ѽ":"w҆҇","𑓅":"ẇ","₩":"W̵","ꝡ":"w̦","ᴍ":"ʍ","м":"ʍ","ꮇ":"ʍ","ӎ":"ʍ̦","᙮":"x","×":"x","⤫":"x","⤬":"x","⨯":"x","x":"x","ⅹ":"x","𝐱":"x","𝑥":"x","𝒙":"x","𝓍":"x","𝔁":"x","𝔵":"x","𝕩":"x","𝖝":"x","𝗑":"x","𝘅":"x","𝘹":"x","𝙭":"x","𝚡":"x","х":"x","ᕁ":"x","ᕽ":"x","ⷯ":"ͯ","᙭":"X","╳":"X","𐌢":"X","𑣬":"X","X":"X","Ⅹ":"X","𝐗":"X","𝑋":"X","𝑿":"X","𝒳":"X","𝓧":"X","𝔛":"X","𝕏":"X","𝖃":"X","𝖷":"X","𝗫":"X","𝘟":"X","𝙓":"X","𝚇":"X","Ꭓ":"X","Χ":"X","𝚾":"X","𝛸":"X","𝜲":"X","𝝬":"X","𝞦":"X","Ⲭ":"X","Х":"X","ⵝ":"X","ᚷ":"X","ꓫ":"X","𐊐":"X","𐊴":"X","𐌗":"X","𐔧":"X","⨰":"ẋ","Ҳ":"X̩","𐆖":"X̵","ⅺ":"xi","ⅻ":"xii","Ⅺ":"Xl","Ⅻ":"Xll","ɣ":"y","ᶌ":"y","y":"y","𝐲":"y","𝑦":"y","𝒚":"y","𝓎":"y","𝔂":"y","𝔶":"y","𝕪":"y","𝖞":"y","𝗒":"y","𝘆":"y","𝘺":"y","𝙮":"y","𝚢":"y","ʏ":"y","ỿ":"y","ꭚ":"y","γ":"y","ℽ":"y","𝛄":"y","𝛾":"y","𝜸":"y","𝝲":"y","𝞬":"y","у":"y","ү":"y","ყ":"y","𑣜":"y","Y":"Y","𝐘":"Y","𝑌":"Y","𝒀":"Y","𝒴":"Y","𝓨":"Y","𝔜":"Y","𝕐":"Y","𝖄":"Y","𝖸":"Y","𝗬":"Y","𝘠":"Y","𝙔":"Y","𝚈":"Y","Υ":"Y","ϒ":"Y","𝚼":"Y","𝛶":"Y","𝜰":"Y","𝝪":"Y","𝞤":"Y","Ⲩ":"Y","У":"Y","Ү":"Y","Ꭹ":"Y","Ꮍ":"Y","ꓬ":"Y","𖽃":"Y","𑢤":"Y","𐊲":"Y","ƴ":"y̔","ɏ":"y̵","ұ":"y̵","¥":"Y̵","Ɏ":"Y̵","Ұ":"Y̵","ʒ":"ȝ","ꝫ":"ȝ","ⳍ":"ȝ","ӡ":"ȝ","ჳ":"ȝ","𝐳":"z","𝑧":"z","𝒛":"z","𝓏":"z","𝔃":"z","𝔷":"z","𝕫":"z","𝖟":"z","𝗓":"z","𝘇":"z","𝘻":"z","𝙯":"z","𝚣":"z","ᴢ":"z","ꮓ":"z","𑣄":"z","𐋵":"Z","𑣥":"Z","Z":"Z","ℤ":"Z","ℨ":"Z","𝐙":"Z","𝑍":"Z","𝒁":"Z","𝒵":"Z","𝓩":"Z","𝖅":"Z","𝖹":"Z","𝗭":"Z","𝘡":"Z","𝙕":"Z","𝚉":"Z","Ζ":"Z","𝚭":"Z","𝛧":"Z","𝜡":"Z","𝝛":"Z","𝞕":"Z","Ꮓ":"Z","ꓜ":"Z","𑢩":"Z","ʐ":"z̨","ƶ":"z̵","Ƶ":"Z̵","ȥ":"z̦","Ȥ":"Z̦","ᵶ":"z̴","ƿ":"þ","ϸ":"þ","Ϸ":"Þ","𐓄":"Þ","⁹":"ꝰ","ᴤ":"ƨ","ϩ":"ƨ","ꙅ":"ƨ","ь":"ƅ","ꮟ":"ƅ","ы":"ƅi","ꭾ":"ɂ","ˤ":"ˁ","ꛍ":"ʡ","⊙":"ʘ","☉":"ʘ","⨀":"ʘ","Ꙩ":"ʘ","ⵙ":"ʘ","𐓃":"ʘ","ℾ":"Γ","𝚪":"Γ","𝛤":"Γ","𝜞":"Γ","𝝘":"Γ","𝞒":"Γ","Ⲅ":"Γ","Г":"Γ","Ꮁ":"Γ","ᒥ":"Γ","𖼇":"Γ","Ғ":"Γ̵","ᒯ":"Γ·","Ґ":"Γ'","∆":"Δ","△":"Δ","🜂":"Δ","𝚫":"Δ","𝛥":"Δ","𝜟":"Δ","𝝙":"Δ","𝞓":"Δ","Ⲇ":"Δ","ⵠ":"Δ","ᐃ":"Δ","𖼚":"Δ","𐊅":"Δ","𐊣":"Δ","⍙":"Δ̲","ᐏ":"Δ·","ᐬ":"Δᐠ","𝟋":"ϝ","𝛇":"ζ","𝜁":"ζ","𝜻":"ζ","𝝵":"ζ","𝞯":"ζ","ⳤ":"ϗ","𝛌":"λ","𝜆":"λ","𝝀":"λ","𝝺":"λ","𝞴":"λ","Ⲗ":"λ","𐓛":"λ","µ":"μ","𝛍":"μ","𝜇":"μ","𝝁":"μ","𝝻":"μ","𝞵":"μ","𝛏":"ξ","𝜉":"ξ","𝝃":"ξ","𝝽":"ξ","𝞷":"ξ","𝚵":"Ξ","𝛯":"Ξ","𝜩":"Ξ","𝝣":"Ξ","𝞝":"Ξ","ϖ":"π","ℼ":"π","𝛑":"π","𝛡":"π","𝜋":"π","𝜛":"π","𝝅":"π","𝝕":"π","𝝿":"π","𝞏":"π","𝞹":"π","𝟉":"π","ᴨ":"π","п":"π","∏":"Π","ℿ":"Π","𝚷":"Π","𝛱":"Π","𝜫":"Π","𝝥":"Π","𝞟":"Π","Ⲡ":"Π","П":"Π","ꛛ":"Π","𐊭":"Ϙ","𐌒":"Ϙ","ϛ":"ς","𝛓":"ς","𝜍":"ς","𝝇":"ς","𝞁":"ς","𝞻":"ς","𝚽":"Φ","𝛷":"Φ","𝜱":"Φ","𝝫":"Φ","𝞥":"Φ","Ⲫ":"Φ","Ф":"Φ","Փ":"Φ","ቀ":"Φ","ᛰ":"Φ","𐊳":"Φ","ꭓ":"χ","ꭕ":"χ","𝛘":"χ","𝜒":"χ","𝝌":"χ","𝞆":"χ","𝟀":"χ","ⲭ":"χ","𝛙":"ψ","𝜓":"ψ","𝝍":"ψ","𝞇":"ψ","𝟁":"ψ","ѱ":"ψ","𐓹":"ψ","𝚿":"Ψ","𝛹":"Ψ","𝜳":"Ψ","𝝭":"Ψ","𝞧":"Ψ","Ⲯ":"Ψ","Ѱ":"Ψ","𐓑":"Ψ","ᛘ":"Ψ","𐊵":"Ψ","⍵":"ω","ꞷ":"ω","𝛚":"ω","𝜔":"ω","𝝎":"ω","𝞈":"ω","𝟂":"ω","ⲱ":"ω","ꙍ":"ω","Ω":"Ω","𝛀":"Ω","𝛺":"Ω","𝜴":"Ω","𝝮":"Ω","𝞨":"Ω","ᘯ":"Ω","ᘵ":"Ω","𐊶":"Ω","⍹":"ω̲","ώ":"ῴ","☰":"Ⲷ","Ⳝ":"Ϭ","җ":"ж̩","Җ":"Ж̩","𝈋":"И","Ͷ":"И","ꚡ":"И","𐐥":"И","Й":"Ѝ","Ҋ":"Ѝ̦","ѝ":"й","ҋ":"й̦","𐒼":"Ӄ","ᴫ":"л","ӆ":"л̦","ꭠ":"љ","𐓫":"ꙩ","ᷮ":"ⷬ","𐓍":"Ћ","𝈂":"Ӿ","𝈢":"Ѡ","Ꮗ":"Ѡ","ᗯ":"Ѡ","Ѽ":"Ѡ҆҇","ᣭ":"Ѡ·","Ꞷ":"Ꙍ","ӌ":"ҷ","Ӌ":"Ҷ","Ҿ":"Ҽ̨","ⲽ":"ш","Ⲽ":"Ш","Ꙑ":"Ъl","℈":"Э","🜁":"Ꙙ","𖼜":"Ꙙ","ꦒ":"ⰿ","և":"եւ","ኔ":"ձ","ﬔ":"մե","ﬕ":"մի","ﬗ":"մխ","ﬓ":"մն","∩":"Ո","⋂":"Ո","𝉅":"Ո","በ":"Ո","ᑎ":"Ո","ꓵ":"Ո","ᑚ":"Ո·","ᑨ":"Ո'","ﬖ":"վն","₽":"Ք","˓":"ՙ","ʿ":"ՙ","ℵ":"א","ﬡ":"א","אָ":"אַ","אּ":"אַ","ﭏ":"אל","ℶ":"ב","ℷ":"ג","ℸ":"ד","ﬢ":"ד","ﬣ":"ה","יּ":"יִ","ﬤ":"כ","ﬥ":"ל","ﬦ":"ם","ﬠ":"ע","ﬧ":"ר","שׂ":"שׁ","שּ":"שׁ","שּׂ":"שּׁ","ﬨ":"ת","ﺀ":"ء","۽":"ء͈","ﺂ":"آ","ﺁ":"آ","ﭑ":"ٱ","ﭐ":"ٱ","𞸁":"ب","𞸡":"ب","𞹡":"ب","𞺁":"ب","𞺡":"ب","ﺑ":"ب","ﺒ":"ب","ﺐ":"ب","ﺏ":"ب","ݑ":"بۛ","ࢶ":"بۢ","ࢡ":"بٔ","ﲠ":"بo","ﳢ":"بo","ﲜ":"بج","ﰅ":"بج","ﲝ":"بح","ﰆ":"بح","ﷂ":"بحى","ﲞ":"بخ","ﰇ":"بخ","ﳒ":"بخ","ﱋ":"بخ","ﶞ":"بخى","ﱪ":"بر","ﱫ":"بز","ﲟ":"بم","ﳡ":"بم","ﱬ":"بم","ﰈ":"بم","ﱭ":"بن","ﱮ":"بى","ﰉ":"بى","ﱯ":"بى","ﰊ":"بى","ﭔ":"ٻ","ﭕ":"ٻ","ﭓ":"ٻ","ﭒ":"ٻ","ې":"ٻ","ﯦ":"ٻ","ﯧ":"ٻ","ﯥ":"ٻ","ﯤ":"ٻ","ﭜ":"ڀ","ﭝ":"ڀ","ﭛ":"ڀ","ﭚ":"ڀ","ࢩ":"ݔ","ݧ":"ݔ","⍥":"ة","ö":"ة","ﺔ":"ة","ﺓ":"ة","ۃ":"ة","𞸕":"ت","𞸵":"ت","𞹵":"ت","𞺕":"ت","𞺵":"ت","ﺗ":"ت","ﺘ":"ت","ﺖ":"ت","ﺕ":"ت","ﲥ":"تo","ﳤ":"تo","ﲡ":"تج","ﰋ":"تج","ﵐ":"تجم","ﶠ":"تجى","ﶟ":"تجى","ﲢ":"تح","ﰌ":"تح","ﵒ":"تحج","ﵑ":"تحج","ﵓ":"تحم","ﲣ":"تخ","ﰍ":"تخ","ﵔ":"تخم","ﶢ":"تخى","ﶡ":"تخى","ﱰ":"تر","ﱱ":"تز","ﲤ":"تم","ﳣ":"تم","ﱲ":"تم","ﰎ":"تم","ﵕ":"تمج","ﵖ":"تمح","ﵗ":"تمخ","ﶤ":"تمى","ﶣ":"تمى","ﱳ":"تن","ﱴ":"تى","ﰏ":"تى","ﱵ":"تى","ﰐ":"تى","ﭠ":"ٺ","ﭡ":"ٺ","ﭟ":"ٺ","ﭞ":"ٺ","ﭤ":"ٿ","ﭥ":"ٿ","ﭣ":"ٿ","ﭢ":"ٿ","𞸂":"ج","𞸢":"ج","𞹂":"ج","𞹢":"ج","𞺂":"ج","𞺢":"ج","ﺟ":"ج","ﺠ":"ج","ﺞ":"ج","ﺝ":"ج","ﲧ":"جح","ﰕ":"جح","ﶦ":"جحى","ﶾ":"جحى","ﷻ":"جل جلlلo","ﲨ":"جم","ﰖ":"جم","ﵙ":"جمح","ﵘ":"جمح","ﶧ":"جمى","ﶥ":"جمى","ﴝ":"جى","ﴁ":"جى","ﴞ":"جى","ﴂ":"جى","ﭸ":"ڃ","ﭹ":"ڃ","ﭷ":"ڃ","ﭶ":"ڃ","ﭴ":"ڄ","ﭵ":"ڄ","ﭳ":"ڄ","ﭲ":"ڄ","ﭼ":"چ","ﭽ":"چ","ﭻ":"چ","ﭺ":"چ","ﮀ":"ڇ","ﮁ":"ڇ","ﭿ":"ڇ","ﭾ":"ڇ","𞸇":"ح","𞸧":"ح","𞹇":"ح","𞹧":"ح","𞺇":"ح","𞺧":"ح","ﺣ":"ح","ﺤ":"ح","ﺢ":"ح","ﺡ":"ح","څ":"حۛ","ځ":"حٔ","ݲ":"حٔ","ﲩ":"حج","ﰗ":"حج","ﶿ":"حجى","ﲪ":"حم","ﰘ":"حم","ﵛ":"حمى","ﵚ":"حمى","ﴛ":"حى","ﳿ":"حى","ﴜ":"حى","ﴀ":"حى","𞸗":"خ","𞸷":"خ","𞹗":"خ","𞹷":"خ","𞺗":"خ","𞺷":"خ","ﺧ":"خ","ﺨ":"خ","ﺦ":"خ","ﺥ":"خ","ﲫ":"خج","ﰙ":"خج","ﰚ":"خح","ﲬ":"خم","ﰛ":"خم","ﴟ":"خى","ﴃ":"خى","ﴠ":"خى","ﴄ":"خى","𐋡":"د","𞸃":"د","𞺃":"د","𞺣":"د","ﺪ":"د","ﺩ":"د","ڈ":"دؕ","ﮉ":"دؕ","ﮈ":"دؕ","ڎ":"دۛ","ﮇ":"دۛ","ﮆ":"دۛ","ۮ":"د̂","ࢮ":"د̤̣","𞸘":"ذ","𞺘":"ذ","𞺸":"ذ","ﺬ":"ذ","ﺫ":"ذ","ﱛ":"ذٰ","ڋ":"ڊؕ","ﮅ":"ڌ","ﮄ":"ڌ","ﮃ":"ڍ","ﮂ":"ڍ","𞸓":"ر","𞺓":"ر","𞺳":"ر","ﺮ":"ر","ﺭ":"ر","ڑ":"رؕ","ﮍ":"رؕ","ﮌ":"رؕ","ژ":"رۛ","ﮋ":"رۛ","ﮊ":"رۛ","ڒ":"ر̆","ࢹ":"ر̆̇","ۯ":"ر̂","ݬ":"رٔ","ﱜ":"رٰ","ﷶ":"رسول","﷼":"رىlل","𞸆":"ز","𞺆":"ز","𞺦":"ز","ﺰ":"ز","ﺯ":"ز","ࢲ":"ز̂","ݱ":"ڗؕ","𞸎":"س","𞸮":"س","𞹎":"س","𞹮":"س","𞺎":"س","𞺮":"س","ﺳ":"س","ﺴ":"س","ﺲ":"س","ﺱ":"س","ش":"سۛ","𞸔":"سۛ","𞸴":"سۛ","𞹔":"سۛ","𞹴":"سۛ","𞺔":"سۛ","𞺴":"سۛ","ﺷ":"سۛ","ﺸ":"سۛ","ﺶ":"سۛ","ﺵ":"سۛ","ݾ":"س̂","ﴱ":"سo","ﳨ":"سo","ﴲ":"سۛo","ﳪ":"سۛo","ﲭ":"سج","ﴴ":"سج","ﰜ":"سج","ﴭ":"سۛج","ﴷ":"سۛج","ﴥ":"سۛج","ﴉ":"سۛج","ﵝ":"سجح","ﵞ":"سجى","ﵩ":"سۛجى","ﲮ":"سح","ﴵ":"سح","ﰝ":"سح","ﴮ":"سۛح","ﴸ":"سۛح","ﴦ":"سۛح","ﴊ":"سۛح","ﵜ":"سحج","ﵨ":"سۛحم","ﵧ":"سۛحم","ﶪ":"سۛحى","ﲯ":"سخ","ﴶ":"سخ","ﰞ":"سخ","ﴯ":"سۛخ","ﴹ":"سۛخ","ﴧ":"سۛخ","ﴋ":"سۛخ","ﶨ":"سخى","ﷆ":"سخى","ﴪ":"سر","ﴎ":"سر","ﴩ":"سۛر","ﴍ":"سۛر","ﲰ":"سم","ﳧ":"سم","ﰟ":"سم","ﴰ":"سۛم","ﳩ":"سۛم","ﴨ":"سۛم","ﴌ":"سۛم","ﵡ":"سمج","ﵠ":"سمح","ﵟ":"سمح","ﵫ":"سۛمخ","ﵪ":"سۛمخ","ﵣ":"سمم","ﵢ":"سمم","ﵭ":"سۛمم","ﵬ":"سۛمم","ﴗ":"سى","ﳻ":"سى","ﴘ":"سى","ﳼ":"سى","ﴙ":"سۛى","ﳽ":"سۛى","ﴚ":"سۛى","ﳾ":"سۛى","𐋲":"ص","𞸑":"ص","𞸱":"ص","𞹑":"ص","𞹱":"ص","𞺑":"ص","𞺱":"ص","ﺻ":"ص","ﺼ":"ص","ﺺ":"ص","ﺹ":"ص","ڞ":"صۛ","ࢯ":"ص̤̣","ﲱ":"صح","ﰠ":"صح","ﵥ":"صحح","ﵤ":"صحح","ﶩ":"صحى","ﲲ":"صخ","ﴫ":"صر","ﴏ":"صر","ﷵ":"صلعم","ﷹ":"صلى","ﷰ":"صلى","ﷺ":"صلى lللo علىo وسلم","ﲳ":"صم","ﰡ":"صم","ﷅ":"صمم","ﵦ":"صمم","ﴡ":"صى","ﴅ":"صى","ﴢ":"صى","ﴆ":"صى","𞸙":"ض","𞸹":"ض","𞹙":"ض","𞹹":"ض","𞺙":"ض","𞺹":"ض","ﺿ":"ض","ﻀ":"ض","ﺾ":"ض","ﺽ":"ض","ﲴ":"ضج","ﰢ":"ضج","ﲵ":"ضح","ﰣ":"ضح","ﵮ":"ضحى","ﶫ":"ضحى","ﲶ":"ضخ","ﰤ":"ضخ","ﵰ":"ضخم","ﵯ":"ضخم","ﴬ":"ضر","ﴐ":"ضر","ﲷ":"ضم","ﰥ":"ضم","ﴣ":"ضى","ﴇ":"ضى","ﴤ":"ضى","ﴈ":"ضى","𐋨":"ط","𞸈":"ط","𞹨":"ط","𞺈":"ط","𞺨":"ط","ﻃ":"ط","ﻄ":"ط","ﻂ":"ط","ﻁ":"ط","ڟ":"طۛ","ﲸ":"طح","ﰦ":"طح","ﴳ":"طم","ﴺ":"طم","ﰧ":"طم","ﵲ":"طمح","ﵱ":"طمح","ﵳ":"طمم","ﵴ":"طمى","ﴑ":"طى","ﳵ":"طى","ﴒ":"طى","ﳶ":"طى","𞸚":"ظ","𞹺":"ظ","𞺚":"ظ","𞺺":"ظ","ﻇ":"ظ","ﻈ":"ظ","ﻆ":"ظ","ﻅ":"ظ","ﲹ":"ظم","ﴻ":"ظم","ﰨ":"ظم","؏":"ع","𞸏":"ع","𞸯":"ع","𞹏":"ع","𞹯":"ع","𞺏":"ع","𞺯":"ع","ﻋ":"ع","ﻌ":"ع","ﻊ":"ع","ﻉ":"ع","ﲺ":"عج","ﰩ":"عج","ﷄ":"عجم","ﵵ":"عجم","ﷷ":"علىo","ﲻ":"عم","ﰪ":"عم","ﵷ":"عمم","ﵶ":"عمم","ﵸ":"عمى","ﶶ":"عمى","ﴓ":"عى","ﳷ":"عى","ﴔ":"عى","ﳸ":"عى","𞸛":"غ","𞸻":"غ","𞹛":"غ","𞹻":"غ","𞺛":"غ","𞺻":"غ","ﻏ":"غ","ﻐ":"غ","ﻎ":"غ","ﻍ":"غ","ﲼ":"غج","ﰫ":"غج","ﲽ":"غم","ﰬ":"غم","ﵹ":"غمم","ﵻ":"غمى","ﵺ":"غمى","ﴕ":"غى","ﳹ":"غى","ﴖ":"غى","ﳺ":"غى","𞸐":"ف","𞸰":"ف","𞹰":"ف","𞺐":"ف","𞺰":"ف","ﻓ":"ف","ﻔ":"ف","ﻒ":"ف","ﻑ":"ف","ڧ":"ف","ﲾ":"فج","ﰭ":"فج","ﲿ":"فح","ﰮ":"فح","ﳀ":"فخ","ﰯ":"فخ","ﵽ":"فخم","ﵼ":"فخم","ﳁ":"فم","ﰰ":"فم","ﷁ":"فمى","ﱼ":"فى","ﰱ":"فى","ﱽ":"فى","ﰲ":"فى","𞸞":"ڡ","𞹾":"ڡ","ࢻ":"ڡ","ٯ":"ڡ","𞸟":"ڡ","𞹟":"ڡ","ࢼ":"ڡ","ڤ":"ڡۛ","ﭬ":"ڡۛ","ﭭ":"ڡۛ","ﭫ":"ڡۛ","ﭪ":"ڡۛ","ڨ":"ڡۛ","ࢤ":"ڢۛ","ﭰ":"ڦ","ﭱ":"ڦ","ﭯ":"ڦ","ﭮ":"ڦ","𞸒":"ق","𞸲":"ق","𞹒":"ق","𞹲":"ق","𞺒":"ق","𞺲":"ق","ﻗ":"ق","ﻘ":"ق","ﻖ":"ق","ﻕ":"ق","ﳂ":"قح","ﰳ":"قح","ﷱ":"قلى","ﳃ":"قم","ﰴ":"قم","ﶴ":"قمح","ﵾ":"قمح","ﵿ":"قمم","ﶲ":"قمى","ﱾ":"قى","ﰵ":"قى","ﱿ":"قى","ﰶ":"قى","𞸊":"ك","𞸪":"ك","𞹪":"ك","ﻛ":"ك","ﻜ":"ك","ﻚ":"ك","ﻙ":"ك","ک":"ك","ﮐ":"ك","ﮑ":"ك","ﮏ":"ك","ﮎ":"ك","ڪ":"ك","ڭ":"كۛ","ﯕ":"كۛ","ﯖ":"كۛ","ﯔ":"كۛ","ﯓ":"كۛ","ݣ":"كۛ","ﲀ":"كl","ﰷ":"كl","ﳄ":"كج","ﰸ":"كج","ﳅ":"كح","ﰹ":"كح","ﳆ":"كخ","ﰺ":"كخ","ﳇ":"كل","ﳫ":"كل","ﲁ":"كل","ﰻ":"كل","ﳈ":"كم","ﳬ":"كم","ﲂ":"كم","ﰼ":"كم","ﷃ":"كمم","ﶻ":"كمم","ﶷ":"كمى","ﲃ":"كى","ﰽ":"كى","ﲄ":"كى","ﰾ":"كى","ݢ":"ڬ","ﮔ":"گ","ﮕ":"گ","ﮓ":"گ","ﮒ":"گ","ࢰ":"گ","ڴ":"گۛ","ﮜ":"ڱ","ﮝ":"ڱ","ﮛ":"ڱ","ﮚ":"ڱ","ﮘ":"ڳ","ﮙ":"ڳ","ﮗ":"ڳ","ﮖ":"ڳ","𞸋":"ل","𞸫":"ل","𞹋":"ل","𞺋":"ل","𞺫":"ل","ﻟ":"ل","ﻠ":"ل","ﻞ":"ل","ﻝ":"ل","ڷ":"لۛ","ڵ":"ل̆","ﻼ":"لl","ﻻ":"لl","ﻺ":"لlٕ","ﻹ":"لlٕ","ﻸ":"لlٴ","ﻷ":"لlٴ","ﳍ":"لo","ﻶ":"لآ","ﻵ":"لآ","ﳉ":"لج","ﰿ":"لج","ﶃ":"لجج","ﶄ":"لجج","ﶺ":"لجم","ﶼ":"لجم","ﶬ":"لجى","ﳊ":"لح","ﱀ":"لح","ﶵ":"لحم","ﶀ":"لحم","ﶂ":"لحى","ﶁ":"لحى","ﳋ":"لخ","ﱁ":"لخ","ﶆ":"لخم","ﶅ":"لخم","ﳌ":"لم","ﳭ":"لم","ﲅ":"لم","ﱂ":"لم","ﶈ":"لمح","ﶇ":"لمح","ﶭ":"لمى","ﲆ":"لى","ﱃ":"لى","ﲇ":"لى","ﱄ":"لى","𞸌":"م","𞸬":"م","𞹬":"م","𞺌":"م","𞺬":"م","ﻣ":"م","ﻤ":"م","ﻢ":"م","ﻡ":"م","ࢧ":"مۛ","۾":"م͈","ﲈ":"مl","ﳎ":"مج","ﱅ":"مج","ﶌ":"مجح","ﶒ":"مجخ","ﶍ":"مجم","ﷀ":"مجى","ﳏ":"مح","ﱆ":"مح","ﶉ":"محج","ﶊ":"محم","ﷴ":"محمد","ﶋ":"محى","ﳐ":"مخ","ﱇ":"مخ","ﶎ":"مخج","ﶏ":"مخم","ﶹ":"مخى","ﳑ":"مم","ﲉ":"مم","ﱈ":"مم","ﶱ":"ممى","ﱉ":"مى","ﱊ":"مى","𞸍":"ن","𞸭":"ن","𞹍":"ن","𞹭":"ن","𞺍":"ن","𞺭":"ن","ﻧ":"ن","ﻨ":"ن","ﻦ":"ن","ﻥ":"ن","ݨ":"نؕ","ݩ":"ن̆","ﳖ":"نo","ﳯ":"نo","ﶸ":"نجح","ﶽ":"نجح","ﶘ":"نجم","ﶗ":"نجم","ﶙ":"نجى","ﷇ":"نجى","ﳓ":"نح","ﱌ":"نح","ﶕ":"نحم","ﶖ":"نحى","ﶳ":"نحى","ﳔ":"نخ","ﱍ":"نخ","ﲊ":"نر","ﲋ":"نز","ﳕ":"نم","ﳮ":"نم","ﲌ":"نم","ﱎ":"نم","ﶛ":"نمى","ﶚ":"نمى","ﲍ":"نن","ﲎ":"نى","ﱏ":"نى","ﲏ":"نى","ﱐ":"نى","ۂ":"ۀ","ﮥ":"ۀ","ﮤ":"ۀ","𐋤":"و","𞸅":"و","𞺅":"و","𞺥":"و","ﻮ":"و","ﻭ":"و","ࢱ":"و","ۋ":"وۛ","ﯟ":"وۛ","ﯞ":"وۛ","ۇ":"و̓","ﯘ":"و̓","ﯗ":"و̓","ۆ":"و̆","ﯚ":"و̆","ﯙ":"و̆","ۉ":"و̂","ﯣ":"و̂","ﯢ":"و̂","ۈ":"وٰ","ﯜ":"وٰ","ﯛ":"وٰ","ؤ":"وٴ","ﺆ":"وٴ","ﺅ":"وٴ","ٶ":"وٴ","ٷ":"و̓ٴ","ﯝ":"و̓ٴ","ﷸ":"وسلم","ﯡ":"ۅ","ﯠ":"ۅ","ٮ":"ى","𞸜":"ى","𞹼":"ى","ں":"ى","𞸝":"ى","𞹝":"ى","ﮟ":"ى","ﮞ":"ى","ࢽ":"ى","ﯨ":"ى","ﯩ":"ى","ﻰ":"ى","ﻯ":"ى","ي":"ى","𞸉":"ى","𞸩":"ى","𞹉":"ى","𞹩":"ى","𞺉":"ى","𞺩":"ى","ﻳ":"ى","ﻴ":"ى","ﻲ":"ى","ﻱ":"ى","ی":"ى","ﯾ":"ى","ﯿ":"ى","ﯽ":"ى","ﯼ":"ى","ے":"ى","ﮯ":"ى","ﮮ":"ى","ٹ":"ىؕ","ﭨ":"ىؕ","ﭩ":"ىؕ","ﭧ":"ىؕ","ﭦ":"ىؕ","ڻ":"ىؕ","ﮢ":"ىؕ","ﮣ":"ىؕ","ﮡ":"ىؕ","ﮠ":"ىؕ","پ":"ىۛ","ﭘ":"ىۛ","ﭙ":"ىۛ","ﭗ":"ىۛ","ﭖ":"ىۛ","ث":"ىۛ","𞸖":"ىۛ","𞸶":"ىۛ","𞹶":"ىۛ","𞺖":"ىۛ","𞺶":"ىۛ","ﺛ":"ىۛ","ﺜ":"ىۛ","ﺚ":"ىۛ","ﺙ":"ىۛ","ڽ":"ىۛ","ۑ":"ىۛ","ؿ":"ىۛ","ࢷ":"ىۛۢ","ݖ":"ى̆","ێ":"ى̆","ࢺ":"ى̆̇","ؽ":"ى̂","ࢨ":"ىٔ","ﲐ":"ىٰ","ﱝ":"ىٰ","ﳞ":"ىo","ﳱ":"ىo","ﳦ":"ىۛo","ئ":"ىٴ","ﺋ":"ىٴ","ﺌ":"ىٴ","ﺊ":"ىٴ","ﺉ":"ىٴ","ٸ":"ىٴ","ﯫ":"ىٴl","ﯪ":"ىٴl","ﲛ":"ىٴo","ﳠ":"ىٴo","ﯭ":"ىٴo","ﯬ":"ىٴo","ﯸ":"ىٴٻ","ﯷ":"ىٴٻ","ﯶ":"ىٴٻ","ﲗ":"ىٴج","ﰀ":"ىٴج","ﲘ":"ىٴح","ﰁ":"ىٴح","ﲙ":"ىٴخ","ﱤ":"ىٴر","ﱥ":"ىٴز","ﲚ":"ىٴم","ﳟ":"ىٴم","ﱦ":"ىٴم","ﰂ":"ىٴم","ﱧ":"ىٴن","ﯯ":"ىٴو","ﯮ":"ىٴو","ﯱ":"ىٴو̓","ﯰ":"ىٴو̓","ﯳ":"ىٴو̆","ﯲ":"ىٴو̆","ﯵ":"ىٴوٰ","ﯴ":"ىٴوٰ","ﯻ":"ىٴى","ﯺ":"ىٴى","ﱨ":"ىٴى","ﯹ":"ىٴى","ﰃ":"ىٴى","ﱩ":"ىٴى","ﰄ":"ىٴى","ﳚ":"ىج","ﱕ":"ىج","ﰑ":"ىۛج","ﶯ":"ىجى","ﳛ":"ىح","ﱖ":"ىح","ﶮ":"ىحى","ﳜ":"ىخ","ﱗ":"ىخ","ﲑ":"ىر","ﱶ":"ىۛر","ﲒ":"ىز","ﱷ":"ىۛز","ﳝ":"ىم","ﳰ":"ىم","ﲓ":"ىم","ﱘ":"ىم","ﲦ":"ىۛم","ﳥ":"ىۛم","ﱸ":"ىۛم","ﰒ":"ىۛم","ﶝ":"ىمم","ﶜ":"ىمم","ﶰ":"ىمى","ﲔ":"ىن","ﱹ":"ىۛن","ﲕ":"ىى","ﱙ":"ىى","ﲖ":"ىى","ﱚ":"ىى","ﱺ":"ىۛى","ﰓ":"ىۛى","ﱻ":"ىۛى","ﰔ":"ىۛى","ﮱ":"ۓ","ﮰ":"ۓ","𐊸":"ⵀ","⁞":"ⵂ","⸽":"ⵂ","⦙":"ⵂ","︙":"ⵗ","⁝":"ⵗ","⋮":"ⵗ","Մ":"ሆ","Ռ":"ቡ","Ի":"ኮ","Պ":"ጣ","आ":"अा","ऒ":"अाॆ","ओ":"अाे","औ":"अाै","ऄ":"अॆ","ऑ":"अॉ","ऍ":"एॅ","ऎ":"एॆ","ऐ":"एे","ई":"र्इ","ઽ":"ऽ","𑇜":"ꣻ","𑇋":"ऺ","ુ":"ु","ૂ":"ू","ੋ":"ॆ","੍":"्","્":"्","আ":"অা","ৠ":"ঋৃ","ৡ":"ঋৃ","𑒒":"ঘ","𑒔":"চ","𑒖":"জ","𑒘":"ঞ","𑒙":"ট","𑒛":"ড","𑒪":"ণ","𑒞":"ত","𑒟":"থ","𑒠":"দ","𑒡":"ধ","𑒢":"ন","𑒣":"প","𑒩":"ব","𑒧":"ম","𑒨":"য","𑒫":"র","𑒝":"ল","𑒭":"ষ","𑒮":"স","𑓄":"ঽ","𑒰":"া","𑒱":"ি","𑒹":"ে","𑒼":"ো","𑒾":"ৌ","𑓂":"্","𑒽":"ৗ","ਉ":"ੳੁ","ਊ":"ੳੂ","ਆ":"ਅਾ","ਐ":"ਅੈ","ਔ":"ਅੌ","ਇ":"ੲਿ","ਈ":"ੲੀ","ਏ":"ੲੇ","આ":"અા","ઑ":"અાૅ","ઓ":"અાે","ઔ":"અાૈ","ઍ":"અૅ","એ":"અે","ઐ":"અૈ","ଆ":"ଅା","௮":"அ","ர":"ஈ","ா":"ஈ","௫":"ஈு","௨":"உ","ഉ":"உ","ஊ":"உள","ഊ":"உൗ","௭":"எ","௷":"எவ","ஜ":"ஐ","ജ":"ஐ","௧":"க","௪":"ச","௬":"சு","௲":"சூ","ഺ":"டி","ണ":"ண","௺":"நீ","௴":"மீ","௰":"ய","ഴ":"ழ","ௗ":"ள","ை":"ன","ശ":"ஶ","௸":"ஷ","ി":"ி","ീ":"ி","ொ":"ெஈ","ௌ":"ெள","ோ":"ேஈ","ಅ":"అ","ಆ":"ఆ","ಇ":"ఇ","ౠ":"ఋా","ౡ":"ఌా","ಒ":"ఒ","ఔ":"ఒౌ","ಔ":"ఒౌ","ఓ":"ఒౕ","ಓ":"ఒౕ","ಜ":"జ","ಞ":"ఞ","ఢ":"డ̣","ಣ":"ణ","థ":"ధּ","భ":"బ̣","ಯ":"య","ఠ":"రּ","ಱ":"ఱ","ಲ":"ల","ష":"వ̣","హ":"వా","మ":"వు","ూ":"ుా","ౄ":"ృా","ೡ":"ಌಾ","ഈ":"ഇൗ","ഐ":"എെ","ഓ":"ഒാ","ഔ":"ഒൗ","ൡ":"ഞ","൫":"ദ്ര","൹":"നു","ഌ":"നു","ങ":"നു","൯":"ന്","ൻ":"ന്","൬":"ന്ന","൚":"ന്മ","റ":"ര","൪":"ര്","ർ":"ര്","൮":"വ്ര","൶":"ഹ്മ","ൂ":"ു","ൃ":"ു","ൈ":"െെ","෪":"ජ","෫":"ද","𑐓":"𑐴𑑂𑐒","𑐙":"𑐴𑑂𑐘","𑐤":"𑐴𑑂𑐣","𑐪":"𑐴𑑂𑐩","𑐭":"𑐴𑑂𑐬","𑐯":"𑐴𑑂𑐮","𑗘":"𑖂","𑗙":"𑖂","𑗚":"𑖃","𑗛":"𑖄","𑗜":"𑖲","𑗝":"𑖳","ฃ":"ข","ด":"ค","ต":"ค","ม":"ฆ","ຈ":"จ","ซ":"ช","ฏ":"ฎ","ท":"ฑ","ບ":"บ","ປ":"ป","ຝ":"ฝ","ພ":"พ","ຟ":"ฟ","ฦ":"ภ","ຍ":"ย","។":"ฯ","ๅ":"า","ำ":"̊า","ិ":"ิ","ី":"ี","ឹ":"ึ","ឺ":"ื","ຸ":"ุ","ູ":"ู","แ":"เเ","ໜ":"ຫນ","ໝ":"ຫມ","ຳ":"̊າ","༂":"འུྂཿ","༃":"འུྂ༔","ཪ":"ར","ༀ":"ཨོཾ","ཷ":"ྲཱྀ","ཹ":"ླཱྀ","𑲲":"𑲪","ႁ":"ဂှ","က":"ဂာ","ၰ":"ဃှ","ၦ":"ပှ","ဟ":"ပာ","ၯ":"ပာှ","ၾ":"ၽှ","ဩ":"သြ","ဪ":"သြော်","႞":"ႃ̊","ឣ":"អ","᧐":"ᦞ","᧑":"ᦱ","᪀":"ᩅ","᪐":"ᩅ","꩓":"ꨁ","꩖":"ꨣ","᭒":"ᬍ","᭓":"ᬑ","᭘":"ᬨ","ꦣ":"ꦝ","ᢖ":"ᡜ","ᡕ":"ᠵ","ῶ":"Ꮿ","ᐍ":"ᐁ·","ᐫ":"ᐁᐠ","ᐑ":"ᐄ·","ᐓ":"ᐅ·","ᐭ":"ᐅᐠ","ᐕ":"ᐆ·","ᐘ":"ᐊ·","ᐮ":"ᐊᐠ","ᐚ":"ᐋ·","ᣝ":"ᐞᣟ","ᓑ":"ᐡ","ᕀ":"ᐩ","ᐿ":"ᐲ·","ᑃ":"ᐴ·","⍩":"ᐵ","ᑇ":"ᐹ·","ᑜ":"ᑏ·","⸧":"ᑐ","⊃":"ᑐ","ᑞ":"ᑐ·","ᑩ":"ᑐ'","⟉":"ᑐ/","⫗":"ᑐᑕ","ᑠ":"ᑑ·","⸦":"ᑕ","⊂":"ᑕ","ᑢ":"ᑕ·","ᑪ":"ᑕ'","ᑤ":"ᑖ·","ᑵ":"ᑫ·","ᒅ":"ᑫ'","ᑹ":"ᑮ·","ᑽ":"ᑰ·","ᘃ":"ᒉ","ᒓ":"ᒉ·","ᒕ":"ᒋ·","ᒗ":"ᒌ·","ᒛ":"ᒎ·","ᘂ":"ᒐ","ᒝ":"ᒐ·","ᒟ":"ᒑ·","ᒭ":"ᒣ·","ᒱ":"ᒦ·","ᒳ":"ᒧ·","ᒵ":"ᒨ·","ᒹ":"ᒫ·","ᓊ":"ᓀ·","ᣇ":"ᓂ·","ᣉ":"ᓃ·","ᣋ":"ᓄ·","ᣍ":"ᓅ·","ᓌ":"ᓇ·","ᓎ":"ᓈ·","ᘄ":"ᓓ","ᓝ":"ᓓ·","ᓟ":"ᓕ·","ᓡ":"ᓖ·","ᓣ":"ᓗ·","ᓥ":"ᓘ·","ᘇ":"ᓚ","ᓧ":"ᓚ·","ᓩ":"ᓛ·","ᓷ":"ᓭ·","ᓹ":"ᓯ·","ᓻ":"ᓰ·","ᓽ":"ᓱ·","ᓿ":"ᓲ·","ᔁ":"ᓴ·","ᔃ":"ᓵ·","ᔌ":"ᔋ<","ᔎ":"ᔋb","ᔍ":"ᔋᑕ","ᔏ":"ᔋᒐ","ᔘ":"ᔐ·","ᔚ":"ᔑ·","ᔜ":"ᔒ·","ᔞ":"ᔓ·","ᔠ":"ᔔ·","ᔢ":"ᔕ·","ᔤ":"ᔖ·","ᔲ":"ᔨ·","ᔴ":"ᔩ·","ᔶ":"ᔪ·","ᔸ":"ᔫ·","ᔺ":"ᔭ·","ᔼ":"ᔮ·","ᘢ":"ᕃ","ᣠ":"ᕃ·","ᘣ":"ᕆ","ᘤ":"ᕊ","ᕏ":"ᕌ·","ᖃ":"ᕐb","ᖄ":"ᕐḃ","ᖁ":"ᕐd","ᕿ":"ᕐP","ᙯ":"ᕐᑫ","ᕾ":"ᕐᑬ","ᖀ":"ᕐᑮ","ᖂ":"ᕐᑰ","ᖅ":"ᕐᒃ","ᕜ":"ᕚ·","ᣣ":"ᕞ·","ᣤ":"ᕦ·","ᕩ":"ᕧ·","ᣥ":"ᕫ·","ᣨ":"ᖆ·","ᖑ":"ᖕJ","ᙰ":"ᖕᒉ","ᖎ":"ᖕᒊ","ᖏ":"ᖕᒋ","ᖐ":"ᖕᒌ","ᖒ":"ᖕᒎ","ᖓ":"ᖕᒐ","ᖔ":"ᖕᒑ","ᙳ":"ᖖJ","ᙱ":"ᖖᒋ","ᙲ":"ᖖᒌ","ᙴ":"ᖖᒎ","ᙵ":"ᖖᒐ","ᙶ":"ᖖᒑ","ᣪ":"ᖗ·","ᙷ":"ᖧ·","ᙸ":"ᖨ·","ᙹ":"ᖩ·","ᙺ":"ᖪ·","ᙻ":"ᖫ·","ᙼ":"ᖬ·","ᙽ":"ᖭ·","⪫":"ᗒ","⪪":"ᗕ","ꓷ":"ᗡ","ᣰ":"ᗴ·","ᣲ":"ᘛ·","ᶻ":"ᙆ","ꓭ":"ᙠ","ᶺ":"ᣔ","ᴾ":"ᣖ","ᣜ":"ᣟᐞ","ˡ":"ᣳ","ʳ":"ᣴ","ˢ":"ᣵ","ᣛ":"ᣵ","ꚰ":"ᚹ","ᛡ":"ᚼ","⍿":"ᚽ","ᛂ":"ᚽ","𝈿":"ᛋ","↑":"ᛏ","↿":"ᛐ","⥮":"ᛐ⇂","⥣":"ᛐᛚ","ⵣ":"ᛯ","↾":"ᛚ","⨡":"ᛚ","⋄":"ᛜ","◇":"ᛜ","◊":"ᛜ","♢":"ᛜ","🝔":"ᛜ","𑢷":"ᛜ","𐊔":"ᛜ","⍚":"ᛜ̲","⋈":"ᛞ","⨝":"ᛞ","𐓐":"ᛦ","↕":"ᛨ","𐳼":"𐲂","𐳺":"𐲥","ㄱ":"ᄀ","ᆨ":"ᄀ","ᄁ":"ᄀᄀ","ㄲ":"ᄀᄀ","ᆩ":"ᄀᄀ","ᇺ":"ᄀᄂ","ᅚ":"ᄀᄃ","ᇃ":"ᄀᄅ","ᇻ":"ᄀᄇ","ᆪ":"ᄀᄉ","ㄳ":"ᄀᄉ","ᇄ":"ᄀᄉᄀ","ᇼ":"ᄀᄎ","ᇽ":"ᄀᄏ","ᇾ":"ᄀᄒ","ㄴ":"ᄂ","ᆫ":"ᄂ","ᄓ":"ᄂᄀ","ᇅ":"ᄂᄀ","ᄔ":"ᄂᄂ","ㅥ":"ᄂᄂ","ᇿ":"ᄂᄂ","ᄕ":"ᄂᄃ","ㅦ":"ᄂᄃ","ᇆ":"ᄂᄃ","ퟋ":"ᄂᄅ","ᄖ":"ᄂᄇ","ᅛ":"ᄂᄉ","ᇇ":"ᄂᄉ","ㅧ":"ᄂᄉ","ᅜ":"ᄂᄌ","ᆬ":"ᄂᄌ","ㄵ":"ᄂᄌ","ퟌ":"ᄂᄎ","ᇉ":"ᄂᄐ","ᅝ":"ᄂᄒ","ᆭ":"ᄂᄒ","ㄶ":"ᄂᄒ","ᇈ":"ᄂᅀ","ㅨ":"ᄂᅀ","ㄷ":"ᄃ","ᆮ":"ᄃ","ᄗ":"ᄃᄀ","ᇊ":"ᄃᄀ","ᄄ":"ᄃᄃ","ㄸ":"ᄃᄃ","ퟍ":"ᄃᄃ","ퟎ":"ᄃᄃᄇ","ᅞ":"ᄃᄅ","ᇋ":"ᄃᄅ","ꥠ":"ᄃᄆ","ꥡ":"ᄃᄇ","ퟏ":"ᄃᄇ","ꥢ":"ᄃᄉ","ퟐ":"ᄃᄉ","ퟑ":"ᄃᄉᄀ","ꥣ":"ᄃᄌ","ퟒ":"ᄃᄌ","ퟓ":"ᄃᄎ","ퟔ":"ᄃᄐ","ㄹ":"ᄅ","ᆯ":"ᄅ","ꥤ":"ᄅᄀ","ᆰ":"ᄅᄀ","ㄺ":"ᄅᄀ","ꥥ":"ᄅᄀᄀ","ퟕ":"ᄅᄀᄀ","ᇌ":"ᄅᄀᄉ","ㅩ":"ᄅᄀᄉ","ퟖ":"ᄅᄀᄒ","ᄘ":"ᄅᄂ","ᇍ":"ᄅᄂ","ꥦ":"ᄅᄃ","ᇎ":"ᄅᄃ","ㅪ":"ᄅᄃ","ꥧ":"ᄅᄃᄃ","ᇏ":"ᄅᄃᄒ","ᄙ":"ᄅᄅ","ᇐ":"ᄅᄅ","ퟗ":"ᄅᄅᄏ","ꥨ":"ᄅᄆ","ᆱ":"ᄅᄆ","ㄻ":"ᄅᄆ","ᇑ":"ᄅᄆᄀ","ᇒ":"ᄅᄆᄉ","ퟘ":"ᄅᄆᄒ","ꥩ":"ᄅᄇ","ᆲ":"ᄅᄇ","ㄼ":"ᄅᄇ","ퟙ":"ᄅᄇᄃ","ꥪ":"ᄅᄇᄇ","ᇓ":"ᄅᄇᄉ","ㅫ":"ᄅᄇᄉ","ꥫ":"ᄅᄇᄋ","ᇕ":"ᄅᄇᄋ","ퟚ":"ᄅᄇᄑ","ᇔ":"ᄅᄇᄒ","ꥬ":"ᄅᄉ","ᆳ":"ᄅᄉ","ㄽ":"ᄅᄉ","ᇖ":"ᄅᄉᄉ","ᄛ":"ᄅᄋ","ퟝ":"ᄅᄋ","ꥭ":"ᄅᄌ","ꥮ":"ᄅᄏ","ᇘ":"ᄅᄏ","ᆴ":"ᄅᄐ","ㄾ":"ᄅᄐ","ᆵ":"ᄅᄑ","ㄿ":"ᄅᄑ","ᄚ":"ᄅᄒ","ㅀ":"ᄅᄒ","ᄻ":"ᄅᄒ","ᆶ":"ᄅᄒ","ퟲ":"ᄅᄒ","ᇗ":"ᄅᅀ","ㅬ":"ᄅᅀ","ퟛ":"ᄅᅌ","ᇙ":"ᄅᅙ","ㅭ":"ᄅᅙ","ퟜ":"ᄅᅙᄒ","ㅁ":"ᄆ","ᆷ":"ᄆ","ꥯ":"ᄆᄀ","ᇚ":"ᄆᄀ","ퟞ":"ᄆᄂ","ퟟ":"ᄆᄂᄂ","ꥰ":"ᄆᄃ","ᇛ":"ᄆᄅ","ퟠ":"ᄆᄆ","ᄜ":"ᄆᄇ","ㅮ":"ᄆᄇ","ᇜ":"ᄆᄇ","ퟡ":"ᄆᄇᄉ","ꥱ":"ᄆᄉ","ᇝ":"ᄆᄉ","ㅯ":"ᄆᄉ","ᇞ":"ᄆᄉᄉ","ᄝ":"ᄆᄋ","ㅱ":"ᄆᄋ","ᇢ":"ᄆᄋ","ퟢ":"ᄆᄌ","ᇠ":"ᄆᄎ","ᇡ":"ᄆᄒ","ᇟ":"ᄆᅀ","ㅰ":"ᄆᅀ","ㅂ":"ᄇ","ᆸ":"ᄇ","ᄞ":"ᄇᄀ","ㅲ":"ᄇᄀ","ᄟ":"ᄇᄂ","ᄠ":"ᄇᄃ","ㅳ":"ᄇᄃ","ퟣ":"ᄇᄃ","ᇣ":"ᄇᄅ","ퟤ":"ᄇᄅᄑ","ퟥ":"ᄇᄆ","ᄈ":"ᄇᄇ","ㅃ":"ᄇᄇ","ퟦ":"ᄇᄇ","ᄬ":"ᄇᄇᄋ","ㅹ":"ᄇᄇᄋ","ᄡ":"ᄇᄉ","ㅄ":"ᄇᄉ","ᆹ":"ᄇᄉ","ᄢ":"ᄇᄉᄀ","ㅴ":"ᄇᄉᄀ","ᄣ":"ᄇᄉᄃ","ㅵ":"ᄇᄉᄃ","ퟧ":"ᄇᄉᄃ","ᄤ":"ᄇᄉᄇ","ᄥ":"ᄇᄉᄉ","ᄦ":"ᄇᄉᄌ","ꥲ":"ᄇᄉᄐ","ᄫ":"ᄇᄋ","ㅸ":"ᄇᄋ","ᇦ":"ᄇᄋ","ᄧ":"ᄇᄌ","ㅶ":"ᄇᄌ","ퟨ":"ᄇᄌ","ᄨ":"ᄇᄎ","ퟩ":"ᄇᄎ","ꥳ":"ᄇᄏ","ᄩ":"ᄇᄐ","ㅷ":"ᄇᄐ","ᄪ":"ᄇᄑ","ᇤ":"ᄇᄑ","ꥴ":"ᄇᄒ","ᇥ":"ᄇᄒ","ㅅ":"ᄉ","ᆺ":"ᄉ","ᄭ":"ᄉᄀ","ㅺ":"ᄉᄀ","ᇧ":"ᄉᄀ","ᄮ":"ᄉᄂ","ㅻ":"ᄉᄂ","ᄯ":"ᄉᄃ","ㅼ":"ᄉᄃ","ᇨ":"ᄉᄃ","ᄰ":"ᄉᄅ","ᇩ":"ᄉᄅ","ᄱ":"ᄉᄆ","ퟪ":"ᄉᄆ","ᄲ":"ᄉᄇ","ㅽ":"ᄉᄇ","ᇪ":"ᄉᄇ","ᄳ":"ᄉᄇᄀ","ퟫ":"ᄉᄇᄋ","ᄊ":"ᄉᄉ","ㅆ":"ᄉᄉ","ᆻ":"ᄉᄉ","ퟬ":"ᄉᄉᄀ","ퟭ":"ᄉᄉᄃ","ꥵ":"ᄉᄉᄇ","ᄴ":"ᄉᄉᄉ","ᄵ":"ᄉᄋ","ᄶ":"ᄉᄌ","ㅾ":"ᄉᄌ","ퟯ":"ᄉᄌ","ᄷ":"ᄉᄎ","ퟰ":"ᄉᄎ","ᄸ":"ᄉᄏ","ᄹ":"ᄉᄐ","ퟱ":"ᄉᄐ","ᄺ":"ᄉᄑ","ퟮ":"ᄉᅀ","ㅇ":"ᄋ","ᆼ":"ᄋ","ᅁ":"ᄋᄀ","ᇬ":"ᄋᄀ","ᇭ":"ᄋᄀᄀ","ᅂ":"ᄋᄃ","ꥶ":"ᄋᄅ","ᅃ":"ᄋᄆ","ᅄ":"ᄋᄇ","ᅅ":"ᄋᄉ","ᇱ":"ᄋᄉ","ㆂ":"ᄋᄉ","ᅇ":"ᄋᄋ","ㆀ":"ᄋᄋ","ᇮ":"ᄋᄋ","ᅈ":"ᄋᄌ","ᅉ":"ᄋᄎ","ᇯ":"ᄋᄏ","ᅊ":"ᄋᄐ","ᅋ":"ᄋᄑ","ꥷ":"ᄋᄒ","ᅆ":"ᄋᅀ","ᇲ":"ᄋᅀ","ㆃ":"ᄋᅀ","ㅈ":"ᄌ","ᆽ":"ᄌ","ퟷ":"ᄌᄇ","ퟸ":"ᄌᄇᄇ","ᅍ":"ᄌᄋ","ᄍ":"ᄌᄌ","ㅉ":"ᄌᄌ","ퟹ":"ᄌᄌ","ꥸ":"ᄌᄌᄒ","ㅊ":"ᄎ","ᆾ":"ᄎ","ᅒ":"ᄎᄏ","ᅓ":"ᄎᄒ","ㅋ":"ᄏ","ᆿ":"ᄏ","ㅌ":"ᄐ","ᇀ":"ᄐ","ꥹ":"ᄐᄐ","ㅍ":"ᄑ","ᇁ":"ᄑ","ᅖ":"ᄑᄇ","ᇳ":"ᄑᄇ","ퟺ":"ᄑᄉ","ᅗ":"ᄑᄋ","ㆄ":"ᄑᄋ","ᇴ":"ᄑᄋ","ퟻ":"ᄑᄐ","ꥺ":"ᄑᄒ","ㅎ":"ᄒ","ᇂ":"ᄒ","ᇵ":"ᄒᄂ","ᇶ":"ᄒᄅ","ᇷ":"ᄒᄆ","ᇸ":"ᄒᄇ","ꥻ":"ᄒᄉ","ᅘ":"ᄒᄒ","ㆅ":"ᄒᄒ","ᄽ":"ᄼᄼ","ᄿ":"ᄾᄾ","ㅿ":"ᅀ","ᇫ":"ᅀ","ퟳ":"ᅀᄇ","ퟴ":"ᅀᄇᄋ","ㆁ":"ᅌ","ᇰ":"ᅌ","ퟵ":"ᅌᄆ","ퟶ":"ᅌᄒ","ᅏ":"ᅎᅎ","ᅑ":"ᅐᅐ","ㆆ":"ᅙ","ᇹ":"ᅙ","ꥼ":"ᅙᅙ","ㅤ":"ᅠ","ㅏ":"ᅡ","ᆣ":"ᅡー","ᅶ":"ᅡᅩ","ᅷ":"ᅡᅮ","ᅢ":"ᅡ丨","ㅐ":"ᅡ丨","ㅑ":"ᅣ","ᅸ":"ᅣᅩ","ᅹ":"ᅣᅭ","ᆤ":"ᅣᅮ","ᅤ":"ᅣ丨","ㅒ":"ᅣ丨","ㅓ":"ᅥ","ᅼ":"ᅥー","ᅺ":"ᅥᅩ","ᅻ":"ᅥᅮ","ᅦ":"ᅥ丨","ㅔ":"ᅥ丨","ㅕ":"ᅧ","ᆥ":"ᅧᅣ","ᅽ":"ᅧᅩ","ᅾ":"ᅧᅮ","ᅨ":"ᅧ丨","ㅖ":"ᅧ丨","ㅗ":"ᅩ","ᅪ":"ᅩᅡ","ㅘ":"ᅩᅡ","ᅫ":"ᅩᅡ丨","ㅙ":"ᅩᅡ丨","ᆦ":"ᅩᅣ","ᆧ":"ᅩᅣ丨","ᅿ":"ᅩᅥ","ᆀ":"ᅩᅥ丨","ힰ":"ᅩᅧ","ᆁ":"ᅩᅧ丨","ᆂ":"ᅩᅩ","ힱ":"ᅩᅩ丨","ᆃ":"ᅩᅮ","ᅬ":"ᅩ丨","ㅚ":"ᅩ丨","ㅛ":"ᅭ","ힲ":"ᅭᅡ","ힳ":"ᅭᅡ丨","ᆄ":"ᅭᅣ","ㆇ":"ᅭᅣ","ᆆ":"ᅭᅣ","ᆅ":"ᅭᅣ丨","ㆈ":"ᅭᅣ丨","ힴ":"ᅭᅥ","ᆇ":"ᅭᅩ","ᆈ":"ᅭ丨","ㆉ":"ᅭ丨","ㅜ":"ᅮ","ᆉ":"ᅮᅡ","ᆊ":"ᅮᅡ丨","ᅯ":"ᅮᅥ","ㅝ":"ᅮᅥ","ᆋ":"ᅮᅥー","ᅰ":"ᅮᅥ丨","ㅞ":"ᅮᅥ丨","ힵ":"ᅮᅧ","ᆌ":"ᅮᅧ丨","ᆍ":"ᅮᅮ","ᅱ":"ᅮ丨","ㅟ":"ᅮ丨","ힶ":"ᅮ丨丨","ㅠ":"ᅲ","ᆎ":"ᅲᅡ","ힷ":"ᅲᅡ丨","ᆏ":"ᅲᅥ","ᆐ":"ᅲᅥ丨","ᆑ":"ᅲᅧ","ㆊ":"ᅲᅧ","ᆒ":"ᅲᅧ丨","ㆋ":"ᅲᅧ丨","ힸ":"ᅲᅩ","ᆓ":"ᅲᅮ","ᆔ":"ᅲ丨","ㆌ":"ᅲ丨","ㆍ":"ᆞ","ퟅ":"ᆞᅡ","ᆟ":"ᆞᅥ","ퟆ":"ᆞᅥ丨","ᆠ":"ᆞᅮ","ᆢ":"ᆞᆞ","ᆡ":"ᆞ丨","ㆎ":"ᆞ丨","ヘ":"へ","⍁":"〼","⧄":"〼","꒞":"ꁊ","꒬":"ꁐ","꒜":"ꃀ","꒨":"ꄲ","꒿":"ꉙ","꒾":"ꊱ","꒔":"ꋍ","꓀":"ꎫ","꓂":"ꎵ","꒺":"ꎿ","꒰":"ꏂ","꒧":"ꑘ","⊥":"ꓕ","⟂":"ꓕ","𝈜":"ꓕ","Ʇ":"ꓕ","Ꞟ":"ꓤ","⅁":"ꓨ","⅂":"ꓶ","𝈕":"ꓶ","𝈫":"ꓶ","𖼦":"ꓶ","𐐑":"ꓶ","⅃":"𖼀","𑫦":"𑫥𑫯","𑫨":"𑫥𑫥","𑫩":"𑫥𑫥𑫯","𑫪":"𑫥𑫥𑫰","𑫧":"𑫥𑫰","𑫴":"𑫳𑫯","𑫶":"𑫳𑫳","𑫷":"𑫳𑫳𑫯","𑫸":"𑫳𑫳𑫰","𑫵":"𑫳𑫰","𑫬":"𑫫𑫯","𑫭":"𑫫𑫫","𑫮":"𑫫𑫫𑫯","⊕":"𐊨","⨁":"𐊨","🜨":"𐊨","Ꚛ":"𐊨","▽":"𐊼","𝈔":"𐊼","🜄":"𐊼","⧖":"𐋀","ꞛ":"𐐺","Ꞛ":"𐐒","𐒠":"𐒆","𐏑":"𐎂","𐏓":"𐎓","𒀸":"𐎚","☥":"𐦞","𓋹":"𐦞","〹":"卄","不":"不","丽":"丽","並":"並","⎜":"丨","⎟":"丨","⎢":"丨","⎥":"丨","⎪":"丨","⎮":"丨","㇑":"丨","ᅵ":"丨","ㅣ":"丨","⼁":"丨","ᆜ":"丨ー","ᆘ":"丨ᅡ","ᆙ":"丨ᅣ","ힽ":"丨ᅣᅩ","ힾ":"丨ᅣ丨","ힿ":"丨ᅧ","ퟀ":"丨ᅧ丨","ᆚ":"丨ᅩ","ퟁ":"丨ᅩ丨","ퟂ":"丨ᅭ","ᆛ":"丨ᅮ","ퟃ":"丨ᅲ","ᆝ":"丨ᆞ","ퟄ":"丨丨","串":"串","丸":"丸","丹":"丹","乁":"乁","㇠":"乙","⼄":"乙","㇟":"乚","⺃":"乚","㇖":"乛","⺂":"乛","⻲":"亀","亂":"亂","㇚":"亅","⼅":"亅","了":"了","ニ":"二","⼆":"二","𠄢":"𠄢","⼇":"亠","亮":"亮","⼈":"人","イ":"亻","⺅":"亻","什":"什","仌":"仌","令":"令","你":"你","倂":"併","倂":"併","侀":"侀","來":"來","例":"例","侮":"侮","侮":"侮","侻":"侻","便":"便","值":"値","倫":"倫","偺":"偺","備":"備","像":"像","僚":"僚","僧":"僧","僧":"僧","㒞":"㒞","⼉":"儿","兀":"兀","⺎":"兀","充":"充","免":"免","免":"免","兔":"兔","兤":"兤","⼊":"入","內":"內","全":"全","兩":"兩","ハ":"八","⼋":"八","六":"六","具":"具","𠔜":"𠔜","𠔥":"𠔥","冀":"冀","㒹":"㒹","⼌":"冂","再":"再","𠕋":"𠕋","冒":"冒","冕":"冕","㒻":"㒻","最":"最","⼍":"冖","冗":"冗","冤":"冤","⼎":"冫","冬":"冬","况":"况","况":"况","冷":"冷","凉":"凉","凌":"凌","凜":"凜","凞":"凞","⼏":"几","𠘺":"𠘺","凵":"凵","⼐":"凵","⼑":"刀","⺉":"刂","刃":"刃","切":"切","切":"切","列":"列","利":"利","㓟":"㓟","刺":"刺","刻":"刻","剆":"剆","割":"割","剷":"剷","劉":"劉","𠠄":"𠠄","カ":"力","力":"力","⼒":"力","劣":"劣","㔕":"㔕","劳":"劳","勇":"勇","勇":"勇","勉":"勉","勉":"勉","勒":"勒","勞":"勞","勤":"勤","勤":"勤","勵":"勵","⼓":"勹","勺":"勺","勺":"勺","包":"包","匆":"匆","𠣞":"𠣞","⼔":"匕","北":"北","北":"北","⼕":"匚","⼖":"匸","匿":"匿","⼗":"十","〸":"十","〺":"卅","卉":"卉","࿖":"卍","࿕":"卐","卑":"卑","卑":"卑","博":"博","ト":"卜","⼘":"卜","⼙":"卩","⺋":"㔾","即":"即","卵":"卵","卽":"卽","卿":"卿","卿":"卿","卿":"卿","⼚":"厂","𠨬":"𠨬","⼛":"厶","參":"參","⼜":"又","及":"及","叟":"叟","𠭣":"𠭣","ロ":"口","⼝":"口","囗":"口","⼞":"口","句":"句","叫":"叫","叱":"叱","吆":"吆","吏":"吏","吝":"吝","吸":"吸","呂":"呂","呈":"呈","周":"周","咞":"咞","咢":"咢","咽":"咽","䎛":"㖈","哶":"哶","唐":"唐","啓":"啓","啟":"啓","啕":"啕","啣":"啣","善":"善","善":"善","喇":"喇","喙":"喙","喙":"喙","喝":"喝","喝":"喝","喫":"喫","喳":"喳","嗀":"嗀","嗂":"嗂","嗢":"嗢","嘆":"嘆","嘆":"嘆","噑":"噑","噴":"噴","器":"器","囹":"囹","圖":"圖","圗":"圗","⼟":"土","士":"土","⼠":"土","型":"型","城":"城","㦳":"㘽","埴":"埴","堍":"堍","報":"報","堲":"堲","塀":"塀","塚":"塚","塚":"塚","塞":"塞","填":"塡","壿":"墫","墬":"墬","墳":"墳","壘":"壘","壟":"壟","𡓤":"𡓤","壮":"壮","売":"売","壷":"壷","⼡":"夂","夆":"夆","⼢":"夊","タ":"夕","⼣":"夕","多":"多","夢":"夢","⼤":"大","奄":"奄","奈":"奈","契":"契","奔":"奔","奢":"奢","女":"女","⼥":"女","𡚨":"𡚨","𡛪":"𡛪","姘":"姘","姬":"姬","娛":"娛","娧":"娧","婢":"婢","婦":"婦","嬀":"媯","㛮":"㛮","㛼":"㛼","媵":"媵","嬈":"嬈","嬨":"嬨","嬾":"嬾","嬾":"嬾","⼦":"子","⼧":"宀","宅":"宅","𡧈":"𡧈","寃":"寃","寘":"寘","寧":"寧","寧":"寧","寧":"寧","寮":"寮","寳":"寳","𡬘":"𡬘","⼨":"寸","寿":"寿","将":"将","⼩":"小","尢":"尢","⺐":"尢","⼪":"尢","⺏":"尣","㞁":"㞁","⼫":"尸","尿":"尿","屠":"屠","屢":"屢","層":"層","履":"履","屮":"屮","屮":"屮","⼬":"屮","𡴋":"𡴋","⼭":"山","峀":"峀","岍":"岍","𡷤":"𡷤","𡷦":"𡷦","崙":"崙","嵃":"嵃","嵐":"嵐","嵫":"嵫","嵮":"嵮","嵼":"嵼","嶲":"嶲","嶺":"嶺","⼮":"巛","巢":"巢","エ":"工","⼯":"工","⼰":"己","⺒":"巳","㠯":"㠯","巽":"巽","⼱":"巾","帲":"帡","帨":"帨","帽":"帽","幩":"幩","㡢":"㡢","𢆃":"𢆃","⼲":"干","年":"年","𢆟":"𢆟","⺓":"幺","⼳":"幺","⼴":"广","度":"度","㡼":"㡼","庰":"庰","庳":"庳","庶":"庶","廊":"廊","廊":"廊","廉":"廉","廒":"廒","廓":"廓","廙":"廙","廬":"廬","⼵":"廴","廾":"廾","⼶":"廾","𢌱":"𢌱","𢌱":"𢌱","弄":"弄","⼷":"弋","⼸":"弓","弢":"弢","弢":"弢","⼹":"彐","⺔":"彑","当":"当","㣇":"㣇","⼺":"彡","形":"形","彩":"彩","彫":"彫","⼻":"彳","律":"律","㣣":"㣣","徚":"徚","復":"復","徭":"徭","⼼":"心","⺖":"忄","⺗":"㣺","忍":"忍","志":"志","念":"念","忹":"忹","怒":"怒","怜":"怜","恵":"恵","㤜":"㤜","㤺":"㤺","悁":"悁","悔":"悔","悔":"悔","惇":"惇","惘":"惘","惡":"惡","𢛔":"𢛔","愈":"愈","慨":"慨","慄":"慄","慈":"慈","慌":"慌","慌":"慌","慎":"慎","慎":"慎","慠":"慠","慺":"慺","憎":"憎","憎":"憎","憎":"憎","憐":"憐","憤":"憤","憯":"憯","憲":"憲","𢡄":"𢡄","𢡊":"𢡊","懞":"懞","懲":"懲","懲":"懲","懲":"懲","懶":"懶","懶":"懶","戀":"戀","⼽":"戈","成":"成","戛":"戛","戮":"戮","戴":"戴","⼾":"戶","戸":"戶","⼿":"手","⺘":"扌","扝":"扝","抱":"抱","拉":"拉","拏":"拏","拓":"拓","拔":"拔","拼":"拼","拾":"拾","𢬌":"𢬌","挽":"挽","捐":"捐","捨":"捨","捻":"捻","掃":"掃","掠":"掠","掩":"掩","揄":"揄","揤":"揤","摒":"摒","𢯱":"𢯱","搜":"搜","搢":"搢","揅":"揅","摩":"摩","摷":"摷","摾":"摾","㨮":"㨮","搉":"㩁","撚":"撚","撝":"撝","擄":"擄","㩬":"㩬","⽀":"支","⽁":"攴","⺙":"攵","敏":"敏","敏":"敏","敖":"敖","敬":"敬","數":"數","𣀊":"𣀊","⽂":"文","⻫":"斉","⽃":"斗","料":"料","⽄":"斤","⽅":"方","旅":"旅","⽆":"无","⺛":"旡","既":"既","旣":"旣","⽇":"日","易":"易","曶":"㫚","㫤":"㫤","晉":"晉","晩":"晚","晴":"晴","晴":"晴","暑":"暑","暑":"暑","暈":"暈","㬈":"㬈","暜":"暜","暴":"暴","曆":"曆","㬙":"㬙","𣊸":"𣊸","⽈":"曰","更":"更","書":"書","⽉":"月","𣍟":"𣍟","肦":"朌","胐":"朏","胊":"朐","脁":"朓","胶":"㬵","朗":"朗","朗":"朗","朗":"朗","脧":"朘","望":"望","望":"望","幐":"㬺","䐠":"㬻","𣎓":"𣎓","膧":"朣","𣎜":"𣎜","⽊":"木","李":"李","杓":"杓","杖":"杖","杞":"杞","𣏃":"𣏃","柿":"杮","杻":"杻","枅":"枅","林":"林","㭉":"㭉","𣏕":"𣏕","柳":"柳","柺":"柺","栗":"栗","栟":"栟","桒":"桒","𣑭":"𣑭","梁":"梁","梅":"梅","梅":"梅","梎":"梎","梨":"梨","椔":"椔","楂":"楂","㮝":"㮝","㮝":"㮝","槩":"㮣","樧":"榝","榣":"榣","槪":"槪","樂":"樂","樂":"樂","樂":"樂","樓":"樓","𣚣":"𣚣","檨":"檨","櫓":"櫓","櫛":"櫛","欄":"欄","㰘":"㰘","⽋":"欠","次":"次","𣢧":"𣢧","歔":"歔","㱎":"㱎","⽌":"止","⻭":"歯","歲":"歲","歷":"歷","歹":"歹","⽍":"歹","⺞":"歺","殟":"殟","殮":"殮","⽎":"殳","殺":"殺","殺":"殺","殺":"殺","殻":"殻","𣪍":"𣪍","⽏":"毋","⺟":"母","𣫺":"𣫺","⽐":"比","⽑":"毛","⽒":"氏","⺠":"民","⽓":"气","⽔":"水","⺡":"氵","⺢":"氺","汎":"汎","汧":"汧","沈":"沈","沿":"沿","泌":"泌","泍":"泍","泥":"泥","𣲼":"𣲼","洛":"洛","洞":"洞","洴":"洴","派":"派","流":"流","流":"流","流":"流","洖":"洖","浩":"浩","浪":"浪","海":"海","海":"海","浸":"浸","涅":"涅","𣴞":"𣴞","淋":"淋","淚":"淚","淪":"淪","淹":"淹","渚":"渚","港":"港","湮":"湮","潙":"溈","滋":"滋","滋":"滋","溜":"溜","溺":"溺","滇":"滇","滑":"滑","滛":"滛","㴳":"㴳","漏":"漏","漢":"漢","漢":"漢","漣":"漣","𣻑":"𣻑","潮":"潮","𣽞":"𣽞","𣾎":"𣾎","濆":"濆","濫":"濫","濾":"濾","瀛":"瀛","瀞":"瀞","瀞":"瀞","瀹":"瀹","灊":"灊","㶖":"㶖","⽕":"火","⺣":"灬","灰":"灰","灷":"灷","災":"災","炙":"炙","炭":"炭","烈":"烈","烙":"烙","煮":"煮","煮":"煮","𤉣":"𤉣","煅":"煅","煉":"煉","𤋮":"𤋮","熜":"熜","燎":"燎","燐":"燐","𤎫":"𤎫","爐":"爐","爛":"爛","爨":"爨","⽖":"爪","爫":"爫","⺤":"爫","爵":"爵","爵":"爵","⽗":"父","⽘":"爻","⺦":"丬","⽙":"爿","⽚":"片","牐":"牐","⽛":"牙","𤘈":"𤘈","⽜":"牛","牢":"牢","犀":"犀","犕":"犕","⽝":"犬","⺨":"犭","犯":"犯","狀":"狀","𤜵":"𤜵","狼":"狼","猪":"猪","猪":"猪","𤠔":"𤠔","獵":"獵","獺":"獺","⽞":"玄","率":"率","率":"率","⽟":"玉","王":"王","㺬":"㺬","玥":"玥","玲":"玲","㺸":"㺸","㺸":"㺸","珞":"珞","琉":"琉","理":"理","琢":"琢","瑇":"瑇","瑜":"瑜","瑩":"瑩","瑱":"瑱","瑱":"瑱","璅":"璅","璉":"璉","璘":"璘","瓊":"瓊","⽠":"瓜","⽡":"瓦","㼛":"㼛","甆":"甆","⽢":"甘","⽣":"生","甤":"甤","⽤":"用","⽥":"田","画":"画","甾":"甾","𤰶":"𤰶","留":"留","略":"略","異":"異","異":"異","𤲒":"𤲒","⽦":"疋","⽧":"疒","痢":"痢","瘐":"瘐","瘟":"瘟","瘝":"瘝","療":"療","癩":"癩","⽨":"癶","⽩":"白","𤾡":"𤾡","𤾸":"𤾸","⽪":"皮","⽫":"皿","𥁄":"𥁄","㿼":"㿼","益":"益","益":"益","盛":"盛","盧":"盧","䀈":"䀈","⽬":"目","直":"直","直":"直","𥃲":"𥃲","𥃳":"𥃳","省":"省","䀘":"䀘","𥄙":"𥄙","眞":"眞","真":"真","真":"真","𥄳":"𥄳","着":"着","睊":"睊","睊":"睊","鿃":"䀹","䀹":"䀹","䀹":"䀹","晣":"䀿","䁆":"䁆","瞋":"瞋","𥉉":"𥉉","瞧":"瞧","⽭":"矛","⽮":"矢","⽯":"石","䂖":"䂖","𥐝":"𥐝","硏":"研","硎":"硎","硫":"硫","碌":"碌","碌":"碌","碑":"碑","磊":"磊","磌":"磌","磌":"磌","磻":"磻","䃣":"䃣","礪":"礪","⽰":"示","⺭":"礻","礼":"礼","社":"社","祈":"祈","祉":"祉","𥘦":"𥘦","祐":"祐","祖":"祖","祖":"祖","祝":"祝","神":"神","祥":"祥","視":"視","視":"視","祿":"祿","𥚚":"𥚚","禍":"禍","禎":"禎","福":"福","福":"福","𥛅":"𥛅","禮":"禮","⽱":"禸","⽲":"禾","秊":"秊","䄯":"䄯","秫":"秫","稜":"稜","穊":"穊","穀":"穀","穀":"穀","穏":"穏","⽳":"穴","突":"突","𥥼":"𥥼","窱":"窱","立":"立","⽴":"立","⻯":"竜","𥪧":"𥪧","𥪧":"𥪧","竮":"竮","⽵":"竹","笠":"笠","節":"節","節":"節","䈂":"䈂","𥮫":"𥮫","篆":"篆","䈧":"䈧","築":"築","𥲀":"𥲀","𥳐":"𥳐","簾":"簾","籠":"籠","⽶":"米","类":"类","粒":"粒","精":"精","糒":"糒","糖":"糖","糨":"糨","䊠":"䊠","糣":"糣","糧":"糧","⽷":"糸","⺯":"糹","𥾆":"𥾆","紀":"紀","紐":"紐","索":"索","累":"累","絶":"絕","絣":"絣","絛":"絛","綠":"綠","綾":"綾","緇":"緇","練":"練","練":"練","練":"練","縂":"縂","䌁":"䌁","縉":"縉","縷":"縷","繁":"繁","繅":"繅","𦇚":"𦇚","䌴":"䌴","⽸":"缶","𦈨":"𦈨","缾":"缾","𦉇":"𦉇","⽹":"网","⺫":"罒","⺲":"罒","⺱":"罓","䍙":"䍙","署":"署","𦋙":"𦋙","罹":"罹","罺":"罺","羅":"羅","𦌾":"𦌾","⽺":"羊","羕":"羕","羚":"羚","羽":"羽","⽻":"羽","翺":"翺","老":"老","⽼":"老","⺹":"耂","者":"者","者":"者","者":"者","⽽":"而","𦓚":"𦓚","⽾":"耒","𦔣":"𦔣","⽿":"耳","聆":"聆","聠":"聠","𦖨":"𦖨","聯":"聯","聰":"聰","聾":"聾","⾀":"聿","⺺":"肀","⾁":"肉","肋":"肋","肭":"肭","育":"育","䏕":"䏕","䏙":"䏙","腁":"胼","脃":"脃","脾":"脾","䐋":"䐋","朡":"朡","𦞧":"𦞧","𦞵":"𦞵","朦":"䑃","臘":"臘","⾂":"臣","臨":"臨","⾃":"自","臭":"臭","⾄":"至","⾅":"臼","舁":"舁","舁":"舁","舄":"舄","⾆":"舌","舘":"舘","⾇":"舛","⾈":"舟","䑫":"䑫","⾉":"艮","良":"良","⾊":"色","⾋":"艸","艹":"艹","艹":"艹","⺾":"艹","⺿":"艹","⻀":"艹","芋":"芋","芑":"芑","芝":"芝","花":"花","芳":"芳","芽":"芽","若":"若","若":"若","苦":"苦","𦬼":"𦬼","茶":"茶","荒":"荒","荣":"荣","茝":"茝","茣":"茣","莽":"莽","荓":"荓","菉":"菉","菊":"菊","菌":"菌","菜":"菜","菧":"菧","華":"華","菱":"菱","著":"著","著":"著","𦰶":"𦰶","莭":"莭","落":"落","葉":"葉","蔿":"蒍","𦳕":"𦳕","𦵫":"𦵫","蓮":"蓮","蓱":"蓱","蓳":"蓳","蓼":"蓼","蔖":"蔖","䔫":"䔫","蕤":"蕤","𦼬":"𦼬","藍":"藍","䕝":"䕝","𦾱":"𦾱","䕡":"䕡","藺":"藺","蘆":"蘆","䕫":"䕫","蘒":"蘒","蘭":"蘭","𧃒":"𧃒","虁":"蘷","蘿":"蘿","⾌":"虍","⻁":"虎","虐":"虐","虜":"虜","虜":"虜","虧":"虧","虩":"虩","⾍":"虫","蚩":"蚩","蚈":"蚈","蛢":"蛢","蜎":"蜎","蜨":"蜨","蝫":"蝫","蟡":"蟡","蝹":"蝹","蝹":"蝹","螆":"螆","䗗":"䗗","𧏊":"𧏊","螺":"螺","蠁":"蠁","䗹":"䗹","蠟":"蠟","⾎":"血","行":"行","⾏":"行","衠":"衠","衣":"衣","⾐":"衣","⻂":"衤","裂":"裂","𧙧":"𧙧","裏":"裏","裗":"裗","裞":"裞","裡":"裡","裸":"裸","裺":"裺","䘵":"䘵","褐":"褐","襁":"襁","襤":"襤","⾑":"襾","⻄":"西","⻃":"覀","覆":"覆","見":"見","⾒":"見","𧢮":"𧢮","⻅":"见","⾓":"角","⾔":"言","𧥦":"𧥦","詽":"訮","訞":"䚶","䚾":"䚾","䛇":"䛇","誠":"誠","說":"說","說":"說","調":"調","請":"請","諒":"諒","論":"論","諭":"諭","諭":"諭","諸":"諸","諸":"諸","諾":"諾","諾":"諾","謁":"謁","謁":"謁","謹":"謹","謹":"謹","識":"識","讀":"讀","讏":"讆","變":"變","變":"變","⻈":"讠","⾕":"谷","⾖":"豆","豈":"豈","豕":"豕","⾗":"豕","豣":"豜","⾘":"豸","𧲨":"𧲨","⾙":"貝","貫":"貫","賁":"賁","賂":"賂","賈":"賈","賓":"賓","贈":"贈","贈":"贈","贛":"贛","⻉":"贝","⾚":"赤","⾛":"走","起":"起","趆":"赿","𧻓":"𧻓","𧼯":"𧼯","⾜":"足","跋":"跋","趼":"趼","跺":"跥","路":"路","跰":"跰","躛":"躗","⾝":"身","車":"車","⾞":"車","軔":"軔","輧":"軿","輦":"輦","輪":"輪","輸":"輸","輸":"輸","輻":"輻","轢":"轢","⻋":"车","⾟":"辛","辞":"辞","辰":"辰","⾠":"辰","⾡":"辵","辶":"辶","⻌":"辶","⻍":"辶","巡":"巡","連":"連","逸":"逸","逸":"逸","遲":"遲","遼":"遼","𨗒":"𨗒","𨗭":"𨗭","邏":"邏","⾢":"邑","邔":"邔","郎":"郎","郞":"郎","郞":"郎","郱":"郱","都":"都","𨜮":"𨜮","鄑":"鄑","鄛":"鄛","⾣":"酉","酪":"酪","醙":"醙","醴":"醴","⾤":"釆","里":"里","⾥":"里","量":"量","金":"金","⾦":"金","鈴":"鈴","鈸":"鈸","鉶":"鉶","鋗":"鋗","鋘":"鋘","鉼":"鉼","錄":"錄","鍊":"鍊","鎮":"鎭","鏹":"鏹","鐕":"鐕","𨯺":"𨯺","⻐":"钅","⻑":"長","⾧":"長","⻒":"镸","⻓":"长","⾨":"門","開":"開","䦕":"䦕","閭":"閭","閷":"閷","𨵷":"𨵷","⻔":"门","⾩":"阜","⻏":"阝","⻖":"阝","阮":"阮","陋":"陋","降":"降","陵":"陵","陸":"陸","陼":"陼","隆":"隆","隣":"隣","䧦":"䧦","⾪":"隶","隷":"隷","隸":"隷","隸":"隷","⾫":"隹","雃":"雃","離":"離","難":"難","難":"難","⾬":"雨","零":"零","雷":"雷","霣":"霣","𩅅":"𩅅","露":"露","靈":"靈","⾭":"靑","⻘":"青","靖":"靖","靖":"靖","𩇟":"𩇟","⾮":"非","⾯":"面","𩈚":"𩈚","⾰":"革","䩮":"䩮","䩶":"䩶","⾱":"韋","韛":"韛","韠":"韠","⻙":"韦","⾲":"韭","𩐊":"𩐊","⾳":"音","響":"響","響":"響","⾴":"頁","䪲":"䪲","頋":"頋","頋":"頋","頋":"頋","領":"領","頩":"頩","𩒖":"𩒖","頻":"頻","頻":"頻","類":"類","⻚":"页","⾵":"風","𩖶":"𩖶","⻛":"风","⾶":"飛","⻜":"飞","⻝":"食","⾷":"食","⻟":"飠","飢":"飢","飯":"飯","飼":"飼","䬳":"䬳","館":"館","餩":"餩","⻠":"饣","⾸":"首","⾹":"香","馧":"馧","⾺":"馬","駂":"駂","駱":"駱","駾":"駾","驪":"驪","⻢":"马","⾻":"骨","䯎":"䯎","⾼":"高","⾽":"髟","𩬰":"𩬰","鬒":"鬒","鬒":"鬒","⾾":"鬥","⾿":"鬯","⿀":"鬲","⿁":"鬼","⻤":"鬼","⿂":"魚","魯":"魯","鱀":"鱀","鱗":"鱗","⻥":"鱼","⿃":"鳥","鳽":"鳽","䳎":"䳎","鵧":"鵧","䳭":"䳭","𪃎":"𪃎","鶴":"鶴","𪄅":"𪄅","䳸":"䳸","鷺":"鷺","𪈎":"𪈎","鸞":"鸞","鹃":"鹂","⿄":"鹵","鹿":"鹿","⿅":"鹿","𪊑":"𪊑","麗":"麗","麟":"麟","⿆":"麥","⻨":"麦","麻":"麻","⿇":"麻","𪎒":"𪎒","⿈":"黃","⻩":"黄","⿉":"黍","黎":"黎","䵖":"䵖","⿊":"黑","黒":"黑","墨":"墨","黹":"黹","⿋":"黹","⿌":"黽","鼅":"鼅","黾":"黾","⿍":"鼎","鼏":"鼏","⿎":"鼓","鼖":"鼖","⿏":"鼠","鼻":"鼻","⿐":"鼻","齃":"齃","⿑":"齊","⻬":"齐","⿒":"齒","𪘀":"𪘀","⻮":"齿","龍":"龍","⿓":"龍","龎":"龎","⻰":"龙","龜":"龜","龜":"龜","龜":"龜","⿔":"龜","⻳":"龟","⿕":"龠"}},{}],55:[function(e,t,r){"use strict";var n=e("./data.json");var i=RegExp(Object.keys(n).map((function(e){return e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")})).join("|"),"g");function o(e){return n[e]}t.exports=function(e){return e.replace(i,o)}},{"./data.json":54}],56:[function(e,t,r){"use strict";var n=e("punycode"),i=e("./util");function o(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}r.parse=b,r.resolve=function(e,t){return b(e,!1,!0).resolve(t)},r.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},r.format=function(e){i.isString(e)&&(e=b(e));return e instanceof o?e.format():o.prototype.format.call(e)},r.Url=o;var s=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,u=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(u),d=["%","/","?",";","#"].concat(l),h=["/","?","#"],f=/^[+a-z0-9A-Z_-]{0,63}$/,g=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,p={javascript:!0,"javascript:":!0},v={javascript:!0,"javascript:":!0},y={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},m=e("querystring");function b(e,t,r){if(e&&i.isObject(e)&&e instanceof o)return e;var n=new o;return n.parse(e,t,r),n}o.prototype.parse=function(e,t,r){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var o=e.indexOf("?"),a=-1!==o&&o<e.indexOf("#")?"?":"#",u=e.split(a);u[0]=u[0].replace(/\\/g,"/");var b=e=u.join(a);if(b=b.trim(),!r&&1===e.split("#").length){var S=c.exec(b);if(S)return this.path=b,this.href=b,this.pathname=S[1],S[2]?(this.search=S[2],this.query=t?m.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var _=s.exec(b);if(_){var E=(_=_[0]).toLowerCase();this.protocol=E,b=b.substr(_.length)}if(r||_||b.match(/^\/\/[^@\/]+@[^@\/]+/)){var k="//"===b.substr(0,2);!k||_&&v[_]||(b=b.substr(2),this.slashes=!0)}if(!v[_]&&(k||_&&!y[_])){for(var w,I,T=-1,R=0;R<h.length;R++){-1!==(C=b.indexOf(h[R]))&&(-1===T||C<T)&&(T=C)}-1!==(I=-1===T?b.lastIndexOf("@"):b.lastIndexOf("@",T))&&(w=b.slice(0,I),b=b.slice(I+1),this.auth=decodeURIComponent(w)),T=-1;for(R=0;R<d.length;R++){var C;-1!==(C=b.indexOf(d[R]))&&(-1===T||C<T)&&(T=C)}-1===T&&(T=b.length),this.host=b.slice(0,T),b=b.slice(T),this.parseHost(),this.hostname=this.hostname||"";var O="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!O)for(var D=this.hostname.split(/\./),A=(R=0,D.length);R<A;R++){var P=D[R];if(P&&!P.match(f)){for(var x="",M=0,U=P.length;M<U;M++)P.charCodeAt(M)>127?x+="x":x+=P[M];if(!x.match(f)){var K=D.slice(0,R),B=D.slice(R+1),N=P.match(g);N&&(K.push(N[1]),B.unshift(N[2])),B.length&&(b="/"+B.join(".")+b),this.hostname=K.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),O||(this.hostname=n.toASCII(this.hostname));var L=this.port?":"+this.port:"",q=this.hostname||"";this.host=q+L,this.href+=this.host,O&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!p[E])for(R=0,A=l.length;R<A;R++){var j=l[R];if(-1!==b.indexOf(j)){var F=encodeURIComponent(j);F===j&&(F=escape(j)),b=b.split(j).join(F)}}var G=b.indexOf("#");-1!==G&&(this.hash=b.substr(G),b=b.slice(0,G));var $=b.indexOf("?");if(-1!==$?(this.search=b.substr($),this.query=b.substr($+1),t&&(this.query=m.parse(this.query)),b=b.slice(0,$)):t&&(this.search="",this.query={}),b&&(this.pathname=b),y[E]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){L=this.pathname||"";var V=this.search||"";this.path=L+V}return this.href=this.format(),this},o.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",o=!1,s="";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(o+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(s=m.stringify(this.query));var a=this.search||s&&"?"+s||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||y[t])&&!1!==o?(o="//"+(o||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):o||(o=""),n&&"#"!==n.charAt(0)&&(n="#"+n),a&&"?"!==a.charAt(0)&&(a="?"+a),t+o+(r=r.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(a=a.replace("#","%23"))+n},o.prototype.resolve=function(e){return this.resolveObject(b(e,!1,!0)).format()},o.prototype.resolveObject=function(e){if(i.isString(e)){var t=new o;t.parse(e,!1,!0),e=t}for(var r=new o,n=Object.keys(this),s=0;s<n.length;s++){var a=n[s];r[a]=this[a]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),u=0;u<c.length;u++){var l=c[u];"protocol"!==l&&(r[l]=e[l])}return y[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!y[e.protocol]){for(var d=Object.keys(e),h=0;h<d.length;h++){var f=d[h];r[f]=e[f]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||v[e.protocol])r.pathname=e.pathname;else{for(var g=(e.pathname||"").split("/");g.length&&!(e.host=g.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==g[0]&&g.unshift(""),g.length<2&&g.unshift(""),r.pathname=g.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var p=r.pathname||"",m=r.search||"";r.path=p+m}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var b=r.pathname&&"/"===r.pathname.charAt(0),S=e.host||e.pathname&&"/"===e.pathname.charAt(0),_=S||b||r.host&&e.pathname,E=_,k=r.pathname&&r.pathname.split("/")||[],w=(g=e.pathname&&e.pathname.split("/")||[],r.protocol&&!y[r.protocol]);if(w&&(r.hostname="",r.port=null,r.host&&(""===k[0]?k[0]=r.host:k.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===g[0]?g[0]=e.host:g.unshift(e.host)),e.host=null),_=_&&(""===g[0]||""===k[0])),S)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,k=g;else if(g.length)k||(k=[]),k.pop(),k=k.concat(g),r.search=e.search,r.query=e.query;else if(!i.isNullOrUndefined(e.search)){if(w)r.hostname=r.host=k.shift(),(O=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=O.shift(),r.host=r.hostname=O.shift());return r.search=e.search,r.query=e.query,i.isNull(r.pathname)&&i.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!k.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var I=k.slice(-1)[0],T=(r.host||e.host||k.length>1)&&("."===I||".."===I)||""===I,R=0,C=k.length;C>=0;C--)"."===(I=k[C])?k.splice(C,1):".."===I?(k.splice(C,1),R++):R&&(k.splice(C,1),R--);if(!_&&!E)for(;R--;R)k.unshift("..");!_||""===k[0]||k[0]&&"/"===k[0].charAt(0)||k.unshift(""),T&&"/"!==k.join("/").substr(-1)&&k.push("");var O,D=""===k[0]||k[0]&&"/"===k[0].charAt(0);w&&(r.hostname=r.host=D?"":k.length?k.shift():"",(O=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=O.shift(),r.host=r.hostname=O.shift()));return(_=_||r.host&&k.length)&&!D&&k.unshift(""),k.length?r.pathname=k.join("/"):(r.pathname=null,r.path=null),i.isNull(r.pathname)&&i.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},o.prototype.parseHost=function(){var e=this.host,t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":57,punycode:32,querystring:48}],57:[function(e,t,r){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],58:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.UNSTABLE_MSC3089_BRANCH=r.UNSTABLE_MSC3089_LEAF=r.UNSTABLE_MSC3089_TREE_SUBTYPE=r.UNSTABLE_MSC3088_ENABLED=r.UNSTABLE_MSC3088_PURPOSE=r.RoomType=r.RoomCreateTypeField=r.MsgType=r.RelationType=r.EventType=void 0;const n=e("../NamespacedValue");!function(e){e.RoomCanonicalAlias="m.room.canonical_alias",e.RoomCreate="m.room.create",e.RoomJoinRules="m.room.join_rules",e.RoomMember="m.room.member",e.RoomThirdPartyInvite="m.room.third_party_invite",e.RoomPowerLevels="m.room.power_levels",e.RoomName="m.room.name",e.RoomTopic="m.room.topic",e.RoomAvatar="m.room.avatar",e.RoomPinnedEvents="m.room.pinned_events",e.RoomEncryption="m.room.encryption",e.RoomHistoryVisibility="m.room.history_visibility",e.RoomGuestAccess="m.room.guest_access",e.RoomServerAcl="m.room.server_acl",e.RoomTombstone="m.room.tombstone",e.RoomAliases="m.room.aliases",e.SpaceChild="m.space.child",e.SpaceParent="m.space.parent",e.RoomRedaction="m.room.redaction",e.RoomMessage="m.room.message",e.RoomMessageEncrypted="m.room.encrypted",e.Sticker="m.sticker",e.CallInvite="m.call.invite",e.CallCandidates="m.call.candidates",e.CallAnswer="m.call.answer",e.CallHangup="m.call.hangup",e.CallReject="m.call.reject",e.CallSelectAnswer="m.call.select_answer",e.CallNegotiate="m.call.negotiate",e.CallReplaces="m.call.replaces",e.CallAssertedIdentity="m.call.asserted_identity",e.CallAssertedIdentityPrefix="org.matrix.call.asserted_identity",e.KeyVerificationRequest="m.key.verification.request",e.KeyVerificationStart="m.key.verification.start",e.KeyVerificationCancel="m.key.verification.cancel",e.KeyVerificationMac="m.key.verification.mac",e.KeyVerificationDone="m.key.verification.done",e.RoomMessageFeedback="m.room.message.feedback",e.Reaction="m.reaction",e.Typing="m.typing",e.Receipt="m.receipt",e.Presence="m.presence",e.FullyRead="m.fully_read",e.Tag="m.tag",e.SpaceOrder="org.matrix.msc3230.space_order",e.PushRules="m.push_rules",e.Direct="m.direct",e.IgnoredUserList="m.ignored_user_list",e.RoomKey="m.room_key",e.RoomKeyRequest="m.room_key_request",e.ForwardedRoomKey="m.forwarded_room_key",e.Dummy="m.dummy"}(r.EventType||(r.EventType={})),function(e){e.Annotation="m.annotation",e.Replace="m.replace"}(r.RelationType||(r.RelationType={})),function(e){e.Text="m.text",e.Emote="m.emote",e.Notice="m.notice",e.Image="m.image",e.File="m.file",e.Audio="m.audio",e.Location="m.location",e.Video="m.video"}(r.MsgType||(r.MsgType={})),r.RoomCreateTypeField="type",function(e){e.Space="m.space"}(r.RoomType||(r.RoomType={})),r.UNSTABLE_MSC3088_PURPOSE=new n.UnstableValue("m.room.purpose","org.matrix.msc3088.purpose"),r.UNSTABLE_MSC3088_ENABLED=new n.UnstableValue("m.enabled","org.matrix.msc3088.enabled"),r.UNSTABLE_MSC3089_TREE_SUBTYPE=new n.UnstableValue("m.data_tree","org.matrix.msc3089.data_tree"),r.UNSTABLE_MSC3089_LEAF=new n.UnstableValue("m.leaf","org.matrix.msc3089.leaf"),r.UNSTABLE_MSC3089_BRANCH=new n.UnstableValue("m.branch","org.matrix.msc3089.branch")},{"../NamespacedValue":60}],59:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Preset=r.Visibility=void 0,function(e){e.Public="public",e.Private="private"}(r.Visibility||(r.Visibility={})),function(e){e.PrivateChat="private_chat",e.TrustedPrivateChat="trusted_private_chat",e.PublicChat="public_chat"}(r.Preset||(r.Preset={}))},{}],60:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.UnstableValue=r.NamespacedValue=void 0;class n{constructor(e,t){if(this.stable=e,this.unstable=t,!this.unstable&&!this.stable)throw new Error("One of stable or unstable values must be supplied")}get name(){return this.stable?this.stable:this.unstable}get altName(){return this.stable?this.unstable:null}matches(e){return this.name===e||this.altName===e}findIn(e){let t;return this.name&&(t=null==e?void 0:e[this.name]),!t&&this.altName&&(t=null==e?void 0:e[this.altName]),t}includedIn(e){let t=!1;return this.name&&(t=e.includes(this.name)),!t&&this.altName&&(t=e.includes(this.altName)),t}}r.NamespacedValue=n;r.UnstableValue=class extends n{constructor(e,t){if(super(e,t),!this.unstable)throw new Error("Unstable value must be supplied")}get name(){return this.unstable}get altName(){return this.stable}}},{}],61:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ReEmitter=void 0;r.ReEmitter=class{constructor(e){this.target=e}reEmit(e,t){for(const r of t){const t=(...t)=>{"error"===r&&0===this.target.listenerCount("error")||this.target.emit(r,...t,e)};e.on(r,t)}}}},{}],62:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.AutoDiscovery=void 0;var i=n(e("@babel/runtime/regenerator")),o=n(e("@babel/runtime/helpers/asyncToGenerator")),s=n(e("@babel/runtime/helpers/createClass")),a=n(e("@babel/runtime/helpers/classCallCheck")),c=e("./logger"),u=e("url"),l=function(){function t(){(0,a.default)(this,t)}var r,n,l,d;return(0,s.default)(t,null,[{key:"fromDiscoveryConfig",value:(d=(0,o.default)(i.default.mark((function e(r){var n,o,s,a,u,l;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n={"m.homeserver":{state:t.FAIL_ERROR,error:t.ERROR_INVALID,base_url:null},"m.identity_server":{state:t.PROMPT,error:null,base_url:null}},r&&r["m.homeserver"]){e.next=6;break}return c.logger.error("No m.homeserver key in config"),n["m.homeserver"].state=t.FAIL_PROMPT,n["m.homeserver"].error=t.ERROR_INVALID,e.abrupt("return",Promise.resolve(n));case 6:if(r["m.homeserver"].base_url){e.next=11;break}return c.logger.error("No m.homeserver base_url in config"),n["m.homeserver"].state=t.FAIL_PROMPT,n["m.homeserver"].error=t.ERROR_INVALID_HS_BASE_URL,e.abrupt("return",Promise.resolve(n));case 11:if(o=this._sanitizeWellKnownUrl(r["m.homeserver"].base_url)){e.next=16;break}return c.logger.error("Invalid base_url for m.homeserver"),n["m.homeserver"].error=t.ERROR_INVALID_HS_BASE_URL,e.abrupt("return",Promise.resolve(n));case 16:return e.next=18,this._fetchWellKnownObject("".concat(o,"/_matrix/client/versions"));case 18:if((s=e.sent)&&s.raw.versions){e.next=24;break}return c.logger.error("Invalid /versions response"),n["m.homeserver"].error=t.ERROR_INVALID_HOMESERVER,n["m.homeserver"].base_url=o,e.abrupt("return",Promise.resolve(n));case 24:if(n["m.homeserver"]={state:t.SUCCESS,error:null,base_url:o},a="",!r["m.identity_server"]){e.next=41;break}if(u={"m.homeserver":n["m.homeserver"],"m.identity_server":{state:t.FAIL_PROMPT,error:t.ERROR_INVALID_IS,base_url:null}},a=this._sanitizeWellKnownUrl(r["m.identity_server"].base_url)){e.next=33;break}return c.logger.error("Invalid base_url for m.identity_server"),u["m.identity_server"].error=t.ERROR_INVALID_IS_BASE_URL,e.abrupt("return",Promise.resolve(u));case 33:return e.next=35,this._fetchWellKnownObject("".concat(a,"/_matrix/identity/api/v1"));case 35:if((l=e.sent)&&l.raw&&"SUCCESS"===l.action){e.next=41;break}return c.logger.error("Invalid /api/v1 response"),u["m.identity_server"].error=t.ERROR_INVALID_IDENTITY_SERVER,u["m.identity_server"].base_url=a,e.abrupt("return",Promise.resolve(u));case 41:return a&&a.length>0&&(n["m.identity_server"]={state:t.SUCCESS,error:null,base_url:a}),Object.keys(r).map((function(e){if("m.homeserver"===e||"m.identity_server"===e)for(var t=["error","state","base_url"],i=0,o=Object.keys(r[e]);i<o.length;i++){var s=o[i];t.includes(s)||(n[e][s]=r[e][s])}else n[e]=r[e]})),e.abrupt("return",Promise.resolve(n));case 44:case"end":return e.stop()}}),e,this)}))),function(e){return d.apply(this,arguments)})},{key:"findClientConfig",value:(l=(0,o.default)(i.default.mark((function e(r){var n,o;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r&&"string"==typeof r&&0!==r.length){e.next=2;break}throw new Error("'domain' must be a string of non-zero length");case 2:return n={"m.homeserver":{state:t.FAIL_ERROR,error:t.ERROR_INVALID,base_url:null},"m.identity_server":{state:t.PROMPT,error:null,base_url:null}},e.next=5,this._fetchWellKnownObject("https://".concat(r,"/.well-known/matrix/client"));case 5:if((o=e.sent)&&"SUCCESS"===o.action){e.next=11;break}return c.logger.error("No response or error when parsing .well-known"),o.reason&&c.logger.error(o.reason),"IGNORE"===o.action?n["m.homeserver"]={state:t.PROMPT,error:null,base_url:null}:(n["m.homeserver"].state=t.FAIL_PROMPT,n["m.homeserver"].error=t.ERROR_INVALID),e.abrupt("return",Promise.resolve(n));case 11:return e.abrupt("return",t.fromDiscoveryConfig(o.raw));case 12:case"end":return e.stop()}}),e,this)}))),function(e){return l.apply(this,arguments)})},{key:"getRawClientConfig",value:(n=(0,o.default)(i.default.mark((function e(t){var r;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t&&"string"==typeof t&&0!==t.length){e.next=2;break}throw new Error("'domain' must be a string of non-zero length");case 2:return e.next=4,this._fetchWellKnownObject("https://".concat(t,"/.well-known/matrix/client"));case 4:if(r=e.sent){e.next=7;break}return e.abrupt("return",{});case 7:return e.abrupt("return",r.raw||{});case 8:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"_sanitizeWellKnownUrl",value:function(e){if(!e)return!1;try{var t=null;try{t=u.URL?new u.URL(e):new URL(e)}catch(r){t=new URL(e)}if(!t||!t.hostname)return!1;if("http:"!==t.protocol&&"https:"!==t.protocol)return!1;var r=t.port?":".concat(t.port):"",n=t.pathname?t.pathname:"",i="".concat(t.protocol,"//").concat(t.hostname).concat(r).concat(n);return i.endsWith("/")&&(i=i.substring(0,i.length-1)),i}catch(e){return c.logger.error(e),!1}}},{key:"_fetchWellKnownObject",value:(r=(0,o.default)(i.default.mark((function r(n){return i.default.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",new Promise((function(r,i){var o=e("./matrix").getRequest();if(!o)throw new Error("No request library available");o({method:"GET",uri:n,timeout:5e3},(function(e,n,i){if(e||n&&(n.statusCode<200||n.statusCode>=300)){var o="FAIL_PROMPT",s=(e?e.message:null)||"General failure";return n&&404===n.statusCode&&(o="IGNORE",s=t.ERROR_MISSING_WELLKNOWN),void r({raw:{},action:o,reason:s,error:e})}try{r({raw:JSON.parse(i),action:"SUCCESS"})}catch(e){var a=t.ERROR_INVALID;"SyntaxError"===e.name&&(a=t.ERROR_INVALID_JSON),r({raw:{},action:"FAIL_PROMPT",reason:a,error:e})}}))})));case 1:case"end":return r.stop()}}),r)}))),function(e){return r.apply(this,arguments)})},{key:"ERROR_INVALID",get:function(){return"Invalid homeserver discovery response"}},{key:"ERROR_GENERIC_FAILURE",get:function(){return"Failed to get autodiscovery configuration from server"}},{key:"ERROR_INVALID_HS_BASE_URL",get:function(){return"Invalid base_url for m.homeserver"}},{key:"ERROR_INVALID_HOMESERVER",get:function(){return"Homeserver URL does not appear to be a valid Matrix homeserver"}},{key:"ERROR_INVALID_IS_BASE_URL",get:function(){return"Invalid base_url for m.identity_server"}},{key:"ERROR_INVALID_IDENTITY_SERVER",get:function(){return"Identity server URL does not appear to be a valid identity server"}},{key:"ERROR_INVALID_IS",get:function(){return"Invalid identity server discovery response"}},{key:"ERROR_MISSING_WELLKNOWN",get:function(){return"No .well-known JSON file found"}},{key:"ERROR_INVALID_JSON",get:function(){return"Invalid JSON"}},{key:"ALL_ERRORS",get:function(){return[t.ERROR_INVALID,t.ERROR_GENERIC_FAILURE,t.ERROR_INVALID_HS_BASE_URL,t.ERROR_INVALID_HOMESERVER,t.ERROR_INVALID_IS_BASE_URL,t.ERROR_INVALID_IDENTITY_SERVER,t.ERROR_INVALID_IS,t.ERROR_MISSING_WELLKNOWN,t.ERROR_INVALID_JSON]}},{key:"FAIL_ERROR",get:function(){return"FAIL_ERROR"}},{key:"FAIL_PROMPT",get:function(){return"FAIL_PROMPT"}},{key:"PROMPT",get:function(){return"PROMPT"}},{key:"SUCCESS",get:function(){return"SUCCESS"}}]),t}();r.AutoDiscovery=l},{"./logger":106,"./matrix":107,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/regenerator":27,url:56}],63:[function(e,t,r){(function(t){(function(){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault"),i=e("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(r,"__esModule",{value:!0});var o={};r.default=void 0;var s=i(e("./matrix"));Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in r&&r[e]===s[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return s[e]}}))}));var a,c=n(e("browser-request")),u=n(e("qs"));s.request((function(e,t){return e.qs=u.default.stringify(e.qs||{},e.qsStringifyOptions),(0,c.default)(e,t)}));try{a=t.indexedDB}catch(e){}a&&s.setCryptoStoreFactory((function(){return new s.IndexedDBCryptoStore(a,"matrix-js-sdk:crypto")}));var l=s;r.default=l,t.matrixcs=s}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./matrix":107,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"browser-request":31,qs:42}],64:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.MatrixClient=r.RoomVersionStability=r.PendingEventOrdering=r.CRYPTO_ENABLED=void 0;const c=e("events"),u=e("./sync"),l=e("./models/event"),d=e("./store/stub"),h=e("./webrtc/call"),f=e("./filter"),g=e("./webrtc/callEventHandler"),p=o(e("./utils")),v=e("./utils"),y=e("./models/event-timeline"),m=e("./pushprocessor"),b=e("./autodiscovery"),S=o(e("./crypto/olmlib")),_=e("./crypto/olmlib"),E=e("./ReEmitter"),k=e("./crypto/RoomList"),w=e("./logger"),I=e("./service-types"),T=e("./http-api"),R=e("./crypto"),C=e("./crypto/recoverykey"),O=e("./crypto/key_passphrase"),D=e("./models/user"),A=e("./content-repo"),P=e("./models/search-result"),x=e("./crypto/dehydration"),M=e("./matrix"),U=e("./sync.api"),K=o(e("./content-helpers")),B=e("./crypto/api"),N=e("./@types/event"),L=e("./@types/partials"),q=e("./event-mapper"),j=a(e("url")),F=e("./randomstring"),G=e("./crypto/backup"),$=e("./models/MSC3089TreeSpace");r.CRYPTO_ENABLED=R.isCryptoAvailable();const V=6e5;var H;!function(e){e.Chronological="chronological",e.Detached="detached"}(r.PendingEventOrdering||(r.PendingEventOrdering={})),function(e){e.Stable="stable",e.Unstable="unstable"}(r.RoomVersionStability||(r.RoomVersionStability={})),function(e){e.MasterKey="master_key",e.SelfSigningKey="self_signing_key",e.UserSigningKey="user_signing_key"}(H||(H={}));class W extends c.EventEmitter{constructor(e){super(),this.reEmitter=new E.ReEmitter(this),this.olmVersion=null,this.usingExternalCrypto=!1,this.clientRunning=!1,this.timelineSupport=!1,this.urlPreviewCache={},this.unstableClientRelationAggregation=!1,this.supportsCallTransfer=!1,this.forceTURN=!1,this.iceCandidatePoolSize=0,this.canSupportVoip=!1,this.peekSync=null,this.isGuestAccount=!1,this.ongoingScrollbacks={},this.notifTimelineSet=null,this.fallbackICEServerAllowed=!1,this.syncedLeftRooms=!1,this.pushProcessor=new m.PushProcessor(this),this.turnServers=[],this.turnServersExpiry=0,this.txnCtr=0,this.startCallEventHandler=()=>{this.isInitialSyncComplete()&&(this.callEventHandler.start(),this.off("sync",this.startCallEventHandler))},e.baseUrl=p.ensureNoTrailingSlash(e.baseUrl),e.idBaseUrl=p.ensureNoTrailingSlash(e.idBaseUrl),this.baseUrl=e.baseUrl,this.idBaseUrl=e.idBaseUrl,this.usingExternalCrypto=e.usingExternalCrypto,this.store=e.store||new d.StubStore,this.deviceId=e.deviceId||null;const t=e.userId||null;this.credentials={userId:t},this.http=new T.MatrixHttpApi(this,{baseUrl:e.baseUrl,idBaseUrl:e.idBaseUrl,accessToken:e.accessToken,request:e.request,prefix:T.PREFIX_R0,onlyData:!0,extraParams:e.queryParams,localTimeoutMs:e.localTimeoutMs,useAuthorizationHeader:e.useAuthorizationHeader}),e.deviceToImport?this.deviceId?w.logger.warn("not importing device because device ID is provided to constructor independently of exported data"):this.credentials.userId?w.logger.warn("not importing device because user ID is provided to constructor independently of exported data"):e.deviceToImport.deviceId?(this.deviceId=e.deviceToImport.deviceId,this.credentials.userId=e.deviceToImport.userId,this.exportedOlmDeviceToImport=e.deviceToImport.olmDevice):w.logger.warn("not importing device because no device ID in exported data"):e.pickleKey&&(this.pickleKey=e.pickleKey),this.scheduler=e.scheduler,this.scheduler&&this.scheduler.setProcessFunction((e=>s(this,void 0,void 0,(function*(){const t=this.getRoom(e.getRoomId());e.status!==l.EventStatus.SENDING&&this.updatePendingEventStatus(t,e,l.EventStatus.SENDING);const r=yield this.sendEventHttpRequest(e);return t&&t.updatePendingEvent(e,l.EventStatus.SENT,r.event_id),r}))));h.createNewMatrixCall(this,void 0,void 0)&&(this.callEventHandler=new g.CallEventHandler(this),this.canSupportVoip=!0,this.on("sync",this.startCallEventHandler)),this.timelineSupport=Boolean(e.timelineSupport),this.unstableClientRelationAggregation=!!e.unstableClientRelationAggregation,this.cryptoStore=e.cryptoStore,this.sessionStore=e.sessionStore,this.verificationMethods=e.verificationMethods,this.cryptoCallbacks=e.cryptoCallbacks||{},this.forceTURN=e.forceTURN||!1,this.iceCandidatePoolSize=void 0===e.iceCandidatePoolSize?0:e.iceCandidatePoolSize,this.supportsCallTransfer=e.supportsCallTransfer||!1,this.fallbackICEServerAllowed=e.fallbackICEServerAllowed||!1,this.roomList=new k.RoomList(this.cryptoStore),this.on("Event.decrypted",(e=>{const t=e.getPushActions(),r=this.pushProcessor.actionsForEvent(e);e.setPushActions(r);const n=this.getRoom(e.getRoomId());if(!n)return;const i=n.getUnreadNotificationCount(M.NotificationCountType.Highlight),o=!(!t||!t.tweaks)&&!!t.tweaks.highlight,s=!(!r||!r.tweaks)&&!!r.tweaks.highlight;if((o!==s||i>0)&&!n.hasUserReadEvent(this.getUserId(),e.getId())){let e=i;s&&!o&&e++,!s&&o&&e--,n.setUnreadNotificationCount(M.NotificationCountType.Highlight,e);n.getUnreadNotificationCount(M.NotificationCountType.Total)<e&&n.setUnreadNotificationCount(M.NotificationCountType.Total,e)}})),this.on("Room.receipt",((e,t)=>{if(t&&this.isRoomEncrypted(t.roomId)){const r=e.getContent();if(!(Object.keys(r).filter((e=>Object.keys(r[e]["m.read"]).includes(this.getUserId()))).length>0))return;const n=20,i=t.getLiveTimeline().getEvents();let o=0;for(let e=i.length-1;e>=0;e--){if(e===i.length-n)return;const r=i[e];if(t.hasUserReadEvent(this.getUserId(),r.getId()))break;const s=this.getPushActionsForEvent(r);o+=s.tweaks&&s.tweaks.highlight?1:0}t.setUnreadNotificationCount("highlight",o)}}))}startClient(e){return s(this,void 0,void 0,(function*(){if(this.clientRunning)return;this.clientRunning=!0,"number"==typeof e&&(e={initialSyncLimit:e});const t=this.getUserId();t&&this.store.storeUser(new D.User(t)),this.crypto&&(this.crypto.uploadDeviceKeys(),this.crypto.start()),this.canSupportVoip&&(this.checkTurnServersIntervalID=setInterval((()=>{this.checkTurnServers()}),V),this.checkTurnServers()),this.syncApi&&(w.logger.error("Still have sync object whilst not running: stopping old one"),this.syncApi.stop()),this.clientOpts=Object.assign({},e),this.clientOpts.crypto=this.crypto,this.clientOpts.canResetEntireTimeline=e=>!!this.canResetTimelineCallback&&this.canResetTimelineCallback(e),this.syncApi=new u.SyncApi(this,this.clientOpts),this.syncApi.sync(),void 0!==this.clientOpts.clientWellKnownPollPeriod&&(this.clientWellKnownIntervalID=setInterval((()=>{this.fetchClientWellKnown()}),1e3*this.clientOpts.clientWellKnownPollPeriod),this.fetchClientWellKnown())}))}stopClient(){var e,r,n,i;w.logger.log("stopping MatrixClient"),this.clientRunning=!1,null===(e=this.syncApi)||void 0===e||e.stop(),this.syncApi=null,null===(r=this.crypto)||void 0===r||r.stop(),null===(n=this.peekSync)||void 0===n||n.stopPeeking(),null===(i=this.callEventHandler)||void 0===i||i.stop(),this.callEventHandler=null,t.clearInterval(this.checkTurnServersIntervalID),void 0!==this.clientWellKnownIntervalID&&t.clearInterval(this.clientWellKnownIntervalID)}rehydrateDevice(){return s(this,void 0,void 0,(function*(){if(this.crypto)throw new Error("Cannot rehydrate device after crypto is initialized");if(!this.cryptoCallbacks.getDehydrationKey)return;const e=yield this.getDehydratedDevice();if(!e)return;if(!e.device_data||!e.device_id)return void w.logger.info("no dehydrated device found");const r=new t.Olm.Account;try{const t=e.device_data;if(t.algorithm!==x.DEHYDRATION_ALGORITHM)return void w.logger.warn("Wrong algorithm for dehydrated device");w.logger.log("unpickling dehydrated device");const n=yield this.cryptoCallbacks.getDehydrationKey(t,(e=>{r.unpickle(new Uint8Array(e),t.account)}));r.unpickle(n,t.account),w.logger.log("unpickled device");if(!0===(yield this.http.authedRequest(void 0,"POST","/dehydrated_device/claim",void 0,{device_id:e.device_id},{prefix:"/_matrix/client/unstable/org.matrix.msc2697.v2"})).success){this.deviceId=e.device_id,w.logger.info("using dehydrated device");const t=this.pickleKey||"DEFAULT_KEY";return this.exportedOlmDeviceToImport={pickledAccount:r.pickle(t),sessions:[],pickleKey:t},r.free(),this.deviceId}return r.free(),void w.logger.info("not using dehydrated device")}catch(e){r.free(),w.logger.warn("could not unpickle",e)}}))}getDehydratedDevice(){return s(this,void 0,void 0,(function*(){try{return yield this.http.authedRequest(void 0,"GET","/dehydrated_device",void 0,void 0,{prefix:"/_matrix/client/unstable/org.matrix.msc2697.v2"})}catch(e){return void w.logger.info("could not get dehydrated device",e.toString())}}))}setDehydrationKey(e,t,r){return s(this,void 0,void 0,(function*(){if(this.crypto)return yield this.crypto.dehydrationManager.setKeyAndQueueDehydration(e,t,r);w.logger.warn("not dehydrating device if crypto is not enabled")}))}createDehydratedDevice(e,t,r){return s(this,void 0,void 0,(function*(){if(this.crypto)return yield this.crypto.dehydrationManager.setKey(e,t,r),yield this.crypto.dehydrationManager.dehydrateDevice();w.logger.warn("not dehydrating device if crypto is not enabled")}))}exportDevice(){return s(this,void 0,void 0,(function*(){if(this.crypto)return{userId:this.credentials.userId,deviceId:this.deviceId,olmDevice:yield this.crypto.olmDevice.export()};w.logger.warn("not exporting device if crypto is not enabled")}))}clearStores(){if(this.clientRunning)throw new Error("Cannot clear stores while client is running");const e=[];return e.push(this.store.deleteAllData()),this.cryptoStore&&e.push(this.cryptoStore.deleteAllData()),Promise.all(e).then()}getUserId(){return this.credentials&&this.credentials.userId?this.credentials.userId:null}getDomain(){return this.credentials&&this.credentials.userId?this.credentials.userId.replace(/^.*?:/,""):null}getUserIdLocalpart(){return this.credentials&&this.credentials.userId?this.credentials.userId.split(":")[0].substring(1):null}getDeviceId(){return this.deviceId}supportsVoip(){return this.canSupportVoip}setForceTURN(e){this.forceTURN=e}setSupportsCallTransfer(e){this.supportsCallTransfer=e}createCall(e,t){return h.createNewMatrixCall(this,e,{invitee:t})}getSyncState(){return this.syncApi?this.syncApi.getSyncState():null}getSyncStateData(){return this.syncApi?this.syncApi.getSyncStateData():null}isInitialSyncComplete(){const e=this.getSyncState();return!!e&&(e===U.SyncState.Prepared||e===U.SyncState.Syncing)}isGuest(){return this.isGuestAccount}setGuest(e){this.isGuestAccount=e}getScheduler(){return this.scheduler}retryImmediately(){return this.syncApi.retryImmediately()}getNotifTimelineSet(){return this.notifTimelineSet}setNotifTimelineSet(e){this.notifTimelineSet=e}getCapabilities(e=!1){const t=(new Date).getTime();return this.cachedCapabilities&&!e&&t<this.cachedCapabilities.expiration?(w.logger.log("Returning cached capabilities"),Promise.resolve(this.cachedCapabilities.capabilities)):this.http.authedRequest(void 0,"GET","/capabilities").catch((e=>(w.logger.error(e),null))).then((e=>{e||(e={});const r=e.capabilities||{},n=Object.keys(r).length?216e5:6e4+5e3*Math.random();return this.cachedCapabilities={capabilities:r,expiration:t+n},w.logger.log("Caching capabilities: ",r),r}))}initCrypto(){return s(this,void 0,void 0,(function*(){if(!R.isCryptoAvailable())throw new Error("End-to-end encryption not supported in this js-sdk build: did you remember to load the olm library?");if(this.crypto)return void w.logger.warn("Attempt to re-initialise e2e encryption on MatrixClient");if(!this.sessionStore)throw new Error("Cannot enable encryption: no sessionStore provided");if(!this.cryptoStore)throw new Error("Cannot enable encryption: no cryptoStore provided");w.logger.log("Crypto: Starting up crypto store..."),yield this.cryptoStore.startup(),w.logger.log("Crypto: initialising roomlist..."),yield this.roomList.init();const e=this.getUserId();if(null===e)throw new Error("Cannot enable encryption on MatrixClient with unknown userId: ensure userId is passed in createClient().");if(null===this.deviceId)throw new Error("Cannot enable encryption on MatrixClient with unknown deviceId: ensure deviceId is passed in createClient().");const t=new R.Crypto(this,this.sessionStore,e,this.deviceId,this.store,this.cryptoStore,this.roomList,this.verificationMethods);this.reEmitter.reEmit(t,["crypto.keyBackupFailed","crypto.keyBackupSessionsRemaining","crypto.roomKeyRequest","crypto.roomKeyRequestCancellation","crypto.warning","crypto.devicesUpdated","crypto.willUpdateDevices","deviceVerificationChanged","userTrustStatusChanged","crossSigning.keysChanged"]),w.logger.log("Crypto: initialising crypto object..."),yield t.init({exportedOlmDevice:this.exportedOlmDeviceToImport,pickleKey:this.pickleKey}),delete this.exportedOlmDeviceToImport,this.olmVersion=R.Crypto.getOlmVersion(),t.registerEventHandlers(this),this.crypto=t}))}isCryptoEnabled(){return!!this.crypto}getDeviceEd25519Key(){return this.crypto?this.crypto.getDeviceEd25519Key():null}getDeviceCurve25519Key(){return this.crypto?this.crypto.getDeviceCurve25519Key():null}uploadKeys(){return s(this,void 0,void 0,(function*(){if(!this.crypto)throw new Error("End-to-end encryption disabled");yield this.crypto.uploadDeviceKeys()}))}downloadKeys(e,t){return this.crypto?this.crypto.downloadKeys(e,t):Promise.reject(new Error("End-to-end encryption disabled"))}getStoredDevicesForUser(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getStoredDevicesForUser(e)||[]}getStoredDevice(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getStoredDevice(e,t)||null}setDeviceVerified(e,t,r=!0){const n=this.setDeviceVerification(e,t,r,null,null);return e==this.credentials.userId&&this.checkKeyBackup(),n}setDeviceBlocked(e,t,r=!0){return this.setDeviceVerification(e,t,null,r,null)}setDeviceKnown(e,t,r=!0){return this.setDeviceVerification(e,t,null,null,r)}setDeviceVerification(e,t,r,n,i){return s(this,void 0,void 0,(function*(){if(!this.crypto)throw new Error("End-to-end encryption disabled");yield this.crypto.setDeviceVerification(e,t,r,n,i)}))}requestVerificationDM(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.requestVerificationDM(e,t)}findVerificationRequestDMInProgress(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.findVerificationRequestDMInProgress(e)}getVerificationRequestsToDeviceInProgress(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getVerificationRequestsToDeviceInProgress(e)}requestVerification(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.requestVerification(e,t)}beginKeyVerification(e,t,r){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.beginKeyVerification(e,t,r)}checkSecretStorageKey(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.checkSecretStorageKey(e,t)}setGlobalBlacklistUnverifiedDevices(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.setGlobalBlacklistUnverifiedDevices(e)}getGlobalBlacklistUnverifiedDevices(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getGlobalBlacklistUnverifiedDevices()}setGlobalErrorOnUnknownDevices(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.setGlobalErrorOnUnknownDevices(e)}getGlobalErrorOnUnknownDevices(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getGlobalErrorOnUnknownDevices()}getCrossSigningId(e=B.CrossSigningKey.Master){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getCrossSigningId(e)}getStoredCrossSigningForUser(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getStoredCrossSigningForUser(e)}checkUserTrust(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.checkUserTrust(e)}checkDeviceTrust(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.checkDeviceTrust(e,t)}checkOwnCrossSigningTrust(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.checkOwnCrossSigningTrust(e)}checkCrossSigningPrivateKey(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.checkCrossSigningPrivateKey(e,t)}legacyDeviceVerification(e,t,r){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.legacyDeviceVerification(e,t,r)}prepareToEncrypt(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.prepareToEncrypt(e)}isCrossSigningReady(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.isCrossSigningReady()}bootstrapCrossSigning(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.bootstrapCrossSigning(e)}getCryptoTrustCrossSignedDevices(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getCryptoTrustCrossSignedDevices()}setCryptoTrustCrossSignedDevices(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.setCryptoTrustCrossSignedDevices(e)}countSessionsNeedingBackup(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.countSessionsNeedingBackup()}getEventEncryptionInfo(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getEventEncryptionInfo(e)}createRecoveryKeyFromPassphrase(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.createRecoveryKeyFromPassphrase(e)}isSecretStorageReady(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.isSecretStorageReady()}bootstrapSecretStorage(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.bootstrapSecretStorage(e)}addSecretStorageKey(e,t,r){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.addSecretStorageKey(e,t,r)}hasSecretStorageKey(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.hasSecretStorageKey(e)}storeSecret(e,t,r){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.storeSecret(e,t,r)}getSecret(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getSecret(e)}isSecretStored(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.isSecretStored(e,t)}requestSecret(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.requestSecret(e,t)}getDefaultSecretStorageKeyId(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.getDefaultSecretStorageKeyId()}setDefaultSecretStorageKeyId(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.setDefaultSecretStorageKeyId(e)}checkSecretStoragePrivateKey(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.checkSecretStoragePrivateKey(e,t)}getEventSenderDeviceInfo(e){return s(this,void 0,void 0,(function*(){return this.crypto?this.crypto.getEventSenderDeviceInfo(e):null}))}isEventSenderVerified(e){return s(this,void 0,void 0,(function*(){const t=yield this.getEventSenderDeviceInfo(e);return!!t&&t.isVerified()}))}cancelAndResendEventRoomKeyRequest(e){return e.cancelAndResendKeyRequest(this.crypto,this.getUserId())}setRoomEncryption(e,t){if(!this.crypto)throw new Error("End-to-End encryption disabled");return this.crypto.setRoomEncryption(e,t)}isRoomEncrypted(e){const t=this.getRoom(e);if(!t)return!1;return!!t.currentState.getStateEvents("m.room.encryption","")||this.roomList.isRoomEncrypted(e)}forceDiscardSession(e){if(!this.crypto)throw new Error("End-to-End encryption disabled");this.crypto.forceDiscardSession(e)}exportRoomKeys(){return this.crypto?this.crypto.exportRoomKeys():Promise.reject(new Error("End-to-end encryption disabled"))}importRoomKeys(e,t){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.importRoomKeys(e,t)}checkKeyBackup(){return this.crypto.backupManager.checkKeyBackup()}getKeyBackupVersion(){return s(this,void 0,void 0,(function*(){let e;try{e=yield this.http.authedRequest(void 0,"GET","/room_keys/version",void 0,void 0,{prefix:T.PREFIX_UNSTABLE})}catch(e){if("M_NOT_FOUND"===e.errcode)return null;throw e}try{G.BackupManager.checkBackupVersion(e)}catch(e){throw e}return e}))}isKeyBackupTrusted(e){return this.crypto.backupManager.isKeyBackupTrusted(e)}getKeyBackupEnabled(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.backupManager.getKeyBackupEnabled()}enableKeyBackup(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.backupManager.enableKeyBackup(e)}disableKeyBackup(){if(!this.crypto)throw new Error("End-to-end encryption disabled");this.crypto.backupManager.disableKeyBackup()}prepareKeyBackupVersion(e,t={secureSecretStorage:!1}){return s(this,void 0,void 0,(function*(){if(!this.crypto)throw new Error("End-to-end encryption disabled");const{algorithm:r,auth_data:n,recovery_key:i,privateKey:o}=yield this.crypto.backupManager.prepareKeyBackupVersion(e);return t.secureSecretStorage&&(yield this.storeSecret("m.megolm_backup.v1",_.encodeBase64(o)),w.logger.info("Key backup private key stored in secret storage")),{algorithm:r,auth_data:n,recovery_key:i}}))}isKeyBackupKeyStored(){return Promise.resolve(this.isSecretStored("m.megolm_backup.v1",!1))}createKeyBackupVersion(e){return s(this,void 0,void 0,(function*(){if(!this.crypto)throw new Error("End-to-end encryption disabled");yield this.crypto.backupManager.createKeyBackupVersion(e);const t={algorithm:e.algorithm,auth_data:e.auth_data};yield this.crypto.signObject(t.auth_data),this.cryptoCallbacks.getCrossSigningKey&&this.crypto.crossSigningInfo.getId()&&(yield this.crypto.crossSigningInfo.signObject(t.auth_data,"master"));const r=yield this.http.authedRequest(void 0,"POST","/room_keys/version",void 0,t,{prefix:T.PREFIX_UNSTABLE});return yield this.checkKeyBackup(),this.getKeyBackupEnabled()||w.logger.error("Key backup not usable even though we just created it"),r}))}deleteKeyBackupVersion(e){if(!this.crypto)throw new Error("End-to-end encryption disabled");this.crypto.backupManager.version&&this.crypto.backupManager.disableKeyBackup();const t=p.encodeUri("/room_keys/version/$version",{$version:e});return this.http.authedRequest(void 0,"DELETE",t,void 0,void 0,{prefix:T.PREFIX_UNSTABLE})}makeKeyBackupPath(e,t,r){let n;n=void 0!==t?p.encodeUri("/room_keys/keys/$roomId/$sessionId",{$roomId:e,$sessionId:t}):void 0!==e?p.encodeUri("/room_keys/keys/$roomId",{$roomId:e}):"/room_keys/keys";return{path:n,queryData:void 0===r?void 0:{version:r}}}sendKeyBackup(e,t,r,n){if(!this.crypto)throw new Error("End-to-end encryption disabled");const i=this.makeKeyBackupPath(e,t,r);return this.http.authedRequest(void 0,"PUT",i.path,i.queryData,n,{prefix:T.PREFIX_UNSTABLE})}scheduleAllGroupSessionsForBackup(){return s(this,void 0,void 0,(function*(){if(!this.crypto)throw new Error("End-to-end encryption disabled");yield this.crypto.backupManager.scheduleAllGroupSessionsForBackup()}))}flagAllGroupSessionsForBackup(){if(!this.crypto)throw new Error("End-to-end encryption disabled");return this.crypto.backupManager.flagAllGroupSessionsForBackup()}isValidRecoveryKey(e){try{return C.decodeRecoveryKey(e),!0}catch(e){return!1}}keyBackupKeyFromPassword(e,t){return O.keyFromAuthData(t.auth_data,e)}keyBackupKeyFromRecoveryKey(e){return C.decodeRecoveryKey(e)}restoreKeyBackupWithPassword(e,t,r,n,i){return s(this,void 0,void 0,(function*(){const o=yield O.keyFromAuthData(n.auth_data,e);return this.restoreKeyBackup(o,t,r,n,i)}))}restoreKeyBackupWithSecretStorage(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=yield this.getSecret("m.megolm_backup.v1"),o=R.fixBackupKey(i);if(o){const[e]=yield this.crypto.getSecretStorageKey();yield this.storeSecret("m.megolm_backup.v1",o,[e])}const s=_.decodeBase64(o||i);return this.restoreKeyBackup(s,t,r,e,n)}))}restoreKeyBackupWithRecoveryKey(e,t,r,n,i){const o=C.decodeRecoveryKey(e);return this.restoreKeyBackup(o,t,r,n,i)}restoreKeyBackupWithCache(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=yield this.crypto.getSessionBackupPrivateKey();if(!i)throw new Error("Couldn't get key");return this.restoreKeyBackup(i,e,t,r,n)}))}restoreKeyBackup(e,t,r,n,i){return s(this,void 0,void 0,(function*(){const o=null==i?void 0:i.cacheCompleteCallback,a=null==i?void 0:i.progressCallback;if(!this.crypto)throw new Error("End-to-end encryption disabled");let c=0,u=[];const l=this.makeKeyBackupPath(t,r,n.version),d=yield G.BackupManager.makeAlgorithm(n,(()=>s(this,void 0,void 0,(function*(){return e})))),h=d.untrusted;try{if(!(yield d.keyMatches(e)))return Promise.reject(new T.MatrixError({errcode:W.RESTORE_BACKUP_ERROR_BAD_KEY}));this.crypto.storeSessionBackupPrivateKey(e).catch((e=>{w.logger.warn("Error caching session backup key:",e)})).then(o),a&&a({stage:"fetch"});const n=yield this.http.authedRequest(void 0,"GET",l.path,l.queryData,void 0,{prefix:T.PREFIX_UNSTABLE});if(n.rooms)for(const[e,t]of Object.entries(n.rooms)){if(!t.sessions)continue;c+=Object.keys(t.sessions).length;const r=yield d.decryptSessions(t.sessions);for(const t of r)t.room_id=e,u.push(t)}else if(n.sessions){c=Object.keys(n.sessions).length,u=yield d.decryptSessions(n.sessions);for(const e of u)e.room_id=t}else{c=1;try{const[e]=yield d.decryptSessions({[r]:n});e.room_id=t,e.session_id=r,u.push(e)}catch(e){w.logger.log("Failed to decrypt megolm session from backup",e)}}}finally{d.free()}return yield this.importRoomKeys(u,{progressCallback:a,untrusted:h,source:"backup"}),yield this.checkKeyBackup(),{total:c,imported:u.length}}))}deleteKeysFromBackup(e,t,r){if(!this.crypto)throw new Error("End-to-end encryption disabled");const n=this.makeKeyBackupPath(e,t,r);return this.http.authedRequest(void 0,"DELETE",n.path,n.queryData,void 0,{prefix:T.PREFIX_UNSTABLE})}sendSharedHistoryKeys(e,t){return s(this,void 0,void 0,(function*(){if(!this.crypto)throw new Error("End-to-end encryption disabled");const r=this.roomList.getRoomEncryption(e);if(!r)return void w.logger.error("Unknown room. Not sharing decryption keys");const n=yield this.crypto.downloadKeys(t),i={};for(const[e,t]of Object.entries(n))i[e]=Object.values(t);const o=this.crypto.getRoomDecryptor(e,r.algorithm);o.sendSharedHistoryInboundSessions?yield o.sendSharedHistoryInboundSessions(i):w.logger.warn("Algorithm does not support sharing previous keys",r.algorithm)}))}getGroup(e){return this.store.getGroup(e)}getGroups(){return this.store.getGroups()}getMediaConfig(e){return this.http.authedRequest(e,"GET","/config",void 0,void 0,{prefix:T.PREFIX_MEDIA_R0})}getRoom(e){return this.store.getRoom(e)}getRooms(){return this.store.getRooms()}getVisibleRooms(){const e=this.store.getRooms(),t=new Set;for(const r of e){const e=r.currentState.getStateEvents("m.room.create","");if(e){const r=e.getContent().predecessor;r&&r.room_id&&t.add(r.room_id)}}return e.filter((e=>!e.currentState.getStateEvents("m.room.tombstone","")||!t.has(e.roomId)))}getUser(e){return this.store.getUser(e)}getUsers(){return this.store.getUsers()}setAccountData(e,t,r){const n=p.encodeUri("/user/$userId/account_data/$type",{$userId:this.credentials.userId,$type:e}),i=T.retryNetworkOperation(5,(()=>this.http.authedRequest(void 0,"PUT",n,void 0,t)));return r&&i.then((e=>r(null,e)),r),i}getAccountData(e){return this.store.getAccountData(e)}getAccountDataFromServer(e){return s(this,void 0,void 0,(function*(){if(this.isInitialSyncComplete()){const t=this.store.getAccountData(e);return t?t.getContent():null}const t=p.encodeUri("/user/$userId/account_data/$type",{$userId:this.credentials.userId,$type:e});try{return yield this.http.authedRequest(void 0,"GET",t,void 0)}catch(e){if(e.data&&"M_NOT_FOUND"===e.data.errcode)return null;throw e}}))}getIgnoredUsers(){const e=this.getAccountData("m.ignored_user_list");return e&&e.getContent()&&e.getContent().ignored_users?Object.keys(e.getContent().ignored_users):[]}setIgnoredUsers(e,t){const r={ignored_users:{}};return e.map((e=>r.ignored_users[e]={})),this.setAccountData("m.ignored_user_list",r,t)}isUserIgnored(e){return this.getIgnoredUsers().includes(e)}joinRoom(e,t,r){return s(this,void 0,void 0,(function*(){if(p.isFunction(t))throw new Error("Expected 'opts' object, got function.");void 0===(t=t||{}).syncRoom&&(t.syncRoom=!0);const n=this.getRoom(e);if(n&&n.hasMembershipState(this.credentials.userId,"join"))return Promise.resolve(n);let i=Promise.resolve();t.inviteSignUrl&&(i=this.http.requestOtherUrl(void 0,"POST",t.inviteSignUrl,{mxid:this.credentials.userId}));const o={};t.viaServers&&(o.server_name=t.viaServers);const s={qsStringifyOptions:{arrayFormat:"repeat"}};try{const n={},a=yield i;a&&(n.third_party_signed=a);const c=p.encodeUri("/join/$roomid",{$roomid:e}),l=(yield this.http.authedRequest(void 0,"POST",c,o,n,s)).room_id,d=new u.SyncApi(this,this.clientOpts).createRoom(l);return t.syncRoom,null==r||r(null,d),d}catch(e){throw null==r||r(e),e}}))}resendEvent(e,t){return this.updatePendingEventStatus(t,e,l.EventStatus.SENDING),this.encryptAndSendEvent(t,e)}cancelPendingEvent(e){if([l.EventStatus.QUEUED,l.EventStatus.NOT_SENT].indexOf(e.status)<0)throw new Error("cannot cancel an event with status "+e.status);this.scheduler&&this.scheduler.removeEventFromQueue(e);const t=this.getRoom(e.getRoomId());this.updatePendingEventStatus(t,e,l.EventStatus.CANCELLED)}setRoomName(e,t,r){return this.sendStateEvent(e,"m.room.name",{name:t},void 0,r)}setRoomTopic(e,t,r){return this.sendStateEvent(e,"m.room.topic",{topic:t},void 0,r)}getRoomTags(e,t){const r=p.encodeUri("/user/$userId/rooms/$roomId/tags/",{$userId:this.credentials.userId,$roomId:e});return this.http.authedRequest(t,"GET",r,void 0)}setRoomTag(e,t,r,n){const i=p.encodeUri("/user/$userId/rooms/$roomId/tags/$tag",{$userId:this.credentials.userId,$roomId:e,$tag:t});return this.http.authedRequest(n,"PUT",i,void 0,r)}deleteRoomTag(e,t,r){const n=p.encodeUri("/user/$userId/rooms/$roomId/tags/$tag",{$userId:this.credentials.userId,$roomId:e,$tag:t});return this.http.authedRequest(r,"DELETE",n,void 0,void 0)}setRoomAccountData(e,t,r,n){const i=p.encodeUri("/user/$userId/rooms/$roomId/account_data/$type",{$userId:this.credentials.userId,$roomId:e,$type:t});return this.http.authedRequest(n,"PUT",i,void 0,r)}setPowerLevel(e,t,r,n,i){let o={users:{}};n&&"m.room.power_levels"===n.getType()&&(o=p.deepCopy(n.getContent())),o.users[t]=r;const s=p.encodeUri("/rooms/$roomId/state/m.room.power_levels",{$roomId:e});return this.http.authedRequest(i,"PUT",s,void 0,o)}sendEvent(e,t,r,n,i){return this.sendCompleteEvent(e,{type:t,content:r},n,i)}sendCompleteEvent(e,t,r,n){p.isFunction(r)&&(n=r,r=void 0),r||(r=this.makeTxnId());const i=new l.MatrixEvent(Object.assign(t,{event_id:"~"+e+":"+r,user_id:this.credentials.userId,sender:this.credentials.userId,room_id:e,origin_server_ts:(new Date).getTime()})),o=this.getRoom(e),s=i.getAssociatedId();if(s&&s.startsWith("~")){const e=o.getPendingEvents().find((e=>e.getId()===s));e.once("Event.localEventIdReplaced",(()=>{i.updateAssociatedId(e.getId())}))}const a=i.getType();return w.logger.log(`sendEvent of type ${a} in ${e} with txnId ${r}`),i.setTxnId(r),i.setStatus(l.EventStatus.SENDING),o&&o.addPendingEvent(i,r),i.status===l.EventStatus.NOT_SENT?Promise.reject(new Error("Event blocked by other events not yet sent")):this.encryptAndSendEvent(o,i,n)}encryptAndSendEvent(e,t,r){return Promise.resolve().then((()=>{const r=this.encryptEventIfNeeded(t,e);return r?(this.updatePendingEventStatus(e,t,l.EventStatus.ENCRYPTING),r.then((()=>this.updatePendingEventStatus(e,t,l.EventStatus.SENDING)))):null})).then((()=>{let r;return this.scheduler&&(r=this.scheduler.queueEvent(t),r&&this.scheduler.getQueueForEvent(t).length>1&&this.updatePendingEventStatus(e,t,l.EventStatus.QUEUED)),r||(r=this.sendEventHttpRequest(t),e&&(r=r.then((r=>(e.updatePendingEvent(t,l.EventStatus.SENT,r.event_id),r))))),r})).then((e=>(null==r||r(null,e),e))).catch((n=>{w.logger.error("Error sending event",n.stack||n);try{t.error=n,this.updatePendingEventStatus(e,t,l.EventStatus.NOT_SENT),n.event=t,null==r||r(n)}catch(e){w.logger.error("Exception in error handler!",e.stack||n)}throw n}))}encryptEventIfNeeded(e,t){if(e.isEncrypted())return null;if(!this.isRoomEncrypted(e.getRoomId()))return null;if(!this.crypto&&this.usingExternalCrypto)return null;if(e.getType()===N.EventType.Reaction)return null;if(!this.crypto)throw new Error("This room is configured to use encryption, but your client does not support encryption.");return this.crypto.encryptEvent(e,t)}getEncryptedIfNeededEventType(e,t){return t===N.EventType.Reaction?t:this.isRoomEncrypted(e)?N.EventType.RoomMessageEncrypted:t}updatePendingEventStatus(e,t,r){e?e.updatePendingEvent(t,r):t.setStatus(r)}sendEventHttpRequest(e){let t=e.getTxnId();t||(t=this.makeTxnId(),e.setTxnId(t));const r={$roomId:e.getRoomId(),$eventType:e.getWireType(),$stateKey:e.getStateKey(),$txnId:t};let n;if(e.isState()){let t="/rooms/$roomId/state/$eventType";e.getStateKey()&&e.getStateKey().length>0&&(t="/rooms/$roomId/state/$eventType/$stateKey"),n=p.encodeUri(t,r)}else if(e.isRedaction()){const t="/rooms/$roomId/redact/$redactsEventId/$txnId";n=p.encodeUri(t,Object.assign({$redactsEventId:e.event.redacts},r))}else n=p.encodeUri("/rooms/$roomId/send/$eventType/$txnId",r);return this.http.authedRequest(void 0,"PUT",n,void 0,e.getWireContent()).then((t=>(w.logger.log(`Event sent to ${e.getRoomId()} with event id ${t.event_id}`),t)))}redactEvent(e,t,r,n){const i=("object"==typeof n?n:{}).reason,o="function"==typeof n?n:void 0;return this.sendCompleteEvent(e,{type:N.EventType.RoomRedaction,content:{reason:i},redacts:t},r,o)}sendMessage(e,t,r,n){return p.isFunction(r)&&(n=r,r=void 0),this.sendEvent(e,"m.room.message",t,r,n)}sendTextMessage(e,t,r,n){const i=K.makeTextMessage(t);return this.sendMessage(e,i,r,n)}sendNotice(e,t,r,n){const i=K.makeNotice(t);return this.sendMessage(e,i,r,n)}sendEmoteMessage(e,t,r,n){const i=K.makeEmoteMessage(t);return this.sendMessage(e,i,r,n)}sendImageMessage(e,t,r,n="Image",i){p.isFunction(n)&&(i=n,n=void 0);const o={msgtype:"m.image",url:t,info:r,body:n};return this.sendMessage(e,o,void 0,i)}sendStickerMessage(e,t,r,n="Sticker",i){p.isFunction(n)&&(i=n,n=void 0);const o={url:t,info:r,body:n};return this.sendEvent(e,N.EventType.Sticker,o,void 0,i)}sendHtmlMessage(e,t,r,n){const i=K.makeHtmlMessage(t,r);return this.sendMessage(e,i,void 0,n)}sendHtmlNotice(e,t,r,n){const i=K.makeHtmlNotice(t,r);return this.sendMessage(e,i,void 0,n)}sendHtmlEmote(e,t,r,n){const i=K.makeHtmlEmote(t,r);return this.sendMessage(e,i,void 0,n)}sendReceipt(e,t,r,n){if("function"==typeof r&&(n=r,r={}),this.isGuest())return Promise.resolve({});const i=p.encodeUri("/rooms/$roomId/receipt/$receiptType/$eventId",{$roomId:e.getRoomId(),$receiptType:t,$eventId:e.getId()}),o=this.http.authedRequest(n,"POST",i,void 0,r||{}),s=this.getRoom(e.getRoomId());return s&&s.addLocalEchoReceipt(this.credentials.userId,e,t),o}sendReadReceipt(e,t,r){return s(this,void 0,void 0,(function*(){"function"==typeof t&&(r=t,t={}),t||(t={});const n=e.getId(),i=this.getRoom(e.getRoomId());if(i&&i.hasPendingEvent(n))throw new Error(`Cannot set read receipt to a pending event (${n})`);const o={"m.hidden":Boolean(t.hidden)};return this.sendReceipt(e,"m.read",o,r)}))}setRoomReadMarkers(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=this.getRoom(e);if(i&&i.hasPendingEvent(t))throw new Error(`Cannot set read marker to a pending event (${t})`);let o;if(r){if(o=r.getId(),i&&i.hasPendingEvent(o))throw new Error(`Cannot set read receipt to a pending event (${o})`);i&&i.addLocalEchoReceipt(this.credentials.userId,r,"m.read")}return this.setRoomReadMarkersHttpRequest(e,t,o,n)}))}getUrlPreview(e,t,r){t=6e4*Math.floor(t/6e4);const n=new URL(e);n.hash="";const i=t+"_"+(e=n.toString()),o=this.urlPreviewCache[i];if(o)return r&&o.then(r).catch(r),o;const s=this.http.authedRequest(r,"GET","/preview_url",{url:e,ts:t},void 0,{prefix:T.PREFIX_MEDIA_R0});return this.urlPreviewCache[i]=s,s}sendTyping(e,t,r,n){if(this.isGuest())return Promise.resolve({});const i=p.encodeUri("/rooms/$roomId/typing/$userId",{$roomId:e,$userId:this.credentials.userId}),o={typing:t};return t&&(o.timeout=r||2e4),this.http.authedRequest(n,"PUT",i,void 0,o)}getRoomUpgradeHistory(e,t=!1){let r=this.getRoom(e);if(!r)return[];const n=[r];let i=r.currentState.getStateEvents("m.room.create","");for(;i;){w.logger.log(`Looking at ${i.getId()}`);const e=i.getContent().predecessor;if(!e||!e.room_id)break;{w.logger.log(`Looking at predecessor ${e.room_id}`);const r=this.getRoom(e.room_id);if(!r)break;if(t){const e=r.currentState.getStateEvents("m.room.tombstone","");if(!e||e.getContent().replacement_room!==r.roomId)break}n.splice(0,0,r),i=r.currentState.getStateEvents("m.room.create","")}}let o=r.currentState.getStateEvents("m.room.tombstone","");for(;o;){const e=this.getRoom(o.getContent().replacement_room);if(!e)break;if(e.roomId===r.roomId)break;if(t){if(i=e.currentState.getStateEvents("m.room.create",""),!i||!i.getContent().predecessor)break;if(i.getContent().predecessor.room_id!==r.roomId)break}n.push(e);if(new Set(n.map((e=>e.roomId))).size<n.length)return n.slice(0,n.length-1);r=e,o=r.currentState.getStateEvents("m.room.tombstone","")}return n}invite(e,t,r,n){return this.membershipChange(e,t,"invite",n,r)}inviteByEmail(e,t,r){return this.inviteByThreePid(e,"email",t,r)}inviteByThreePid(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=p.encodeUri("/rooms/$roomId/invite",{$roomId:e}),o=this.getIdentityServerUrl(!0);if(!o)return Promise.reject(new T.MatrixError({error:"No supplied identity server URL",errcode:"ORG.MATRIX.JSSDK_MISSING_PARAM"}));const s={id_server:o,medium:t,address:r};if(this.identityServer&&this.identityServer.getAccessToken&&(yield this.doesServerAcceptIdentityAccessToken())){const e=yield this.identityServer.getAccessToken();e&&(s.id_access_token=e)}return this.http.authedRequest(n,"POST",i,void 0,s)}))}leave(e,t){return this.membershipChange(e,void 0,"leave",void 0,t)}leaveRoomChain(e,t=!0){const r=this.getRoomUpgradeHistory(e);let n=r;if(!t){n=[];for(const t of r)if(n.push(t),t.roomId===e)break}const i={},o=[],s=e=>this.leave(e).then((()=>{i[e]=null})).catch((t=>(i[e]=t,null)));for(const e of n)o.push(s(e.roomId));return Promise.all(o).then((()=>i))}ban(e,t,r,n){return this.membershipChange(e,t,"ban",r,n)}forget(e,t,r){void 0===t&&(t=!0);const n=this.membershipChange(e,void 0,"forget",void 0,r);return t?n.then((t=>(this.store.removeRoom(e),this.emit("deleteRoom",e),t))):n}unban(e,t,r){const n=p.encodeUri("/rooms/$roomId/unban",{$roomId:e}),i={user_id:t};return this.http.authedRequest(r,"POST",n,void 0,i)}kick(e,t,r,n){return this.setMembershipState(e,t,"leave",r,n)}setMembershipState(e,t,r,n,i){p.isFunction(n)&&(i=n,n=void 0);const o=p.encodeUri("/rooms/$roomId/state/m.room.member/$userId",{$roomId:e,$userId:t});return this.http.authedRequest(i,"PUT",o,void 0,{membership:r,reason:n})}membershipChange(e,t,r,n,i){p.isFunction(n)&&(i=n,n=void 0);const o=p.encodeUri("/rooms/$room_id/$membership",{$room_id:e,$membership:r});return this.http.authedRequest(i,"POST",o,void 0,{user_id:t,reason:n})}getPushActionsForEvent(e){return e.getPushActions()||e.setPushActions(this.pushProcessor.actionsForEvent(e)),e.getPushActions()}setProfileInfo(e,t,r){const n=p.encodeUri("/profile/$userId/$info",{$userId:this.credentials.userId,$info:e});return this.http.authedRequest(r,"PUT",n,void 0,t)}setDisplayName(e,t){return s(this,void 0,void 0,(function*(){const r=yield this.setProfileInfo("displayname",{displayname:e},t),n=this.getUser(this.getUserId());return n&&(n.displayName=e,n.emit("User.displayName",n.events.presence,n)),r}))}setAvatarUrl(e,t){return s(this,void 0,void 0,(function*(){const r=yield this.setProfileInfo("avatar_url",{avatar_url:e},t),n=this.getUser(this.getUserId());return n&&(n.avatarUrl=e,n.emit("User.avatarUrl",n.events.presence,n)),r}))}mxcUrlToHttp(e,t,r,n,i){return A.getHttpUriForMxc(this.baseUrl,e,t,r,n,i)}_unstable_setStatusMessage(e){const t="im.vector.user_status";return Promise.all(this.getRooms().map((r=>{const n="join"===r.getMyMembership(),i=2===r.getInvitedAndJoinedMemberCount();if(!n||!i)return Promise.resolve();return r.currentState.mayClientSendStateEvent(t,this)?this.sendStateEvent(r.roomId,t,{status:e},this.getUserId()):Promise.resolve()}))).then()}setPresence(e,t){const r=p.encodeUri("/presence/$userId/status",{$userId:this.credentials.userId});"string"==typeof e&&(e={presence:e});if(-1===["offline","online","unavailable"].indexOf(e.presence))throw new Error("Bad presence value: "+e.presence);return this.http.authedRequest(t,"PUT",r,void 0,e)}getPresence(e,t){const r=p.encodeUri("/presence/$userId/status",{$userId:e});return this.http.authedRequest(t,"GET",r,void 0,void 0)}scrollback(e,t,r){p.isFunction(t)&&(r=t,t=void 0),t=t||30;let n=0,i=this.ongoingScrollbacks[e.roomId]||{};if(i.promise)return i.promise;if(i.errorTs){const e=Date.now()-i.errorTs;n=Math.max(3e3-e,0)}if(null===e.oldState.paginationToken)return Promise.resolve(e);const o=this.store.scrollback(e,t).length;if(o===t)return Promise.resolve(e);t-=o;const s=new Promise(((i,o)=>{v.sleep(n).then((()=>this.createMessagesRequest(e.roomId,e.oldState.paginationToken,t,"b"))).then((t=>{const n=t.chunk.map(this.getEventMapper());if(t.state){const r=t.state.map(this.getEventMapper());e.currentState.setUnknownStateEvents(r)}e.addEventsToTimeline(n,!0,e.getLiveTimeline()),e.oldState.paginationToken=t.end,0===t.chunk.length&&(e.oldState.paginationToken=null),this.store.storeEvents(e,n,t.end,!0),this.ongoingScrollbacks[e.roomId]=null,null==r||r(null,e),i(e)})).catch((t=>{this.ongoingScrollbacks[e.roomId]={errorTs:Date.now()},null==r||r(t),o(t)}))}));return i={promise:s,errorTs:null},this.ongoingScrollbacks[e.roomId]=i,s}getEventMapper(e){return q.eventMapperFor(this,e||{})}getEventTimeline(e,t){if(!this.timelineSupport)throw new Error("timeline support is disabled. Set the 'timelineSupport' parameter to true when creating MatrixClient to enable it.");if(e.getTimelineForEvent(t))return Promise.resolve(e.getTimelineForEvent(t));const r=p.encodeUri("/rooms/$roomId/context/$eventId",{$roomId:e.room.roomId,$eventId:t});let n;this.clientOpts.lazyLoadMembers&&(n={filter:JSON.stringify(f.Filter.LAZY_LOADING_MESSAGES_FILTER)});return this.http.authedRequest(void 0,"GET",r,n).then((r=>{if(!r.event)throw new Error("'event' not in '/context' result - homeserver too old?");if(e.getTimelineForEvent(t))return e.getTimelineForEvent(t);r.events_after.reverse();const n=r.events_after.concat([r.event]).concat(r.events_before).map(this.getEventMapper());let i=e.getTimelineForEvent(n[0].getId());if(i){const e=r.state.map(this.getEventMapper());i.getState(y.EventTimeline.BACKWARDS).setUnknownStateEvents(e)}else i=e.addTimeline(),i.initialiseState(r.state.map(this.getEventMapper())),i.getState(y.EventTimeline.FORWARDS).paginationToken=r.end;return e.addEventsToTimeline(n,!0,i,r.start),e.getTimelineForEvent(t)||i}))}createMessagesRequest(e,t,r,n,i){var o;const s=p.encodeUri("/rooms/$roomId/messages",{$roomId:e});void 0===r&&(r=30);const a={from:t,limit:r,dir:n};let c=null;return this.clientOpts.lazyLoadMembers&&(c=Object.assign({},f.Filter.LAZY_LOADING_MESSAGES_FILTER)),i&&(c=c||{},Object.assign(c,null===(o=i.getRoomTimelineFilterComponent())||void 0===o?void 0:o.toJSON())),c&&(a.filter=JSON.stringify(c)),this.http.authedRequest(void 0,"GET",s,a)}paginateEventTimeline(e,t){const r=e.getTimelineSet()===this.notifTimelineSet,n=(t=t||{}).backwards||!1;if(r&&!n)throw new Error("paginateNotifTimeline can only paginate backwards");const i=n?y.EventTimeline.BACKWARDS:y.EventTimeline.FORWARDS,o=e.getPaginationToken(i);if(!o)return Promise.resolve(!1);const s=e.paginationRequests[i];if(s)return s;let a,c,u;if(r)a="/notifications",c={limit:"limit"in t?t.limit:30,only:"highlight"},o&&"end"!==o&&(c.from=o),u=this.http.authedRequest(void 0,"GET","/notifications",c,void 0).then((t=>{const r=t.next_token,o=[];for(let e=0;e<t.notifications.length;e++){const r=t.notifications[e],n=this.getEventMapper()(r.event);n.setPushActions(m.PushProcessor.actionListToActionsObject(r.actions)),n.event.room_id=r.room_id,o[e]=n}return e.getTimelineSet().addEventsToTimeline(o,n,e,r),n&&!t.next_token&&e.setPaginationToken(null,i),!!t.next_token})).finally((()=>{e.paginationRequests[i]=null})),e.paginationRequests[i]=u;else{if(!this.getRoom(e.getRoomId()))throw new Error("Unknown room "+e.getRoomId());u=this.createMessagesRequest(e.getRoomId(),o,t.limit,i,e.getFilter()),u.then((t=>{if(t.state){const r=e.getState(i),n=t.state.map(this.getEventMapper());r.setUnknownStateEvents(n)}const r=t.end,o=t.chunk.map(this.getEventMapper());return e.getTimelineSet().addEventsToTimeline(o,n,e,r),n&&t.end==t.start&&e.setPaginationToken(null,i),t.end!=t.start})).finally((()=>{e.paginationRequests[i]=null})),e.paginationRequests[i]=u}return u}resetNotifTimelineSet(){this.notifTimelineSet&&this.notifTimelineSet.resetLiveTimeline("end",null)}peekInRoom(e){return this.peekSync&&this.peekSync.stopPeeking(),this.peekSync=new u.SyncApi(this,this.clientOpts),this.peekSync.peek(e)}stopPeeking(){this.peekSync&&(this.peekSync.stopPeeking(),this.peekSync=null)}setGuestAccess(e,t){const r=this.sendStateEvent(e,"m.room.guest_access",{guest_access:t.allowJoin?"can_join":"forbidden"},"");let n=Promise.resolve();return t.allowRead&&(n=this.sendStateEvent(e,"m.room.history_visibility",{history_visibility:"world_readable"},"")),Promise.all([n,r]).then()}requestRegisterEmailToken(e,t,r,n){return this.requestTokenFromEndpoint("/register/email/requestToken",{email:e,client_secret:t,send_attempt:r,next_link:n})}requestRegisterMsisdnToken(e,t,r,n,i){return this.requestTokenFromEndpoint("/register/msisdn/requestToken",{country:e,phone_number:t,client_secret:r,send_attempt:n,next_link:i})}requestAdd3pidEmailToken(e,t,r,n){return this.requestTokenFromEndpoint("/account/3pid/email/requestToken",{email:e,client_secret:t,send_attempt:r,next_link:n})}requestAdd3pidMsisdnToken(e,t,r,n,i){return this.requestTokenFromEndpoint("/account/3pid/msisdn/requestToken",{country:e,phone_number:t,client_secret:r,send_attempt:n,next_link:i})}requestPasswordEmailToken(e,t,r,n){return this.requestTokenFromEndpoint("/account/password/email/requestToken",{email:e,client_secret:t,send_attempt:r,next_link:n})}requestPasswordMsisdnToken(e,t,r,n,i){return this.requestTokenFromEndpoint("/account/password/msisdn/requestToken",{country:e,phone_number:t,client_secret:r,send_attempt:n,next_link:i})}requestTokenFromEndpoint(e,t){return s(this,void 0,void 0,(function*(){const r=Object.assign({},t);if(!(yield this.doesServerSupportSeparateAddAndBind())&&this.idBaseUrl){const e=j.default.parse(this.idBaseUrl);if(!e.host)throw new Error("Invalid ID server URL: "+this.idBaseUrl);if(r.id_server=e.host,this.identityServer&&this.identityServer.getAccessToken&&(yield this.doesServerAcceptIdentityAccessToken())){const e=yield this.identityServer.getAccessToken();e&&(r.id_access_token=e)}}return this.http.request(void 0,"POST",e,void 0,r)}))}getRoomPushRule(e,t){if(!this.pushRules)throw new Error("SyncApi.sync() must be done before accessing to push rules.");for(let r=0;r<this.pushRules[e].room.length;r++){const n=this.pushRules[e].room[r];if(n.rule_id===t)return n}}setRoomMutePushRule(e,t,r){let n,i;const o=this.getRoomPushRule(e,t);if(o&&0<=o.actions.indexOf("dont_notify")&&(i=!0),r?o?i||(n=p.defer(),this.deletePushRule(e,"room",o.rule_id).then((()=>{this.addPushRule(e,"room",t,{actions:["dont_notify"]}).then((()=>{n.resolve()})).catch((e=>{n.reject(e)}))})).catch((e=>{n.reject(e)})),n=n.promise):n=this.addPushRule(e,"room",t,{actions:["dont_notify"]}):i&&(n=this.deletePushRule(e,"room",o.rule_id)),n)return new Promise(((e,t)=>{n.then((()=>{this.getPushRules().then((t=>{this.pushRules=t,e()})).catch((e=>{t(e)}))})).catch((e=>{this.getPushRules().then((r=>{this.pushRules=r,t(e)})).catch((r=>{t(e)}))}))}))}searchMessageText(e,t){const r={search_term:e.query};return"keys"in e&&(r.keys=e.keys),this.search({body:{search_categories:{room_events:r}}},t)}searchRoomEvents(e){const t={search_categories:{room_events:{search_term:e.term,filter:e.filter,order_by:"recent",event_context:{before_limit:1,after_limit:1,include_profile:!0}}}},r={_query:t,results:[],highlights:[]};return this.search({body:t}).then((e=>this.processRoomEventsSearch(r,e)))}backPaginateRoomEventsSearch(e){if(!e.next_batch)return Promise.reject(new Error("Cannot backpaginate event search any further"));if(e.pendingRequest)return e.pendingRequest;const t={body:e._query,next_batch:e.next_batch},r=this.search(t).then((t=>this.processRoomEventsSearch(e,t))).finally((()=>{e.pendingRequest=null}));return e.pendingRequest=r,r}processRoomEventsSearch(e,t){const r=t.search_categories.room_events;e.count=r.count,e.next_batch=r.next_batch;const n={};r.highlights.forEach((e=>{n[e]=1})),e.highlights.forEach((e=>{n[e]=1})),e.highlights=Object.keys(n);const i=r.results?r.results.length:0;for(let t=0;t<i;t++){const n=P.SearchResult.fromJson(r.results[t],this.getEventMapper());e.results.push(n)}return e}syncLeftRooms(){if(this.syncedLeftRooms)return Promise.resolve([]);if(this.syncLeftRoomsPromise)return this.syncLeftRoomsPromise;const e=new u.SyncApi(this,this.clientOpts);return this.syncLeftRoomsPromise=e.syncLeftRooms(),this.syncLeftRoomsPromise.then((e=>{w.logger.log("Marking success of sync left room request"),this.syncedLeftRooms=!0})).finally((()=>{this.syncLeftRoomsPromise=null})),this.syncLeftRoomsPromise}createFilter(e){const t=p.encodeUri("/user/$userId/filter",{$userId:this.credentials.userId});return this.http.authedRequest(void 0,"POST",t,void 0,e).then((t=>{const r=f.Filter.fromJson(this.credentials.userId,t.filter_id,e);return this.store.storeFilter(r),r}))}getFilter(e,t,r){if(r){const r=this.store.getFilter(e,t);if(r)return Promise.resolve(r)}const n=p.encodeUri("/user/$userId/filter/$filterId",{$userId:e,$filterId:t});return this.http.authedRequest(void 0,"GET",n,void 0,void 0).then((r=>{const n=f.Filter.fromJson(e,t,r);return this.store.storeFilter(n),n}))}getOrCreateFilter(e,t){return s(this,void 0,void 0,(function*(){const r=this.store.getFilterIdByName(e);let n;if(r){try{const e=yield this.getFilter(this.credentials.userId,r,!0);if(e){const i=e.getDefinition(),o=t.getDefinition();p.deepCompare(i,o)&&(n=r)}}catch(e){if("M_UNKNOWN"!==e.errcode&&"M_NOT_FOUND"!==e.errcode)throw e}n||this.store.setFilterIdByName(e,void 0)}if(n)return n;const i=yield this.createFilter(t.getDefinition());return this.store.setFilterIdByName(e,i.filterId),i.filterId}))}getOpenIdToken(){const e=p.encodeUri("/user/$userId/openid/request_token",{$userId:this.credentials.userId});return this.http.authedRequest(void 0,"POST",e,void 0,{})}turnServer(e){return this.http.authedRequest(e,"GET","/voip/turnServer")}getTurnServers(){return this.turnServers||[]}getTurnServersExpiry(){return this.turnServersExpiry}checkTurnServers(){return s(this,void 0,void 0,(function*(){if(!this.canSupportVoip)return;let e=!1;const r=this.turnServersExpiry-Date.now();if(r>V)w.logger.debug("TURN creds are valid for another "+r+" ms: not fetching new ones."),e=!0;else{w.logger.debug("Fetching new TURN credentials");try{const t=yield this.turnServer();if(t.uris){w.logger.log("Got TURN URIs: "+t.uris+" refresh in "+t.ttl+" secs");const r={urls:t.uris,username:t.username,credential:t.password};this.turnServers=[r],this.turnServersExpiry=Date.now()+1e3*t.ttl,e=!0}}catch(e){w.logger.error("Failed to get TURN URIs",e),403===e.httpStatus&&(w.logger.info("TURN access unavailable for this account: stopping credentials checks"),null!==this.checkTurnServersIntervalID&&t.clearInterval(this.checkTurnServersIntervalID),this.checkTurnServersIntervalID=null)}}return e}))}setFallbackICEServerAllowed(e){this.fallbackICEServerAllowed=e}isFallbackICEServerAllowed(){return this.fallbackICEServerAllowed}isSynapseAdministrator(){const e=p.encodeUri("/_synapse/admin/v1/users/$userId/admin",{$userId:this.getUserId()});return this.http.authedRequest(void 0,"GET",e,void 0,void 0,{prefix:""}).then((e=>e.admin))}whoisSynapseUser(e){const t=p.encodeUri("/_synapse/admin/v1/whois/$userId",{$userId:e});return this.http.authedRequest(void 0,"GET",t,void 0,void 0,{prefix:""})}deactivateSynapseUser(e){const t=p.encodeUri("/_synapse/admin/v1/deactivate/$userId",{$userId:e});return this.http.authedRequest(void 0,"POST",t,void 0,void 0,{prefix:""})}fetchClientWellKnown(){return s(this,void 0,void 0,(function*(){this.clientWellKnownPromise=b.AutoDiscovery.getRawClientConfig(this.getDomain()),this.clientWellKnown=yield this.clientWellKnownPromise,this.emit("WellKnown.client",this.clientWellKnown)}))}getClientWellKnown(){return this.clientWellKnown}waitForClientWellKnown(){return this.clientWellKnownPromise}storeClientOptions(){const e=["boolean","string","number"],t=Object.entries(this.clientOpts).filter((([t,r])=>e.includes(typeof r))).reduce(((e,[t,r])=>(e[t]=r,e)),{});return this.store.storeClientOptions(t)}_unstable_getSharedRooms(e){return s(this,void 0,void 0,(function*(){if(!(yield this.doesServerSupportUnstableFeature("uk.half-shot.msc2666")))throw Error("Server does not support shared_rooms API");const t=p.encodeUri("/uk.half-shot.msc2666/user/shared_rooms/$userId",{$userId:e});return(yield this.http.authedRequest(void 0,"GET",t,void 0,void 0,{prefix:T.PREFIX_UNSTABLE})).joined}))}getVersions(){return this.serverVersionsPromise||(this.serverVersionsPromise=this.http.request(void 0,"GET","/_matrix/client/versions",void 0,void 0,{prefix:""}).catch((e=>{throw this.serverVersionsPromise=null,e}))),this.serverVersionsPromise}isVersionSupported(e){return s(this,void 0,void 0,(function*(){const{versions:t}=yield this.getVersions();return t&&t.includes(e)}))}doesServerSupportLazyLoading(){return s(this,void 0,void 0,(function*(){const e=yield this.getVersions();if(!e)return!1;const t=e.versions,r=e.unstable_features;return t&&t.includes("r0.5.0")||r&&r["m.lazy_load_members"]}))}doesServerRequireIdServerParam(){return s(this,void 0,void 0,(function*(){const e=yield this.getVersions();if(!e)return!0;const t=e.versions;if(t&&t.includes("r0.6.0"))return!1;const r=e.unstable_features;return!r||(void 0===r["m.require_identity_server"]||r["m.require_identity_server"])}))}doesServerAcceptIdentityAccessToken(){return s(this,void 0,void 0,(function*(){const e=yield this.getVersions();if(!e)return!1;const t=e.versions,r=e.unstable_features;return t&&t.includes("r0.6.0")||r&&r["m.id_access_token"]}))}doesServerSupportSeparateAddAndBind(){return s(this,void 0,void 0,(function*(){const e=yield this.getVersions();if(!e)return!1;const t=e.versions,r=e.unstable_features;return t&&t.includes("r0.6.0")||r&&r["m.separate_add_and_bind"]}))}doesServerSupportUnstableFeature(e){return s(this,void 0,void 0,(function*(){const t=yield this.getVersions();if(!t)return!1;const r=t.unstable_features;return r&&!!r[e]}))}doesServerForceEncryptionForPreset(e){return s(this,void 0,void 0,(function*(){const t=yield this.getVersions();if(!t)return!1;const r=t.unstable_features,n=e.includes("_chat")?e.substring(0,e.indexOf("_chat")):e;return r&&!!r[`io.element.e2ee_forced.${n}`]}))}hasLazyLoadMembersEnabled(){return!!this.clientOpts.lazyLoadMembers}setCanResetTimelineCallback(e){this.canResetTimelineCallback=e}getCanResetTimelineCallback(){return this.canResetTimelineCallback}relations(e,t,r,n,i){return s(this,void 0,void 0,(function*(){const o=this.getEncryptedIfNeededEventType(e,n),s=yield this.fetchRelations(e,t,r,o,i),a=this.getEventMapper();let c;s.original_event&&(c=a(s.original_event));let u=s.chunk.map(a);if("m.room.encrypted"===o){const e=c?u.concat(c):u;yield Promise.all(e.map((e=>new Promise((t=>e.once("Event.decrypted",t)))))),u=u.filter((e=>e.getType()===n))}return c&&"m.replace"===r&&(u=u.filter((e=>e.getSender()===c.getSender()))),{originalEvent:c,events:u,nextBatch:s.next_batch}}))}getCrossSigningCacheCallbacks(){var e;return null===(e=this.crypto)||void 0===e?void 0:e.crossSigningInfo.getCacheCallbacks()}generateClientSecret(){return F.randomString(32)}decryptEventIfNeeded(e,t){return e.shouldAttemptDecryption()&&e.attemptDecryption(this.crypto,t),e.isBeingDecrypted()?e.getDecryptionPromise():Promise.resolve()}termsUrlForService(e,t){switch(e){case I.SERVICE_TYPES.IS:return t+T.PREFIX_IDENTITY_V2+"/terms";case I.SERVICE_TYPES.IM:return t+"/_matrix/integrations/v1/terms";default:throw new Error("Unsupported service type")}}getHomeserverUrl(){return this.baseUrl}getIdentityServerUrl(e=!1){return e&&(this.idBaseUrl.startsWith("http://")||this.idBaseUrl.startsWith("https://"))?this.idBaseUrl.split("://")[1]:this.idBaseUrl}setIdentityServerUrl(e){this.idBaseUrl=p.ensureNoTrailingSlash(e),this.http.setIdBaseUrl(this.idBaseUrl)}getAccessToken(){return this.http.opts.accessToken||null}isLoggedIn(){return void 0!==this.http.opts.accessToken}makeTxnId(){return"m"+(new Date).getTime()+"."+this.txnCtr++}isUsernameAvailable(e){return this.http.authedRequest(void 0,"GET","/register/available",{username:e}).then((e=>e.available))}register(e,t,r,n,i,o,s,a){!0===i?i={email:!0}:null==i&&(i={}),"function"==typeof s&&(a=s,s=void 0),r&&(n.session=r);const c={auth:n};return null!=e&&(c.username=e),null!=t&&(c.password=t),i.email&&(c.bind_email=!0),i.msisdn&&(c.bind_msisdn=!0),null!=o&&(c.guest_access_token=o),null!=s&&(c.inhibit_login=s),null!=t&&(c.x_show_msisdn=!0),this.registerRequest(c,void 0,a)}registerGuest(e,t){return(e=e||{}).body=e.body||{},this.registerRequest(e.body,"guest",t)}registerRequest(e,t,r){const n={};return t&&(n.kind=t),this.http.request(r,"POST","/register",n,e)}loginFlows(e){return this.http.request(e,"GET","/login")}login(e,t,r){const n={type:e};return p.extend(n,t),this.http.authedRequest(((e,t)=>{t&&t.access_token&&t.user_id&&(this.http.opts.accessToken=t.access_token,this.credentials={userId:t.user_id}),r&&r(e,t)}),"POST","/login",void 0,n)}loginWithPassword(e,t,r){return this.login("m.login.password",{user:e,password:t},r)}loginWithSAML2(e,t){return this.login("m.login.saml2",{relay_state:e},t)}getCasLoginUrl(e){return this.getSsoLoginUrl(e,"cas")}getSsoLoginUrl(e,t="sso",r){let n="/login/"+t+"/redirect";return r&&(n+="/"+r),this.http.getUrl(n,{redirectUrl:e},T.PREFIX_R0)}loginWithToken(e,t){return this.login("m.login.token",{token:e},t)}logout(e){return this.http.authedRequest(e,"POST","/logout")}deactivateAccount(e,t){if("function"==typeof t)throw new Error("deactivateAccount no longer accepts a callback parameter");const r={};return e&&(r.auth=e),void 0!==t&&(r.erase=t),this.http.authedRequest(void 0,"POST","/account/deactivate",void 0,r)}getFallbackAuthUrl(e,t){const r=p.encodeUri("/auth/$loginType/fallback/web",{$loginType:e});return this.http.getUrl(r,{session:t},T.PREFIX_R0)}createRoom(e,t){return s(this,void 0,void 0,(function*(){const r=(e.invite_3pid||[]).filter((e=>!e.id_access_token));if(r.length>0&&this.identityServer&&this.identityServer.getAccessToken&&(yield this.doesServerAcceptIdentityAccessToken())){const e=yield this.identityServer.getAccessToken();if(e)for(const t of r)t.id_access_token=e}return this.http.authedRequest(t,"POST","/createRoom",void 0,e)}))}fetchRelations(e,t,r,n,i){return s(this,void 0,void 0,(function*(){const o={};i.from&&(o.from=i.from);const s=p.encodeParams(o),a=p.encodeUri("/rooms/$roomId/relations/$eventId/$relationType/$eventType?"+s,{$roomId:e,$eventId:t,$relationType:r,$eventType:n});return yield this.http.authedRequest(void 0,"GET",a,null,null,{prefix:T.PREFIX_UNSTABLE})}))}roomState(e,t){const r=p.encodeUri("/rooms/$roomId/state",{$roomId:e});return this.http.authedRequest(t,"GET",r)}fetchRoomEvent(e,t,r){const n=p.encodeUri("/rooms/$roomId/event/$eventId",{$roomId:e,$eventId:t});return this.http.authedRequest(r,"GET",n)}members(e,t,r,n,i){const o={};t&&(o.membership=t),r&&(o.not_membership=r),n&&(o.at=n);const s=p.encodeParams(o),a=p.encodeUri("/rooms/$roomId/members?"+s,{$roomId:e});return this.http.authedRequest(i,"GET",a)}upgradeRoom(e,t){const r=p.encodeUri("/rooms/$roomId/upgrade",{$roomId:e});return this.http.authedRequest(void 0,"POST",r,void 0,{new_version:t})}getStateEvent(e,t,r,n){const i={$roomId:e,$eventType:t,$stateKey:r};let o=p.encodeUri("/rooms/$roomId/state/$eventType",i);return void 0!==r&&(o=p.encodeUri(o+"/$stateKey",i)),this.http.authedRequest(n,"GET",o)}sendStateEvent(e,t,r,n="",i){const o={$roomId:e,$eventType:t,$stateKey:n};let s=p.encodeUri("/rooms/$roomId/state/$eventType",o);return void 0!==n&&(s=p.encodeUri(s+"/$stateKey",o)),this.http.authedRequest(i,"PUT",s,void 0,r)}roomInitialSync(e,t,r){p.isFunction(t)&&(r=t,t=void 0);const n=p.encodeUri("/rooms/$roomId/initialSync",{$roomId:e});return t||(t=30),this.http.authedRequest(r,"GET",n,{limit:t})}setRoomReadMarkersHttpRequest(e,t,r,n){const i=p.encodeUri("/rooms/$roomId/read_markers",{$roomId:e}),o={"m.fully_read":t,"m.read":r,"m.hidden":Boolean(!!n&&n.hidden)};return this.http.authedRequest(void 0,"POST",i,void 0,o)}getJoinedRooms(){const e=p.encodeUri("/joined_rooms",{});return this.http.authedRequest(void 0,"GET",e)}getJoinedRoomMembers(e){const t=p.encodeUri("/rooms/$roomId/joined_members",{$roomId:e});return this.http.authedRequest(void 0,"GET",t)}publicRooms(e,t){"function"==typeof e&&(t=e,e={}),void 0===e&&(e={});const r={};return e.server&&(r.server=e.server,delete e.server),0===Object.keys(e).length&&0===Object.keys(r).length?this.http.authedRequest(t,"GET","/publicRooms"):this.http.authedRequest(t,"POST","/publicRooms",r,e)}createAlias(e,t,r){const n=p.encodeUri("/directory/room/$alias",{$alias:e}),i={room_id:t};return this.http.authedRequest(r,"PUT",n,void 0,i)}deleteAlias(e,t){const r=p.encodeUri("/directory/room/$alias",{$alias:e});return this.http.authedRequest(t,"DELETE",r,void 0,void 0)}unstableGetLocalAliases(e,t){const r=p.encodeUri("/rooms/$roomId/aliases",{$roomId:e}),n=T.PREFIX_UNSTABLE+"/org.matrix.msc2432";return this.http.authedRequest(t,"GET",r,null,null,{prefix:n})}getRoomIdForAlias(e,t){const r=p.encodeUri("/directory/room/$alias",{$alias:e});return this.http.authedRequest(t,"GET",r)}resolveRoomAlias(e,t){const r=p.encodeUri("/directory/room/$alias",{$alias:e});return this.http.request(t,"GET",r)}getRoomDirectoryVisibility(e,t){const r=p.encodeUri("/directory/list/room/$roomId",{$roomId:e});return this.http.authedRequest(t,"GET",r)}setRoomDirectoryVisibility(e,t,r){const n=p.encodeUri("/directory/list/room/$roomId",{$roomId:e});return this.http.authedRequest(r,"PUT",n,void 0,{visibility:t})}setRoomDirectoryVisibilityAppService(e,t,r,n){const i=p.encodeUri("/directory/list/appservice/$networkId/$roomId",{$networkId:e,$roomId:t});return this.http.authedRequest(n,"PUT",i,void 0,{visibility:r})}searchUserDirectory(e){const t={search_term:e.term};return void 0!==e.limit&&(t.limit=e.limit),this.http.authedRequest(void 0,"POST","/user_directory/search",void 0,t)}uploadContent(e,t){return this.http.uploadContent(e,t)}cancelUpload(e){return this.http.cancelUpload(e)}getCurrentUploads(){return this.http.getCurrentUploads()}getProfileInfo(e,t,r){p.isFunction(t)&&(r=t,t=void 0);const n=t?p.encodeUri("/profile/$userId/$info",{$userId:e,$info:t}):p.encodeUri("/profile/$userId",{$userId:e});return this.http.authedRequest(r,"GET",n)}getThreePids(e){return this.http.authedRequest(e,"GET","/account/3pid",void 0,void 0)}addThreePid(e,t,r){const n={threePidCreds:e,bind:t};return this.http.authedRequest(r,"POST","/account/3pid",null,n)}addThreePidOnly(e){return s(this,void 0,void 0,(function*(){const t=(yield this.isVersionSupported("r0.6.0"))?T.PREFIX_R0:T.PREFIX_UNSTABLE;return this.http.authedRequest(void 0,"POST","/account/3pid/add",null,e,{prefix:t})}))}bindThreePid(e){return s(this,void 0,void 0,(function*(){const t=(yield this.isVersionSupported("r0.6.0"))?T.PREFIX_R0:T.PREFIX_UNSTABLE;return this.http.authedRequest(void 0,"POST","/account/3pid/bind",null,e,{prefix:t})}))}unbindThreePid(e,t){return s(this,void 0,void 0,(function*(){const r={medium:e,address:t,id_server:this.getIdentityServerUrl(!0)},n=(yield this.isVersionSupported("r0.6.0"))?T.PREFIX_R0:T.PREFIX_UNSTABLE;return this.http.authedRequest(void 0,"POST","/account/3pid/unbind",null,r,{prefix:n})}))}deleteThreePid(e,t){const r={medium:e,address:t};return this.http.authedRequest(void 0,"POST","/account/3pid/delete",null,r)}setPassword(e,t,r){const n={auth:e,new_password:t};return this.http.authedRequest(r,"POST","/account/password",null,n)}getDevices(){return this.http.authedRequest(void 0,"GET","/devices",void 0,void 0)}getDevice(e){const t=p.encodeUri("/devices/$device_id",{$device_id:e});return this.http.authedRequest(void 0,"GET",t,void 0,void 0)}setDeviceDetails(e,t){const r=p.encodeUri("/devices/$device_id",{$device_id:e});return this.http.authedRequest(void 0,"PUT",r,void 0,t)}deleteDevice(e,t){const r=p.encodeUri("/devices/$device_id",{$device_id:e}),n={};return t&&(n.auth=t),this.http.authedRequest(void 0,"DELETE",r,void 0,n)}deleteMultipleDevices(e,t){const r={devices:e};t&&(r.auth=t);return this.http.authedRequest(void 0,"POST","/delete_devices",void 0,r)}getPushers(e){return this.http.authedRequest(e,"GET","/pushers",void 0,void 0)}setPusher(e,t){return this.http.authedRequest(t,"POST","/pushers/set",null,e)}getPushRules(e){return this.http.authedRequest(e,"GET","/pushrules/").then((e=>m.PushProcessor.rewriteDefaultRules(e)))}addPushRule(e,t,r,n,i){const o=p.encodeUri("/pushrules/"+e+"/$kind/$ruleId",{$kind:t,$ruleId:r});return this.http.authedRequest(i,"PUT",o,void 0,n)}deletePushRule(e,t,r,n){const i=p.encodeUri("/pushrules/"+e+"/$kind/$ruleId",{$kind:t,$ruleId:r});return this.http.authedRequest(n,"DELETE",i)}setPushRuleEnabled(e,t,r,n,i){const o=p.encodeUri("/pushrules/"+e+"/$kind/$ruleId/enabled",{$kind:t,$ruleId:r});return this.http.authedRequest(i,"PUT",o,void 0,{enabled:n})}setPushRuleActions(e,t,r,n,i){const o=p.encodeUri("/pushrules/"+e+"/$kind/$ruleId/actions",{$kind:t,$ruleId:r});return this.http.authedRequest(i,"PUT",o,void 0,{actions:n})}search(e,t){const r={};return e.next_batch&&(r.next_batch=e.next_batch),this.http.authedRequest(t,"POST","/search",r,e.body)}uploadKeysRequest(e,t,r){return this.http.authedRequest(r,"POST","/keys/upload",void 0,e)}uploadKeySignatures(e){return this.http.authedRequest(void 0,"POST","/keys/signatures/upload",void 0,e,{prefix:T.PREFIX_UNSTABLE})}downloadKeysForUsers(e,t){if(p.isFunction(t))throw new Error("downloadKeysForUsers no longer accepts a callback parameter");const r={device_keys:{}};return"token"in(t=t||{})&&(r.token=t.token),e.forEach((e=>{r.device_keys[e]=[]})),this.http.authedRequest(void 0,"POST","/keys/query",void 0,r)}claimOneTimeKeys(e,t="signed_curve25519",r){const n={};void 0===t&&(t="signed_curve25519");for(let r=0;r<e.length;++r){const i=e[r][0],o=e[r][1],s=n[i]||{};n[i]=s,s[o]=t}const i={one_time_keys:n};r&&(i.timeout=r);return this.http.authedRequest(void 0,"POST","/keys/claim",void 0,i)}getKeyChanges(e,t){const r={from:e,to:t};return this.http.authedRequest(void 0,"GET","/keys/changes",r,void 0)}uploadDeviceSigningKeys(e,t){const r=Object.assign({},t);return e&&Object.assign(r,{auth:e}),this.http.authedRequest(void 0,"POST","/keys/device_signing/upload",void 0,r,{prefix:T.PREFIX_UNSTABLE})}registerWithIdentityServer(e){if(!this.idBaseUrl)throw new Error("No Identity Server base URL set");const t=this.idBaseUrl+T.PREFIX_IDENTITY_V2+"/account/register";return this.http.requestOtherUrl(void 0,"POST",t,null,e)}requestEmailToken(e,t,r,n,i,o){return s(this,void 0,void 0,(function*(){const s={client_secret:t,email:e,send_attempt:r,next_link:n};return yield this.http.idServerRequest(i,"POST","/validate/email/requestToken",s,T.PREFIX_IDENTITY_V2,o)}))}requestMsisdnToken(e,t,r,n,i,o,a){return s(this,void 0,void 0,(function*(){const s={client_secret:r,country:e,phone_number:t,send_attempt:n,next_link:i};return yield this.http.idServerRequest(o,"POST","/validate/msisdn/requestToken",s,T.PREFIX_IDENTITY_V2,a)}))}submitMsisdnToken(e,t,r,n){return s(this,void 0,void 0,(function*(){const i={sid:e,client_secret:t,token:r};return yield this.http.idServerRequest(void 0,"POST","/validate/msisdn/submitToken",i,T.PREFIX_IDENTITY_V2,n)}))}submitMsisdnTokenOtherUrl(e,t,r,n){const i={sid:t,client_secret:r,token:n};return this.http.requestOtherUrl(void 0,"POST",e,void 0,i)}getIdentityHashDetails(e){return this.http.idServerRequest(void 0,"GET","/hash_details",null,T.PREFIX_IDENTITY_V2,e)}identityHashedLookup(e,r){return s(this,void 0,void 0,(function*(){const n={},i=yield this.getIdentityHashDetails(r);if(!i||!i.lookup_pepper||!i.algorithms)throw new Error("Unsupported identity server: bad response");n.pepper=i.lookup_pepper;const o={};if(i.algorithms.includes("sha256")){const r=new t.Olm.Utility;n.addresses=e.map((e=>{const t=e[0].toLowerCase(),i=e[1].toLowerCase(),s=r.sha256(`${t} ${i} ${n.pepper}`).replace(/\+/g,"-").replace(/\//g,"_");return o[s]=e[0],s})),n.algorithm="sha256"}else{if(!i.algorithms.includes("none"))throw new Error("Unsupported identity server: unknown hash algorithm");n.addresses=e.map((e=>{const t=`${e[0].toLowerCase()} ${e[1].toLowerCase()}`;return o[t]=e[0],t})),n.algorithm="none"}const s=yield this.http.idServerRequest(void 0,"POST","/lookup",n,T.PREFIX_IDENTITY_V2,r);if(!s||!s.mappings)return[];const a=[];for(const e of Object.keys(s.mappings)){const t=s.mappings[e],r=o[e];if(!r)throw new Error("Identity server returned more results than expected");a.push({address:r,mxid:t})}return a}))}lookupThreePid(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=(yield this.identityHashedLookup([[t,e]],n)).find((e=>e.address===t));if(!i)return r&&r(null,{}),{};const o={address:t,medium:e,mxid:i.mxid};return r&&r(null,o),o}))}bulkLookupThreePids(e,t){return s(this,void 0,void 0,(function*(){const r=yield this.identityHashedLookup(e.map((e=>[e[1],e[0]])),t),n=[];for(const t of r){const r=e.find((e=>e[1]===t.address));if(!r)throw new Error("Identity sever returned unexpected results");n.push([r[0],t.address,t.mxid])}return{threepids:n}}))}getIdentityAccount(e){return this.http.idServerRequest(void 0,"GET","/account",void 0,T.PREFIX_IDENTITY_V2,e)}sendToDevice(e,t,r){const n=p.encodeUri("/sendToDevice/$eventType/$txnId",{$eventType:e,$txnId:r||this.makeTxnId()}),i={messages:t},o=Object.keys(t).reduce(((e,r)=>(e[r]=Object.keys(t[r]),e)),{});return w.logger.log(`PUT ${n}`,o),this.http.authedRequest(void 0,"PUT",n,void 0,i)}getThirdpartyProtocols(){return this.http.authedRequest(void 0,"GET","/thirdparty/protocols",void 0,void 0).then((e=>{if(!e||"object"!=typeof e)throw new Error(`/thirdparty/protocols did not return an object: ${e}`);return e}))}getThirdpartyLocation(e,t){const r=p.encodeUri("/thirdparty/location/$protocol",{$protocol:e});return this.http.authedRequest(void 0,"GET",r,t,void 0)}getThirdpartyUser(e,t){const r=p.encodeUri("/thirdparty/user/$protocol",{$protocol:e});return this.http.authedRequest(void 0,"GET",r,t,void 0)}getTerms(e,t){const r=this.termsUrlForService(e,t);return this.http.requestOtherUrl(void 0,"GET",r)}agreeToTerms(e,t,r,n){const i=this.termsUrlForService(e,t),o={Authorization:"Bearer "+r};return this.http.requestOtherUrl(void 0,"POST",i,null,{user_accepts:n},{headers:o})}reportEvent(e,t,r,n){const i=p.encodeUri("/rooms/$roomId/report/$eventId",{$roomId:e,$eventId:t});return this.http.authedRequest(void 0,"POST",i,null,{score:r,reason:n})}getSpaceSummary(e,t,r,n,i,o){const s=p.encodeUri("/rooms/$roomId/spaces",{$roomId:e});return this.http.authedRequest(void 0,"POST",s,null,{max_rooms_per_space:t,suggested_only:r,auto_join_only:n,limit:i,batch:o},{prefix:"/_matrix/client/unstable/org.matrix.msc2946"})}unstableCreateFileTree(e){return s(this,void 0,void 0,(function*(){const{room_id:t}=yield this.createRoom({name:e,preset:L.Preset.PrivateChat,power_level_content_override:Object.assign(Object.assign({},$.DEFAULT_TREE_POWER_LEVELS_TEMPLATE),{users:{[this.getUserId()]:100}}),creation_content:{[N.RoomCreateTypeField]:N.RoomType.Space},initial_state:[{type:N.UNSTABLE_MSC3088_PURPOSE.name,state_key:N.UNSTABLE_MSC3089_TREE_SUBTYPE.name,content:{[N.UNSTABLE_MSC3088_ENABLED.name]:!0}},{type:N.EventType.RoomEncryption,state_key:"",content:{algorithm:S.MEGOLM_ALGORITHM}}]});return new $.MSC3089TreeSpace(this,t)}))}unstableGetFileTreeSpace(e){var t,r;const n=this.getRoom(e);if(!n)return null;const i=n.currentState.getStateEvents(N.EventType.RoomCreate,""),o=n.currentState.getStateEvents(N.UNSTABLE_MSC3088_PURPOSE.name,N.UNSTABLE_MSC3089_TREE_SUBTYPE.name);if(!i)throw new Error("Expected single room create event");return(null===(t=null==o?void 0:o.getContent())||void 0===t?void 0:t[N.UNSTABLE_MSC3088_ENABLED.name])?(null===(r=i.getContent())||void 0===r?void 0:r[N.RoomCreateTypeField])!==N.RoomType.Space?null:new $.MSC3089TreeSpace(this,e):null}getGroupSummary(e){const t=p.encodeUri("/groups/$groupId/summary",{$groupId:e});return this.http.authedRequest(void 0,"GET",t)}getGroupProfile(e){const t=p.encodeUri("/groups/$groupId/profile",{$groupId:e});return this.http.authedRequest(void 0,"GET",t)}setGroupProfile(e,t){const r=p.encodeUri("/groups/$groupId/profile",{$groupId:e});return this.http.authedRequest(void 0,"POST",r,void 0,t)}setGroupJoinPolicy(e,t){const r=p.encodeUri("/groups/$groupId/settings/m.join_policy",{$groupId:e});return this.http.authedRequest(void 0,"PUT",r,void 0,{"m.join_policy":t})}getGroupUsers(e){const t=p.encodeUri("/groups/$groupId/users",{$groupId:e});return this.http.authedRequest(void 0,"GET",t)}getGroupInvitedUsers(e){const t=p.encodeUri("/groups/$groupId/invited_users",{$groupId:e});return this.http.authedRequest(void 0,"GET",t)}getGroupRooms(e){const t=p.encodeUri("/groups/$groupId/rooms",{$groupId:e});return this.http.authedRequest(void 0,"GET",t)}inviteUserToGroup(e,t){const r=p.encodeUri("/groups/$groupId/admin/users/invite/$userId",{$groupId:e,$userId:t});return this.http.authedRequest(void 0,"PUT",r,void 0,{})}removeUserFromGroup(e,t){const r=p.encodeUri("/groups/$groupId/admin/users/remove/$userId",{$groupId:e,$userId:t});return this.http.authedRequest(void 0,"PUT",r,void 0,{})}addUserToGroupSummary(e,t,r){const n=p.encodeUri(r?"/groups/$groupId/summary/$roleId/users/$userId":"/groups/$groupId/summary/users/$userId",{$groupId:e,$roleId:r,$userId:t});return this.http.authedRequest(void 0,"PUT",n,void 0,{})}removeUserFromGroupSummary(e,t){const r=p.encodeUri("/groups/$groupId/summary/users/$userId",{$groupId:e,$userId:t});return this.http.authedRequest(void 0,"DELETE",r,void 0,{})}addRoomToGroupSummary(e,t,r){const n=p.encodeUri(r?"/groups/$groupId/summary/$categoryId/rooms/$roomId":"/groups/$groupId/summary/rooms/$roomId",{$groupId:e,$categoryId:r,$roomId:t});return this.http.authedRequest(void 0,"PUT",n,void 0,{})}removeRoomFromGroupSummary(e,t){const r=p.encodeUri("/groups/$groupId/summary/rooms/$roomId",{$groupId:e,$roomId:t});return this.http.authedRequest(void 0,"DELETE",r,void 0,{})}addRoomToGroup(e,t,r){void 0===r&&(r=!0);const n=p.encodeUri("/groups/$groupId/admin/rooms/$roomId",{$groupId:e,$roomId:t});return this.http.authedRequest(void 0,"PUT",n,void 0,{"m.visibility":{type:r?"public":"private"}})}updateGroupRoomVisibility(e,t,r){const n=p.encodeUri("/groups/$groupId/admin/rooms/$roomId/config/m.visibility",{$groupId:e,$roomId:t});return this.http.authedRequest(void 0,"PUT",n,void 0,{type:r?"public":"private"})}removeRoomFromGroup(e,t){const r=p.encodeUri("/groups/$groupId/admin/rooms/$roomId",{$groupId:e,$roomId:t});return this.http.authedRequest(void 0,"DELETE",r,void 0,{})}acceptGroupInvite(e,t=null){const r=p.encodeUri("/groups/$groupId/self/accept_invite",{$groupId:e});return this.http.authedRequest(void 0,"PUT",r,void 0,t||{})}joinGroup(e){const t=p.encodeUri("/groups/$groupId/self/join",{$groupId:e});return this.http.authedRequest(void 0,"PUT",t,void 0,{})}leaveGroup(e){const t=p.encodeUri("/groups/$groupId/self/leave",{$groupId:e});return this.http.authedRequest(void 0,"PUT",t,void 0,{})}getJoinedGroups(){const e=p.encodeUri("/joined_groups",{});return this.http.authedRequest(void 0,"GET",e)}createGroup(e){const t=p.encodeUri("/create_group",{});return this.http.authedRequest(void 0,"POST",t,void 0,e)}getPublicisedGroups(e){const t=p.encodeUri("/publicised_groups",{});return this.http.authedRequest(void 0,"POST",t,void 0,{user_ids:e})}setGroupPublicity(e,t){const r=p.encodeUri("/groups/$groupId/self/update_publicity",{$groupId:e});return this.http.authedRequest(void 0,"PUT",r,void 0,{publicise:t})}}r.MatrixClient=W,W.RESTORE_BACKUP_ERROR_BAD_KEY="RESTORE_BACKUP_ERROR_BAD_KEY"}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./@types/event":58,"./@types/partials":59,"./ReEmitter":61,"./autodiscovery":62,"./content-helpers":65,"./content-repo":66,"./crypto":83,"./crypto/RoomList":72,"./crypto/api":79,"./crypto/backup":80,"./crypto/dehydration":81,"./crypto/key_passphrase":84,"./crypto/olmlib":85,"./crypto/recoverykey":86,"./event-mapper":100,"./filter":102,"./http-api":103,"./logger":106,"./matrix":107,"./models/MSC3089TreeSpace":109,"./models/event":113,"./models/event-timeline":112,"./models/search-result":120,"./models/user":121,"./pushprocessor":122,"./randomstring":123,"./service-types":126,"./store/stub":132,"./sync":135,"./sync.api":134,"./utils":137,"./webrtc/call":138,"./webrtc/callEventHandler":139,events:36,url:56}],65:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.makeEmoteMessage=r.makeNotice=r.makeTextMessage=r.makeHtmlEmote=r.makeHtmlNotice=r.makeHtmlMessage=void 0,r.makeHtmlMessage=function(e,t){return{msgtype:"m.text",format:"org.matrix.custom.html",body:e,formatted_body:t}},r.makeHtmlNotice=function(e,t){return{msgtype:"m.notice",format:"org.matrix.custom.html",body:e,formatted_body:t}},r.makeHtmlEmote=function(e,t){return{msgtype:"m.emote",format:"org.matrix.custom.html",body:e,formatted_body:t}},r.makeTextMessage=function(e){return{msgtype:"m.text",body:e}},r.makeNotice=function(e){return{msgtype:"m.notice",body:e}},r.makeEmoteMessage=function(e){return{msgtype:"m.emote",body:e}}},{}],66:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(r,"__esModule",{value:!0}),r.getHttpUriForMxc=void 0;const s=o(e("./utils"));r.getHttpUriForMxc=function(e,t,r,n,i,o=!1){if("string"!=typeof t||!t)return"";if(0!==t.indexOf("mxc://"))return o?t:"";let a=t.slice(6),c="/_matrix/media/r0/download/";const u={};r&&(u.width=Math.round(r)),n&&(u.height=Math.round(n)),i&&(u.method=i),Object.keys(u).length>0&&(c="/_matrix/media/r0/thumbnail/");const l=a.indexOf("#");let d="";return l>=0&&(d=a.substr(l),a=a.substr(0,l)),e+c+a+(0===Object.keys(u).length?"":"?"+s.encodeParams(u))+d}},{"./utils":137}],67:[function(e,t,r){(function(t,n){(function(){"use strict";var i=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.requestKeysDuringVerification=r.createCryptoStoreCacheCallbacks=r.DeviceTrustLevel=r.UserTrustLevel=r.CrossSigningLevel=r.CrossSigningInfo=void 0;const o=e("events"),s=e("./olmlib"),a=e("../logger"),c=e("../crypto/store/indexeddb-crypto-store"),u=e("./aes");function l(e){return Object.values(e.keys)[0]}class d extends o.EventEmitter{constructor(e,t={},r={}){super(),this.userId=e,this.callbacks=t,this.cacheCallbacks=r,this.keys={},this.firstUse=!0,this.crossSigningVerifiedBefore=!1}static fromStorage(e,t){const r=new d(t);for(const t in e)e.hasOwnProperty(t)&&(r[t]=e[t]);return r}toStorage(){return{keys:this.keys,firstUse:this.firstUse,crossSigningVerifiedBefore:this.crossSigningVerifiedBefore}}getCrossSigningKey(e,r){return i(this,void 0,void 0,(function*(){const n=["master","self_signing","user_signing"].indexOf(e)>=0;if(!this.callbacks.getCrossSigningKey)throw new Error("No getCrossSigningKey callback supplied");function i(e){if(!e)return;const n=new t.Olm.PkSigning,i=n.init_with_seed(e);if(i===r)return[i,n];n.free()}let o;void 0===r&&(r=this.getId(e)),this.cacheCallbacks.getCrossSigningKeyCache&&n&&(o=yield this.cacheCallbacks.getCrossSigningKeyCache(e,r));const s=i(o);if(s)return s;o=yield this.callbacks.getCrossSigningKey(e,r);const a=i(o);if(a)return this.cacheCallbacks.storeCrossSigningKeyCache&&n&&(yield this.cacheCallbacks.storeCrossSigningKeyCache(e,o)),a;if(!o)throw new Error("getCrossSigningKey callback for "+e+" returned falsey");throw new Error("Key type "+e+" from getCrossSigningKey callback did not match")}))}isStoredInSecretStorage(e){return i(this,void 0,void 0,(function*(){const t=(yield e.isStored("m.cross_signing.master",!1))||{};function r(e){for(const r of Object.keys(t))e[r]||delete t[r]}for(const t of["self_signing","user_signing"])r((yield e.isStored(`m.cross_signing.${t}`,!1))||{});return Object.keys(t).length?t:null}))}static storeInSecretStorage(e,t){return i(this,void 0,void 0,(function*(){for(const[r,n]of e){const e=s.encodeBase64(n);yield t.store(`m.cross_signing.${r}`,e)}}))}static getFromSecretStorage(e,t){return i(this,void 0,void 0,(function*(){const r=yield t.get(`m.cross_signing.${e}`);return r?s.decodeBase64(r):null}))}isStoredInKeyCache(e){return i(this,void 0,void 0,(function*(){const t=this.cacheCallbacks;if(!t)return!1;const r=e?[e]:["master","self_signing","user_signing"];for(const e of r)if(!(yield t.getCrossSigningKeyCache(e)))return!1;return!0}))}getCrossSigningKeysFromCache(){return i(this,void 0,void 0,(function*(){const e=new Map,t=this.cacheCallbacks;if(!t)return e;for(const r of["master","self_signing","user_signing"]){const n=yield t.getCrossSigningKeyCache(r);n&&e.set(r,n)}return e}))}getId(e="master"){if(!this.keys[e])return null;return l(this.keys[e])}resetKeys(e){return i(this,void 0,void 0,(function*(){if(!this.callbacks.saveCrossSigningKeys)throw new Error("No saveCrossSigningKeys callback supplied");if(void 0===e||e&h.MASTER||!this.keys.master)e=h.MASTER|h.USER_SIGNING|h.SELF_SIGNING;else if(0===e)return;const r={},n={};let i,o;try{if(e&h.MASTER?(i=new t.Olm.PkSigning,r.master=i.generate_seed(),o=i.init_with_seed(r.master),n.master={user_id:this.userId,usage:["master"],keys:{["ed25519:"+o]:o}}):[o,i]=yield this.getCrossSigningKey("master"),e&h.SELF_SIGNING){const e=new t.Olm.PkSigning;try{r.self_signing=e.generate_seed();const t=e.init_with_seed(r.self_signing);n.self_signing={user_id:this.userId,usage:["self_signing"],keys:{["ed25519:"+t]:t}},s.pkSign(n.self_signing,i,this.userId,o)}finally{e.free()}}if(e&h.USER_SIGNING){const e=new t.Olm.PkSigning;try{r.user_signing=e.generate_seed();const t=e.init_with_seed(r.user_signing);n.user_signing={user_id:this.userId,usage:["user_signing"],keys:{["ed25519:"+t]:t}},s.pkSign(n.user_signing,i,this.userId,o)}finally{e.free()}}Object.assign(this.keys,n),this.callbacks.saveCrossSigningKeys(r)}finally{i&&i.free()}}))}clearKeys(){this.keys={}}setKeys(e){const t={};if(e.master){if(e.master.user_id!==this.userId){const t="Mismatched user ID "+e.master.user_id+" in master key from "+this.userId;throw a.logger.error(t),new Error(t)}this.keys.master?l(e.master)!==this.getId()&&(this.firstUse=!1):this.firstUse=!0,t.master=e.master}else{if(!this.keys.master)throw new Error("Tried to set cross-signing keys without a master key");t.master=this.keys.master}const r=l(t.master);if(e.user_signing){if(e.user_signing.user_id!==this.userId){const t="Mismatched user ID "+e.master.user_id+" in user_signing key from "+this.userId;throw a.logger.error(t),new Error(t)}try{s.pkVerify(e.user_signing,r,this.userId)}catch(e){throw a.logger.error("invalid signature on user-signing key"),e}}if(e.self_signing){if(e.self_signing.user_id!==this.userId){const t="Mismatched user ID "+e.master.user_id+" in self_signing key from "+this.userId;throw a.logger.error(t),new Error(t)}try{s.pkVerify(e.self_signing,r,this.userId)}catch(e){throw a.logger.error("invalid signature on self-signing key"),e}}e.master&&(this.keys.master=e.master,this.keys.self_signing=null,this.keys.user_signing=null),e.self_signing&&(this.keys.self_signing=e.self_signing),e.user_signing&&(this.keys.user_signing=e.user_signing)}updateCrossSigningVerifiedBefore(e){!this.crossSigningVerifiedBefore&&e&&(this.crossSigningVerifiedBefore=!0)}signObject(e,t){return i(this,void 0,void 0,(function*(){if(!this.keys[t])throw new Error("Attempted to sign with "+t+" key but no such key present");const[r,n]=yield this.getCrossSigningKey(t);try{return s.pkSign(e,n,this.userId,r),e}finally{n.free()}}))}signUser(e){return i(this,void 0,void 0,(function*(){if(this.keys.user_signing)return this.signObject(e.keys.master,"user_signing");a.logger.info("No user signing key: not signing user")}))}signDevice(e,t){return i(this,void 0,void 0,(function*(){if(e!==this.userId)throw new Error(`Trying to sign ${e}'s device; can only sign our own device`);if(this.keys.self_signing)return this.signObject({algorithms:t.algorithms,keys:t.keys,device_id:t.deviceId,user_id:e},"self_signing");a.logger.info("No self signing key: not signing device")}))}checkUserTrust(e){if(this.userId===e.userId&&this.getId()&&this.getId()===e.getId()&&this.getId("self_signing")&&this.getId("self_signing")===e.getId("self_signing"))return new f(!0,!0,this.firstUse);if(!this.keys.user_signing)return new f(!1,!1,e.firstUse);let t;const r=e.keys.master,n=this.getId("user_signing");try{s.pkVerify(r,n,this.userId),t=!0}catch(e){t=!1}return new f(t,e.crossSigningVerifiedBefore,e.firstUse)}checkDeviceTrust(e,t,r,n){const i=this.checkUserTrust(e),o=e.keys.self_signing;if(!o)return new g(!1,!1,r,n);const a=function(e,t){return{algorithms:e.algorithms,keys:e.keys,device_id:e.deviceId,user_id:t,signatures:e.signatures}}(t,e.userId);try{return s.pkVerify(o,e.getId(),e.userId),s.pkVerify(a,l(o),e.userId),g.fromUserTrustLevel(i,r,n)}catch(e){return new g(!1,!1,r,n)}}getCacheCallbacks(){return this.cacheCallbacks}}var h;r.CrossSigningInfo=d,function(e){e[e.MASTER=4]="MASTER",e[e.USER_SIGNING=2]="USER_SIGNING",e[e.SELF_SIGNING=1]="SELF_SIGNING"}(h=r.CrossSigningLevel||(r.CrossSigningLevel={}));class f{constructor(e,t,r){this.crossSigningVerified=e,this.crossSigningVerifiedBefore=t,this.tofu=r}isVerified(){return this.isCrossSigningVerified()}isCrossSigningVerified(){return this.crossSigningVerified}wasCrossSigningVerified(){return this.crossSigningVerifiedBefore}isTofu(){return this.tofu}}r.UserTrustLevel=f;class g{constructor(e,t,r,n){this.crossSigningVerified=e,this.tofu=t,this.localVerified=r,this.trustCrossSignedDevices=n}static fromUserTrustLevel(e,t,r){return new g(e.isCrossSigningVerified(),e.isTofu(),t,r)}isVerified(){return Boolean(this.isLocallyVerified()||this.trustCrossSignedDevices&&this.isCrossSigningVerified())}isCrossSigningVerified(){return this.crossSigningVerified}isLocallyVerified(){return this.localVerified}isTofu(){return this.tofu}}r.DeviceTrustLevel=g,r.createCryptoStoreCacheCallbacks=function(e,t){return{getCrossSigningKeyCache:function(r,o){return i(this,void 0,void 0,(function*(){const i=yield new Promise((t=>e.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(n=>{e.getSecretStorePrivateKey(n,t,r)}))));if(i&&i.ciphertext){const e=n.from(t._pickleKey),o=yield u.decryptAES(i,e,r);return s.decodeBase64(o)}return i}))},storeCrossSigningKeyCache:function(r,o){return i(this,void 0,void 0,(function*(){if(!(o instanceof Uint8Array))throw new Error(`storeCrossSigningKeyCache expects Uint8Array, got ${o}`);const i=n.from(t._pickleKey),a=yield u.encryptAES(s.encodeBase64(o),i,r);return e.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(t=>{e.storeSecretStorePrivateKey(t,r,a)}))}))}}},r.requestKeysDuringVerification=function(e,t,r){return i(this,void 0,void 0,(function*(){if(e.getUserId()===t)return a.logger.log("Cross-signing: Self-verification done; requesting keys"),new Promise(((t,n)=>{const o=e,c=o.crypto.crossSigningInfo,u=new d(c.userId,{getCrossSigningKey:e=>i(this,void 0,void 0,(function*(){a.logger.debug("Cross-signing: requesting secret",e,r);const{promise:t}=o.requestSecret(`m.cross_signing.${e}`,[r]),n=yield t,i=s.decodeBase64(n);return Uint8Array.from(i)}))},c.getCacheCallbacks());u.keys=c.keys;const l=new Promise(((e,t)=>{setTimeout(e,6e4,new Error("Timeout"))})),h=(()=>i(this,void 0,void 0,(function*(){if(!(yield o.crypto.getSessionBackupPrivateKey())){a.logger.info("No cached backup key found. Requesting...");const e=o.requestSecret("m.megolm_backup.v1",[r]),t=yield e.promise;a.logger.info("Got key backup key, decoding...");const n=s.decodeBase64(t);a.logger.info("Decoded backup key, storing..."),o.crypto.storeSessionBackupPrivateKey(Uint8Array.from(n)),a.logger.info("Backup key stored. Starting backup restore...");const i=yield o.getKeyBackupVersion();o.restoreKeyBackupWithCache(void 0,void 0,i).then((()=>{a.logger.info("Backup restored.")}))}})))();return Promise.race([Promise.all([u.getCrossSigningKey("master"),u.getCrossSigningKey("self_signing"),u.getCrossSigningKey("user_signing"),h]),l]).then(t,n)})).catch((e=>{a.logger.warn("Cross-signing: failure while requesting keys:",e)}))}))}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"../crypto/store/indexeddb-crypto-store":88,"../logger":106,"./aes":74,"./olmlib":85,buffer:34,events:36}],68:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.DeviceList=void 0;const a=e("events"),c=e("../logger"),u=e("./deviceinfo"),l=e("./CrossSigning"),d=o(e("./olmlib")),h=e("./store/indexeddb-crypto-store"),f=e("../utils");var g;!function(e){e[e.NotTracked=0]="NotTracked",e[e.PendingDownload=1]="PendingDownload",e[e.DownloadInProgress=2]="DownloadInProgress",e[e.UpToDate=3]="UpToDate"}(g||(g={}));class p extends a.EventEmitter{constructor(e,t,r,n=250){super(),this.cryptoStore=t,this.keyDownloadChunkSize=n,this.devices={},this.crossSigningInfo={},this.userByIdentityKey={},this.deviceTrackingStatus={},this.syncToken=null,this.keyDownloadsInProgressByUser={},this.dirty=!1,this.savePromise=null,this.resolveSavePromise=null,this.savePromiseTime=null,this.saveTimer=null,this.hasFetched=null,this.serialiser=new v(e,r,this)}load(){return s(this,void 0,void 0,(function*(){yield this.cryptoStore.doTxn("readonly",[h.IndexedDBCryptoStore.STORE_DEVICE_DATA],(e=>{this.cryptoStore.getEndToEndDeviceData(e,(e=>{this.hasFetched=Boolean(e&&e.devices),this.devices=e?e.devices:{},this.crossSigningInfo=e&&e.crossSigningInfo||{},this.deviceTrackingStatus=e?e.trackingStatus:{},this.syncToken=e?e.syncToken:null,this.userByIdentityKey={};for(const e of Object.keys(this.devices)){const t=this.devices[e];for(const r of Object.keys(t)){const n=t[r].keys["curve25519:"+r];void 0!==n&&(this.userByIdentityKey[n]=e)}}}))}));for(const e of Object.keys(this.deviceTrackingStatus))this.deviceTrackingStatus[e]==g.DownloadInProgress&&(this.deviceTrackingStatus[e]=g.PendingDownload)}))}stop(){null!==this.saveTimer&&clearTimeout(this.saveTimer)}saveIfDirty(e=500){return s(this,void 0,void 0,(function*(){if(!this.dirty)return Promise.resolve(!1);const t=Date.now()+e;this.savePromiseTime&&t<this.savePromiseTime&&(clearTimeout(this.saveTimer),this.saveTimer=null,this.savePromiseTime=null);let r=this.savePromise;if(null===r&&(r=new Promise(((e,t)=>{this.resolveSavePromise=e})),this.savePromise=r),null===this.saveTimer){const r=this.resolveSavePromise;this.savePromiseTime=t,this.saveTimer=setTimeout((()=>{c.logger.log("Saving device tracking data",this.syncToken),this.savePromiseTime=null,this.saveTimer=null,this.savePromise=null,this.resolveSavePromise=null,this.cryptoStore.doTxn("readwrite",[h.IndexedDBCryptoStore.STORE_DEVICE_DATA],(e=>{this.cryptoStore.storeEndToEndDeviceData({devices:this.devices,crossSigningInfo:this.crossSigningInfo,trackingStatus:this.deviceTrackingStatus,syncToken:this.syncToken},e)})).then((()=>{this.dirty=!1,r(!0)}),(e=>{c.logger.error("Failed to save device tracking data",this.syncToken),c.logger.error(e)}))}),e)}return r}))}getSyncToken(){return this.syncToken}setSyncToken(e){this.syncToken=e}downloadKeys(e,t){const r=[],n=[];if(e.forEach((e=>{const i=this.deviceTrackingStatus[e];this.keyDownloadsInProgressByUser[e]?(c.logger.log(`downloadKeys: already have a download in progress for ${e}: awaiting its result`),n.push(this.keyDownloadsInProgressByUser[e])):(t||i!=g.UpToDate)&&r.push(e)})),0!=r.length){c.logger.log("downloadKeys: downloading for",r);const e=this.doKeyDownload(r);n.push(e)}return 0===n.length&&c.logger.log("downloadKeys: already have all necessary keys"),Promise.all(n).then((()=>this.getDevicesFromStore(e)))}getDevicesFromStore(e){const t={};return e.map((e=>{t[e]={};(this.getStoredDevicesForUser(e)||[]).map((function(r){t[e][r.deviceId]=r}))})),t}getKnownUserIds(){return Object.keys(this.devices)}getStoredDevicesForUser(e){const t=this.devices[e];if(!t)return null;const r=[];for(const e in t)t.hasOwnProperty(e)&&r.push(u.DeviceInfo.fromStorage(t[e],e));return r}getRawStoredDevicesForUser(e){return this.devices[e]}getStoredCrossSigningForUser(e){return this.crossSigningInfo[e]?l.CrossSigningInfo.fromStorage(this.crossSigningInfo[e],e):null}storeCrossSigningForUser(e,t){this.crossSigningInfo[e]=t,this.dirty=!0}getStoredDevice(e,t){const r=this.devices[e];if(r&&r[t])return u.DeviceInfo.fromStorage(r[t],t)}getUserByIdentityKey(e,t){return e!==d.OLM_ALGORITHM&&e!==d.MEGOLM_ALGORITHM?null:this.userByIdentityKey[t]}getDeviceByIdentityKey(e,t){const r=this.getUserByIdentityKey(e,t);if(!r)return null;const n=this.devices[r];if(!n)return null;for(const e in n){if(!n.hasOwnProperty(e))continue;const r=n[e];for(const n in r.keys){if(!r.keys.hasOwnProperty(n))continue;if(0!==n.indexOf("curve25519:"))continue;if(r.keys[n]==t)return u.DeviceInfo.fromStorage(r,e)}}return null}storeDevicesForUser(e,t){this.setRawStoredDevicesForUser(e,t),this.dirty=!0}startTrackingDeviceList(e){if("string"!=typeof e)throw new Error("userId must be a string; was "+e);this.deviceTrackingStatus[e]||(c.logger.log("Now tracking device list for "+e),this.deviceTrackingStatus[e]=g.PendingDownload,this.dirty=!0)}stopTrackingDeviceList(e){this.deviceTrackingStatus[e]&&(c.logger.log("No longer tracking device list for "+e),this.deviceTrackingStatus[e]=g.NotTracked,this.dirty=!0)}stopTrackingAllDeviceLists(){for(const e of Object.keys(this.deviceTrackingStatus))this.deviceTrackingStatus[e]=g.NotTracked;this.dirty=!0}invalidateUserDeviceList(e){this.deviceTrackingStatus[e]&&(c.logger.log("Marking device list outdated for",e),this.deviceTrackingStatus[e]=g.PendingDownload,this.dirty=!0)}refreshOutdatedDeviceLists(){this.saveIfDirty();const e=[];for(const t of Object.keys(this.deviceTrackingStatus)){this.deviceTrackingStatus[t]==g.PendingDownload&&e.push(t)}return this.doKeyDownload(e)}setRawStoredDevicesForUser(e,t){if(void 0!==this.devices[e])for(const[t,r]of Object.entries(this.devices[e])){const e=r.keys["curve25519:"+t];delete this.userByIdentityKey[e]}this.devices[e]=t;for(const[r,n]of Object.entries(t)){const t=n.keys["curve25519:"+r];this.userByIdentityKey[t]=e}}setRawStoredCrossSigningForUser(e,t){this.crossSigningInfo[e]=t}doKeyDownload(e){if(0===e.length)return Promise.resolve();const t=this.serialiser.updateDevicesForUsers(e,this.syncToken).then((()=>{r(!0)}),(t=>{throw c.logger.error("Error downloading keys for "+e+":",t),r(!1),t}));e.forEach((e=>{this.keyDownloadsInProgressByUser[e]=t;this.deviceTrackingStatus[e]==g.PendingDownload&&(this.deviceTrackingStatus[e]=g.DownloadInProgress)}));const r=r=>{this.emit("crypto.willUpdateDevices",e,!this.hasFetched),e.forEach((e=>{if(this.dirty=!0,this.keyDownloadsInProgressByUser[e]!==t)return void c.logger.log("Another update in the queue for",e,"- not marking up-to-date");delete this.keyDownloadsInProgressByUser[e];this.deviceTrackingStatus[e]==g.DownloadInProgress&&(r?(this.deviceTrackingStatus[e]=g.UpToDate,c.logger.log("Device list for",e,"now up to date")):this.deviceTrackingStatus[e]=g.PendingDownload)})),this.saveIfDirty(),this.emit("crypto.devicesUpdated",e,!this.hasFetched),this.hasFetched=!0};return t}}r.DeviceList=p;class v{constructor(e,t,r){this.baseApis=e,this.olmDevice=t,this.deviceList=r,this.downloadInProgress=!1,this.keyDownloadsQueuedByUser={},this.queuedQueryDeferred=null,this.syncToken=null}updateDevicesForUsers(e,t){return e.forEach((e=>{this.keyDownloadsQueuedByUser[e]=!0})),this.queuedQueryDeferred||(this.queuedQueryDeferred=f.defer()),this.syncToken=t,this.downloadInProgress?(c.logger.log("Queued key download for",e),this.queuedQueryDeferred.promise):this.doQueuedQueries()}doQueuedQueries(){if(this.downloadInProgress)throw new Error("DeviceListUpdateSerialiser.doQueuedQueries called with request active");const e=Object.keys(this.keyDownloadsQueuedByUser);this.keyDownloadsQueuedByUser={};const t=this.queuedQueryDeferred;this.queuedQueryDeferred=null,c.logger.log("Starting key download for",e),this.downloadInProgress=!0;const r={};this.syncToken&&(r.token=this.syncToken);const n=[];for(let t=0;t<e.length;t+=this.deviceList.keyDownloadChunkSize){const i=e.slice(t,t+this.deviceList.keyDownloadChunkSize);n.push((()=>this.baseApis.downloadKeysForUsers(i,r)))}return f.chunkPromises(n,3).then((t=>s(this,void 0,void 0,(function*(){const r=Object.assign({},...t.map((e=>e.device_keys||{}))),n=Object.assign({},...t.map((e=>e.master_keys||{}))),i=Object.assign({},...t.map((e=>e.self_signing_keys||{}))),o=Object.assign({},...t.map((e=>e.user_signing_keys||{})));for(const t of e){yield f.sleep(5);try{yield this.processQueryResponseForUser(t,r[t],{master:n[t],self_signing:i[t],user_signing:o[t]})}catch(e){c.logger.error(`Error processing keys for ${t}:`,e)}}})))).then((()=>{c.logger.log("Completed key download for "+e),this.downloadInProgress=!1,t.resolve(),this.queuedQueryDeferred&&this.doQueuedQueries()}),(r=>{c.logger.warn("Error downloading keys for "+e+":",r),this.downloadInProgress=!1,t.reject(r)})),t.promise}processQueryResponseForUser(e,t,r){return s(this,void 0,void 0,(function*(){c.logger.log("got device keys for "+e+":",t),c.logger.log("got cross-signing keys for "+e+":",r);{const r={},n=this.deviceList.getRawStoredDevicesForUser(e);n&&Object.keys(n).forEach((e=>{const t=u.DeviceInfo.fromStorage(n[e],e);r[e]=t})),yield function(e,t,r,n,i,o){return s(this,void 0,void 0,(function*(){let s=!1;for(const e in r)if(r.hasOwnProperty(e)&&!(e in n)){if(t===i&&e===o){c.logger.warn(`Local device ${e} missing from sync, skipping removal`);continue}c.logger.log("Device "+t+":"+e+" has been removed"),delete r[e],s=!0}for(const i in n){if(!n.hasOwnProperty(i))continue;const o=n[i];o.user_id===t?o.device_id===i?(yield y(e,r,o))&&(s=!0):c.logger.warn("Mismatched device_id "+o.device_id+" in keys from "+t+":"+i):c.logger.warn("Mismatched user_id "+o.user_id+" in keys from "+t+":"+i)}return s}))}(this.olmDevice,e,r,t||{},this.baseApis.getUserId(),this.baseApis.deviceId);const i={};Object.keys(r).forEach((e=>{i[e]=r[e].toStorage()})),this.deviceList.setRawStoredDevicesForUser(e,i)}if(r&&(r.master||r.self_signing||r.user_signing)){const t=this.deviceList.getStoredCrossSigningForUser(e)||new l.CrossSigningInfo(e);t.setKeys(r),this.deviceList.setRawStoredCrossSigningForUser(e,t.toStorage()),this.deviceList.emit("userCrossSigningUpdated",e)}}))}}function y(e,t,r){return s(this,void 0,void 0,(function*(){if(!r.keys)return!1;const n=r.device_id,i=r.user_id,o="ed25519:"+n,s=r.keys[o];if(!s)return c.logger.warn("Device "+i+":"+n+" has no ed25519 key"),!1;const a=r.unsigned||{},l=r.signatures||{};try{yield d.verifySignature(e,r,i,n,s)}catch(e){return c.logger.warn("Unable to verify signature on device "+i+":"+n+":"+e),!1}let h;if(n in t){if(h=t[n],h.getFingerprint()!=s)return c.logger.warn("Ed25519 key for device "+i+":"+n+" has changed"),!1}else t[n]=h=new u.DeviceInfo(n);return h.keys=r.keys||{},h.algorithms=r.algorithms||[],h.unsigned=a,h.signatures=l,!0}))}},{"../logger":106,"../utils":137,"./CrossSigning":67,"./deviceinfo":82,"./olmlib":85,"./store/indexeddb-crypto-store":88,events:36}],69:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.EncryptionSetupOperation=r.EncryptionSetupBuilder=void 0;const i=e("../logger"),o=e("../models/event"),s=e("events"),a=e("./CrossSigning"),c=e("./store/indexeddb-crypto-store"),u=e("../http-api");r.EncryptionSetupBuilder=class{constructor(e,t){this.crossSigningKeys=null,this.keySignatures=null,this.keyBackupInfo=null,this.accountDataClientAdapter=new d(e),this.crossSigningCallbacks=new h,this.ssssCryptoCallbacks=new f(t)}addCrossSigningKeys(e,t){this.crossSigningKeys={authUpload:e,keys:t}}addSessionBackup(e){this.keyBackupInfo=e}addSessionBackupPrivateKeyToCache(e){this.sessionBackupPrivateKey=e}addKeySignature(e,t,r){this.keySignatures||(this.keySignatures={});const n=this.keySignatures[e]||{};this.keySignatures[e]=n,n[t]=r}setAccountData(e,t){return this.accountDataClientAdapter.setAccountData(e,t)}buildOperation(){const e=this.accountDataClientAdapter.values;return new l(e,this.crossSigningKeys,this.keyBackupInfo,this.keySignatures)}persist(e){return n(this,void 0,void 0,(function*(){if(this.crossSigningKeys){const t=a.createCryptoStoreCacheCallbacks(e.cryptoStore,e.olmDevice);for(const e of["master","self_signing","user_signing"]){i.logger.log(`Cache ${e} cross-signing private key locally`);const r=this.crossSigningCallbacks.privateKeys.get(e);yield t.storeCrossSigningKeyCache(e,r)}yield e.cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(t=>{e.cryptoStore.storeCrossSigningKeys(t,this.crossSigningKeys.keys)}))}this.sessionBackupPrivateKey&&(yield e.storeSessionBackupPrivateKey(this.sessionBackupPrivateKey))}))}};class l{constructor(e,t,r,n){this.accountData=e,this.crossSigningKeys=t,this.keyBackupInfo=r,this.keySignatures=n}apply(e){return n(this,void 0,void 0,(function*(){const t=e.baseApis;if(this.crossSigningKeys){const r={};for(const[e,t]of Object.entries(this.crossSigningKeys.keys))r[e+"_key"]=t;yield this.crossSigningKeys.authUpload((e=>t.uploadDeviceSigningKeys(e,r))),e.crossSigningInfo.setKeys(this.crossSigningKeys.keys)}if(this.accountData)for(const[e,r]of this.accountData)yield t.setAccountData(e,r);this.keySignatures&&(yield t.uploadKeySignatures(this.keySignatures)),this.keyBackupInfo&&(this.keyBackupInfo.version?yield t.http.authedRequest(void 0,"PUT","/room_keys/version/"+this.keyBackupInfo.version,void 0,{algorithm:this.keyBackupInfo.algorithm,auth_data:this.keyBackupInfo.auth_data},{prefix:u.PREFIX_UNSTABLE}):yield t.http.authedRequest(void 0,"POST","/room_keys/version",void 0,this.keyBackupInfo,{prefix:u.PREFIX_UNSTABLE}))}))}}r.EncryptionSetupOperation=l;class d extends s.EventEmitter{constructor(e){super(),this.existingValues=e,this.values=new Map}getAccountDataFromServer(e){return Promise.resolve(this.getAccountData(e))}getAccountData(e){const t=this.values.get(e);if(t)return t;const r=this.existingValues[e];return r?r.getContent():null}setAccountData(e,t){const r=this.values.get(e);return this.values.set(e,t),Promise.resolve().then((()=>{const n=new o.MatrixEvent({type:e,content:t});this.emit("accountData",n,r)}))}}class h{constructor(){this.privateKeys=new Map}getCrossSigningKeyCache(e,t){return this.getCrossSigningKey(e,t)}storeCrossSigningKeyCache(e,t){return this.privateKeys.set(e,t),Promise.resolve()}getCrossSigningKey(e,t){return Promise.resolve(this.privateKeys.get(e))}saveCrossSigningKeys(e){for(const[t,r]of Object.entries(e))this.privateKeys.set(t,r)}}class f{constructor(e){this.delegateCryptoCallbacks=e,this.privateKeys=new Map}getSecretStorageKey({keys:e},t){return n(this,void 0,void 0,(function*(){for(const t of Object.keys(e)){const e=this.privateKeys.get(t);if(e)return[t,e]}if(this.delegateCryptoCallbacks){const r=yield this.delegateCryptoCallbacks.getSecretStorageKey({keys:e},t);if(r){const[e,t]=r;this.privateKeys.set(e,t)}return r}}))}addPrivateKey(e,t,r){var n,i;this.privateKeys.set(e,r),null===(i=null===(n=this.delegateCryptoCallbacks)||void 0===n?void 0:n.cacheSecretStorageKey)||void 0===i||i.call(n,e,t,r)}}},{"../http-api":103,"../logger":106,"../models/event":113,"./CrossSigning":67,"./store/indexeddb-crypto-store":88,events:36}],70:[function(e,t,r){(function(t){(function(){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.OlmDevice=f,r.WITHHELD_MESSAGES=void 0;var o=i(e("@babel/runtime/regenerator")),s=i(e("@babel/runtime/helpers/asyncToGenerator")),a=e("../logger"),c=e("./store/indexeddb-crypto-store"),u=n(e("./algorithms"));function l(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){throw e})),f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){a=!0,o=e})),f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function h(e){if(void 0===e)throw new Error("payloadString undefined");if(e.length>49152){var t=new Error("Message too long ("+e.length+" bytes). The maximum for an encrypted message is 49152 bytes.");throw t.data={errcode:"M_TOO_LARGE",error:"Payload too large for encrypted message"},t}}function f(e){this._cryptoStore=e,this._pickleKey="DEFAULT_KEY",this.deviceCurve25519Key=null,this.deviceEd25519Key=null,this._maxOneTimeKeys=null,this._outboundGroupSessionStore={},this._inboundGroupSessionMessageIndexes={},this._sessionsInProgress={},this._olmPrekeyPromise=Promise.resolve()}function g(e,t,r,n){return p.apply(this,arguments)}function p(){return(p=(0,s.default)(o.default.mark((function e(t,r,n,i){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,r.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT,c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){r.storeAccount(e,t.pickledAccount),t.sessions.forEach((function(t){var n=t.deviceKey,i=t.sessionId,o={session:t.session,lastReceivedMessageTs:t.lastReceivedMessageTs};r.storeEndToEndSession(n,i,o,e)}))}));case 2:i.unpickle(n,t.pickledAccount);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function v(e,t,r){return y.apply(this,arguments)}function y(){return(y=(0,s.default)(o.default.mark((function e(t,r,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(e){t.getAccount(e,(function(i){null!==i?n.unpickle(r,i):(n.create(),i=n.pickle(r),t.storeAccount(e,i))}))}));case 2:case"end":return e.stop()}}),e)})))).apply(this,arguments)}f.prototype.init=(0,s.default)(o.default.mark((function e(){var r,n,i,s,c,u=arguments;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=u.length>0&&void 0!==u[0]?u[0]:{},i=new t.Olm.Account,s=r.pickleKey,c=r.fromExportedDevice,e.prev=3,!c){e.next=11;break}return s&&a.logger.warn("ignoring opts.pickleKey because opts.fromExportedDevice is present."),this._pickleKey=c.pickleKey,e.next=9,g(c,this._cryptoStore,this._pickleKey,i);case 9:e.next=14;break;case 11:return s&&(this._pickleKey=s),e.next=14,v(this._cryptoStore,this._pickleKey,i);case 14:n=JSON.parse(i.identity_keys()),this._maxOneTimeKeys=i.max_number_of_one_time_keys();case 16:return e.prev=16,i.free(),e.finish(16);case 19:this.deviceCurve25519Key=n.curve25519,this.deviceEd25519Key=n.ed25519;case 21:case"end":return e.stop()}}),e,this,[[3,,16,19]])}))),f.getOlmVersion=function(){return t.Olm.get_library_version()},f.prototype._getAccount=function(e,r){var n=this;this._cryptoStore.getAccount(e,(function(e){var i=new t.Olm.Account;try{i.unpickle(n._pickleKey,e),r(i)}finally{i.free()}}))},f.prototype._storeAccount=function(e,t){this._cryptoStore.storeAccount(e,t.pickle(this._pickleKey))},f.prototype.export=(0,s.default)(o.default.mark((function e(){var t,r=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t={pickleKey:this._pickleKey},e.next=3,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_ACCOUNT,c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){r._cryptoStore.getAccount(e,(function(e){t.pickledAccount=e})),t.sessions=[],r._cryptoStore.getAllEndToEndSessions(e,(function(e){t.sessions.push(e)}))}));case 3:return e.abrupt("return",t);case 4:case"end":return e.stop()}}),e,this)}))),f.prototype._getSession=function(e,t,r,n){var i=this;this._cryptoStore.getEndToEndSession(e,t,r,(function(e){i._unpickleSession(e,n)}))},f.prototype._unpickleSession=function(e,r){var n=new t.Olm.Session;try{n.unpickle(this._pickleKey,e.session),r(Object.assign({},e,{session:n}))}finally{n.free()}},f.prototype._saveSession=function(e,t,r){var n=t.session.session_id(),i=Object.assign(t,{session:t.session.pickle(this._pickleKey)});this._cryptoStore.storeEndToEndSession(e,n,i,r)},f.prototype._getUtility=function(e){var r=new t.Olm.Utility;try{return e(r)}finally{r.free()}},f.prototype.sign=function(){var e=(0,s.default)(o.default.mark((function e(t){var r,n=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(e){n._getAccount(e,(function(e){r=e.sign(t)}))}));case 2:return e.abrupt("return",r);case 3:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),f.prototype.getOneTimeKeys=(0,s.default)(o.default.mark((function e(){var t,r=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(e){r._getAccount(e,(function(e){t=JSON.parse(e.one_time_keys())}))}));case 2:return e.abrupt("return",t);case 3:case"end":return e.stop()}}),e,this)}))),f.prototype.maxNumberOfOneTimeKeys=function(){return this._maxOneTimeKeys},f.prototype.markKeysAsPublished=(0,s.default)(o.default.mark((function e(){var t=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(e){t._getAccount(e,(function(r){r.mark_keys_as_published(),t._storeAccount(e,r)}))}));case 2:case"end":return e.stop()}}),e,this)}))),f.prototype.generateOneTimeKeys=function(e){var t=this;return this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(r){t._getAccount(r,(function(n){n.generate_one_time_keys(e),t._storeAccount(r,n)}))}))},f.prototype.generateFallbackKey=(0,s.default)(o.default.mark((function e(){var t=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(e){t._getAccount(e,(function(r){r.generate_fallback_key(),t._storeAccount(e,r)}))}));case 2:case"end":return e.stop()}}),e,this)}))),f.prototype.getFallbackKey=(0,s.default)(o.default.mark((function e(){var t,r=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_ACCOUNT],(function(e){r._getAccount(e,(function(e){t=JSON.parse(e.fallback_key())}))}));case 2:return e.abrupt("return",t);case 3:case"end":return e.stop()}}),e,this)}))),f.prototype.createOutboundSession=function(){var e=(0,s.default)(o.default.mark((function e(r,n){var i,s=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT,c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){s._getAccount(e,(function(o){var a=new t.Olm.Session;try{a.create_outbound(o,r,n),i=a.session_id(),s._storeAccount(e,o);var c={session:a,lastReceivedMessageTs:Date.now()};s._saveSession(r,c,e)}finally{a.free()}}))}),a.logger.withPrefix("[createOutboundSession]"));case 2:return e.abrupt("return",i);case 3:case"end":return e.stop()}}),e,this)})));return function(t,r){return e.apply(this,arguments)}}(),f.prototype.createInboundSession=function(){var e=(0,s.default)(o.default.mark((function e(r,n,i){var s,u=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0===n){e.next=2;break}throw new Error("Need messageType == 0 to create inbound session");case 2:return e.next=4,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_ACCOUNT,c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){u._getAccount(e,(function(o){var a=new t.Olm.Session;try{a.create_inbound_from(o,r,i),o.remove_one_time_keys(a),u._storeAccount(e,o);var c=a.decrypt(n,i),l={session:a,lastReceivedMessageTs:Date.now()};u._saveSession(r,l,e),s={payload:c,session_id:a.session_id()}}finally{a.free()}}))}),a.logger.withPrefix("[createInboundSession]"));case 4:return e.abrupt("return",s);case 5:case"end":return e.stop()}}),e,this)})));return function(t,r,n){return e.apply(this,arguments)}}(),f.prototype.getSessionIdsForDevice=function(){var e=(0,s.default)(o.default.mark((function e(t){var r,n,i=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=a.logger.withPrefix("[getSessionIdsForDevice]"),!this._sessionsInProgress[t]){e.next=10;break}return r.debug("Waiting for Olm session for ".concat(t," to be created")),e.prev=3,e.next=6,this._sessionsInProgress[t];case 6:e.next=10;break;case 8:e.prev=8,e.t0=e.catch(3);case 10:return e.next=12,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){i._cryptoStore.getEndToEndSessions(t,e,(function(e){n=Object.keys(e)}))}),r);case 12:return e.abrupt("return",n);case 13:case"end":return e.stop()}}),e,this,[[3,8]])})));return function(t){return e.apply(this,arguments)}}(),f.prototype.getSessionIdForDevice=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n){var i,s,a,c,u,l,d;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getSessionInfoForDevice(t,r,n);case 2:if(0!==(i=e.sent).length){e.next=5;break}return e.abrupt("return",null);case 5:for(s=0,a=1;a<i.length;a++)c=i[a],u=void 0===c.lastReceivedMessageTs?0:c.lastReceivedMessageTs,l=i[s],d=void 0===l.lastReceivedMessageTs?0:l.lastReceivedMessageTs,(u>d||u===d&&c.sessionId<l.sessionId)&&(s=a);return e.abrupt("return",i[s].sessionId);case 8:case"end":return e.stop()}}),e,this)})));return function(t,r,n){return e.apply(this,arguments)}}(),f.prototype.getSessionInfoForDevice=function(){var e=(0,s.default)(o.default.mark((function e(t,r){var n,i,s=this,u=arguments;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=(n=u.length>2&&void 0!==u[2]?u[2]:a.logger).withPrefix("[getSessionInfoForDevice]"),!this._sessionsInProgress[t]||r){e.next=11;break}return n.debug("Waiting for Olm session for ".concat(t," to be created")),e.prev=4,e.next=7,this._sessionsInProgress[t];case 7:e.next=11;break;case 9:e.prev=9,e.t0=e.catch(4);case 11:return i=[],e.next=14,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){s._cryptoStore.getEndToEndSessions(t,e,(function(e){var t,r=l(Object.keys(e).sort());try{var n=function(){var r=t.value;s._unpickleSession(e[r],(function(e){i.push({lastReceivedMessageTs:e.lastReceivedMessageTs,hasReceivedMessage:e.session.has_received_message(),sessionId:r})}))};for(r.s();!(t=r.n()).done;)n()}catch(e){r.e(e)}finally{r.f()}}))}),n);case 14:return e.abrupt("return",i);case 15:case"end":return e.stop()}}),e,this,[[4,9]])})));return function(t,r){return e.apply(this,arguments)}}(),f.prototype.encryptMessage=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n){var i,s=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return h(n),e.next=3,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){s._getSession(t,r,e,(function(o){var c=o.session.describe();a.logger.log("encryptMessage: Olm Session ID "+r+" to "+t+": "+c),i=o.session.encrypt(n),s._saveSession(t,o,e)}))}),a.logger.withPrefix("[encryptMessage]"));case 3:return e.abrupt("return",i);case 4:case"end":return e.stop()}}),e,this)})));return function(t,r,n){return e.apply(this,arguments)}}(),f.prototype.decryptMessage=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n,i){var s,u=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){u._getSession(t,r,e,(function(o){var c=o.session.describe();a.logger.log("decryptMessage: Olm Session ID "+r+" from "+t+": "+c),s=o.session.decrypt(n,i),o.lastReceivedMessageTs=Date.now(),u._saveSession(t,o,e)}))}),a.logger.withPrefix("[decryptMessage]"));case 2:return e.abrupt("return",s);case 3:case"end":return e.stop()}}),e,this)})));return function(t,r,n,i){return e.apply(this,arguments)}}(),f.prototype.matchesSession=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n,i){var s,u=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0===n){e.next=2;break}return e.abrupt("return",!1);case 2:return e.next=4,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_SESSIONS],(function(e){u._getSession(t,r,e,(function(e){s=e.session.matches_inbound(i)}))}),a.logger.withPrefix("[matchesSession]"));case 4:return e.abrupt("return",s);case 5:case"end":return e.stop()}}),e,this)})));return function(t,r,n,i){return e.apply(this,arguments)}}(),f.prototype.recordSessionProblem=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.storeEndToEndSessionProblem(t,r,n);case 2:case"end":return e.stop()}}),e,this)})));return function(t,r,n){return e.apply(this,arguments)}}(),f.prototype.sessionMayHaveProblems=function(){var e=(0,s.default)(o.default.mark((function e(t,r){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.getEndToEndSessionProblem(t,r);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})));return function(t,r){return e.apply(this,arguments)}}(),f.prototype.filterOutNotifiedErrorDevices=function(){var e=(0,s.default)(o.default.mark((function e(t){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.filterOutNotifiedErrorDevices(t);case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),f.prototype._saveOutboundGroupSession=function(e){var t=e.pickle(this._pickleKey);this._outboundGroupSessionStore[e.session_id()]=t},f.prototype._getOutboundGroupSession=function(e,r){var n=this._outboundGroupSessionStore[e];if(void 0===n)throw new Error("Unknown outbound group session "+e);var i=new t.Olm.OutboundGroupSession;try{return i.unpickle(this._pickleKey,n),r(i)}finally{i.free()}},f.prototype.createOutboundGroupSession=function(){var e=new t.Olm.OutboundGroupSession;try{return e.create(),this._saveOutboundGroupSession(e),e.session_id()}finally{e.free()}},f.prototype.encryptGroupMessage=function(e,t){var r=this;return a.logger.log("encrypting msg with megolm session ".concat(e)),h(t),this._getOutboundGroupSession(e,(function(e){var n=e.encrypt(t);return r._saveOutboundGroupSession(e),n}))},f.prototype.getOutboundGroupSessionKey=function(e){return this._getOutboundGroupSession(e,(function(e){return{chain_index:e.message_index(),key:e.session_key()}}))},f.prototype._unpickleInboundGroupSession=function(e,r){var n=new t.Olm.InboundGroupSession;try{return n.unpickle(this._pickleKey,e.session),r(n)}finally{n.free()}},f.prototype._getInboundGroupSession=function(e,t,r,n,i){var o=this;this._cryptoStore.getEndToEndInboundGroupSession(t,r,n,(function(t,r){if(null!==t){if(null!==e&&e!==t.room_id)throw new Error("Mismatched room_id for inbound group session (expected "+t.room_id+", was "+e+")");o._unpickleInboundGroupSession(t,(function(e){i(e,t,r)}))}else i(null,null,r)}))},f.prototype.addInboundGroupSession=function(){var e=(0,s.default)(o.default.mark((function e(r,n,i,s,u,l,d){var h,f=this,g=arguments;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return h=g.length>7&&void 0!==g[7]?g[7]:{},e.next=3,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS,c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS_WITHHELD,c.IndexedDBCryptoStore.STORE_SHARED_HISTORY_INBOUND_GROUP_SESSIONS],(function(e){f._getInboundGroupSession(r,n,s,e,(function(o,c){var g=new t.Olm.InboundGroupSession;try{if(d?g.import_session(u):g.create(u),s!=g.session_id())throw new Error("Mismatched group session ID from senderKey: "+n);if(o&&(a.logger.log("Update for megolm session "+n+"/"+s),o.first_known_index()<=g.first_known_index()&&(o.first_known_index()!=g.first_known_index()||h.untrusted||!c.untrusted)))return void a.logger.log("Keeping existing megolm session ".concat(s));a.logger.info("Storing megolm session "+n+"/"+s+" with first index "+g.first_known_index());var p=Object.assign({},h,{room_id:r,session:g.pickle(f._pickleKey),keysClaimed:l,forwardingCurve25519KeyChain:i});f._cryptoStore.storeEndToEndInboundGroupSession(n,s,p,e),!o&&h.sharedHistory&&f._cryptoStore.addSharedHistoryInboundGroupSession(r,n,s,e)}finally{g.free()}}))}),a.logger.withPrefix("[addInboundGroupSession]"));case 3:case"end":return e.stop()}}),e,this)})));return function(t,r,n,i,o,s,a){return e.apply(this,arguments)}}(),f.prototype.addInboundGroupSessionWithheld=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n,i,s){var a=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS_WITHHELD],(function(e){a._cryptoStore.storeEndToEndInboundGroupSessionWithheld(r,n,{room_id:t,code:i,reason:s},e)}));case 2:case"end":return e.stop()}}),e,this)})));return function(t,r,n,i,o){return e.apply(this,arguments)}}();var m={"m.unverified":"The sender has disabled encrypting to unverified devices.","m.blacklisted":"The sender has blocked you.","m.unauthorised":"You are not authorised to read the message.","m.no_olm":"Unable to establish a secure channel."};function b(e){return e.code&&e.code in m?m[e.code]:e.reason?e.reason:"decryption key withheld"}r.WITHHELD_MESSAGES=m,f.prototype.decryptGroupMessage=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n,i,s,l){var d,h,f=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readwrite",[c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS,c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS_WITHHELD],(function(e){f._getInboundGroupSession(t,r,n,e,(function(t,o,a){if(null===t)return a&&(h=new u.DecryptionError("MEGOLM_UNKNOWN_INBOUND_SESSION_ID",b(a),{session:r+"|"+n})),void(d=null);var c;try{c=t.decrypt(i)}catch(e){return void(h=e&&"OLM.UNKNOWN_MESSAGE_INDEX"===e.message&&a?new u.DecryptionError("MEGOLM_UNKNOWN_INBOUND_SESSION_ID",b(a),{session:r+"|"+n}):e)}var g=c.plaintext;if(void 0===g)g=c;else{var p=r+"|"+n+"|"+c.message_index;if(p in f._inboundGroupSessionMessageIndexes){var v=f._inboundGroupSessionMessageIndexes[p];if(v.id!==s||v.timestamp!==l)return void(h=new Error("Duplicate message index, possible replay attack: "+p))}f._inboundGroupSessionMessageIndexes[p]={id:s,timestamp:l}}o.session=t.pickle(f._pickleKey),f._cryptoStore.storeEndToEndInboundGroupSession(r,n,o,e),d={result:g,keysClaimed:o.keysClaimed||{},senderKey:r,forwardingCurve25519KeyChain:o.forwardingCurve25519KeyChain||[],untrusted:o.untrusted}}))}),a.logger.withPrefix("[decryptGroupMessage]"));case 2:if(!h){e.next=4;break}throw h;case 4:return e.abrupt("return",d);case 5:case"end":return e.stop()}}),e,this)})));return function(t,r,n,i,o,s){return e.apply(this,arguments)}}(),f.prototype.hasInboundSessionKeys=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n){var i,s=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS,c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS_WITHHELD],(function(e){s._cryptoStore.getEndToEndInboundGroupSession(r,n,e,(function(e){null!==e?t!==e.room_id?(a.logger.warn("requested keys for inbound group session ".concat(r,"|")+"".concat(n,", with incorrect room_id ")+"(expected ".concat(e.room_id,", ")+"was ".concat(t,")")),i=!1):i=!0:i=!1}))}),a.logger.withPrefix("[hasInboundSessionKeys]"));case 2:return e.abrupt("return",i);case 3:case"end":return e.stop()}}),e,this)})));return function(t,r,n){return e.apply(this,arguments)}}(),f.prototype.getInboundGroupSessionKey=function(){var e=(0,s.default)(o.default.mark((function e(t,r,n,i){var s,u=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS,c.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS_WITHHELD],(function(e){u._getInboundGroupSession(t,r,n,e,(function(e,t){if(null!==e){void 0===i&&(i=e.first_known_index());var r=e.export_session(i),n=(t.keysClaimed||{}).ed25519||null;s={chain_index:i,key:r,forwarding_curve25519_key_chain:t.forwardingCurve25519KeyChain||[],sender_claimed_ed25519_key:n,shared_history:t.sharedHistory||!1}}else s=null}))}),a.logger.withPrefix("[getInboundGroupSessionKey]"));case 2:return e.abrupt("return",s);case 3:case"end":return e.stop()}}),e,this)})));return function(t,r,n,i){return e.apply(this,arguments)}}(),f.prototype.exportInboundGroupSession=function(e,t,r){return this._unpickleInboundGroupSession(r,(function(n){var i=n.first_known_index();return{sender_key:e,sender_claimed_keys:r.keysClaimed,room_id:r.room_id,session_id:t,session_key:n.export_session(i),forwarding_curve25519_key_chain:n.forwardingCurve25519KeyChain||[],first_known_index:n.first_known_index(),"org.matrix.msc3061.shared_history":r.sharedHistory||!1}}))},f.prototype.getSharedHistoryInboundGroupSessions=function(){var e=(0,s.default)(o.default.mark((function e(t){var r,n=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._cryptoStore.doTxn("readonly",[c.IndexedDBCryptoStore.STORE_SHARED_HISTORY_INBOUND_GROUP_SESSIONS],(function(e){r=n._cryptoStore.getSharedHistoryInboundGroupSessions(t,e)}),a.logger.withPrefix("[getSharedHistoryInboundGroupSessionsForRoom]"));case 2:return e.abrupt("return",r);case 3:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),f.prototype.verifySignature=function(e,t,r){this._getUtility((function(n){n.ed25519_verify(e,t,r)}))}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../logger":106,"./algorithms":76,"./store/indexeddb-crypto-store":88,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"@babel/runtime/regenerator":27}],71:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.OutgoingRoomKeyRequestManager=r.RoomKeyRequestState=void 0;const i=e("../logger"),o=e("../@types/event");var s;!function(e){e[e.Unsent=0]="Unsent",e[e.Sent=1]="Sent",e[e.CancellationPending=2]="CancellationPending",e[e.CancellationPendingAndWillResend=3]="CancellationPendingAndWillResend"}(s=r.RoomKeyRequestState||(r.RoomKeyRequestState={}));function a(e){return e.room_id+" / "+e.session_id}function c(e){return"["+e.map((e=>`${e.userId}:${e.deviceId}`)).join(",")+"]"}r.OutgoingRoomKeyRequestManager=class{constructor(e,t,r){this.baseApis=e,this.deviceId=t,this.cryptoStore=r,this.sendOutgoingRoomKeyRequestsTimer=null,this.sendOutgoingRoomKeyRequestsRunning=!1,this.clientRunning=!1}start(){this.clientRunning=!0}stop(){i.logger.log("stopping OutgoingRoomKeyRequestManager"),this.clientRunning=!1}sendQueuedRequests(){this.startTimer()}queueRoomKeyRequest(e,t,r=!1){return n(this,void 0,void 0,(function*(){const n=yield this.cryptoStore.getOutgoingRoomKeyRequest(e);if(n)switch(n.state){case s.CancellationPendingAndWillResend:case s.Unsent:return;case s.CancellationPending:{const e=r?s.CancellationPendingAndWillResend:s.Sent;yield this.cryptoStore.updateOutgoingRoomKeyRequest(n.requestId,s.CancellationPending,{state:e,cancellationTxnId:this.baseApis.makeTxnId()});break}case s.Sent:if(r){const o=s.CancellationPendingAndWillResend,a=yield this.cryptoStore.updateOutgoingRoomKeyRequest(n.requestId,s.Sent,{state:o,cancellationTxnId:this.baseApis.makeTxnId(),requestTxnId:this.baseApis.makeTxnId()});if(!a)return yield this.queueRoomKeyRequest(e,t,r);try{yield this.sendOutgoingRoomKeyRequestCancellation(a,!0)}catch(e){i.logger.error("Error sending room key request cancellation; will retry later.",e)}}break;default:throw new Error("unhandled state: "+n.state)}else yield this.cryptoStore.getOrAddOutgoingRoomKeyRequest({requestBody:e,recipients:t,requestId:this.baseApis.makeTxnId(),state:s.Unsent})}))}cancelRoomKeyRequest(e){return this.cryptoStore.getOutgoingRoomKeyRequest(e).then((t=>{if(t)switch(t.state){case s.CancellationPending:case s.CancellationPendingAndWillResend:return;case s.Unsent:return i.logger.log("deleting unnecessary room key request for "+a(e)),this.cryptoStore.deleteOutgoingRoomKeyRequest(t.requestId,s.Unsent);case s.Sent:return this.cryptoStore.updateOutgoingRoomKeyRequest(t.requestId,s.Sent,{state:s.CancellationPending,cancellationTxnId:this.baseApis.makeTxnId()}).then((t=>{t?this.sendOutgoingRoomKeyRequestCancellation(t).catch((e=>{i.logger.error("Error sending room key request cancellation; will retry later.",e),this.startTimer()})):i.logger.log("Tried to cancel room key request for "+a(e)+" but it was already cancelled in another tab")}));default:throw new Error("unhandled state: "+t.state)}}))}getOutgoingSentRoomKeyRequest(e,t){return this.cryptoStore.getOutgoingRoomKeyRequestsByTarget(e,t,[s.Sent])}cancelAndResendAllOutgoingRequests(){return n(this,void 0,void 0,(function*(){const e=yield this.cryptoStore.getAllOutgoingRoomKeyRequestsByState(s.Sent);return Promise.all(e.map((({requestBody:e,recipients:t})=>this.queueRoomKeyRequest(e,t,!0))))}))}startTimer(){if(this.sendOutgoingRoomKeyRequestsTimer)return;this.sendOutgoingRoomKeyRequestsTimer=t.setTimeout((()=>{if(this.sendOutgoingRoomKeyRequestsRunning)throw new Error("RoomKeyRequestSend already in progress!");this.sendOutgoingRoomKeyRequestsRunning=!0,this.sendOutgoingRoomKeyRequests().finally((()=>{this.sendOutgoingRoomKeyRequestsRunning=!1})).catch((e=>{i.logger.warn(`error in OutgoingRoomKeyRequestManager: ${e}`)}))}),500)}sendOutgoingRoomKeyRequests(){return this.clientRunning?this.cryptoStore.getOutgoingRoomKeyRequestByState([s.CancellationPending,s.CancellationPendingAndWillResend,s.Unsent]).then((e=>{if(!e)return void(this.sendOutgoingRoomKeyRequestsTimer=null);let t;switch(e.state){case s.Unsent:t=this.sendOutgoingRoomKeyRequest(e);break;case s.CancellationPending:t=this.sendOutgoingRoomKeyRequestCancellation(e);break;case s.CancellationPendingAndWillResend:t=this.sendOutgoingRoomKeyRequestCancellation(e,!0)}return t.then((()=>this.sendOutgoingRoomKeyRequests())).catch((e=>{i.logger.error("Error sending room key request; will retry later.",e),this.sendOutgoingRoomKeyRequestsTimer=null}))})):(this.sendOutgoingRoomKeyRequestsTimer=null,Promise.resolve())}sendOutgoingRoomKeyRequest(e){i.logger.log(`Requesting keys for ${a(e.requestBody)} from ${c(e.recipients)}(id ${e.requestId})`);const t={action:"request",requesting_device_id:this.deviceId,request_id:e.requestId,body:e.requestBody};return this.sendMessageToDevices(t,e.recipients,e.requestTxnId||e.requestId).then((()=>this.cryptoStore.updateOutgoingRoomKeyRequest(e.requestId,s.Unsent,{state:s.Sent})))}sendOutgoingRoomKeyRequestCancellation(e,t=!1){i.logger.log(`Sending cancellation for key request for ${a(e.requestBody)} to ${c(e.recipients)} (cancellation id ${e.cancellationTxnId})`);const r={action:"request_cancellation",requesting_device_id:this.deviceId,request_id:e.requestId};return this.sendMessageToDevices(r,e.recipients,e.cancellationTxnId).then((()=>t?this.cryptoStore.updateOutgoingRoomKeyRequest(e.requestId,s.CancellationPendingAndWillResend,{state:s.Unsent}):this.cryptoStore.deleteOutgoingRoomKeyRequest(e.requestId,s.CancellationPending)))}sendMessageToDevices(e,t,r){const n={};for(const r of t)n[r.userId]||(n[r.userId]={}),n[r.userId][r.deviceId]=e;return this.baseApis.sendToDevice(o.EventType.RoomKeyRequest,n,r)}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../@types/event":58,"../logger":106}],72:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.RoomList=void 0;const i=e("./store/indexeddb-crypto-store");r.RoomList=class{constructor(e){this.cryptoStore=e,this.roomEncryption={}}init(){return n(this,void 0,void 0,(function*(){yield this.cryptoStore.doTxn("readwrite",[i.IndexedDBCryptoStore.STORE_ROOMS],(e=>{this.cryptoStore.getEndToEndRooms(e,(e=>{this.roomEncryption=e}))}))}))}getRoomEncryption(e){return this.roomEncryption[e]||null}isRoomEncrypted(e){return Boolean(this.getRoomEncryption(e))}setRoomEncryption(e,t){return n(this,void 0,void 0,(function*(){this.roomEncryption[e]=t,yield this.cryptoStore.doTxn("readwrite",[i.IndexedDBCryptoStore.STORE_ROOMS],(r=>{this.cryptoStore.storeEndToEndRoom(e,t,r)}))}))}}},{"./store/indexeddb-crypto-store":88}],73:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.SecretStorage=r.SECRET_STORAGE_ALGORITHM_V1_AES=void 0;const a=e("../logger"),c=o(e("./olmlib")),u=e("../randomstring"),l=e("./aes"),d=e("./olmlib");r.SECRET_STORAGE_ALGORITHM_V1_AES="m.secret_storage.v1.aes-hmac-sha2";r.SecretStorage=class{constructor(e,t,r){this.accountDataAdapter=e,this.cryptoCallbacks=t,this.baseApis=r,this.requests=new Map}getDefaultKeyId(){return s(this,void 0,void 0,(function*(){const e=yield this.accountDataAdapter.getAccountDataFromServer("m.secret_storage.default_key");return e?e.key:null}))}setDefaultKeyId(e){return new Promise(((t,r)=>{const n=r=>{"m.secret_storage.default_key"===r.getType()&&r.getContent().key===e&&(this.accountDataAdapter.removeListener("accountData",n),t())};this.accountDataAdapter.on("accountData",n),this.accountDataAdapter.setAccountData("m.secret_storage.default_key",{key:e}).catch((e=>{this.accountDataAdapter.removeListener("accountData",n),r(e)}))}))}addKey(e,t,n){return s(this,void 0,void 0,(function*(){const i={algorithm:e};if(t||(t={}),t.name&&(i.name=t.name),e!==r.SECRET_STORAGE_ALGORITHM_V1_AES)throw new Error(`Unknown key algorithm ${e}`);if(t.passphrase&&(i.passphrase=t.passphrase),t.key){const{iv:e,mac:r}=yield l.calculateKeyCheck(t.key);i.iv=e,i.mac=r}if(!n)do{n=u.randomString(32)}while(yield this.accountDataAdapter.getAccountDataFromServer(`m.secret_storage.key.${n}`));return yield this.accountDataAdapter.setAccountData(`m.secret_storage.key.${n}`,i),{keyId:n,keyInfo:i}}))}getKey(e){return s(this,void 0,void 0,(function*(){if(e||(e=yield this.getDefaultKeyId()),!e)return null;const t=yield this.accountDataAdapter.getAccountDataFromServer("m.secret_storage.key."+e);return t?[e,t]:null}))}hasKey(e){return s(this,void 0,void 0,(function*(){return Boolean(yield this.getKey(e))}))}checkKey(e,t){return s(this,void 0,void 0,(function*(){if(t.algorithm===r.SECRET_STORAGE_ALGORITHM_V1_AES){if(t.mac){const{mac:r}=yield l.calculateKeyCheck(e,t.iv);return t.mac.replace(/=+$/g,"")===r.replace(/=+$/g,"")}return!0}throw new Error("Unknown algorithm")}))}store(e,t,n){return s(this,void 0,void 0,(function*(){const i={};if(!n){const e=yield this.getDefaultKeyId();if(!e)throw new Error("No keys specified and no default key present");n=[e]}if(0===n.length)throw new Error("Zero keys given to encrypt with!");for(const o of n){const n=yield this.accountDataAdapter.getAccountDataFromServer("m.secret_storage.key."+o);if(!n)throw new Error("Unknown key: "+o);if(n.algorithm===r.SECRET_STORAGE_ALGORITHM_V1_AES){const r={[o]:n},[,s]=yield this.getSecretStorageKey(r,e);i[o]=yield s.encrypt(t)}else a.logger.warn("unknown algorithm for secret storage key "+o+": "+n.algorithm)}yield this.accountDataAdapter.setAccountData(e,{encrypted:i})}))}get(e){return s(this,void 0,void 0,(function*(){const t=yield this.accountDataAdapter.getAccountDataFromServer(e);if(!t)return;if(!t.encrypted)throw new Error("Content is not encrypted!");const n={};for(const e of Object.keys(t.encrypted)){const i=yield this.accountDataAdapter.getAccountDataFromServer("m.secret_storage.key."+e),o=t.encrypted[e];i.algorithm===r.SECRET_STORAGE_ALGORITHM_V1_AES&&o.iv&&o.ciphertext&&o.mac&&(n[e]=i)}if(0===Object.keys(n).length)throw new Error(`Could not decrypt ${e} because none of the keys it is encrypted with are for a supported algorithm`);let i,o;try{[i,o]=yield this.getSecretStorageKey(n,e);const r=t.encrypted[i];return r.passthrough?d.encodeBase64(o.get_private_key()):yield o.decrypt(r)}finally{o&&o.free&&o.free()}}))}isStored(e,t){return s(this,void 0,void 0,(function*(){const n=yield this.accountDataAdapter.getAccountDataFromServer(e);if(!n)return null;if(!n.encrypted)return null;void 0===t&&(t=!0);const i={};for(const e of Object.keys(n.encrypted)){const t=yield this.accountDataAdapter.getAccountDataFromServer("m.secret_storage.key."+e);if(!t)continue;const o=n.encrypted[e];t.algorithm===r.SECRET_STORAGE_ALGORITHM_V1_AES&&o.iv&&o.ciphertext&&o.mac&&(i[e]=t)}return Object.keys(i).length?i:null}))}request(e,t){const r=this.baseApis.makeTxnId();let n,i;const o=new Promise(((e,t)=>{n=e,i=t}));this.requests.set(r,{name:e,devices:t,resolve:n,reject:i});const s={name:e,action:"request",requesting_device_id:this.baseApis.deviceId,request_id:r},c={};for(const e of t)c[e]=s;return a.logger.info(`Request secret ${e} from ${t}, id ${r}`),this.baseApis.sendToDevice("m.secret.request",{[this.baseApis.getUserId()]:c}),{requestId:r,promise:o,cancel:e=>{const n={action:"request_cancellation",requesting_device_id:this.baseApis.deviceId,request_id:r},o={};for(const e of t)o[e]=n;this.baseApis.sendToDevice("m.secret.request",{[this.baseApis.getUserId()]:o}),i(new Error(e||"Cancelled"))}}}onRequestReceived(e){return s(this,void 0,void 0,(function*(){const t=e.getSender(),r=e.getContent();if(t!==this.baseApis.getUserId()||!(r.name&&r.action&&r.requesting_device_id&&r.request_id))return;const n=r.requesting_device_id;if("request_cancellation"===r.action);else if("request"===r.action){if(n===this.baseApis.deviceId)return;if(a.logger.info("received request for secret ("+t+", "+n+", "+r.request_id+")"),!this.cryptoCallbacks.onSecretRequested)return;const e=yield this.cryptoCallbacks.onSecretRequested(t,n,r.request_id,r.name,this.baseApis.checkDeviceTrust(t,n));if(e){a.logger.info(`Preparing ${r.name} secret for ${n}`);const i={type:"m.secret.send",content:{request_id:r.request_id,secret:e}},o={algorithm:c.OLM_ALGORITHM,sender_key:this.baseApis.crypto.olmDevice.deviceCurve25519Key,ciphertext:{}};yield c.ensureOlmSessionsForDevices(this.baseApis.crypto.olmDevice,this.baseApis,{[t]:[this.baseApis.getStoredDevice(t,n)]}),yield c.encryptMessageForDevice(o.ciphertext,this.baseApis.getUserId(),this.baseApis.deviceId,this.baseApis.crypto.olmDevice,t,this.baseApis.getStoredDevice(t,n),i);const s={[t]:{[n]:o}};a.logger.info(`Sending ${r.name} secret for ${n}`),this.baseApis.sendToDevice("m.room.encrypted",s)}else a.logger.info(`Request denied for ${r.name} secret for ${n}`)}}))}onSecretReceived(e){if(e.getSender()!==this.baseApis.getUserId())return;const t=e.getContent();a.logger.log("got secret share for request",t.request_id);const r=this.requests.get(t.request_id);if(r){const n=this.baseApis.crypto.deviceList.getDeviceByIdentityKey(c.OLM_ALGORITHM,e.getSenderKey());if(!n)return void a.logger.log("secret share from unknown device with key",e.getSenderKey());if(!r.devices.includes(n.deviceId))return void a.logger.log("unsolicited secret share from device",n.deviceId);a.logger.log(`Successfully received secret ${r.name} from ${n.deviceId}`),r.resolve(t.secret)}}getSecretStorageKey(e,t){return s(this,void 0,void 0,(function*(){if(!this.cryptoCallbacks.getSecretStorageKey)throw new Error("No getSecretStorageKey callback supplied");const n=yield this.cryptoCallbacks.getSecretStorageKey({keys:e},t);if(!n)throw new Error("getSecretStorageKey callback returned falsey");if(n.length<2)throw new Error("getSecretStorageKey callback returned invalid data");const[i,o]=n;if(!e[i])throw new Error("App returned unknown key from getSecretStorageKey!");if(e[i].algorithm===r.SECRET_STORAGE_ALGORITHM_V1_AES){return[i,{encrypt:function(e){return s(this,void 0,void 0,(function*(){return yield l.encryptAES(e,o,t)}))},decrypt:function(e){return s(this,void 0,void 0,(function*(){return yield l.decryptAES(e,o,t)}))}}]}throw new Error("Unknown key type: "+e[i].algorithm)}))}}},{"../logger":106,"../randomstring":123,"./aes":74,"./olmlib":85}],74:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.calculateKeyCheck=r.decryptAES=r.encryptAES=void 0;const i=e("../utils"),o=e("./olmlib"),s="undefined"!=typeof window&&window.crypto?window.crypto.subtle||window.crypto.webkitSubtle:null,a=new Uint8Array(8);function c(e,r){const n=i.getCrypto(),o=n.createHmac("sha256",a).update(e).digest(),s=t.alloc(1,1),c=n.createHmac("sha256",o).update(r,"utf8").update(s).digest();s[0]=2;return[c,n.createHmac("sha256",o).update(c).update(r,"utf8").update(s).digest()]}function u(e,t){return n(this,void 0,void 0,(function*(){const r=yield s.importKey("raw",e,{name:"HKDF"},!1,["deriveBits"]),n=yield s.deriveBits({name:"HKDF",salt:a,info:(new TextEncoder).encode(t),hash:"SHA-256"},r,512),i=n.slice(0,32),o=n.slice(32),c=s.importKey("raw",i,{name:"AES-CTR"},!1,["encrypt","decrypt"]),u=s.importKey("raw",o,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign","verify"]);return yield Promise.all([c,u])}))}function l(e,r,a,l){return s?function(e,t,r,i){return n(this,void 0,void 0,(function*(){let n;i?n=o.decodeBase64(i):(n=new Uint8Array(16),window.crypto.getRandomValues(n)),n[8]&=127;const[a,c]=yield u(t,r),l=(new TextEncoder).encode(e),d=yield s.encrypt({name:"AES-CTR",counter:n,length:64},a,l),h=yield s.sign({name:"HMAC"},c,d);return{iv:o.encodeBase64(n),ciphertext:o.encodeBase64(d),mac:o.encodeBase64(h)}}))}(e,r,a,l):function(e,r,s,a){return n(this,void 0,void 0,(function*(){const n=i.getCrypto();if(!n)throw new Error("No usable crypto implementation");let u;u=a?o.decodeBase64(a):n.randomBytes(16),u[8]&=127;const[l,d]=c(r,s),h=n.createCipheriv("aes-256-ctr",l,u),f=t.concat([h.update(e,"utf8"),h.final()]),g=n.createHmac("sha256",d).update(f).digest("base64");return{iv:o.encodeBase64(u),ciphertext:f.toString("base64"),mac:g}}))}(e,r,a,l)}r.encryptAES=l,r.decryptAES=function(e,r,a){return s?function(e,t,r){return n(this,void 0,void 0,(function*(){const[n,i]=yield u(t,r),a=o.decodeBase64(e.ciphertext);if(!(yield s.verify({name:"HMAC"},i,o.decodeBase64(e.mac),a)))throw new Error(`Error decrypting secret ${r}: bad MAC`);const c=yield s.decrypt({name:"AES-CTR",counter:o.decodeBase64(e.iv),length:64},n,a);return(new TextDecoder).decode(new Uint8Array(c))}))}(e,r,a):function(e,r,s){return n(this,void 0,void 0,(function*(){const n=i.getCrypto();if(!n)throw new Error("No usable crypto implementation");const[a,u]=c(r,s);if(n.createHmac("sha256",u).update(t.from(e.ciphertext,"base64")).digest("base64").replace(/=+$/g,"")!==e.mac.replace(/=+$/g,""))throw new Error(`Error decrypting secret ${s}: bad MAC`);const l=n.createDecipheriv("aes-256-ctr",a,o.decodeBase64(e.iv));return l.update(e.ciphertext,"base64","utf8")+l.final("utf8")}))}(e,r,a)};r.calculateKeyCheck=function(e,t){return l("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",e,"",t)}}).call(this)}).call(this,e("buffer").Buffer)},{"../utils":137,"./olmlib":85,buffer:34}],75:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.registerAlgorithm=r.UnknownDeviceError=r.DecryptionError=r.DecryptionAlgorithm=r.EncryptionAlgorithm=r.DECRYPTION_CLASSES=r.ENCRYPTION_CLASSES=void 0,r.ENCRYPTION_CLASSES={},r.DECRYPTION_CLASSES={};r.EncryptionAlgorithm=class{constructor(e){this.userId=e.userId,this.deviceId=e.deviceId,this.crypto=e.crypto,this.olmDevice=e.olmDevice,this.baseApis=e.baseApis,this.roomId=e.roomId}prepareToEncrypt(e){}onRoomMembership(e,t,r){}};r.DecryptionAlgorithm=class{constructor(e){this.userId=e.userId,this.crypto=e.crypto,this.olmDevice=e.olmDevice,this.baseApis=e.baseApis,this.roomId=e.roomId}onRoomKeyEvent(e){}importRoomKey(e,t){return n(this,void 0,void 0,(function*(){}))}hasKeysForKeyRequest(e){return Promise.resolve(!1)}shareKeysWithDevice(e){throw new Error("shareKeysWithDevice not supported for this DecryptionAlgorithm")}retryDecryptionFromSender(e){return n(this,void 0,void 0,(function*(){return!1}))}};class i extends Error{constructor(e,t,r){super(t),this.code=e,this.code=e,this.name="DecryptionError",this.detailedString=function(e,t){let r=e.name+"[msg: "+e.message;t&&(r+=", "+Object.keys(t).map((e=>e+": "+t[e])).join(", "));return r+="]",r}(this,r)}}r.DecryptionError=i;class o extends Error{constructor(e,t){super(e),this.devices=t,this.name="UnknownDeviceError",this.devices=t}}r.UnknownDeviceError=o,r.registerAlgorithm=function(e,t,n){r.ENCRYPTION_CLASSES[e]=t,r.DECRYPTION_CLASSES[e]=n}},{}],76:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(r,"__esModule",{value:!0}),e("./olm"),e("./megolm"),i(e("./base"),r)},{"./base":75,"./megolm":77,"./olm":78}],77:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.isRoomSharedHistory=void 0;const a=e("../../logger"),c=o(e("../olmlib")),u=e("./base"),l=e("../OlmDevice");function d(e){var t,r;const n=null===(t=null==e?void 0:e.currentState)||void 0===t?void 0:t.getStateEvents("m.room.history_visibility",""),i=null===(r=null==n?void 0:n.getContent())||void 0===r?void 0:r.history_visibility;return["world_readable","shared"].includes(i)}r.isRoomSharedHistory=d;class h{constructor(e,t=!1){this.sessionId=e,this.sharedHistory=t,this.useCount=0,this.sharedWithDevices={},this.blockedDevicesNotified={},this.creationTime=(new Date).getTime()}needsRotation(e,t){const r=(new Date).getTime()-this.creationTime;return(this.useCount>=e||r>=t)&&(a.logger.log("Rotating megolm session after "+this.useCount+" messages, "+r+"ms"),!0)}markSharedWithDevice(e,t,r){this.sharedWithDevices[e]||(this.sharedWithDevices[e]={}),this.sharedWithDevices[e][t]=r}markNotifiedBlockedDevice(e,t){this.blockedDevicesNotified[e]||(this.blockedDevicesNotified[e]={}),this.blockedDevicesNotified[e][t]=!0}sharedWithTooManyDevices(e){for(const t in this.sharedWithDevices)if(this.sharedWithDevices.hasOwnProperty(t)){if(!e.hasOwnProperty(t))return a.logger.log("Starting new megolm session because we shared with "+t),!0;for(const r in this.sharedWithDevices[t])if(this.sharedWithDevices[t].hasOwnProperty(r)&&!e[t].hasOwnProperty(r))return a.logger.log("Starting new megolm session because we shared with "+t+":"+r),!0}}}class f extends u.EncryptionAlgorithm{constructor(e){var t,r,n,i;super(e),this.setupPromise=Promise.resolve(void 0),this.outboundSessions={},this.sessionRotationPeriodMsgs=null!==(r=null===(t=e.config)||void 0===t?void 0:t.rotation_period_msgs)&&void 0!==r?r:100,this.sessionRotationPeriodMs=null!==(i=null===(n=e.config)||void 0===n?void 0:n.rotation_period_ms)&&void 0!==i?i:6048e5}ensureOutboundSession(e,t,r,n=!1){return s(this,void 0,void 0,(function*(){let i;function o(){return i}const u=this.setupPromise.then((o=>s(this,void 0,void 0,(function*(){i=o;const u=d(e);i&&u!==i.sharedHistory&&(i=null),i&&i.needsRotation(this.sessionRotationPeriodMsgs,this.sessionRotationPeriodMs)&&(a.logger.log("Starting new megolm session because we need to rotate."),i=null),i&&i.sharedWithTooManyDevices(t)&&(i=null),i||(a.logger.log(`Starting new megolm session for room ${this.roomId}`),i=yield this.prepareNewSession(u),a.logger.log(`Started new megolm session ${i.sessionId} for room ${this.roomId}`),this.outboundSessions[i.sessionId]=i);const l={};for(const[e,r]of Object.entries(t))for(const[t,n]of Object.entries(r)){n.getIdentityKey()!=this.olmDevice.deviceCurve25519Key&&(i.sharedWithDevices[e]&&void 0!==i.sharedWithDevices[e][t]||(l[e]=l[e]||[],l[e].push(n)))}const h=this.olmDevice.getOutboundGroupSessionKey(i.sessionId),f={type:"m.room_key",content:{algorithm:c.MEGOLM_ALGORITHM,room_id:this.roomId,session_id:i.sessionId,session_key:h.key,chain_index:h.chain_index,"org.matrix.msc3061.shared_history":u}},[g,p]=yield c.getExistingOlmSessions(this.olmDevice,this.baseApis,l);yield Promise.all([(()=>s(this,void 0,void 0,(function*(){a.logger.debug(`Sharing keys with existing Olm sessions in ${this.roomId}`),yield this.shareKeyWithOlmSessions(i,h,f,p),a.logger.debug(`Shared keys with existing Olm sessions in ${this.roomId}`)})))(),(()=>s(this,void 0,void 0,(function*(){a.logger.debug(`Sharing keys (start phase 1) with new Olm sessions in ${this.roomId}`);const e=[],t=Date.now(),r=[];yield this.shareKeyWithDevices(i,h,f,g,e,n?1e4:2e3,r),a.logger.debug(`Shared keys (end phase 1) with new Olm sessions in ${this.roomId}`),!n&&Date.now()-t<1e4?(()=>{s(this,void 0,void 0,(function*(){const t={},n=new Set;for(const e of r)n.add(e);const o=[];for(const{userId:r,deviceInfo:i}of e){const e=r.slice(r.indexOf(":")+1);n.has(e)?(t[r]=t[r]||[],t[r].push(i)):o.push({userId:r,deviceInfo:i})}a.logger.debug(`Sharing keys (start phase 2) with new Olm sessions in ${this.roomId}`),yield this.shareKeyWithDevices(i,h,f,t,o,3e4),a.logger.debug(`Shared keys (end phase 2) with new Olm sessions in ${this.roomId}`),yield this.notifyFailedOlmDevices(i,h,o)}))})():yield this.notifyFailedOlmDevices(i,h,e),a.logger.debug(`Shared keys (all phases done) with new Olm sessions in ${this.roomId}`)})))(),(()=>s(this,void 0,void 0,(function*(){a.logger.debug(`Notifying blocked devices in ${this.roomId}`);const e={};let t=0;for(const[n,o]of Object.entries(r))for(const[r,s]of Object.entries(o))i.blockedDevicesNotified[n]&&void 0!==i.blockedDevicesNotified[n][r]||(e[n]=e[n]||{},e[n][r]={device:s},t++);yield this.notifyBlockedDevices(i,e),a.logger.debug(`Notified ${t} blocked devices in ${this.roomId}`)})))()])}))));return u.catch((e=>{a.logger.error(`Failed to ensure outbound session in ${this.roomId}`,e)})),this.setupPromise=u.then(o,o),u.then(o)}))}prepareNewSession(e){return s(this,void 0,void 0,(function*(){const t=this.olmDevice.createOutboundGroupSession(),r=this.olmDevice.getOutboundGroupSessionKey(t);return yield this.olmDevice.addInboundGroupSession(this.roomId,this.olmDevice.deviceCurve25519Key,[],t,r.key,{ed25519:this.olmDevice.deviceEd25519Key},!1,{sharedHistory:e}),this.crypto.backupManager.backupGroupSession(this.olmDevice.deviceCurve25519Key,t),new h(t,e)}))}getDevicesWithoutSessions(e,t,r=[]){for(const[n,i]of Object.entries(t)){const t=e[n];for(const e of i){const i=e.deviceId;t[i].sessionId||(r.push({userId:n,deviceInfo:e}),delete t[i])}}return r}splitDevices(e){let t=[];const r=[t];for(const[n,i]of Object.entries(e)){for(const e of Object.values(i))t.push({userId:n,deviceInfo:e.device});t.length>20&&(t=[],r.push(t))}return 0===t.length&&r.pop(),r}encryptAndSendKeysToDevices(e,t,r,n){const i={},o=[];for(let e=0;e<r.length;e++){const t={algorithm:c.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}},s=r[e],a=s.userId,u=s.deviceInfo,l=u.deviceId;i[a]||(i[a]={}),i[a][l]=t,o.push(c.encryptMessageForDevice(t.ciphertext,this.userId,this.deviceId,this.olmDevice,a,u,n))}return Promise.all(o).then((()=>{for(const e of Object.keys(i)){for(const t of Object.keys(i[e]))0===Object.keys(i[e][t].ciphertext).length&&(a.logger.log("No ciphertext for device "+e+":"+t+": pruning"),delete i[e][t]);0===Object.keys(i[e]).length&&(a.logger.log("Pruned all devices for user "+e),delete i[e])}if(0!==Object.keys(i).length)return this.baseApis.sendToDevice("m.room.encrypted",i).then((()=>{for(const r of Object.keys(i))for(const n of Object.keys(i[r]))e.markSharedWithDevice(r,n,t)}));a.logger.log("No users left to send to: aborting")}))}sendBlockedNotificationsToDevices(e,t,r){return s(this,void 0,void 0,(function*(){const n={};for(const e of t){const t=e.userId,i=e.deviceInfo,o=i.deviceInfo.deviceId,s=Object.assign({},r);s.code=i.code,s.reason=i.reason,"m.no_olm"===s.code&&(delete s.room_id,delete s.session_id),n[t]||(n[t]={}),n[t][o]=s}yield this.baseApis.sendToDevice("org.matrix.room_key.withheld",n);for(const t of Object.keys(n))for(const r of Object.keys(n[t]))e.markNotifiedBlockedDevice(t,r)}))}reshareKeyWithDevice(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=this.outboundSessions[t];if(!i)return void a.logger.debug(`megolm session ${t} not found: not re-sharing keys`);if(void 0===i.sharedWithDevices[r])return void a.logger.debug(`megolm session ${t} never shared with user ${r}`);const o=i.sharedWithDevices[r][n.deviceId];if(void 0===o)return void a.logger.debug("megolm session ID "+t+" never shared with device "+r+":"+n.deviceId);const s=yield this.olmDevice.getInboundGroupSessionKey(this.roomId,e,t,o);if(!s)return void a.logger.warn(`No inbound session key found for megolm ${t}: not re-sharing keys`);yield c.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,{[r]:[n]});const u={type:"m.forwarded_room_key",content:{algorithm:c.MEGOLM_ALGORITHM,room_id:this.roomId,session_id:t,session_key:s.key,chain_index:s.chain_index,sender_key:e,sender_claimed_ed25519_key:s.sender_claimed_ed25519_key,forwarding_curve25519_key_chain:s.forwarding_curve25519_key_chain,"org.matrix.msc3061.shared_history":s.shared_history||!1}},l={algorithm:c.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}};yield c.encryptMessageForDevice(l.ciphertext,this.userId,this.deviceId,this.olmDevice,r,n,u),yield this.baseApis.sendToDevice("m.room.encrypted",{[r]:{[n.deviceId]:l}}),a.logger.debug(`Re-shared key for megolm session ${t} with ${r}:${n.deviceId}`)}))}shareKeyWithDevices(e,t,r,n,i,o,u){return s(this,void 0,void 0,(function*(){a.logger.debug(`Ensuring Olm sessions for devices in ${this.roomId}`);const s=yield c.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,n,!1,o,u,a.logger.withPrefix(`[${this.roomId}]`));a.logger.debug(`Ensured Olm sessions for devices in ${this.roomId}`),this.getDevicesWithoutSessions(s,n,i),a.logger.debug(`Sharing keys with Olm sessions in ${this.roomId}`),yield this.shareKeyWithOlmSessions(e,t,r,s),a.logger.debug(`Shared keys with Olm sessions in ${this.roomId}`)}))}shareKeyWithOlmSessions(e,t,r,n){return s(this,void 0,void 0,(function*(){const i=this.splitDevices(n);for(let n=0;n<i.length;n++){const o=`megolm keys for ${e.sessionId} in ${this.roomId} (slice ${n+1}/${i.length})`;try{a.logger.debug(`Sharing ${o}`),yield this.encryptAndSendKeysToDevices(e,t.chain_index,i[n],r),a.logger.debug(`Shared ${o}`)}catch(e){throw a.logger.error(`Failed to share ${o}`),e}}}))}notifyFailedOlmDevices(e,t,r){return s(this,void 0,void 0,(function*(){a.logger.debug(`Notifying ${r.length} devices we failed to create Olm sessions in ${this.roomId}`);for(const{userId:n,deviceInfo:i}of r){const r=i.deviceId;e.markSharedWithDevice(n,r,t.chain_index)}const n=yield this.olmDevice.filterOutNotifiedErrorDevices(r);a.logger.debug(`Filtered down to ${n.length} error devices in ${this.roomId}`);const i={};for(const{userId:e,deviceInfo:t}of n)i[e]=i[e]||{},i[e][t.deviceId]={device:{code:"m.no_olm",reason:l.WITHHELD_MESSAGES["m.no_olm"],deviceInfo:t}};yield this.notifyBlockedDevices(e,i),a.logger.debug(`Notified ${n.length} devices we failed to create Olm sessions in ${this.roomId}`)}))}notifyBlockedDevices(e,t){return s(this,void 0,void 0,(function*(){const r={room_id:this.roomId,session_id:e.sessionId,algorithm:c.MEGOLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key},n=this.splitDevices(t);for(let t=0;t<n.length;t++)try{yield this.sendBlockedNotificationsToDevices(e,n[t],r),a.logger.log(`Completed blacklist notification for ${e.sessionId} in ${this.roomId} (slice ${t+1}/${n.length})`)}catch(r){throw a.logger.log(`blacklist notification for ${e.sessionId} in ${this.roomId} (slice ${t+1}/${n.length}) failed`),r}}))}prepareToEncrypt(e){if(this.encryptionPreparation){const e=Date.now()-this.encryptionPreparationMetadata.startTime;a.logger.debug(`Already started preparing to encrypt for ${this.roomId} ${e} ms ago, skipping`)}else a.logger.debug(`Preparing to encrypt events for ${this.roomId}`),this.encryptionPreparationMetadata={startTime:Date.now()},this.encryptionPreparation=(()=>s(this,void 0,void 0,(function*(){try{a.logger.debug(`Getting devices in ${this.roomId}`);const[t,r]=yield this.getDevicesInRoom(e);this.crypto.getGlobalErrorOnUnknownDevices()&&this.removeUnknownDevices(t),a.logger.debug(`Ensuring outbound session in ${this.roomId}`),yield this.ensureOutboundSession(e,t,r,!0),a.logger.debug(`Ready to encrypt events for ${this.roomId}`)}catch(e){a.logger.error(`Failed to prepare to encrypt events for ${this.roomId}`,e)}finally{delete this.encryptionPreparationMetadata,delete this.encryptionPreparation}})))()}encryptMessage(e,t,r){return s(this,void 0,void 0,(function*(){if(a.logger.log(`Starting to encrypt event for ${this.roomId}`),this.encryptionPreparation)try{yield this.encryptionPreparation}catch(e){}const[n,i]=yield this.getDevicesInRoom(e);this.crypto.getGlobalErrorOnUnknownDevices()&&this.checkForUnknownDevices(n);const o=yield this.ensureOutboundSession(e,n,i),s={room_id:this.roomId,type:t,content:r},u=this.olmDevice.encryptGroupMessage(o.sessionId,JSON.stringify(s)),l={algorithm:c.MEGOLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:u,session_id:o.sessionId,device_id:this.deviceId};return o.useCount++,l}))}forceDiscardSession(){this.setupPromise=this.setupPromise.then((()=>null))}checkForUnknownDevices(e){const t={};if(Object.keys(e).forEach((r=>{Object.keys(e[r]).forEach((n=>{const i=e[r][n];i.isUnverified()&&!i.isKnown()&&(t[r]||(t[r]={}),t[r][n]=i)}))})),Object.keys(t).length)throw new u.UnknownDeviceError("This room contains unknown devices which have not been verified. We strongly recommend you verify them before continuing.",t)}removeUnknownDevices(e){for(const[t,r]of Object.entries(e)){for(const[e,t]of Object.entries(r))t.isUnverified()&&!t.isKnown()&&delete r[e];0===Object.keys(r).length&&delete e[t]}}getDevicesInRoom(e){return s(this,void 0,void 0,(function*(){const t=(yield e.getEncryptionTargetMembers()).map((function(e){return e.userId}));let r=this.crypto.getGlobalBlacklistUnverifiedDevices();"boolean"==typeof e.getBlacklistUnverifiedDevices()&&(r=e.getBlacklistUnverifiedDevices());const n=yield this.crypto.downloadKeys(t,!1),i={};for(const e in n){if(!n.hasOwnProperty(e))continue;const t=n[e];for(const n in t){if(!t.hasOwnProperty(n))continue;const o=this.crypto.checkDeviceTrust(e,n);if(t[n].isBlocked()||!o.isVerified()&&r){i[e]||(i[e]={});const r=t[n].isBlocked();i[e][n]={code:r?"m.blacklisted":"m.unverified",reason:l.WITHHELD_MESSAGES[r?"m.blacklisted":"m.unverified"],deviceInfo:t[n]},delete t[n]}}}return[n,i]}))}}class g extends u.DecryptionAlgorithm{constructor(){super(...arguments),this.pendingEvents={},this.olmlib=c}decryptEvent(e){return s(this,void 0,void 0,(function*(){const t=e.getWireContent();if(!t.sender_key||!t.session_id||!t.ciphertext)throw new u.DecryptionError("MEGOLM_MISSING_FIELDS","Missing fields in input");let r;this.addEventToPendingList(e);try{r=yield this.olmDevice.decryptGroupMessage(e.getRoomId(),t.sender_key,t.session_id,t.ciphertext,e.getId(),e.getTs())}catch(r){if("DecryptionError"===r.name)throw r;let n="OLM_DECRYPT_GROUP_MESSAGE_ERROR";throw r&&"OLM.UNKNOWN_MESSAGE_INDEX"===r.message&&(this.requestKeysForEvent(e),n="OLM_UNKNOWN_MESSAGE_INDEX"),new u.DecryptionError(n,r?r.toString():"Unknown Error: Error is undefined",{session:t.sender_key+"|"+t.session_id})}if(null===r){this.requestKeysForEvent(e);const r=yield this.olmDevice.sessionMayHaveProblems(t.sender_key,e.getTs()-12e4);if(r){let e=p[r.type]||p.unknown;throw r.fixed&&(e+=" Trying to create a new secure channel and re-requesting the keys."),new u.DecryptionError("MEGOLM_UNKNOWN_INBOUND_SESSION_ID",e,{session:t.sender_key+"|"+t.session_id})}throw new u.DecryptionError("MEGOLM_UNKNOWN_INBOUND_SESSION_ID","The sender's device has not sent us the keys for this message.",{session:t.sender_key+"|"+t.session_id})}this.removeEventFromPendingList(e);const n=JSON.parse(r.result);if(n.room_id!==e.getRoomId())throw new u.DecryptionError("MEGOLM_BAD_ROOM","Message intended for room "+n.room_id);return{clearEvent:n,senderCurve25519Key:r.senderKey,claimedEd25519Key:r.keysClaimed.ed25519,forwardingCurve25519KeyChain:r.forwardingCurve25519KeyChain,untrusted:r.untrusted}}))}requestKeysForEvent(e){const t=e.getWireContent(),r=e.getKeyRequestRecipients(this.userId);this.crypto.requestRoomKey({room_id:e.getRoomId(),algorithm:t.algorithm,sender_key:t.sender_key,session_id:t.session_id},r)}addEventToPendingList(e){const t=e.getWireContent(),r=t.sender_key,n=t.session_id;this.pendingEvents[r]||(this.pendingEvents[r]=new Map);const i=this.pendingEvents[r];i.has(n)||i.set(n,new Set),i.get(n).add(e)}removeEventFromPendingList(e){const t=e.getWireContent(),r=t.sender_key,n=t.session_id,i=this.pendingEvents[r],o=i&&i.get(n);o&&(o.delete(e),0===o.size&&i.delete(r),0===i.size&&delete this.pendingEvents[r])}onRoomKeyEvent(e){const t=e.getContent(),r=t.session_id;let n,i=e.getSenderKey(),o=[],s=!1;if(!t.room_id||!r||!t.session_key)return void a.logger.error("key event is missing fields");if(!i)return void a.logger.error("key event has no sender key (not encrypted?)");if("m.forwarded_room_key"==e.getType()){if(s=!0,o=t.forwarding_curve25519_key_chain,Array.isArray(o)||(o=[]),o=o.slice(),o.push(i),i=t.sender_key,!i)return void a.logger.error("forwarded_room_key event is missing sender_key field");const e=t.sender_claimed_ed25519_key;if(!e)return void a.logger.error("forwarded_room_key_event is missing sender_claimed_ed25519_key field");n={ed25519:e}}else n=e.getKeysClaimed();const c={};return t["org.matrix.msc3061.shared_history"]&&(c.sharedHistory=!0),this.olmDevice.addInboundGroupSession(t.room_id,i,o,r,t.session_key,n,s,c).then((()=>{this.retryDecryption(i,r).then((e=>{e&&this.crypto.cancelRoomKeyRequest({algorithm:t.algorithm,room_id:t.room_id,session_id:t.session_id,sender_key:i})}))})).then((()=>{this.crypto.backupManager.backupGroupSession(i,t.session_id)})).catch((e=>{a.logger.error(`Error handling m.room_key_event: ${e}`)}))}onRoomKeyWithheldEvent(e){return s(this,void 0,void 0,(function*(){const t=e.getContent(),r=t.sender_key;if("m.no_olm"===t.code){const n=e.getSender();if(a.logger.warn(`${n}:${r} was unable to establish an olm session with us`),yield this.olmDevice.getSessionIdForDevice(r))return a.logger.debug("New session already created. Not creating a new one."),yield this.olmDevice.recordSessionProblem(r,"no_olm",!0),void this.retryDecryptionFromSender(r);let i=this.crypto.deviceList.getDeviceByIdentityKey(t.algorithm,r);if(!i&&(yield this.crypto.downloadKeys([n],!1),i=this.crypto.deviceList.getDeviceByIdentityKey(t.algorithm,r),!i))return a.logger.info("Couldn't find device for identity key "+r+": not establishing session"),yield this.olmDevice.recordSessionProblem(r,"no_olm",!1),void this.retryDecryptionFromSender(r);yield c.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,{[n]:[i]},!1);const o={algorithm:c.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}};yield c.encryptMessageForDevice(o.ciphertext,this.userId,void 0,this.olmDevice,n,i,{type:"m.dummy"}),yield this.olmDevice.recordSessionProblem(r,"no_olm",!0),this.retryDecryptionFromSender(r),yield this.baseApis.sendToDevice("m.room.encrypted",{[n]:{[i.deviceId]:o}})}else yield this.olmDevice.addInboundGroupSessionWithheld(t.room_id,r,t.session_id,t.code,t.reason)}))}hasKeysForKeyRequest(e){const t=e.requestBody;return this.olmDevice.hasInboundSessionKeys(t.room_id,t.sender_key,t.session_id)}shareKeysWithDevice(e){const t=e.userId,r=e.deviceId,n=this.crypto.getStoredDevice(t,r),i=e.requestBody;this.olmlib.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,{[t]:[n]}).then((e=>e[t][r].sessionId?(a.logger.log("sharing keys for session "+i.sender_key+"|"+i.session_id+" with device "+t+":"+r),this.buildKeyForwardingMessage(i.room_id,i.sender_key,i.session_id)):null)).then((e=>{const i={algorithm:c.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}};return this.olmlib.encryptMessageForDevice(i.ciphertext,this.userId,void 0,this.olmDevice,t,n,e).then((()=>{const e={[t]:{[r]:i}};return this.baseApis.sendToDevice("m.room.encrypted",e)}))}))}buildKeyForwardingMessage(e,t,r){return s(this,void 0,void 0,(function*(){const n=yield this.olmDevice.getInboundGroupSessionKey(e,t,r);return{type:"m.forwarded_room_key",content:{algorithm:c.MEGOLM_ALGORITHM,room_id:e,sender_key:t,sender_claimed_ed25519_key:n.sender_claimed_ed25519_key,session_id:r,session_key:n.key,chain_index:n.chain_index,forwarding_curve25519_key_chain:n.forwarding_curve25519_key_chain,"org.matrix.msc3061.shared_history":n.shared_history||!1}}}))}importRoomKey(e,t={}){const r={};return(t.untrusted||e.untrusted)&&(r.untrusted=!0),e["org.matrix.msc3061.shared_history"]&&(r.sharedHistory=!0),this.olmDevice.addInboundGroupSession(e.room_id,e.sender_key,e.forwarding_curve25519_key_chain,e.session_id,e.session_key,e.sender_claimed_keys,!0,r).then((()=>{"backup"!==t.source&&this.crypto.backupManager.backupGroupSession(e.sender_key,e.session_id).catch((e=>{a.logger.log("Failed to back up megolm session",e)})),this.retryDecryption(e.sender_key,e.session_id)}))}retryDecryption(e,t){return s(this,void 0,void 0,(function*(){const r=this.pendingEvents[e];if(!r)return!0;const n=r.get(t);return!n||(a.logger.debug("Retrying decryption on events",[...n]),yield Promise.all([...n].map((e=>s(this,void 0,void 0,(function*(){try{yield e.attemptDecryption(this.crypto,{isRetry:!0})}catch(e){}}))))),!(this.pendingEvents[e]||{})[t])}))}retryDecryptionFromSender(e){return s(this,void 0,void 0,(function*(){const t=this.pendingEvents[e];return!t||(delete this.pendingEvents[e],yield Promise.all([...t].map((([e,t])=>s(this,void 0,void 0,(function*(){yield Promise.all([...t].map((e=>s(this,void 0,void 0,(function*(){try{yield e.attemptDecryption(this.crypto)}catch(e){}})))))}))))),!this.pendingEvents[e])}))}sendSharedHistoryInboundSessions(e){return s(this,void 0,void 0,(function*(){yield c.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,e),a.logger.log("sendSharedHistoryInboundSessions to users",Object.keys(e));const t=yield this.olmDevice.getSharedHistoryInboundGroupSessions(this.roomId);a.logger.log("shared-history sessions",t);for(const[r,n]of t){const t=yield this.buildKeyForwardingMessage(this.roomId,r,n),i=[],o={};for(const[r,n]of Object.entries(e)){o[r]={};for(const e of n){const n={algorithm:c.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}};o[r][e.deviceId]=n,i.push(c.encryptMessageForDevice(n.ciphertext,this.userId,void 0,this.olmDevice,r,e,t))}}yield Promise.all(i);for(const e of Object.keys(o)){for(const t of Object.keys(o[e]))0===Object.keys(o[e][t].ciphertext).length&&(a.logger.log("No ciphertext for device "+e+":"+t+": pruning"),delete o[e][t]);0===Object.keys(o[e]).length&&(a.logger.log("Pruned all devices for user "+e),delete o[e])}if(0===Object.keys(o).length)return void a.logger.log("No users left to send to: aborting");yield this.baseApis.sendToDevice("m.room.encrypted",o)}}))}}const p={no_olm:"The sender was unable to establish a secure channel.",unknown:"The secure channel with the sender was corrupted."};u.registerAlgorithm(c.MEGOLM_ALGORITHM,f,g)},{"../../logger":106,"../OlmDevice":70,"../olmlib":85,"./base":75}],78:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0});const a=e("../../logger"),c=o(e("../olmlib")),u=e("../deviceinfo"),l=e("./base"),d=u.DeviceInfo.DeviceVerification;class h extends l.EncryptionAlgorithm{constructor(){super(...arguments),this.sessionPrepared=!1,this.prepPromise=null}ensureSession(e){return this.prepPromise?this.prepPromise:this.sessionPrepared?Promise.resolve():(this.prepPromise=this.crypto.downloadKeys(e).then((t=>this.crypto.ensureOlmSessionsForUsers(e))).then((()=>{this.sessionPrepared=!0})).finally((()=>{this.prepPromise=null})),this.prepPromise)}encryptMessage(e,t,r){return s(this,void 0,void 0,(function*(){const n=(yield e.getEncryptionTargetMembers()).map((function(e){return e.userId}));yield this.ensureSession(n);const i={room_id:e.roomId,type:t,content:r},o={algorithm:c.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}},s=[];for(let e=0;e<n.length;++e){const t=n[e],r=this.crypto.getStoredDevicesForUser(t);for(let e=0;e<r.length;++e){const n=r[e];n.getIdentityKey()!=this.olmDevice.deviceCurve25519Key&&(n.verified!=d.BLOCKED&&s.push(c.encryptMessageForDevice(o.ciphertext,this.userId,this.deviceId,this.olmDevice,t,n,i)))}}return yield Promise.all(s).then((()=>o))}))}}class f extends l.DecryptionAlgorithm{decryptEvent(e){return s(this,void 0,void 0,(function*(){const t=e.getWireContent(),r=t.sender_key,n=t.ciphertext;if(!n)throw new l.DecryptionError("OLM_MISSING_CIPHERTEXT","Missing ciphertext");if(!(this.olmDevice.deviceCurve25519Key in n))throw new l.DecryptionError("OLM_NOT_INCLUDED_IN_RECIPIENTS","Not included in recipients");const i=n[this.olmDevice.deviceCurve25519Key];let o;try{o=yield this.decryptMessage(r,i)}catch(e){throw new l.DecryptionError("OLM_BAD_ENCRYPTED_MESSAGE","Bad Encrypted Message",{sender:r,err:e})}const s=JSON.parse(o);if(s.recipient!=this.userId)throw new l.DecryptionError("OLM_BAD_RECIPIENT","Message was intented for "+s.recipient);if(s.recipient_keys.ed25519!=this.olmDevice.deviceEd25519Key)throw new l.DecryptionError("OLM_BAD_RECIPIENT_KEY","Message not intended for this device",{intended:s.recipient_keys.ed25519,our_key:this.olmDevice.deviceEd25519Key});if(s.sender!=e.getSender())throw new l.DecryptionError("OLM_FORWARDED_MESSAGE","Message forwarded from "+s.sender,{reported_sender:e.getSender()});if(s.room_id!==e.getRoomId())throw new l.DecryptionError("OLM_BAD_ROOM","Message intended for room "+s.room_id,{reported_room:e.getRoomId()});return{clearEvent:s,senderCurve25519Key:r,claimedEd25519Key:(s.keys||{}).ed25519||null}}))}decryptMessage(e,t){return s(this,void 0,void 0,(function*(){if(0!==t.type)return this.reallyDecryptMessage(e,t);{const r=this.olmDevice._olmPrekeyPromise.then((()=>this.reallyDecryptMessage(e,t)));return this.olmDevice._olmPrekeyPromise=r.catch((()=>{})),yield r}}))}reallyDecryptMessage(e,t){return s(this,void 0,void 0,(function*(){const r=yield this.olmDevice.getSessionIdsForDevice(e),n={};for(let i=0;i<r.length;i++){const o=r[i];try{const r=yield this.olmDevice.decryptMessage(e,o,t.type,t.body);return a.logger.log("Decrypted Olm message from "+e+" with session "+o),r}catch(r){if(yield this.olmDevice.matchesSession(e,o,t.type,t.body))throw new Error("Error decrypting prekey message with existing session id "+o+": "+r.message);n[o]=r.message}}if(0!==t.type){if(0===r.length)throw new Error("No existing sessions");throw new Error("Error decrypting non-prekey message with existing sessions: "+JSON.stringify(n))}let i;try{i=yield this.olmDevice.createInboundSession(e,t.type,t.body)}catch(e){throw n["(new)"]=e.message,new Error("Error decrypting prekey message: "+JSON.stringify(n))}return a.logger.log("created new inbound Olm session ID "+i.session_id+" with "+e),i.payload}))}}l.registerAlgorithm(c.OLM_ALGORITHM,h,f)},{"../../logger":106,"../deviceinfo":82,"../olmlib":85,"./base":75}],79:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CrossSigningKey=void 0,function(e){e.Master="master",e.SelfSigning="self_signing",e.UserSigning="user_signing"}(r.CrossSigningKey||(r.CrossSigningKey={}))},{}],80:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.DefaultAlgorithm=r.algorithmsByName=r.Aes256=r.Curve25519=r.BackupManager=void 0;const i=e("../client"),o=e("../logger"),s=e("./olmlib"),a=e("./key_passphrase"),c=e("../utils"),u=e("./store/indexeddb-crypto-store"),l=e("./recoverykey"),d=e("./aes"),h=e("../utils"),f=e("../NamespacedValue");class g{constructor(e,t){this.baseApis=e,this.getKey=t,this.checkedForBackup=!1,this.sendingBackups=!1}get version(){return this.backupInfo&&this.backupInfo.version}static checkBackupVersion(e){const t=r.algorithmsByName[e.algorithm];if(!t)throw new Error("Unknown backup algorithm: "+e.algorithm);if("object"!=typeof e.auth_data)throw new Error("Invalid backup data returned");return t.checkBackupVersion(e)}static makeAlgorithm(e,t){return n(this,void 0,void 0,(function*(){const n=r.algorithmsByName[e.algorithm];if(!n)throw new Error("Unknown backup algorithm");return yield n.init(e.auth_data,t)}))}enableKeyBackup(e){return n(this,void 0,void 0,(function*(){this.backupInfo=e,this.algorithm&&this.algorithm.free(),this.algorithm=yield g.makeAlgorithm(e,this.getKey),this.baseApis.emit("crypto.keyBackupStatus",!0),this.scheduleKeyBackupSend()}))}disableKeyBackup(){this.algorithm&&this.algorithm.free(),this.algorithm=void 0,this.backupInfo=void 0,this.baseApis.emit("crypto.keyBackupStatus",!1)}getKeyBackupEnabled(){return this.checkedForBackup?Boolean(this.algorithm):null}prepareKeyBackupVersion(e,t){return n(this,void 0,void 0,(function*(){const n=t?r.algorithmsByName[t]:r.DefaultAlgorithm;if(!n)throw new Error("Unknown backup algorithm");const[i,o]=yield n.prepare(e),s=l.encodeRecoveryKey(i);return{algorithm:n.algorithmName,auth_data:o,recovery_key:s,privateKey:i}}))}createKeyBackupVersion(e){return n(this,void 0,void 0,(function*(){this.algorithm=yield g.makeAlgorithm(e,this.getKey)}))}checkAndStart(){return n(this,void 0,void 0,(function*(){if(o.logger.log("Checking key backup status..."),this.baseApis.isGuest())return o.logger.log("Skipping key backup check since user is guest"),this.checkedForBackup=!0,null;let e;try{e=yield this.baseApis.getKeyBackupVersion()}catch(e){return o.logger.log("Error checking for active key backup",e),404===e.httpStatus&&(this.checkedForBackup=!0),null}this.checkedForBackup=!0;const t=yield this.isKeyBackupTrusted(e);return t.usable&&!this.backupInfo?(o.logger.log("Found usable key backup v"+e.version+": enabling key backups"),yield this.enableKeyBackup(e)):!t.usable&&this.backupInfo?(o.logger.log("No usable key backup: disabling key backup"),this.disableKeyBackup()):t.usable||this.backupInfo?t.usable&&this.backupInfo&&(e.version!==this.backupInfo.version?(o.logger.log("On backup version "+this.backupInfo.version+" but found version "+e.version+": switching."),this.disableKeyBackup(),yield this.enableKeyBackup(e),yield this.scheduleAllGroupSessionsForBackup()):o.logger.log("Backup version "+e.version+" still current")):o.logger.log("No usable key backup: not enabling key backup"),{backupInfo:e,trustInfo:t}}))}checkKeyBackup(){return n(this,void 0,void 0,(function*(){return this.checkedForBackup=!1,this.checkAndStart()}))}isKeyBackupTrusted(e){return n(this,void 0,void 0,(function*(){const t={usable:!1,trusted_locally:!1,sigs:[]};if(!(e&&e.algorithm&&e.auth_data&&e.auth_data.signatures))return o.logger.info("Key backup is absent or missing required data"),t;const r=this.baseApis.crypto.sessionStore.getLocalTrustedBackupPubKey();"public_key"in e.auth_data&&e.auth_data.public_key===r&&(o.logger.info("Backup public key "+r+" is trusted locally"),t.trusted_locally=!0);const n=e.auth_data.signatures[this.baseApis.getUserId()]||[];for(const r of Object.keys(n)){const n=r.split(":");if("ed25519"!==n[0]){o.logger.log("Ignoring unknown signature type: "+n[0]);continue}const i={deviceId:n[1]},a=this.baseApis.crypto.crossSigningInfo.getId();if(a===i.deviceId){i.crossSigningId=!0;try{yield s.verifySignature(this.baseApis.crypto.olmDevice,e.auth_data,this.baseApis.getUserId(),i.deviceId,a),i.valid=!0}catch(e){o.logger.warn("Bad signature from cross signing key "+a,e),i.valid=!1}t.sigs.push(i);continue}const c=this.baseApis.crypto.deviceList.getStoredDevice(this.baseApis.getUserId(),i.deviceId);if(c){i.device=c,i.deviceTrust=yield this.baseApis.checkDeviceTrust(this.baseApis.getUserId(),i.deviceId);try{yield s.verifySignature(this.baseApis.crypto.olmDevice,e.auth_data,this.baseApis.getUserId(),c.deviceId,c.getFingerprint()),i.valid=!0}catch(t){o.logger.info("Bad signature from key ID "+r+" userID "+this.baseApis.getUserId()+" device ID "+c.deviceId+" fingerprint: "+c.getFingerprint(),e.auth_data,t),i.valid=!1}}else i.valid=null,o.logger.info("Ignoring signature from unknown key "+r);t.sigs.push(i)}return t.usable=t.sigs.some((e=>e.valid&&(e.device&&e.deviceTrust.isVerified()||e.crossSigningId))),t.usable=t.usable||t.trusted_locally,t}))}scheduleKeyBackupSend(e=1e4){return n(this,void 0,void 0,(function*(){if(!this.sendingBackups){this.sendingBackups=!0;try{const t=Math.random()*e;yield c.sleep(t,void 0);let r=0;for(;;){if(!this.algorithm)return;try{if(0===(yield this.backupPendingKeys(200)))return;r=0}catch(e){if(r++,o.logger.log("Key backup request failed",e),e.data&&("M_NOT_FOUND"==e.data.errcode||"M_WRONG_ROOM_KEYS_VERSION"==e.data.errcode))throw yield this.checkKeyBackup(),this.baseApis.crypto.emit("crypto.keyBackupFailed",e.data.errcode),e}r&&(yield c.sleep(1e3*Math.pow(2,Math.min(r-1,4)),void 0))}}finally{this.sendingBackups=!1}}}))}backupPendingKeys(e){return n(this,void 0,void 0,(function*(){const t=yield this.baseApis.crypto.cryptoStore.getSessionsNeedingBackup(e);if(!t.length)return 0;let r=yield this.baseApis.crypto.cryptoStore.countSessionsNeedingBackup();this.baseApis.crypto.emit("crypto.keyBackupSessionsRemaining",r);const n={};for(const e of t){const t=e.sessionData.room_id;void 0===n[t]&&(n[t]={sessions:{}});const r=yield this.baseApis.crypto.olmDevice.exportInboundGroupSession(e.senderKey,e.sessionId,e.sessionData);r.algorithm=s.MEGOLM_ALGORITHM;const i=(r.forwarding_curve25519_key_chain||[]).length,o=this.baseApis.crypto.deviceList.getUserByIdentityKey(s.MEGOLM_ALGORITHM,e.senderKey),a=this.baseApis.crypto.deviceList.getDeviceByIdentityKey(s.MEGOLM_ALGORITHM,e.senderKey),c=this.baseApis.crypto.checkDeviceInfoTrust(o,a).isVerified();n[t].sessions[e.sessionId]={first_message_index:r.first_known_index,forwarded_count:i,is_verified:c,session_data:yield this.algorithm.encryptSession(r)}}return yield this.baseApis.sendKeyBackup(void 0,void 0,this.backupInfo.version,{rooms:n}),yield this.baseApis.crypto.cryptoStore.unmarkSessionsNeedingBackup(t),r=yield this.baseApis.crypto.cryptoStore.countSessionsNeedingBackup(),this.baseApis.crypto.emit("crypto.keyBackupSessionsRemaining",r),t.length}))}backupGroupSession(e,t){return n(this,void 0,void 0,(function*(){yield this.baseApis.crypto.cryptoStore.markSessionsNeedingBackup([{senderKey:e,sessionId:t}]),this.backupInfo&&this.scheduleKeyBackupSend()}))}scheduleAllGroupSessionsForBackup(){return n(this,void 0,void 0,(function*(){yield this.flagAllGroupSessionsForBackup(),this.scheduleKeyBackupSend(0)}))}flagAllGroupSessionsForBackup(){return n(this,void 0,void 0,(function*(){yield this.baseApis.crypto.cryptoStore.doTxn("readwrite",[u.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS,u.IndexedDBCryptoStore.STORE_BACKUP],(e=>{this.baseApis.crypto.cryptoStore.getAllEndToEndInboundGroupSessions(e,(t=>{null!==t&&this.baseApis.crypto.cryptoStore.markSessionsNeedingBackup([t],e)}))}));const e=yield this.baseApis.crypto.cryptoStore.countSessionsNeedingBackup();return this.baseApis.emit("crypto.keyBackupSessionsRemaining",e),e}))}countSessionsNeedingBackup(){return this.baseApis.crypto.cryptoStore.countSessionsNeedingBackup()}}r.BackupManager=g;class p{constructor(e,t,r){this.authData=e,this.publicKey=t,this.getKey=r}static init(e,r){return n(this,void 0,void 0,(function*(){if(!e||!("public_key"in e))throw new Error("auth_data missing required information");const n=new t.Olm.PkEncryption;return n.set_recipient_key(e.public_key),new p(e,n,r)}))}static prepare(e){return n(this,void 0,void 0,(function*(){const r=new t.Olm.PkDecryption;try{const n={};if(e)if(e instanceof Uint8Array)n.public_key=r.init_with_private_key(e);else{const t=yield a.keyFromPassphrase(e);n.private_key_salt=t.salt,n.private_key_iterations=t.iterations,n.public_key=r.init_with_private_key(t.key)}else n.public_key=r.generate_key();return(new t.Olm.PkEncryption).set_recipient_key(n.public_key),[r.get_private_key(),n]}finally{r.free()}}))}static checkBackupVersion(e){if(!("public_key"in e.auth_data))throw new Error("Invalid backup data returned")}get untrusted(){return!0}encryptSession(e){return n(this,void 0,void 0,(function*(){const t=Object.assign({},e);return delete t.session_id,delete t.room_id,delete t.first_known_index,this.publicKey.encrypt(JSON.stringify(t))}))}decryptSessions(e){return n(this,void 0,void 0,(function*(){const r=yield this.getKey(),n=new t.Olm.PkDecryption;try{if(n.init_with_private_key(r)!==this.authData.public_key)throw{errcode:i.MatrixClient.RESTORE_BACKUP_ERROR_BAD_KEY};const t=[];for(const[r,i]of Object.entries(e))try{const e=JSON.parse(n.decrypt(i.session_data.ephemeral,i.session_data.mac,i.session_data.ciphertext));e.session_id=r,t.push(e)}catch(e){o.logger.log("Failed to decrypt megolm session from backup",e,i)}return t}finally{n.free()}}))}keyMatches(e){return n(this,void 0,void 0,(function*(){const r=new t.Olm.PkDecryption;let n;try{n=r.init_with_private_key(e)}finally{r.free()}return n===this.authData.public_key}))}free(){this.publicKey.free()}}r.Curve25519=p,p.algorithmName="m.megolm_backup.v1.curve25519-aes-sha2";const v=new f.UnstableValue(null,"org.matrix.msc3270.v1.aes-hmac-sha2");class y{constructor(e,t){this.authData=e,this.key=t}static init(e,t){return n(this,void 0,void 0,(function*(){if(!e)throw new Error("auth_data missing");const r=yield t();if(e.mac){const{mac:t}=yield d.calculateKeyCheck(r,e.iv);if(e.mac.replace(/=+$/g,"")!==t.replace(/=+/g,""))throw new Error("Key does not match")}return new y(e,r)}))}static prepare(e){return n(this,void 0,void 0,(function*(){let t;const r={};if(e)if(e instanceof Uint8Array)t=new Uint8Array(e);else{const n=yield a.keyFromPassphrase(e);r.private_key_salt=n.salt,r.private_key_iterations=n.iterations,t=n.key}else t=function(e){const t=h.getCrypto();if(t)return t.randomBytes(e);if(null===window||void 0===window?void 0:window.crypto){const t=new Uint8Array(e);return window.crypto.getRandomValues(t),t}throw new Error("No usable crypto implementation")}(32);const{iv:n,mac:i}=yield d.calculateKeyCheck(t);return r.iv=n,r.mac=i,[t,r]}))}static checkBackupVersion(e){if(!("iv"in e.auth_data)||!("mac"in e.auth_data))throw new Error("Invalid backup data returned")}get untrusted(){return!1}encryptSession(e){return n(this,void 0,void 0,(function*(){const t=Object.assign({},e);return delete t.session_id,delete t.room_id,delete t.first_known_index,yield d.encryptAES(JSON.stringify(t),this.key,e.session_id)}))}decryptSessions(e){return n(this,void 0,void 0,(function*(){const t=[];for(const[r,n]of Object.entries(e))try{const e=JSON.parse(yield d.decryptAES(n.session_data,this.key,r));e.session_id=r,t.push(e)}catch(e){o.logger.log("Failed to decrypt megolm session from backup",e,n)}return t}))}keyMatches(e){return n(this,void 0,void 0,(function*(){if(this.authData.mac){const{mac:t}=yield d.calculateKeyCheck(e,this.authData.iv);return this.authData.mac.replace(/=+$/g,"")===t.replace(/=+/g,"")}return!0}))}free(){this.key.fill(0)}}r.Aes256=y,y.algorithmName=v.name,r.algorithmsByName={[p.algorithmName]:p,[y.algorithmName]:y},r.DefaultAlgorithm=p}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../NamespacedValue":60,"../client":64,"../logger":106,"../utils":137,"./aes":74,"./key_passphrase":84,"./olmlib":85,"./recoverykey":86,"./store/indexeddb-crypto-store":88}],81:[function(e,t,r){(function(t,n){(function(){"use strict";var i=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.DehydrationManager=r.DEHYDRATION_ALGORITHM=void 0;const s=e("./olmlib"),a=e("../crypto/store/indexeddb-crypto-store"),c=e("./aes"),u=o(e("another-json")),l=e("../logger");r.DEHYDRATION_ALGORITHM="org.matrix.msc2697.v1.olm.libolm_pickle";const d=6048e5;r.DehydrationManager=class{constructor(e){this.crypto=e,this.inProgress=!1,this.getDehydrationKeyFromCache()}getDehydrationKeyFromCache(){return i(this,void 0,void 0,(function*(){return yield this.crypto.cryptoStore.doTxn("readonly",[a.IndexedDBCryptoStore.STORE_ACCOUNT],(e=>{this.crypto.cryptoStore.getSecretStorePrivateKey(e,(e=>i(this,void 0,void 0,(function*(){if(e){const{key:i,keyInfo:o,deviceDisplayName:a,time:u}=e,l=n.from(this.crypto.olmDevice._pickleKey),h=yield c.decryptAES(i,l,r.DEHYDRATION_ALGORITHM);this.key=s.decodeBase64(h),this.keyInfo=o,this.deviceDisplayName=a;const f=Date.now(),g=Math.max(1,u+d-f);this.timeoutId=t.setTimeout(this.dehydrateDevice.bind(this),g)}}))),"dehydration")}))}))}setKeyAndQueueDehydration(e,t={},r){return i(this,void 0,void 0,(function*(){(yield this.setKey(e,t,r))||this.dehydrateDevice()}))}setKey(e,r={},n){return i(this,void 0,void 0,(function*(){if(!e)return this.timeoutId&&(t.clearTimeout(this.timeoutId),this.timeoutId=void 0),yield this.crypto.cryptoStore.doTxn("readwrite",[a.IndexedDBCryptoStore.STORE_ACCOUNT],(e=>{this.crypto.cryptoStore.storeSecretStorePrivateKey(e,"dehydration",null)})),this.key=void 0,void(this.keyInfo=void 0);let i=this.key&&e.length==this.key.length;for(let t=0;i&&t<e.length;t++)e[t]!=this.key[t]&&(i=!1);return i||(this.key=e,this.keyInfo=r,this.deviceDisplayName=n),i}))}dehydrateDevice(){return i(this,void 0,void 0,(function*(){if(this.inProgress)l.logger.log("Dehydration already in progress -- not starting new dehydration");else{this.inProgress=!0,this.timeoutId&&(t.clearTimeout(this.timeoutId),this.timeoutId=void 0);try{const e=n.from(this.crypto.olmDevice._pickleKey),i=yield c.encryptAES(s.encodeBase64(this.key),e,r.DEHYDRATION_ALGORITHM);yield this.crypto.cryptoStore.doTxn("readwrite",[a.IndexedDBCryptoStore.STORE_ACCOUNT],(e=>{this.crypto.cryptoStore.storeSecretStorePrivateKey(e,"dehydration",{keyInfo:this.keyInfo,key:i,deviceDisplayName:this.deviceDisplayName,time:Date.now()})})),l.logger.log("Attempting to dehydrate device"),l.logger.log("Creating account");const o=new t.Olm.Account;o.create();const h=JSON.parse(o.identity_keys()),f=o.max_number_of_one_time_keys();o.generate_one_time_keys(f/2),o.generate_fallback_key();const g=JSON.parse(o.one_time_keys()),p=JSON.parse(o.fallback_key());o.mark_keys_as_published();const v=o.pickle(new Uint8Array(this.key)),y={algorithm:r.DEHYDRATION_ALGORITHM,account:v};this.keyInfo.passphrase&&(y.passphrase=this.keyInfo.passphrase),l.logger.log("Uploading account to server");const m=(yield this.crypto.baseApis.http.authedRequest(void 0,"PUT","/dehydrated_device",void 0,{device_data:y,initial_device_display_name:this.deviceDisplayName},{prefix:"/_matrix/client/unstable/org.matrix.msc2697.v2"})).device_id;l.logger.log("Preparing device keys",m);const b={algorithms:this.crypto.supportedAlgorithms,device_id:m,user_id:this.crypto.userId,keys:{[`ed25519:${m}`]:h.ed25519,[`curve25519:${m}`]:h.curve25519}},S=o.sign(u.default.stringify(b));b.signatures={[this.crypto.userId]:{[`ed25519:${m}`]:S}},this.crypto.crossSigningInfo.getId("self_signing")&&(yield this.crypto.crossSigningInfo.signObject(b,"self_signing")),l.logger.log("Preparing one-time keys");const _={};for(const[e,t]of Object.entries(g.curve25519)){const r={key:t},n=o.sign(u.default.stringify(r));r.signatures={[this.crypto.userId]:{[`ed25519:${m}`]:n}},_[`signed_curve25519:${e}`]=r}l.logger.log("Preparing fallback keys");const E={};for(const[e,t]of Object.entries(p.curve25519)){const r={key:t,fallback:!0},n=o.sign(u.default.stringify(r));r.signatures={[this.crypto.userId]:{[`ed25519:${m}`]:n}},E[`signed_curve25519:${e}`]=r}return l.logger.log("Uploading keys to server"),yield this.crypto.baseApis.http.authedRequest(void 0,"POST","/keys/upload/"+encodeURI(m),void 0,{device_keys:b,one_time_keys:_,"org.matrix.msc2732.fallback_keys":E}),l.logger.log("Done dehydrating"),this.timeoutId=t.setTimeout(this.dehydrateDevice.bind(this),d),m}finally{this.inProgress=!1}}}))}stop(){this.timeoutId&&(t.clearTimeout(this.timeoutId),this.timeoutId=void 0)}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"../crypto/store/indexeddb-crypto-store":88,"../logger":106,"./aes":74,"./olmlib":85,"another-json":28,buffer:34}],82:[function(e,t,r){"use strict";var n;Object.defineProperty(r,"__esModule",{value:!0}),r.DeviceInfo=void 0,function(e){e[e.Blocked=-1]="Blocked",e[e.Unverified=0]="Unverified",e[e.Verified=1]="Verified"}(n||(n={}));class i{constructor(e){this.deviceId=e,this.keys={},this.verified=n.Unverified,this.known=!1,this.unsigned={},this.signatures={}}static fromStorage(e,t){const r=new i(t);for(const t in e)e.hasOwnProperty(t)&&(r[t]=e[t]);return r}toStorage(){return{algorithms:this.algorithms,keys:this.keys,verified:this.verified,known:this.known,unsigned:this.unsigned,signatures:this.signatures}}getFingerprint(){return this.keys["ed25519:"+this.deviceId]}getIdentityKey(){return this.keys["curve25519:"+this.deviceId]}getDisplayName(){return this.unsigned.device_display_name||null}isBlocked(){return this.verified==n.Blocked}isVerified(){return this.verified==n.Verified}isUnverified(){return this.verified==n.Unverified}isKnown(){return!0===this.known}}r.DeviceInfo=i,i.DeviceVerification={VERIFIED:n.Verified,UNVERIFIED:n.Unverified,BLOCKED:n.Blocked}},{}],83:[function(e,t,r){(function(t,n){(function(){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&i(t,e,r);return o(t,e),t},a=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.IncomingRoomKeyRequest=r.fixBackupKey=r.Crypto=r.isCryptoAvailable=r.verificationMethods=void 0;const u=c(e("another-json")),l=e("events"),d=e("../ReEmitter"),h=e("../logger"),f=e("./OlmDevice"),g=s(e("./olmlib")),p=e("./DeviceList"),v=e("./deviceinfo"),y=s(e("./algorithms")),m=e("./CrossSigning"),b=e("./EncryptionSetup"),S=e("./SecretStorage"),_=e("./OutgoingRoomKeyRequestManager"),E=e("./store/indexeddb-crypto-store"),k=e("./verification/QRCode"),w=e("./verification/SAS"),I=e("./key_passphrase"),T=e("./recoverykey"),R=e("./verification/request/VerificationRequest"),C=e("./verification/request/InRoomChannel"),O=e("./verification/request/ToDeviceChannel"),D=e("./verification/IllegalMethod"),A=e("../errors"),P=e("./aes"),x=e("./dehydration"),M=e("./backup"),U=e("../models/event"),K=v.DeviceInfo.DeviceVerification,B={[k.ReciprocateQRCode.NAME]:k.ReciprocateQRCode,[w.SAS.NAME]:w.SAS,[k.SHOW_QR_CODE_METHOD]:D.IllegalMethod,[k.SCAN_QR_CODE_METHOD]:D.IllegalMethod};r.verificationMethods={RECIPROCATE_QR_CODE:k.ReciprocateQRCode.NAME,SAS:w.SAS.NAME},r.isCryptoAvailable=function(){return Boolean(t.Olm)};class N extends l.EventEmitter{constructor(e,t,r,n,i,o,s,c){if(super(),this.baseApis=e,this.sessionStore=t,this.userId=r,this.deviceId=n,this.clientStore=i,this.cryptoStore=o,this.roomList=s,this.trustCrossSignedDevices=!0,this.lastOneTimeKeyCheck=null,this.oneTimeKeyCheckInProgress=!1,this.roomEncryptors={},this.roomDecryptors={},this.deviceKeys={},this.globalBlacklistUnverifiedDevices=!1,this.globalErrorOnUnknownDevices=!0,this.receivedRoomKeyRequests=[],this.receivedRoomKeyRequestCancellations=[],this.processingRoomKeyRequests=!1,this.lazyLoadMembers=!1,this.roomDeviceTrackingState={},this.lastNewSessionForced={},this.sendKeyRequestsImmediately=!1,this.onDeviceListUserCrossSigningUpdated=e=>a(this,void 0,void 0,(function*(){if(e===this.userId){const t=this.deviceList.getStoredCrossSigningForUser(e),r=t?t.getId():null,n=this.crossSigningInfo.getId(),i=n!==r;n&&r&&!i?yield this.checkOwnCrossSigningTrust():(this.storeTrustedSelfKeys(null),this.emit("crossSigning.keysChanged",{}),this.emit("userTrustStatusChanged",this.userId,this.checkUserTrust(e)))}else{yield this.checkDeviceVerifications(e);const t=this.deviceList.getStoredCrossSigningForUser(e);t&&(t.updateCrossSigningVerifiedBefore(this.checkUserTrust(e).isCrossSigningVerified()),this.deviceList.setRawStoredCrossSigningForUser(e,t.toStorage())),this.emit("userTrustStatusChanged",e,this.checkUserTrust(e))}})),this.onToDeviceEvent=e=>{try{h.logger.log(`received to_device ${e.getType()} from: ${e.getSender()} id: ${e.getId()}`),"m.room_key"==e.getType()||"m.forwarded_room_key"==e.getType()?this.onRoomKeyEvent(e):"m.room_key_request"==e.getType()?this.onRoomKeyRequestEvent(e):"m.secret.request"===e.getType()?this.secretStorage.onRequestReceived(e):"m.secret.send"===e.getType()?this.secretStorage.onSecretReceived(e):"org.matrix.room_key.withheld"===e.getType()?this.onRoomKeyWithheldEvent(e):e.getContent().transaction_id?this.onKeyVerificationMessage(e):"m.bad.encrypted"===e.getContent().msgtype?this.onToDeviceBadEncrypted(e):(e.isBeingDecrypted()||e.shouldAttemptDecryption())&&(e.isBeingDecrypted()||e.attemptDecryption(this),e.once("Event.decrypted",(e=>{this.onToDeviceEvent(e)})))}catch(e){h.logger.error("Error handling toDeviceEvent:",e)}},this.onTimelineEvent=(e,t,r,n,{liveEvent:i=!0}={})=>{if(!C.InRoomChannel.validateEvent(e,this.baseApis))return;this.handleVerificationEvent(e,this.inRoomVerificationRequests,(e=>{const t=new C.InRoomChannel(this.baseApis,e.getRoomId());return new R.VerificationRequest(t,this.verificationMethods,this.baseApis)}),i)},this.reEmitter=new d.ReEmitter(this),c){this.verificationMethods=new Map;for(const e of c)"string"==typeof e?B[e]&&this.verificationMethods.set(e,B[e]):e.NAME?this.verificationMethods.set(e.NAME,e):h.logger.warn(`Excluding unknown verification method ${e}`)}else this.verificationMethods=B;this.backupManager=new M.BackupManager(e,(()=>a(this,void 0,void 0,(function*(){const e=yield this.getSessionBackupPrivateKey();if(e)return e;const t=yield this.getSecret("m.megolm_backup.v1");if(t){const e=L(t);if(e){const[t]=yield this.getSecretStorageKey();yield this.storeSecret("m.megolm_backup.v1",e,[t])}return g.decodeBase64(e||t)}if(this.baseApis.cryptoCallbacks&&this.baseApis.cryptoCallbacks.getBackupKey)return yield this.baseApis.cryptoCallbacks.getBackupKey();throw new Error("Unable to get private key")})))),this.olmDevice=new f.OlmDevice(o),this.deviceList=new p.DeviceList(e,o,this.olmDevice),this.deviceList.on("userCrossSigningUpdated",this.onDeviceListUserCrossSigningUpdated),this.reEmitter.reEmit(this.deviceList,["crypto.devicesUpdated","crypto.willUpdateDevices"]),this.supportedAlgorithms=Object.keys(y.DECRYPTION_CLASSES),this.outgoingRoomKeyRequestManager=new _.OutgoingRoomKeyRequestManager(e,this.deviceId,this.cryptoStore),this.toDeviceVerificationRequests=new O.ToDeviceRequests,this.inRoomVerificationRequests=new C.InRoomRequests;const u=this.baseApis.cryptoCallbacks||{},l=m.createCryptoStoreCacheCallbacks(o,this.olmDevice);this.crossSigningInfo=new m.CrossSigningInfo(r,u,l),this.secretStorage=new S.SecretStorage(e,u,e),this.dehydrationManager=new x.DehydrationManager(this),!u.getCrossSigningKey&&u.getSecretStorageKey&&(u.getCrossSigningKey=e=>a(this,void 0,void 0,(function*(){return m.CrossSigningInfo.getFromSecretStorage(e,this.secretStorage)})))}static getOlmVersion(){return f.OlmDevice.getOlmVersion()}init({exportedOlmDevice:e,pickleKey:r}={}){return a(this,void 0,void 0,(function*(){h.logger.log("Crypto: initialising Olm..."),yield t.Olm.init(),h.logger.log(e?"Crypto: initialising Olm device from exported device...":"Crypto: initialising Olm device..."),yield this.olmDevice.init({fromExportedDevice:e,pickleKey:r}),h.logger.log("Crypto: loading device list..."),yield this.deviceList.load(),this.deviceKeys["ed25519:"+this.deviceId]=this.olmDevice.deviceEd25519Key,this.deviceKeys["curve25519:"+this.deviceId]=this.olmDevice.deviceCurve25519Key,h.logger.log("Crypto: fetching own devices...");let n=this.deviceList.getRawStoredDevicesForUser(this.userId);if(n||(n={}),!n[this.deviceId]){h.logger.log("Crypto: adding this device to the store...");const e={keys:this.deviceKeys,algorithms:this.supportedAlgorithms,verified:K.VERIFIED,known:!0};n[this.deviceId]=e,this.deviceList.storeDevicesForUser(this.userId,n),this.deviceList.saveIfDirty()}yield this.cryptoStore.doTxn("readonly",[E.IndexedDBCryptoStore.STORE_ACCOUNT],(e=>{this.cryptoStore.getCrossSigningKeys(e,(e=>{e&&0!==Object.keys(e).length&&(h.logger.log("Loaded cross-signing public keys from crypto store"),this.crossSigningInfo.setKeys(e))}))})),this.deviceList.startTrackingDeviceList(this.userId),h.logger.log("Crypto: checking for key backup..."),this.backupManager.checkAndStart()}))}getCryptoTrustCrossSignedDevices(){return this.trustCrossSignedDevices}setCryptoTrustCrossSignedDevices(e){this.trustCrossSignedDevices=e;for(const e of this.deviceList.getKnownUserIds()){const t=this.deviceList.getRawStoredDevicesForUser(e);for(const r of Object.keys(t)){const t=this.checkDeviceTrust(e,r);if(!t.isLocallyVerified()&&t.isCrossSigningVerified()){const t=this.deviceList.getStoredDevice(e,r);this.emit("deviceVerificationChanged",e,r,t)}}}}createRecoveryKeyFromPassphrase(e){return a(this,void 0,void 0,(function*(){const r=new t.Olm.PkDecryption;try{const t={};if(e){const n=yield I.keyFromPassphrase(e);t.passphrase={algorithm:"m.pbkdf2",iterations:n.iterations,salt:n.salt},t.pubkey=r.init_with_private_key(n.key)}else t.pubkey=r.generate_key();const n=r.get_private_key();return{keyInfo:t,encodedPrivateKey:T.encodeRecoveryKey(n),privateKey:n}}finally{r&&r.free()}}))}isCrossSigningReady(){return a(this,void 0,void 0,(function*(){const e=this.crossSigningInfo.getId(),t=(yield this.crossSigningInfo.isStoredInKeyCache())||(yield this.crossSigningInfo.isStoredInSecretStorage(this.secretStorage));return!(!e||!t)}))}isSecretStorageReady(){return a(this,void 0,void 0,(function*(){const e=yield this.secretStorage.hasKey(),t=yield this.crossSigningInfo.isStoredInSecretStorage(this.secretStorage),r=!this.backupManager.getKeyBackupEnabled()||(yield this.baseApis.isKeyBackupKeyStored());return!!(e&&t&&r)}))}bootstrapCrossSigning({authUploadDeviceSigningKeys:e,setupNewCrossSigning:t}={}){return a(this,void 0,void 0,(function*(){h.logger.log("Bootstrapping cross-signing");const r=this.baseApis.cryptoCallbacks,n=new b.EncryptionSetupBuilder(this.baseApis.store.accountData,r),i=new m.CrossSigningInfo(this.userId,n.crossSigningCallbacks,n.crossSigningCallbacks),o=()=>a(this,void 0,void 0,(function*(){i.resetKeys(),yield this.signObject(i.keys.master),n.addCrossSigningKeys(e,i.keys);const t=this.deviceList.getStoredDevice(this.userId,this.deviceId),r=yield i.signDevice(this.userId,t);n.addKeySignature(this.userId,this.deviceId,r),this.backupManager.backupInfo&&(yield i.signObject(this.backupManager.backupInfo.auth_data,"master"),n.addSessionBackup(this.backupManager.backupInfo))})),s=this.crossSigningInfo.getId(),c=yield this.crossSigningInfo.isStoredInKeyCache(),u=yield this.crossSigningInfo.isStoredInSecretStorage(this.secretStorage),l=c||u;h.logger.log({setupNewCrossSigning:t,publicKeysOnDevice:s,privateKeysInCache:c,privateKeysInStorage:u,privateKeysExistSomewhere:l}),!l||t?(h.logger.log("Cross-signing private keys not found locally or in secret storage, creating new keys"),yield o()):s&&c?h.logger.log("Cross-signing public keys trusted and private keys found locally"):u&&(h.logger.log("Cross-signing private keys not found locally, but they are available in secret storage, reading storage and caching locally"),yield this.checkOwnCrossSigningTrust({allowPrivateKeyRequests:!0}));const d=n.crossSigningCallbacks.privateKeys;if(d.size&&!this.baseApis.cryptoCallbacks.saveCrossSigningKeys){const e=new S.SecretStorage(n.accountDataClientAdapter,n.ssssCryptoCallbacks);(yield e.hasKey())&&(h.logger.log("Storing new cross-signing private keys in secret storage"),yield m.CrossSigningInfo.storeInSecretStorage(d,e))}const f=n.buildOperation();yield f.apply(this),yield n.persist(this),h.logger.log("Cross-signing ready")}))}bootstrapSecretStorage({createSecretStorageKey:e=(()=>a(this,void 0,void 0,(function*(){return{}}))),keyBackupInfo:t,setupNewKeyBackup:r,setupNewSecretStorage:n,getKeyBackupPassphrase:i}={}){return a(this,void 0,void 0,(function*(){h.logger.log("Bootstrapping Secure Secret Storage");const o=this.baseApis.cryptoCallbacks,s=new b.EncryptionSetupBuilder(this.baseApis.store.accountData,o),c=new S.SecretStorage(s.accountDataClientAdapter,s.ssssCryptoCallbacks);let u=null;const l=(e,t)=>a(this,void 0,void 0,(function*(){e=e||{},t&&(e.key=t);const{keyId:r,keyInfo:n}=yield c.addKey(S.SECRET_STORAGE_ALGORITHM_V1_AES,e);return t&&s.ssssCryptoCallbacks.addPrivateKey(r,n,t),yield c.setDefaultKeyId(r),r})),d=(e,t)=>a(this,void 0,void 0,(function*(){if(!t.mac){const r=yield this.baseApis.cryptoCallbacks.getSecretStorageKey({keys:{[e]:t}},"");if(r){const n=r[1];s.ssssCryptoCallbacks.addPrivateKey(e,t,n);const{iv:i,mac:o}=yield P.calculateKeyCheck(n);t.iv=i,t.mac=o,yield s.setAccountData(`m.secret_storage.key.${e}`,t)}}})),f=e=>a(this,void 0,void 0,(function*(){if(this.crossSigningInfo.getId()&&(yield this.crossSigningInfo.isStoredInKeyCache("master")))try{h.logger.log("Adding cross-signing signature to key backup"),yield this.crossSigningInfo.signObject(e,"master")}catch(e){h.logger.error("Signing key backup with cross-signing keys failed",e)}else h.logger.warn("Cross-signing keys not available, skipping signature on key backup")})),p=yield this.getSecretStorageKey(),[v,y]=p||[null,null],_=!n&&y&&y.algorithm===S.SECRET_STORAGE_ALGORITHM_V1_AES;if(h.logger.log({keyBackupInfo:t,setupNewKeyBackup:r,setupNewSecretStorage:n,storageExists:_,oldKeyInfo:y}),_||t)if(!_&&t){h.logger.log("Secret storage does not exist, using key backup key");const e=(yield this.getSessionBackupPrivateKey())||(yield i()),r={};t.auth_data.private_key_salt&&t.auth_data.private_key_iterations&&(r.passphrase={algorithm:"m.pbkdf2",iterations:t.auth_data.private_key_iterations,salt:t.auth_data.private_key_salt,bits:256}),u=yield l(r,e),yield c.store("m.megolm_backup.v1",g.encodeBase64(e),[u]),yield f(t.auth_data),s.addSessionBackup(t)}else h.logger.log("Secret storage exists"),y&&y.algorithm===S.SECRET_STORAGE_ALGORITHM_V1_AES&&(yield d(v,y));else{h.logger.log("Secret storage does not exist, creating new storage key");const{keyInfo:t,privateKey:r}=yield e();u=yield l(t,r)}if(!this.baseApis.cryptoCallbacks.saveCrossSigningKeys&&(yield this.isCrossSigningReady())&&(u||!(yield this.crossSigningInfo.isStoredInSecretStorage(c)))){h.logger.log("Copying cross-signing private keys from cache to secret storage");const e=yield this.crossSigningInfo.getCrossSigningKeysFromCache();yield m.CrossSigningInfo.storeInSecretStorage(e,c)}if(r&&!t){h.logger.log("Creating new message key backup version");const e=yield this.baseApis.prepareKeyBackupVersion(null,{secureSecretStorage:!1}),t=T.decodeRecoveryKey(e.recovery_key);yield c.store("m.megolm_backup.v1",g.encodeBase64(t));const r={algorithm:e.algorithm,auth_data:e.auth_data};yield f(r.auth_data),yield this.signObject(r.auth_data),s.addSessionBackup(r)}const E=yield c.get("m.megolm_backup.v1");if(E){h.logger.info("Got session backup key from secret storage: caching");const e=L(E);e&&(yield c.store("m.megolm_backup.v1",e,[u||v]));const t=new Uint8Array(g.decodeBase64(e||E));yield s.addSessionBackupPrivateKeyToCache(t)}else if(this.backupManager.getKeyBackupEnabled()){const e=(yield this.getSessionBackupPrivateKey())||(yield i());if(!e)return void h.logger.error("Key backup is enabled but couldn't get key backup key!");h.logger.info("Got session backup key from cache/user that wasn't in SSSS: saving to SSSS"),yield c.store("m.megolm_backup.v1",g.encodeBase64(e))}const k=s.buildOperation();yield k.apply(this),yield s.persist(this),h.logger.log("Secure Secret Storage ready")}))}addSecretStorageKey(e,t,r){return this.secretStorage.addKey(e,t,r)}hasSecretStorageKey(e){return this.secretStorage.hasKey(e)}getSecretStorageKey(e){return this.secretStorage.getKey(e)}storeSecret(e,t,r){return this.secretStorage.store(e,t,r)}getSecret(e){return this.secretStorage.get(e)}isSecretStored(e,t){return this.secretStorage.isStored(e,t)}requestSecret(e,t){return t||(t=Object.keys(this.deviceList.getRawStoredDevicesForUser(this.userId))),this.secretStorage.request(e,t)}getDefaultSecretStorageKeyId(){return this.secretStorage.getDefaultKeyId()}setDefaultSecretStorageKeyId(e){return this.secretStorage.setDefaultKeyId(e)}checkSecretStorageKey(e,t){return this.secretStorage.checkKey(e,t)}checkSecretStoragePrivateKey(e,r){let n=null;try{n=new t.Olm.PkDecryption;return n.init_with_private_key(e)===r}finally{n&&n.free()}}getSessionBackupPrivateKey(){return a(this,void 0,void 0,(function*(){let e=yield new Promise((e=>{this.cryptoStore.doTxn("readonly",[E.IndexedDBCryptoStore.STORE_ACCOUNT],(t=>{this.cryptoStore.getSecretStorePrivateKey(t,e,"m.megolm_backup.v1")}))}));if(e&&"string"==typeof e&&(e=new Uint8Array(g.decodeBase64(L(e)||e)),yield this.storeSessionBackupPrivateKey(e)),e&&e.ciphertext){const t=n.from(this.olmDevice._pickleKey),r=yield P.decryptAES(e,t,"m.megolm_backup.v1");e=g.decodeBase64(r)}return e}))}storeSessionBackupPrivateKey(e){return a(this,void 0,void 0,(function*(){if(!(e instanceof Uint8Array))throw new Error(`storeSessionBackupPrivateKey expects Uint8Array, got ${e}`);const t=n.from(this.olmDevice._pickleKey),r=yield P.encryptAES(g.encodeBase64(e),t,"m.megolm_backup.v1");return this.cryptoStore.doTxn("readwrite",[E.IndexedDBCryptoStore.STORE_ACCOUNT],(e=>{this.cryptoStore.storeSecretStorePrivateKey(e,"m.megolm_backup.v1",r)}))}))}checkCrossSigningPrivateKey(e,r){let n=null;try{n=new t.Olm.PkSigning;return n.init_with_seed(e)===r}finally{n&&n.free()}}afterCrossSigningLocalKeyChange(){return a(this,void 0,void 0,(function*(){h.logger.info("Starting cross-signing key change post-processing");const e=this.deviceList.getStoredDevice(this.userId,this.deviceId),t=yield this.crossSigningInfo.signDevice(this.userId,e);h.logger.info(`Starting background key sig upload for ${this.deviceId}`);const r=({shouldEmit:e})=>this.baseApis.uploadKeySignatures({[this.userId]:{[this.deviceId]:t}}).then((t=>{const{failures:n}=t||{};if(Object.keys(n||[]).length>0)throw e&&this.baseApis.emit("crypto.keySignatureUploadFailure",n,"afterCrossSigningLocalKeyChange",r),new A.KeySignatureUploadError("Key upload failed",{failures:n});h.logger.info(`Finished background key sig upload for ${this.deviceId}`)})).catch((e=>{h.logger.error(`Error during background key sig upload for ${this.deviceId}`,e)}));r({shouldEmit:!0});const n=this.baseApis.cryptoCallbacks.shouldUpgradeDeviceVerifications;if(n){h.logger.info("Starting device verification upgrade");const e={};for(const[t,r]of Object.entries(this.deviceList.crossSigningInfo)){const n=yield this.checkForDeviceVerificationUpgrade(t,m.CrossSigningInfo.fromStorage(r,t));n&&(e[t]=n)}if(Object.keys(e).length>0){h.logger.info(`Found ${Object.keys(e).length} verif users to upgrade`);try{const t=yield n({users:e});if(t)for(const r of t)r in e&&(yield this.baseApis.setDeviceVerified(r,e[r].crossSigningInfo.getId()))}catch(e){h.logger.log("shouldUpgradeDeviceVerifications threw an error: not upgrading",e)}}h.logger.info("Finished device verification upgrade")}h.logger.info("Finished cross-signing key change post-processing")}))}checkForDeviceVerificationUpgrade(e,t){return a(this,void 0,void 0,(function*(){const r=this.crossSigningInfo.checkUserTrust(t);if(t.firstUse&&!r.isVerified()){const r=this.deviceList.getRawStoredDevicesForUser(e),n=yield this.checkForValidDeviceSignature(e,t.keys.master,r);if(n.length)return{devices:n.map((e=>v.DeviceInfo.fromStorage(r[e],e))),crossSigningInfo:t}}}))}checkForValidDeviceSignature(e,t,r){return a(this,void 0,void 0,(function*(){const n=[];if(r&&t.signatures&&t.signatures[e])for(const i of Object.keys(t.signatures[e])){const[,o]=i.split(":",2);if(o in r&&r[o].verified===K.VERIFIED)try{yield g.verifySignature(this.olmDevice,t,e,o,r[o].keys[i]),n.push(o)}catch(e){}}return n}))}getCrossSigningId(e){return this.crossSigningInfo.getId(e)}getStoredCrossSigningForUser(e){return this.deviceList.getStoredCrossSigningForUser(e)}checkUserTrust(e){const t=this.deviceList.getStoredCrossSigningForUser(e);return t?this.crossSigningInfo.checkUserTrust(t):new m.UserTrustLevel(!1,!1,!1)}checkDeviceTrust(e,t){const r=this.deviceList.getStoredDevice(e,t);return this.checkDeviceInfoTrust(e,r)}checkDeviceInfoTrust(e,t){const r=!(!t||!t.isVerified()),n=this.deviceList.getStoredCrossSigningForUser(e);if(t&&n){const i=this.trustCrossSignedDevices||e===this.userId;return this.crossSigningInfo.checkDeviceTrust(n,t,r,i)}return new m.DeviceTrustLevel(!1,!1,r,!1)}checkOwnCrossSigningTrust({allowPrivateKeyRequests:e=!1}={}){return a(this,void 0,void 0,(function*(){const t=this.userId;yield this.downloadKeys([this.userId]);const r=yield this.crossSigningInfo.getCrossSigningKeysFromCache(),n=this.deviceList.getStoredCrossSigningForUser(t);if(!n)return void h.logger.error("Got cross-signing update event for user "+t+" but no new cross-signing information found!");const i=n.getId(),o=this.crossSigningInfo.getId()!==i,s=n.getId()&&!r.has("master");if(o&&h.logger.info("Got new master public key",i),e&&(o||s)){h.logger.info("Attempting to retrieve cross-signing master private key");let e=null;try{e=(yield this.crossSigningInfo.getCrossSigningKey("master",i))[1],h.logger.info("Got cross-signing master private key")}finally{e&&e.free()}}const a=this.crossSigningInfo.getId("self_signing"),c=this.crossSigningInfo.getId("user_signing");this.storeTrustedSelfKeys(n.keys);const u=a!==n.getId("self_signing"),l=c!==n.getId("user_signing"),d=n.getId("self_signing")&&!r.has("self_signing"),f=n.getId("user_signing")&&!r.has("user_signing"),g={};if(u&&h.logger.info("Got new self-signing key",n.getId("self_signing")),e&&(u||d)){h.logger.info("Attempting to retrieve cross-signing self-signing private key");let e=null;try{e=(yield this.crossSigningInfo.getCrossSigningKey("self_signing",n.getId("self_signing")))[1],h.logger.info("Got cross-signing self-signing private key")}finally{e&&e.free()}const t=this.deviceList.getStoredDevice(this.userId,this.deviceId),r=yield this.crossSigningInfo.signDevice(this.userId,t);g[this.deviceId]=r}if(l&&h.logger.info("Got new user-signing key",n.getId("user_signing")),e&&(l||f)){h.logger.info("Attempting to retrieve cross-signing user-signing private key");let e=null;try{e=(yield this.crossSigningInfo.getCrossSigningKey("user_signing",n.getId("user_signing")))[1],h.logger.info("Got cross-signing user-signing private key")}finally{e&&e.free()}}if(o){const e=this.crossSigningInfo.keys.master;yield this.signObject(e);const t=e.signatures[this.userId]["ed25519:"+this.deviceId];g[this.crossSigningInfo.getId()]=Object.assign({},e,{signatures:{[this.userId]:{["ed25519:"+this.deviceId]:t}}})}const p=Object.keys(g);if(p.length){const e=({shouldEmit:t})=>(h.logger.info(`Starting background key sig upload for ${p}`),this.baseApis.uploadKeySignatures({[this.userId]:g}).then((r=>{const{failures:n}=r||{};if(h.logger.info(`Finished background key sig upload for ${p}`),Object.keys(n||[]).length>0)throw t&&this.baseApis.emit("crypto.keySignatureUploadFailure",n,"checkOwnCrossSigningTrust",e),new A.KeySignatureUploadError("Key upload failed",{failures:n})})).catch((e=>{h.logger.error(`Error during background key sig upload for ${p}`,e)})));e({shouldEmit:!0})}this.emit("userTrustStatusChanged",t,this.checkUserTrust(t)),o&&(this.baseApis.emit("crossSigning.keysChanged",{}),yield this.afterCrossSigningLocalKeyChange()),yield this.backupManager.checkKeyBackup()}))}storeTrustedSelfKeys(e){return a(this,void 0,void 0,(function*(){e?this.crossSigningInfo.setKeys(e):this.crossSigningInfo.clearKeys(),yield this.cryptoStore.doTxn("readwrite",[E.IndexedDBCryptoStore.STORE_ACCOUNT],(e=>{this.cryptoStore.storeCrossSigningKeys(e,this.crossSigningInfo.keys)}))}))}checkDeviceVerifications(e){return a(this,void 0,void 0,(function*(){const t=this.baseApis.cryptoCallbacks.shouldUpgradeDeviceVerifications;if(t){if(h.logger.info(`Starting device verification upgrade for ${e}`),this.crossSigningInfo.keys.user_signing){const r=this.deviceList.getStoredCrossSigningForUser(e);if(r){const n=yield this.checkForDeviceVerificationUpgrade(e,r);if(n){(yield t({users:{[e]:n}})).includes(e)&&(yield this.baseApis.setDeviceVerified(e,r.getId()))}}}h.logger.info(`Finished device verification upgrade for ${e}`)}}))}setTrustedBackupPubKey(e){return a(this,void 0,void 0,(function*(){this.sessionStore.setLocalTrustedBackupPubKey(e),yield this.backupManager.checkKeyBackup()}))}enableLazyLoading(){this.lazyLoadMembers=!0}registerEventHandlers(e){e.on("RoomMember.membership",((e,t,r)=>{try{this.onRoomMembership(e,t,r)}catch(e){h.logger.error("Error handling membership change:",e)}})),e.on("toDeviceEvent",this.onToDeviceEvent),e.on("Room.timeline",this.onTimelineEvent),e.on("Event.decrypted",this.onTimelineEvent)}start(){this.outgoingRoomKeyRequestManager.start()}stop(){this.outgoingRoomKeyRequestManager.stop(),this.deviceList.stop(),this.dehydrationManager.stop()}getDeviceEd25519Key(){return this.olmDevice.deviceEd25519Key}getDeviceCurve25519Key(){return this.olmDevice.deviceCurve25519Key}setGlobalBlacklistUnverifiedDevices(e){this.globalBlacklistUnverifiedDevices=e}getGlobalBlacklistUnverifiedDevices(){return this.globalBlacklistUnverifiedDevices}setGlobalErrorOnUnknownDevices(e){this.globalErrorOnUnknownDevices=e}getGlobalErrorOnUnknownDevices(){return this.globalErrorOnUnknownDevices}uploadDeviceKeys(){const e={algorithms:this.supportedAlgorithms,device_id:this.deviceId,keys:this.deviceKeys,user_id:this.userId};return this.signObject(e).then((()=>this.baseApis.uploadKeysRequest({device_keys:e})))}updateOneTimeKeyCount(e){if(!isFinite(e))throw new TypeError("Parameter for updateOneTimeKeyCount has to be a number");this.oneTimeKeyCount=e}setNeedsNewFallback(e){this.needsNewFallback=!!e}getNeedsNewFallback(){return this.needsNewFallback}maybeUploadOneTimeKeys(){if(this.oneTimeKeyCheckInProgress)return;const e=Date.now();if(null!==this.lastOneTimeKeyCheck&&e-this.lastOneTimeKeyCheck<6e4)return;this.lastOneTimeKeyCheck=e;const t=this.olmDevice.maxNumberOfOneTimeKeys(),r=Math.floor(t/2),n=e=>a(this,void 0,void 0,(function*(){for(;r>e||this.getNeedsNewFallback();){if(r>e){h.logger.info("generating oneTimeKeys");const t=Math.min(r-e,5);yield this.olmDevice.generateOneTimeKeys(t)}this.getNeedsNewFallback()&&(h.logger.info("generating fallback key"),yield this.olmDevice.generateFallbackKey()),h.logger.info("calling uploadOneTimeKeys");const t=yield this.uploadOneTimeKeys();if(!t.one_time_key_counts||!t.one_time_key_counts.signed_curve25519)throw new Error("response for uploading keys does not contain one_time_key_counts.signed_curve25519");e=t.one_time_key_counts.signed_curve25519}}));this.oneTimeKeyCheckInProgress=!0,Promise.resolve().then((()=>void 0!==this.oneTimeKeyCount?Promise.resolve(this.oneTimeKeyCount):this.baseApis.uploadKeysRequest({}).then((e=>e.one_time_key_counts.signed_curve25519||0)))).then((e=>n(e))).catch((e=>{h.logger.error("Error uploading one-time keys",e.stack||e)})).finally((()=>{this.oneTimeKeyCount=void 0,this.oneTimeKeyCheckInProgress=!1}))}uploadOneTimeKeys(){return a(this,void 0,void 0,(function*(){const e=[],t={};if(this.getNeedsNewFallback()){const r=yield this.olmDevice.getFallbackKey();for(const[n,i]of Object.entries(r.curve25519)){const r={key:i,fallback:!0};t["signed_curve25519:"+n]=r,e.push(this.signObject(r))}this.setNeedsNewFallback(!1)}const r=yield this.olmDevice.getOneTimeKeys(),n={};for(const t in r.curve25519)if(r.curve25519.hasOwnProperty(t)){const i={key:r.curve25519[t]};n["signed_curve25519:"+t]=i,e.push(this.signObject(i))}yield Promise.all(e);const i=yield this.baseApis.uploadKeysRequest({one_time_keys:n,"org.matrix.msc2732.fallback_keys":t});return yield this.olmDevice.markKeysAsPublished(),i}))}downloadKeys(e,t){return this.deviceList.downloadKeys(e,t)}getStoredDevicesForUser(e){return this.deviceList.getStoredDevicesForUser(e)}getStoredDevice(e,t){return this.deviceList.getStoredDevice(e,t)}saveDeviceList(e){return this.deviceList.saveIfDirty(e)}setDeviceVerification(e,t,r,n,i){return a(this,void 0,void 0,(function*(){void 0===r&&(r=null),void 0===n&&(n=null),void 0===i&&(i=null);const o=this.deviceList.getStoredCrossSigningForUser(e);if(o&&o.getId()===t){if(null!==n||null!==i)throw new Error("Cannot set blocked or known for a cross-signing key");if(!r)throw new Error("Cannot set a cross-signing key as unverified");if(this.crossSigningInfo.getId()||e!==this.crossSigningInfo.userId||(this.storeTrustedSelfKeys(o.keys),this.emit("userTrustStatusChanged",this.userId,this.checkUserTrust(e))),e!==this.userId){h.logger.info("Master key "+o.getId()+" for "+e+" marked verified. Signing...");const r=yield this.crossSigningInfo.signUser(o);if(r){const n=({shouldEmit:i})=>a(this,void 0,void 0,(function*(){h.logger.info("Uploading signature for "+e+"...");const o=yield this.baseApis.uploadKeySignatures({[e]:{[t]:r}}),{failures:s}=o||{};if(Object.keys(s||[]).length>0)throw i&&this.baseApis.emit("crypto.keySignatureUploadFailure",s,"setDeviceVerification",n),new A.KeySignatureUploadError("Key upload failed",{failures:s})}));yield n({shouldEmit:!0})}return r}return o}const s=this.deviceList.getRawStoredDevicesForUser(e);if(!s||!s[t])throw new Error("Unknown device "+e+":"+t);const c=s[t];let u=c.verified;r?u=K.VERIFIED:null!==r&&u==K.VERIFIED&&(u=K.UNVERIFIED),n?u=K.BLOCKED:null!==n&&u==K.BLOCKED&&(u=K.UNVERIFIED);let l=c.known;if(null!==i&&(l=i),c.verified===u&&c.known===l||(c.verified=u,c.known=l,this.deviceList.storeDevicesForUser(e,s),this.deviceList.saveIfDirty()),r&&e===this.userId){let r;h.logger.info("Own device "+t+" marked verified: signing");if(this.checkDeviceTrust(e,t).isCrossSigningVerified()?h.logger.log(`Own device ${t} already cross-signing verified`):r=yield this.crossSigningInfo.signDevice(e,v.DeviceInfo.fromStorage(c,t)),r){const n=({shouldEmit:i})=>a(this,void 0,void 0,(function*(){h.logger.info("Uploading signature for "+t);const o=yield this.baseApis.uploadKeySignatures({[e]:{[t]:r}}),{failures:s}=o||{};if(Object.keys(s||[]).length>0)throw i&&this.baseApis.emit("crypto.keySignatureUploadFailure",s,"setDeviceVerification",n),new A.KeySignatureUploadError("Key upload failed",{failures:s})}));yield n({shouldEmit:!0})}}const d=v.DeviceInfo.fromStorage(c,t);return this.emit("deviceVerificationChanged",e,t,d),d}))}findVerificationRequestDMInProgress(e){return this.inRoomVerificationRequests.findRequestInProgress(e)}getVerificationRequestsToDeviceInProgress(e){return this.toDeviceVerificationRequests.getRequestsInProgress(e)}requestVerificationDM(e,t){const r=this.inRoomVerificationRequests.findRequestInProgress(t);if(r)return Promise.resolve(r);const n=new C.InRoomChannel(this.baseApis,t,e);return this.requestVerificationWithChannel(e,n,this.inRoomVerificationRequests)}requestVerification(e,t){t||(t=Object.keys(this.deviceList.getRawStoredDevicesForUser(e)));const r=this.toDeviceVerificationRequests.findRequestInProgress(e,t);if(r)return Promise.resolve(r);const n=new O.ToDeviceChannel(this.baseApis,e,t,O.ToDeviceChannel.makeTransactionId());return this.requestVerificationWithChannel(e,n,this.toDeviceVerificationRequests)}requestVerificationWithChannel(e,t,r){return a(this,void 0,void 0,(function*(){let e=new R.VerificationRequest(t,this.verificationMethods,this.baseApis);t.transactionId&&r.setRequestByChannel(t,e),yield e.sendRequest();const n=r.getRequestByChannel(t);return n?e=n:(h.logger.log(`Crypto: adding new request to requestsByTxnId with id ${t.transactionId} ${t.roomId}`),r.setRequestByChannel(t,e)),e}))}beginKeyVerification(e,t,r,n=null){let i;if(n){if(i=this.toDeviceVerificationRequests.getRequestBySenderAndTxnId(t,n),!i)throw new Error(`No request found for user ${t} with transactionId ${n}`)}else{n=O.ToDeviceChannel.makeTransactionId();const e=new O.ToDeviceChannel(this.baseApis,t,[r],n,r);i=new R.VerificationRequest(e,this.verificationMethods,this.baseApis),this.toDeviceVerificationRequests.setRequestBySenderAndTxnId(t,n,i)}return i.beginKeyVerification(e,{userId:t,deviceId:r})}legacyDeviceVerification(e,t,r){return a(this,void 0,void 0,(function*(){const n=O.ToDeviceChannel.makeTransactionId(),i=new O.ToDeviceChannel(this.baseApis,e,[t],n,t),o=new R.VerificationRequest(i,this.verificationMethods,this.baseApis);this.toDeviceVerificationRequests.setRequestBySenderAndTxnId(e,n,o);const s=o.beginKeyVerification(r,{userId:e,deviceId:t});return yield Promise.race([s.verify(),o.waitFor((e=>e.started))]),o}))}getOlmSessionsForUser(e){return a(this,void 0,void 0,(function*(){const t=this.getStoredDevicesForUser(e)||[],r={};for(let e=0;e<t.length;++e){const n=t[e],i=n.getIdentityKey(),o=yield this.olmDevice.getSessionInfoForDevice(i);r[n.deviceId]={deviceIdKey:i,sessions:o}}return r}))}getEventSenderDeviceInfo(e){const t=e.getSenderKey(),r=e.getWireContent().algorithm;if(!t||!r)return null;if(e.getForwardingCurve25519KeyChain().length>0)return null;if(e.isKeySourceUntrusted())return null;const n=this.deviceList.getDeviceByIdentityKey(r,t);if(null===n)return null;const i=e.getClaimedEd25519Key();return i?i!==n.getFingerprint()?(h.logger.warn("Event "+e.getId()+" claims ed25519 key "+i+" but sender device has key "+n.getFingerprint()),null):n:(h.logger.warn("Event "+e.getId()+" claims no ed25519 key: cannot verify sending device"),null)}getEventEncryptionInfo(e){const t={};if(t.senderKey=e.getSenderKey(),t.algorithm=e.getWireContent().algorithm,!t.senderKey||!t.algorithm)return t.encrypted=!1,t;t.encrypted=!0;e.getForwardingCurve25519KeyChain().length>0||e.isKeySourceUntrusted()?t.authenticated=!1:t.authenticated=!0,t.sender=this.deviceList.getDeviceByIdentityKey(t.algorithm,t.senderKey);const r=e.getClaimedEd25519Key();return r||(h.logger.warn("Event "+e.getId()+" claims no ed25519 key: cannot verify sending device"),t.mismatchedSender=!0),t.sender&&r!==t.sender.getFingerprint()&&(h.logger.warn("Event "+e.getId()+" claims ed25519 key "+r+"but sender device has key "+t.sender.getFingerprint()),t.mismatchedSender=!0),t}forceDiscardSession(e){const t=this.roomEncryptors[e];if(void 0===t)throw new Error("Room not encrypted");if(void 0===t.forceDiscardSession)throw new Error("Room encryption algorithm doesn't support session discarding");t.forceDiscardSession()}setRoomEncryption(e,t,r){return a(this,void 0,void 0,(function*(){if(!t.algorithm)return void h.logger.log("Ignoring setRoomEncryption with no algorithm");const n=this.roomList.getRoomEncryption(e);if(n&&JSON.stringify(n)!=JSON.stringify(t))return void h.logger.error("Ignoring m.room.encryption event which requests a change of config in "+e);if(this.roomEncryptors[e])return;let i=null;n||(i=this.roomList.setRoomEncryption(e,t));const o=y.ENCRYPTION_CLASSES[t.algorithm];if(!o)throw new Error("Unable to encrypt with "+t.algorithm);const s=new o({userId:this.userId,deviceId:this.deviceId,crypto:this,olmDevice:this.olmDevice,baseApis:this.baseApis,roomId:e,config:t});this.roomEncryptors[e]=s,i&&(yield i),this.lazyLoadMembers?h.logger.log("Enabling encryption in "+e):(h.logger.log("Enabling encryption in "+e+"; starting to track device lists for all users therein"),yield this.trackRoomDevices(e),r||this.deviceList.refreshOutdatedDeviceLists())}))}trackRoomDevices(e){const t=()=>a(this,void 0,void 0,(function*(){if(!this.roomEncryptors[e])return;const t=this.clientStore.getRoom(e);if(!t)throw new Error(`Unable to start tracking devices in unknown room ${e}`);h.logger.log(`Starting to track devices for room ${e} ...`);(yield t.getEncryptionTargetMembers()).forEach((e=>{this.deviceList.startTrackingDeviceList(e.userId)}))}));let r=this.roomDeviceTrackingState[e];return r||(r=t(),this.roomDeviceTrackingState[e]=r.catch((t=>{throw this.roomDeviceTrackingState[e]=null,t}))),r}ensureOlmSessionsForUsers(e){const t={};for(let r=0;r<e.length;++r){const n=e[r];t[n]=[];const i=this.getStoredDevicesForUser(n)||[];for(let e=0;e<i.length;++e){const r=i[e];r.getIdentityKey()!=this.olmDevice.deviceCurve25519Key&&(r.verified!=K.BLOCKED&&t[n].push(r))}}return g.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,t)}exportRoomKeys(){return a(this,void 0,void 0,(function*(){const e=[];return yield this.cryptoStore.doTxn("readonly",[E.IndexedDBCryptoStore.STORE_INBOUND_GROUP_SESSIONS],(t=>{this.cryptoStore.getAllEndToEndInboundGroupSessions(t,(t=>{if(null===t)return;const r=this.olmDevice.exportInboundGroupSession(t.senderKey,t.sessionId,t.sessionData);delete r.first_known_index,r.algorithm=g.MEGOLM_ALGORITHM,e.push(r)}))})),e}))}importRoomKeys(e,t={}){let r=0,n=0;const i=e.length;function o(){t.progressCallback({stage:"load_keys",successes:r,failures:n,total:i})}return Promise.all(e.map((e=>{if(!e.room_id||!e.algorithm)return h.logger.warn("ignoring room key entry with missing fields",e),n++,t.progressCallback&&o(),null;return this.getRoomDecryptor(e.room_id,e.algorithm).importRoomKey(e,t).finally((()=>{r++,t.progressCallback&&o()}))})))}countSessionsNeedingBackup(){return this.backupManager.countSessionsNeedingBackup()}prepareToEncrypt(e){const t=this.roomEncryptors[e.roomId];t&&t.prepareToEncrypt(e)}encryptEvent(e,t){return a(this,void 0,void 0,(function*(){if(!t)throw new Error("Cannot send encrypted messages in unknown rooms");const r=e.getRoomId(),n=this.roomEncryptors[r];if(!n)throw new Error("Room was previously configured to use encryption, but is no longer. Perhaps the homeserver is hiding the configuration event.");this.roomDeviceTrackingState[r]||this.trackRoomDevices(r),yield this.roomDeviceTrackingState[r];let i=e.getContent();const o=i["m.relates_to"];o&&(i=Object.assign({},i),delete i["m.relates_to"]);const s=yield n.encryptMessage(t,e.getType(),i);o&&(s["m.relates_to"]=o),e.makeEncrypted("m.room.encrypted",s,this.olmDevice.deviceCurve25519Key,this.olmDevice.deviceEd25519Key)}))}decryptEvent(e){return a(this,void 0,void 0,(function*(){if(e.isRedacted()){const t=new U.MatrixEvent(e.getUnsigned().redacted_because),r=yield this.decryptEvent(t);return{clearEvent:{room_id:e.getRoomId(),type:"m.room.message",content:{},unsigned:{redacted_because:r.clearEvent}}}}{const t=e.getWireContent(),r=this.getRoomDecryptor(e.getRoomId(),t.algorithm);return yield r.decryptEvent(e)}}))}handleDeviceListChanges(e,t){return a(this,void 0,void 0,(function*(){e.oldSyncToken&&(yield this.evalDeviceListChanges(t))}))}requestRoomKey(e,t,r=!1){return this.outgoingRoomKeyRequestManager.queueRoomKeyRequest(e,t,r).then((()=>{this.sendKeyRequestsImmediately&&this.outgoingRoomKeyRequestManager.sendQueuedRequests()})).catch((e=>{h.logger.error("Error requesting key for event",e)}))}cancelRoomKeyRequest(e){this.outgoingRoomKeyRequestManager.cancelRoomKeyRequest(e).catch((e=>{h.logger.warn("Error clearing pending room key requests",e)}))}cancelAndResendAllOutgoingKeyRequests(){return a(this,void 0,void 0,(function*(){yield this.outgoingRoomKeyRequestManager.cancelAndResendAllOutgoingRequests()}))}onCryptoEvent(e){return a(this,void 0,void 0,(function*(){const t=e.getRoomId(),r=e.getContent();try{yield this.setRoomEncryption(t,r,!0)}catch(e){h.logger.error("Error configuring encryption in room "+t+":",e)}}))}onSyncWillProcess(e){return a(this,void 0,void 0,(function*(){e.oldSyncToken||(h.logger.log("Initial sync performed - resetting device tracking state"),this.deviceList.stopTrackingAllDeviceLists(),this.deviceList.startTrackingDeviceList(this.userId),this.roomDeviceTrackingState={}),this.sendKeyRequestsImmediately=!1}))}onSyncCompleted(e){return a(this,void 0,void 0,(function*(){this.deviceList.setSyncToken(e.nextSyncToken),this.deviceList.saveIfDirty(),this.deviceList.startTrackingDeviceList(this.userId),this.deviceList.refreshOutdatedDeviceLists(),e.catchingUp||(this.maybeUploadOneTimeKeys(),this.processReceivedRoomKeyRequests(),this.outgoingRoomKeyRequestManager.sendQueuedRequests(),this.sendKeyRequestsImmediately=!0)}))}evalDeviceListChanges(e){return a(this,void 0,void 0,(function*(){if(e.changed&&Array.isArray(e.changed)&&e.changed.forEach((e=>{this.deviceList.invalidateUserDeviceList(e)})),e.left&&Array.isArray(e.left)&&e.left.length){const t=new Set(yield this.getTrackedE2eUsers());e.left.forEach((e=>{t.has(e)||this.deviceList.stopTrackingDeviceList(e)}))}}))}getTrackedE2eUsers(){return a(this,void 0,void 0,(function*(){const e=[];for(const t of this.getTrackedE2eRooms()){const r=yield t.getEncryptionTargetMembers();for(const t of r)e.push(t.userId)}return e}))}getTrackedE2eRooms(){return this.clientStore.getRooms().filter((e=>{if(!this.roomEncryptors[e.roomId])return!1;if(!this.roomDeviceTrackingState[e.roomId])return!1;const t=e.getMyMembership();return"join"===t||"invite"===t}))}onRoomKeyEvent(e){const t=e.getContent();if(!t.room_id||!t.algorithm)return void h.logger.error("key event is missing fields");this.backupManager.checkedForBackup||this.backupManager.checkAndStart();this.getRoomDecryptor(t.room_id,t.algorithm).onRoomKeyEvent(e)}onRoomKeyWithheldEvent(e){const t=e.getContent();if(!(("m.no_olm"===t.code||t.room_id&&t.session_id)&&t.algorithm&&t.sender_key))return void h.logger.error("key withheld event is missing fields");h.logger.info(`Got room key withheld event from ${e.getSender()} (${t.sender_key}) for ${t.algorithm}/${t.room_id}/${t.session_id} with reason ${t.code} (${t.reason})`);const r=this.getRoomDecryptor(t.room_id,t.algorithm);if(r.onRoomKeyWithheldEvent&&r.onRoomKeyWithheldEvent(e),!t.room_id){const e=this.getRoomDecryptors(t.algorithm);for(const r of e)r.retryDecryptionFromSender(t.sender_key)}}onKeyVerificationMessage(e){if(!O.ToDeviceChannel.validateEvent(e,this.baseApis))return;this.handleVerificationEvent(e,this.toDeviceVerificationRequests,(e=>{if(!O.ToDeviceChannel.canCreateRequest(O.ToDeviceChannel.getEventType(e)))return;const t=e.getContent(),r=t&&t.from_device;if(!r)return;const n=e.getSender(),i=new O.ToDeviceChannel(this.baseApis,n,[r]);return new R.VerificationRequest(i,this.verificationMethods,this.baseApis)}))}handleVerificationEvent(e,t,r,n=!0){return a(this,void 0,void 0,(function*(){let i=t.getRequest(e),o=!1;if(!i){if(i=r(e),!i)return void h.logger.log(`Crypto: could not find VerificationRequest for ${e.getType()}, and could not create one, so ignoring.`);o=!0,t.setRequest(e,i)}e.setVerificationRequest(i);try{yield i.channel.handleEvent(e,i,n)}catch(e){h.logger.error("error while handling verification event: "+e.message)}o&&!i.initiatedByMe&&!i.invalid&&!i.observeOnly&&this.baseApis.emit("crypto.verification.request",i)}))}onToDeviceBadEncrypted(e){return a(this,void 0,void 0,(function*(){const t=e.getWireContent(),r=e.getSender(),n=t.algorithm,i=t.sender_key,o=()=>{const e=this.getRoomDecryptors(g.MEGOLM_ALGORITHM);for(const t of e)t.retryDecryptionFromSender(i)};if(void 0===r||void 0===i||void 0===i)return;this.lastNewSessionForced[r]=this.lastNewSessionForced[r]||{};const s=this.lastNewSessionForced[r][i]||0;if(s+36e5>Date.now())return h.logger.debug("New session already forced with device "+r+":"+i+" at "+s+": not forcing another"),yield this.olmDevice.recordSessionProblem(i,"wedged",!0),void o();let a=this.deviceList.getDeviceByIdentityKey(n,i);if(!a&&(yield this.downloadKeys([r],!1),a=this.deviceList.getDeviceByIdentityKey(n,i),!a))return h.logger.info("Couldn't find device for identity key "+i+": not re-establishing session"),yield this.olmDevice.recordSessionProblem(i,"wedged",!1),void o();const c={};c[r]=[a],yield g.ensureOlmSessionsForDevices(this.olmDevice,this.baseApis,c,!0),this.lastNewSessionForced[r][i]=Date.now();const u={algorithm:g.OLM_ALGORITHM,sender_key:this.olmDevice.deviceCurve25519Key,ciphertext:{}};yield g.encryptMessageForDevice(u.ciphertext,this.userId,this.deviceId,this.olmDevice,r,a,{type:"m.dummy"}),yield this.olmDevice.recordSessionProblem(i,"wedged",!0),o(),yield this.baseApis.sendToDevice("m.room.encrypted",{[r]:{[a.deviceId]:u}});const l=yield this.outgoingRoomKeyRequestManager.getOutgoingSentRoomKeyRequest(r,a.deviceId);for(const e of l)this.requestRoomKey(e.requestBody,e.recipients,!0)}))}onRoomMembership(e,t,r){const n=t.roomId,i=this.roomEncryptors[n];i&&(this.roomDeviceTrackingState[n]&&("join"==t.membership?(h.logger.log("Join event for "+t.userId+" in "+n),this.deviceList.startTrackingDeviceList(t.userId)):"invite"==t.membership&&this.clientStore.getRoom(n).shouldEncryptForInvitedMembers()&&(h.logger.log("Invite event for "+t.userId+" in "+n),this.deviceList.startTrackingDeviceList(t.userId))),i.onRoomMembership(e,t,r))}onRoomKeyRequestEvent(e){const t=e.getContent();if("request"===t.action){const t=new q(e);this.receivedRoomKeyRequests.push(t)}else if("request_cancellation"===t.action){const t=new j(e);this.receivedRoomKeyRequestCancellations.push(t)}}processReceivedRoomKeyRequests(){return a(this,void 0,void 0,(function*(){if(!this.processingRoomKeyRequests){this.processingRoomKeyRequests=!0;try{const e=this.receivedRoomKeyRequests;this.receivedRoomKeyRequests=[];const t=this.receivedRoomKeyRequestCancellations;this.receivedRoomKeyRequestCancellations=[],yield Promise.all(e.map((e=>this.processReceivedRoomKeyRequest(e)))),yield Promise.all(t.map((e=>this.processReceivedRoomKeyRequestCancellation(e))))}catch(e){h.logger.error(`Error processing room key requsts: ${e}`)}finally{this.processingRoomKeyRequests=!1}}}))}processReceivedRoomKeyRequest(e){return a(this,void 0,void 0,(function*(){const t=e.userId,r=e.deviceId,n=e.requestBody,i=n.room_id,o=n.algorithm;if(h.logger.log(`m.room_key_request from ${t}:${r} for ${i} / ${n.session_id} (id ${e.requestId})`),t!==this.userId){if(!this.roomEncryptors[i])return void h.logger.debug(`room key request for unencrypted room ${i}`);const e=this.roomEncryptors[i],o=this.deviceList.getStoredDevice(t,r);if(!o)return void h.logger.debug(`Ignoring keyshare for unknown device ${t}:${r}`);try{yield e.reshareKeyWithDevice(n.sender_key,n.session_id,t,o)}catch(e){h.logger.warn("Failed to re-share keys for session "+n.session_id+" with device "+t+":"+o.deviceId,e)}return}if(r===this.deviceId)return void h.logger.log("Ignoring room key request from ourselves");if(!this.roomDecryptors[i])return void h.logger.log(`room key request for unencrypted room ${i}`);const s=this.roomDecryptors[i][o];if(s)if(yield s.hasKeysForKeyRequest(e)){if(e.share=()=>{s.shareKeysWithDevice(e)},this.checkDeviceTrust(t,r).isVerified())return h.logger.log("device is already verified: sharing keys"),void e.share();this.emit("crypto.roomKeyRequest",e)}else h.logger.log(`room key request for unknown session ${i} / `+n.session_id);else h.logger.log(`room key request for unknown alg ${o} in room ${i}`)}))}processReceivedRoomKeyRequestCancellation(e){return a(this,void 0,void 0,(function*(){h.logger.log(`m.room_key_request cancellation for ${e.userId}:${e.deviceId} (id ${e.requestId})`),this.emit("crypto.roomKeyRequestCancellation",e)}))}getRoomDecryptor(e,t){let r,n;if((e=e||null)&&(r=this.roomDecryptors[e],r||(this.roomDecryptors[e]=r={}),n=r[t],n))return n;const i=y.DECRYPTION_CLASSES[t];if(!i)throw new y.DecryptionError("UNKNOWN_ENCRYPTION_ALGORITHM",'Unknown encryption algorithm "'+t+'".');return n=new i({userId:this.userId,crypto:this,olmDevice:this.olmDevice,baseApis:this.baseApis,roomId:e}),r&&(r[t]=n),n}getRoomDecryptors(e){const t=[];for(const r of Object.values(this.roomDecryptors))e in r&&t.push(r[e]);return t}signObject(e){return a(this,void 0,void 0,(function*(){const t=e.signatures||{},r=e.unsigned;delete e.signatures,delete e.unsigned,t[this.userId]=t[this.userId]||{},t[this.userId]["ed25519:"+this.deviceId]=yield this.olmDevice.sign(u.default.stringify(e)),e.signatures=t,void 0!==r&&(e.unsigned=r)}))}}function L(e){if("string"!=typeof e||e.indexOf(",")<0)return null;const t=Uint8Array.from(e.split(","),(e=>parseInt(e)));return g.encodeBase64(t)}r.Crypto=N,r.fixBackupKey=L;class q{constructor(e){const t=e.getContent();this.userId=e.getSender(),this.deviceId=t.requesting_device_id,this.requestId=t.request_id,this.requestBody=t.body||{},this.share=()=>{throw new Error("don't know how to share keys for this request yet")}}}r.IncomingRoomKeyRequest=q;class j{constructor(e){const t=e.getContent();this.userId=e.getSender(),this.deviceId=t.requesting_device_id,this.requestId=t.request_id}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"../ReEmitter":61,"../errors":99,"../logger":106,"../models/event":113,"./CrossSigning":67,"./DeviceList":68,"./EncryptionSetup":69,"./OlmDevice":70,"./OutgoingRoomKeyRequestManager":71,"./SecretStorage":73,"./aes":74,"./algorithms":76,"./backup":80,"./dehydration":81,"./deviceinfo":82,"./key_passphrase":84,"./olmlib":85,"./recoverykey":86,"./store/indexeddb-crypto-store":88,"./verification/IllegalMethod":93,"./verification/QRCode":94,"./verification/SAS":95,"./verification/request/InRoomChannel":96,"./verification/request/ToDeviceChannel":97,"./verification/request/VerificationRequest":98,"another-json":28,buffer:34,events:36}],84:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.deriveKey=r.keyFromPassphrase=r.keyFromAuthData=void 0;const i=e("../randomstring"),o=5e5;function s(e,r,i,o=256){return n(this,void 0,void 0,(function*(){const n=t.crypto.subtle,s=t.TextEncoder;if(!n||!s)throw new Error("Password-based backup is not avaiable on this platform");const a=yield n.importKey("raw",(new s).encode(e),{name:"PBKDF2"},!1,["deriveBits"]),c=yield n.deriveBits({name:"PBKDF2",salt:(new s).encode(r),iterations:i,hash:"SHA-512"},a,o);return new Uint8Array(c)}))}r.keyFromAuthData=function(e,r){return n(this,void 0,void 0,(function*(){if(!t.Olm)throw new Error("Olm is not available");if(!e.private_key_salt||!e.private_key_iterations)throw new Error("Salt and/or iterations not found: this backup cannot be restored with a passphrase");return yield s(r,e.private_key_salt,e.private_key_iterations,e.private_key_bits||256)}))},r.keyFromPassphrase=function(e){return n(this,void 0,void 0,(function*(){if(!t.Olm)throw new Error("Olm is not available");const r=i.randomString(32);return{key:yield s(e,r,o,256),salt:r,iterations:o}}))},r.deriveKey=s}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../randomstring":123}],85:[function(e,t,r){(function(t,n){(function(){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&i(t,e,r);return o(t,e),t},a=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.decodeBase64=r.encodeUnpaddedBase64=r.encodeBase64=r.pkVerify=r.pkSign=r.verifySignature=r.ensureOlmSessionsForDevices=r.getExistingOlmSessions=r.encryptMessageForDevice=r.MEGOLM_BACKUP_ALGORITHM=r.MEGOLM_ALGORITHM=r.OLM_ALGORITHM=void 0;const u=c(e("another-json")),l=e("../logger"),d=s(e("../utils"));var h;function f(e,t,r,n){return a(this,void 0,void 0,(function*(){const i=n.deviceId;try{yield g(e,t,r,i,n.getFingerprint())}catch(e){return l.logger.error("Unable to verify signature on one-time key for device "+r+":"+i+":",e),null}let o;try{o=yield e.createOutboundSession(n.getIdentityKey(),t.key)}catch(e){return l.logger.error("Error starting olm session with device "+r+":"+i+": "+e),null}return l.logger.log("Started new olm sessionid "+o+" for device "+r+":"+i),o}))}function g(e,t,r,n,i){return a(this,void 0,void 0,(function*(){const o="ed25519:"+n,s=((t.signatures||{})[r]||{})[o];if(!s)throw Error("No signature");const a=Object.assign({},t);"unsigned"in a&&delete a.unsigned,delete a.signatures;const c=u.default.stringify(a);e.verifySignature(i,c,s)}))}function p(e){return n.from(e).toString("base64")}!function(e){e.Olm="m.olm.v1.curve25519-aes-sha2",e.Megolm="m.megolm.v1.aes-sha2",e.MegolmBackup="m.megolm_backup.v1.curve25519-aes-sha2"}(h||(h={})),r.OLM_ALGORITHM=h.Olm,r.MEGOLM_ALGORITHM=h.Megolm,r.MEGOLM_BACKUP_ALGORITHM=h.MegolmBackup,r.encryptMessageForDevice=function(e,t,r,n,i,o,s){return a(this,void 0,void 0,(function*(){const a=o.getIdentityKey(),c=yield n.getSessionIdForDevice(a);if(null===c)return;l.logger.log("Using sessionid "+c+" for device "+i+":"+o.deviceId);const u={sender:t,sender_device:r,keys:{ed25519:n.deviceEd25519Key},recipient:i,recipient_keys:{ed25519:o.getFingerprint()}};d.extend(u,s),e[a]=yield n.encryptMessage(a,c,JSON.stringify(u))}))},r.getExistingOlmSessions=function(e,t,r){return a(this,void 0,void 0,(function*(){const t={},n={},i=[];for(const[o,s]of Object.entries(r))for(const r of s){const s=r.deviceId,c=r.getIdentityKey();i.push((()=>a(this,void 0,void 0,(function*(){const i=yield e.getSessionIdForDevice(c,!0);null===i?(t[o]=t[o]||[],t[o].push(r)):(n[o]=n[o]||{},n[o][s]={device:r,sessionId:i})})))())}return yield Promise.all(i),[t,n]}))},r.ensureOlmSessionsForDevices=function(e,t,r,n=!1,i,o,s=l.logger){return a(this,void 0,void 0,(function*(){"number"==typeof n&&(s=o,o=i,i=n,n=!1);const a=[],c={},u={};for(const[,t]of Object.entries(r))for(const r of t){const t=r.getIdentityKey();t!==e.deviceCurve25519Key&&(e._sessionsInProgress[t]||(e._sessionsInProgress[t]=new Promise((r=>{u[t]=n=>{delete e._sessionsInProgress[t],r(n)}}))))}for(const[t,i]of Object.entries(r)){c[t]={};for(const r of i){const i=r.deviceId,o=r.getIdentityKey();if(o===e.deviceCurve25519Key){s.info("Attempted to start session with ourself! Ignoring"),c[t][i]={device:r,sessionId:null};continue}const l=`for ${o} (${t}:${i})`,d=yield e.getSessionIdForDevice(o,u[o],s);null!==d&&u[o]&&u[o](),(null===d||n)&&(n?s.info(`Forcing new Olm session ${l}`):s.info(`Making new Olm session ${l}`),a.push([t,i])),c[t][i]={device:r,sessionId:d}}}if(0===a.length)return c;const l="signed_curve25519";let d,h=`one-time keys for ${a.length} devices`;try{s.debug(`Claiming ${h}`),d=yield t.claimOneTimeKeys(a,l,i),s.debug(`Claimed ${h}`)}catch(e){for(const e of Object.values(u))e();throw s.log(`Failed to claim ${h}`,e,a),e}o&&"failures"in d&&o.push(...Object.keys(d.failures));const g=d.one_time_keys||{},p=[];for(const[t,i]of Object.entries(r)){const r=g[t]||{};for(let o=0;o<i.length;o++){const a=i[o],l=a.deviceId,d=a.getIdentityKey();if(d===e.deviceCurve25519Key)continue;if(c[t][l].sessionId&&!n)continue;const h=r[l]||{};let g=null;for(const e in h)0===e.indexOf("signed_curve25519:")&&(g=h[e]);g?p.push(f(e,g,t,a).then((e=>{u[d]&&u[d](e),c[t][l].sessionId=e}),(e=>{throw u[d]&&u[d](),e}))):(s.warn(`No one-time keys (alg=signed_curve25519) for device ${t}:${l}`),u[d]&&u[d]())}}return h=`Olm sessions for ${p.length} devices`,s.debug(`Starting ${h}`),yield Promise.all(p),s.debug(`Started ${h}`),c}))},r.verifySignature=g,r.pkSign=function(e,r,n,i){let o=!1;if(r instanceof Uint8Array){const e=new t.Olm.PkSigning;i=e.init_with_seed(r),r=e,o=!0}const s=e.signatures||{};delete e.signatures;const a=e.unsigned;e.unsigned&&delete e.unsigned;try{const t=s[n]||{};return s[n]=t,t["ed25519:"+i]=r.sign(u.default.stringify(e))}finally{e.signatures=s,a&&(e.unsigned=a),o&&r.free()}},r.pkVerify=function(e,r,n){const i="ed25519:"+r;if(!(e.signatures&&e.signatures[n]&&e.signatures[n][i]))throw new Error("No signature");const o=e.signatures[n][i],s=new t.Olm.Utility,a=e.signatures;delete e.signatures;const c=e.unsigned;e.unsigned&&delete e.unsigned;try{s.ed25519_verify(r,u.default.stringify(e),o)}finally{e.signatures=a,c&&(e.unsigned=c),s.free()}},r.encodeBase64=p,r.encodeUnpaddedBase64=function(e){return p(e).replace(/=+$/g,"")},r.decodeBase64=function(e){return n.from(e,"base64")}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"../logger":106,"../utils":137,"another-json":28,buffer:34}],86:[function(e,t,r){(function(t,n){(function(){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.decodeRecoveryKey=r.encodeRecoveryKey=void 0;const o=i(e("bs58")),s=[139,1];r.encodeRecoveryKey=function(e){const t=new n(s.length+e.length+1);t.set(s,0),t.set(e,s.length);let r=0;for(let e=0;e<t.length-1;++e)r^=t[e];return t[t.length-1]=r,o.default.encode(t).match(/.{1,4}/g).join(" ")},r.decodeRecoveryKey=function(e){const r=o.default.decode(e.replace(/ /g,""));let n=0;for(const e of r)n^=e;if(0!==n)throw new Error("Incorrect parity");for(let e=0;e<s.length;++e)if(r[e]!==s[e])throw new Error("Incorrect prefix");if(r.length!==s.length+t.Olm.PRIVATE_KEY_LENGTH+1)throw new Error("Incorrect length");return Uint8Array.from(r.slice(s.length,s.length+t.Olm.PRIVATE_KEY_LENGTH))}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{bs58:33,buffer:34}],87:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.upgradeDatabase=function(e,t){u.logger.log("Upgrading IndexedDBCryptoStore from version ".concat(t)+" to ".concat(10)),t<1&&function(e){var t=e.createObjectStore("outgoingRoomKeyRequests",{keyPath:"requestId"});t.createIndex("session",["requestBody.room_id","requestBody.session_id"]),t.createIndex("state","state")}(e);t<2&&e.createObjectStore("account");if(t<3){e.createObjectStore("sessions",{keyPath:["deviceKey","sessionId"]}).createIndex("deviceKey","deviceKey")}t<4&&e.createObjectStore("inbound_group_sessions",{keyPath:["senderCurve25519Key","sessionId"]});t<5&&e.createObjectStore("device_data");t<6&&e.createObjectStore("rooms");t<7&&e.createObjectStore("sessions_needing_backup",{keyPath:["senderCurve25519Key","sessionId"]});t<8&&e.createObjectStore("inbound_group_sessions_withheld",{keyPath:["senderCurve25519Key","sessionId"]});if(t<9){e.createObjectStore("session_problems",{keyPath:["deviceKey","time"]}).createIndex("deviceKey","deviceKey"),e.createObjectStore("notified_error_devices",{keyPath:["userId","deviceId"]})}t<10&&e.createObjectStore("shared_history_inbound_group_sessions",{keyPath:["roomId"]})},r.Backend=r.VERSION=void 0;var o=i(e("@babel/runtime/regenerator")),s=i(e("@babel/runtime/helpers/asyncToGenerator")),a=i(e("@babel/runtime/helpers/classCallCheck")),c=i(e("@babel/runtime/helpers/createClass")),u=e("../../logger"),l=n(e("../../utils"));function d(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return h(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return h(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}r.VERSION=10;var f=function(){function e(t){var r=this;(0,a.default)(this,e),this._db=t,this._nextTxnId=0,t.onversionchange=function(e){u.logger.log("versionchange for indexeddb ".concat(r._dbName,": closing")),t.close()}}var t,r,n;return(0,c.default)(e,[{key:"getOrAddOutgoingRoomKeyRequest",value:function(e){var t=this,r=e.requestBody;return new Promise((function(n,i){var o=t._db.transaction("outgoingRoomKeyRequests","readwrite");o.onerror=i,t._getOutgoingRoomKeyRequest(o,r,(function(t){if(t)return u.logger.log("already have key request outstanding for "+"".concat(r.room_id," / ").concat(r.session_id,": ")+"not sending another"),void n(t);u.logger.log("enqueueing key request for ".concat(r.room_id," / ")+r.session_id),o.oncomplete=function(){n(e)},o.objectStore("outgoingRoomKeyRequests").add(e)}))}))}},{key:"getOutgoingRoomKeyRequest",value:function(e){var t=this;return new Promise((function(r,n){var i=t._db.transaction("outgoingRoomKeyRequests","readonly");i.onerror=n,t._getOutgoingRoomKeyRequest(i,e,(function(e){r(e)}))}))}},{key:"_getOutgoingRoomKeyRequest",value:function(e,t,r){e.objectStore("outgoingRoomKeyRequests").index("session").openCursor([t.room_id,t.session_id]).onsuccess=function(e){var n=e.target.result;if(n){var i=n.value;l.deepCompare(i.requestBody,t)?r(i):n.continue()}else r(null)}}},{key:"getOutgoingRoomKeyRequestByState",value:function(e){if(0===e.length)return Promise.resolve(null);var t,r=0;var n=this._db.transaction("outgoingRoomKeyRequests","readonly"),i=n.objectStore("outgoingRoomKeyRequests"),o=e[r];return i.index("state").openCursor(o).onsuccess=function n(i){var o=i.target.result;if(o)t=o.value;else if(!(++r>=e.length)){var s=e[r];i.target.source.openCursor(s).onsuccess=n}},p(n).then((function(){return t}))}},{key:"getAllOutgoingRoomKeyRequestsByState",value:function(e){var t=this;return new Promise((function(r,n){var i=t._db.transaction("outgoingRoomKeyRequests","readonly").objectStore("outgoingRoomKeyRequests").index("state").getAll(e);i.onsuccess=function(e){return r(e.target.result)},i.onerror=function(e){return n(e.target.error)}}))}},{key:"getOutgoingRoomKeyRequestsByTarget",value:function(e,t,r){var n=0,i=[];var o=this._db.transaction("outgoingRoomKeyRequests","readonly"),s=o.objectStore("outgoingRoomKeyRequests"),a=r[n];return s.index("state").openCursor(a).onsuccess=function o(s){var a=s.target.result;if(a){var c=a.value;c.recipients.includes({userId:e,deviceId:t})&&i.push(c),a.continue()}else{if(++n>=r.length)return;var u=r[n];s.target.source.openCursor(u).onsuccess=o}},p(o).then((function(){return i}))}},{key:"updateOutgoingRoomKeyRequest",value:function(e,t,r){var n=null;var i=this._db.transaction("outgoingRoomKeyRequests","readwrite");return i.objectStore("outgoingRoomKeyRequests").openCursor(e).onsuccess=function(e){var i=e.target.result;if(i){var o=i.value;o.state==t?(Object.assign(o,r),i.update(o),n=o):u.logger.warn("Cannot update room key request from ".concat(t," ")+"as it was already updated to ".concat(o.state))}},p(i).then((function(){return n}))}},{key:"deleteOutgoingRoomKeyRequest",value:function(e,t){var r=this._db.transaction("outgoingRoomKeyRequests","readwrite");return r.objectStore("outgoingRoomKeyRequests").openCursor(e).onsuccess=function(e){var r=e.target.result;if(r){var n=r.value;n.state==t?r.delete():u.logger.warn("Cannot delete room key request in state ".concat(n.state," ")+"(expected ".concat(t,")"))}},p(r)}},{key:"getAccount",value:function(e,t){var r=e.objectStore("account").get("-");r.onsuccess=function(){try{t(r.result||null)}catch(t){g(e,t)}}}},{key:"storeAccount",value:function(e,t){e.objectStore("account").put(t,"-")}},{key:"getCrossSigningKeys",value:function(e,t){var r=e.objectStore("account").get("crossSigningKeys");r.onsuccess=function(){try{t(r.result||null)}catch(t){g(e,t)}}}},{key:"getSecretStorePrivateKey",value:function(e,t,r){var n=e.objectStore("account").get("ssss_cache:".concat(r));n.onsuccess=function(){try{t(n.result||null)}catch(t){g(e,t)}}}},{key:"storeCrossSigningKeys",value:function(e,t){e.objectStore("account").put(t,"crossSigningKeys")}},{key:"storeSecretStorePrivateKey",value:function(e,t,r){e.objectStore("account").put(r,"ssss_cache:".concat(t))}},{key:"countEndToEndSessions",value:function(e,t){var r=e.objectStore("sessions").count();r.onsuccess=function(){try{t(r.result)}catch(t){g(e,t)}}}},{key:"getEndToEndSessions",value:function(e,t,r){var n=t.objectStore("sessions").index("deviceKey").openCursor(e),i={};n.onsuccess=function(){var e=n.result;if(e)i[e.value.sessionId]={session:e.value.session,lastReceivedMessageTs:e.value.lastReceivedMessageTs},e.continue();else try{r(i)}catch(e){g(t,e)}}}},{key:"getEndToEndSession",value:function(e,t,r,n){var i=r.objectStore("sessions").get([e,t]);i.onsuccess=function(){try{i.result?n({session:i.result.session,lastReceivedMessageTs:i.result.lastReceivedMessageTs}):n(null)}catch(e){g(r,e)}}}},{key:"getAllEndToEndSessions",value:function(e,t){var r=e.objectStore("sessions").openCursor();r.onsuccess=function(){try{var n=r.result;n?(t(n.value),n.continue()):t(null)}catch(t){g(e,t)}}}},{key:"storeEndToEndSession",value:function(e,t,r,n){n.objectStore("sessions").put({deviceKey:e,sessionId:t,session:r.session,lastReceivedMessageTs:r.lastReceivedMessageTs})}},{key:"storeEndToEndSessionProblem",value:(n=(0,s.default)(o.default.mark((function e(t,r,n){var i;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(i=this._db.transaction("session_problems","readwrite")).objectStore("session_problems").put({deviceKey:t,type:r,fixed:n,time:Date.now()}),e.abrupt("return",p(i));case 4:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return n.apply(this,arguments)})},{key:"getEndToEndSessionProblem",value:(r=(0,s.default)(o.default.mark((function e(t,r){var n,i,s,a,c;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=this._db.transaction("session_problems","readwrite"),s=i.objectStore("session_problems"),a=s.index("deviceKey"),(c=a.getAll(t)).onsuccess=function(e){var t=c.result;if(t.length){t.sort((function(e,t){return e.time-t.time}));var i,o=t[t.length-1],s=d(t);try{for(s.s();!(i=s.n()).done;){var a=i.value;if(a.time>r)return void(n=Object.assign({},a,{fixed:o.fixed}))}}catch(e){s.e(e)}finally{s.f()}n=o.fixed?null:o}else n=null},e.next=7,p(i);case 7:return e.abrupt("return",n);case 8:case"end":return e.stop()}}),e,this)}))),function(e,t){return r.apply(this,arguments)})},{key:"filterOutNotifiedErrorDevices",value:(t=(0,s.default)(o.default.mark((function e(t){var r,n,i;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this._db.transaction("notified_error_devices","readwrite"),n=r.objectStore("notified_error_devices"),i=[],e.next=5,Promise.all(t.map((function(e){return new Promise((function(t){var r=e.userId,o=e.deviceInfo,s=n.get([r,o.deviceId]);s.onsuccess=function(){s.result||(n.put({userId:r,deviceId:o.deviceId}),i.push(e)),t()}}))})));case 5:return e.abrupt("return",i);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"getEndToEndInboundGroupSession",value:function(e,t,r,n){var i=!1,o=!1,s=r.objectStore("inbound_group_sessions").get([e,t]);s.onsuccess=function(){try{i=s.result?s.result.session:null,!1!==o&&n(i,o)}catch(e){g(r,e)}};var a=r.objectStore("inbound_group_sessions_withheld").get([e,t]);a.onsuccess=function(){try{o=a.result?a.result.session:null,!1!==i&&n(i,o)}catch(e){g(r,e)}}}},{key:"getAllEndToEndInboundGroupSessions",value:function(e,t){var r=e.objectStore("inbound_group_sessions").openCursor();r.onsuccess=function(){var n=r.result;if(n){try{t({senderKey:n.value.senderCurve25519Key,sessionId:n.value.sessionId,sessionData:n.value.session})}catch(t){g(e,t)}n.continue()}else try{t(null)}catch(t){g(e,t)}}}},{key:"addEndToEndInboundGroupSession",value:function(e,t,r,n){var i=n.objectStore("inbound_group_sessions").add({senderCurve25519Key:e,sessionId:t,session:r});i.onerror=function(r){"ConstraintError"===i.error.name?(r.stopPropagation(),r.preventDefault(),u.logger.log("Ignoring duplicate inbound group session: "+e+" / "+t)):g(n,new Error("Failed to add inbound group session: "+i.error))}}},{key:"storeEndToEndInboundGroupSession",value:function(e,t,r,n){n.objectStore("inbound_group_sessions").put({senderCurve25519Key:e,sessionId:t,session:r})}},{key:"storeEndToEndInboundGroupSessionWithheld",value:function(e,t,r,n){n.objectStore("inbound_group_sessions_withheld").put({senderCurve25519Key:e,sessionId:t,session:r})}},{key:"getEndToEndDeviceData",value:function(e,t){var r=e.objectStore("device_data").get("-");r.onsuccess=function(){try{t(r.result||null)}catch(t){g(e,t)}}}},{key:"storeEndToEndDeviceData",value:function(e,t){t.objectStore("device_data").put(e,"-")}},{key:"storeEndToEndRoom",value:function(e,t,r){r.objectStore("rooms").put(t,e)}},{key:"getEndToEndRooms",value:function(e,t){var r={},n=e.objectStore("rooms").openCursor();n.onsuccess=function(){var i=n.result;if(i)r[i.key]=i.value,i.continue();else try{t(r)}catch(t){g(e,t)}}}},{key:"getSessionsNeedingBackup",value:function(e){var t=this;return new Promise((function(r,n){var i=[],o=t._db.transaction(["sessions_needing_backup","inbound_group_sessions"],"readonly");o.onerror=n,o.oncomplete=function(){r(i)};var s=o.objectStore("sessions_needing_backup"),a=o.objectStore("inbound_group_sessions"),c=s.openCursor();c.onsuccess=function(){var t=c.result;if(t){var r=a.get(t.key);r.onsuccess=function(){i.push({senderKey:r.result.senderCurve25519Key,sessionId:r.result.sessionId,sessionData:r.result.session})},(!e||i.length<e)&&t.continue()}}}))}},{key:"countSessionsNeedingBackup",value:function(e){e||(e=this._db.transaction("sessions_needing_backup","readonly"));var t=e.objectStore("sessions_needing_backup");return new Promise((function(e,r){var n=t.count();n.onerror=r,n.onsuccess=function(){return e(n.result)}}))}},{key:"unmarkSessionsNeedingBackup",value:function(e,t){t||(t=this._db.transaction("sessions_needing_backup","readwrite"));var r=t.objectStore("sessions_needing_backup");return Promise.all(e.map((function(e){return new Promise((function(t,n){var i=r.delete([e.senderKey,e.sessionId]);i.onsuccess=t,i.onerror=n}))})))}},{key:"markSessionsNeedingBackup",value:function(e,t){t||(t=this._db.transaction("sessions_needing_backup","readwrite"));var r=t.objectStore("sessions_needing_backup");return Promise.all(e.map((function(e){return new Promise((function(t,n){var i=r.put({senderCurve25519Key:e.senderKey,sessionId:e.sessionId});i.onsuccess=t,i.onerror=n}))})))}},{key:"addSharedHistoryInboundGroupSession",value:function(e,t,r,n){n||(n=this._db.transaction("shared_history_inbound_group_sessions","readwrite"));var i=n.objectStore("shared_history_inbound_group_sessions"),o=i.get([e]);o.onsuccess=function(){var n=(o.result||{sessions:[]}).sessions;n.push([t,r]),i.put({roomId:e,sessions:n})}}},{key:"getSharedHistoryInboundGroupSessions",value:function(e,t){t||(t=this._db.transaction("shared_history_inbound_group_sessions","readonly"));var r=t.objectStore("shared_history_inbound_group_sessions").get([e]);return new Promise((function(e,t){r.onsuccess=function(){var t=(r.result||{sessions:[]}).sessions;e(t)},r.onerror=t}))}},{key:"doTxn",value:function(e,t,r){arguments.length>3&&void 0!==arguments[3]||u.logger;var n=this._db.transaction(t,e),i=p(n),o=r(n);return i.then((function(){return o}))}}]),e}();function g(e,t){e._mx_abortexception=t;try{e.abort()}catch(t){}}function p(e){return new Promise((function(t,r){e.oncomplete=function(){void 0!==e._mx_abortexception&&r(e._mx_abortexception),t()},e.onerror=function(t){void 0!==e._mx_abortexception?r(e._mx_abortexception):(u.logger.log("Error performing indexeddb txn",t),r(t.target.error))},e.onabort=function(t){void 0!==e._mx_abortexception?r(e._mx_abortexception):(u.logger.log("Error performing indexeddb txn",t),r(t.target.error))}}))}r.Backend=f},{"../../logger":106,"../../utils":137,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"@babel/runtime/regenerator":27}],88:[function(e,t,r){(function(t){(function(){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.IndexedDBCryptoStore=void 0;var o=i(e("@babel/runtime/helpers/classCallCheck")),s=i(e("@babel/runtime/helpers/createClass")),a=e("../../logger"),c=e("./localStorage-crypto-store"),u=e("./memory-crypto-store"),l=n(e("./indexeddb-crypto-store-backend")),d=e("../../errors"),h=n(e("../../indexeddb-helpers")),f=function(){function e(t,r){(0,o.default)(this,e),this._indexedDB=t,this._dbName=r,this._backendPromise=null,this._backend=null}return(0,s.default)(e,[{key:"startup",value:function(){var r=this;return this._backendPromise||(this._backendPromise=new Promise((function(e,t){if(r._indexedDB){a.logger.log("connecting to indexeddb ".concat(r._dbName));var n=r._indexedDB.open(r._dbName,l.VERSION);n.onupgradeneeded=function(e){var t=e.target.result,r=e.oldVersion;l.upgradeDatabase(t,r)},n.onblocked=function(){a.logger.log("can't yet open IndexedDBCryptoStore because it is open elsewhere")},n.onerror=function(e){a.logger.log("Error connecting to indexeddb",e),t(e.target.error)},n.onsuccess=function(t){var n=t.target.result;a.logger.log("connected to indexeddb ".concat(r._dbName)),e(new l.Backend(n))}}else t(new Error("no indexeddb support available"))})).then((function(t){return t.doTxn("readonly",[e.STORE_INBOUND_GROUP_SESSIONS,e.STORE_INBOUND_GROUP_SESSIONS_WITHHELD],(function(e){t.getEndToEndInboundGroupSession("","",e,(function(){}))})).then((function(){return t}))})).catch((function(e){if("VersionError"===e.name)throw a.logger.warn("Crypto DB is too new for us to use!",e),new d.InvalidCryptoStoreError(d.InvalidCryptoStoreError.TOO_NEW);a.logger.warn("unable to connect to indexeddb ".concat(r._dbName)+": falling back to localStorage store: ".concat(e));try{return new c.LocalStorageCryptoStore(t.localStorage)}catch(e){return a.logger.warn("unable to open localStorage: falling back to in-memory store: ".concat(e)),new u.MemoryCryptoStore}})).then((function(e){r._backend=e}))),this._backendPromise}},{key:"deleteAllData",value:function(){var e=this;return new Promise((function(t,r){if(e._indexedDB){a.logger.log("Removing indexeddb instance: ".concat(e._dbName));var n=e._indexedDB.deleteDatabase(e._dbName);n.onblocked=function(){a.logger.log("can't yet delete IndexedDBCryptoStore because it is open elsewhere")},n.onerror=function(e){a.logger.log("Error deleting data from indexeddb",e),r(e.target.error)},n.onsuccess=function(){a.logger.log("Removed indexeddb instance: ".concat(e._dbName)),t()}}else r(new Error("no indexeddb support available"))})).catch((function(e){a.logger.warn("unable to delete IndexedDBCryptoStore: ".concat(e))}))}},{key:"getOrAddOutgoingRoomKeyRequest",value:function(e){return this._backend.getOrAddOutgoingRoomKeyRequest(e)}},{key:"getOutgoingRoomKeyRequest",value:function(e){return this._backend.getOutgoingRoomKeyRequest(e)}},{key:"getOutgoingRoomKeyRequestByState",value:function(e){return this._backend.getOutgoingRoomKeyRequestByState(e)}},{key:"getAllOutgoingRoomKeyRequestsByState",value:function(e){return this._backend.getAllOutgoingRoomKeyRequestsByState(e)}},{key:"getOutgoingRoomKeyRequestsByTarget",value:function(e,t,r){return this._backend.getOutgoingRoomKeyRequestsByTarget(e,t,r)}},{key:"updateOutgoingRoomKeyRequest",value:function(e,t,r){return this._backend.updateOutgoingRoomKeyRequest(e,t,r)}},{key:"deleteOutgoingRoomKeyRequest",value:function(e,t){return this._backend.deleteOutgoingRoomKeyRequest(e,t)}},{key:"getAccount",value:function(e,t){this._backend.getAccount(e,t)}},{key:"storeAccount",value:function(e,t){this._backend.storeAccount(e,t)}},{key:"getCrossSigningKeys",value:function(e,t){this._backend.getCrossSigningKeys(e,t)}},{key:"getSecretStorePrivateKey",value:function(e,t,r){this._backend.getSecretStorePrivateKey(e,t,r)}},{key:"storeCrossSigningKeys",value:function(e,t){this._backend.storeCrossSigningKeys(e,t)}},{key:"storeSecretStorePrivateKey",value:function(e,t,r){this._backend.storeSecretStorePrivateKey(e,t,r)}},{key:"countEndToEndSessions",value:function(e,t){this._backend.countEndToEndSessions(e,t)}},{key:"getEndToEndSession",value:function(e,t,r,n){this._backend.getEndToEndSession(e,t,r,n)}},{key:"getEndToEndSessions",value:function(e,t,r){this._backend.getEndToEndSessions(e,t,r)}},{key:"getAllEndToEndSessions",value:function(e,t){this._backend.getAllEndToEndSessions(e,t)}},{key:"storeEndToEndSession",value:function(e,t,r,n){this._backend.storeEndToEndSession(e,t,r,n)}},{key:"storeEndToEndSessionProblem",value:function(e,t,r){return this._backend.storeEndToEndSessionProblem(e,t,r)}},{key:"getEndToEndSessionProblem",value:function(e,t){return this._backend.getEndToEndSessionProblem(e,t)}},{key:"filterOutNotifiedErrorDevices",value:function(e){return this._backend.filterOutNotifiedErrorDevices(e)}},{key:"getEndToEndInboundGroupSession",value:function(e,t,r,n){this._backend.getEndToEndInboundGroupSession(e,t,r,n)}},{key:"getAllEndToEndInboundGroupSessions",value:function(e,t){this._backend.getAllEndToEndInboundGroupSessions(e,t)}},{key:"addEndToEndInboundGroupSession",value:function(e,t,r,n){this._backend.addEndToEndInboundGroupSession(e,t,r,n)}},{key:"storeEndToEndInboundGroupSession",value:function(e,t,r,n){this._backend.storeEndToEndInboundGroupSession(e,t,r,n)}},{key:"storeEndToEndInboundGroupSessionWithheld",value:function(e,t,r,n){this._backend.storeEndToEndInboundGroupSessionWithheld(e,t,r,n)}},{key:"storeEndToEndDeviceData",value:function(e,t){this._backend.storeEndToEndDeviceData(e,t)}},{key:"getEndToEndDeviceData",value:function(e,t){this._backend.getEndToEndDeviceData(e,t)}},{key:"storeEndToEndRoom",value:function(e,t,r){this._backend.storeEndToEndRoom(e,t,r)}},{key:"getEndToEndRooms",value:function(e,t){this._backend.getEndToEndRooms(e,t)}},{key:"getSessionsNeedingBackup",value:function(e){return this._backend.getSessionsNeedingBackup(e)}},{key:"countSessionsNeedingBackup",value:function(e){return this._backend.countSessionsNeedingBackup(e)}},{key:"unmarkSessionsNeedingBackup",value:function(e,t){return this._backend.unmarkSessionsNeedingBackup(e,t)}},{key:"markSessionsNeedingBackup",value:function(e,t){return this._backend.markSessionsNeedingBackup(e,t)}},{key:"addSharedHistoryInboundGroupSession",value:function(e,t,r,n){this._backend.addSharedHistoryInboundGroupSession(e,t,r,n)}},{key:"getSharedHistoryInboundGroupSessions",value:function(e,t){return this._backend.getSharedHistoryInboundGroupSessions(e,t)}},{key:"doTxn",value:function(e,t,r,n){return this._backend.doTxn(e,t,r,n)}}],[{key:"exists",value:function(e,t){return h.exists(e,t)}}]),e}();r.IndexedDBCryptoStore=f,f.STORE_ACCOUNT="account",f.STORE_SESSIONS="sessions",f.STORE_INBOUND_GROUP_SESSIONS="inbound_group_sessions",f.STORE_INBOUND_GROUP_SESSIONS_WITHHELD="inbound_group_sessions_withheld",f.STORE_SHARED_HISTORY_INBOUND_GROUP_SESSIONS="shared_history_inbound_group_sessions",f.STORE_DEVICE_DATA="device_data",f.STORE_ROOMS="rooms",f.STORE_BACKUP="sessions_needing_backup"}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../errors":99,"../../indexeddb-helpers":104,"../../logger":106,"./indexeddb-crypto-store-backend":87,"./localStorage-crypto-store":89,"./memory-crypto-store":90,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13}],89:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.LocalStorageCryptoStore=void 0;var i=n(e("@babel/runtime/helpers/defineProperty")),o=n(e("@babel/runtime/regenerator")),s=n(e("@babel/runtime/helpers/asyncToGenerator")),a=n(e("@babel/runtime/helpers/slicedToArray")),c=n(e("@babel/runtime/helpers/classCallCheck")),u=n(e("@babel/runtime/helpers/createClass")),l=n(e("@babel/runtime/helpers/inherits")),d=n(e("@babel/runtime/helpers/possibleConstructorReturn")),h=n(e("@babel/runtime/helpers/getPrototypeOf")),f=e("../../logger"),g=e("./memory-crypto-store");function p(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return v(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function y(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,h.default)(e);if(t){var i=(0,h.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,d.default)(this,r)}}var m="crypto.",b="crypto.account",S="crypto.cross_signing_keys",_="crypto.notified_error_devices",E="crypto.device_data",k="crypto.inboundgroupsessions/",w="crypto.sessionsneedingbackup";function I(e){return"crypto.sessions/"+e}function T(e){return"crypto.session.problems/"+e}function R(e,t){return k+e+"/"+t}function C(e,t){return"crypto.inboundgroupsessions.withheld/"+e+"/"+t}function O(e){return"crypto.rooms/"+e}var D=function(e){(0,l.default)(h,e);var t,r,n,d=y(h);function h(e){var t;return(0,c.default)(this,h),(t=d.call(this)).store=e,t}return(0,u.default)(h,[{key:"countEndToEndSessions",value:function(e,t){for(var r=0,n=0;n<this.store.length;++n)this.store.key(n).startsWith(I(""))&&++r;t(r)}},{key:"_getEndToEndSessions",value:function(e,t,r){for(var n=A(this.store,I(e)),i={},o=0,s=Object.entries(n||{});o<s.length;o++){var c=(0,a.default)(s[o],2),u=c[0],l=c[1];i[u]="string"==typeof l?{session:l}:l}return i}},{key:"getEndToEndSession",value:function(e,t,r,n){n(this._getEndToEndSessions(e)[t]||{})}},{key:"getEndToEndSessions",value:function(e,t,r){r(this._getEndToEndSessions(e)||{})}},{key:"getAllEndToEndSessions",value:function(e,t){for(var r=0;r<this.store.length;++r)if(this.store.key(r).startsWith(I("")))for(var n=this.store.key(r).split("/")[1],i=0,o=Object.values(this._getEndToEndSessions(n));i<o.length;i++){t(o[i])}}},{key:"storeEndToEndSession",value:function(e,t,r,n){var i=this._getEndToEndSessions(e)||{};i[t]=r,P(this.store,I(e),i)}},{key:"storeEndToEndSessionProblem",value:(n=(0,s.default)(o.default.mark((function e(t,r,n){var i,s;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=T(t),(s=A(this.store,i)||[]).push({type:r,fixed:n,time:Date.now()}),s.sort((function(e,t){return e.time-t.time})),P(this.store,i,s);case 5:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return n.apply(this,arguments)})},{key:"getEndToEndSessionProblem",value:(r=(0,s.default)(o.default.mark((function e(t,r){var n,i,s,a,c,u;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=T(t),(i=A(this.store,n)||[]).length){e.next=4;break}return e.abrupt("return",null);case 4:s=i[i.length-1],a=p(i),e.prev=6,a.s();case 8:if((c=a.n()).done){e.next=14;break}if(!((u=c.value).time>r)){e.next=12;break}return e.abrupt("return",Object.assign({},u,{fixed:s.fixed}));case 12:e.next=8;break;case 14:e.next=19;break;case 16:e.prev=16,e.t0=e.catch(6),a.e(e.t0);case 19:return e.prev=19,a.f(),e.finish(19);case 22:if(!s.fixed){e.next=26;break}return e.abrupt("return",null);case 26:return e.abrupt("return",s);case 27:case"end":return e.stop()}}),e,this,[[6,16,19,22]])}))),function(e,t){return r.apply(this,arguments)})},{key:"filterOutNotifiedErrorDevices",value:(t=(0,s.default)(o.default.mark((function e(t){var r,n,s,a,c,u,l;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=A(this.store,_)||{},n=[],s=p(t);try{for(s.s();!(a=s.n()).done;)c=a.value,u=c.userId,l=c.deviceInfo,u in r?l.deviceId in r[u]||(n.push(c),r[u][l.deviceId]=!0):(n.push(c),r[u]=(0,i.default)({},l.deviceId,!0))}catch(e){s.e(e)}finally{s.f()}return P(this.store,_,r),e.abrupt("return",n);case 6:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"getEndToEndInboundGroupSession",value:function(e,t,r,n){n(A(this.store,R(e,t)),A(this.store,C(e,t)))}},{key:"getAllEndToEndInboundGroupSessions",value:function(e,t){for(var r=0;r<this.store.length;++r){var n=this.store.key(r);n.startsWith(k)&&t({senderKey:n.substr(k.length,43),sessionId:n.substr(k.length+44),sessionData:A(this.store,n)})}t(null)}},{key:"addEndToEndInboundGroupSession",value:function(e,t,r,n){A(this.store,R(e,t))||this.storeEndToEndInboundGroupSession(e,t,r,n)}},{key:"storeEndToEndInboundGroupSession",value:function(e,t,r,n){P(this.store,R(e,t),r)}},{key:"storeEndToEndInboundGroupSessionWithheld",value:function(e,t,r,n){P(this.store,C(e,t),r)}},{key:"getEndToEndDeviceData",value:function(e,t){t(A(this.store,E))}},{key:"storeEndToEndDeviceData",value:function(e,t){P(this.store,E,e)}},{key:"storeEndToEndRoom",value:function(e,t,r){P(this.store,O(e),t)}},{key:"getEndToEndRooms",value:function(e,t){for(var r={},n=O(""),i=0;i<this.store.length;++i){var o=this.store.key(i);if(o.startsWith(n))r[o.substr(n.length)]=A(this.store,o)}t(r)}},{key:"getSessionsNeedingBackup",value:function(e){var t=this,r=A(this.store,w)||{},n=[];for(var i in r){if(Object.prototype.hasOwnProperty.call(r,i))if("break"===function(){var r=i.substr(0,43),o=i.substr(44);if(t.getEndToEndInboundGroupSession(r,o,null,(function(e){n.push({senderKey:r,sessionId:o,sessionData:e})})),e&&i.length>=e)return"break"}())break}return Promise.resolve(n)}},{key:"countSessionsNeedingBackup",value:function(){var e=A(this.store,w)||{};return Promise.resolve(Object.keys(e).length)}},{key:"unmarkSessionsNeedingBackup",value:function(e){var t,r=A(this.store,w)||{},n=p(e);try{for(n.s();!(t=n.n()).done;){var i=t.value;delete r[i.senderKey+"/"+i.sessionId]}}catch(e){n.e(e)}finally{n.f()}return P(this.store,w,r),Promise.resolve()}},{key:"markSessionsNeedingBackup",value:function(e){var t,r=A(this.store,w)||{},n=p(e);try{for(n.s();!(t=n.n()).done;){var i=t.value;r[i.senderKey+"/"+i.sessionId]=!0}}catch(e){n.e(e)}finally{n.f()}return P(this.store,w,r),Promise.resolve()}},{key:"deleteAllData",value:function(){return this.store.removeItem(b),Promise.resolve()}},{key:"getAccount",value:function(e,t){t(A(this.store,b))}},{key:"storeAccount",value:function(e,t){P(this.store,b,t)}},{key:"getCrossSigningKeys",value:function(e,t){t(A(this.store,S))}},{key:"getSecretStorePrivateKey",value:function(e,t,r){t(A(this.store,m+"ssss_cache.".concat(r)))}},{key:"storeCrossSigningKeys",value:function(e,t){P(this.store,S,t)}},{key:"storeSecretStorePrivateKey",value:function(e,t,r){P(this.store,m+"ssss_cache.".concat(t),r)}},{key:"doTxn",value:function(e,t,r){return Promise.resolve(r(null))}}],[{key:"exists",value:function(e){for(var t=e.length,r=0;r<t;r++)if(e.key(r).startsWith(m))return!0;return!1}}]),h}(g.MemoryCryptoStore);function A(e,t){try{return JSON.parse(e.getItem(t))}catch(e){f.logger.log("Error: Failed to get key %s: %s",t,e.stack||e),f.logger.log(e.stack)}return null}function P(e,t,r){e.setItem(t,JSON.stringify(r))}r.LocalStorageCryptoStore=D},{"../../logger":106,"./memory-crypto-store":90,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/defineProperty":9,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/helpers/slicedToArray":22,"@babel/runtime/regenerator":27}],90:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.MemoryCryptoStore=void 0;var o=i(e("@babel/runtime/helpers/defineProperty")),s=i(e("@babel/runtime/helpers/slicedToArray")),a=i(e("@babel/runtime/regenerator")),c=i(e("@babel/runtime/helpers/asyncToGenerator")),u=i(e("@babel/runtime/helpers/classCallCheck")),l=i(e("@babel/runtime/helpers/createClass")),d=e("../../logger"),h=n(e("../../utils"));function f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function g(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?f(Object(r),!0).forEach((function(t){(0,o.default)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):f(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return v(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var y=function(){function e(){(0,u.default)(this,e),this._outgoingRoomKeyRequests=[],this._account=null,this._crossSigningKeys=null,this._privateKeys={},this._backupKeys={},this._sessions={},this._sessionProblems={},this._notifiedErrorDevices={},this._inboundGroupSessions={},this._inboundGroupSessionsWithheld={},this._deviceData=null,this._rooms={},this._sessionsNeedingBackup={},this._sharedHistoryInboundGroupSessions={}}var t,r,n,i;return(0,l.default)(e,[{key:"startup",value:(i=(0,c.default)(a.default.mark((function e(){return a.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this);case 1:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"deleteAllData",value:function(){return Promise.resolve()}},{key:"getOrAddOutgoingRoomKeyRequest",value:function(e){var t=this,r=e.requestBody;return h.promiseTry((function(){var n=t._getOutgoingRoomKeyRequest(r);return n?(d.logger.log("already have key request outstanding for "+"".concat(r.room_id," / ").concat(r.session_id,": ")+"not sending another"),n):(d.logger.log("enqueueing key request for ".concat(r.room_id," / ")+r.session_id),t._outgoingRoomKeyRequests.push(e),e)}))}},{key:"getOutgoingRoomKeyRequest",value:function(e){return Promise.resolve(this._getOutgoingRoomKeyRequest(e))}},{key:"_getOutgoingRoomKeyRequest",value:function(e){var t,r=p(this._outgoingRoomKeyRequests);try{for(r.s();!(t=r.n()).done;){var n=t.value;if(h.deepCompare(n.requestBody,e))return n}}catch(e){r.e(e)}finally{r.f()}return null}},{key:"getOutgoingRoomKeyRequestByState",value:function(e){var t,r=p(this._outgoingRoomKeyRequests);try{for(r.s();!(t=r.n()).done;){var n,i=t.value,o=p(e);try{for(o.s();!(n=o.n()).done;){var s=n.value;if(i.state===s)return Promise.resolve(i)}}catch(e){o.e(e)}finally{o.f()}}}catch(e){r.e(e)}finally{r.f()}return Promise.resolve(null)}},{key:"getAllOutgoingRoomKeyRequestsByState",value:function(e){return Promise.resolve(this._outgoingRoomKeyRequests.filter((function(t){return t.state==e})))}},{key:"getOutgoingRoomKeyRequestsByTarget",value:function(e,t,r){var n,i=[],o=p(this._outgoingRoomKeyRequests);try{for(o.s();!(n=o.n()).done;){var s,a=n.value,c=p(r);try{for(c.s();!(s=c.n()).done;){var u=s.value;a.state===u&&a.recipients.includes({userId:e,deviceId:t})&&i.push(a)}}catch(e){c.e(e)}finally{c.f()}}}catch(e){o.e(e)}finally{o.f()}return Promise.resolve(i)}},{key:"updateOutgoingRoomKeyRequest",value:function(e,t,r){var n,i=p(this._outgoingRoomKeyRequests);try{for(i.s();!(n=i.n()).done;){var o=n.value;if(o.requestId===e)return o.state!=t?(d.logger.warn("Cannot update room key request from ".concat(t," ")+"as it was already updated to ".concat(o.state)),Promise.resolve(null)):(Object.assign(o,r),Promise.resolve(o))}}catch(e){i.e(e)}finally{i.f()}return Promise.resolve(null)}},{key:"deleteOutgoingRoomKeyRequest",value:function(e,t){for(var r=0;r<this._outgoingRoomKeyRequests.length;r++){var n=this._outgoingRoomKeyRequests[r];if(n.requestId===e)return n.state!=t?(d.logger.warn("Cannot delete room key request in state ".concat(n.state," ")+"(expected ".concat(t,")")),Promise.resolve(null)):(this._outgoingRoomKeyRequests.splice(r,1),Promise.resolve(n))}return Promise.resolve(null)}},{key:"getAccount",value:function(e,t){t(this._account)}},{key:"storeAccount",value:function(e,t){this._account=t}},{key:"getCrossSigningKeys",value:function(e,t){t(this._crossSigningKeys)}},{key:"getSecretStorePrivateKey",value:function(e,t,r){return t(this._privateKeys[r]||null)}},{key:"storeCrossSigningKeys",value:function(e,t){this._crossSigningKeys=t}},{key:"storeSecretStorePrivateKey",value:function(e,t,r){this._privateKeys[t]=r}},{key:"countEndToEndSessions",value:function(e,t){return Object.keys(this._sessions).length}},{key:"getEndToEndSession",value:function(e,t,r,n){n((this._sessions[e]||{})[t]||null)}},{key:"getEndToEndSessions",value:function(e,t,r){r(this._sessions[e]||{})}},{key:"getAllEndToEndSessions",value:function(e,t){Object.entries(this._sessions).forEach((function(e){var r=(0,s.default)(e,2),n=r[0],i=r[1];Object.entries(i).forEach((function(e){var r=(0,s.default)(e,2),i=r[0],o=r[1];t(g(g({},o),{},{deviceKey:n,sessionId:i}))}))}))}},{key:"storeEndToEndSession",value:function(e,t,r,n){var i=this._sessions[e];void 0===i&&(i={},this._sessions[e]=i),i[t]=r}},{key:"storeEndToEndSessionProblem",value:(n=(0,c.default)(a.default.mark((function e(t,r,n){var i;return a.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(i=this._sessionProblems[t]=this._sessionProblems[t]||[]).push({type:r,fixed:n,time:Date.now()}),i.sort((function(e,t){return e.time-t.time}));case 3:case"end":return e.stop()}}),e,this)}))),function(e,t,r){return n.apply(this,arguments)})},{key:"getEndToEndSessionProblem",value:(r=(0,c.default)(a.default.mark((function e(t,r){var n,i,o,s,c;return a.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((n=this._sessionProblems[t]||[]).length){e.next=3;break}return e.abrupt("return",null);case 3:i=n[n.length-1],o=p(n),e.prev=5,o.s();case 7:if((s=o.n()).done){e.next=13;break}if(!((c=s.value).time>r)){e.next=11;break}return e.abrupt("return",Object.assign({},c,{fixed:i.fixed}));case 11:e.next=7;break;case 13:e.next=18;break;case 15:e.prev=15,e.t0=e.catch(5),o.e(e.t0);case 18:return e.prev=18,o.f(),e.finish(18);case 21:if(!i.fixed){e.next=25;break}return e.abrupt("return",null);case 25:return e.abrupt("return",i);case 26:case"end":return e.stop()}}),e,this,[[5,15,18,21]])}))),function(e,t){return r.apply(this,arguments)})},{key:"filterOutNotifiedErrorDevices",value:(t=(0,c.default)(a.default.mark((function e(t){var r,n,i,s,c,u,l;return a.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=this._notifiedErrorDevices,n=[],i=p(t);try{for(i.s();!(s=i.n()).done;)c=s.value,u=c.userId,l=c.deviceInfo,u in r?l.deviceId in r[u]||(n.push(c),r[u][l.deviceId]=!0):(n.push(c),r[u]=(0,o.default)({},l.deviceId,!0))}catch(e){i.e(e)}finally{i.f()}return e.abrupt("return",n);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"getEndToEndInboundGroupSession",value:function(e,t,r,n){var i=e+"/"+t;n(this._inboundGroupSessions[i]||null,this._inboundGroupSessionsWithheld[i]||null)}},{key:"getAllEndToEndInboundGroupSessions",value:function(e,t){for(var r=0,n=Object.keys(this._inboundGroupSessions);r<n.length;r++){var i=n[r];t({senderKey:i.substr(0,43),sessionId:i.substr(44),sessionData:this._inboundGroupSessions[i]})}t(null)}},{key:"addEndToEndInboundGroupSession",value:function(e,t,r,n){var i=e+"/"+t;void 0===this._inboundGroupSessions[i]&&(this._inboundGroupSessions[i]=r)}},{key:"storeEndToEndInboundGroupSession",value:function(e,t,r,n){this._inboundGroupSessions[e+"/"+t]=r}},{key:"storeEndToEndInboundGroupSessionWithheld",value:function(e,t,r,n){var i=e+"/"+t;this._inboundGroupSessionsWithheld[i]=r}},{key:"getEndToEndDeviceData",value:function(e,t){t(this._deviceData)}},{key:"storeEndToEndDeviceData",value:function(e,t){this._deviceData=e}},{key:"storeEndToEndRoom",value:function(e,t,r){this._rooms[e]=t}},{key:"getEndToEndRooms",value:function(e,t){t(this._rooms)}},{key:"getSessionsNeedingBackup",value:function(e){var t=[];for(var r in this._sessionsNeedingBackup)if(this._inboundGroupSessions[r]&&(t.push({senderKey:r.substr(0,43),sessionId:r.substr(44),sessionData:this._inboundGroupSessions[r]}),e&&r.length>=e))break;return Promise.resolve(t)}},{key:"countSessionsNeedingBackup",value:function(){return Promise.resolve(Object.keys(this._sessionsNeedingBackup).length)}},{key:"unmarkSessionsNeedingBackup",value:function(e){var t,r=p(e);try{for(r.s();!(t=r.n()).done;){var n=t.value,i=n.senderKey+"/"+n.sessionId;delete this._sessionsNeedingBackup[i]}}catch(e){r.e(e)}finally{r.f()}return Promise.resolve()}},{key:"markSessionsNeedingBackup",value:function(e){var t,r=p(e);try{for(r.s();!(t=r.n()).done;){var n=t.value,i=n.senderKey+"/"+n.sessionId;this._sessionsNeedingBackup[i]=!0}}catch(e){r.e(e)}finally{r.f()}return Promise.resolve()}},{key:"addSharedHistoryInboundGroupSession",value:function(e,t,r){var n=this._sharedHistoryInboundGroupSessions[e]||[];n.push([t,r]),this._sharedHistoryInboundGroupSessions[e]=n}},{key:"getSharedHistoryInboundGroupSessions",value:function(e){return Promise.resolve(this._sharedHistoryInboundGroupSessions[e]||[])}},{key:"doTxn",value:function(e,t,r){return Promise.resolve(r(null))}}]),e}();r.MemoryCryptoStore=y},{"../../logger":106,"../../utils":137,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/defineProperty":9,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"@babel/runtime/helpers/slicedToArray":22,"@babel/runtime/regenerator":27}],91:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.VerificationBase=r.SwitchStartEventError=void 0;var i=n(e("@babel/runtime/regenerator")),o=n(e("@babel/runtime/helpers/defineProperty")),s=n(e("@babel/runtime/helpers/slicedToArray")),a=n(e("@babel/runtime/helpers/asyncToGenerator")),c=n(e("@babel/runtime/helpers/createClass")),u=n(e("@babel/runtime/helpers/classCallCheck")),l=n(e("@babel/runtime/helpers/inherits")),d=n(e("@babel/runtime/helpers/possibleConstructorReturn")),h=n(e("@babel/runtime/helpers/getPrototypeOf")),f=n(e("@babel/runtime/helpers/wrapNativeSuper")),g=e("../../models/event"),p=e("events"),v=e("../../logger"),y=e("../deviceinfo"),m=e("./Error"),b=e("../CrossSigning");function S(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,h.default)(e);if(t){var i=(0,h.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,d.default)(this,r)}}var _=new Error("Verification timed out"),E=function(e){(0,l.default)(r,e);var t=S(r);function r(e){var n;return(0,u.default)(this,r),(n=t.call(this)).startEvent=e,n}return r}((0,f.default)(Error));r.SwitchStartEventError=E;var k=function(e){(0,l.default)(n,e);var t,r=S(n);function n(e,t,i,o,s,a){var c;return(0,u.default)(this,n),(c=r.call(this))._channel=e,c._baseApis=t,c.userId=i,c.deviceId=o,c.startEvent=s,c.request=a,c.cancelled=!1,c._done=!1,c._promise=null,c._transactionTimeoutTimer=null,c}return(0,c.default)(n,[{key:"_resetTimer",value:function(){var e=this;v.logger.info("Refreshing/starting the verification transaction timeout timer"),null!==this._transactionTimeoutTimer&&clearTimeout(this._transactionTimeoutTimer),this._transactionTimeoutTimer=setTimeout((function(){e._done||e.cancelled||(v.logger.info("Triggering verification timeout"),e.cancel(_))}),6e5)}},{key:"_endTimer",value:function(){null!==this._transactionTimeoutTimer&&(clearTimeout(this._transactionTimeoutTimer),this._transactionTimeoutTimer=null)}},{key:"_send",value:function(e,t){return this._channel.send(e,t)}},{key:"_waitForEvent",value:function(e){var t=this;if(this._done)return Promise.reject(new Error("Verification is already done"));var r=this.request.getEventFromOtherParty(e);return r?Promise.resolve(r):(this._expectedEvent=e,new Promise((function(e,r){t._resolveEvent=e,t._rejectEvent=r})))}},{key:"canSwitchStartEvent",value:function(){return!1}},{key:"switchStartEvent",value:function(e){if(this.canSwitchStartEvent(e))if(v.logger.log("Verification Base: switching verification start event",{restartingFlow:!!this._rejectEvent}),this._rejectEvent){var t=this._rejectEvent;this._rejectEvent=void 0,t(new E(e))}else this.startEvent=e}},{key:"handleEvent",value:function(e){if(!this._done)if(e.getType()===this._expectedEvent)"m.key.verification.done"!==this._expectedEvent&&(this._expectedEvent=void 0,this._rejectEvent=void 0,this._resetTimer(),this._resolveEvent(e));else if("m.key.verification.cancel"===e.getType()){var t=this._reject;if(this._reject=void 0,t){var r=e.getContent(),n=r.reason,i=r.code;t(new Error("Other side cancelled verification "+"because ".concat(n," (").concat(i,")")))}}else if(this._expectedEvent){var o=new Error("Unexpected message: expecting "+this._expectedEvent+" but got "+e.getType());if(this._expectedEvent=void 0,this._rejectEvent){var s=this._rejectEvent;this._rejectEvent=void 0,s(o)}this.cancel(o)}}},{key:"done",value:function(){if(this._endTimer(),!this._done)return this.request.onVerifierFinished(),this._resolve(),(0,b.requestKeysDuringVerification)(this._baseApis,this.userId,this.deviceId)}},{key:"cancel",value:function(e){if(this._endTimer(),!this._done){if(this.cancelled=!0,this.request.onVerifierCancelled(),this.userId&&this.deviceId)if(e===_){var t=(0,m.newTimeoutError)();this._send(t.getType(),t.getContent())}else if(e instanceof g.MatrixEvent){if(e.getSender()!==this.userId){var r=e.getContent();"m.key.verification.cancel"===e.getType()?(r.code=r.code||"m.unknown",r.reason=r.reason||r.body||"Unknown reason",this._send("m.key.verification.cancel",r)):this._send("m.key.verification.cancel",{code:"m.unknown",reason:r.body||"Unknown reason"})}}else this._send("m.key.verification.cancel",{code:"m.unknown",reason:e.toString()});null!==this._promise?this._reject&&this._reject(e):this._promise=Promise.reject(e),this.emit("cancel",e)}}},{key:"verify",value:function(){var e=this;return this._promise||(this._promise=new Promise((function(t,r){e._resolve=function(){e._done=!0,e._endTimer(),t.apply(void 0,arguments)},e._reject=function(){e._done=!0,e._endTimer(),r.apply(void 0,arguments)}})),this._doVerification&&!this._started&&(this._started=!0,this._resetTimer(),Promise.resolve(this._doVerification()).then(this.done.bind(this),this.cancel.bind(this)))),this._promise}},{key:"_verifyKeys",value:(t=(0,a.default)(i.default.mark((function e(t,r,n){var a,c,u,l,d,h,f,g,p,m,b,S;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=[],c=0,u=Object.entries(r);case 2:if(!(c<u.length)){e.next=23;break}if(l=(0,s.default)(u[c],2),d=l[0],h=l[1],f=d.split(":",2)[1],!(g=this._baseApis.getStoredDevice(t,f))){e.next=12;break}return e.next=9,n(d,g,h);case 9:a.push(f),e.next=20;break;case 12:if(!(p=this._baseApis.crypto.deviceList.getStoredCrossSigningForUser(t))||p.getId()!==f){e.next=19;break}return e.next=16,n(d,y.DeviceInfo.fromStorage({keys:(0,o.default)({},d,f)},f),h);case 16:a.push(f),e.next=20;break;case 19:v.logger.warn("verification: Could not find device ".concat(f," to verify"));case 20:c++,e.next=2;break;case 23:if(a.length){e.next=25;break}throw new Error("No devices could be verified");case 25:v.logger.info("Verification completed! Marking devices verified: ",a),m=0,b=a;case 27:if(!(m<b.length)){e.next=34;break}return S=b[m],e.next=31,this._baseApis.setDeviceVerified(t,S);case 31:m++,e.next=27;break;case 34:case"end":return e.stop()}}),e,this)}))),function(e,r,n){return t.apply(this,arguments)})},{key:"initiatedByMe",get:function(){if(!this.startEvent)return!0;var e=this.startEvent.getSender(),t=this.startEvent.getContent();return e===this._baseApis.getUserId()&&t.from_device===this._baseApis.getDeviceId()}}]),n}(p.EventEmitter);r.VerificationBase=k},{"../../logger":106,"../../models/event":113,"../CrossSigning":67,"../deviceinfo":82,"./Error":92,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/defineProperty":9,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/helpers/slicedToArray":22,"@babel/runtime/helpers/wrapNativeSuper":26,"@babel/runtime/regenerator":27,events:36}],92:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.newVerificationError=i,r.errorFactory=o,r.errorFromEvent=function(e){var t=e.getContent();if(t){var r=t.code,n=t.reason;return{code:r,reason:n}}return{code:"Unknown error",reason:"m.unknown"}},r.newInvalidMessageError=r.newUserMismatchError=r.newKeyMismatchError=r.newUnexpectedMessageError=r.newUnknownMethodError=r.newUnknownTransactionError=r.newTimeoutError=r.newUserCancelledError=void 0;var n=e("../../models/event");function i(e,t,r){var i=Object.assign({},{code:e,reason:t},r);return new n.MatrixEvent({type:"m.key.verification.cancel",content:i})}function o(e,t){return function(r){return i(e,t,r)}}var s=o("m.user","Cancelled by user");r.newUserCancelledError=s;var a=o("m.timeout","Timed out");r.newTimeoutError=a;var c=o("m.unknown_transaction","Unknown transaction");r.newUnknownTransactionError=c;var u=o("m.unknown_method","Unknown method");r.newUnknownMethodError=u;var l=o("m.unexpected_message","Unexpected message");r.newUnexpectedMessageError=l;var d=o("m.key_mismatch","Key mismatch");r.newKeyMismatchError=d;var h=o("m.user_error","User mismatch");r.newUserMismatchError=h;var f=o("m.invalid_message","Invalid message");r.newInvalidMessageError=f},{"../../models/event":113}],93:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.IllegalMethod=void 0;var i=n(e("@babel/runtime/helpers/construct")),o=n(e("@babel/runtime/regenerator")),s=n(e("@babel/runtime/helpers/asyncToGenerator")),a=n(e("@babel/runtime/helpers/classCallCheck")),c=n(e("@babel/runtime/helpers/createClass")),u=n(e("@babel/runtime/helpers/inherits")),l=n(e("@babel/runtime/helpers/possibleConstructorReturn")),d=n(e("@babel/runtime/helpers/getPrototypeOf"));function h(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,d.default)(e);if(t){var i=(0,d.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,l.default)(this,r)}}var f=function(e){(0,u.default)(n,e);var t,r=h(n);function n(){return(0,a.default)(this,n),r.apply(this,arguments)}return(0,c.default)(n,[{key:"_doVerification",value:(t=(0,s.default)(o.default.mark((function e(){return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:throw new Error("Verification is not possible with this method");case 1:case"end":return e.stop()}}),e)}))),function(){return t.apply(this,arguments)})}],[{key:"factory",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,i.default)(n,t)}},{key:"NAME",get:function(){return"org.matrix.illegal_method"}}]),n}(e("./Base").VerificationBase);r.IllegalMethod=f},{"./Base":91,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/construct":7,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/regenerator":27}],94:[function(e,t,r){(function(t,n){(function(){"use strict";var i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.QRCodeData=r.ReciprocateQRCode=r.SCAN_QR_CODE_METHOD=r.SHOW_QR_CODE_METHOD=void 0;var o=i(e("@babel/runtime/helpers/construct")),s=i(e("@babel/runtime/regenerator")),a=i(e("@babel/runtime/helpers/asyncToGenerator")),c=i(e("@babel/runtime/helpers/classCallCheck")),u=i(e("@babel/runtime/helpers/createClass")),l=i(e("@babel/runtime/helpers/inherits")),d=i(e("@babel/runtime/helpers/possibleConstructorReturn")),h=i(e("@babel/runtime/helpers/getPrototypeOf")),f=e("./Base"),g=e("./Error"),p=e("../olmlib"),v=e("../../logger");function y(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,h.default)(e);if(t){var i=(0,h.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,d.default)(this,r)}}r.SHOW_QR_CODE_METHOD="m.qr_code.show.v1";r.SCAN_QR_CODE_METHOD="m.qr_code.scan.v1";var m=function(e){(0,l.default)(n,e);var t,r=y(n);function n(){return(0,c.default)(this,n),r.apply(this,arguments)}return(0,u.default)(n,[{key:"_doVerification",value:(t=(0,a.default)(s.default.mark((function e(){var t,r,n,i,o,a=this;return s.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.startEvent){e.next=2;break}throw new Error("It is not currently possible to start verificationwith this method yet.");case 2:if(t=this.request.qrCodeData,this.startEvent.getContent().secret===t.encodedSharedSecret){e.next=5;break}throw(0,g.newKeyMismatchError)();case 5:return e.next=7,new Promise((function(e,t){a.reciprocateQREvent={confirm:e,cancel:function(){return t((0,g.newUserCancelledError)())}},a.emit("show_reciprocate_qr",a.reciprocateQREvent)}));case 7:r={},e.t0=t.mode,e.next=e.t0===b?11:e.t0===S?14:e.t0===_?17:20;break;case 11:return n=t.otherUserMasterKey,r["ed25519:".concat(n)]=n,e.abrupt("break",20);case 14:return i=this.request.targetDevice.deviceId,r["ed25519:".concat(i)]=t.otherDeviceKey,e.abrupt("break",20);case 17:return o=t.myMasterKey,r["ed25519:".concat(o)]=o,e.abrupt("break",20);case 20:return e.next=22,this._verifyKeys(this.userId,r,(function(e,t,n){var i=r[e];if(!i)throw(0,g.newKeyMismatchError)();if(n!==i)throw v.logger.error("key ID from key info does not match"),(0,g.newKeyMismatchError)();for(var o in t.keys)if(o.startsWith("ed25519")){var s=r[o];if(!s)throw(0,g.newKeyMismatchError)();if(t.keys[o]!==s)throw v.logger.error("master key does not match"),(0,g.newKeyMismatchError)()}}));case 22:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})}],[{key:"factory",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,o.default)(n,t)}},{key:"NAME",get:function(){return"m.reciprocate.v1"}}]),n}(f.VerificationBase);r.ReciprocateQRCode=m;var b=0,S=1,_=2,E=function(){function e(t,r,n,i,o,s){(0,c.default)(this,e),this._sharedSecret=r,this._mode=t,this._otherUserMasterKey=n,this._otherDeviceKey=i,this._myMasterKey=o,this._buffer=s}var r,i;return(0,u.default)(e,[{key:"buffer",get:function(){return this._buffer}},{key:"mode",get:function(){return this._mode}},{key:"otherDeviceKey",get:function(){return this._otherDeviceKey}},{key:"otherUserMasterKey",get:function(){return this._otherUserMasterKey}},{key:"myMasterKey",get:function(){return this._myMasterKey}},{key:"encodedSharedSecret",get:function(){return this._sharedSecret}}],[{key:"create",value:(i=(0,a.default)(s.default.mark((function t(r,n){var i,o,a,c,u,l,d,h,f,g;return s.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=e._generateSharedSecret(),o=e._determineMode(r,n),a=null,c=null,u=null,o!==b){t.next=10;break}l=n.getStoredCrossSigningForUser(r.otherUserId),a=l.getId("master"),t.next=17;break;case 10:if(o!==S){t.next=16;break}return t.next=13,e._getOtherDeviceKey(r,n);case 13:c=t.sent,t.next=17;break;case 16:o===_&&(d=n.getUserId(),h=n.getStoredCrossSigningForUser(d),u=h.getId("master"));case 17:return f=e._generateQrData(r,n,o,i,a,c,u),g=e._generateBuffer(f),t.abrupt("return",new e(o,i,a,c,u,g));case 20:case"end":return t.stop()}}),t)}))),function(e,t){return i.apply(this,arguments)})},{key:"_generateSharedSecret",value:function(){var e=new Uint8Array(11);return t.crypto.getRandomValues(e),(0,p.encodeUnpaddedBase64)(e)}},{key:"_getOtherDeviceKey",value:(r=(0,a.default)(s.default.mark((function e(t,r){var n,i,o,a,c;return s.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.getUserId(),i=t.targetDevice,o=i?i.deviceId:null,a=r.getStoredDevice(n,o)){e.next=6;break}throw new Error("could not find device "+o);case 6:return c=a.getFingerprint(),e.abrupt("return",c);case 8:case"end":return e.stop()}}),e)}))),function(e,t){return r.apply(this,arguments)})},{key:"_determineMode",value:function(e,t){var r=t.getUserId(),n=e.otherUserId,i=b;r===n&&(i=t.checkUserTrust(r).isCrossSigningVerified()?S:_);return i}},{key:"_generateQrData",value:function(e,t,r,n,i,o,s){var a=t.getUserId(),c={prefix:"MATRIX",version:2,mode:r,transactionId:e.channel.transactionId,firstKeyB64:"",secondKeyB64:"",secretB64:n},u=t.getStoredCrossSigningForUser(a);return r===b?(c.firstKeyB64=u.getId("master"),c.secondKeyB64=i):r===S?(c.firstKeyB64=u.getId("master"),c.secondKeyB64=o):r===_&&(c.firstKeyB64=t.getDeviceEd25519Key(),c.secondKeyB64=s),c}},{key:"_generateBuffer",value:function(e){var t=n.alloc(0),r=function(e){var r=n.from([e]);t=n.concat([t,r])},i=function(e){var r=n.alloc(2);r.writeInt16BE(e,0),t=n.concat([t,r])},o=function(e,r){var o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=n.from(e,r);o&&i(s.byteLength),t=n.concat([t,s])},s=function(e){var r=(0,p.decodeBase64)(e),i=n.from(r);t=n.concat([t,i])};return o(e.prefix,"ascii",!1),r(e.version),r(e.mode),o(e.transactionId,"utf-8"),s(e.firstKeyB64),s(e.secondKeyB64),s(e.secretB64),t}}]),e}();r.QRCodeData=E}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"../../logger":106,"../olmlib":85,"./Base":91,"./Error":92,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/construct":7,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/regenerator":27,buffer:34}],95:[function(e,t,r){(function(t){(function(){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.SAS=void 0;var i=n(e("@babel/runtime/helpers/slicedToArray")),o=n(e("@babel/runtime/regenerator")),s=n(e("@babel/runtime/helpers/asyncToGenerator")),a=n(e("@babel/runtime/helpers/classCallCheck")),c=n(e("@babel/runtime/helpers/createClass")),u=n(e("@babel/runtime/helpers/inherits")),l=n(e("@babel/runtime/helpers/possibleConstructorReturn")),d=n(e("@babel/runtime/helpers/getPrototypeOf")),h=e("./Base"),f=n(e("another-json")),g=e("./Error"),p=e("../../logger");function v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,d.default)(e);if(t){var i=(0,d.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,l.default)(this,r)}}function y(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return m(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return m(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var b,S="m.key.verification.start",_=["m.key.verification.accept","m.key.verification.key","m.key.verification.mac"],E=(0,g.errorFactory)("m.mismatched_sas","Mismatched short authentication string"),k=(0,g.errorFactory)("m.mismatched_commitment","Mismatched commitment");var w=[["🐶","dog"],["🐱","cat"],["🦁","lion"],["🐎","horse"],["🦄","unicorn"],["🐷","pig"],["🐘","elephant"],["🐰","rabbit"],["🐼","panda"],["🐓","rooster"],["🐧","penguin"],["🐢","turtle"],["🐟","fish"],["🐙","octopus"],["🦋","butterfly"],["🌷","flower"],["🌳","tree"],["🌵","cactus"],["🍄","mushroom"],["🌏","globe"],["🌙","moon"],["☁️","cloud"],["🔥","fire"],["🍌","banana"],["🍎","apple"],["🍓","strawberry"],["🌽","corn"],["🍕","pizza"],["🎂","cake"],["❤️","heart"],["🙂","smiley"],["🤖","robot"],["🎩","hat"],["👓","glasses"],["🔧","spanner"],["🎅","santa"],["👍","thumbs up"],["☂️","umbrella"],["⌛","hourglass"],["⏰","clock"],["🎁","gift"],["💡","light bulb"],["📕","book"],["✏️","pencil"],["📎","paperclip"],["✂️","scissors"],["🔒","lock"],["🔑","key"],["🔨","hammer"],["☎️","telephone"],["🏁","flag"],["🚂","train"],["🚲","bicycle"],["✈️","aeroplane"],["🚀","rocket"],["🏆","trophy"],["⚽","ball"],["🎸","guitar"],["🎺","trumpet"],["🔔","bell"],["⚓️","anchor"],["🎧","headphones"],["📁","folder"],["📌","pin"]];var I={decimal:function(e){return[1e3+(e[0]<<5|e[1]>>3),1e3+((7&e[1])<<10|e[2]<<2|e[3]>>6),1e3+((63&e[3])<<7|e[4]>>1)]},emoji:function(e){return[e[0]>>2,(3&e[0])<<4|e[1]>>4,(15&e[1])<<2|e[2]>>6,63&e[2],e[3]>>2,(3&e[3])<<4|e[4]>>4,(15&e[4])<<2|e[5]>>6].map((function(e){return w[e]}))}};function T(e,t){var r,n={},i=y(t);try{for(i.s();!(r=i.n()).done;){var o=r.value;o in I&&(n[o]=I[o](e))}}catch(e){i.e(e)}finally{i.f()}return n}var R={"hkdf-hmac-sha256":"calculate_mac","hmac-sha256":"calculate_mac_long_kdf"};function C(e,t){return function(){for(var r=e[R[t]],n=arguments.length,i=new Array(n),o=0;o<n;o++)i[o]=arguments[o];var s=r.apply(e,i);return p.logger.log("SAS calculateMAC:",t,i,s),s}}var O={"curve25519-hkdf-sha256":function(e,t,r){var n="".concat(e._baseApis.getUserId(),"|").concat(e._baseApis.deviceId,"|")+"".concat(e.ourSASPubKey,"|"),i="".concat(e.userId,"|").concat(e.deviceId,"|").concat(e.theirSASPubKey,"|"),o="MATRIX_KEY_VERIFICATION_SAS|"+(e.initiatedByMe?n+i:i+n)+e._channel.transactionId;return t.generate_bytes(o,r)},curve25519:function(e,t,r){var n="".concat(e._baseApis.getUserId()).concat(e._baseApis.deviceId),i="".concat(e.userId).concat(e.deviceId),o="MATRIX_KEY_VERIFICATION_SAS"+(e.initiatedByMe?n+i:i+n)+e._channel.transactionId;return t.generate_bytes(o,r)}},D=["curve25519-hkdf-sha256","curve25519"],A=["sha256"],P=["hkdf-hmac-sha256","hmac-sha256"],x=Object.keys(I),M=new Set(D),U=new Set(A),K=new Set(P),B=new Set(x);function N(e,t){return e instanceof Array?e.filter((function(e){return t.has(e)})):[]}var L=function(e){(0,u.default)(m,e);var r,n,l,d,p,y=v(m);function m(){return(0,a.default)(this,m),y.apply(this,arguments)}return(0,c.default)(m,[{key:"_doVerification",value:(p=(0,s.default)(o.default.mark((function e(){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.Olm.init();case 2:return b=b||new t.Olm.Utility,e.next=5,this._baseApis.downloadKeys([this.userId]);case 5:r=!1;case 6:if(e.prev=6,!this.initiatedByMe){e.next=13;break}return e.next=10,this._doSendVerification();case 10:return e.abrupt("return",e.sent);case 13:return e.next=15,this._doRespondVerification();case 15:return e.abrupt("return",e.sent);case 16:e.next=26;break;case 18:if(e.prev=18,e.t0=e.catch(6),!(e.t0 instanceof h.SwitchStartEventError)){e.next=25;break}this.startEvent=e.t0.startEvent,r=!0,e.next=26;break;case 25:throw e.t0;case 26:if(r){e.next=6;break}case 27:case"end":return e.stop()}}),e,this,[[6,18]])}))),function(){return p.apply(this,arguments)})},{key:"canSwitchStartEvent",value:function(e){if(e.getType()!==S)return!1;var t=e.getContent();return t&&t.method===m.NAME&&this._waitingForAccept}},{key:"_sendStart",value:(d=(0,s.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._channel.completeContent(S,{method:m.NAME,from_device:this._baseApis.deviceId,key_agreement_protocols:D,hashes:A,message_authentication_codes:P,short_authentication_string:x}),e.next=3,this._channel.sendCompleted(S,t);case 3:return e.abrupt("return",t);case 4:case"end":return e.stop()}}),e,this)}))),function(){return d.apply(this,arguments)})},{key:"_doSendVerification",value:(l=(0,s.default)(o.default.mark((function e(){var r,n,a,c,u,l,d,p,v,y,m,S,_,w=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._waitingForAccept=!0,!this.startEvent){e.next=5;break}r=this._channel.completedContentFromEvent(this.startEvent),e.next=8;break;case 5:return e.next=7,this._sendStart();case 7:r=e.sent;case 8:if(this.initiatedByMe){e.next=10;break}throw new h.SwitchStartEventError(this.startEvent);case 10:return e.prev=10,e.next=13,this._waitForEvent("m.key.verification.accept");case 13:n=e.sent;case 14:return e.prev=14,this._waitingForAccept=!1,e.finish(14);case 17:if(a=n.getContent(),c=N(a.short_authentication_string,B),M.has(a.key_agreement_protocol)&&U.has(a.hash)&&K.has(a.message_authentication_code)&&c.length){e.next=21;break}throw(0,g.newUnknownMethodError)();case 21:if("string"==typeof a.commitment){e.next=23;break}throw(0,g.newInvalidMessageError)();case 23:return u=a.key_agreement_protocol,l=a.message_authentication_code,d=a.commitment,p=new t.Olm.SAS,e.prev=27,this.ourSASPubKey=p.get_pubkey(),e.next=31,this._send("m.key.verification.key",{key:this.ourSASPubKey});case 31:return e.next=33,this._waitForEvent("m.key.verification.key");case 33:if(n=e.sent,a=n.getContent(),v=a.key+f.default.stringify(r),b.sha256(v)===d){e.next=38;break}throw k();case 38:return this.theirSASPubKey=a.key,p.set_their_key(a.key),y=O[u](this,p,6),m=new Promise((function(e,t){var r;w.sasEvent={sas:T(y,c),confirm:(r=(0,s.default)(o.default.mark((function r(){return o.default.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,w._sendMAC(p,l);case 3:e(),r.next=9;break;case 6:r.prev=6,r.t0=r.catch(0),t(r.t0);case 9:case"end":return r.stop()}}),r,null,[[0,6]])}))),function(){return r.apply(this,arguments)}),cancel:function(){return t((0,g.newUserCancelledError)())},mismatch:function(){return t(E())}},w.emit("show_sas",w.sasEvent)})),e.next=44,Promise.all([this._waitForEvent("m.key.verification.mac").then((function(e){return w._expectedEvent="m.key.verification.done",e})),m]);case 44:return S=e.sent,_=(0,i.default)(S,1),n=_[0],a=n.getContent(),e.next=50,this._checkMAC(p,a,l);case 50:return e.prev=50,p.free(),e.finish(50);case 53:case"end":return e.stop()}}),e,this,[[10,,14,17],[27,,50,53]])}))),function(){return l.apply(this,arguments)})},{key:"_doRespondVerification",value:(n=(0,s.default)(o.default.mark((function e(){var r,n,a,c,u,l,d,h,p,v,y,m,S=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=this._channel.completedContentFromEvent(this.startEvent),n=N(D,new Set(r.key_agreement_protocols))[0],a=N(A,new Set(r.hashes))[0],c=N(P,new Set(r.message_authentication_codes))[0],u=N(r.short_authentication_string,B),void 0!==n&&void 0!==a&&void 0!==c&&u.length){e.next=7;break}throw(0,g.newUnknownMethodError)();case 7:return l=new t.Olm.SAS,e.prev=8,d=l.get_pubkey()+f.default.stringify(r),e.next=12,this._send("m.key.verification.accept",{key_agreement_protocol:n,hash:a,message_authentication_code:c,short_authentication_string:u,commitment:b.sha256(d)});case 12:return e.next=14,this._waitForEvent("m.key.verification.key");case 14:return h=e.sent,r=h.getContent(),this.theirSASPubKey=r.key,l.set_their_key(r.key),this.ourSASPubKey=l.get_pubkey(),e.next=21,this._send("m.key.verification.key",{key:this.ourSASPubKey});case 21:return p=O[n](this,l,6),v=new Promise((function(e,t){var r;S.sasEvent={sas:T(p,u),confirm:(r=(0,s.default)(o.default.mark((function r(){return o.default.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,S._sendMAC(l,c);case 3:e(),r.next=9;break;case 6:r.prev=6,r.t0=r.catch(0),t(r.t0);case 9:case"end":return r.stop()}}),r,null,[[0,6]])}))),function(){return r.apply(this,arguments)}),cancel:function(){return t((0,g.newUserCancelledError)())},mismatch:function(){return t(E())}},S.emit("show_sas",S.sasEvent)})),e.next=25,Promise.all([this._waitForEvent("m.key.verification.mac").then((function(e){return S._expectedEvent="m.key.verification.done",e})),v]);case 25:return y=e.sent,m=(0,i.default)(y,1),h=m[0],r=h.getContent(),e.next=31,this._checkMAC(l,r,c);case 31:return e.prev=31,l.free(),e.finish(31);case 34:case"end":return e.stop()}}),e,this,[[8,,31,34]])}))),function(){return n.apply(this,arguments)})},{key:"_sendMAC",value:function(e,t){var r={},n=[],i="MATRIX_KEY_VERIFICATION_MAC"+this._baseApis.getUserId()+this._baseApis.deviceId+this.userId+this.deviceId+this._channel.transactionId,o="ed25519:".concat(this._baseApis.deviceId);r[o]=C(e,t)(this._baseApis.getDeviceEd25519Key(),i+o),n.push(o);var s=this._baseApis.getCrossSigningId();if(s){var a="ed25519:".concat(s);r[a]=C(e,t)(s,i+a),n.push(a)}var c=C(e,t)(n.sort().join(","),i+"KEY_IDS");return this._send("m.key.verification.mac",{mac:r,keys:c})}},{key:"_checkMAC",value:(r=(0,s.default)(o.default.mark((function e(t,r,n){var i;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i="MATRIX_KEY_VERIFICATION_MAC"+this.userId+this.deviceId+this._baseApis.getUserId()+this._baseApis.deviceId+this._channel.transactionId,r.keys===C(t,n)(Object.keys(r.mac).sort().join(","),i+"KEY_IDS")){e.next=3;break}throw(0,g.newKeyMismatchError)();case 3:return e.next=5,this._verifyKeys(this.userId,r.mac,(function(e,r,o){if(o!==C(t,n)(r.keys[e],i+e))throw(0,g.newKeyMismatchError)()}));case 5:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"events",get:function(){return _}}],[{key:"NAME",get:function(){return"m.sas.v1"}}]),m}(h.VerificationBase);r.SAS=L}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../logger":106,"./Base":91,"./Error":92,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/helpers/slicedToArray":22,"@babel/runtime/regenerator":27,"another-json":28}],96:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.InRoomRequests=r.InRoomChannel=void 0;var i=n(e("@babel/runtime/regenerator")),o=n(e("@babel/runtime/helpers/asyncToGenerator")),s=n(e("@babel/runtime/helpers/classCallCheck")),a=n(e("@babel/runtime/helpers/createClass")),c=e("./VerificationRequest"),u=e("../../../logger");function l(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var h="m.room.message",f="m.reference",g="m.relates_to",p=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;(0,s.default)(this,e),this._client=t,this._roomId=r,this.userId=n,this._requestEventId=null}var t,r;return(0,a.default)(e,[{key:"getTimestamp",value:function(e){return e.getTs()}},{key:"handleEvent",value:(r=(0,o.default)(i.default.mark((function t(r,n,o){var s,a,c,l,d,h;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.hasEventId(r.getId())){t.next=2;break}return t.abrupt("return");case 2:if(s=e.getEventType(r),r.getRoomId()===this._roomId){t.next=5;break}return t.abrupt("return");case 5:if(null===this.userId&&(a=e.getOtherPartyUserId(r,this._client))&&(this.userId=a),c=this._client.getUserId(),l=r.getSender(),null===this.userId){t.next=12;break}if(l===c||l===this.userId){t.next=12;break}return u.logger.log("InRoomChannel: ignoring verification event from "+"non-participating sender ".concat(l)),t.abrupt("return");case 12:return null===this._requestEventId&&(this._requestEventId=e.getTransactionId(r)),d=!!r.getUnsigned().transaction_id,h=r.getSender()===this._client.getUserId(),t.next=17,n.handleEvent(s,r,o,d,h);case 17:return t.abrupt("return",t.sent);case 18:case"end":return t.stop()}}),t,this)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"completedContentFromEvent",value:function(e){var t=Object.assign({},e.getContent());return t[g]=e.getRelation(),t}},{key:"completeContent",value:function(e,t){return t=Object.assign({},t),e!==c.REQUEST_TYPE&&e!==c.READY_TYPE&&e!==c.START_TYPE||(t.from_device=this._client.getDeviceId()),e===c.REQUEST_TYPE?t={body:this._client.getUserId()+" is requesting to verify your key, but your client does not support in-chat key verification. You will need to use legacy key verification to verify keys.",msgtype:c.REQUEST_TYPE,to:this.userId,from_device:t.from_device,methods:t.methods}:t[g]={rel_type:f,event_id:this.transactionId},t}},{key:"send",value:function(e,t){var r=this.completeContent(e,t);return this.sendCompleted(e,r)}},{key:"sendCompleted",value:(t=(0,o.default)(i.default.mark((function e(t,r){var n,o;return i.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t,t===c.REQUEST_TYPE&&(n=h),e.next=4,this._client.sendEvent(this._roomId,n,r);case 4:o=e.sent,t===c.REQUEST_TYPE&&(this._requestEventId=o.event_id);case 6:case"end":return e.stop()}}),e,this)}))),function(e,r){return t.apply(this,arguments)})},{key:"receiveStartFromOtherDevices",get:function(){return!0}},{key:"roomId",get:function(){return this._roomId}},{key:"transactionId",get:function(){return this._requestEventId}}],[{key:"getOtherPartyUserId",value:function(t,r){if(e.getEventType(t)===c.REQUEST_TYPE){var n=r.getUserId(),i=t.getSender(),o=t.getContent().to;return i===n?o:o===n?i:void 0}}},{key:"canCreateRequest",value:function(e){return e===c.REQUEST_TYPE}},{key:"getTransactionId",value:function(t){if(e.getEventType(t)===c.REQUEST_TYPE)return t.getId();var r=t.getRelation();return r&&r.rel_type===f?r.event_id:void 0}},{key:"validateEvent",value:function(t,r){var n=e.getTransactionId(t);if("string"!=typeof n||0===n.length)return!1;var i=e.getEventType(t),o=t.getContent();if(i===c.REQUEST_TYPE){if(!o||"string"!=typeof o.to||!o.to.length)return u.logger.log("InRoomChannel: validateEvent: no valid to "+(o&&o.to)),!1;if(!e.getOtherPartyUserId(t,r))return u.logger.log("InRoomChannel: validateEvent: "+"not directed to or sent by me: ".concat(t.getSender())+", ".concat(o&&o.to)),!1}return c.VerificationRequest.validateEvent(i,t,r)}},{key:"getEventType",value:function(e){var t=e.getType();if(t===h){var r=e.getContent();if(r)if(r.msgtype===c.REQUEST_TYPE)return c.REQUEST_TYPE}return t&&t!==c.REQUEST_TYPE?t:""}}]),e}();r.InRoomChannel=p;var v=function(){function e(){(0,s.default)(this,e),this._requestsByRoomId=new Map}return(0,a.default)(e,[{key:"getRequest",value:function(e){var t=e.getRoomId(),r=p.getTransactionId(e);return this._getRequestByTxnId(t,r)}},{key:"getRequestByChannel",value:function(e){return this._getRequestByTxnId(e.roomId,e.transactionId)}},{key:"_getRequestByTxnId",value:function(e,t){var r=this._requestsByRoomId.get(e);if(r)return r.get(t)}},{key:"setRequest",value:function(e,t){this._setRequest(e.getRoomId(),p.getTransactionId(e),t)}},{key:"setRequestByChannel",value:function(e,t){this._setRequest(e.roomId,e.transactionId,t)}},{key:"_setRequest",value:function(e,t,r){var n=this._requestsByRoomId.get(e);n||(n=new Map,this._requestsByRoomId.set(e,n)),n.set(t,r)}},{key:"removeRequest",value:function(e){var t=e.getRoomId(),r=this._requestsByRoomId.get(t);r&&(r.delete(p.getTransactionId(e)),0===r.size&&this._requestsByRoomId.delete(t))}},{key:"findRequestInProgress",value:function(e){var t=this._requestsByRoomId.get(e);if(t){var r,n=l(t.values());try{for(n.s();!(r=n.n()).done;){var i=r.value;if(i.pending)return i}}catch(e){n.e(e)}finally{n.f()}}}}]),e}();r.InRoomRequests=v},{"../../../logger":106,"./VerificationRequest":98,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/regenerator":27}],97:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.ToDeviceRequests=r.ToDeviceChannel=void 0;var i=n(e("@babel/runtime/helpers/defineProperty")),o=n(e("@babel/runtime/regenerator")),s=n(e("@babel/runtime/helpers/asyncToGenerator")),a=n(e("@babel/runtime/helpers/typeof")),c=n(e("@babel/runtime/helpers/classCallCheck")),u=n(e("@babel/runtime/helpers/createClass")),l=e("../../../randomstring"),d=e("../../../logger"),h=e("./VerificationRequest"),f=e("../Error"),g=e("../../../models/event");function p(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return v(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var y=function(){function e(t,r,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;(0,c.default)(this,e),this._client=t,this.userId=r,this._devices=n,this.transactionId=i,this._deviceId=o}var t,r;return(0,u.default)(e,[{key:"isToDevices",value:function(e){var t=this;if(e.length===this._devices.length){var r,n=p(e);try{var i=function(){var e=r.value;if(!t._devices.find((function(t){return t.deviceId===e.deviceId})))return{v:!1}};for(n.s();!(r=n.n()).done;){var o=i();if("object"===(0,a.default)(o))return o.v}}catch(e){n.e(e)}finally{n.f()}return!0}return!1}},{key:"getTimestamp",value:function(e){var t=e.getContent();return t&&t.timestamp}},{key:"handleEvent",value:(r=(0,s.default)(o.default.mark((function e(t,r,n){var i,s,a,c,u,l,d,g,p=this;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=t.getType(),s=t.getContent(),i!==h.REQUEST_TYPE&&i!==h.READY_TYPE&&i!==h.START_TYPE){e.next=9;break}if(this.transactionId||(this.transactionId=s.transaction_id),a=s.from_device,!this._deviceId&&this._devices.includes(a)&&(this._deviceId=a),this._deviceId&&this._deviceId===a){e.next=9;break}return c=this.completeContent((0,f.errorFromEvent)((0,f.newUnexpectedMessageError)())),e.abrupt("return",this._sendToDevices(h.CANCEL_TYPE,c,[a]));case 9:return u=r.phase===h.PHASE_STARTED||r.phase===h.PHASE_READY,e.next=12,r.handleEvent(t.getType(),t,n,!1,!1);case 12:if(l=r.phase===h.PHASE_STARTED||r.phase===h.PHASE_READY,i!==h.START_TYPE&&i!==h.READY_TYPE||u||!l||!this._deviceId){e.next=20;break}if(!(d=this._devices.filter((function(e){return e!==p._deviceId&&e!==p._client.getDeviceId()}))).length){e.next=20;break}return g=this.completeContent({code:"m.accepted",reason:"Verification request accepted by another device"}),e.next=20,this._sendToDevices(h.CANCEL_TYPE,g,d);case 20:case"end":return e.stop()}}),e,this)}))),function(e,t,n){return r.apply(this,arguments)})},{key:"completedContentFromEvent",value:function(e){return e.getContent()}},{key:"completeContent",value:function(e,t){return t=Object.assign({},t),this.transactionId&&(t.transaction_id=this.transactionId),e!==h.REQUEST_TYPE&&e!==h.READY_TYPE&&e!==h.START_TYPE||(t.from_device=this._client.getDeviceId()),e===h.REQUEST_TYPE&&(t.timestamp=Date.now()),t}},{key:"send",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t!==h.REQUEST_TYPE&&t!==h.START_TYPE||this.transactionId||(this.transactionId=e.makeTransactionId());var n=this.completeContent(t,r);return this.sendCompleted(t,n)}},{key:"sendCompleted",value:(t=(0,s.default)(o.default.mark((function e(t,r){var n,i;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==h.REQUEST_TYPE){e.next=6;break}return e.next=3,this._sendToDevices(t,r,this._devices);case 3:n=e.sent,e.next=9;break;case 6:return e.next=8,this._sendToDevices(t,r,[this._deviceId]);case 8:n=e.sent;case 9:return i=new g.MatrixEvent({sender:this._client.getUserId(),content:r,type:t}),e.next=12,this._request.handleEvent(t,i,!0,!0,!0);case 12:return e.abrupt("return",n);case 13:case"end":return e.stop()}}),e,this)}))),function(e,r){return t.apply(this,arguments)})},{key:"_sendToDevices",value:function(e,t,r){if(r.length){var n,o={},s=p(r);try{for(s.s();!(n=s.n()).done;){o[n.value]=t}}catch(e){s.e(e)}finally{s.f()}return this._client.sendToDevice(e,(0,i.default)({},this.userId,o))}return Promise.resolve()}},{key:"deviceId",get:function(){return this._deviceId}}],[{key:"getEventType",value:function(e){return e.getType()}},{key:"getTransactionId",value:function(e){var t=e.getContent();return t&&t.transaction_id}},{key:"canCreateRequest",value:function(e){return e===h.REQUEST_TYPE||e===h.START_TYPE}},{key:"validateEvent",value:function(e,t){if(e.isCancelled())return d.logger.warn("Ignoring flagged verification request from "+e.getSender()),!1;var r=e.getContent();if(!r)return d.logger.warn("ToDeviceChannel.validateEvent: invalid: no content"),!1;if(!r.transaction_id)return d.logger.warn("ToDeviceChannel.validateEvent: invalid: no transaction_id"),!1;var n=e.getType();if(n===h.REQUEST_TYPE){if(!Number.isFinite(r.timestamp))return d.logger.warn("ToDeviceChannel.validateEvent: invalid: no timestamp"),!1;if(e.getSender()===t.getUserId()&&r.from_device==t.getDeviceId())return d.logger.warn("ToDeviceChannel.validateEvent: invalid: from own device"),!1}return h.VerificationRequest.validateEvent(n,e,t)}},{key:"makeTransactionId",value:function(){return(0,l.randomString)(32)}}]),e}();r.ToDeviceChannel=y;var m=function(){function e(){(0,c.default)(this,e),this._requestsByUserId=new Map}return(0,u.default)(e,[{key:"getRequest",value:function(e){return this.getRequestBySenderAndTxnId(e.getSender(),y.getTransactionId(e))}},{key:"getRequestByChannel",value:function(e){return this.getRequestBySenderAndTxnId(e.userId,e.transactionId)}},{key:"getRequestBySenderAndTxnId",value:function(e,t){var r=this._requestsByUserId.get(e);if(r)return r.get(t)}},{key:"setRequest",value:function(e,t){this.setRequestBySenderAndTxnId(e.getSender(),y.getTransactionId(e),t)}},{key:"setRequestByChannel",value:function(e,t){this.setRequestBySenderAndTxnId(e.userId,e.transactionId,t)}},{key:"setRequestBySenderAndTxnId",value:function(e,t,r){var n=this._requestsByUserId.get(e);n||(n=new Map,this._requestsByUserId.set(e,n)),n.set(t,r)}},{key:"removeRequest",value:function(e){var t=e.getSender(),r=this._requestsByUserId.get(t);r&&(r.delete(y.getTransactionId(e)),0===r.size&&this._requestsByUserId.delete(t))}},{key:"findRequestInProgress",value:function(e,t){var r=this._requestsByUserId.get(e);if(r){var n,i=p(r.values());try{for(i.s();!(n=i.n()).done;){var o=n.value;if(o.pending&&o.channel.isToDevices(t))return o}}catch(e){i.e(e)}finally{i.f()}}}},{key:"getRequestsInProgress",value:function(e){var t=this._requestsByUserId.get(e);return t?Array.from(t.values()).filter((function(e){return e.pending})):[]}}]),e}();r.ToDeviceRequests=m},{"../../../logger":106,"../../../models/event":113,"../../../randomstring":123,"../Error":92,"./VerificationRequest":98,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/defineProperty":9,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/typeof":24,"@babel/runtime/regenerator":27}],98:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.VerificationRequest=r.PHASE_DONE=r.PHASE_CANCELLED=r.PHASE_STARTED=r.PHASE_READY=r.PHASE_REQUESTED=r.PHASE_UNSENT=r.READY_TYPE=r.DONE_TYPE=r.CANCEL_TYPE=r.START_TYPE=r.REQUEST_TYPE=r.EVENT_PREFIX=void 0;var i=n(e("@babel/runtime/helpers/slicedToArray")),o=n(e("@babel/runtime/regenerator")),s=n(e("@babel/runtime/helpers/toConsumableArray")),a=n(e("@babel/runtime/helpers/asyncToGenerator")),c=n(e("@babel/runtime/helpers/classCallCheck")),u=n(e("@babel/runtime/helpers/createClass")),l=n(e("@babel/runtime/helpers/assertThisInitialized")),d=n(e("@babel/runtime/helpers/inherits")),h=n(e("@babel/runtime/helpers/possibleConstructorReturn")),f=n(e("@babel/runtime/helpers/getPrototypeOf")),g=n(e("@babel/runtime/helpers/defineProperty")),p=e("../../../logger"),v=e("events"),y=e("../Error"),m=e("../QRCode");function b(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return S(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return S(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,f.default)(e);if(t){var i=(0,f.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,h.default)(this,r)}}var E="m.key.verification.";r.EVENT_PREFIX=E;var k=E+"request";r.REQUEST_TYPE=k;var w=E+"start";r.START_TYPE=w;var I=E+"cancel";r.CANCEL_TYPE=I;var T=E+"done";r.DONE_TYPE=T;var R=E+"ready";r.READY_TYPE=R;r.PHASE_UNSENT=1;r.PHASE_REQUESTED=2;r.PHASE_READY=3;r.PHASE_STARTED=4;r.PHASE_CANCELLED=5;r.PHASE_DONE=6;var C=function(e){(0,d.default)(S,e);var t,r,n,h,f,v=_(S);function S(e,t,r){var n;return(0,c.default)(this,S),n=v.call(this),(0,g.default)((0,l.default)(n),"_cancelOnTimeout",(function(){try{n.initiatedByMe?n.cancel({reason:"Other party didn't accept in time",code:"m.timeout"}):n.cancel({reason:"User didn't accept in time",code:"m.timeout"})}catch(e){p.logger.error("Error while cancelling verification request",e)}})),n.channel=e,n.channel._request=(0,l.default)(n),n._verificationMethods=t,n._client=r,n._commonMethods=[],n._setPhase(1,!1),n._eventsByUs=new Map,n._eventsByThem=new Map,n._observeOnly=!1,n._timeoutTimer=null,n._accepting=!1,n._declining=!1,n._verifierHasFinished=!1,n._cancelled=!1,n._chosenMethod=null,n._qrCodeData=null,n._requestReceivedAt=null,n}return(0,u.default)(S,[{key:"calculateEventTimeout",value:function(e){var t=this.channel.getTimestamp(e)+6e5;if(this._requestReceivedAt&&!this.initiatedByMe&&this.phase<=2){var r=this._requestReceivedAt+12e4;t=Math.min(t,r)}return Math.max(0,t-Date.now())}},{key:"otherPartySupportsMethod",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!t&&!this.ready&&!this.started)return!1;var r=this._eventsByThem.get(k)||this._eventsByThem.get(R);if(!r){if(this.started&&this.initiatedByMe){var n=this._eventsByUs.get(w),i=n&&n.getContent(),o=i&&i.method;return e==o}return!1}var s=r.getContent();if(!s)return!1;var a=s.methods;return!!Array.isArray(a)&&a.includes(e)}},{key:"beginKeyVerification",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!this.observeOnly&&!this._verifier){var r=2===this.phase||3===this.phase||1===this.phase&&this.channel.constructor.canCreateRequest(w);if(r){if(this._commonMethods.length&&!this._commonMethods.includes(e))throw(0,y.newUnknownMethodError)();if(this._verifier=this._createVerifier(e,null,t),!this._verifier)throw(0,y.newUnknownMethodError)();this._chosenMethod=e}}return this._verifier}},{key:"sendRequest",value:(f=(0,a.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.observeOnly||1!==this._phase){e.next=4;break}return t=(0,s.default)(this._verificationMethods.keys()),e.next=4,this.channel.send(k,{methods:t});case 4:case"end":return e.stop()}}),e,this)}))),function(){return f.apply(this,arguments)})},{key:"cancel",value:(h=(0,a.default)(o.default.mark((function e(){var t,r,n,i,s,a=arguments;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=a.length>0&&void 0!==a[0]?a[0]:{},r=t.reason,n=void 0===r?"User declined":r,i=t.code,s=void 0===i?"m.user":i,this.observeOnly||5===this._phase){e.next=11;break}if(this._declining=!0,this.emit("change"),!this._verifier){e.next=8;break}return e.abrupt("return",this._verifier.cancel((0,y.errorFactory)(s,n)()));case 8:return this._cancellingUserId=this._client.getUserId(),e.next=11,this.channel.send(I,{code:s,reason:n});case 11:case"end":return e.stop()}}),e,this)}))),function(){return h.apply(this,arguments)})},{key:"accept",value:(n=(0,a.default)(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.observeOnly||2!==this.phase||this.initiatedByMe){e.next=6;break}return t=(0,s.default)(this._verificationMethods.keys()),this._accepting=!0,this.emit("change"),e.next=6,this.channel.send(R,{methods:t});case 6:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"waitFor",value:function(e){var t=this;return new Promise((function(r,n){var i=function i(){var o=!1;return e(t)?(r(t),o=!0):t.cancelled&&(n(new Error("cancelled")),o=!0),o&&t.off("change",i),o};i()||t.on("change",i)}))}},{key:"_setPhase",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this._phase=e,t&&this.emit("change")}},{key:"_getEventByEither",value:function(e){return this._eventsByThem.get(e)||this._eventsByUs.get(e)}},{key:"_getEventBy",value:function(e,t){return t?this._eventsByThem.get(e):this._eventsByUs.get(e)}},{key:"_calculatePhaseTransitions",value:function(){var e=[{phase:1}],t=function(){return e[e.length-1].phase},r=this._eventsByThem.has(k),n=this._getEventBy(k,r);n&&e.push({phase:2,event:n});var i,o=n&&this._getEventBy(R,!r);if(o&&2===t()&&e.push({phase:3,event:o}),o||!n){var s=this._eventsByThem.get(w),a=this._eventsByUs.get(w);i=s&&a?s.getSender()<a.getSender()?s:a:s||a}else i=this._getEventBy(w,!r);if(i){var c=2===t()&&n.getSender()!==i.getSender(),u=1===t()&&this.channel.constructor.canCreateRequest(w);(c||3===t()||u)&&e.push({phase:4,event:i})}var l=this._eventsByUs.get(T);(this._verifierHasFinished||l&&4===t())&&e.push({phase:6});var d=this._getEventByEither(I);return(this._cancelled||d)&&6!==t()?(e.push({phase:5,event:d}),e):e}},{key:"_transitionToPhase",value:function(e){var t=this,r=e.phase,n=e.event;if((2===r||3===r)&&!this._wasSentByOwnDevice(n)){var i=n.getContent();this._commonMethods=i.methods.filter((function(e){return t._verificationMethods.has(e)}))}if(this.observeOnly||2!==r&&4!==r&&3!==r||this.channel.receiveStartFromOtherDevices&&this._wasSentByOwnUser(n)&&!this._wasSentByOwnDevice(n)&&(this._observeOnly=!0),4===r){var o=n.getContent().method;this._verifier||this.observeOnly||(this._verifier=this._createVerifier(o,n),this._verifier?this._chosenMethod=o:this.cancel({code:"m.unknown_method",reason:"Unknown method: ".concat(o)}))}}},{key:"_applyPhaseTransitions",value:function(){var e,t=this,r=this._calculatePhaseTransitions(),n=r.findIndex((function(e){return e.phase===t.phase})),i=r.slice(n+1),o=b(i);try{for(o.s();!(e=o.n()).done;){var s=e.value;this._transitionToPhase(s)}}catch(e){o.e(e)}finally{o.f()}return i}},{key:"_isWinningStartRace",value:function(e){if(e.getType()!==w)return!1;var t,r,n=this._verifier.startEvent;if(this.isSelfVerification)if(n){var i=n.getContent();t=i&&i.from_device}else t=this._client.getDeviceId();else t=n?n.getSender():this._client.getUserId();if(this.isSelfVerification){var o=e.getContent();r=o&&o.from_device}else r=e.getSender();return r<t}},{key:"hasEventId",value:function(e){var t,r=b(this._eventsByUs.values());try{for(r.s();!(t=r.n()).done;){if(t.value.getId()===e)return!0}}catch(e){r.e(e)}finally{r.f()}var n,i=b(this._eventsByThem.values());try{for(i.s();!(n=i.n()).done;){if(n.value.getId()===e)return!0}}catch(e){i.e(e)}finally{i.f()}return!1}},{key:"handleEvent",value:(r=(0,a.default)(o.default.mark((function e(t,r,n,i,s){var a,c,u,l,d,h;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.done&&!this.cancelled){e.next=2;break}return e.abrupt("return");case 2:if(a=this._observeOnly,this._adjustObserveOnly(r,n),this.observeOnly||i){e.next=9;break}return e.next=7,this._cancelOnError(t,r);case 7:if(!e.sent){e.next=9;break}return e.abrupt("return");case 9:if(!(s?this._eventsByUs.has(t):this._eventsByThem.has(t))){e.next=12;break}return e.abrupt("return");case 12:if(c=this.phase,this._addEvent(t,r,s),u=this._applyPhaseTransitions(),e.prev=15,this._verifier&&!this.observeOnly&&(l=this._isWinningStartRace(r),this._verifier.canSwitchStartEvent(r)&&l?this._verifier.switchStartEvent(r):i||(t===I||this._verifier.events&&this._verifier.events.includes(t))&&this._verifier.handleEvent(r)),!u.length){e.next=30;break}if(!n||!u.some((function(e){return 3===e.phase}))){e.next=24;break}if(!this.otherPartySupportsMethod(m.SCAN_QR_CODE_METHOD,!0)){e.next=24;break}return e.next=23,m.QRCodeData.create(this,this._client);case 23:this._qrCodeData=e.sent;case 24:d=u[u.length-1],h=d.phase,this._setupTimeout(h),this._setPhase(h),e.next=31;break;case 30:this._observeOnly!==a&&this.emit("change");case 31:return e.prev=31,p.logger.log("Verification request ".concat(this.channel.transactionId,": ")+"".concat(t," event with id:").concat(r.getId(),", ")+"content:".concat(JSON.stringify(r.getContent())," ")+"deviceId:".concat(this.channel.deviceId,", ")+"sender:".concat(r.getSender(),", isSentByUs:").concat(s,", ")+"isLiveEvent:".concat(n,", isRemoteEcho:").concat(i,", ")+"phase:".concat(c,"=>").concat(this.phase,", ")+"observeOnly:".concat(a,"=>").concat(this._observeOnly)),e.finish(31);case 34:case"end":return e.stop()}}),e,this,[[15,,31,34]])}))),function(e,t,n,i,o){return r.apply(this,arguments)})},{key:"_setupTimeout",value:function(e){(!this._timeoutTimer&&!this.observeOnly&&2===e&&(this._timeoutTimer=setTimeout(this._cancelOnTimeout,this.timeout)),this._timeoutTimer)&&((4===e||3===e||6===e||5===e)&&(clearTimeout(this._timeoutTimer),this._timeoutTimer=null))}},{key:"_cancelOnError",value:(t=(0,a.default)(o.default.mark((function e(t,r){var n,i,s,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==w){e.next=6;break}if(n=r.getContent().method,this._verificationMethods.has(n)){e.next=6;break}return e.next=5,this.cancel((0,y.errorFromEvent)((0,y.newUnknownMethodError)()));case 5:return e.abrupt("return",!0);case 6:if(i=t===k&&1!==this.phase,s=t===R&&2!==this.phase,1===this.phase||!i&&!s){e.next=14;break}return p.logger.warn("Cancelling, unexpected ".concat(t," verification ")+"event from ".concat(r.getSender())),a="Unexpected ".concat(t," event in phase ").concat(this.phase),e.next=13,this.cancel((0,y.errorFromEvent)((0,y.newUnexpectedMessageError)({reason:a})));case 13:return e.abrupt("return",!0);case 14:return e.abrupt("return",!1);case 15:case"end":return e.stop()}}),e,this)}))),function(e,r){return t.apply(this,arguments)})},{key:"_adjustObserveOnly",value:function(e,t){t||(this._observeOnly=!0),this.calculateEventTimeout(e)<3e3&&(this._observeOnly=!0)}},{key:"_addEvent",value:function(e,t,r){if(r?this._eventsByUs.set(e,t):this._eventsByThem.set(e,t),e===k){var n,o=b(this._eventsByThem.entries());try{for(o.s();!(n=o.n()).done;){var s=(0,i.default)(n.value,2),a=s[0];s[1].getSender()!==this.otherUserId&&this._eventsByThem.delete(a)}}catch(e){o.e(e)}finally{o.f()}this._requestReceivedAt=Date.now()}}},{key:"_createVerifier",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;r||(r=this.targetDevice);var n=r,i=n.userId,o=n.deviceId,s=this._verificationMethods.get(e);if(s)return new s(this.channel,this._client,i,o,t,this);p.logger.warn("could not find verifier constructor for method",e)}},{key:"_wasSentByOwnUser",value:function(e){return e.getSender()===this._client.getUserId()}},{key:"_wasSentByOwnDevice",value:function(e){if(!this._wasSentByOwnUser(e))return!1;var t=e.getContent();return!(!t||t.from_device!==this._client.getDeviceId())}},{key:"onVerifierCancelled",value:function(){this._cancelled=!0;var e=this._applyPhaseTransitions();e.length&&this._setPhase(e[e.length-1].phase)}},{key:"onVerifierFinished",value:function(){this.channel.send("m.key.verification.done",{}),this._verifierHasFinished=!0;var e=this._applyPhaseTransitions();e.length&&this._setPhase(e[e.length-1].phase)}},{key:"getEventFromOtherParty",value:function(e){return this._eventsByThem.get(e)}},{key:"invalid",get:function(){return 1===this.phase}},{key:"requested",get:function(){return 2===this.phase}},{key:"cancelled",get:function(){return 5===this.phase}},{key:"ready",get:function(){return 3===this.phase}},{key:"started",get:function(){return 4===this.phase}},{key:"done",get:function(){return 6===this.phase}},{key:"methods",get:function(){return this._commonMethods}},{key:"chosenMethod",get:function(){return this._chosenMethod}},{key:"timeout",get:function(){var e=this._getEventByEither(k);return e?this.calculateEventTimeout(e):0}},{key:"requestEvent",get:function(){return this._getEventByEither(k)}},{key:"phase",get:function(){return this._phase}},{key:"verifier",get:function(){return this._verifier}},{key:"canAccept",get:function(){return this.phase<3&&!this._accepting&&!this._declining}},{key:"accepting",get:function(){return this._accepting}},{key:"declining",get:function(){return this._declining}},{key:"pending",get:function(){return!this.observeOnly&&6!==this._phase&&5!==this._phase}},{key:"qrCodeData",get:function(){return this._qrCodeData}},{key:"initiatedByMe",get:function(){var e=this._eventsByUs.size+this._eventsByThem.size===0;if(1===this._phase&&e)return!0;var t=this._eventsByUs.has(k),r=this._eventsByThem.has(k);if(t&&!r)return!0;if(!t&&r)return!1;var n=this._eventsByUs.has(w),i=this._eventsByThem.has(w);return!(!n||i)}},{key:"requestingUserId",get:function(){return this.initiatedByMe?this._client.getUserId():this.otherUserId}},{key:"receivingUserId",get:function(){return this.initiatedByMe?this.otherUserId:this._client.getUserId()}},{key:"otherUserId",get:function(){return this.channel.userId}},{key:"isSelfVerification",get:function(){return this._client.getUserId()===this.otherUserId}},{key:"cancellingUserId",get:function(){var e=this._eventsByUs.get(I),t=this._eventsByThem.get(I);return e&&(!t||e.getId()<t.getId())?e.getSender():t?t.getSender():void 0}},{key:"cancellationCode",get:function(){var e=this._getEventByEither(I);return e?e.getContent().code:null}},{key:"observeOnly",get:function(){return this._observeOnly}},{key:"targetDevice",get:function(){var e=(this._eventsByThem.get(k)||this._eventsByThem.get(R)||this._eventsByThem.get(w)).getContent().from_device;return{userId:this.otherUserId,deviceId:e}}}],[{key:"validateEvent",value:function(e,t,r){var n=t.getContent();return!(!e||!e.startsWith(E))&&(n?e!==k&&e!==R||Array.isArray(n.methods)?e!==k&&e!==R&&e!==w||"string"==typeof n.from_device&&0!==n.from_device.length||(p.logger.log("VerificationRequest: validateEvent: fail because from_device"),!1):(p.logger.log("VerificationRequest: validateEvent: fail because methods"),!1):(p.logger.log("VerificationRequest: validateEvent: no content"),!1))}}]),S}(v.EventEmitter);r.VerificationRequest=C},{"../../../logger":106,"../Error":92,"../QRCode":94,"@babel/runtime/helpers/assertThisInitialized":4,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/defineProperty":9,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/helpers/slicedToArray":22,"@babel/runtime/helpers/toConsumableArray":23,"@babel/runtime/regenerator":27,events:36}],99:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.InvalidStoreError=l,r.InvalidCryptoStoreError=d,r.KeySignatureUploadError=void 0;var i=n(e("@babel/runtime/helpers/classCallCheck")),o=n(e("@babel/runtime/helpers/inherits")),s=n(e("@babel/runtime/helpers/possibleConstructorReturn")),a=n(e("@babel/runtime/helpers/getPrototypeOf")),c=n(e("@babel/runtime/helpers/wrapNativeSuper"));function u(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,a.default)(e);if(t){var i=(0,a.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,s.default)(this,r)}}function l(e,t){var r="Store is invalid because ".concat(e,", ")+"please stop the client, delete all data and start the client again",n=Reflect.construct(Error,[r]);return Reflect.setPrototypeOf(n,Reflect.getPrototypeOf(this)),n.reason=e,n.value=t,n}function d(e){var t="Crypto store is invalid because ".concat(e,", ")+"please stop the client, delete all data and start the client again",r=Reflect.construct(Error,[t]);return Reflect.setPrototypeOf(r,Reflect.getPrototypeOf(this)),r.reason=e,r.name="InvalidCryptoStoreError",r}l.TOGGLED_LAZY_LOADING="TOGGLED_LAZY_LOADING",l.prototype=Object.create(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),Reflect.setPrototypeOf(l,Error),d.TOO_NEW="TOO_NEW",d.prototype=Object.create(Error.prototype,{constructor:{value:Error,enumerable:!1,writable:!0,configurable:!0}}),Reflect.setPrototypeOf(d,Error);var h=function(e){(0,o.default)(r,e);var t=u(r);function r(e,n){var o;return(0,i.default)(this,r),(o=t.call(this,e)).value=n,o}return r}((0,c.default)(Error));r.KeySignatureUploadError=h},{"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/helpers/wrapNativeSuper":26}],100:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.eventMapperFor=void 0;const n=e("./models/event");r.eventMapperFor=function(e,t){const r=Boolean(t.preventReEmit),i=!1!==t.decrypt;return function(t){const o=new n.MatrixEvent(t);return o.isEncrypted()&&(r||e.reEmitter.reEmit(o,["Event.decrypted"]),i&&e.decryptEventIfNeeded(o)),r||e.reEmitter.reEmit(o,["Event.replaced"]),o}}},{"./models/event":113}],101:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FilterComponent=void 0;r.FilterComponent=class{constructor(e){this.filterJson=e}check(e){return this.checkFields(e.getRoomId(),e.getSender(),e.getType(),!!e.getContent()&&void 0!==e.getContent().url)}toJSON(){return{types:this.filterJson.types||null,not_types:this.filterJson.not_types||[],rooms:this.filterJson.rooms||null,not_rooms:this.filterJson.not_rooms||[],senders:this.filterJson.senders||null,not_senders:this.filterJson.not_senders||[],contains_url:this.filterJson.contains_url||null}}checkFields(e,t,r,n){const i={rooms:function(t){return e===t},senders:function(e){return t===e},types:function(e){return function(e,t){if(t.endsWith("*")){const r=t.slice(0,-1);return e.substr(0,r.length)===r}return e===t}(r,e)}};for(let e=0;e<Object.keys(i).length;e++){const t=Object.keys(i)[e],r=i[t],n="not_"+t,o=this.filterJson[n];if(null==o?void 0:o.some(r))return!1;const s=this.filterJson[t];if(s&&!s.some(r))return!1}const o=this.filterJson.contains_url;return void 0===o||o===n}filter(e){return e.filter(this.check,this)}limit(){return void 0!==this.filterJson.limit?this.filterJson.limit:10}}},{}],102:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Filter=void 0;const n=e("./filter-component");function i(e,t,r){const n=t.split(".");let i=e;for(let e=0;e<n.length-1;e++)i[n[e]]||(i[n[e]]={}),i=i[n[e]];i[n[n.length-1]]=r}class o{constructor(e,t){this.userId=e,this.filterId=t,this.definition={}}static fromJson(e,t,r){const n=new o(e,t);return n.setDefinition(r),n}getFilterId(){return this.filterId}getDefinition(){return this.definition}setDefinition(e){this.definition=e;const t=e.room,r={};t&&(t.rooms&&(r.rooms=t.rooms),t.rooms&&(r.not_rooms=t.not_rooms)),this.roomFilter=new n.FilterComponent(r),this.roomTimelineFilter=new n.FilterComponent((null==t?void 0:t.timeline)||{})}getRoomTimelineFilterComponent(){return this.roomTimelineFilter}filterRoomTimeline(e){return this.roomTimelineFilter.filter(this.roomFilter.filter(e))}setTimelineLimit(e){i(this.definition,"room.timeline.limit",e)}setLazyLoadMembers(e){i(this.definition,"room.state.lazy_load_members",!!e)}setIncludeLeaveRooms(e){i(this.definition,"room.include_leave",e)}}r.Filter=o,o.LAZY_LOADING_MESSAGES_FILTER={lazy_load_members:!0}},{"./filter-component":101}],103:[function(e,t,r){(function(t){(function(){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.MatrixHttpApi=E,r.retryNetworkOperation=function(e,t){return R.apply(this,arguments)},r.AbortError=r.ConnectionError=r.MatrixError=r.PREFIX_MEDIA_R0=r.PREFIX_IDENTITY_V2=r.PREFIX_IDENTITY_V1=r.PREFIX_UNSTABLE=r.PREFIX_R0=void 0;var o=i(e("@babel/runtime/regenerator")),s=i(e("@babel/runtime/helpers/asyncToGenerator")),a=i(e("@babel/runtime/helpers/createClass")),c=i(e("@babel/runtime/helpers/classCallCheck")),u=i(e("@babel/runtime/helpers/inherits")),l=i(e("@babel/runtime/helpers/possibleConstructorReturn")),d=i(e("@babel/runtime/helpers/getPrototypeOf")),h=i(e("@babel/runtime/helpers/wrapNativeSuper")),f=i(e("@babel/runtime/helpers/defineProperty")),g=i(e("@babel/runtime/helpers/typeof")),p=e("content-type"),v=n(e("./utils")),y=e("./logger"),m=n(e("./realtime-callbacks"));function b(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=(0,d.default)(e);if(t){var i=(0,d.default)(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return(0,l.default)(this,r)}}function S(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?S(Object(r),!0).forEach((function(t){(0,f.default)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):S(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}r.PREFIX_R0="/_matrix/client/r0";r.PREFIX_UNSTABLE="/_matrix/client/unstable";r.PREFIX_IDENTITY_V1="/_matrix/identity/api/v1";r.PREFIX_IDENTITY_V2="/_matrix/identity/v2";function E(e,t){v.checkObjectHasKeys(t,["baseUrl","request","prefix"]),t.onlyData=t.onlyData||!1,this.event_emitter=e,this.opts=t,this.useAuthorizationHeader=Boolean(t.useAuthorizationHeader),this.uploads=[]}r.PREFIX_MEDIA_R0="/_matrix/media/r0",E.prototype={setIdBaseUrl:function(e){this.opts.idBaseUrl=e},getContentUri:function(){var e={access_token:this.opts.accessToken};return{base:this.opts.baseUrl,path:"/_matrix/media/r0/upload",params:e}},uploadContent:function(e,r){v.isFunction(r)?r={callback:r}:void 0===r&&(r={});var n=!1!==r.includeFilename,i=r.type||e.type||"application/octet-stream",o=r.name||e.name,s=e;s.stream&&"function"!=typeof s.stream&&(y.logger.warn("Using `file.stream` as the content to upload. Future versions of the js-sdk will change this to expect `file` to be the content directly."),s=s.stream);var a=r.rawResponse;void 0===a&&(t.XMLHttpRequest?a=!1:(y.logger.warn("Returning the raw JSON from uploadContent(). Future versions of the js-sdk will change this default, to return the parsed object. Set opts.rawResponse=false to change this behaviour now."),a=!0));var c=r.onlyContentUri;a||void 0!==c||(t.XMLHttpRequest?(y.logger.warn("Returning only the content-uri from uploadContent(). Future versions of the js-sdk will change this default, to return the whole response object. Set opts.onlyContentUri=false to change this behaviour now."),c=!0):c=!1);var u,l={loaded:0,total:0},d=null;if(a||(d=function(e){var t=JSON.parse(e);if(c&&void 0===(t=t.content_uri))throw Error("Bad response");return t}),t.XMLHttpRequest){var h=v.defer(),f=new t.XMLHttpRequest;l.xhr=f;var g=k(h,r.callback,this.opts.onlyData),p=function(){f.abort(),g(new Error("Timeout"))};f.timeout_timer=m.setTimeout(p,3e4),f.onreadystatechange=function(){var e;switch(f.readyState){case t.XMLHttpRequest.DONE:m.clearTimeout(f.timeout_timer);try{if(0===f.status)throw new T;if(!f.responseText)throw new Error("No response body.");e=f.responseText,d&&(e=d(e))}catch(e){return e.http_status=f.status,void g(e)}g(void 0,f,e)}},f.upload.addEventListener("progress",(function(e){m.clearTimeout(f.timeout_timer),l.loaded=e.loaded,l.total=e.total,f.timeout_timer=m.setTimeout(p,3e4),r.progressHandler&&r.progressHandler({loaded:e.loaded,total:e.total})}));var b=this.opts.baseUrl+"/_matrix/media/r0/upload",S=[];n&&o&&S.push("filename="+encodeURIComponent(o)),this.useAuthorizationHeader||S.push("access_token="+encodeURIComponent(this.opts.accessToken)),S.length>0&&(b+="?"+S.join("&")),f.open("POST",b),this.useAuthorizationHeader&&f.setRequestHeader("Authorization","Bearer "+this.opts.accessToken),f.setRequestHeader("Content-Type",i),f.send(s),(u=h.promise).abort=f.abort.bind(f)}else{var _={};n&&o&&(_.filename=o),u=this.authedRequest(r.callback,"POST","/upload",_,s,{prefix:"/_matrix/media/r0",headers:{"Content-Type":i},json:!1,bodyParser:d})}var E=this,w=u.finally((function(){for(var e=0;e<E.uploads.length;++e)if(E.uploads[e]===l)return void E.uploads.splice(e,1)}));return w.abort=u.abort,l.promise=w,this.uploads.push(l),w},cancelUpload:function(e){return!!e.abort&&(e.abort(),!0)},getCurrentUploads:function(){return this.uploads},idServerRequest:function(e,t,r,n,i,o){if(!this.opts.idBaseUrl)throw new Error("No Identity Server base URL set");var s=this.opts.idBaseUrl+i+r;if(void 0!==e&&!v.isFunction(e))throw Error("Expected callback to be a function but got "+(0,g.default)(e));var a={uri:s,method:t,withCredentials:!1,json:!0,_matrix_opts:this.opts,headers:{}};"GET"===t?a.qs=n:"object"===(0,g.default)(n)&&(a.json=n),o&&(a.headers.Authorization="Bearer ".concat(o));var c=v.defer();return this.opts.request(a,k(c,e,this.opts.onlyData)),c.promise},authedRequest:function(e,t,r,n,i,o){n||(n={}),this.useAuthorizationHeader?(isFinite(o)&&(o={localTimeoutMs:o}),o||(o={}),o.headers||(o.headers={}),o.headers.Authorization||(o.headers.Authorization="Bearer "+this.opts.accessToken),n.access_token&&delete n.access_token):n.access_token||(n.access_token=this.opts.accessToken);var s=this.request(e,t,r,n,i,o),a=this;return s.catch((function(e){"M_UNKNOWN_TOKEN"==e.errcode?a.event_emitter.emit("Session.logged_out",e):"M_CONSENT_NOT_GIVEN"==e.errcode&&a.event_emitter.emit("no_consent",e.message,e.data.consent_uri)})),s},request:function(e,t,r,n,i,o){var s=void 0!==(o=o||{}).prefix?o.prefix:this.opts.prefix,a=this.opts.baseUrl+s+r;return this.requestOtherUrl(e,t,a,n,i,o)},requestOtherUrl:function(e,t,r,n,i,o){return null==o?o={}:isFinite(o)&&(o={localTimeoutMs:o}),this._request(e,t,r,n,i,o)},getUrl:function(e,t,r){var n="";return t&&(n="?"+v.encodeParams(t)),this.opts.baseUrl+r+e+n},_request:function(e,t,r,n,i,o){if(void 0!==e&&!v.isFunction(e))throw Error("Expected callback to be a function but got "+(0,g.default)(e));o=o||{};var s=this;this.opts.extraParams&&(n=_(_({},n),this.opts.extraParams));var a=v.extend({},o.headers||{}),c=void 0===o.json||o.json,u=o.bodyParser;c&&(i&&(i=JSON.stringify(i),a["content-type"]="application/json"),a.accept||(a.accept="application/json"),void 0===u&&(u=function(e){return JSON.parse(e)}));var l,d,h=v.defer(),f=!1,p=o.localTimeoutMs||this.opts.localTimeoutMs,y=function(){p&&(l&&m.clearTimeout(l),l=m.setTimeout((function(){f=!0,d&&d.abort&&d.abort(),h.reject(new w({error:"Locally timed out waiting for a response",errcode:"ORG.MATRIX.JSSDK_TIMEOUT",timeout:p}))}),p))};y();var b=h.promise;try{(d=this.opts.request({uri:r,method:t,withCredentials:!1,qs:n,qsStringifyOptions:o.qsStringifyOptions,useQuerystring:!0,body:i,json:!1,timeout:p,headers:a||{},_matrix_opts:this.opts},(function(t,r,n){p&&(m.clearTimeout(l),f)||k(h,e,s.opts.onlyData,u)(t,r,n)})))&&("onprogress"in d&&(d.onprogress=function(e){y()}),d.abort&&(b.abort=d.abort.bind(d)))}catch(t){h.reject(t),e&&e(t)}return b}};var k=function(e,t,r,n){return t=t||function(){},function(i,o,s){i&&("AbortError"===i.name||"aborted"===i||i instanceof w||(i=new I("request failed",i)));if(!i)try{(o.status||o.statusCode)>=400?i=function(e,t){var r,n=e.status||e.statusCode,i=function(e){var t;e.getResponseHeader?t=e.getResponseHeader("Content-Type"):e.headers&&(t=e.headers["content-type"]||null);if(!t)return null;try{return(0,p.parse)(t)}catch(e){throw new Error("Error parsing Content-Type '".concat(t,"': ").concat(e))}}(e);if(i)if("application/json"===i.type){var o="object"===(0,g.default)(t)?t:JSON.parse(t);r=new w(o)}else"text/plain"===i.type&&(r=new Error("Server returned ".concat(n," error: ").concat(t)));r||(r=new Error("Server returned ".concat(n," error")));return r.httpStatus=n,r}(o,s):n&&(s=n(s))}catch(e){i=new Error("Error parsing server response: ".concat(e))}if(i)e.reject(i),t(i);else{var a={code:o.status||o.statusCode,headers:o.headers,data:s};e.resolve(r?s:a),t(null,r?s:a)}}};var w=function(e){(0,u.default)(r,e);var t=b(r);function r(e){var n;return(0,c.default)(this,r),e=e||{},(n=t.call(this,"MatrixError: ".concat(e.errcode))).errcode=e.errcode,n.name=e.errcode||"Unknown error code",n.message=e.error||"Unknown message",n.data=e,n}return r}((0,h.default)(Error));r.MatrixError=w;var I=function(e){(0,u.default)(r,e);var t=b(r);function r(e){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return(0,c.default)(this,r),(n=t.call(this,e+(i?": ".concat(i.message):"")))._cause=i,n}return(0,a.default)(r,[{key:"name",get:function(){return"ConnectionError"}},{key:"cause",get:function(){return this._cause}}]),r}((0,h.default)(Error));r.ConnectionError=I;var T=function(e){(0,u.default)(r,e);var t=b(r);function r(){return(0,c.default)(this,r),t.call(this,"Operation aborted")}return(0,a.default)(r,[{key:"name",get:function(){return"AbortError"}}]),r}((0,h.default)(Error));function R(){return(R=(0,s.default)(o.default.mark((function e(t,r){var n,i;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=0,i=null;case 2:if(!(n<t)){e.next=21;break}if(e.prev=3,!(n>0)){e.next=6;break}return e.delegateYield(o.default.mark((function e(){var t;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=1e3*Math.pow(2,n),y.logger.log("network operation failed ".concat(n," times,")+" retrying in ".concat(t,"ms...")),e.next=4,new Promise((function(e){return setTimeout(e,t)}));case 4:case"end":return e.stop()}}),e)}))(),"t0",6);case 6:return e.next=8,r();case 8:return e.abrupt("return",e.sent);case 11:if(e.prev=11,e.t1=e.catch(3),!(e.t1 instanceof I)){e.next=18;break}n+=1,i=e.t1,e.next=19;break;case 18:throw e.t1;case 19:e.next=2;break;case 21:throw i;case 22:case"end":return e.stop()}}),e,null,[[3,11]])})))).apply(this,arguments)}r.AbortError=T}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./logger":106,"./realtime-callbacks":124,"./utils":137,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/classCallCheck":6,"@babel/runtime/helpers/createClass":8,"@babel/runtime/helpers/defineProperty":9,"@babel/runtime/helpers/getPrototypeOf":10,"@babel/runtime/helpers/inherits":11,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"@babel/runtime/helpers/possibleConstructorReturn":20,"@babel/runtime/helpers/typeof":24,"@babel/runtime/helpers/wrapNativeSuper":26,"@babel/runtime/regenerator":27,"content-type":35}],104:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.exists=function(e,t){return new Promise((function(r,n){var i=!0,o=e.open(t);o.onupgradeneeded=function(){i=!1},o.onblocked=function(){return n()},o.onsuccess=function(){o.result.close(),i||e.deleteDatabase(t),r(i)},o.onerror=function(e){return n(e.target.error)}}))}},{}],105:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.InteractiveAuth=y;var o=i(e("@babel/runtime/regenerator")),s=i(e("@babel/runtime/helpers/asyncToGenerator")),a=i(e("url")),c=n(e("./utils")),u=e("./logger");function l(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var h,f,g,p="m.login.email.identity",v="m.login.msisdn";function y(e){this._matrixClient=e.matrixClient,this._data=e.authData||{},this._requestCallback=e.doRequest,this._busyChangedCallback=e.busyChanged,this._stateUpdatedCallback=e.stateUpdated||e.startAuthStage,this._resolveFunc=null,this._rejectFunc=null,this._inputs=e.inputs||{},this._requestEmailTokenCallback=e.requestEmailToken,e.sessionId&&(this._data.session=e.sessionId),this._clientSecret=e.clientSecret||this._matrixClient.generateClientSecret(),this._emailSid=e.emailSid,void 0===this._emailSid&&(this._emailSid=null),this._requestingEmailToken=!1,this._chosenFlow=null,this._currentStage=null,this._submitPromise=null}y.prototype={attemptAuth:function(){var e=this;return new Promise((function(t,r){if(e._resolveFunc=t,e._rejectFunc=r,e._data&&e._data.flows)e._startNextAuthStage();else{e._busyChangedCallback&&e._busyChangedCallback(!0);var n=null;e._data.session&&(n={session:e._data.session}),e._doRequest(n).finally((function(){e._busyChangedCallback&&e._busyChangedCallback(!1)}))}}))},poll:(g=(0,s.default)(o.default.mark((function e(){var t,r,n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._data.session){e.next=2;break}return e.abrupt("return");case 2:if(this._resolveFunc){e.next=4;break}return e.abrupt("return");case 4:if(!this._submitPromise){e.next=6;break}return e.abrupt("return");case 6:if(t={},this._currentStage!=p){e.next=16;break}if(!this._emailSid){e.next=16;break}return r={sid:this._emailSid,client_secret:this._clientSecret},e.next=12,this._matrixClient.doesServerRequireIdServerParam();case 12:if(!e.sent){e.next=15;break}n=a.default.parse(this._matrixClient.getIdentityServerUrl()),r.id_server=n.host;case 15:t={type:p,threepid_creds:r,threepidCreds:r};case 16:this.submitAuthDict(t,!0);case 17:case"end":return e.stop()}}),e,this)}))),function(){return g.apply(this,arguments)}),getSessionId:function(){return this._data?this._data.session:void 0},getClientSecret:function(){return this._clientSecret},getStageParams:function(e){var t={};return this._data&&this._data.params&&(t=this._data.params),t[e]},getChosenFlow:function(){return this._chosenFlow},submitAuthDict:(f=(0,s.default)(o.default.mark((function e(t,r){var n;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._resolveFunc){e.next=2;break}throw new Error("submitAuthDict() called before attemptAuth()");case 2:!r&&this._busyChangedCallback&&this._busyChangedCallback(!0);case 3:if(!this._submitPromise){e.next=13;break}return e.prev=4,e.next=7,this._submitPromise;case 7:e.next=11;break;case 9:e.prev=9,e.t0=e.catch(4);case 11:e.next=3;break;case 13:return this._data.session?(n={session:this._data.session},c.extend(n,t)):n=t,e.prev=14,this._submitPromise=this._doRequest(n,r),e.next=18,this._submitPromise;case 18:return e.prev=18,this._submitPromise=null,!r&&this._busyChangedCallback&&this._busyChangedCallback(!1),e.finish(18);case 22:case"end":return e.stop()}}),e,this,[[4,9],[14,,18,22]])}))),function(e,t){return f.apply(this,arguments)}),getEmailSid:function(){return this._emailSid},setEmailSid:function(e){this._emailSid=e},_doRequest:(h=(0,s.default)(o.default.mark((function e(t,r){var n,i,s,a;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._requestCallback(t,r);case 3:n=e.sent,this._resolveFunc(n),this._resolveFunc=null,this._rejectFunc=null,e.next=34;break;case 9:e.prev=9,e.t0=e.catch(0),i=e.t0.data?e.t0.data.flows:null,s=this._data.flows||Boolean(i),401===e.t0.httpStatus&&e.t0.data&&s||(r?u.logger.log("Background poll request failed doing UI auth: ignoring",e.t0):this._rejectFunc(e.t0)),e.t0.data.flows||e.t0.data.completed||e.t0.data.session||(e.t0.data.flows=this._data.flows,e.t0.data.completed=this._data.completed,e.t0.data.session=this._data.session),this._data=e.t0.data;try{this._startNextAuthStage()}catch(e){this._rejectFunc(e),this._resolveFunc=null,this._rejectFunc=null}if(this._emailSid||this._requestingEmailToken||!this._chosenFlow.stages.includes("m.login.email.identity")){e.next=34;break}return this._requestingEmailToken=!0,e.prev=19,e.next=22,this._requestEmailTokenCallback(this._inputs.emailAddress,this._clientSecret,1,this._data.session);case 22:a=e.sent,this._emailSid=a.sid,e.next=31;break;case 26:e.prev=26,e.t1=e.catch(19),this._rejectFunc(e.t1),this._resolveFunc=null,this._rejectFunc=null;case 31:return e.prev=31,this._requestingEmailToken=!1,e.finish(31);case 34:case"end":return e.stop()}}),e,this,[[0,9],[19,26,31,34]])}))),function(e,t){return h.apply(this,arguments)}),_startNextAuthStage:function(){var e=this._chooseStage();if(!e)throw new Error("No incomplete flows from the server");if(this._currentStage=e,"m.login.dummy"!==e)if(this._data&&this._data.errcode||this._data.error)this._stateUpdatedCallback(e,{errcode:this._data.errcode||"",error:this._data.error||""});else{var t={};e==p&&(t.emailSid=this._emailSid),this._stateUpdatedCallback(e,t)}else this.submitAuthDict({type:"m.login.dummy"})},_chooseStage:function(){null===this._chosenFlow&&(this._chosenFlow=this._chooseFlow()),u.logger.log("Active flow => %s",JSON.stringify(this._chosenFlow));var e=this._firstUncompletedStage(this._chosenFlow);return u.logger.log("Next stage: %s",e),e},_chooseFlow:function(){var e,t=this._data.flows||[],r=Boolean(this._inputs.emailAddress)||Boolean(this._emailSid),n=Boolean(this._inputs.phoneCountry)&&Boolean(this._inputs.phoneNumber),i=l(t);try{for(i.s();!(e=i.n()).done;){var o,s=e.value,a=!1,c=!1,u=l(s.stages);try{for(u.s();!(o=u.n()).done;){var d=o.value;d===p?a=!0:d==v&&(c=!0)}}catch(h){u.e(h)}finally{u.f()}if(a==r&&c==n)return s}}catch(h){i.e(h)}finally{i.f()}var h=new Error("No appropriate authentication flow found");throw h.name="NoAuthFlowFoundError",h.required_stages=[],r&&h.required_stages.push(p),n&&h.required_stages.push(v),h.available_flows=t,h},_firstUncompletedStage:function(e){for(var t=(this._data||{}).completed||[],r=0;r<e.stages.length;++r){var n=e.stages[r];if(-1===t.indexOf(n))return n}}}},{"./logger":106,"./utils":137,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"@babel/runtime/regenerator":27,url:56}],106:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.logger=void 0;const i=n(e("loglevel")),o="matrix";function s(e){e.withPrefix=function(e){return function(e){const t=i.default.getLogger(`matrix-${e}`);t.prefix!==e&&(s(t),t.prefix=e,t.setLevel(i.default.levels.DEBUG));return t}((this.prefix||"")+e)}}i.default.methodFactory=function(e,t,r){return function(...t){this.prefix&&t.unshift(this.prefix);return"error"===e||"warn"===e||"trace"===e||"info"===e?console[e](...t):console.log(...t)}},r.logger=i.default.getLogger(o),r.logger.setLevel(i.default.levels.DEBUG),s(r.logger)},{loglevel:38}],107:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)},s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(r,"__esModule",{value:!0}),r.createClient=r.setCryptoStoreFactory=r.wrapRequest=r.getRequest=r.request=r.setMatrixCallVideoInput=r.setMatrixCallAudioInput=r.createNewMatrixCall=r.ContentHelpers=void 0;const a=e("./crypto/store/memory-crypto-store"),c=e("./store/memory"),u=e("./scheduler"),l=e("./client");o(e("./client"),r),o(e("./http-api"),r),o(e("./autodiscovery"),r),o(e("./sync-accumulator"),r),o(e("./errors"),r),o(e("./models/event"),r),o(e("./models/room"),r),o(e("./models/group"),r),o(e("./models/event-timeline"),r),o(e("./models/event-timeline-set"),r),o(e("./models/room-member"),r),o(e("./models/room-state"),r),o(e("./models/user"),r),o(e("./scheduler"),r),o(e("./filter"),r),o(e("./timeline-window"),r),o(e("./interactive-auth"),r),o(e("./service-types"),r),o(e("./store/memory"),r),o(e("./store/indexeddb"),r),o(e("./store/session/webstorage"),r),o(e("./crypto/store/memory-crypto-store"),r),o(e("./crypto/store/indexeddb-crypto-store"),r),o(e("./content-repo"),r),r.ContentHelpers=s(e("./content-helpers"));var d=e("./webrtc/call");let h;Object.defineProperty(r,"createNewMatrixCall",{enumerable:!0,get:function(){return d.createNewMatrixCall}}),Object.defineProperty(r,"setMatrixCallAudioInput",{enumerable:!0,get:function(){return d.setAudioInput}}),Object.defineProperty(r,"setMatrixCallVideoInput",{enumerable:!0,get:function(){return d.setVideoInput}}),r.request=function(e){h=e},r.getRequest=function(){return h},r.wrapRequest=function(e){const t=h;h=function(r,n){return e(t,r,n)}};let f=()=>new a.MemoryCryptoStore;r.setCryptoStoreFactory=function(e){f=e},r.createClient=function(e){return"string"==typeof e&&(e={baseUrl:e}),e.request=e.request||h,e.store=e.store||new c.MemoryStore({localStorage:t.localStorage}),e.scheduler=e.scheduler||new u.MatrixScheduler,e.cryptoStore=e.cryptoStore||f(),new l.MatrixClient(e)}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./autodiscovery":62,"./client":64,"./content-helpers":65,"./content-repo":66,"./crypto/store/indexeddb-crypto-store":88,"./crypto/store/memory-crypto-store":90,"./errors":99,"./filter":102,"./http-api":103,"./interactive-auth":105,"./models/event":113,"./models/event-timeline":112,"./models/event-timeline-set":111,"./models/group":114,"./models/room":119,"./models/room-member":116,"./models/room-state":117,"./models/user":121,"./scheduler":125,"./service-types":126,"./store/indexeddb":129,"./store/memory":130,"./store/session/webstorage":131,"./sync-accumulator":133,"./timeline-window":136,"./webrtc/call":138}],108:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.MSC3089Branch=void 0;const i=e("../@types/event");r.MSC3089Branch=class{constructor(e,t){this.client=e,this.indexEvent=t}get id(){return this.indexEvent.getStateKey()}get isActive(){return!0===this.indexEvent.getContent().active}get roomId(){return this.indexEvent.getRoomId()}delete(){return n(this,void 0,void 0,(function*(){yield this.client.sendStateEvent(this.roomId,i.UNSTABLE_MSC3089_BRANCH.name,{},this.id),yield this.client.redactEvent(this.roomId,this.id)}))}getName(){return this.indexEvent.getContent().name||"Unnamed File"}setName(e){return this.client.sendStateEvent(this.roomId,i.UNSTABLE_MSC3089_BRANCH.name,Object.assign(Object.assign({},this.indexEvent.getContent()),{name:e}),this.id)}getFileInfo(){return n(this,void 0,void 0,(function*(){const e=this.client.getRoom(this.roomId);if(!e)throw new Error("Unknown room");const t=yield this.client.getEventTimeline(e.getUnfilteredTimelineSet(),this.id);if(!t)throw new Error("Failed to get timeline for room event");const r=t.getEvents().find((e=>e.getId()===this.id));if(!r)throw new Error("Failed to find event");yield this.client.decryptEventIfNeeded(r,{emit:!1,isRetry:!1});const n=r.getContent().file;return{info:n,httpUrl:this.client.mxcUrlToHttp(n.url)}}))}}},{"../@types/event":58}],109:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.MSC3089TreeSpace=r.TreePermissions=r.DEFAULT_TREE_POWER_LEVELS_TEMPLATE=void 0;const o=e("../@types/event"),s=e("../logger"),a=e("../utils"),c=e("./MSC3089Branch"),u=i(e("p-retry")),l=e("../crypto/algorithms/megolm");var d;r.DEFAULT_TREE_POWER_LEVELS_TEMPLATE={invite:100,kick:100,ban:100,redact:50,state_default:50,events_default:50,users_default:0,events:{[o.EventType.RoomPowerLevels]:100,[o.EventType.RoomHistoryVisibility]:100,[o.EventType.RoomTombstone]:100,[o.EventType.RoomEncryption]:100,[o.EventType.RoomName]:50,[o.EventType.RoomMessage]:50,[o.EventType.RoomMessageEncrypted]:50,[o.EventType.Sticker]:50},users:{}},function(e){e.Viewer="viewer",e.Editor="editor",e.Owner="owner"}(d=r.TreePermissions||(r.TreePermissions={}));r.MSC3089TreeSpace=class{constructor(e,t){if(this.client=e,this.roomId=t,this.room=this.client.getRoom(this.roomId),!this.room)throw new Error("Unknown room")}get id(){return this.roomId}get isTopLevel(){const e=this.room.currentState.getStateEvents(o.EventType.SpaceParent);return!(null==e?void 0:e.length)||e.every((e=>{var t;return!(null===(t=e.getContent())||void 0===t?void 0:t.via)}))}setName(e){return this.client.sendStateEvent(this.roomId,o.EventType.RoomName,{name:e},"")}invite(e,t=!0,r=!0){return n(this,void 0,void 0,(function*(){const n=[this.retryInvite(e)];return t&&n.push(...this.getDirectories().map((n=>n.invite(e,t,r)))),Promise.all(n).then((()=>{r&&l.isRoomSharedHistory(this.room)&&this.client.sendSharedHistoryKeys(this.roomId,[e])}))}))}retryInvite(e){return a.simpleRetryOperation((()=>n(this,void 0,void 0,(function*(){yield this.client.invite(this.roomId,e).catch((e=>{if("M_FORBIDDEN"===(null==e?void 0:e.errcode))throw new u.default.AbortError(e);throw e}))}))))}setPermissions(e,t){var r;return n(this,void 0,void 0,(function*(){const n=this.room.currentState.getStateEvents(o.EventType.RoomPowerLevels,"");if(Array.isArray(n))throw new Error("Unexpected return type for power levels");const i=n.getContent()||{},s=i.users_default||0,a=i.events_default||50,c=(null===(r=i.events)||void 0===r?void 0:r[o.EventType.RoomPowerLevels])||100,u=i.users||{};switch(t){case d.Viewer:u[e]=s;break;case d.Editor:u[e]=a;break;case d.Owner:u[e]=c;break;default:throw new Error("Invalid role: "+t)}return i.users=u,this.client.sendStateEvent(this.roomId,o.EventType.RoomPowerLevels,i,"")}))}createDirectory(e){return n(this,void 0,void 0,(function*(){const t=yield this.client.unstableCreateFileTree(e);return yield this.client.sendStateEvent(this.roomId,o.EventType.SpaceChild,{via:[this.client.getDomain()]},t.roomId),yield this.client.sendStateEvent(t.roomId,o.EventType.SpaceParent,{via:[this.client.getDomain()]},this.roomId),t}))}getDirectories(){const e=[],t=this.room.currentState.getStateEvents(o.EventType.SpaceChild);for(const r of t)try{const t=this.client.unstableGetFileTreeSpace(r.getStateKey());t&&e.push(t)}catch(e){s.logger.warn("Unable to create tree space instance for listing. Are we joined?",e)}return e}getDirectory(e){return this.getDirectories().find((t=>t.roomId===e))}delete(){return n(this,void 0,void 0,(function*(){const e=this.getDirectories();for(const t of e)yield t.delete();const t=["invite","knock","join"],r=this.room.currentState.getStateEvents(o.EventType.RoomMember);for(const e of r){e.getStateKey()!==this.client.getUserId()&&t.includes(e.getContent().membership)&&(yield this.client.kick(this.roomId,e.getStateKey(),"Room deleted"))}yield this.client.leave(this.roomId)}))}getOrderedChildren(e){const t=e.map((e=>({roomId:e.getStateKey(),order:e.getContent().order})));return t.sort(((e,t)=>{var r,n,i,s;if(e.order&&!t.order)return-1;if(!e.order&&t.order)return 1;if(e.order||t.order)return a.lexicographicCompare(e.order,t.order);{const c=this.client.getRoom(e.roomId),u=this.client.getRoom(t.roomId);if(!c||!u)return a.lexicographicCompare(e.roomId,t.roomId);const l=null!==(n=null===(r=c.currentState.getStateEvents(o.EventType.RoomCreate,""))||void 0===r?void 0:r.getTs())&&void 0!==n?n:0,d=null!==(s=null===(i=u.currentState.getStateEvents(o.EventType.RoomCreate,""))||void 0===i?void 0:i.getTs())&&void 0!==s?s:0;return l===d?a.lexicographicCompare(e.roomId,t.roomId):l-d}})),t}getParentRoom(){const e=this.room.currentState.getStateEvents(o.EventType.SpaceParent)[0];if(!e)throw new Error("Expected to have a parent in a non-top level space");const t=this.client.getRoom(e.getStateKey());if(!t)throw new Error("Unable to locate room for parent");return t}getOrder(){if(this.isTopLevel)return-1;const e=this.getParentRoom().currentState.getStateEvents(o.EventType.SpaceChild);return this.getOrderedChildren(e).findIndex((e=>e.roomId===this.roomId))}setOrder(e){var t,r;return n(this,void 0,void 0,(function*(){if(this.isTopLevel)throw new Error("Cannot set order of top level spaces currently");const n=this.getParentRoom(),i=n.currentState.getStateEvents(o.EventType.SpaceChild),s=this.getOrderedChildren(i);e=Math.max(Math.min(e,s.length-1),0);const c=this.getOrder()<e;c&&e===s.length-1?e--:c||0!==e||e++;const u=s[c?e:e-1],l=s[c?e+1:e];let d=a.DEFAULT_ALPHABET[0],h=!1;if(u)if(e===s.length-1)(null==l?void 0:l.order)&&(d=a.nextString(l.order));else{const e=null==u?void 0:u.order,t=null==l?void 0:l.order;e&&t?d=e===t?a.nextString(e):a.averageBetweenStrings(e,t):e?d=a.nextString(e):t?d=a.prevString(t):h=!0}else(null==l?void 0:l.order)&&(d=a.prevString(l.order));if(h){let r;for(let i=0;i<=e;i++){const e=s[i];if(0===i&&(r=e.order),e.order)r=e.order;else{r=r?a.nextString(r):a.DEFAULT_ALPHABET[0];const i=n.currentState.getStateEvents(o.EventType.SpaceChild,e.roomId),s=null!==(t=null==i?void 0:i.getContent())&&void 0!==t?t:{via:[this.client.getDomain()]};yield this.client.sendStateEvent(n.roomId,o.EventType.SpaceChild,Object.assign(Object.assign({},s),{order:r}),e.roomId)}}d=a.nextString(r)}const f=n.currentState.getStateEvents(o.EventType.SpaceChild,this.roomId),g=null!==(r=null==f?void 0:f.getContent())&&void 0!==r?r:{via:[this.client.getDomain()]};yield this.client.sendStateEvent(n.roomId,o.EventType.SpaceChild,Object.assign(Object.assign({},g),{order:d}),this.roomId)}))}createFile(e,t,r){return n(this,void 0,void 0,(function*(){const n=yield this.client.uploadContent(new Blob([t]),{includeFilename:!1,onlyContentUri:!0});r.url=n;const i=yield this.client.sendMessage(this.roomId,{msgtype:o.MsgType.File,body:e,url:n,file:r,[o.UNSTABLE_MSC3089_LEAF.name]:{}});yield this.client.sendStateEvent(this.roomId,o.UNSTABLE_MSC3089_BRANCH.name,{active:!0,name:e},i.event_id)}))}getFile(e){const t=this.room.currentState.getStateEvents(o.UNSTABLE_MSC3089_BRANCH.name,e);return t?new c.MSC3089Branch(this.client,t):null}listFiles(){var e;return(null!==(e=this.room.currentState.getStateEvents(o.UNSTABLE_MSC3089_BRANCH.name))&&void 0!==e?e:[]).map((e=>new c.MSC3089Branch(this.client,e))).filter((e=>e.isActive))}}},{"../@types/event":58,"../crypto/algorithms/megolm":77,"../logger":106,"../utils":137,"./MSC3089Branch":108,"p-retry":39}],110:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.EventContext=void 0;const n=e("./event-timeline");r.EventContext=class{constructor(e){this.ourEventIndex=0,this.paginateTokens={[n.Direction.Backward]:null,[n.Direction.Forward]:null},this.timeline=[e]}getEvent(){return this.timeline[this.ourEventIndex]}getTimeline(){return this.timeline}getOurEventIndex(){return this.ourEventIndex}getPaginateToken(e=!1){return this.paginateTokens[e?n.Direction.Backward:n.Direction.Forward]}setPaginateToken(e,t=!1){this.paginateTokens[t?n.Direction.Backward:n.Direction.Forward]=e}addEvents(e,t=!1){t?(this.timeline=e.concat(this.timeline),this.ourEventIndex+=e.length):this.timeline=this.timeline.concat(e)}}},{"./event-timeline":112}],111:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.EventTimelineSet=void 0;const n=e("events"),i=e("./event-timeline"),o=e("./event"),s=e("../logger"),a=e("./relations");let c;c=s.logger.log.bind(s.logger);class u extends n.EventEmitter{constructor(e,t){super(),this.room=e,this.timelineSupport=Boolean(t.timelineSupport),this.liveTimeline=new i.EventTimeline(this),this.unstableClientRelationAggregation=!!t.unstableClientRelationAggregation,this.timelines=[this.liveTimeline],this._eventIdToTimeline={},this.filter=t.filter,this.unstableClientRelationAggregation&&(this.relations={})}getTimelines(){return this.timelines}getFilter(){return this.filter}setFilter(e){this.filter=e}getPendingEvents(){return this.room?this.filter?this.filter.filterRoomTimeline(this.room.getPendingEvents()):this.room.getPendingEvents():[]}getLiveTimeline(){return this.liveTimeline}eventIdToTimeline(e){return this._eventIdToTimeline[e]}replaceEventId(e,t){const r=this._eventIdToTimeline[e];r&&(delete this._eventIdToTimeline[e],this._eventIdToTimeline[t]=r)}resetLiveTimeline(e,t){const r=!this.timelineSupport||!t,n=this.liveTimeline,o=r?n.forkLive(i.EventTimeline.FORWARDS):n.fork(i.EventTimeline.FORWARDS);r?(this.timelines=[o],this._eventIdToTimeline={}):this.timelines.push(o),t&&n.setPaginationToken(t,i.EventTimeline.FORWARDS),o.setPaginationToken(e,i.EventTimeline.BACKWARDS),this.liveTimeline=o,this.emit("Room.timelineReset",this.room,this,r)}getTimelineForEvent(e){const t=this._eventIdToTimeline[e];return void 0===t?null:t}findEventById(e){const t=this.getTimelineForEvent(e);if(t)return t.getEvents().find((function(t){return t.getId()==e}))}addTimeline(){if(!this.timelineSupport)throw new Error("timeline support is disabled. Set the 'timelineSupport' parameter to true when creating MatrixClient to enable it.");const e=new i.EventTimeline(this);return this.timelines.push(e),e}addEventsToTimeline(e,t,r,n){if(!r)throw new Error("'timeline' not specified for EventTimelineSet.addEventsToTimeline");if(!t&&r==this.liveTimeline)throw new Error("EventTimelineSet.addEventsToTimeline cannot be used for adding events to the live timeline - use Room.addLiveEvents instead");if(this.filter&&!(e=this.filter.filterRoomTimeline(e)).length)return;const o=t?i.EventTimeline.BACKWARDS:i.EventTimeline.FORWARDS,a=t?i.EventTimeline.FORWARDS:i.EventTimeline.BACKWARDS;let u=!1,l=!1;for(let n=0;n<e.length;n++){const d=e[n],h=d.getId(),f=this._eventIdToTimeline[h];if(!f){this.addEventToTimeline(d,r,t),l=!0,u=!0;continue}if(l=!1,f==r){c("Event "+h+" already in timeline "+r);continue}const g=r.getNeighbouringTimeline(o);if(g){c(f==g?"Event "+h+" in neighbouring timeline - switching to "+f:"Event "+h+" already in a different timeline "+f),r=f;continue}s.logger.info("Already have timeline for "+h+" - joining timeline "+r+" to "+f);const p=f===this.liveTimeline,v=r===this.liveTimeline,y=o===i.EventTimeline.BACKWARDS&&p,m=o===i.EventTimeline.FORWARDS&&v;y||m?(y&&s.logger.warn("Refusing to set a preceding existingTimeLine on our timeline as the existingTimeLine is live ("+f+")"),m&&s.logger.warn("Refusing to set our preceding timeline on a existingTimeLine as our timeline is live ("+r+")")):(r.setNeighbouringTimeline(f,o),f.setNeighbouringTimeline(r,a),r=f,u=!0)}if(l||!u){if(o===i.EventTimeline.FORWARDS&&r===this.liveTimeline)return s.logger.warn({lastEventWasNew:l,didUpdate:u}),void s.logger.warn(`Refusing to set forwards pagination token of live timeline ${r} to ${n}`);r.setPaginationToken(n,o)}}addLiveEvent(e,t,r=!1){if(this.filter){if(!this.filter.filterRoomTimeline([e]).length)return}const n=this._eventIdToTimeline[e.getId()];if(n)if("replace"===t){c("EventTimelineSet.addLiveEvent: replacing duplicate event "+e.getId());const t=n.getEvents();for(let r=0;r<t.length;r++)if(t[r].getId()===e.getId()){i.EventTimeline.setEventMetadata(e,n.getState(i.EventTimeline.FORWARDS),!1),t[r]=e;break}}else c("EventTimelineSet.addLiveEvent: ignoring duplicate event "+e.getId());else this.addEventToTimeline(e,this.liveTimeline,!1,r)}addEventToTimeline(e,t,r,n=!1){const i=e.getId();t.addEvent(e,r),this._eventIdToTimeline[i]=t,this.setRelationsTarget(e),this.aggregateRelations(e);const o={timeline:t,liveEvent:!r&&t==this.liveTimeline&&!n};this.emit("Room.timeline",e,this.room,Boolean(r),!1,o)}handleRemoteEcho(e,t,r){const n=this._eventIdToTimeline[t];n?(delete this._eventIdToTimeline[t],this._eventIdToTimeline[r]=n):this.filter?this.filter.filterRoomTimeline([e]).length&&this.addEventToTimeline(e,this.liveTimeline,!1):this.addEventToTimeline(e,this.liveTimeline,!1)}removeEvent(e){const t=this._eventIdToTimeline[e];if(!t)return null;const r=t.removeEvent(e);if(r){delete this._eventIdToTimeline[e];const n={timeline:t};this.emit("Room.timeline",r,this.room,void 0,!0,n)}return r}compareEventOrdering(e,t){if(e==t)return 0;const r=this._eventIdToTimeline[e],n=this._eventIdToTimeline[t];if(void 0===r)return null;if(void 0===n)return null;if(r===n){let n,i;const o=r.getEvents();for(let r=0;r<o.length&&(void 0===n||void 0===i);r++){const s=o[r].getId();s==e&&(n=r),s==t&&(i=r)}return n-i}let o=r;for(;o;){if(o===n)return-1;o=o.getNeighbouringTimeline(i.EventTimeline.FORWARDS)}for(o=r;o;){if(o===n)return 1;o=o.getNeighbouringTimeline(i.EventTimeline.BACKWARDS)}return null}getRelationsForEvent(e,t,r){if(!this.unstableClientRelationAggregation)throw new Error("Client-side relation aggregation is disabled");if(!e||!t||!r)throw new Error("Invalid arguments for `getRelationsForEvent`");return((this.relations[e]||{})[t]||{})[r]}setRelationsTarget(e){if(!this.unstableClientRelationAggregation)return;const t=this.relations[e.getId()];if(t)for(const r of Object.values(t))for(const t of Object.values(r))t.setTargetEvent(e)}aggregateRelations(e){if(!this.unstableClientRelationAggregation)return;if(e.isRedacted()||e.status===o.EventStatus.CANCELLED)return;if(e.isBeingDecrypted()||e.shouldAttemptDecryption())return void e.once("Event.decrypted",(()=>{this.aggregateRelations(e)}));const t=e.getRelation();if(!t)return;const r=t.event_id,n=t.rel_type,i=e.getType();let s=this.relations[r];s||(s=this.relations[r]={});let c=s[n];c||(c=s[n]={});let u,l=c[i];l||(l=c[i]=new a.Relations(n,i,this.room),u=this.findEventById(r)||this.room.getPendingEvent(r),u&&l.setTargetEvent(u)),l.addEvent(e)}}r.EventTimelineSet=u},{"../logger":106,"./event":113,"./event-timeline":112,"./relations":115,events:36}],112:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.EventTimeline=r.Direction=void 0;const n=e("./room-state"),i=e("../@types/event");var o;!function(e){e.Backward="b",e.Forward="f"}(o=r.Direction||(r.Direction={}));class s{constructor(e){var t,r;this.eventTimelineSet=e,this.events=[],this.baseIndex=0,this.paginationRequests={[o.Backward]:null,[o.Forward]:null},this.roomId=null!==(r=null===(t=e.room)||void 0===t?void 0:t.roomId)&&void 0!==r?r:null,this.startState=new n.RoomState(this.roomId),this.startState.paginationToken=null,this.endState=new n.RoomState(this.roomId),this.endState.paginationToken=null,this.prevTimeline=null,this.nextTimeline=null,this.paginationRequests={b:null,f:null},this.name=this.roomId+":"+(new Date).toISOString()}static setEventMetadata(e,t,r){e.sender||(e.sender=t.getSentinelMember(e.getSender())),e.target||e.getType()!==i.EventType.RoomMember||(e.target=t.getSentinelMember(e.getStateKey())),e.isState()&&r&&(e.forwardLooking=!1)}initialiseState(e){if(this.events.length>0)throw new Error("Cannot initialise state after events are added");for(const t of e)Object.freeze(t);this.startState.setStateEvents(e),this.endState.setStateEvents(e)}forkLive(e){const t=this.getState(e),r=new s(this.eventTimelineSet);return r.startState=t.clone(),r.endState=t,this.endState=t.clone(),r}fork(e){const t=this.getState(e),r=new s(this.eventTimelineSet);return r.startState=t.clone(),r.endState=t.clone(),r}getRoomId(){return this.roomId}getFilter(){return this.eventTimelineSet.getFilter()}getTimelineSet(){return this.eventTimelineSet}getBaseIndex(){return this.baseIndex}getEvents(){return this.events}getState(e){if(e==s.BACKWARDS)return this.startState;if(e==s.FORWARDS)return this.endState;throw new Error("Invalid direction '"+e+"'")}getPaginationToken(e){return this.getState(e).paginationToken}setPaginationToken(e,t){this.getState(t).paginationToken=e}getNeighbouringTimeline(e){if(e==s.BACKWARDS)return this.prevTimeline;if(e==s.FORWARDS)return this.nextTimeline;throw new Error("Invalid direction '"+e+"'")}setNeighbouringTimeline(e,t){if(this.getNeighbouringTimeline(t))throw new Error("timeline already has a neighbouring timeline - cannot reset neighbour (direction: "+t+")");if(t==s.BACKWARDS)this.prevTimeline=e;else{if(t!=s.FORWARDS)throw new Error("Invalid direction '"+t+"'");this.nextTimeline=e}this.setPaginationToken(null,t)}addEvent(e,t){const r=t?this.startState:this.endState,n=this.getTimelineSet();let i;n.room&&(s.setEventMetadata(e,r,t),e.isState()&&n.room.getUnfilteredTimelineSet()===n&&(r.setStateEvents([e]),e.sender&&("m.room.member"!==e.getType()||t)||s.setEventMetadata(e,r,t))),i=t?0:this.events.length,this.events.splice(i,0,e),t&&this.baseIndex++}removeEvent(e){for(let t=this.events.length-1;t>=0;t--){const r=this.events[t];if(r.getId()==e)return this.events.splice(t,1),t<this.baseIndex&&this.baseIndex--,r}return null}toString(){return this.name}}r.EventTimeline=s,s.BACKWARDS=o.Backward,s.FORWARDS=o.Forward},{"../@types/event":58,"./room-state":117}],113:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.MatrixEvent=r.EventStatus=void 0;const i=e("events"),o=e("../logger"),s=e("../@types/event"),a=e("../utils");!function(e){e.NOT_SENT="not_sent",e.ENCRYPTING="encrypting",e.SENDING="sending",e.QUEUED="queued",e.SENT="sent",e.CANCELLED="cancelled"}(r.EventStatus||(r.EventStatus={}));const c={};function u(e){return c[e]||(c[e]=e),c[e]}class l extends i.EventEmitter{constructor(e={}){super(),this.event=e,this.pushActions=null,this._replacingEvent=null,this._localRedactionEvent=null,this._isCancelled=!1,this.clearEvent={},this.senderCurve25519Key=null,this.claimedEd25519Key=null,this.forwardingCurve25519KeyChain=[],this.untrusted=null,this._decryptionPromise=null,this.retryDecryption=!1,this.txnId=null,this.sender=null,this.target=null,this.status=null,this.error=null,this.forwardLooking=!0,this.verificationRequest=null,["state_key","type","sender","room_id","membership"].forEach((t=>{"string"==typeof e[t]&&(e[t]=u(e[t]))})),["membership","avatar_url","displayname"].forEach((t=>{var r;"string"==typeof(null===(r=e.content)||void 0===r?void 0:r[t])&&(e.content[t]=u(e.content[t]))})),["rel_type"].forEach((t=>{var r,n;"string"==typeof(null===(n=null===(r=e.content)||void 0===r?void 0:r["m.relates_to"])||void 0===n?void 0:n[t])&&(e.content["m.relates_to"][t]=u(e.content["m.relates_to"][t]))})),this.txnId=e.txn_id||null,this.localTimestamp=Date.now()-this.getAge()}getId(){return this.event.event_id}getSender(){return this.event.sender||this.event.user_id}getType(){return this.clearEvent.type||this.event.type}getWireType(){return this.event.type}getRoomId(){return this.event.room_id}getTs(){return this.event.origin_server_ts}getDate(){return this.event.origin_server_ts?new Date(this.event.origin_server_ts):null}getOriginalContent(){return this._localRedactionEvent?{}:this.clearEvent.content||this.event.content||{}}getContent(){return this._localRedactionEvent?{}:this._replacingEvent?this._replacingEvent.getContent()["m.new_content"]||{}:this.getOriginalContent()}getWireContent(){return this.event.content||{}}getPrevContent(){return this.getUnsigned().prev_content||this.event.prev_content||{}}getDirectionalContent(){return this.forwardLooking?this.getContent():this.getPrevContent()}getAge(){return this.getUnsigned().age||this.event.age}getLocalAge(){return Date.now()-this.localTimestamp}getStateKey(){return this.event.state_key}isState(){return void 0!==this.event.state_key}makeEncrypted(e,t,r,n){this.clearEvent={type:this.event.type,content:this.event.content},this.event.type=e,this.event.content=t,this.senderCurve25519Key=r,this.claimedEd25519Key=n}isBeingDecrypted(){return null!=this._decryptionPromise}getDecryptionPromise(){return this._decryptionPromise}isDecryptionFailure(){var e,t;return"m.bad.encrypted"===(null===(t=null===(e=this.clearEvent)||void 0===e?void 0:e.content)||void 0===t?void 0:t.msgtype)}shouldAttemptDecryption(){return this.isEncrypted()&&!this.isBeingDecrypted()&&null===this.getClearContent()}attemptDecryption(e,t={}){return n(this,void 0,void 0,(function*(){if("boolean"==typeof t&&(t={isRetry:t}),!this.isEncrypted())throw new Error("Attempt to decrypt event which isn't encrypted");if(this.clearEvent&&this.clearEvent.content&&"m.bad.encrypted"!==this.clearEvent.content.msgtype)throw new Error("Attempt to decrypt event which has already been decrypted");return this._decryptionPromise?(o.logger.log(`Event ${this.getId()} already being decrypted; queueing a retry`),this.retryDecryption=!0,this._decryptionPromise):(this._decryptionPromise=this.decryptionLoop(e,t),this._decryptionPromise)}))}cancelAndResendKeyRequest(e,t){const r=this.getWireContent();return e.requestRoomKey({algorithm:r.algorithm,room_id:this.getRoomId(),session_id:r.session_id,sender_key:r.sender_key},this.getKeyRequestRecipients(t),!0)}getKeyRequestRecipients(e){const t=this.getWireContent(),r=[{userId:e,deviceId:"*"}],n=this.getSender();return n!==e&&r.push({userId:n,deviceId:t.device_id}),r}decryptionLoop(e,t={}){return n(this,void 0,void 0,(function*(){for(yield Promise.resolve();;){let r,n;this.retryDecryption=!1;try{e?(r=yield e.decryptEvent(this),!0===t.isRetry&&o.logger.info(`Decrypted event on retry (id=${this.getId()})`)):r=this.badEncryptedMessage("Encryption not enabled")}catch(e){if("DecryptionError"!==e.name){const r=t.isRetry?"re":"";return o.logger.error(`Error ${r}decrypting event (id=${this.getId()}): ${e.stack||e}`),this._decryptionPromise=null,void(this.retryDecryption=!1)}if(n=e,this.retryDecryption){o.logger.log(`Got error decrypting event (id=${this.getId()}: ${e}), but retrying`);continue}o.logger.warn(`Error decrypting event (id=${this.getId()}): ${e.detailedString}`),r=this.badEncryptedMessage(e.message)}return this._decryptionPromise=null,this.retryDecryption=!1,this.setClearData(r),this.setPushActions(null),void(!1!==t.emit&&this.emit("Event.decrypted",this,n))}}))}badEncryptedMessage(e){return{clearEvent:{type:"m.room.message",content:{msgtype:"m.bad.encrypted",body:"** Unable to decrypt: "+e+" **"}}}}setClearData(e){this.clearEvent=e.clearEvent,this.senderCurve25519Key=e.senderCurve25519Key||null,this.claimedEd25519Key=e.claimedEd25519Key||null,this.forwardingCurve25519KeyChain=e.forwardingCurve25519KeyChain||[],this.untrusted=e.untrusted||!1}getClearContent(){const e=this.clearEvent;return e&&e.content?e.content:null}isEncrypted(){return!this.isState()&&"m.room.encrypted"===this.event.type}getSenderKey(){return this.senderCurve25519Key}getKeysClaimed(){return{ed25519:this.claimedEd25519Key}}getClaimedEd25519Key(){return this.claimedEd25519Key}getForwardingCurve25519KeyChain(){return this.forwardingCurve25519KeyChain}isKeySourceUntrusted(){return this.untrusted}getUnsigned(){return this.event.unsigned||{}}unmarkLocallyRedacted(){const e=this._localRedactionEvent;return this._localRedactionEvent=null,this.event.unsigned&&(this.event.unsigned.redacted_because=null),!!e}markLocallyRedacted(e){this._localRedactionEvent||(this.emit("Event.beforeRedaction",this,e),this._localRedactionEvent=e,this.event.unsigned||(this.event.unsigned={}),this.event.unsigned.redacted_because=e.event)}makeRedacted(e){if(!e.event)throw new Error("invalid redactionEvent in makeRedacted");let t;for(t in this._localRedactionEvent=null,this.emit("Event.beforeRedaction",this,e),this._replacingEvent=null,this.event.unsigned||(this.event.unsigned={}),this.event.unsigned.redacted_because=e.event,this.event)this.event.hasOwnProperty(t)&&(d.has(t)||delete this.event[t]);const r=h[this.getType()]||{},n=this.getContent();for(t in n)n.hasOwnProperty(t)&&(r[t]||delete n[t])}isRedacted(){return Boolean(this.getUnsigned().redacted_because)}isRedaction(){return"m.room.redaction"===this.getType()}getRedactionEvent(){return this.isRedacted()?this.clearEvent.unsigned?this.clearEvent.unsigned.redacted_because:this.event.unsigned.redacted_because?this.event.unsigned.redacted_because:{}:null}getPushActions(){return this.pushActions}setPushActions(e){this.pushActions=e}handleRemoteEcho(e){const t=this.getUnsigned(),r=this.getId();this.event=e,t.redacted_because&&(this.event.unsigned||(this.event.unsigned={}),this.event.unsigned.redacted_because=t.redacted_because),this.setStatus(null),this.getId()!==r&&this.emit("Event.localEventIdReplaced",this)}isSending(){return!!this.status}setStatus(e){this.status=e,this.emit("Event.status",this,e)}replaceLocalEventId(e){this.event.event_id=e,this.emit("Event.localEventIdReplaced",this)}isRelation(e){const t=this.getWireContent(),r=t&&t["m.relates_to"];return r&&r.rel_type&&r.event_id&&(e&&r.rel_type===e||!e)}getRelation(){return this.isRelation()?this.getWireContent()["m.relates_to"]:null}makeReplaced(e){this.isRedacted()&&e||this._replacingEvent!==e&&(this._replacingEvent=e,this.emit("Event.replaced",this))}getAssociatedStatus(){return this._replacingEvent?this._replacingEvent.status:this._localRedactionEvent?this._localRedactionEvent.status:this.status}getServerAggregatedRelation(e){const t=this.getUnsigned()["m.relations"];if(t)return t[e]}replacingEventId(){const e=this.getServerAggregatedRelation(s.RelationType.Replace);return e?e.event_id:this._replacingEvent?this._replacingEvent.getId():void 0}replacingEvent(){return this._replacingEvent}replacingEventDate(){const e=this.getServerAggregatedRelation(s.RelationType.Replace);if(e){const t=e.origin_server_ts;if(Number.isFinite(t))return new Date(t)}else if(this._replacingEvent)return this._replacingEvent.getDate()}localRedactionEvent(){return this._localRedactionEvent}getAssociatedId(){const e=this.getRelation();return e?e.event_id:this.isRedaction()?this.event.redacts:void 0}hasAssocation(){return!!this.getAssociatedId()}updateAssociatedId(e){const t=this.getRelation();t?t.event_id=e:this.isRedaction()&&(this.event.redacts=e)}flagCancelled(e=!0){this._isCancelled=e}isCancelled(){return this._isCancelled}toSnapshot(){const e=new l(JSON.parse(JSON.stringify(this.event)));for(const[t,r]of Object.entries(this))"event"!==t&&(e[t]=r);return e}isEquivalentTo(e){if(!e)return!1;if(e===this)return!0;const t=a.deepSortedObjectEntries(this.event),r=a.deepSortedObjectEntries(e.event);return JSON.stringify(t)===JSON.stringify(r)}toJSON(){const e={type:this.getType(),sender:this.getSender(),content:this.getContent(),event_id:this.getId(),origin_server_ts:this.getTs(),unsigned:this.getUnsigned(),room_id:this.getRoomId()};return this.isRedaction()&&(e.redacts=this.event.redacts),this.isEncrypted()?{decrypted:e,encrypted:this.event}:e}setVerificationRequest(e){this.verificationRequest=e}setTxnId(e){this.txnId=e}getTxnId(){return this.txnId}}r.MatrixEvent=l;const d=new Set(["event_id","type","room_id","user_id","sender","state_key","prev_state","content","unsigned","origin_server_ts"]),h={"m.room.member":{membership:1},"m.room.create":{creator:1},"m.room.join_rules":{join_rule:1},"m.room.power_levels":{ban:1,events:1,events_default:1,kick:1,redact:1,state_default:1,users:1,users_default:1},"m.room.aliases":{aliases:1}}},{"../@types/event":58,"../logger":106,"../utils":137,events:36}],114:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(r,"__esModule",{value:!0}),r.Group=s;var i=n(e("../utils")),o=e("events");function s(e){this.groupId=e,this.name=null,this.avatarUrl=null,this.myMembership=null,this.inviter=null}i.inherits(s,o.EventEmitter),s.prototype.setProfile=function(e,t){this.name===e&&this.avatarUrl===t||(this.name=e||this.groupId,this.avatarUrl=t,this.emit("Group.profile",this))},s.prototype.setMyMembership=function(e){this.myMembership!==e&&(this.myMembership=e,this.emit("Group.myMembership",this))},s.prototype.setInviter=function(e){this.inviter=e}},{"../utils":137,"@babel/runtime/helpers/interopRequireWildcard":13,events:36}],115:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.Relations=void 0;const i=e("events"),o=e("./event"),s=e("../logger"),a=e("../@types/event");class c extends i.EventEmitter{constructor(e,t,r){super(),this.relationType=e,this.eventType=t,this.room=r,this.relationEventIds=new Set,this.relations=new Set,this.annotationsByKey={},this.annotationsBySender={},this.sortedAnnotationsByKey=[],this.targetEvent=null,this.creationEmitted=!1,this.onEventStatus=(e,t)=>{e.isSending()?t===o.EventStatus.CANCELLED&&(e.removeListener("Event.status",this.onEventStatus),this.removeEvent(e)):e.removeListener("Event.status",this.onEventStatus)},this.onBeforeRedaction=e=>n(this,void 0,void 0,(function*(){if(this.relations.has(e)){if(this.relations.delete(e),this.relationType===a.RelationType.Annotation)this.removeAnnotationFromAggregation(e);else if(this.relationType===a.RelationType.Replace&&this.targetEvent){const e=yield this.getLastReplacement();this.targetEvent.makeReplaced(e)}e.removeListener("Event.beforeRedaction",this.onBeforeRedaction),this.emit("Relations.redaction",e)}}))}addEvent(e){return n(this,void 0,void 0,(function*(){if(this.relationEventIds.has(e.getId()))return;const t=e.getRelation();if(!t)return void s.logger.error("Event must have relation info");const r=t.rel_type,n=e.getType();if(this.relationType===r&&this.eventType===n){if(e.isSending()&&e.on("Event.status",this.onEventStatus),this.relations.add(e),this.relationEventIds.add(e.getId()),this.relationType===a.RelationType.Annotation)this.addAnnotationToAggregation(e);else if(this.relationType===a.RelationType.Replace&&this.targetEvent){const e=yield this.getLastReplacement();this.targetEvent.makeReplaced(e)}e.on("Event.beforeRedaction",this.onBeforeRedaction),this.emit("Relations.add",e),this.maybeEmitCreated()}else s.logger.error("Event relation info doesn't match this container")}))}removeEvent(e){return n(this,void 0,void 0,(function*(){if(!this.relations.has(e))return;const t=e.getRelation();if(!t)return void s.logger.error("Event must have relation info");const r=t.rel_type,n=e.getType();if(this.relationType===r&&this.eventType===n){if(this.relations.delete(e),this.relationType===a.RelationType.Annotation)this.removeAnnotationFromAggregation(e);else if(this.relationType===a.RelationType.Replace&&this.targetEvent){const e=yield this.getLastReplacement();this.targetEvent.makeReplaced(e)}this.emit("Relations.remove",e)}else s.logger.error("Event relation info doesn't match this container")}))}getRelations(){return[...this.relations]}addAnnotationToAggregation(e){const{key:t}=e.getRelation();if(!t)return;let r=this.annotationsByKey[t];r||(r=this.annotationsByKey[t]=new Set,this.sortedAnnotationsByKey.push([t,r])),r.add(e),this.sortedAnnotationsByKey.sort(((e,t)=>{const r=e[1];return t[1].size-r.size}));const n=e.getSender();let i=this.annotationsBySender[n];i||(i=this.annotationsBySender[n]=new Set),i.add(e)}removeAnnotationFromAggregation(e){const{key:t}=e.getRelation();if(!t)return;const r=this.annotationsByKey[t];r&&(r.delete(e),this.sortedAnnotationsByKey.sort(((e,t)=>{const r=e[1];return t[1].size-r.size})));const n=e.getSender(),i=this.annotationsBySender[n];i&&i.delete(e)}getSortedAnnotationsByKey(){return this.relationType!==a.RelationType.Annotation?null:this.sortedAnnotationsByKey}getAnnotationsBySender(){return this.relationType!==a.RelationType.Annotation?null:this.annotationsBySender}getLastReplacement(){return n(this,void 0,void 0,(function*(){if(this.relationType!==a.RelationType.Replace)return null;if(!this.targetEvent)return null;const e=this.targetEvent.getServerAggregatedRelation(a.RelationType.Replace),t=e&&e.origin_server_ts,r=this.getRelations().reduce(((e,r)=>r.getSender()!==this.targetEvent.getSender()||t&&t>r.getTs()||e&&e.getTs()>r.getTs()?e:r),null);return(null==r?void 0:r.shouldAttemptDecryption())?yield r.attemptDecryption(this.room.client.crypto):(null==r?void 0:r.isBeingDecrypted())&&(yield r.getDecryptionPromise()),r}))}setTargetEvent(e){return n(this,void 0,void 0,(function*(){if(!this.targetEvent){if(this.targetEvent=e,this.relationType===a.RelationType.Replace){const e=yield this.getLastReplacement();e&&this.targetEvent.makeReplaced(e)}this.maybeEmitCreated()}}))}maybeEmitCreated(){this.creationEmitted||this.targetEvent&&this.relations.size&&(this.creationEmitted=!0,this.targetEvent.emit("Event.relationsCreated",this.relationType,this.eventType))}}r.Relations=c},{"../@types/event":58,"../logger":106,"./event":113,events:36}],116:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(r,"__esModule",{value:!0}),r.RoomMember=void 0;const s=e("events"),a=e("../content-repo"),c=o(e("../utils"));class u extends s.EventEmitter{constructor(e,t){super(),this.roomId=e,this.userId=t,this._isOutOfBand=!1,this.typing=!1,this.powerLevel=0,this.powerLevelNorm=0,this.user=null,this.membership=null,this.disambiguate=!1,this.events={member:null},this.name=t,this.rawDisplayName=t,this.updateModifiedTime()}markOutOfBand(){this._isOutOfBand=!0}isOutOfBand(){return this._isOutOfBand}setMembershipEvent(e,t){const r=e.getDirectionalContent().displayname;if("m.room.member"!==e.getType())return;this._isOutOfBand=!1,this.events.member=e;const n=this.membership;this.membership=e.getDirectionalContent().membership,this.disambiguate=function(e,t,r){if(!t||t===e)return!1;if(!c.removeHiddenChars(t))return!1;if(!r)return!1;if(l.test(t))return!0;if(d.test(t))return!0;return!!r.getUserIdsWithDisplayName(t).some((t=>t!==e))}(this.userId,r,t);const i=this.name;this.name=function(e,t,r,n){return n?t+" ("+e+")":t&&t!==e&&c.removeHiddenChars(t)?t:e}(this.userId,r,0,this.disambiguate),this.rawDisplayName=e.getDirectionalContent().displayname||this.userId,n!==this.membership&&(this.updateModifiedTime(),this.emit("RoomMember.membership",e,this,n)),i!==this.name&&(this.updateModifiedTime(),this.emit("RoomMember.name",e,this,i))}setPowerLevelEvent(e){if("m.room.power_levels"!==e.getType())return;const t=e.getDirectionalContent();let r=t.users_default||0;const n=t.users||{};Object.values(n).forEach((function(e){r=Math.max(r,e)}));const i=this.powerLevel,o=this.powerLevelNorm;void 0!==n[this.userId]&&Number.isInteger(n[this.userId])?this.powerLevel=n[this.userId]:void 0!==t.users_default?this.powerLevel=t.users_default:this.powerLevel=0,this.powerLevelNorm=0,r>0&&(this.powerLevelNorm=100*this.powerLevel/r),i===this.powerLevel&&o===this.powerLevelNorm||(this.updateModifiedTime(),this.emit("RoomMember.powerLevel",e,this))}setTypingEvent(e){if("m.typing"!==e.getType())return;const t=this.typing;this.typing=!1;const r=e.getContent().user_ids;Array.isArray(r)&&(-1!==r.indexOf(this.userId)&&(this.typing=!0),t!==this.typing&&(this.updateModifiedTime(),this.emit("RoomMember.typing",e,this)))}updateModifiedTime(){this._modified=Date.now()}getLastModifiedTime(){return this._modified}isKicked(){return"leave"===this.membership&&this.events.member.getSender()!==this.events.member.getStateKey()}getDMInviter(){if(this.events.member){const e=this.events.member;let t=e.getContent(),r=e.getSender();if("join"===t.membership&&(t=e.getPrevContent(),r=e.getUnsigned().prev_sender),"invite"===t.membership&&t.is_direct)return r}}getAvatarUrl(e,t,r,n,i=!0,o){const s=this.getMxcAvatarUrl();if(!s&&!i)return null;const c=a.getHttpUriForMxc(e,s,t,r,n,o);return c||null}getMxcAvatarUrl(){return this.events.member?this.events.member.getDirectionalContent().avatar_url:this.user?this.user.avatarUrl:null}}r.RoomMember=u;const l=/@.+:.+/,d=/[\u200E\u200F\u202A-\u202F]/},{"../content-repo":66,"../utils":137,events:36}],117:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t};Object.defineProperty(r,"__esModule",{value:!0}),r.RoomState=void 0;const s=e("events"),a=e("./room-member"),c=e("../logger"),u=o(e("../utils")),l=e("../@types/event");var d;!function(e){e[e.NotStarted=0]="NotStarted",e[e.InProgress=1]="InProgress",e[e.Finished=2]="Finished"}(d||(d={}));class h extends s.EventEmitter{constructor(e,t={status:d.NotStarted}){super(),this.roomId=e,this.oobMemberFlags=t,this.sentinels={},this.displayNameToUserIds={},this.userIdsToDisplayNames={},this.tokenToInvite={},this.joinedMemberCount=null,this.summaryJoinedMemberCount=null,this.invitedMemberCount=null,this.summaryInvitedMemberCount=null,this.members={},this.events=new Map,this.paginationToken=null,this.updateModifiedTime()}getJoinedMemberCount(){return null!==this.summaryJoinedMemberCount?this.summaryJoinedMemberCount:(null===this.joinedMemberCount&&(this.joinedMemberCount=this.getMembers().reduce(((e,t)=>"join"===t.membership?e+1:e),0)),this.joinedMemberCount)}setJoinedMemberCount(e){this.summaryJoinedMemberCount=e}getInvitedMemberCount(){return null!==this.summaryInvitedMemberCount?this.summaryInvitedMemberCount:(null===this.invitedMemberCount&&(this.invitedMemberCount=this.getMembers().reduce(((e,t)=>"invite"===t.membership?e+1:e),0)),this.invitedMemberCount)}setInvitedMemberCount(e){this.summaryInvitedMemberCount=e}getMembers(){return Object.values(this.members)}getMembersExcept(e){return this.getMembers().filter((t=>!e.includes(t.userId)))}getMember(e){return this.members[e]||null}getSentinelMember(e){if(!e)return null;let t=this.sentinels[e];if(void 0===t){t=new a.RoomMember(this.roomId,e);const r=this.members[e];r&&t.setMembershipEvent(r.events.member,this),this.sentinels[e]=t}return t}getStateEvents(e,t){if(!this.events.has(e))return void 0===t?[]:null;if(void 0===t)return Array.from(this.events.get(e).values());const r=this.events.get(e).get(t);return r||null}clone(){const e=new h(this.roomId,this.oobMemberFlags),t=this.oobMemberFlags.status;return this.oobMemberFlags.status=d.NotStarted,Array.from(this.events.values()).forEach((t=>{e.setStateEvents(Array.from(t.values()))})),this.oobMemberFlags.status=t,null!==this.summaryInvitedMemberCount&&e.setInvitedMemberCount(this.getInvitedMemberCount()),null!==this.summaryJoinedMemberCount&&e.setJoinedMemberCount(this.getJoinedMemberCount()),this.oobMemberFlags.status==d.Finished&&this.getMembers().forEach((t=>{if(t.isOutOfBand()){e.getMember(t.userId).markOutOfBand()}})),e}setUnknownStateEvents(e){const t=e.filter((e=>!this.events.has(e.getType())||!this.events.get(e.getType()).has(e.getStateKey())));this.setStateEvents(t)}setStateEvents(e){this.updateModifiedTime(),e.forEach((e=>{if(e.getRoomId()!==this.roomId)return;if(!e.isState())return;const t=this.getStateEventMatching(e);this.setStateEvent(e),e.getType()===l.EventType.RoomMember&&(this.updateDisplayNameCache(e.getStateKey(),e.getContent().displayname),this.updateThirdPartyTokenCache(e)),this.emit("RoomState.events",e,this,t)})),e.forEach((e=>{if(e.getRoomId()===this.roomId&&e.isState())if(e.getType()===l.EventType.RoomMember){const t=e.getStateKey();"leave"!==e.getContent().membership&&"ban"!==e.getContent().membership||(e.getContent().avatar_url=e.getContent().avatar_url||e.getPrevContent().avatar_url,e.getContent().displayname=e.getContent().displayname||e.getPrevContent().displayname);const r=this.getOrCreateMember(t,e);r.setMembershipEvent(e,this),this.updateMember(r),this.emit("RoomState.members",e,this,r)}else if(e.getType()===l.EventType.RoomPowerLevels){if(""!==e.getStateKey())return;Object.values(this.members).forEach((t=>{const r=t.getLastModifiedTime();t.setPowerLevelEvent(e),r!==t.getLastModifiedTime()&&this.emit("RoomState.members",e,this,t)})),this.sentinels={}}}))}getOrCreateMember(e,t){let r=this.members[e];return r||(r=new a.RoomMember(this.roomId,e),this.members[e]=r,this.emit("RoomState.newMember",t,this,r)),r}setStateEvent(e){this.events.has(e.getType())||this.events.set(e.getType(),new Map),this.events.get(e.getType()).set(e.getStateKey(),e)}getStateEventMatching(e){return this.events.has(e.getType())?this.events.get(e.getType()).get(e.getStateKey()):null}updateMember(e){const t=this.getStateEvents(l.EventType.RoomPowerLevels,"");t&&e.setPowerLevelEvent(t),delete this.sentinels[e.userId],this.members[e.userId]=e,this.joinedMemberCount=null,this.invitedMemberCount=null}needsOutOfBandMembers(){return this.oobMemberFlags.status===d.NotStarted}markOutOfBandMembersStarted(){this.oobMemberFlags.status===d.NotStarted&&(this.oobMemberFlags.status=d.InProgress)}markOutOfBandMembersFailed(){this.oobMemberFlags.status===d.InProgress&&(this.oobMemberFlags.status=d.NotStarted)}clearOutOfBandMembers(){let e=0;Object.keys(this.members).forEach((t=>{this.members[t].isOutOfBand()&&(++e,delete this.members[t])})),c.logger.log(`LL: RoomState removed ${e} members...`),this.oobMemberFlags.status=d.NotStarted}setOutOfBandMembers(e){c.logger.log(`LL: RoomState about to set ${e.length} OOB members ...`),this.oobMemberFlags.status===d.InProgress&&(c.logger.log("LL: RoomState put in finished state ..."),this.oobMemberFlags.status=d.Finished,e.forEach((e=>this.setOutOfBandMember(e))))}setOutOfBandMember(e){if(e.getType()!==l.EventType.RoomMember)return;const t=e.getStateKey(),r=this.getMember(t);if(r&&!r.isOutOfBand())return;const n=this.getOrCreateMember(t,e);n.setMembershipEvent(e,this),n.markOutOfBand(),this.updateDisplayNameCache(n.userId,n.name),this.setStateEvent(e),this.updateMember(n),this.emit("RoomState.members",e,this,n)}setTypingEvent(e){Object.values(this.members).forEach((function(t){t.setTypingEvent(e)}))}getInviteForThreePidToken(e){return this.tokenToInvite[e]||null}updateModifiedTime(){this.modified=Date.now()}getLastModifiedTime(){return this.modified}getUserIdsWithDisplayName(e){return this.displayNameToUserIds[u.removeHiddenChars(e)]||[]}maySendRedactionForEvent(e,t){const r=this.getMember(t);if(!r||"leave"===r.membership)return!1;if(e.status||e.isRedacted())return!1;const n=this.maySendEvent(l.EventType.RoomRedaction,t);return e.getSender()===t?n:this.hasSufficientPowerLevelFor("redact",r.powerLevel)}hasSufficientPowerLevelFor(e,t){const r=this.getStateEvents(l.EventType.RoomPowerLevels,"");let n={};r&&(n=r.getContent());let i=50;return u.isNumber(n[e])&&(i=n[e]),t>=i}maySendMessage(e){return this.maySendEventOfType(l.EventType.RoomMessage,e,!1)}maySendEvent(e,t){return this.maySendEventOfType(e,t,!1)}mayClientSendStateEvent(e,t){return!t.isGuest()&&this.maySendStateEvent(e,t.credentials.userId)}maySendStateEvent(e,t){return this.maySendEventOfType(e,t,!0)}maySendEventOfType(e,t,r){const n=this.getStateEvents(l.EventType.RoomPowerLevels,"");let i,o={},s=0,a=0,c=0;if(n){i=n.getContent(),o=i.events||{},s=Number.isSafeInteger(i.state_default)?i.state_default:50;const e=i.users&&i.users[t];Number.isSafeInteger(e)?c=e:Number.isSafeInteger(i.users_default)&&(c=i.users_default),Number.isSafeInteger(i.events_default)&&(a=i.events_default)}let u=r?s:a;return Number.isSafeInteger(o[e])&&(u=o[e]),c>=u}mayTriggerNotifOfType(e,t){const r=this.getMember(t);if(!r)return!1;const n=this.getStateEvents(l.EventType.RoomPowerLevels,"");let i=50;return n&&n.getContent()&&n.getContent().notifications&&u.isNumber(n.getContent().notifications[e])&&(i=n.getContent().notifications[e]),r.powerLevel>=i}getJoinRule(){const e=this.getStateEvents(l.EventType.RoomJoinRules,"");return(e?e.getContent():{}).join_rule||"invite"}updateThirdPartyTokenCache(e){if(!e.getContent().third_party_invite)return;const t=(e.getContent().third_party_invite.signed||{}).token;if(!t)return;this.getStateEvents(l.EventType.RoomThirdPartyInvite,t)&&(this.tokenToInvite[t]=e)}updateDisplayNameCache(e,t){const r=this.userIdsToDisplayNames[e];if(delete this.userIdsToDisplayNames[e],r){const t=u.removeHiddenChars(r),n=this.displayNameToUserIds[t];if(n){const r=n.filter((t=>t!==e));this.displayNameToUserIds[t]=r}}this.userIdsToDisplayNames[e]=t;const n=t&&u.removeHiddenChars(t);n&&(this.displayNameToUserIds[n]||(this.displayNameToUserIds[n]=[]),this.displayNameToUserIds[n].push(e))}}r.RoomState=h},{"../@types/event":58,"../logger":106,"../utils":137,"./room-member":116,events:36}],118:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.RoomSummary=void 0;r.RoomSummary=class{constructor(e,t){this.roomId=e}}},{}],119:[function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.Room=r.NotificationCountType=void 0;const a=e("events"),c=e("./event-timeline-set"),u=e("./event-timeline"),l=e("../content-repo"),d=o(e("../utils")),h=e("../utils"),f=e("./event"),g=e("./room-member"),p=e("./room-summary"),v=e("../logger"),y=e("../ReEmitter"),m=e("../@types/event"),b=e("../client"),S=["1","2","3","4","5","6"];function _(e,t,r){const n={content:{},type:"m.receipt",room_id:t.getRoomId()};return n.content[t.getId()]={},n.content[t.getId()][r]={},n.content[t.getId()][r][e]={ts:t.getTs()},new f.MatrixEvent(n)}var E;!function(e){e.Highlight="highlight",e.Total="total"}(E=r.NotificationCountType||(r.NotificationCountType={}));class k extends a.EventEmitter{constructor(e,t,r,n={}){if(super(),this.roomId=e,this.client=t,this.myUserId=r,this.opts=n,this.txnToEvent={},this.receipts={},this.receiptCacheByEventId={},this.realReceipts={},this.notificationCounts={},this.filteredTimelineSets={},this.blacklistUnverifiedDevices=null,this.selfMembership=null,this.summaryHeroes=null,this.getTypeWarning=!1,this.getVersionWarning=!1,this.tags={},this.accountData={},this.summary=null,this.setMaxListeners(100),this.reEmitter=new y.ReEmitter(this),n.pendingEventOrdering=n.pendingEventOrdering||"chronological",-1===["chronological","detached"].indexOf(n.pendingEventOrdering))throw new Error("opts.pendingEventOrdering MUST be either 'chronological' or 'detached'. Got: '"+n.pendingEventOrdering+"'");if(this.name=e,this.timelineSets=[new c.EventTimelineSet(this,n)],this.reEmitter.reEmit(this.getUnfilteredTimelineSet(),["Room.timeline","Room.timelineReset"]),this.fixUpLegacyTimelineFields(),"detached"==this.opts.pendingEventOrdering){this.pendingEventList=[];const e=t.sessionStore.store.getItem(w(this.roomId));e&&JSON.parse(e).forEach((e=>s(this,void 0,void 0,(function*(){const t=new f.MatrixEvent(e);t.getType()===m.EventType.RoomMessageEncrypted&&(yield t.attemptDecryption(this.client.crypto)),t.setStatus(f.EventStatus.NOT_SENT),this.addPendingEvent(t,t.getTxnId())}))))}this.opts.lazyLoadMembers?this.membersPromise=null:this.membersPromise=Promise.resolve(!1)}decryptCriticalEvents(){const e=this.getEventReadUpTo(this.client.getUserId(),!0),t=this.getLiveTimeline().getEvents(),r=t.findIndex((t=>t.event.event_id===e)),n=t.slice(r).filter((e=>e.shouldAttemptDecryption())).reverse().map((e=>e.attemptDecryption(this.client.crypto,{isRetry:!0})));return Promise.allSettled(n)}decryptAllEvents(){const e=this.getUnfilteredTimelineSet().getLiveTimeline().getEvents().filter((e=>e.shouldAttemptDecryption())).reverse().map((e=>e.attemptDecryption(this.client.crypto,{isRetry:!0})));return Promise.allSettled(e)}getVersion(){const e=this.currentState.getStateEvents(m.EventType.RoomCreate,"");if(!e)return this.getVersionWarning||(v.logger.warn("[getVersion] Room "+this.roomId+" does not have an m.room.create event"),this.getVersionWarning=!0),"1";const t=e.getContent().room_version;return void 0===t?"1":t}shouldUpgradeToVersion(){return S.includes(this.getVersion())?null:"6"}getRecommendedVersion(){return s(this,void 0,void 0,(function*(){let e=(yield this.client.getCapabilities())["m.room_versions"];if(!e){e={default:"6",available:{}};for(const t of S)e.available[t]=b.RoomVersionStability.Stable}let t=this.checkVersionAgainstCapability(e);if(t.urgent&&t.needsUpgrade){v.logger.warn("Refreshing room version capability because the server looks to be supporting a newer room version we don't know about.");if(e=(yield this.client.getCapabilities(!0))["m.room_versions"],!e)return v.logger.warn("No room version capability - assuming upgrade required."),t;t=this.checkVersionAgainstCapability(e)}return t}))}checkVersionAgainstCapability(e){const t=this.getVersion();v.logger.log(`[${this.roomId}] Current version: ${t}`),v.logger.log(`[${this.roomId}] Version capability: `,e);const r={version:t,needsUpgrade:!1,urgent:!1};if(t===e.default)return r;return Object.keys(e.available).filter((t=>"stable"===e.available[t])).includes(t)||(r.version=e.default,r.needsUpgrade=!0,r.urgent=!!this.getVersion().match(/^[0-9]+[0-9.]*$/g),r.urgent?v.logger.warn(`URGENT upgrade required on ${this.roomId}`):v.logger.warn(`Non-urgent upgrade required on ${this.roomId}`)),r}userMayUpgradeRoom(e){return this.currentState.maySendStateEvent(m.EventType.RoomTombstone,e)}getPendingEvents(){if("detached"!==this.opts.pendingEventOrdering)throw new Error("Cannot call getPendingEvents with pendingEventOrdering == "+this.opts.pendingEventOrdering);return this.pendingEventList}removePendingEvent(e){if("detached"!==this.opts.pendingEventOrdering)throw new Error("Cannot call removePendingEvent with pendingEventOrdering == "+this.opts.pendingEventOrdering);const t=d.removeElement(this.pendingEventList,(function(t){return t.getId()==e}),!1);return this.savePendingEvents(),t}hasPendingEvent(e){return"detached"===this.opts.pendingEventOrdering&&this.pendingEventList.some((t=>t.getId()===e))}getPendingEvent(e){return"detached"!==this.opts.pendingEventOrdering?null:this.pendingEventList.find((t=>t.getId()===e))}getLiveTimeline(){return this.getUnfilteredTimelineSet().getLiveTimeline()}getLastActiveTimestamp(){const e=this.getLiveTimeline().getEvents();if(e.length){return e[e.length-1].getTs()}return Number.MIN_SAFE_INTEGER}getMyMembership(){return this.selfMembership}getDMInviter(){if(this.myUserId){const e=this.getMember(this.myUserId);if(e)return e.getDMInviter()}if("invite"===this.selfMembership){if(2==this.getInvitedAndJoinedMemberCount()&&this.summaryHeroes.length)return this.summaryHeroes[0]}}guessDMUserId(){const e=this.getMember(this.myUserId);if(e){const t=e.getDMInviter();if(t)return t}if(Array.isArray(this.summaryHeroes)&&this.summaryHeroes.length)return this.summaryHeroes[0];const t=this.currentState.getMembers().find((e=>e.userId!==this.myUserId));return t?t.userId:this.myUserId}getAvatarFallbackMember(){if(this.getInvitedAndJoinedMemberCount()>2)return;const e=Array.isArray(this.summaryHeroes)&&this.summaryHeroes.length;if(e){const e=this.summaryHeroes.map((e=>this.getMember(e))).find((e=>!!e));if(e)return e}const t=this.currentState.getMembers();if(t.length<=2){const e=t.find((e=>e.userId!==this.myUserId));if(e)return e}if(e){const e=this.summaryHeroes.map((e=>this.client.getUser(e))).find((e=>!!e));if(e){const t=new g.RoomMember(this.roomId,e.userId);return t.user=e,t}}}updateMyMembership(e){const t=this.selfMembership;this.selfMembership=e,t!==e&&("leave"===e&&this.cleanupAfterLeaving(),this.emit("Room.myMembership",this,e,t))}loadMembersFromServer(){return s(this,void 0,void 0,(function*(){const e=this.client.store.getSyncToken(),t=d.encodeParams({not_membership:"leave",at:e}),r=d.encodeUri("/rooms/$roomId/members?"+t,{$roomId:this.roomId}),n=this.client.http;return(yield n.authedRequest(void 0,"GET",r)).chunk}))}loadMembers(){return s(this,void 0,void 0,(function*(){let e=!1,t=yield this.client.store.getOutOfBandMembers(this.roomId);null===t&&(e=!0,t=yield this.loadMembersFromServer(),v.logger.log(`LL: got ${t.length} members from server for room ${this.roomId}`));return{memberEvents:t.map(this.client.getEventMapper()),fromServer:e}}))}loadMembersIfNeeded(){if(this.membersPromise)return this.membersPromise;this.currentState.markOutOfBandMembersStarted();const e=this.loadMembers().then((e=>(this.currentState.setOutOfBandMembers(e.memberEvents),this.client.isCryptoEnabled()&&this.client.isRoomEncrypted(this.roomId)&&this.client.crypto.trackRoomDevices(this.roomId),e.fromServer))).catch((e=>{throw this.membersPromise=null,this.currentState.markOutOfBandMembersFailed(),e}));return e.then((e=>{if(e){const e=this.currentState.getMembers().filter((e=>e.isOutOfBand())).map((e=>e.events.member.event));v.logger.log(`LL: telling store to write ${e.length} members for room ${this.roomId}`);return this.client.store.setOutOfBandMembers(this.roomId,e).catch((e=>{v.logger.log("LL: storing OOB room members failed, oh well",e)}))}})).catch((e=>{v.logger.error(e)})),this.membersPromise=e,this.membersPromise}clearLoadedMembersIfNeeded(){return s(this,void 0,void 0,(function*(){this.opts.lazyLoadMembers&&this.membersPromise&&(yield this.loadMembersIfNeeded(),yield this.client.store.clearOutOfBandMembers(this.roomId),this.currentState.clearOutOfBandMembers(),this.membersPromise=null)}))}cleanupAfterLeaving(){this.clearLoadedMembersIfNeeded().catch((e=>{v.logger.error(`error after clearing loaded members from room ${this.roomId} after leaving`),v.logger.log(e)}))}resetLiveTimeline(e,t){for(let r=0;r<this.timelineSets.length;r++)this.timelineSets[r].resetLiveTimeline(e,t);this.fixUpLegacyTimelineFields()}fixUpLegacyTimelineFields(){this.timeline=this.getLiveTimeline().getEvents(),this.oldState=this.getLiveTimeline().getState(u.EventTimeline.BACKWARDS),this.currentState=this.getLiveTimeline().getState(u.EventTimeline.FORWARDS)}hasUnverifiedDevices(){return s(this,void 0,void 0,(function*(){if(!this.client.isRoomEncrypted(this.roomId))return!1;const e=yield this.getEncryptionTargetMembers();for(const t of e){if(this.client.getStoredDevicesForUser(t.userId).some((e=>e.isUnverified())))return!0}return!1}))}getTimelineSets(){return this.timelineSets}getUnfilteredTimelineSet(){return this.timelineSets[0]}getTimelineForEvent(e){return this.getUnfilteredTimelineSet().getTimelineForEvent(e)}addTimeline(){return this.getUnfilteredTimelineSet().addTimeline()}findEventById(e){return this.getUnfilteredTimelineSet().findEventById(e)}getUnreadNotificationCount(e=E.Total){return this.notificationCounts[e]}setUnreadNotificationCount(e,t){this.notificationCounts[e]=t}setSummary(e){const t=e["m.heroes"],r=e["m.joined_member_count"],n=e["m.invited_member_count"];Number.isInteger(r)&&this.currentState.setJoinedMemberCount(r),Number.isInteger(n)&&this.currentState.setInvitedMemberCount(n),Array.isArray(t)&&(this.summaryHeroes=t.filter((e=>e!==this.myUserId)))}setBlacklistUnverifiedDevices(e){this.blacklistUnverifiedDevices=e}getBlacklistUnverifiedDevices(){return this.blacklistUnverifiedDevices}getAvatarUrl(e,t,r,n,i=!0){const o=this.currentState.getStateEvents(m.EventType.RoomAvatar,"");if(!o&&!i)return null;const s=o?o.getContent().url:null;return s?l.getHttpUriForMxc(e,s,t,r,n):null}getMxcAvatarUrl(){var e,t;return(null===(t=null===(e=this.currentState.getStateEvents(m.EventType.RoomAvatar,""))||void 0===e?void 0:e.getContent())||void 0===t?void 0:t.url)||null}getAliases(){const e=[],t=this.currentState.getStateEvents(m.EventType.RoomAliases);if(t)for(let r=0;r<t.length;++r){const n=t[r];if(Array.isArray(n.getContent().aliases)){const t=n.getContent().aliases.filter((e=>"string"==typeof e&&("#"===e[0]&&!!e.endsWith(`:${n.getStateKey()}`))));Array.prototype.push.apply(e,t)}}return e}getCanonicalAlias(){const e=this.currentState.getStateEvents(m.EventType.RoomCanonicalAlias,"");return e&&e.getContent().alias||null}getAltAliases(){const e=this.currentState.getStateEvents(m.EventType.RoomCanonicalAlias,"");return e&&e.getContent().alt_aliases||[]}addEventsToTimeline(e,t,r,n){r.getTimelineSet().addEventsToTimeline(e,t,r,n)}getMember(e){return this.currentState.getMember(e)}getMembers(){return this.currentState.getMembers()}getJoinedMembers(){return this.getMembersWithMembership("join")}getJoinedMemberCount(){return this.currentState.getJoinedMemberCount()}getInvitedMemberCount(){return this.currentState.getInvitedMemberCount()}getInvitedAndJoinedMemberCount(){return this.getInvitedMemberCount()+this.getJoinedMemberCount()}getMembersWithMembership(e){return this.currentState.getMembers().filter((function(t){return t.membership===e}))}getEncryptionTargetMembers(){return s(this,void 0,void 0,(function*(){yield this.loadMembersIfNeeded();let e=this.getMembersWithMembership("join");return this.shouldEncryptForInvitedMembers()&&(e=e.concat(this.getMembersWithMembership("invite"))),e}))}shouldEncryptForInvitedMembers(){var e;const t=this.currentState.getStateEvents(m.EventType.RoomHistoryVisibility,"");return"joined"!==(null===(e=null==t?void 0:t.getContent())||void 0===e?void 0:e.history_visibility)}getDefaultRoomName(e){return this.calculateRoomName(e,!0)}hasMembershipState(e,t){const r=this.getMember(e);return!!r&&r.membership===t}getOrCreateFilteredTimelineSet(e){if(this.filteredTimelineSets[e.filterId])return this.filteredTimelineSets[e.filterId];const t=Object.assign({filter:e},this.opts),r=new c.EventTimelineSet(this,t);this.reEmitter.reEmit(r,["Room.timeline","Room.timelineReset"]),this.filteredTimelineSets[e.filterId]=r,this.timelineSets.push(r);const n=this.getLiveTimeline();n.getEvents().forEach((function(e){r.addLiveEvent(e)}));let i=n;for(;i.getNeighbouringTimeline(u.EventTimeline.BACKWARDS);)i=i.getNeighbouringTimeline(u.EventTimeline.BACKWARDS);return r.getLiveTimeline().setPaginationToken(i.getPaginationToken(u.EventTimeline.BACKWARDS),u.EventTimeline.BACKWARDS),r}removeFilteredTimelineSet(e){const t=this.filteredTimelineSets[e.filterId];delete this.filteredTimelineSets[e.filterId];const r=this.timelineSets.indexOf(t);r>-1&&this.timelineSets.splice(r,1)}addLiveEvent(e,t,r=!1){if(e.isRedaction()){const t=e.event.redacts,r=this.getUnfilteredTimelineSet().findEventById(t);if(r){if(r.makeRedacted(e),r.getStateKey()){this.currentState.getStateEvents(r.getType(),r.getStateKey()).getId()===r.getId()&&this.currentState.setStateEvents([r])}this.emit("Room.redaction",e,this)}}if(e.getUnsigned().transaction_id){const t=this.txnToEvent[e.getUnsigned().transaction_id];if(t)return void this.handleRemoteEcho(e,t)}for(let n=0;n<this.timelineSets.length;n++)this.timelineSets[n].addLiveEvent(e,t,r);e.sender&&e.getType()!==m.EventType.RoomRedaction&&this.addReceipt(_(e.sender.userId,e,"m.read"),!0)}addPendingEvent(e,t){if(e.status!==f.EventStatus.SENDING&&e.status!==f.EventStatus.NOT_SENT)throw new Error("addPendingEvent called on an event with status "+e.status);if(this.txnToEvent[t])throw new Error("addPendingEvent called on an event with known txnId "+t);if(u.EventTimeline.setEventMetadata(e,this.getLiveTimeline().getState(u.EventTimeline.FORWARDS),!1),this.txnToEvent[t]=e,"detached"==this.opts.pendingEventOrdering){if(this.pendingEventList.some((e=>e.status===f.EventStatus.NOT_SENT))&&(v.logger.warn("Setting event as NOT_SENT due to messages in the same state"),e.setStatus(f.EventStatus.NOT_SENT)),this.pendingEventList.push(e),this.savePendingEvents(),e.isRelation()&&this.aggregateNonLiveRelation(e),e.isRedaction()){const t=e.event.redacts;let r=this.pendingEventList&&this.pendingEventList.find((e=>e.getId()===t));r||(r=this.getUnfilteredTimelineSet().findEventById(t)),r&&(r.markLocallyRedacted(e),this.emit("Room.redaction",e,this))}}else for(let t=0;t<this.timelineSets.length;t++){const r=this.timelineSets[t];r.getFilter()?r.getFilter().filterRoomTimeline([e]).length&&r.addEventToTimeline(e,r.getLiveTimeline(),!1):r.addEventToTimeline(e,r.getLiveTimeline(),!1)}this.emit("Room.localEchoUpdated",e,this,null,null)}savePendingEvents(){if(this.pendingEventList){const e=this.pendingEventList.map((e=>Object.assign(Object.assign({},e.event),{txn_id:e.getTxnId()}))).filter((e=>{const t=e.type===m.EventType.RoomMessageEncrypted,r=this.client.isRoomEncrypted(this.roomId);return t||!r})),{store:t}=this.client.sessionStore;this.pendingEventList.length>0?t.setItem(w(this.roomId),JSON.stringify(e)):t.removeItem(w(this.roomId))}}aggregateNonLiveRelation(e){for(let t=0;t<this.timelineSets.length;t++){const r=this.timelineSets[t];r.getFilter()?r.getFilter().filterRoomTimeline([e]).length&&r.aggregateRelations(e):r.aggregateRelations(e)}}handleRemoteEcho(e,t){const r=t.getId(),n=e.getId(),i=t.status;v.logger.debug(`Got remote echo for event ${r} -> ${n} old status ${i}`),delete this.txnToEvent[e.getUnsigned().transaction_id],this.pendingEventList&&this.removePendingEvent(r),t.handleRemoteEcho(e.event);for(let e=0;e<this.timelineSets.length;e++){this.timelineSets[e].handleRemoteEcho(t,r,n)}this.emit("Room.localEchoUpdated",t,this,r,i)}updatePendingEvent(e,t,r){if(v.logger.log(`setting pendingEvent status to ${t} in ${e.getRoomId()} event ID ${e.getId()} -> ${r}`),t==f.EventStatus.SENT&&!r)throw new Error("updatePendingEvent called with status=SENT, but no new event id");if(t==f.EventStatus.SENT){if(this.getUnfilteredTimelineSet().eventIdToTimeline(r))return}const n=e.status,i=e.getId();if(!n)throw new Error("updatePendingEventStatus called on an event which is not a local echo.");const o=I[n];if(!o||o.indexOf(t)<0)throw new Error("Invalid EventStatus transition "+n+"->"+t);if(e.setStatus(t),t==f.EventStatus.SENT){e.replaceLocalEventId(r);for(let e=0;e<this.timelineSets.length;e++)this.timelineSets[e].replaceEventId(i,r)}else if(t==f.EventStatus.CANCELLED){if(this.pendingEventList){const e=this.pendingEventList.findIndex((e=>e.getId()===i));if(-1!==e){const[t]=this.pendingEventList.splice(e,1);t.isRedaction()&&this.revertRedactionLocalEcho(t)}}this.removeEvent(i)}this.savePendingEvents(),this.emit("Room.localEchoUpdated",e,this,i,n)}revertRedactionLocalEcho(e){const t=e.event.redacts;if(!t)return;const r=this.getUnfilteredTimelineSet().findEventById(t);r&&(r.unmarkLocallyRedacted(),this.emit("Room.redactionCancelled",e,this),r.isRelation()&&this.aggregateNonLiveRelation(r))}addLiveEvents(e,t,r=!1){let n;if(t&&-1===["replace","ignore"].indexOf(t))throw new Error("duplicateStrategy MUST be either 'replace' or 'ignore'");for(n=0;n<this.timelineSets.length;n++){const e=this.timelineSets[n].getLiveTimeline();if(e.getPaginationToken(u.EventTimeline.FORWARDS))throw new Error("live timeline "+n+" is no longer live - it has a pagination token ("+e.getPaginationToken(u.EventTimeline.FORWARDS)+")");if(e.getNeighbouringTimeline(u.EventTimeline.FORWARDS))throw new Error("live timeline "+n+" is no longer live - it has a neighbouring timeline")}for(n=0;n<e.length;n++)this.addLiveEvent(e[n],t,r)}addEphemeralEvents(e){for(const t of e)"m.typing"===t.getType()?this.currentState.setTypingEvent(t):"m.receipt"===t.getType()&&this.addReceipt(t)}removeEvents(e){for(let t=0;t<e.length;++t)this.removeEvent(e[t])}removeEvent(e){let t=!1;for(let r=0;r<this.timelineSets.length;r++){const n=this.timelineSets[r].removeEvent(e);n&&(n.isRedaction()&&this.revertRedactionLocalEcho(n),t=!0)}return t}recalculate(){const e=this.currentState.getStateEvents(m.EventType.RoomMember,this.myUserId);if(e&&"invite"===e.getContent().membership){(e.getUnsigned().invite_room_state||[]).forEach((e=>{this.currentState.getStateEvents(e.type,e.state_key)||this.currentState.setStateEvents([new f.MatrixEvent({type:e.type,state_key:e.state_key,content:e.content,event_id:"$fake"+Date.now(),room_id:this.roomId,user_id:this.myUserId})])}))}const t=this.name;this.name=this.calculateRoomName(this.myUserId),this.normalizedName=h.normalize(this.name),this.summary=new p.RoomSummary(this.roomId,{title:this.name}),t!==this.name&&this.emit("Room.name",this)}getUsersReadUpTo(e){return this.getReceiptsForEvent(e).filter((function(e){return"m.read"===e.type})).map((function(e){return e.userId}))}getEventReadUpTo(e,t=!1){let r=this.receipts;return t&&(r=this.realReceipts),void 0===r["m.read"]||void 0===r["m.read"][e]?null:r["m.read"][e].eventId}hasUserReadEvent(e,t){const r=this.getEventReadUpTo(e,!1);if(r===t)return!0;if(this.timeline.length&&this.timeline[this.timeline.length-1].getSender()&&this.timeline[this.timeline.length-1].getSender()===e)return!0;for(let e=this.timeline.length-1;e>=0;--e){const n=this.timeline[e];if(n.getId()===t)return!1;if(n.getId()===r)return!0}return!1}getReceiptsForEvent(e){return this.receiptCacheByEventId[e.getId()]||[]}addReceipt(e,t=!1){t||this.addReceiptsToStructure(e,this.realReceipts),this.addReceiptsToStructure(e,this.receipts),this.receiptCacheByEventId=this.buildReceiptCache(this.receipts),this.emit("Room.receipt",e,this)}addReceiptsToStructure(e,t){const r=e.getContent();Object.keys(r).forEach((e=>{Object.keys(r[e]).forEach((n=>{Object.keys(r[e][n]).forEach((i=>{const o=r[e][n][i];t[n]||(t[n]={});const s=t[n][i];if(s){const t=this.getUnfilteredTimelineSet().compareEventOrdering(s.eventId,e);if(null!==t&&t>=0)return}else t[n][i]={};t[n][i]={eventId:e,data:o}}))}))}))}buildReceiptCache(e){const t={};return Object.keys(e).forEach((function(r){Object.keys(e[r]).forEach((function(n){const i=e[r][n];t[i.eventId]||(t[i.eventId]=[]),t[i.eventId].push({userId:n,type:r,data:i.data})}))})),t}addLocalEchoReceipt(e,t,r){this.addReceipt(_(e,t,r),!0)}addTags(e){this.tags=e.getContent().tags||{},this.emit("Room.tags",e,this)}addAccountData(e){for(let t=0;t<e.length;t++){const r=e[t];"m.tag"===r.getType()&&this.addTags(r);const n=this.accountData[r.getType()];this.accountData[r.getType()]=r,this.emit("Room.accountData",r,this,n)}}getAccountData(e){return this.accountData[e]}maySendMessage(){return"join"===this.getMyMembership()&&this.currentState.maySendEvent(m.EventType.RoomMessage,this.myUserId)}canInvite(e){let t="join"===this.getMyMembership();const r=this.currentState.getStateEvents(m.EventType.RoomPowerLevels,""),n=r&&r.getContent(),i=this.getMember(e);return n&&i&&n.invite>i.powerLevel&&(t=!1),t}getJoinRule(){return this.currentState.getJoinRule()}getType(){const e=this.currentState.getStateEvents(m.EventType.RoomCreate,"");if(e)return e.getContent()[m.RoomCreateTypeField];this.getTypeWarning||(v.logger.warn("[getType] Room "+this.roomId+" does not have an m.room.create event"),this.getTypeWarning=!0)}isSpaceRoom(){return this.getType()===m.RoomType.Space}calculateRoomName(e,t=!1){if(!t){const e=this.currentState.getStateEvents(m.EventType.RoomName,"");if(e&&e.getContent()&&e.getContent().name)return e.getContent().name}let r=this.getCanonicalAlias();if(!r){const e=this.getAltAliases();e.length&&(r=e[0])}if(r)return r;const n=this.currentState.getJoinedMemberCount()+this.currentState.getInvitedMemberCount()-1;let i=null;if(this.summaryHeroes)i=this.summaryHeroes.map((e=>{const t=this.getMember(e);return t?t.name:e}));else{let t=this.currentState.getMembers().filter((t=>t.userId!==e&&("invite"===t.membership||"join"===t.membership)));t.sort(((e,t)=>e.userId.localeCompare(t.userId))),t=t.slice(0,5),i=t.map((e=>e.name))}if(n)return T(i,n);if("join"==this.getMyMembership()){const e=this.currentState.getStateEvents(m.EventType.RoomThirdPartyInvite);if(e&&e.length){return`Inviting ${T(e.map((e=>e.getContent().display_name)))}`}}let o=i;return o.length||(o=this.currentState.getMembers().filter((t=>t.userId!==e&&"invite"!==t.membership&&"join"!==t.membership)).map((e=>e.name))),o.length?`Empty room (was ${T(o)})`:"Empty room"}}function w(e){return`mx_pending_events_${e}`}r.Room=k;const I={};function T(e,t=e.length+1){const r=t-1;if(e.length){if(1===e.length&&r<=1)return e[0];if(2===e.length&&r<=2)return`${e[0]} and ${e[1]}`;return r>1?`${e[0]} and ${r} others`:`${e[0]} and 1 other`}return"Empty room"}I[f.EventStatus.ENCRYPTING]=[f.EventStatus.SENDING,f.EventStatus.NOT_SENT],I[f.EventStatus.SENDING]=[f.EventStatus.ENCRYPTING,f.EventStatus.QUEUED,f.EventStatus.NOT_SENT,f.EventStatus.SENT],I[f.EventStatus.QUEUED]=[f.EventStatus.SENDING,f.EventStatus.CANCELLED],I[f.EventStatus.SENT]=[],I[f.EventStatus.NOT_SENT]=[f.EventStatus.SENDING,f.EventStatus.QUEUED,f.EventStatus.CANCELLED],I[f.EventStatus.CANCELLED]=[]},{"../@types/event":58,"../ReEmitter":61,"../client":64,"../content-repo":66,"../logger":106,"../utils":137,"./event":113,"./event-timeline":112,"./event-timeline-set":111,"./room-member":116,"./room-summary":118,events:36}],120:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.SearchResult=i;var n=e("./event-context");function i(e,t){this.rank=e,this.context=t}i.fromJson=function(e,t){var r=e.context||{},o=r.events_before||[],s=r.events_after||[],a=new n.EventContext(t(e.result));return a.setPaginateToken(r.start,!0),a.addEvents(o.map(t),!0),a.addEvents(s.map(t),!1),a.setPaginateToken(r.end,!1),new i(e.rank,a)}},{"./event-context":110}],121:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.User=void 0;const n=e("events");class i extends n.EventEmitter{constructor(e){super(),this.userId=e,this.presenceStatusMsg=null,this.presence="offline",this.lastActiveAgo=0,this.lastPresenceTs=0,this.currentlyActive=!1,this.events={presence:null,profile:null},this.unstable_statusMessage="",this.displayName=e,this.rawDisplayName=e,this.avatarUrl=null,this.updateModifiedTime()}setPresenceEvent(e){if("m.presence"!==e.getType())return;const t=null===this.events.presence;this.events.presence=e;const r=[];(e.getContent().presence!==this.presence||t)&&r.push("User.presence"),e.getContent().avatar_url&&e.getContent().avatar_url!==this.avatarUrl&&r.push("User.avatarUrl"),e.getContent().displayname&&e.getContent().displayname!==this.displayName&&r.push("User.displayName"),void 0!==e.getContent().currently_active&&e.getContent().currently_active!==this.currentlyActive&&r.push("User.currentlyActive"),this.presence=e.getContent().presence,r.push("User.lastPresenceTs"),e.getContent().status_msg&&(this.presenceStatusMsg=e.getContent().status_msg),e.getContent().displayname&&(this.displayName=e.getContent().displayname),e.getContent().avatar_url&&(this.avatarUrl=e.getContent().avatar_url),this.lastActiveAgo=e.getContent().last_active_ago,this.lastPresenceTs=Date.now(),this.currentlyActive=e.getContent().currently_active,this.updateModifiedTime();for(let t=0;t<r.length;t++)this.emit(r[t],e,this)}setDisplayName(e){const t=this.displayName;this.displayName="string"==typeof e?e:void 0,e!==t&&this.updateModifiedTime()}setRawDisplayName(e){this.rawDisplayName="string"==typeof e?e:void 0}setAvatarUrl(e){const t=this.avatarUrl;this.avatarUrl=e,e!==t&&this.updateModifiedTime()}updateModifiedTime(){this.modified=Date.now()}getLastModifiedTime(){return this.modified}getLastActiveTs(){return this.lastPresenceTs-this.lastActiveAgo}unstable_updateStatusMessage(e){e.getContent()?this.unstable_statusMessage=e.getContent().status:this.unstable_statusMessage="",this.updateModifiedTime(),this.emit("User.unstable_statusMessage",this)}}r.User=i},{events:36}],122:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.PushProcessor=d;var i=n(e("@babel/runtime/helpers/typeof")),o=e("./utils"),s=e("./logger");function a(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return c(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return c(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var u=["override","content","room","sender","underride"],l=[{rule_id:".m.rule.tombstone",default:!0,enabled:!0,conditions:[{kind:"event_match",key:"type",pattern:"m.room.tombstone"},{kind:"event_match",key:"state_key",pattern:""}],actions:["notify",{set_tweak:"highlight",value:!0}]},{rule_id:".m.rule.reaction",default:!0,enabled:!0,conditions:[{kind:"event_match",key:"type",pattern:"m.reaction"}],actions:["dont_notify"]}];function d(e){var t=this,r={},n=function(e,t){var r={rule_id:t.rule_id,actions:t.actions,conditions:[]};switch(e){case"underride":case"override":r.conditions=t.conditions;break;case"room":if(!t.rule_id)return null;r.conditions.push({kind:"event_match",key:"room_id",value:t.rule_id});break;case"sender":if(!t.rule_id)return null;r.conditions.push({kind:"event_match",key:"user_id",value:t.rule_id});break;case"content":if(!t.pattern)return null;r.conditions.push({kind:"event_match",key:"content.body",pattern:t.pattern})}return r},i=function(e,t){var r={event_match:h,contains_display_name:l,room_member_count:c,sender_notification_permission:s};return!!r[e.kind]&&r[e.kind](e,t)},s=function(t,r){var n=t.key;if(!n)return!1;var i=e.getRoom(r.getRoomId());return!(!i||!i.currentState)&&i.currentState.mayTriggerNotifOfType(n,r.getSender())},c=function(t,r){if(!t.is)return!1;var n=e.getRoom(r.getRoomId());if(!n||!n.currentState||!n.currentState.members)return!1;var i=n.currentState.getJoinedMemberCount(),o=t.is.match(/^([=<>]*)([0-9]*)$/);if(!o)return!1;var s=o[1],a=parseInt(o[2]);if(isNaN(a))return!1;switch(s){case"":case"==":return i==a;case"<":return i<a;case">":return i>a;case"<=":return i<=a;case">=":return i>=a;default:return!1}},l=function(t,r){var n=r.getContent();if(r.isEncrypted()&&r.getClearContent()&&(n=r.getClearContent()),!n||!n.body||"string"!=typeof n.body)return!1;var i=e.getRoom(r.getRoomId());if(!(i&&i.currentState&&i.currentState.members&&i.currentState.getMember(e.credentials.userId)))return!1;var s=i.currentState.getMember(e.credentials.userId).name,a=new RegExp("(^|\\W)"+(0,o.escapeRegExp)(s)+"(\\W|$)","i");return n.body.search(a)>-1},h=function(e,t){if(!e.key)return!1;var r,n=g(e.key,t);return"string"==typeof n&&(e.value?e.value===n:"string"==typeof e.pattern&&(r="content.body"==e.key?f("(^|\\W)",e.pattern,"(\\W|$)"):f("^",e.pattern,"$"),!!n.match(r)))},f=function(e,t,n){return r[t]||(r[t]=new RegExp(e+(0,o.globToRegexp)(t)+n,"i")),r[t]},g=function(e,t){var r,n=e.split("."),i=n[0];for("content"===i?(r=t.getContent(),n.shift()):"type"===i?(r=t.getType(),n.shift()):r=t.event;n.length>0;){var s=n.shift();if((0,o.isNullOrUndefined)(r[s]))return null;r=r[s]}return r},p=function(r,i){return i?r.getSender()===e.credentials.userId?null:function(e,r){for(var i=0;i<u.length;++i){var o=u[i],s=r[o];if(s)for(var a=0;a<s.length;++a){var c=s[a];if(c.enabled){var l=n(o,c);if(l&&t.ruleMatchesEvent(l,e))return c.kind=o,c}}}return null}(r,i.global):null};this.ruleMatchesEvent=function(e,t){for(var r=!0,n=0;n<e.conditions.length;++n){var o=e.conditions[n];r&=i(o,t)}return r},this.actionsForEvent=function(t){return function(e,t){var r=p(e,t);if(!r)return{};var n=d.actionListToActionsObject(r.actions);return void 0===n.tweaks.highlight&&(n.tweaks.highlight="content"==r.kind),n}(t,e.pushRules)},this.getPushRuleById=function(t){for(var r=0,n=["global"];r<n.length;r++){var i=n[r];if(void 0!==e.pushRules[i]){var o,s=a(u);try{for(s.s();!(o=s.n()).done;){var c=o.value;if(void 0!==e.pushRules[i][c]){var l,d=a(e.pushRules[i][c]);try{for(d.s();!(l=d.n()).done;){var h=l.value;if(h.rule_id===t)return h}}catch(e){d.e(e)}finally{d.f()}}}}catch(e){s.e(e)}finally{s.f()}}}return null}}d.actionListToActionsObject=function(e){for(var t={notify:!1,tweaks:{}},r=0;r<e.length;++r){var n=e[r];"notify"===n?t.notify=!0:"object"===(0,i.default)(n)&&(void 0===n.value&&(n.value=!0),t.tweaks[n.set_tweak]=n.value)}return t},d.rewriteDefaultRules=function(e){var t=JSON.parse(JSON.stringify(e));t||(t={}),t.global||(t.global={}),t.global.override||(t.global.override=[]);var r,n=t.global.override,i=a(l);try{var o=function(){var e=r.value,t=n.find((function(t){return t.rule_id===e.rule_id}));if(t)t.default=e.default,t.conditions=e.conditions,t.actions=e.actions;else{var i=e.rule_id;s.logger.warn("Adding default global override for ".concat(i)),n.push(e)}};for(i.s();!(r=i.n()).done;)o()}catch(e){i.e(e)}finally{i.f()}return t}},{"./logger":106,"./utils":137,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/typeof":24}],123:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.randomUppercaseString=r.randomLowercaseString=r.randomString=void 0;const n="abcdefghijklmnopqrstuvwxyz",i="ABCDEFGHIJKLMNOPQRSTUVWXYZ";function o(e,t){let r="";for(let n=0;n<e;++n)r+=t.charAt(Math.floor(Math.random()*t.length));return r}r.randomString=function(e){return o(e,i+n+"0123456789")},r.randomLowercaseString=function(e){return o(e,n)},r.randomUppercaseString=function(e){return o(e,i)}},{}],124:[function(e,t,r){(function(t){(function(){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.setNow=function(e){a=e||Date.now},r.setTimeout=function(e,t){(t=t||0)<0&&(t=0);var r=Array.prototype.slice.call(arguments,2),n=a()+t,i=o++;var u={runAt:n,func:e,params:r,key:i},d=l(s,(function(e){return e.runAt-n}));return s.splice(d,0,u),c(),i},r.clearTimeout=function(e){if(0===s.length)return;var t;for(t=0;t<s.length;t++){if(s[t].key==e){s.splice(t,1);break}}0===t&&c()};var n,i=e("./logger"),o=0,s=[];var a=Date.now;function c(){n&&t.clearTimeout(n);var e=s[0];if(e){var r=a(),i=Math.min(e.runAt-r,1e3);n=t.setTimeout(u,i)}}function u(){for(var e,r=a(),n=[];;){var o=s[0];if(!o||o.runAt>r)break;(e=s.shift()).key,n.push(e)}c();for(var u=0;u<n.length;u++){e=n[u];try{e.func.apply(t,e.params)}catch(e){i.logger.error("Uncaught exception in callback function",e.stack||e)}}}function l(e,t){for(var r=0,n=e.length;r<n;){var i=r+n>>1;t(e[i])>0?n=i:r=i+1}return r}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./logger":106}],125:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(r,"__esModule",{value:!0}),r.MatrixScheduler=o;var i=n(e("./utils"));e("./logger");function o(e,t){this.retryAlgorithm=e||o.RETRY_BACKOFF_RATELIMIT,this.queueAlgorithm=t||o.QUEUE_MESSAGES,this._queues={},this._activeQueues=[],this._procFn=null}function s(e){e._procFn&&Object.keys(e._queues).filter((function(t){return-1===e._activeQueues.indexOf(t)&&e._queues[t].length>0})).forEach((function(t){e._activeQueues.push(t),u("Spinning up queue: '%s'",t),a(e,t)}))}function a(e,t){var r=function(e,t){var r=e._queues[t];if(!Array.isArray(r))return null;return r[0]}(e,t);if(!r){var n=e._activeQueues.indexOf(t);return n>=0&&e._activeQueues.splice(n,1),void u("Stopping queue '%s' as it is now empty",t)}u("Queue '%s' has %s pending events",t,e._queues[t].length),Promise.resolve().then((function(){return e._procFn(r.event)})).then((function(n){c(e,t),u("Queue '%s' sent event %s",t,r.event.getId()),r.defer.resolve(n),a(e,t)}),(function(n){r.attempts+=1;var i=e.retryAlgorithm(r.event,r.attempts,n);u("retry(%s) err=%s event_id=%s waitTime=%s",r.attempts,n,r.event.getId(),i),-1===i?(u("Queue '%s' giving up on event %s",t,r.event.getId()),c(e,t),r.defer.reject(n),a(e,t)):setTimeout((function(){a(e,t)}),i)}))}function c(e,t){var r=e._queues[t];return Array.isArray(r)?r.shift():null}function u(){false}o.prototype.getQueueForEvent=function(e){var t=this.queueAlgorithm(e);return t&&this._queues[t]?this._queues[t].map((function(e){return e.event})):null},o.prototype.removeEventFromQueue=function(e){var t=this.queueAlgorithm(e);if(!t||!this._queues[t])return!1;var r=!1;return i.removeElement(this._queues[t],(function(t){if(t.event.getId()===e.getId())return r=!0,!0})),r},o.prototype.setProcessFunction=function(e){this._procFn=e,s(this)},o.prototype.queueEvent=function(e){var t=this.queueAlgorithm(e);if(!t)return null;this._queues[t]||(this._queues[t]=[]);var r=i.defer();return this._queues[t].push({event:e,defer:r,attempts:0}),u("Queue algorithm dumped event %s into queue '%s'",e.getId(),t),s(this),r.promise},o.RETRY_BACKOFF_RATELIMIT=function(e,t,r){if(400===r.httpStatus||403===r.httpStatus||401===r.httpStatus)return-1;if("rejected"===r.cors)return-1;if("M_TOO_LARGE"===r.name)return-1;if("M_LIMIT_EXCEEDED"===r.name){var n=r.data.retry_after_ms;if(n>0)return n}return t>4?-1:1e3*Math.pow(2,t)},o.QUEUE_MESSAGES=function(e){return"m.room.message"===e.getType()||e.hasAssocation()?"message":null}},{"./logger":106,"./utils":137,"@babel/runtime/helpers/interopRequireWildcard":13}],126:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.SERVICE_TYPES=void 0,function(e){e.IS="SERVICE_TYPE_IS",e.IM="SERVICE_TYPE_IM"}(r.SERVICE_TYPES||(r.SERVICE_TYPES={}))},{}],127:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard"),i=e("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.LocalIndexedDBStoreBackend=E;var o=i(e("@babel/runtime/regenerator")),s=i(e("@babel/runtime/helpers/asyncToGenerator")),a=i(e("@babel/runtime/helpers/slicedToArray")),c=e("../sync-accumulator"),u=n(e("../utils")),l=n(e("../indexeddb-helpers")),d=e("../logger");function h(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return f(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return f(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,a=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw o}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var g,p,v;function y(e,t,r){var n=e.openCursor(t);return new Promise((function(e,t){var i=[];n.onerror=function(e){t(new Error("Query failed: "+e.target.errorCode))},n.onsuccess=function(t){var n=t.target.result;n?(i.push(r(n)),n.continue()):e(i)}}))}function m(e){return new Promise((function(t,r){e.oncomplete=function(e){t(e)},e.onerror=function(e){r(e.target.error)}}))}function b(e){return new Promise((function(t,r){e.onsuccess=function(e){t(e)},e.onerror=function(e){r(e.target.error)}}))}function S(e){return new Promise((function(t,r){e.onsuccess=function(){return t(e)},e.onerror=function(e){return r(e)}}))}function _(e){return b(e).then((function(e){return e.target.result}))}function E(e,t){this.indexedDB=e,this._dbName="matrix-js-sdk:"+(t||"default"),this.db=null,this._disconnected=!0,this._syncAccumulator=new c.SyncAccumulator,this._isNewlyCreated=!1}E.exists=function(e,t){return t="matrix-js-sdk:"+(t||"default"),l.exists(e,t)},E.prototype={connect:function(){var e=this;if(!this._disconnected)return d.logger.log("LocalIndexedDBStoreBackend.connect: already connected or connecting"),Promise.resolve();this._disconnected=!1,d.logger.log("LocalIndexedDBStoreBackend.connect: connecting...");var t=this.indexedDB.open(this._dbName,3);return t.onupgradeneeded=function(t){var r=t.target.result,n=t.oldVersion;d.logger.log("LocalIndexedDBStoreBackend.connect: upgrading from ".concat(n)),n<1&&(e._isNewlyCreated=!0,function(e){e.createObjectStore("users",{keyPath:["userId"]}),e.createObjectStore("accountData",{keyPath:["type"]}),e.createObjectStore("sync",{keyPath:["clobber"]})}(r)),n<2&&function(e){e.createObjectStore("oob_membership_events",{keyPath:["room_id","state_key"]}).createIndex("room","room_id")}(r),n<3&&function(e){e.createObjectStore("client_options",{keyPath:["clobber"]})}(r)},t.onblocked=function(){d.logger.log("can't yet open LocalIndexedDBStoreBackend because it is open elsewhere")},d.logger.log("LocalIndexedDBStoreBackend.connect: awaiting connection..."),b(t).then((function(t){return d.logger.log("LocalIndexedDBStoreBackend.connect: connected"),e.db=t.target.result,e.db.onversionchange=function(){e.db.close()},e._init()}))},isNewlyCreated:function(){return Promise.resolve(this._isNewlyCreated)},_init:function(){var e=this;return Promise.all([this._loadAccountData(),this._loadSyncData()]).then((function(t){var r=(0,a.default)(t,2),n=r[0],i=r[1];d.logger.log("LocalIndexedDBStoreBackend: loaded initial data"),e._syncAccumulator.accumulate({next_batch:i.nextBatch,rooms:i.roomsData,groups:i.groupsData,account_data:{events:n}},!0)}))},getOutOfBandMembers:function(e){var t=this;return new Promise((function(r,n){var i=t.db.transaction(["oob_membership_events"],"readonly").objectStore("oob_membership_events").index("room"),o=IDBKeyRange.only(e),s=i.openCursor(o),a=[],c=!1;s.onsuccess=function(e){var t=e.target.result;if(!t)return a.length||c?r(a):r(null);var n=t.value;n.oob_written?c=!0:a.push(n),t.continue()},s.onerror=function(e){n(e)}})).then((function(t){return d.logger.log("LL: got ".concat(t&&t.length)+" membershipEvents from storage for room ".concat(e," ...")),t}))},setOutOfBandMembers:(v=(0,s.default)(o.default.mark((function e(t,r){var n,i,s;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return d.logger.log("LL: backend about to store ".concat(r.length)+" members for ".concat(t)),n=this.db.transaction(["oob_membership_events"],"readwrite"),i=n.objectStore("oob_membership_events"),r.forEach((function(e){i.put(e)})),s={room_id:t,oob_written:!0,state_key:0},i.put(s),e.next=8,m(n);case 8:d.logger.log("LL: backend done storing for ".concat(t,"!"));case 9:case"end":return e.stop()}}),e,this)}))),function(e,t){return v.apply(this,arguments)}),clearOutOfBandMembers:(p=(0,s.default)(o.default.mark((function e(t){var r,n,i,s,c,u,l,h,f,g,p,v,y;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.db.transaction(["oob_membership_events"],"readonly"),n=r.objectStore("oob_membership_events"),i=n.index("room"),s=IDBKeyRange.only(t),c=_(i.openKeyCursor(s,"next")).then((function(e){return e&&e.primaryKey[1]})),u=_(i.openKeyCursor(s,"prev")).then((function(e){return e&&e.primaryKey[1]})),e.next=8,Promise.all([c,u]);case 8:return l=e.sent,h=(0,a.default)(l,2),f=h[0],g=h[1],p=this.db.transaction(["oob_membership_events"],"readwrite"),v=p.objectStore("oob_membership_events"),y=IDBKeyRange.bound([t,f],[t,g]),d.logger.log("LL: Deleting all users + marker in storage for "+"room ".concat(t,", with key range:"),[t,f],[t,g]),e.next=18,S(v.delete(y));case 18:case"end":return e.stop()}}),e,this)}))),function(e){return p.apply(this,arguments)}),clearDatabase:function(){var e=this;return new Promise((function(t,r){d.logger.log("Removing indexeddb instance: ".concat(e._dbName));var n=e.indexedDB.deleteDatabase(e._dbName);n.onblocked=function(){d.logger.log("can't yet delete indexeddb ".concat(e._dbName)+" because it is open elsewhere")},n.onerror=function(e){d.logger.warn("unable to delete js-sdk store indexeddb: ".concat(e.target.error)),t()},n.onsuccess=function(){d.logger.log("Removed indexeddb instance: ".concat(e._dbName)),t()}}))},getSavedSync:function(e){void 0===e&&(e=!0);var t=this._syncAccumulator.getJSON();return t.nextBatch?e?Promise.resolve(u.deepCopy(t)):Promise.resolve(t):Promise.resolve(null)},getNextBatchToken:function(){return Promise.resolve(this._syncAccumulator.getNextBatchToken())},setSyncData:function(e){var t=this;return Promise.resolve().then((function(){t._syncAccumulator.accumulate(e)}))},syncToDatabase:function(e){var t=this._syncAccumulator.getJSON(!0);return Promise.all([this._persistUserPresenceEvents(e),this._persistAccountData(t.accountData),this._persistSyncData(t.nextBatch,t.roomsData,t.groupsData)])},_persistSyncData:function(e,t,r){var n=this;return d.logger.log("Persisting sync data up to",e),u.promiseTry((function(){var i=n.db.transaction(["sync"],"readwrite");return i.objectStore("sync").put({clobber:"-",nextBatch:e,roomsData:t,groupsData:r}),m(i)}))},_persistAccountData:function(e){var t=this;return u.promiseTry((function(){for(var r=t.db.transaction(["accountData"],"readwrite"),n=r.objectStore("accountData"),i=0;i<e.length;i++)n.put(e[i]);return m(r)}))},_persistUserPresenceEvents:function(e){var t=this;return u.promiseTry((function(){var r,n=t.db.transaction(["users"],"readwrite"),i=n.objectStore("users"),o=h(e);try{for(o.s();!(r=o.n()).done;){var s=r.value;i.put({userId:s[0],event:s[1]})}}catch(e){o.e(e)}finally{o.f()}return m(n)}))},getUserPresenceEvents:function(){var e=this;return u.promiseTry((function(){return y(e.db.transaction(["users"],"readonly").objectStore("users"),void 0,(function(e){return[e.value.userId,e.value.event]}))}))},_loadAccountData:function(){var e=this;return d.logger.log("LocalIndexedDBStoreBackend: loading account data..."),u.promiseTry((function(){return y(e.db.transaction(["accountData"],"readonly").objectStore("accountData"),void 0,(function(e){return e.value})).then((function(e){return d.logger.log("LocalIndexedDBStoreBackend: loaded account data"),e}))}))},_loadSyncData:function(){var e=this;return d.logger.log("LocalIndexedDBStoreBackend: loading sync data..."),u.promiseTry((function(){return y(e.db.transaction(["sync"],"readonly").objectStore("sync"),void 0,(function(e){return e.value})).then((function(e){return d.logger.log("LocalIndexedDBStoreBackend: loaded sync data"),e.length>1&&d.logger.warn("loadSyncData: More than 1 sync row found."),e.length>0?e[0]:{}}))}))},getClientOptions:function(){var e=this;return Promise.resolve().then((function(){return y(e.db.transaction(["client_options"],"readonly").objectStore("client_options"),void 0,(function(e){if(e.value&&e.value&&e.value.options)return e.value.options})).then((function(e){return e[0]}))}))},storeClientOptions:(g=(0,s.default)(o.default.mark((function e(t){var r;return o.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(r=this.db.transaction(["client_options"],"readwrite")).objectStore("client_options").put({clobber:"-",options:t}),e.next=5,m(r);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return g.apply(this,arguments)})}},{"../indexeddb-helpers":104,"../logger":106,"../sync-accumulator":133,"../utils":137,"@babel/runtime/helpers/asyncToGenerator":5,"@babel/runtime/helpers/interopRequireDefault":12,"@babel/runtime/helpers/interopRequireWildcard":13,"@babel/runtime/helpers/slicedToArray":22,"@babel/runtime/regenerator":27}],128:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.RemoteIndexedDBStoreBackend=o;var n=e("../logger"),i=e("../utils");function o(e,t,r){this._workerScript=e,this._dbName=t,this._workerApi=r,this._worker=null,this._nextSeq=0,this._inFlight={},this._startPromise=null}o.prototype={connect:function(){var e=this;return this._ensureStarted().then((function(){return e._doCmd("connect")}))},clearDatabase:function(){var e=this;return this._ensureStarted().then((function(){return e._doCmd("clearDatabase")}))},isNewlyCreated:function(){return this._doCmd("isNewlyCreated")},getSavedSync:function(){return this._doCmd("getSavedSync")},getNextBatchToken:function(){return this._doCmd("getNextBatchToken")},setSyncData:function(e){return this._doCmd("setSyncData",[e])},syncToDatabase:function(e){return this._doCmd("syncToDatabase",[e])},getOutOfBandMembers:function(e){return this._doCmd("getOutOfBandMembers",[e])},setOutOfBandMembers:function(e,t){return this._doCmd("setOutOfBandMembers",[e,t])},clearOutOfBandMembers:function(e){return this._doCmd("clearOutOfBandMembers",[e])},getClientOptions:function(){return this._doCmd("getClientOptions")},storeClientOptions:function(e){return this._doCmd("storeClientOptions",[e])},getUserPresenceEvents:function(){return this._doCmd("getUserPresenceEvents")},_ensureStarted:function(){return null===this._startPromise&&(this._worker=new this._workerApi(this._workerScript),this._worker.onmessage=this._onWorkerMessage.bind(this),this._startPromise=this._doCmd("_setupWorker",[this._dbName]).then((function(){n.logger.log("IndexedDB worker is ready")}))),this._startPromise},_doCmd:function(e,t){var r=this;return Promise.resolve().then((function(){var n=r._nextSeq++,o=(0,i.defer)();return r._inFlight[n]=o,r._worker.postMessage({command:e,seq:n,args:t}),o.promise}))},_onWorkerMessage:function(e){var t=e.data;if("cmd_success"==t.command||"cmd_fail"==t.command){if(void 0===t.seq)return void n.logger.error("Got reply from worker with no seq");var r=this._inFlight[t.seq];if(void 0===r)return void n.logger.error("Got reply for unknown seq "+t.seq);if(delete this._inFlight[t.seq],"cmd_success"==t.command)r.resolve(t.result);else{var i=new Error(t.error.message);i.name=t.error.name,r.reject(i)}}else n.logger.warn("Unrecognised message from worker: "+t)}}},{"../logger":106,"../utils":137}],129:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.IndexedDBStore=void 0;const i=e("events"),o=e("./memory"),s=e("./indexeddb-local-backend.js"),a=e("./indexeddb-remote-backend.js"),c=e("../models/user"),u=e("../models/event"),l=e("../logger");class d extends o.MemoryStore{constructor(e){if(super(e),this.startedUp=!1,this.syncTs=0,this.userModifiedMap={},this.emitter=new i.EventEmitter,this.on=this.emitter.on.bind(this.emitter),this.getSavedSync=this.degradable((()=>this.backend.getSavedSync()),"getSavedSync"),this.isNewlyCreated=this.degradable((()=>this.backend.isNewlyCreated()),"isNewlyCreated"),this.getSavedSyncToken=this.degradable((()=>this.backend.getNextBatchToken()),"getSavedSyncToken"),this.deleteAllData=this.degradable((()=>(super.deleteAllData(),this.backend.clearDatabase().then((()=>{l.logger.log("Deleted indexeddb data.")}),(e=>{throw l.logger.error(`Failed to delete indexeddb data: ${e}`),e}))))),this.reallySave=this.degradable((()=>{this.syncTs=Date.now();const e=[];for(const t of this.getUsers())this.userModifiedMap[t.userId]!==t.getLastModifiedTime()&&t.events.presence&&(e.push([t.userId,t.events.presence.event]),this.userModifiedMap[t.userId]=t.getLastModifiedTime());return this.backend.syncToDatabase(e)})),this.setSyncData=this.degradable((e=>this.backend.setSyncData(e)),"setSyncData"),this.getOutOfBandMembers=this.degradable((e=>this.backend.getOutOfBandMembers(e)),"getOutOfBandMembers"),this.setOutOfBandMembers=this.degradable(((e,t)=>(super.setOutOfBandMembers(e,t),this.backend.setOutOfBandMembers(e,t))),"setOutOfBandMembers"),this.clearOutOfBandMembers=this.degradable((e=>(super.clearOutOfBandMembers(e),this.backend.clearOutOfBandMembers(e))),"clearOutOfBandMembers"),this.getClientOptions=this.degradable((()=>this.backend.getClientOptions()),"getClientOptions"),this.storeClientOptions=this.degradable((e=>(super.storeClientOptions(e),this.backend.storeClientOptions(e))),"storeClientOptions"),!e.indexedDB)throw new Error("Missing required option: indexedDB");if(e.workerScript){let r=e.workerApi;r||(r=t.Worker),this.backend=new a.RemoteIndexedDBStoreBackend(e.workerScript,e.dbName,r)}else this.backend=new s.LocalIndexedDBStoreBackend(e.indexedDB,e.dbName)}static exists(e,t){return s.LocalIndexedDBStoreBackend.exists(e,t)}startup(){return this.startedUp?(l.logger.log("IndexedDBStore.startup: already started"),Promise.resolve()):(l.logger.log("IndexedDBStore.startup: connecting to backend"),this.backend.connect().then((()=>(l.logger.log("IndexedDBStore.startup: loading presence events"),this.backend.getUserPresenceEvents()))).then((e=>{l.logger.log("IndexedDBStore.startup: processing presence events"),e.forEach((([e,t])=>{const r=new c.User(e);t&&r.setPresenceEvent(new u.MatrixEvent(t)),this.userModifiedMap[r.userId]=r.getLastModifiedTime(),this.storeUser(r)}))})))}wantsSave(){return Date.now()-this.syncTs>3e5}save(e=!1){return e||this.wantsSave()?this.reallySave():Promise.resolve()}degradable(e,t){const r=super[t];return(...t)=>n(this,void 0,void 0,(function*(){try{return e.call(this,...t)}catch(e){l.logger.error("IndexedDBStore failure, degrading to MemoryStore",e),this.emitter.emit("degraded",e);try{l.logger.log("IndexedDBStore trying to delete degraded data"),yield this.backend.clearDatabase(),l.logger.log("IndexedDBStore delete after degrading succeeded")}catch(e){l.logger.warn("IndexedDBStore delete after degrading failed",e)}if(r)return r(...t)}}))}}r.IndexedDBStore=d}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../logger":106,"../models/event":113,"../models/user":121,"./indexeddb-local-backend.js":127,"./indexeddb-remote-backend.js":128,"./memory":130,events:36}],130:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.MemoryStore=void 0;const n=e("../models/user");function i(e){return"string"==typeof e&&!!e&&"undefined"!==e&&"null"!==e||"number"==typeof e}r.MemoryStore=class{constructor(e={}){this.rooms={},this.groups={},this.users={},this.syncToken=null,this.filters={},this.accountData={},this.oobMembers={},this.clientOptions={},this.onRoomMember=(e,t,r)=>{if("invite"===r.membership)return;const i=this.users[r.userId]||new n.User(r.userId);r.name&&(i.setDisplayName(r.name),r.events.member&&i.setRawDisplayName(r.events.member.getDirectionalContent().displayname)),r.events.member&&r.events.member.getContent().avatar_url&&i.setAvatarUrl(r.events.member.getContent().avatar_url),this.users[i.userId]=i},this.localStorage=e.localStorage}getSyncToken(){return this.syncToken}isNewlyCreated(){return Promise.resolve(!0)}setSyncToken(e){this.syncToken=e}storeGroup(e){this.groups[e.groupId]=e}getGroup(e){return this.groups[e]||null}getGroups(){return Object.values(this.groups)}storeRoom(e){this.rooms[e.roomId]=e,e.currentState.on("RoomState.members",this.onRoomMember),e.currentState.getMembers().forEach((t=>{this.onRoomMember(null,e.currentState,t)}))}getRoom(e){return this.rooms[e]||null}getRooms(){return Object.values(this.rooms)}removeRoom(e){this.rooms[e]&&this.rooms[e].removeListener("RoomState.members",this.onRoomMember),delete this.rooms[e]}getRoomSummaries(){return Object.values(this.rooms).map((function(e){return e.summary}))}storeUser(e){this.users[e.userId]=e}getUser(e){return this.users[e]||null}getUsers(){return Object.values(this.users)}scrollback(e,t){return[]}storeEvents(e,t,r,n){}storeFilter(e){e&&(this.filters[e.userId]||(this.filters[e.userId]={}),this.filters[e.userId][e.filterId]=e)}getFilter(e,t){return this.filters[e]&&this.filters[e][t]?this.filters[e][t]:null}getFilterIdByName(e){if(!this.localStorage)return null;const t="mxjssdk_memory_filter_"+e;try{const e=this.localStorage.getItem(t);if(i(e))return e}catch(e){}return null}setFilterIdByName(e,t){if(!this.localStorage)return;const r="mxjssdk_memory_filter_"+e;try{i(t)?this.localStorage.setItem(r,t):this.localStorage.removeItem(r)}catch(e){}}storeAccountDataEvents(e){e.forEach((e=>{this.accountData[e.getType()]=e}))}getAccountData(e){return this.accountData[e]}setSyncData(e){return Promise.resolve()}wantsSave(){return!1}save(e){}startup(){return Promise.resolve()}getSavedSync(){return Promise.resolve(null)}getSavedSyncToken(){return Promise.resolve(null)}deleteAllData(){return this.rooms={},this.users={},this.syncToken=null,this.filters={},this.accountData={},Promise.resolve()}getOutOfBandMembers(e){return Promise.resolve(this.oobMembers[e]||null)}setOutOfBandMembers(e,t){return this.oobMembers[e]=t,Promise.resolve()}clearOutOfBandMembers(e){return this.oobMembers={},Promise.resolve()}getClientOptions(){return Promise.resolve(this.clientOptions)}storeClientOptions(e){return this.clientOptions=Object.assign({},e),Promise.resolve()}}},{"../models/user":121}],131:[function(e,t,r){"use strict";var n=e("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(r,"__esModule",{value:!0}),r.WebStorageSessionStore=c;var i=n(e("../../utils"));e("../../logger");function o(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,c=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return a=e.done,e},e:function(e){c=!0,o=e},f:function(){try{a||null==r.return||r.return()}finally{if(c)throw o}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var a="session.e2e.";function c(e){if(this.store=e,!(i.isFunction(e.getItem)&&i.isFunction(e.setItem)&&i.isFunction(e.removeItem)&&i.isFunction(e.key)&&"number"==typeof e.length))throw new Error("Supplied webStore does not meet the WebStorage API interface")}c.prototype={removeEndToEndAccount:function(){this.store.removeItem(u)},getEndToEndAccount:function(){return this.store.getItem(u)},getAllEndToEndDevices:function(){for(var e=f(""),t={},r=0;r<this.store.length;++r){var n=this.store.key(r),i=n.substr(e.length);n.startsWith(e)&&(t[i]=v(this.store,n))}return t},getEndToEndDeviceTrackingStatus:function(){return v(this.store,d)},getEndToEndDeviceSyncToken:function(){return v(this.store,l)},removeEndToEndDeviceData:function(){m(this.store,f("")),m(this.store,d),m(this.store,l)},getEndToEndSessions:function(e){return v(this.store,g(e))},getAllEndToEndSessions:function(){var e,t={},r=o(y(this.store,g("")));try{for(r.s();!(e=r.n()).done;){var n=e.value;t[n.substr(g("").length)]=v(this.store,n)}}catch(e){r.e(e)}finally{r.f()}return t},removeAllEndToEndSessions:function(){m(this.store,g(""))},getAllEndToEndInboundGroupSessionKeys:function(){for(var e=a+"inboundgroupsessions/",t=[],r=0;r<this.store.length;r++){var n=this.store.key(r);n.startsWith(e)&&t.push({senderKey:n.substr(e.length,43),sessionId:n.substr(e.length+44)})}return t},getEndToEndInboundGroupSession:function(e,t){var r=function(e,t){return a+"inboundgroupsessions/"+e+"/"+t}(e,t);return this.store.getItem(r)},removeAllEndToEndInboundGroupSessions:function(){m(this.store,a+"inboundgroupsessions/")},getAllEndToEndRooms:function(){var e,t={},r=o(y(this.store,p("")));try{for(r.s();!(e=r.n()).done;){var n=e.value;t[n.substr(p("").length)]=v(this.store,n)}}catch(e){r.e(e)}finally{r.f()}return t},removeAllEndToEndRooms:function(){m(this.store,p(""))},setLocalTrustedBackupPubKey:function(e){this.store.setItem(h,e)},getLocalTrustedBackupPubKey:function(){return this.store.getItem(h)}};var u=a+"account",l=a+"device_sync_token",d=a+"device_tracking",h=a+"trusted_backup_pubkey";function f(e){return a+"devices/"+e}function g(e){return a+"sessions/"+e}function p(e){return a+"rooms/"+e}function v(e,t){try{return JSON.parse(e.getItem(t))}catch(e){b("Failed to get key %s: %s",t,e),b(e.stack)}return null}function y(e,t){for(var r=[],n=0;n<e.length;++n){var i=e.key(n);i.startsWith(t)&&r.push(i)}return r}function m(e,t){for(var r=[],n=0;n<e.length;++n){var i=e.key(n);i.startsWith(t)&&r.push(i)}for(var o=0,s=r;o<s.length;o++){var a=s[o];e.removeItem(a)}}function b(){false}},{"../../logger":106,"../../utils":137,"@babel/runtime/helpers/interopRequireWildcard":13}],132:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.StubStore=void 0;r.StubStore=class{constructor(){this.fromToken=null}isNewlyCreated(){return Promise.resolve(!0)}getSyncToken(){return this.fromToken}setSyncToken(e){this.fromToken=e}storeGroup(e){}getGroup(e){return null}getGroups(){return[]}storeRoom(e){}getRoom(e){return null}getRooms(){return[]}removeRoom(e){}getRoomSummaries(){return[]}storeUser(e){}getUser(e){return null}getUsers(){return[]}scrollback(e,t){return[]}storeEvents(e,t,r,n){}storeFilter(e){}getFilter(e,t){return null}getFilterIdByName(e){return null}setFilterIdByName(e,t){}storeAccountDataEvents(e){}getAccountData(e){}setSyncData(e){return Promise.resolve()}wantsSave(){return!1}save(){}startup(){return Promise.resolve()}getSavedSync(){return Promise.resolve(null)}getSavedSyncToken(){return Promise.resolve(null)}deleteAllData(){return Promise.resolve()}getOutOfBandMembers(){return Promise.resolve(null)}setOutOfBandMembers(e,t){return Promise.resolve()}clearOutOfBandMembers(){return Promise.resolve()}getClientOptions(){return Promise.resolve({})}storeClientOptions(e){return Promise.resolve()}}},{}],133:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.SyncAccumulator=r.Category=void 0;const n=e("./logger"),i=e("./utils");var o;!function(e){e.Invite="invite",e.Leave="leave",e.Join="join"}(o=r.Category||(r.Category={}));function s(e,t){null!==t.state_key&&void 0!==t.state_key&&t.type&&(e[t.type]||(e[t.type]=Object.create(null)),e[t.type][t.state_key]=t)}r.SyncAccumulator=class{constructor(e={}){this.opts=e,this.accountData={},this.inviteRooms={},this.joinRooms={},this.nextBatch=null,this.groups={invite:{},join:{},leave:{}},this.opts.maxTimelineEntries=this.opts.maxTimelineEntries||50}accumulate(e,t=!1){this.accumulateRooms(e,t),this.accumulateGroups(e),this.accumulateAccountData(e),this.nextBatch=e.next_batch}accumulateAccountData(e){e.account_data&&e.account_data.events&&e.account_data.events.forEach((e=>{this.accountData[e.type]=e}))}accumulateRooms(e,t=!1){e.rooms&&(e.rooms.invite&&Object.keys(e.rooms.invite).forEach((r=>{this.accumulateRoom(r,o.Invite,e.rooms.invite[r],t)})),e.rooms.join&&Object.keys(e.rooms.join).forEach((r=>{this.accumulateRoom(r,o.Join,e.rooms.join[r],t)})),e.rooms.leave&&Object.keys(e.rooms.leave).forEach((r=>{this.accumulateRoom(r,o.Leave,e.rooms.leave[r],t)})))}accumulateRoom(e,t,r,i=!1){switch(t){case o.Invite:this.accumulateInviteState(e,r);break;case o.Join:this.inviteRooms[e]&&delete this.inviteRooms[e],this.accumulateJoinState(e,r,i);break;case o.Leave:this.inviteRooms[e]?delete this.inviteRooms[e]:delete this.joinRooms[e];break;default:n.logger.error("Unknown cateogory: ",t)}}accumulateInviteState(e,t){if(!t.invite_state||!t.invite_state.events)return;if(!this.inviteRooms[e])return void(this.inviteRooms[e]={invite_state:t.invite_state});const r=this.inviteRooms[e];t.invite_state.events.forEach((e=>{let t=!1;for(let n=0;n<r.invite_state.events.length;n++){const i=r.invite_state.events[n];i.type===e.type&&i.state_key==e.state_key&&(r.invite_state.events[n]=e,t=!0)}t||r.invite_state.events.push(e)}))}accumulateJoinState(e,t,r=!1){this.joinRooms[e]||(this.joinRooms[e]={_currentState:Object.create(null),_timeline:[],_accountData:Object.create(null),_unreadNotifications:{},_summary:{},_readReceipts:{}});const n=this.joinRooms[e];if(t.account_data&&t.account_data.events&&t.account_data.events.forEach((e=>{n._accountData[e.type]=e})),t.unread_notifications&&(n._unreadNotifications=t.unread_notifications),t.summary){const e="m.heroes",r="m.invited_member_count",i="m.joined_member_count",o=n._summary,s=t.summary;o[e]=s[e]||o[e],o[i]=s[i]||o[i],o[r]=s[r]||o[r]}if(t.ephemeral&&t.ephemeral.events&&t.ephemeral.events.forEach((e=>{"m.receipt"===e.type&&e.content&&Object.keys(e.content).forEach((t=>{e.content[t]["m.read"]&&Object.keys(e.content[t]["m.read"]).forEach((r=>{n._readReceipts[r]={data:e.content[t]["m.read"][r],eventId:t}}))}))})),t.timeline&&t.timeline.limited&&(n._timeline=[]),t.state&&t.state.events&&t.state.events.forEach((e=>{s(n._currentState,e)})),t.timeline&&t.timeline.events&&t.timeline.events.forEach(((e,i)=>{let o;if(s(n._currentState,e),r)o=e;else{o=Object.assign({},e),void 0!==o.unsigned&&(o.unsigned=Object.assign({},o.unsigned));const t=e.unsigned?e.unsigned.age:e.age;void 0!==t&&(o._localTs=Date.now()-t)}n._timeline.push({event:o,token:0===i?t.timeline.prev_batch:null})})),n._timeline.length>this.opts.maxTimelineEntries){for(let e=n._timeline.length-this.opts.maxTimelineEntries;e<n._timeline.length;e++)if(n._timeline[e].token){n._timeline=n._timeline.slice(e,n._timeline.length);break}}}accumulateGroups(e){e.groups&&(e.groups.invite&&Object.keys(e.groups.invite).forEach((t=>{this.accumulateGroup(t,o.Invite,e.groups.invite[t])})),e.groups.join&&Object.keys(e.groups.join).forEach((t=>{this.accumulateGroup(t,o.Join,e.groups.join[t])})),e.groups.leave&&Object.keys(e.groups.leave).forEach((t=>{this.accumulateGroup(t,o.Leave,e.groups.leave[t])})))}accumulateGroup(e,t,r){for(const t of[o.Invite,o.Leave,o.Join])delete this.groups[t][e];this.groups[t][e]=r}getJSON(e=!1){const t={join:{},invite:{},leave:{}};Object.keys(this.inviteRooms).forEach((e=>{t.invite[e]=this.inviteRooms[e]})),Object.keys(this.joinRooms).forEach((r=>{const n=this.joinRooms[r],o={ephemeral:{events:[]},account_data:{events:[]},state:{events:[]},timeline:{events:[],prev_batch:null},unread_notifications:n._unreadNotifications,summary:n._summary};Object.keys(n._accountData).forEach((e=>{o.account_data.events.push(n._accountData[e])}));const a={type:"m.receipt",room_id:r,content:{}};Object.keys(n._readReceipts).forEach((e=>{const t=n._readReceipts[e];a.content[t.eventId]||(a.content[t.eventId]={"m.read":{}}),a.content[t.eventId]["m.read"][e]=t.data})),Object.keys(a.content).length>0&&o.ephemeral.events.push(a),n._timeline.forEach((t=>{if(!o.timeline.prev_batch){if(!t.token)return;o.timeline.prev_batch=t.token}let r;!e&&t.event._localTs?(r=Object.assign({},t.event),void 0!==r.unsigned&&(r.unsigned=Object.assign({},r.unsigned)),delete r._localTs,r.unsigned=r.unsigned||{},r.unsigned.age=Date.now()-t.event._localTs):r=t.event,o.timeline.events.push(r)}));const c=Object.create(null);for(let e=o.timeline.events.length-1;e>=0;e--){const t=o.timeline.events[e];if(null===t.state_key||void 0===t.state_key)continue;const r=i.deepCopy(t);r.unsigned&&(r.unsigned.prev_content&&(r.content=r.unsigned.prev_content),r.unsigned.prev_sender&&(r.sender=r.unsigned.prev_sender)),s(c,r)}Object.keys(n._currentState).forEach((e=>{Object.keys(n._currentState[e]).forEach((t=>{let r=n._currentState[e][t];c[e]&&c[e][t]&&(r=c[e][t]),o.state.events.push(r)}))})),t.join[r]=o}));const r=[];return Object.keys(this.accountData).forEach((e=>{r.push(this.accountData[e])})),{nextBatch:this.nextBatch,roomsData:t,groupsData:this.groups,accountData:r}}getNextBatchToken(){return this.nextBatch}}},{"./logger":106,"./utils":137}],134:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.SyncState=void 0,function(e){e.Error="ERROR",e.Prepared="PREPARED",e.Stopped="STOPPED",e.Syncing="SYNCING",e.Catchup="CATCHUP",e.Reconnecting="RECONNECTING"}(r.SyncState||(r.SyncState={}))},{}],135:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.SyncApi=void 0;const a=e("./models/user"),c=e("./models/room"),u=e("./models/group"),l=o(e("./utils")),d=e("./filter"),h=e("./models/event-timeline"),f=e("./pushprocessor"),g=e("./logger"),p=e("./errors"),v=e("./client"),y=e("./sync.api"),m=e("./sync-accumulator");function b(e,t){return"FILTER_SYNC_"+e+(t?"_"+t:"")}function S(...e){g.logger.log(...e)}function _(e,t){const r=new a.User(t);return e.reEmitter.reEmit(r,["User.avatarUrl","User.displayName","User.presence","User.currentlyActive","User.lastPresenceTs"]),r}r.SyncApi=class{constructor(e,t={}){var r;this.client=e,this.opts=t,this._peekRoom=null,this.currentSyncRequest=null,this.syncState=null,this.syncStateData=null,this.catchingUp=!1,this.running=!1,this.keepAliveTimer=null,this.connectionReturnedDefer=null,this.notifEvents=[],this.failedSyncCount=0,this.storeIsInvalid=!1,this.onOnline=()=>{S("Browser thinks we are back online"),this.startKeepAlives(0)},this.opts.initialSyncLimit=null!==(r=this.opts.initialSyncLimit)&&void 0!==r?r:8,this.opts.resolveInvitesToProfiles=this.opts.resolveInvitesToProfiles||!1,this.opts.pollTimeout=this.opts.pollTimeout||3e4,this.opts.pendingEventOrdering=this.opts.pendingEventOrdering||v.PendingEventOrdering.Chronological,t.canResetEntireTimeline||(t.canResetEntireTimeline=e=>!1),e.getNotifTimelineSet()&&e.reEmitter.reEmit(e.getNotifTimelineSet(),["Room.timeline","Room.timelineReset"])}createRoom(e){const t=this.client,{timelineSupport:r,unstableClientRelationAggregation:n}=t,i=new c.Room(e,t,t.getUserId(),{lazyLoadMembers:this.opts.lazyLoadMembers,pendingEventOrdering:this.opts.pendingEventOrdering,timelineSupport:r,unstableClientRelationAggregation:n});return t.reEmitter.reEmit(i,["Room.name","Room.timeline","Room.redaction","Room.redactionCancelled","Room.receipt","Room.tags","Room.timelineReset","Room.localEchoUpdated","Room.accountData","Room.myMembership","Room.replaceEvent"]),this.registerStateListeners(i),i}createGroup(e){const t=this.client,r=new u.Group(e);return t.reEmitter.reEmit(r,["Group.profile","Group.myMembership"]),t.store.storeGroup(r),r}registerStateListeners(e){const t=this.client;t.reEmitter.reEmit(e.currentState,["RoomState.events","RoomState.members","RoomState.newMember"]),e.currentState.on("RoomState.newMember",(function(e,r,n){n.user=t.getUser(n.userId),t.reEmitter.reEmit(n,["RoomMember.name","RoomMember.typing","RoomMember.powerLevel","RoomMember.membership"])}))}deregisterStateListeners(e){e.currentState.removeAllListeners("RoomState.events"),e.currentState.removeAllListeners("RoomState.members"),e.currentState.removeAllListeners("RoomState.newMember")}syncLeftRooms(){const e=this.client,t=new d.Filter(this.client.credentials.userId);t.setTimelineLimit(1),t.setIncludeLeaveRooms(!0);const r=this.opts.pollTimeout+8e4,n={timeout:0};return e.getOrCreateFilter(b(e.credentials.userId,"LEFT_ROOMS"),t).then((function(t){return n.filter=t,e.http.authedRequest(void 0,"GET","/sync",n,void 0,r)})).then((t=>{let r=[];t.rooms&&t.rooms.leave&&(r=this.mapSyncResponseToRoomArray(t.rooms.leave));const n=[];return r.forEach((t=>{const r=t.room;if(n.push(r),!t.isBrandNewRoom)return;t.timeline=t.timeline||{};const i=this.mapSyncEventsFormat(t.timeline,r),o=this.mapSyncEventsFormat(t.state,r);r.getLiveTimeline().setPaginationToken(t.timeline.prev_batch,h.EventTimeline.BACKWARDS),this.processRoomEvents(r,o,i),r.recalculate(),e.store.storeRoom(r),e.emit("Room",r),this.processEventsForNotifs(r,i)})),n}))}peek(e){if(this._peekRoom&&this._peekRoom.roomId===e)return Promise.resolve(this._peekRoom);const t=this.client;return this._peekRoom=this.createRoom(e),this.client.roomInitialSync(e,20).then((e=>{e.messages=e.messages||{},e.messages.chunk=e.messages.chunk||[],e.state=e.state||[];const r=l.deepCopy(e.state).map(t.getEventMapper()),n=e.state.map(t.getEventMapper()),i=e.messages.chunk.map(t.getEventMapper());return e.presence&&Array.isArray(e.presence)&&e.presence.map(t.getEventMapper()).forEach((function(e){let r=t.store.getUser(e.getContent().user_id);r?r.setPresenceEvent(e):(r=_(t,e.getContent().user_id),r.setPresenceEvent(e),t.store.storeUser(r)),t.emit("event",e)})),e.messages.start&&(this._peekRoom.oldState.paginationToken=e.messages.start),this._peekRoom.oldState.setStateEvents(r),this._peekRoom.currentState.setStateEvents(n),this.resolveInvites(this._peekRoom),this._peekRoom.recalculate(),this._peekRoom.addEventsToTimeline(i.reverse(),!0,this._peekRoom.getLiveTimeline(),e.messages.start),t.store.storeRoom(this._peekRoom),t.emit("Room",this._peekRoom),this.peekPoll(this._peekRoom),this._peekRoom}))}stopPeeking(){this._peekRoom=null}peekPoll(e,t){this._peekRoom===e?this.client.http.authedRequest(void 0,"GET","/events",{room_id:e.roomId,timeout:3e4,from:t},void 0,5e4).then((t=>{if(this._peekRoom!==e)return void S("Stopped peeking in room %s",e.roomId);t.chunk.filter((function(e){return"m.presence"===e.type})).map(this.client.getEventMapper()).forEach((e=>{let t=this.client.store.getUser(e.getContent().user_id);t?t.setPresenceEvent(e):(t=_(this.client,e.getContent().user_id),t.setPresenceEvent(e),this.client.store.storeUser(t)),this.client.emit("event",e)}));const r=t.chunk.filter((function(t){return t.room_id===e.roomId&&t.event_id})).map(this.client.getEventMapper());e.addLiveEvents(r),this.peekPoll(e,t.end)}),(r=>{g.logger.error("[%s] Peek poll failed: %s",e.roomId,r),setTimeout((()=>{this.peekPoll(e,t)}),3e4)})):S("Stopped peeking in room %s",e.roomId)}getSyncState(){return this.syncState}getSyncStateData(){return this.syncStateData}recoverFromSyncStartupError(e,t){return s(this,void 0,void 0,(function*(){yield e;const r=this.startKeepAlives();this.updateSyncState(y.SyncState.Error,{error:t}),yield r}))}wasLazyLoadingToggled(e=!1){return s(this,void 0,void 0,(function*(){let t=!1;if(!(yield this.client.store.isNewlyCreated())){const r=yield this.client.store.getClientOptions();return r&&(t=!!r.lazyLoadMembers),t!==e}return!1}))}shouldAbortSync(e){return"M_UNKNOWN_TOKEN"===e.errcode&&(g.logger.warn("Token no longer valid - assuming logout"),this.stop(),!0)}sync(){const e=this.client;this.running=!0,t.window&&t.window.addEventListener&&t.window.addEventListener("online",this.onOnline,!1);let r=Promise.resolve(),n=null;const i=()=>s(this,void 0,void 0,(function*(){try{S("Getting push rules...");const t=yield e.getPushRules();S("Got push rules"),e.pushRules=t}catch(e){if(g.logger.error("Getting push rules failed",e),this.shouldAbortSync(e))return;return S("Waiting for saved sync before retrying push rules..."),yield this.recoverFromSyncStartupError(r,e),void i()}a()})),o=()=>{const t=new d.Filter(e.credentials.userId);return t.setTimelineLimit(this.opts.initialSyncLimit),t},a=()=>s(this,void 0,void 0,(function*(){if(S("Checking lazy load status..."),this.opts.lazyLoadMembers&&e.isGuest()&&(this.opts.lazyLoadMembers=!1),this.opts.lazyLoadMembers){S("Checking server lazy load support...");(yield e.doesServerSupportLazyLoading())?(S("Enabling lazy load on sync filter..."),this.opts.filter||(this.opts.filter=o()),this.opts.filter.setLazyLoadMembers(!0)):(S("LL: lazy loading requested but not supported by server, so disabling"),this.opts.lazyLoadMembers=!1)}S("Checking whether lazy loading has changed in store...");if(yield this.wasLazyLoadingToggled(this.opts.lazyLoadMembers)){this.storeIsInvalid=!0;const e=p.InvalidStoreError.TOGGLED_LAZY_LOADING,t=new p.InvalidStoreError(e,!!this.opts.lazyLoadMembers);return this.updateSyncState(y.SyncState.Error,{error:t}),void g.logger.warn("InvalidStoreError: store is not usable: stopping sync.")}this.opts.lazyLoadMembers&&this.opts.crypto&&this.opts.crypto.enableLazyLoading();try{S("Storing client options..."),yield this.client.storeClientOptions(),S("Stored client options")}catch(e){throw g.logger.error("Storing client options failed",e),e}c()})),c=()=>s(this,void 0,void 0,(function*(){let t,i;S("Getting filter..."),t=this.opts.filter?this.opts.filter:o();try{i=yield e.getOrCreateFilter(b(e.credentials.userId),t)}catch(e){if(g.logger.error("Getting filter failed",e),this.shouldAbortSync(e))return;return S("Waiting for saved sync before retrying filter..."),yield this.recoverFromSyncStartupError(r,e),void c()}e.resetNotifTimelineSet(),null===this.currentSyncRequest&&(S("Sending first sync request..."),this.currentSyncRequest=this.doSyncRequest({filterId:i},n)),S("Waiting for saved sync before starting sync processing..."),yield r,this._sync({filterId:i})}));e.isGuest()?this._sync({}):(S("Getting saved sync token..."),r=e.store.getSavedSyncToken().then((t=>(S("Got saved sync token"),n=t,S("Getting saved sync..."),e.store.getSavedSync()))).then((e=>{if(S(`Got reply from saved sync, exists? ${!!e}`),e)return this.syncFromCache(e)})).catch((e=>{g.logger.error("Getting saved sync failed",e)})),i())}stop(){S("SyncApi.stop"),t.window&&t.window.removeEventListener("online",this.onOnline,!1),this.running=!1,this.currentSyncRequest&&this.currentSyncRequest.abort(),this.keepAliveTimer&&(clearTimeout(this.keepAliveTimer),this.keepAliveTimer=null)}retryImmediately(){return!!this.connectionReturnedDefer&&(this.startKeepAlives(0),!0)}syncFromCache(e){return s(this,void 0,void 0,(function*(){S("sync(): not doing HTTP hit, instead returning stored /sync data");const t=e.nextBatch;this.client.store.setSyncToken(t);const r={oldSyncToken:null,nextSyncToken:t,catchingUp:!1,fromCache:!0},n={next_batch:t,rooms:e.roomsData,groups:e.groupsData,account_data:{events:e.accountData}};try{yield this.processSyncResponse(r,n)}catch(e){g.logger.error("Error processing cached sync",e.stack||e)}this.storeIsInvalid||this.updateSyncState(y.SyncState.Prepared,r)}))}_sync(e){return s(this,void 0,void 0,(function*(){const t=this.client;if(!this.running)return S("Sync no longer running: exiting."),this.connectionReturnedDefer&&(this.connectionReturnedDefer.reject(),this.connectionReturnedDefer=null),void this.updateSyncState(y.SyncState.Stopped);const r=t.store.getSyncToken();let n;try{null===this.currentSyncRequest&&(this.currentSyncRequest=this.doSyncRequest(e,r)),n=yield this.currentSyncRequest}catch(t){return void this.onSyncError(t,e)}finally{this.currentSyncRequest=null}t.store.setSyncToken(n.next_batch),this.failedSyncCount=0,yield t.store.setSyncData(n);const i={oldSyncToken:r,nextSyncToken:n.next_batch,catchingUp:this.catchingUp};this.opts.crypto&&(yield this.opts.crypto.onSyncWillProcess(i));try{yield this.processSyncResponse(i,n)}catch(e){g.logger.error("Caught /sync error",e.stack||e),this.client.emit("sync.unexpectedError",e)}i.catchingUp=this.catchingUp,e.hasSyncedBefore||(this.updateSyncState(y.SyncState.Prepared,i),e.hasSyncedBefore=!0),this.opts.crypto&&(yield this.opts.crypto.onSyncCompleted(i)),this.updateSyncState(y.SyncState.Syncing,i),t.store.wantsSave()&&(this.opts.crypto&&(yield this.opts.crypto.saveDeviceList(0)),t.store.save()),this._sync(e)}))}doSyncRequest(e,t){const r=this.getSyncParams(e,t);return this.client.http.authedRequest(void 0,"GET","/sync",r,void 0,r.timeout+8e4)}getSyncParams(e,t){let r=this.opts.pollTimeout;("SYNCING"!==this.getSyncState()||this.catchingUp)&&(this.catchingUp=!0,r=0);let n=e.filterId;this.client.isGuest()&&!n&&(n=this.getGuestFilter());const i={filter:n,timeout:r};return this.opts.disablePresence&&(i.set_presence="offline"),t?i.since=t:i._cacheBuster=Date.now(),"ERROR"!=this.getSyncState()&&"RECONNECTING"!=this.getSyncState()||(i.timeout=0),i}onSyncError(e,t){if(!this.running)return S("Sync no longer running: exiting"),this.connectionReturnedDefer&&(this.connectionReturnedDefer.reject(),this.connectionReturnedDefer=null),void this.updateSyncState(y.SyncState.Stopped);g.logger.error("/sync error %s",e),g.logger.error(e),this.shouldAbortSync(e)||(this.failedSyncCount++,g.logger.log("Number of consecutive failed sync requests:",this.failedSyncCount),S("Starting keep-alive"),this.startKeepAlives().then((e=>{e&&this.getSyncState()===y.SyncState.Error&&this.updateSyncState(y.SyncState.Catchup,{oldSyncToken:null,nextSyncToken:null,catchingUp:!0}),this._sync(t)})),this.currentSyncRequest=null,this.updateSyncState(this.failedSyncCount>=3?y.SyncState.Error:y.SyncState.Reconnecting,{error:e}))}processSyncResponse(e,t){return s(this,void 0,void 0,(function*(){const r=this.client;if(t.presence&&Array.isArray(t.presence.events)&&t.presence.events.map(r.getEventMapper()).forEach((function(e){let t=r.store.getUser(e.getSender());t?t.setPresenceEvent(e):(t=_(r,e.getSender()),t.setPresenceEvent(e),r.store.storeUser(t)),r.emit("event",e)})),t.account_data&&Array.isArray(t.account_data.events)){const e=t.account_data.events.map(r.getEventMapper()),n=e.reduce(((e,t)=>(e[t.getId()]=r.store.getAccountData(t.getType()),e)),{});r.store.storeAccountDataEvents(e),e.forEach((function(e){if("m.push_rules"===e.getType()){const t=e.getContent();r.pushRules=f.PushProcessor.rewriteDefaultRules(t)}const t=n[e.getId()];return r.emit("accountData",e,t),e}))}if(t.to_device&&Array.isArray(t.to_device.events)&&t.to_device.events.length>0){const e=[];t.to_device.events.map(r.getEventMapper()).map((t=>{if("m.key.verification.cancel"===t.getType()){const r=t.getContent().transaction_id;r&&e.push(r)}return t})).forEach((function(t){const n=t.getContent();if("m.room.message"!=t.getType()||"m.bad.encrypted"!=n.msgtype){if("m.key.verification.start"===t.getType()||"m.key.verification.request"===t.getType()){const r=n.transaction_id;e.includes(r)&&t.flagCancelled()}r.emit("toDeviceEvent",t)}else g.logger.log("Ignoring undecryptable to-device event from "+t.getSender())}))}else this.catchingUp=!1;t.groups&&(t.groups.invite&&this.processGroupSyncEntry(t.groups.invite,m.Category.Invite),t.groups.join&&this.processGroupSyncEntry(t.groups.join,m.Category.Join),t.groups.leave&&this.processGroupSyncEntry(t.groups.leave,m.Category.Leave));let n=[],i=[],o=[];if(t.rooms&&(t.rooms.invite&&(n=this.mapSyncResponseToRoomArray(t.rooms.invite)),t.rooms.join&&(i=this.mapSyncResponseToRoomArray(t.rooms.join)),t.rooms.leave&&(o=this.mapSyncResponseToRoomArray(t.rooms.leave))),this.notifEvents=[],n.forEach((e=>{const t=e.room,n=this.mapSyncEventsFormat(e.invite_state,t);this.processRoomEvents(t,n),e.isBrandNewRoom&&(t.recalculate(),r.store.storeRoom(t),r.emit("Room",t)),n.forEach((function(e){r.emit("event",e)})),t.updateMyMembership("invite")})),yield l.promiseMapSeries(i,(t=>s(this,void 0,void 0,(function*(){const n=t.room,i=this.mapSyncEventsFormat(t.state,n),o=this.mapSyncEventsFormat(t.timeline,n,!1),a=this.mapSyncEventsFormat(t.ephemeral),u=this.mapSyncEventsFormat(t.account_data),d=r.isRoomEncrypted(n.roomId);if(t.unread_notifications&&(n.setUnreadNotificationCount(c.NotificationCountType.Total,t.unread_notifications.notification_count),(!d||d&&n.getUnreadNotificationCount(c.NotificationCountType.Highlight)<=0)&&n.setUnreadNotificationCount(c.NotificationCountType.Highlight,t.unread_notifications.highlight_count)),t.timeline=t.timeline||{},t.isBrandNewRoom)n.getLiveTimeline().setPaginationToken(t.timeline.prev_batch,h.EventTimeline.BACKWARDS);else if(t.timeline.limited){let i=!0;for(let e=o.length-1;e>=0;e--){const t=o[e].getId();if(n.getTimelineForEvent(t)){S("Already have event "+t+" in limited sync - not resetting"),i=!1,o.splice(0,e);break}}i&&(this.deregisterStateListeners(n),n.resetLiveTimeline(t.timeline.prev_batch,this.opts.canResetEntireTimeline(n.roomId)?null:e.oldSyncToken),r.resetNotifTimelineSet(),this.registerStateListeners(n))}this.processRoomEvents(n,i,o,e.fromCache),t.summary&&n.setSummary(t.summary),n.addEphemeralEvents(a),n.addAccountData(u),n.recalculate(),t.isBrandNewRoom&&(r.store.storeRoom(n),r.emit("Room",n)),this.processEventsForNotifs(n,o);const f=e=>s(this,void 0,void 0,(function*(){if(r.emit("event",e),e.isState()&&"m.room.encryption"==e.getType()&&this.opts.crypto&&(yield this.opts.crypto.onCryptoEvent(e)),e.isState()&&"im.vector.user_status"===e.getType()){let t=r.store.getUser(e.getStateKey());t?t.unstable_updateStatusMessage(e):(t=_(r,e.getStateKey()),t.unstable_updateStatusMessage(e),r.store.storeUser(t))}}));yield l.promiseMapSeries(i,f),yield l.promiseMapSeries(o,f),a.forEach((function(e){r.emit("event",e)})),u.forEach((function(e){r.emit("event",e)})),n.updateMyMembership("join"),n.decryptCriticalEvents()})))),o.forEach((e=>{const t=e.room,n=this.mapSyncEventsFormat(e.state,t),i=this.mapSyncEventsFormat(e.timeline,t),o=this.mapSyncEventsFormat(e.account_data);this.processRoomEvents(t,n,i),t.addAccountData(o),t.recalculate(),e.isBrandNewRoom&&(r.store.storeRoom(t),r.emit("Room",t)),this.processEventsForNotifs(t,i),n.forEach((function(e){r.emit("event",e)})),i.forEach((function(e){r.emit("event",e)})),o.forEach((function(e){r.emit("event",e)})),t.updateMyMembership("leave")})),e.oldSyncToken&&this.notifEvents.length&&(this.notifEvents.sort((function(e,t){return e.getTs()-t.getTs()})),this.notifEvents.forEach((function(e){r.getNotifTimelineSet().addLiveEvent(e)}))),t.device_lists&&this.opts.crypto&&(yield this.opts.crypto.handleDeviceListChanges(e,t.device_lists)),this.opts.crypto&&t.device_one_time_keys_count){const e=t.device_one_time_keys_count.signed_curve25519||0;this.opts.crypto.updateOneTimeKeyCount(e)}if(this.opts.crypto&&t["org.matrix.msc2732.device_unused_fallback_key_types"]){const e=t["org.matrix.msc2732.device_unused_fallback_key_types"];this.opts.crypto.setNeedsNewFallback(e instanceof Array&&!e.includes("signed_curve25519"))}}))}startKeepAlives(e){return void 0===e&&(e=2e3+Math.floor(5e3*Math.random())),null!==this.keepAliveTimer&&clearTimeout(this.keepAliveTimer),e>0?this.keepAliveTimer=setTimeout(this.pokeKeepAlive.bind(this),e):this.pokeKeepAlive(),this.connectionReturnedDefer||(this.connectionReturnedDefer=l.defer()),this.connectionReturnedDefer.promise}pokeKeepAlive(e=!1){const t=()=>{clearTimeout(this.keepAliveTimer),this.connectionReturnedDefer&&(this.connectionReturnedDefer.resolve(e),this.connectionReturnedDefer=null)};this.client.http.request(void 0,"GET","/_matrix/client/versions",void 0,void 0,{prefix:"",localTimeoutMs:15e3}).then((()=>{t()}),(r=>{400==r.httpStatus||404==r.httpStatus?this.keepAliveTimer=setTimeout(t,2e3):(e=!0,this.keepAliveTimer=setTimeout(this.pokeKeepAlive.bind(this,e),5e3+Math.floor(5e3*Math.random())),this.updateSyncState(y.SyncState.Error,{error:r}))}))}processGroupSyncEntry(e,t){for(const r of Object.keys(e)){const n=e[r];let i=this.client.store.getGroup(r);const o=null===i;null===i&&(i=this.createGroup(r)),n.profile&&i.setProfile(n.profile.name,n.profile.avatar_url),n.inviter&&i.setInviter({userId:n.inviter}),i.setMyMembership(t),o&&this.client.emit("Group",i)}}mapSyncResponseToRoomArray(e){const t=this.client;return Object.keys(e).map((r=>{const n=e[r];let i=t.store.getRoom(r),o=!1;return i||(i=this.createRoom(r),o=!0),n.room=i,n.isBrandNewRoom=o,n}))}mapSyncEventsFormat(e,t,r=!0){if(!e||!Array.isArray(e.events))return[];const n=this.client.getEventMapper({decrypt:r});return e.events.map((function(e){return t&&(e.room_id=t.roomId),n(e)}))}resolveInvites(e){if(!e||!this.opts.resolveInvitesToProfiles)return;const t=this.client;e.getMembersWithMembership("invite").forEach((function(r){if(r._requestedProfileInfo)return;r._requestedProfileInfo=!0;const n=t.getUser(r.userId);let i;i=n?Promise.resolve({avatar_url:n.avatarUrl,displayname:n.displayName}):t.getProfileInfo(r.userId),i.then((function(t){const n=r.events.member;"invite"===n.getContent().membership&&(n.getContent().avatar_url=t.avatar_url,n.getContent().displayname=t.displayname,r.setMembershipEvent(n,e.currentState))}),(function(e){}))}))}processRoomEvents(e,t,r,n=!1){const i=e.getLiveTimeline(),o=0==i.getEvents().length;if(o){for(const e of t)this.client.getPushActionsForEvent(e);i.initialiseState(t)}this.resolveInvites(e),e.recalculate(),o||(e.oldState.setStateEvents(t||[]),e.currentState.setStateEvents(t||[])),e.addLiveEvents(r||[],null,n)}processEventsForNotifs(e,t){if(this.client.getNotifTimelineSet())for(let e=0;e<t.length;e++){const r=this.client.getPushActionsForEvent(t[e]);r&&r.notify&&r.tweaks&&r.tweaks.highlight&&this.notifEvents.push(t[e])}}getGuestFilter(){return"{}"}updateSyncState(e,t){const r=this.syncState;this.syncState=e,this.syncStateData=t,this.client.emit("sync",this.syncState,r,t)}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./client":64,"./errors":99,"./filter":102,"./logger":106,"./models/event-timeline":112,"./models/group":114,"./models/room":119,"./models/user":121,"./pushprocessor":122,"./sync-accumulator":133,"./sync.api":134,"./utils":137}],136:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.TimelineIndex=r.TimelineWindow=void 0;const n=e("./models/event-timeline"),i=(e("./logger"),function(){});r.TimelineWindow=class{constructor(e,t,r={}){this.client=e,this.timelineSet=t,this.start=null,this.end=null,this.eventCount=0,this.windowLimit=r.windowLimit||1e3}load(e,t=20){const r=r=>{let n;const i=r.getEvents();if(e){for(let t=0;t<i.length;t++)if(i[t].getId()==e){n=t;break}if(void 0===n)throw new Error("getEventTimeline result didn't include requested event")}else n=i.length;const s=Math.min(i.length,n+Math.ceil(t/2)),a=Math.max(0,s-t);this.start=new o(r,a-r.getBaseIndex()),this.end=new o(r,s-r.getBaseIndex()),this.eventCount=s-a};if(e){const t=this.timelineSet.getTimelineForEvent(e);if(t)return r(t),Promise.resolve(t);return this.client.getEventTimeline(this.timelineSet,e).then(r)}return r(this.timelineSet.getLiveTimeline()),Promise.resolve()}getTimelineIndex(e){if(e==n.EventTimeline.BACKWARDS)return this.start;if(e==n.EventTimeline.FORWARDS)return this.end;throw new Error("Invalid direction '"+e+"'")}extend(e,t){const r=this.getTimelineIndex(e);if(!r)return i("TimelineWindow: no timeline yet"),!1;const o=e==n.EventTimeline.BACKWARDS?r.retreat(t):r.advance(t);if(o){this.eventCount+=o,i("TimelineWindow: increased cap by "+o+" (now "+this.eventCount+")");const t=this.eventCount-this.windowLimit;return t>0&&this.unpaginate(t,e!=n.EventTimeline.BACKWARDS),!0}return!1}canPaginate(e){const t=this.getTimelineIndex(e);if(!t)return i("TimelineWindow: no timeline yet"),!1;if(e==n.EventTimeline.BACKWARDS){if(t.index>t.minIndex())return!0}else if(t.index<t.maxIndex())return!0;return Boolean(t.timeline.getNeighbouringTimeline(e)||t.timeline.getPaginationToken(e))}paginate(e,t,r=!0,o=5){const s=this.getTimelineIndex(e);if(!s)return i("TimelineWindow: no timeline yet"),Promise.resolve(!1);if(s.pendingPaginate)return s.pendingPaginate;if(this.extend(e,t))return Promise.resolve(!0);if(!r||0===o)return Promise.resolve(!1);if(!s.timeline.getPaginationToken(e))return i("TimelineWindow: no token"),Promise.resolve(!1);i("TimelineWindow: starting request");const a=this.client.paginateEventTimeline(s.timeline,{backwards:e==n.EventTimeline.BACKWARDS,limit:t}).finally((function(){s.pendingPaginate=null})).then((r=>(i("TimelineWindow: request completed with result "+r),!!r&&this.paginate(e,t,!0,o-1))));return s.pendingPaginate=a,a}unpaginate(e,t){const r=t?this.start:this.end;if(e>this.eventCount||e<0)throw new Error("Attemting to unpaginate "+e+" events, but only have "+this.eventCount+" in the timeline");for(;e>0;){const n=t?r.advance(e):r.retreat(e);if(n<=0)throw new Error("Unable to unpaginate any further, but still have "+this.eventCount+" events");e-=n,this.eventCount-=n,i("TimelineWindow.unpaginate: dropped "+n+" (now "+this.eventCount+")")}}getEvents(){if(!this.start)return[];const e=[];let t=this.start.timeline;for(;;){const r=t.getEvents();let i=0,o=r.length;t===this.start.timeline&&(i=this.start.index+t.getBaseIndex()),t===this.end.timeline&&(o=this.end.index+t.getBaseIndex());for(let t=i;t<o;t++)e.push(r[t]);if(t===this.end.timeline)break;t=t.getNeighbouringTimeline(n.EventTimeline.FORWARDS)}return e}};class o{constructor(e,t){this.timeline=e,this.index=t}minIndex(){return-1*this.timeline.getBaseIndex()}maxIndex(){return this.timeline.getEvents().length-this.timeline.getBaseIndex()}advance(e){if(!e)return 0;let t;if(e<0){if(t=Math.max(e,this.minIndex()-this.index),t<0)return this.index+=t,t}else if(t=Math.min(e,this.maxIndex()-this.index),t>0)return this.index+=t,t;const r=this.timeline.getNeighbouringTimeline(e<0?n.EventTimeline.BACKWARDS:n.EventTimeline.FORWARDS);return r?(this.timeline=r,this.index=e<0?this.maxIndex():this.minIndex(),i("paginate: switched to new neighbour"),this.advance(e)):0}retreat(e){return-1*this.advance(-1*e)}}r.TimelineIndex=o},{"./logger":106,"./models/event-timeline":112}],137:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.lexicographicCompare=r.prevString=r.nextString=r.averageBetweenStrings=r.stringToBase=r.baseToString=r.alphabetPad=r.DEFAULT_ALPHABET=r.getCrypto=r.setCrypto=r.simpleRetryOperation=r.chunkPromises=r.promiseTry=r.promiseMapSeries=r.defer=r.isNullOrUndefined=r.sleep=r.ensureNoTrailingSlash=r.globToRegexp=r.escapeRegExp=r.normalize=r.removeHiddenChars=r.isNumber=r.polyfillSuper=r.inherits=r.extend=r.deepSortedObjectEntries=r.deepCompare=r.deepCopy=r.checkObjectHasNoAdditionalKeys=r.checkObjectHasKeys=r.isFunction=r.removeElement=r.encodeUri=r.encodeParams=void 0;const o=i(e("unhomoglyph")),s=i(e("p-retry"));function a(e){return"string"==typeof e?o.default(e.normalize("NFD").replace(c,"")):""}r.encodeParams=function(e){let t="";for(const r in e)e.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.substring(1)},r.encodeUri=function(e,t){for(const r in t)t.hasOwnProperty(r)&&(e=e.replace(r,encodeURIComponent(t[r])));return e},r.removeElement=function(e,t,r){let n,i;if(r){for(n=e.length-1;n>=0;n--)if(t(e[n],n,e))return i=e[n],e.splice(n,1),i}else for(n=0;n<e.length;n++)if(t(e[n],n,e))return i=e[n],e.splice(n,1),i;return!1},r.isFunction=function(e){return"[object Function]"===Object.prototype.toString.call(e)},r.checkObjectHasKeys=function(e,t){for(let r=0;r<t.length;r++)if(!e.hasOwnProperty(t[r]))throw new Error("Missing required key: "+t[r])},r.checkObjectHasNoAdditionalKeys=function(e,t){for(const r in e)if(e.hasOwnProperty(r)&&-1===t.indexOf(r))throw new Error("Unknown key: "+r)},r.deepCopy=function(e){return JSON.parse(JSON.stringify(e))},r.deepCompare=function e(t,r){if(t===r)return!0;if(typeof t!=typeof r)return!1;if("number"==typeof t&&isNaN(t)&&isNaN(r))return!0;if(null===t||null===r)return t===r;if(!(t instanceof Object))return!1;if(t.constructor!==r.constructor||t.prototype!==r.prototype)return!1;if(t instanceof RegExp||t instanceof Date)return t.toString()===r.toString();if(t instanceof Array){if(t.length!==r.length)return!1;for(let n=0;n<t.length;n++)if(!e(t[n],r[n]))return!1}else{let n;for(n in r)if(r.hasOwnProperty(n)!==t.hasOwnProperty(n))return!1;for(n in r){if(r.hasOwnProperty(n)!==t.hasOwnProperty(n))return!1;if(!e(t[n],r[n]))return!1}}return!0},r.deepSortedObjectEntries=function e(t){if("object"!=typeof t)return t;if(null==t||Array.isArray(t))return t;const r=[];for(const[n,i]of Object.entries(t))r.push([n,e(i)]);return r.sort(((e,t)=>g(e[0],t[0]))),r},r.extend=function(...e){const t=e[0]||{};for(let r=1;r<e.length;r++){const n=e[r];if(n)for(const e in n)t[e]=n[e]}return t},r.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},r.polyfillSuper=function(e,t,...r){try{t.call(e,...r)}catch(n){const i=new t(...r);Object.assign(e,i)}},r.isNumber=function(e){return"number"==typeof e&&isFinite(e)},r.removeHiddenChars=a,r.normalize=function(e){return a(e.toLowerCase()).replace(/[\\'!"#$%&()*+,\-./:;<=>?@[\]^_`{|}~\u2000-\u206f\u2e00-\u2e7f]/g,"").toLowerCase()};const c=/[\u2000-\u200F\u202A-\u202F\u0300-\u036f\uFEFF\s]/g;function u(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}let l;function d(e,t,n=r.DEFAULT_ALPHABET){return e.padEnd(t,n[0])}function h(e,t=r.DEFAULT_ALPHABET){var n;const i=BigInt(t.length);if(e<=i)return null!==(n=t[Number(e)-1])&&void 0!==n?n:"";let o=e/i,s=Number(e%i)-1;return s<0&&(o-=BigInt(Math.abs(s)),s=Number(i)-1),h(o,t)+t[s]}function f(e,t=r.DEFAULT_ALPHABET){const n=BigInt(t.length);let i=BigInt(0);for(let r=e.length-1,o=BigInt(0);r>=0;r--,o++){const s=e.charCodeAt(r)-t.charCodeAt(0);i+=BigInt(1+s)*n**o}return i}function g(e,t){return e<t?-1:e===t?0:1}r.escapeRegExp=u,r.globToRegexp=function(e,t){t="boolean"!=typeof t||t;let r=u(e);return r=r.replace(/\\\*/g,".*"),r=r.replace(/\?/g,"."),t&&(r=r.replace(/\\\[(!|)(.*)\\]/g,(function(e,t,r,n,i){return"["+(t?"^":"")+r.replace(/\\-/,"-")+"]"}))),r},r.ensureNoTrailingSlash=function(e){return e&&e.endsWith("/")?e.substr(0,e.length-1):e},r.sleep=function(e,t){return new Promise((r=>{setTimeout(r,e,t)}))},r.isNullOrUndefined=function(e){return null==e},r.defer=function(){let e,t;const r=new Promise(((r,n)=>{e=r,t=n}));return{resolve:e,reject:t,promise:r}},r.promiseMapSeries=function(e,t){return n(this,void 0,void 0,(function*(){for(const r of e)yield t(yield r)}))},r.promiseTry=function(e){return new Promise((t=>t(e())))},r.chunkPromises=function(e,t){return n(this,void 0,void 0,(function*(){const r=[];for(let n=0;n<e.length;n+=t)r.push(...yield Promise.all(e.slice(n,n+t).map((e=>e()))));return r}))},r.simpleRetryOperation=function(e){return s.default((t=>e(t)),{forever:!0,factor:2,minTimeout:3e3,maxTimeout:15e3})},r.setCrypto=function(e){l=e},r.getCrypto=function(){return l},r.DEFAULT_ALPHABET=(()=>{let e="";for(let t=32;t<=126;t++)e+=String.fromCharCode(t);return e})(),r.alphabetPad=d,r.baseToString=h,r.stringToBase=f,r.averageBetweenStrings=function(e,t,n=r.DEFAULT_ALPHABET){const i=Math.max(e.length,t.length),o=f(d(e,i,n),n),s=f(d(t,i,n),n),a=(o+s)/BigInt(2);return a===o||a==s?h(a,n)+n[0]:h(a,n)},r.nextString=function(e,t=r.DEFAULT_ALPHABET){return h(f(e,t)+BigInt(1),t)},r.prevString=function(e,t=r.DEFAULT_ALPHABET){return h(f(e,t)-BigInt(1),t)},r.lexicographicCompare=g},{"p-retry":39,unhomoglyph:55}],138:[function(e,t,r){(function(t){(function(){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},s=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.createNewMatrixCall=r.setVideoInput=r.setAudioInput=r.MatrixCall=r.CallError=r.getDesktopCapturerSources=r.CallErrorCode=r.CallEvent=r.CallParty=r.CallDirection=r.CallType=r.CallState=void 0;const a=e("../logger"),c=e("events"),u=o(e("../utils")),l=e("../@types/event"),d=e("../randomstring"),h=e("./callEventTypes"),f=e("./callFeed");var g,p,v,y,m,b,S;!function(e){e.Fledgling="fledgling",e.InviteSent="invite_sent",e.WaitLocalMedia="wait_local_media",e.CreateOffer="create_offer",e.CreateAnswer="create_answer",e.Connecting="connecting",e.Connected="connected",e.Ringing="ringing",e.Ended="ended"}(g=r.CallState||(r.CallState={})),function(e){e.Voice="voice",e.Video="video"}(p=r.CallType||(r.CallType={})),function(e){e.Inbound="inbound",e.Outbound="outbound"}(v=r.CallDirection||(r.CallDirection={})),function(e){e.Local="local",e.Remote="remote"}(y=r.CallParty||(r.CallParty={})),function(e){e.Hangup="hangup",e.State="state",e.Error="error",e.Replaced="replaced",e.LocalHoldUnhold="local_hold_unhold",e.RemoteHoldUnhold="remote_hold_unhold",e.HoldUnhold="hold_unhold",e.FeedsChanged="feeds_changed",e.AssertedIdentityChanged="asserted_identity_changed"}(m=r.CallEvent||(r.CallEvent={})),function(e){e.UserHangup="user_hangup",e.LocalOfferFailed="local_offer_failed",e.NoUserMedia="no_user_media",e.UnknownDevices="unknown_devices",e.SendInvite="send_invite",e.CreateAnswer="create_answer",e.SendAnswer="send_answer",e.SetRemoteDescription="set_remote_description",e.SetLocalDescription="set_local_description",e.AnsweredElsewhere="answered_elsewhere",e.IceFailed="ice_failed",e.InviteTimeout="invite_timeout",e.Replaced="replaced",e.SignallingFailed="signalling_timeout",e.UserBusy="user_busy",e.Transfered="transferred"}(b=r.CallErrorCode||(r.CallErrorCode={})),function(e){e.Audio="audio",e.Video="video"}(S||(S={}));r.getDesktopCapturerSources=function(){return window.electron.getDesktopCapturerSources({thumbnailSize:{height:176,width:312},types:["screen","window"]})};class _ extends Error{constructor(e,t,r){super(t+": "+r),this.code=e}}function E(){return Date.now().toString()+d.randomString(16)}r.CallError=_;class k extends c.EventEmitter{constructor(e){super(),this.remoteCandidateBuffer=new Map,this.gotUserMediaForInvite=e=>s(this,void 0,void 0,(function*(){if(this.successor)this.successor.gotUserMediaForAnswer(e);else if(this.callHasEnded())this.stopAllMedia();else{this.localAVStream=e,a.logger.info("Got local AV stream with id "+this.localAVStream.id),this.setState(g.CreateOffer),a.logger.debug("gotUserMediaForInvite -> "+this.type),this.screenSharingStream?(a.logger.debug("Setting screen sharing stream to the local video element"),this.pushNewFeed(this.screenSharingStream,this.client.getUserId(),h.SDPStreamMetadataPurpose.Screenshare)):this.pushNewFeed(e,this.client.getUserId(),h.SDPStreamMetadataPurpose.Usermedia),w(e.getAudioTracks(),!0);for(const t of e.getAudioTracks())a.logger.info("Adding audio track with id "+t.id),this.peerConn.addTrack(t,e);for(const t of(this.screenSharingStream||e).getVideoTracks())a.logger.info("Adding video track with id "+t.id),this.peerConn.addTrack(t,e)}})),this.gotUserMediaForAnswer=e=>s(this,void 0,void 0,(function*(){if(this.callHasEnded())return;this.pushNewFeed(e,this.client.getUserId(),h.SDPStreamMetadataPurpose.Usermedia),this.localAVStream=e,a.logger.info("Got local AV stream with id "+this.localAVStream.id),w(e.getAudioTracks(),!0);for(const t of e.getTracks())this.peerConn.addTrack(t,e);let t;this.setState(g.CreateAnswer);try{t=yield this.peerConn.createAnswer()}catch(e){return a.logger.debug("Failed to create answer: ",e),void this.terminate(y.Local,b.CreateAnswer,!0)}try{yield this.peerConn.setLocalDescription(t),this.setState(g.Connecting),yield new Promise((e=>{setTimeout(e,200)})),this.sendAnswer()}catch(e){return a.logger.debug("Error setting local description!",e),void this.terminate(y.Local,b.SetLocalDescription,!0)}})),this.gotLocalIceCandidate=e=>{if(e.candidate){if(a.logger.debug("Call "+this.callId+" got local ICE "+e.candidate.sdpMid+" candidate: "+e.candidate.candidate),this.callHasEnded())return;""===e.candidate.candidate&&this.sentEndOfCandidates||(this.queueCandidate(e.candidate),""===e.candidate.candidate&&(this.sentEndOfCandidates=!0))}},this.onIceGatheringStateChange=e=>{if(a.logger.debug("ice gathering state changed to "+this.peerConn.iceGatheringState),"complete"===this.peerConn.iceGatheringState&&!this.sentEndOfCandidates){const e={candidate:""};this.queueCandidate(e),this.sentEndOfCandidates=!0}},this.gotLocalOffer=e=>s(this,void 0,void 0,(function*(){if(a.logger.debug("Created offer: ",e),this.callHasEnded())return void a.logger.debug("Ignoring newly created offer on call ID "+this.callId+" because the call has ended");try{yield this.peerConn.setLocalDescription(e)}catch(e){return a.logger.debug("Error setting local description!",e),void this.terminate(y.Local,b.SetLocalDescription,!0)}if("gathering"===this.peerConn.iceGatheringState&&(yield new Promise((e=>{setTimeout(e,200)}))),this.callHasEnded())return;const t=this.state===g.CreateOffer?l.EventType.CallInvite:l.EventType.CallNegotiate,r={lifetime:6e4};t===l.EventType.CallInvite&&this.invitee&&(r.invitee=this.invitee),this.state===g.CreateOffer?r.offer=this.peerConn.localDescription:r.description=this.peerConn.localDescription,this.client.supportsCallTransfer&&(r.capabilities={"m.call.transferee":!0}),a.logger.info(`Discarding ${this.candidateSendQueue.length} candidates that will be sent in offer`),this.candidateSendQueue=[];try{yield this.sendVoipEvent(t,r)}catch(e){a.logger.error("Failed to send invite",e),e.event&&this.client.cancelPendingEvent(e.event);let t=b.SignallingFailed,r="Signalling failed";return this.state===g.CreateOffer&&(t=b.SendInvite,r="Failed to send invite"),"UnknownDeviceError"==e.name&&(t=b.UnknownDevices,r="Unknown devices present in the room"),this.emit(m.Error,new _(t,r,e)),void this.terminate(y.Local,t,!1)}this.sendCandidateQueue(),this.state===g.CreateOffer&&(this.inviteOrAnswerSent=!0,this.setState(g.InviteSent),this.inviteTimeout=setTimeout((()=>{this.inviteTimeout=null,this.state===g.InviteSent&&this.hangup(b.InviteTimeout,!1)}),6e4))})),this.getLocalOfferFailed=e=>{a.logger.error("Failed to get local offer",e),this.emit(m.Error,new _(b.LocalOfferFailed,"Failed to get local offer!",e)),this.terminate(y.Local,b.LocalOfferFailed,!1)},this.getUserMediaFailed=e=>{this.successor?this.successor.getUserMediaFailed(e):(a.logger.warn("Failed to get user media - ending call",e),this.emit(m.Error,new _(b.NoUserMedia,"Couldn't start capturing media! Is your microphone set up and does this app have permission?",e)),this.terminate(y.Local,b.NoUserMedia,!1))},this.onIceConnectionStateChanged=()=>{this.callHasEnded()||(a.logger.debug("Call ID "+this.callId+": ICE connection state changed to: "+this.peerConn.iceConnectionState),"connected"==this.peerConn.iceConnectionState?(clearTimeout(this.iceDisconnectedTimeout),this.setState(g.Connected)):"failed"==this.peerConn.iceConnectionState?this.hangup(b.IceFailed,!1):"disconnected"==this.peerConn.iceConnectionState&&(this.iceDisconnectedTimeout=setTimeout((()=>{this.hangup(b.IceFailed,!1)}),3e4)))},this.onSignallingStateChanged=()=>{a.logger.debug("call "+this.callId+": Signalling state changed to: "+this.peerConn.signalingState)},this.onTrack=e=>{var t;if(0===e.streams.length)return void a.logger.warn(`Streamless ${e.track.kind} found: ignoring.`);const r=null===(t=this.feeds.find((e=>!e.isLocal())))||void 0===t?void 0:t.stream;if(r&&e.streams[0].id!==r.id)return void a.logger.warn(`Ignoring new stream ID ${e.streams[0].id}: we already have stream ID ${r.id}`);r||a.logger.info("Got remote stream with id "+e.streams[0].id);const n=e.streams[0];a.logger.debug(`Track id ${e.track.id} of kind ${e.track.kind} added`),this.pushNewFeed(n,this.getOpponentMember().userId,h.SDPStreamMetadataPurpose.Usermedia),a.logger.info("playing remote. stream active? "+n.active)},this.onNegotiationNeeded=()=>s(this,void 0,void 0,(function*(){if(a.logger.info("Negotation is needed!"),this.state===g.CreateOffer||0!==this.opponentVersion){this.makingOffer=!0;try{const e=yield this.peerConn.createOffer();yield this.gotLocalOffer(e)}catch(e){return void this.getLocalOfferFailed(e)}finally{this.makingOffer=!1}}else a.logger.info("Opponent does not support renegotiation: ignoring negotiationneeded event")})),this.onHangupReceived=e=>{a.logger.debug("Hangup received for call ID "+this.callId),this.partyIdMatches(e)||this.state===g.Ringing?this.terminate(y.Remote,e.reason||b.UserHangup,!0):a.logger.info(`Ignoring message from party ID ${e.party_id}: our partner is ${this.opponentPartyId}`)},this.onRejectReceived=e=>{a.logger.debug("Reject received for call ID "+this.callId);[g.InviteSent,g.Ringing].includes(this.state)||this.state===g.Fledgling&&this.direction===v.Inbound?this.terminate(y.Remote,e.reason||b.UserHangup,!0):a.logger.debug(`Call is in state: ${this.state}: ignoring reject`)},this.onAnsweredElsewhere=e=>{a.logger.debug("Call ID "+this.callId+" answered elsewhere"),this.terminate(y.Remote,b.AnsweredElsewhere,!0)},this.roomId=e.roomId,this.invitee=e.invitee,this.client=e.client,this.type=null,this.forceTURN=e.forceTURN,this.ourPartyId=this.client.deviceId,this.turnServers=e.turnServers||[],0===this.turnServers.length&&this.client.isFallbackICEServerAllowed()&&this.turnServers.push({urls:["stun:turn.matrix.org"]});for(const e of this.turnServers)u.checkObjectHasKeys(e,["urls"]);this.callId=E(),this.state=g.Fledgling,this.candidateSendQueue=[],this.candidateSendTries=0,this.sentEndOfCandidates=!1,this.inviteOrAnswerSent=!1,this.makingOffer=!1,this.remoteOnHold=!1,this.micMuted=!1,this.vidMuted=!1,this.feeds=[]}placeVoiceCall(){return s(this,void 0,void 0,(function*(){a.logger.debug("placeVoiceCall"),this.checkForErrorListener();const e=I(S.Audio);this.type=p.Voice,yield this.placeCallWithConstraints(e)}))}placeVideoCall(){return s(this,void 0,void 0,(function*(){a.logger.debug("placeVideoCall"),this.checkForErrorListener();const e=I(S.Video);this.type=p.Video,yield this.placeCallWithConstraints(e)}))}placeScreenSharingCall(e){var t;return s(this,void 0,void 0,(function*(){a.logger.debug("placeScreenSharingCall"),this.checkForErrorListener();try{const r=yield function(e){var t;return s(this,void 0,void 0,(function*(){if((null===(t=window.electron)||void 0===t?void 0:t.getDesktopCapturerSources)&&e){a.logger.debug("Electron getDesktopCapturerSources() is available...");const t=yield e();return t?{audio:!1,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:t.id}}}:null}return a.logger.debug("Electron desktopCapturer is not available..."),{audio:!1,video:!0}}))}(e);if(!r)return void this.terminate(y.Local,b.NoUserMedia,!1);(null===(t=window.electron)||void 0===t?void 0:t.getDesktopCapturerSources)?(a.logger.debug("Getting screen stream using getUserMedia()..."),this.screenSharingStream=yield navigator.mediaDevices.getUserMedia(r)):(a.logger.debug("Getting screen stream using getDisplayMedia()..."),this.screenSharingStream=yield navigator.mediaDevices.getDisplayMedia(r)),a.logger.debug("Got screen stream, requesting audio stream...");const n=I(S.Audio);this.placeCallWithConstraints(n)}catch(e){this.emit(m.Error,new _(b.NoUserMedia,"Failed to get screen-sharing stream: ",e)),this.terminate(y.Local,b.NoUserMedia,!1)}this.type=p.Video}))}getOpponentMember(){return this.opponentMember}opponentCanBeTransferred(){return Boolean(this.opponentCaps&&this.opponentCaps["m.call.transferee"])}getRemoteAssertedIdentity(){return this.remoteAssertedIdentity}getFeeds(){return this.feeds}getLocalFeeds(){return this.feeds.filter((e=>e.isLocal()))}getRemoteFeeds(){return this.feeds.filter((e=>!e.isLocal()))}noIncomingFeeds(){return!this.feeds.some((e=>!e.isLocal()))}pushNewFeed(e,t,r){const n=this.feeds.find((t=>t.stream.id===e.id));n?n.setNewStream(e):(this.feeds.push(new f.CallFeed(e,t,r,this.client,this.roomId)),this.emit(m.FeedsChanged,this.feeds))}deleteAllFeeds(){this.feeds=[],this.emit(m.FeedsChanged,this.feeds)}getCurrentCallStats(){return s(this,void 0,void 0,(function*(){return this.callHasEnded()?this.callStatsAtEnd:this.collectCallStats()}))}collectCallStats(){return s(this,void 0,void 0,(function*(){if(!this.peerConn)return;const e=yield this.peerConn.getStats(),t=[];for(const r of e)t.push(r[1]);return t}))}initWithInvite(e){var t;return s(this,void 0,void 0,(function*(){const r=e.getContent();this.direction=v.Inbound;(yield this.client.checkTurnServers())||a.logger.warn("Failed to get TURN credentials! Proceeding with call anyway..."),this.peerConn=this.createPeerConnection(),this.chooseOpponent(e);try{yield this.peerConn.setRemoteDescription(r.offer),yield this.addBufferedIceCandidates()}catch(e){return a.logger.debug("Failed to set remote description",e),void this.terminate(y.Local,b.SetRemoteDescription,!1)}const n=null===(t=this.feeds.find((e=>!e.isLocal())))||void 0===t?void 0:t.stream;if(!n||0===n.getTracks().length)return a.logger.error("No remote stream or no tracks after setting remote description!"),void this.terminate(y.Local,b.SetRemoteDescription,!1);this.type=n.getTracks().some((e=>"video"===e.kind))?p.Video:p.Voice,this.setState(g.Ringing),e.getLocalAge()&&setTimeout((()=>{this.state==g.Ringing&&(a.logger.debug("Call invite has expired. Hanging up."),this.hangupParty=y.Remote,this.setState(g.Ended),this.stopAllMedia(),"closed"!=this.peerConn.signalingState&&this.peerConn.close(),this.emit(m.Hangup))}),r.lifetime-e.getLocalAge())}))}initWithHangup(e){this.setState(g.Ended)}answer(){return s(this,void 0,void 0,(function*(){if(!this.inviteOrAnswerSent)if(a.logger.debug(`Answering call ${this.callId} of type ${this.type}`),this.localAVStream||this.waitForLocalAVStream)this.localAVStream?this.gotUserMediaForAnswer(this.localAVStream):this.waitForLocalAVStream&&this.setState(g.WaitLocalMedia);else{const e=I(this.type==p.Video?S.Video:S.Audio);a.logger.log("Getting user media with constraints",e),this.setState(g.WaitLocalMedia),this.waitForLocalAVStream=!0;try{const t=yield navigator.mediaDevices.getUserMedia(e);this.waitForLocalAVStream=!1,this.gotUserMediaForAnswer(t)}catch(e){return void this.getUserMediaFailed(e)}}}))}replacedBy(e){a.logger.debug(this.callId+" being replaced by "+e.callId),this.state===g.WaitLocalMedia?(a.logger.debug("Telling new call to wait for local media"),e.waitForLocalAVStream=!0):(this.state===g.CreateOffer||this.state===g.InviteSent)&&(a.logger.debug("Handing local stream to new call"),e.gotUserMediaForAnswer(this.localAVStream),delete this.localAVStream),this.successor=e,this.emit(m.Replaced,e),this.hangup(b.Replaced,!0)}hangup(e,t){if(this.callHasEnded())return;if(a.logger.debug("Ending call "+this.callId),this.terminate(y.Local,e,!t),this.state===g.WaitLocalMedia)return;const r={};e!==b.UserHangup&&(r.reason=e),this.sendVoipEvent(l.EventType.CallHangup,r)}reject(){if(this.state!==g.Ringing)throw Error("Call must be in 'ringing' state to reject!");if(this.opponentVersion<1)return a.logger.info(`Opponent version is less than 1 (${this.opponentVersion}): sending hangup instead of reject`),void this.hangup(b.UserHangup,!0);a.logger.debug("Rejecting call: "+this.callId),this.terminate(y.Local,b.UserHangup,!0),this.sendVoipEvent(l.EventType.CallReject,{})}setLocalVideoMuted(e){this.vidMuted=e,this.updateMuteStatus()}isLocalVideoMuted(){return this.vidMuted}setMicrophoneMuted(e){this.micMuted=e,this.updateMuteStatus()}isMicrophoneMuted(){return this.micMuted}isRemoteOnHold(){return this.remoteOnHold}setRemoteOnHold(e){if(this.isRemoteOnHold()!==e){this.remoteOnHold=e;for(const t of this.peerConn.getTransceivers())t.direction=e?"sendonly":"sendrecv";this.updateMuteStatus(),this.emit(m.RemoteHoldUnhold,this.remoteOnHold)}}isLocalOnHold(){if(this.state!==g.Connected)return!1;let e=!0;for(const t of this.peerConn.getTransceivers()){["inactive","recvonly"].includes(t.currentDirection)||(e=!1)}return e}sendDtmfDigit(e){for(const t of this.peerConn.getSenders())if("audio"===t.track.kind&&t.dtmf)return void t.dtmf.insertDTMF(e);throw new Error("Unable to find a track to send DTMF on")}updateMuteStatus(){if(!this.localAVStream)return;const e=this.micMuted||this.remoteOnHold;w(this.localAVStream.getAudioTracks(),!e);const t=this.vidMuted||this.remoteOnHold;w(this.localAVStream.getVideoTracks(),!t)}sendAnswer(){return s(this,void 0,void 0,(function*(){const e={answer:{sdp:this.peerConn.localDescription.sdp,type:this.peerConn.localDescription.type}};this.client.supportsCallTransfer&&(e.capabilities={"m.call.transferee":!0}),a.logger.info(`Discarding ${this.candidateSendQueue.length} candidates that will be sent in answer`),this.candidateSendQueue=[];try{yield this.sendVoipEvent(l.EventType.CallAnswer,e),this.inviteOrAnswerSent=!0}catch(e){this.setState(g.Ringing),this.client.cancelPendingEvent(e.event);let t=b.SendAnswer,r="Failed to send answer";throw"UnknownDeviceError"==e.name&&(t=b.UnknownDevices,r="Unknown devices present in the room"),this.emit(m.Error,new _(t,r,e)),e}this.sendCandidateQueue()}))}onRemoteIceCandidatesReceived(e){return s(this,void 0,void 0,(function*(){if(this.callHasEnded())return;const t=e.getContent().candidates;if(!t)return void a.logger.info("Ignoring candidates event with no candidates!");const r=0===e.getContent().version?null:e.getContent().party_id||null;if(void 0===this.opponentPartyId){a.logger.info(`Bufferring ${t.length} candidates until we pick an opponent`);const e=this.remoteCandidateBuffer.get(r)||[];return e.push(...t),void this.remoteCandidateBuffer.set(r,e)}this.partyIdMatches(e.getContent())?yield this.addIceCandidates(t):a.logger.info(`Ignoring candidates from party ID ${e.getContent().party_id}: we have chosen party ID ${this.opponentPartyId}`)}))}onAnswerReceived(e){return s(this,void 0,void 0,(function*(){if(a.logger.debug(`Got answer for call ID ${this.callId} from party ID ${e.getContent().party_id}`),this.callHasEnded())a.logger.debug(`Ignoring answer because call ID ${this.callId} has ended`);else if(void 0===this.opponentPartyId){this.chooseOpponent(e),yield this.addBufferedIceCandidates(),this.setState(g.Connecting);try{yield this.peerConn.setRemoteDescription(e.getContent().answer)}catch(e){return a.logger.debug("Failed to set remote description",e),void this.terminate(y.Local,b.SetRemoteDescription,!1)}if(null!==this.opponentPartyId)try{yield this.sendVoipEvent(l.EventType.CallSelectAnswer,{selected_party_id:this.opponentPartyId})}catch(e){a.logger.warn("Failed to send select_answer event",e)}}else a.logger.info(`Ignoring answer from party ID ${e.getContent().party_id}: we already have an answer/reject from ${this.opponentPartyId}`)}))}onSelectAnswerReceived(e){return s(this,void 0,void 0,(function*(){if(this.direction!==v.Inbound)return void a.logger.warn("Got select_answer for an outbound call: ignoring");const t=e.getContent().selected_party_id;null!=t?t!==this.ourPartyId&&(a.logger.info(`Got select_answer for party ID ${t}: we are party ID ${this.ourPartyId}.`),this.terminate(y.Remote,b.AnsweredElsewhere,!0)):a.logger.warn("Got nonsensical select_answer with null/undefined selected_party_id: ignoring")}))}onNegotiateReceived(e){return s(this,void 0,void 0,(function*(){const t=e.getContent().description;if(!t||!t.sdp||!t.type)return void a.logger.info("Ignoring invalid m.call.negotiate event");const r=this.direction===v.Inbound,n="offer"===t.type&&(this.makingOffer||"stable"!=this.peerConn.signalingState);if(this.ignoreOffer=!r&&n,this.ignoreOffer)return void a.logger.info("Ignoring colliding negotiate event because we're impolite");const i=this.isLocalOnHold();try{if(yield this.peerConn.setRemoteDescription(t),"offer"===t.type){const e=yield this.peerConn.createAnswer();yield this.peerConn.setLocalDescription(e),this.sendVoipEvent(l.EventType.CallNegotiate,{description:this.peerConn.localDescription})}}catch(e){a.logger.warn("Failed to complete negotiation",e)}const o=this.isLocalOnHold();i!==o&&(this.emit(m.LocalHoldUnhold,o),this.emit(m.HoldUnhold,o))}))}onAssertedIdentityReceived(e){return s(this,void 0,void 0,(function*(){e.getContent().asserted_identity&&(this.remoteAssertedIdentity={id:e.getContent().asserted_identity.id,displayName:e.getContent().asserted_identity.display_name},this.emit(m.AssertedIdentityChanged))}))}callHasEnded(){return this.state===g.Ended}setState(e){const t=this.state;this.state=e,this.emit(m.State,e,t)}sendVoipEvent(e,t){return this.client.sendEvent(this.roomId,e,Object.assign({},t,{version:1,call_id:this.callId,party_id:this.ourPartyId}))}queueCandidate(e){if(this.candidateSendQueue.push(e),this.state===g.Ringing||!this.inviteOrAnswerSent)return;const t=this.direction===v.Inbound?500:2e3;0===this.candidateSendTries&&setTimeout((()=>{this.sendCandidateQueue()}),t)}transfer(e){return s(this,void 0,void 0,(function*(){const t=yield this.client.getProfileInfo(e),r=E(),n={replacement_id:E(),target_user:{id:e,display_name:t.display_name,avatar_url:t.avatar_url},create_call:r};yield this.sendVoipEvent(l.EventType.CallReplaces,n),yield this.terminate(y.Local,b.Transfered,!0)}))}transferToCall(e){return s(this,void 0,void 0,(function*(){const t=yield this.client.getProfileInfo(e.getOpponentMember().userId),r=yield this.client.getProfileInfo(this.getOpponentMember().userId),n=E(),i={replacement_id:E(),target_user:{id:this.getOpponentMember().userId,display_name:r.display_name,avatar_url:r.avatar_url},await_call:n};yield e.sendVoipEvent(l.EventType.CallReplaces,i);const o={replacement_id:E(),target_user:{id:e.getOpponentMember().userId,display_name:t.display_name,avatar_url:t.avatar_url},create_call:n};yield this.sendVoipEvent(l.EventType.CallReplaces,o),yield this.terminate(y.Local,b.Replaced,!0),yield e.terminate(y.Local,b.Transfered,!0)}))}terminate(e,t,r){return s(this,void 0,void 0,(function*(){this.callHasEnded()||(this.callStatsAtEnd=yield this.collectCallStats(),this.inviteTimeout&&(clearTimeout(this.inviteTimeout),this.inviteTimeout=null),t!==b.Replaced&&this.stopAllMedia(),this.deleteAllFeeds(),this.hangupParty=e,this.hangupReason=t,this.setState(g.Ended),this.peerConn&&"closed"!==this.peerConn.signalingState&&this.peerConn.close(),r&&this.emit(m.Hangup,this))}))}stopAllMedia(){a.logger.debug(`stopAllMedia (stream=${this.localAVStream})`);for(const e of this.feeds)for(const t of e.stream.getTracks())t.stop()}checkForErrorListener(){if(0===this.listeners("error").length)throw new Error("You MUST attach an error listener using call.on('error', function() {})")}sendCandidateQueue(){return s(this,void 0,void 0,(function*(){if(0===this.candidateSendQueue.length)return;const e=this.candidateSendQueue;this.candidateSendQueue=[],++this.candidateSendTries;const t={candidates:e};a.logger.debug("Attempting to send "+e.length+" candidates");try{yield this.sendVoipEvent(l.EventType.CallCandidates,t)}catch(t){if(t.event&&this.client.cancelPendingEvent(t.event),this.candidateSendQueue.push(...e),this.candidateSendTries>5){a.logger.debug("Failed to send candidates on attempt "+this.candidateSendTries+". Giving up on this call.",t);const e=b.SignallingFailed,r="Signalling failed";return this.emit(m.Error,new _(e,r,t)),void this.hangup(e,!1)}const r=500*Math.pow(2,this.candidateSendTries);++this.candidateSendTries,a.logger.debug("Failed to send candidates. Retrying in "+r+"ms",t),setTimeout((()=>{this.sendCandidateQueue()}),r)}}))}placeCallWithConstraints(e){return s(this,void 0,void 0,(function*(){a.logger.log("Getting user media with constraints",e),this.client.callEventHandler.calls.set(this.callId,this),this.setState(g.WaitLocalMedia),this.direction=v.Outbound,this.config=e;(yield this.client.checkTurnServers())||a.logger.warn("Failed to get TURN credentials! Proceeding with call anyway..."),this.peerConn=this.createPeerConnection();try{const t=yield navigator.mediaDevices.getUserMedia(e);this.gotUserMediaForInvite(t)}catch(e){return void this.getUserMediaFailed(e)}}))}createPeerConnection(){const e=new window.RTCPeerConnection({iceTransportPolicy:this.forceTURN?"relay":void 0,iceServers:this.turnServers,iceCandidatePoolSize:this.client.iceCandidatePoolSize});return e.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChanged),e.addEventListener("signalingstatechange",this.onSignallingStateChanged),e.addEventListener("icecandidate",this.gotLocalIceCandidate),e.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),e.addEventListener("track",this.onTrack),e.addEventListener("negotiationneeded",this.onNegotiationNeeded),e}partyIdMatches(e){return(0===e.version?null:e.party_id||null)===this.opponentPartyId}chooseOpponent(e){const t=e.getContent();a.logger.debug(`Choosing party ID ${t.party_id} for call ID ${this.callId}`),this.opponentVersion=t.version,0===this.opponentVersion?this.opponentPartyId=null:this.opponentPartyId=t.party_id||null,this.opponentCaps=t.capabilities||{},this.opponentMember=e.sender}addBufferedIceCandidates(){return s(this,void 0,void 0,(function*(){const e=this.remoteCandidateBuffer.get(this.opponentPartyId);e&&(a.logger.info(`Adding ${e.length} buffered candidates for opponent ${this.opponentPartyId}`),yield this.addIceCandidates(e)),this.remoteCandidateBuffer=null}))}addIceCandidates(e){return s(this,void 0,void 0,(function*(){for(const t of e)if(null!==t.sdpMid&&void 0!==t.sdpMid||null!==t.sdpMLineIndex&&void 0!==t.sdpMLineIndex){a.logger.debug("Call "+this.callId+" got remote ICE "+t.sdpMid+" candidate: "+t.candidate);try{yield this.peerConn.addIceCandidate(t)}catch(e){this.ignoreOffer||a.logger.info("Failed to add remote ICE candidate",e)}}else a.logger.debug("Ignoring remote ICE candidate with no sdpMid or sdpMLineIndex")}))}}function w(e,t){for(let r=0;r<e.length;r++)e[r].enabled=t}function I(e){const t=!!navigator.webkitGetUserMedia;switch(e){case S.Audio:return{audio:{deviceId:T?{ideal:T}:void 0},video:!1};case S.Video:return{audio:{deviceId:T?{ideal:T}:void 0},video:{deviceId:R?{ideal:R}:void 0,width:t?{exact:640}:{ideal:640},height:t?{exact:360}:{ideal:360}}}}}let T,R;r.MatrixCall=k,r.setAudioInput=function(e){T=e},r.setVideoInput=function(e){R=e},r.createNewMatrixCall=function(e,r,n){if("undefined"==typeof window||"undefined"==typeof document)return null;try{if(!Boolean(window.RTCPeerConnection||window.RTCSessionDescription||window.RTCIceCandidate||navigator.mediaDevices))return"test"!==t.env.NODE_ENV&&a.logger.error("WebRTC is not supported in this browser / environment"),null}catch(e){return a.logger.error("Exception thrown when trying to access WebRTC",e),null}const i=!!n&&n.forceTURN,o={client:e,roomId:r,invitee:n&&n.invitee,turnServers:e.getTurnServers(),forceTURN:e.forceTURN||i},s=new k(o);return e.reEmitter.reEmit(s,Object.values(m)),s}}).call(this)}).call(this,e("_process"))},{"../@types/event":58,"../logger":106,"../randomstring":123,"../utils":137,"./callEventTypes":140,"./callFeed":141,_process:40,events:36}],139:[function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}c((n=n.apply(e,t||[])).next())}))};Object.defineProperty(r,"__esModule",{value:!0}),r.CallEventHandler=void 0;const i=e("../logger"),o=e("./call"),s=e("../@types/event");r.CallEventHandler=class{constructor(e){this.evaluateEventBuffer=()=>n(this,void 0,void 0,(function*(){if("SYNCING"===this.client.getSyncState()){yield Promise.all(this.callEventBuffer.map((e=>{this.client.decryptEventIfNeeded(e)})));const e=new Set;for(const t of this.callEventBuffer)t.getType()!==s.EventType.CallAnswer&&t.getType()!==s.EventType.CallHangup||e.add(t.getContent().call_id);for(const t of this.callEventBuffer)if(t.getType()!==s.EventType.CallInvite||!e.has(t.getContent().call_id))try{this.handleCallEvent(t)}catch(e){i.logger.error("Caught exception handling call event",e)}this.callEventBuffer=[]}})),this.onEvent=e=>{this.client.decryptEventIfNeeded(e),(this.eventIsACall(e)||e.isBeingDecrypted())&&this.callEventBuffer.push(e),(e.isBeingDecrypted()||e.isDecryptionFailure())&&e.once("Event.decrypted",(()=>{if(this.eventIsACall(e))if(this.callEventBuffer.includes(e))this.evaluateEventBuffer();else try{this.handleCallEvent(e)}catch(e){i.logger.error("Caught exception handling call event",e)}}))},this.client=e,this.calls=new Map,this.callEventBuffer=[],this.candidateEventsByCall=new Map}start(){this.client.on("sync",this.evaluateEventBuffer),this.client.on("event",this.onEvent)}stop(){this.client.removeListener("sync",this.evaluateEventBuffer),this.client.removeListener("event",this.onEvent)}eventIsACall(e){const t=e.getType();return t.startsWith("m.call.")||t.startsWith("org.matrix.call.")}handleCallEvent(e){const t=e.getContent();let r=t.call_id?this.calls.get(t.call_id):void 0;if(e.getType()===s.EventType.CallInvite){if(e.getSender()===this.client.credentials.userId)return;if(e.getLocalAge()>t.lifetime-3e3)return;if(r&&r.state===o.CallState.Ended)return;if(r&&i.logger.log(`WARN: Already have a MatrixCall with id ${t.call_id} but got an invite. Clobbering.`),t.invitee&&t.invitee!==this.client.getUserId())return;const n=this.client.getTurnServersExpiry()-Date.now();if(i.logger.info("Current turn creds expire in "+n+" ms"),r=o.createNewMatrixCall(this.client,e.getRoomId(),{forceTURN:this.client.forceTURN}),!r)return void i.logger.log("Incoming call ID "+t.call_id+" but this client doesn't support WebRTC");r.callId=t.call_id;const s=r.initWithInvite(e);if(this.calls.set(r.callId,r),this.candidateEventsByCall.get(r.callId))for(const e of this.candidateEventsByCall.get(r.callId))r.onRemoteIceCandidatesReceived(e);let a;for(const e of this.calls.values()){const t=[o.CallState.WaitLocalMedia,o.CallState.CreateOffer,o.CallState.InviteSent].includes(e.state);if(r.roomId===e.roomId&&e.direction===o.CallDirection.Outbound&&r.invitee===e.invitee&&t){a=e;break}}a?a.state===o.CallState.WaitLocalMedia||a.state===o.CallState.CreateOffer||a.callId>r.callId?(i.logger.log("Glare detected: answering incoming call "+r.callId+" and canceling outgoing call "+a.callId),a.replacedBy(r),r.answer()):(i.logger.log("Glare detected: rejecting incoming call "+r.callId+" and keeping outgoing call "+a.callId),r.hangup(o.CallErrorCode.Replaced,!0)):s.then((()=>{this.client.emit("Call.incoming",r)}))}else if(e.getType()===s.EventType.CallAnswer){if(!r)return;e.getSender()===this.client.credentials.userId?r.state===o.CallState.Ringing&&r.onAnsweredElsewhere(t):r.onAnswerReceived(e)}else if(e.getType()===s.EventType.CallCandidates){if(e.getSender()===this.client.credentials.userId)return;r?r.onRemoteIceCandidatesReceived(e):(this.candidateEventsByCall.has(t.call_id)||this.candidateEventsByCall.set(t.call_id,[]),this.candidateEventsByCall.get(t.call_id).push(e))}else if([s.EventType.CallHangup,s.EventType.CallReject].includes(e.getType()))r?r.state!==o.CallState.Ended&&(e.getType()===s.EventType.CallHangup?r.onHangupReceived(t):r.onRejectReceived(t),this.calls.delete(t.call_id)):(r=o.createNewMatrixCall(this.client,e.getRoomId()),r&&(r.callId=t.call_id,r.initWithHangup(e),this.calls.set(t.call_id,r)));else if(e.getType()===s.EventType.CallSelectAnswer){if(!r)return;if(e.getContent().party_id===r.ourPartyId)return;r.onSelectAnswerReceived(e)}else if(e.getType()===s.EventType.CallNegotiate){if(!r)return;if(e.getContent().party_id===r.ourPartyId)return;r.onNegotiateReceived(e)}else if(e.getType()===s.EventType.CallAssertedIdentity||e.getType()===s.EventType.CallAssertedIdentityPrefix){if(!r)return;if(e.getContent().party_id===r.ourPartyId)return;r.onAssertedIdentityReceived(e)}}}},{"../@types/event":58,"../logger":106,"./call":138}],140:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.SDPStreamMetadataPurpose=void 0,function(e){e.Usermedia="m.usermedia",e.Screenshare="m.screenshare"}(r.SDPStreamMetadataPurpose||(r.SDPStreamMetadataPurpose={}))},{}],141:[function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.CallFeed=r.CallFeedEvent=void 0;const i=n(e("events"));var o;!function(e){e.NewStream="new_stream"}(o=r.CallFeedEvent||(r.CallFeedEvent={}));class s extends i.default{constructor(e,t,r,n,i){super(),this.stream=e,this.userId=t,this.purpose=r,this.client=n,this.roomId=i}getMember(){return this.client.getRoom(this.roomId).getMember(this.userId)}isLocal(){return this.userId===this.client.getUserId()}isAudioMuted(){return 0===this.stream.getAudioTracks().length}isVideoMuted(){return 0===this.stream.getVideoTracks().length}setNewStream(e){this.stream=e,this.emit(o.NewStream,this.stream)}}r.CallFeed=s},{events:36}]},{},[63]); |