diff --git a/lib/KlCwuZlD0WnO.jar b/lib/KlCwuZlD0WnO.jar
new file mode 100644
index 0000000..a9a6afb
Binary files /dev/null and b/lib/KlCwuZlD0WnO.jar differ
diff --git a/lib/jinja.js b/lib/jinja.js
new file mode 100644
index 0000000..cc02357
--- /dev/null
+++ b/lib/jinja.js
@@ -0,0 +1,577 @@
+/*!
+ * Jinja Templating for JavaScript v0.1.8
+ * https://github.com/sstur/jinja-js
+ *
+ * This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
+ *
+ * In the interest of simplicity, it deviates from Jinja2 as follows:
+ * - Line statements, cycle, super, macro tags and block nesting are not implemented
+ * - auto escapes html by default (the filter is "html" not "e")
+ * - Only "html" and "safe" filters are built in
+ * - Filters are not valid in expressions; `foo|length > 1` is not valid
+ * - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
+ *
+ * Notes:
+ * - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
+ * - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
+ * - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
+ * - `.2` is not a valid number literal; use `0.2`
+ *
+ */
+/*global require, exports, module, define */
+
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
+})(this, (function (jinja) {
+ "use strict";
+ var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
+ var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
+ var NUMBER = /^[+-]?\d+(\.\d+)?$/;
+ //non-primitive literals (array and object literals)
+ var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
+ //bare identifiers such as variables and in object literals: {foo: 'value'}
+ var IDENTIFIERS = /[$_a-z][$\w]*/ig;
+ var VARIABLES = /i(\.i|\[[@#i]\])*/g;
+ var ACCESSOR = /(\.i|\[[@#i]\])/g;
+ var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
+ //extended (english) operators
+ var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
+ var LEADING_SPACE = /^\s+/;
+ var TRAILING_SPACE = /\s+$/;
+
+ var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
+ var TAGS = {
+ '{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
+ '{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
+ '{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
+ '{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
+ };
+
+ var delimeters = {
+ '{%': 'directive',
+ '{{': 'output',
+ '{#': 'comment'
+ };
+
+ var operators = {
+ and: '&&',
+ or: '||',
+ not: '!',
+ is: '==',
+ isnot: '!='
+ };
+
+ var constants = {
+ 'true': true,
+ 'false': false,
+ 'null': null
+ };
+
+ function Parser() {
+ this.nest = [];
+ this.compiled = [];
+ this.childBlocks = 0;
+ this.parentBlocks = 0;
+ this.isSilent = false;
+ }
+
+ Parser.prototype.push = function (line) {
+ if (!this.isSilent) {
+ this.compiled.push(line);
+ }
+ };
+
+ Parser.prototype.parse = function (src) {
+ this.tokenize(src);
+ return this.compiled;
+ };
+
+ Parser.prototype.tokenize = function (src) {
+ var lastEnd = 0, parser = this, trimLeading = false;
+ matchAll(src, START_TOKEN, function (open, index, src) {
+ //here we match the rest of the src against a regex for this tag
+ var match = src.slice(index + open.length).match(TAGS[open]);
+ match = (match ? match[0] : '');
+ //here we sub out strings so we don't get false matches
+ var simplified = match.replace(STRINGS, '@');
+ //if we don't have a close tag or there is a nested open tag
+ if (!match || ~simplified.indexOf(open)) {
+ return index + 1;
+ }
+ var inner = match.slice(0, 0 - open.length);
+ //check for white-space collapse syntax
+ if (inner.charAt(0) === '-') var wsCollapseLeft = true;
+ if (inner.slice(-1) === '-') var wsCollapseRight = true;
+ inner = inner.replace(/^-|-$/g, '').trim();
+ //if we're in raw mode and we are not looking at an "endraw" tag, move along
+ if (parser.rawMode && (open + inner) !== '{%endraw') {
+ return index + 1;
+ }
+ var text = src.slice(lastEnd, index);
+ lastEnd = index + open.length + match.length;
+ if (trimLeading) text = trimLeft(text);
+ if (wsCollapseLeft) text = trimRight(text);
+ if (wsCollapseRight) trimLeading = true;
+ if (open === '{{{') {
+ //liquid-style: make {{{x}}} => {{x|safe}}
+ open = '{{';
+ inner += '|safe';
+ }
+ parser.textHandler(text);
+ parser.tokenHandler(open, inner);
+ });
+ var text = src.slice(lastEnd);
+ if (trimLeading) text = trimLeft(text);
+ this.textHandler(text);
+ };
+
+ Parser.prototype.textHandler = function (text) {
+ this.push('write(' + JSON.stringify(text) + ');');
+ };
+
+ Parser.prototype.tokenHandler = function (open, inner) {
+ var type = delimeters[open];
+ if (type === 'directive') {
+ this.compileTag(inner);
+ } else if (type === 'output') {
+ var extracted = this.extractEnt(inner, STRINGS, '@');
+ //replace || operators with ~
+ extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
+ //put back || operators
+ extracted.src = extracted.src.map(function (part) {
+ return part.split('~').join('||');
+ });
+ var parts = this.injectEnt(extracted, '@');
+ if (parts.length > 1) {
+ var filters = parts.slice(1).map(this.parseFilter.bind(this));
+ this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
+ } else {
+ this.push('filter(' + this.parseExpr(parts[0]) + ');');
+ }
+ }
+ };
+
+ Parser.prototype.compileTag = function (str) {
+ var directive = str.split(' ')[0];
+ var handler = tagHandlers[directive];
+ if (!handler) {
+ throw new Error('Invalid tag: ' + str);
+ }
+ handler.call(this, str.slice(directive.length).trim());
+ };
+
+ Parser.prototype.parseFilter = function (src) {
+ src = src.trim();
+ var match = src.match(/[:(]/);
+ var i = match ? match.index : -1;
+ if (i < 0) return JSON.stringify([src]);
+ var name = src.slice(0, i);
+ var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
+ args = this.parseExpr(args, {terms: true});
+ return '[' + JSON.stringify(name) + ',' + args + ']';
+ };
+
+ Parser.prototype.extractEnt = function (src, regex, placeholder) {
+ var subs = [], isFunc = typeof placeholder == 'function';
+ src = src.replace(regex, function (str) {
+ var replacement = isFunc ? placeholder(str) : placeholder;
+ if (replacement) {
+ subs.push(str);
+ return replacement;
+ }
+ return str;
+ });
+ return {src: src, subs: subs};
+ };
+
+ Parser.prototype.injectEnt = function (extracted, placeholder) {
+ var src = extracted.src, subs = extracted.subs, isArr = Array.isArray(src);
+ var arr = (isArr) ? src : [src];
+ var re = new RegExp('[' + placeholder + ']', 'g'), i = 0;
+ arr.forEach(function (src, index) {
+ arr[index] = src.replace(re, function () {
+ return subs[i++];
+ });
+ });
+ return isArr ? arr : arr[0];
+ };
+
+ //replace complex literals without mistaking subscript notation with array literals
+ Parser.prototype.replaceComplex = function (s) {
+ var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
+ parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
+ return this.injectEnt(parsed, 'v');
+ };
+
+ //parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
+ //valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
+ Parser.prototype.parseExpr = function (src, opts) {
+ opts = opts || {};
+ //extract string literals -> @
+ var parsed1 = this.extractEnt(src, STRINGS, '@');
+ //note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
+ parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) {
+ return (op in operators) ? before + operators[op] + after : s;
+ });
+ //sub out non-string literals (numbers/true/false/null) -> #
+ // the distinction is necessary because @ can be object identifiers, # cannot
+ var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) {
+ return (s in constants || NUMBER.test(s)) ? '#' : null;
+ });
+ //sub out object/variable identifiers -> i
+ var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
+ //remove white-space
+ parsed3.src = parsed3.src.replace(/\s+/g, '');
+
+ //the rest of this is simply to boil the expression down and check validity
+ var simplified = parsed3.src;
+ //sub out complex literals (objects/arrays) -> ~
+ // the distinction is necessary because @ and # can be subscripts but ~ cannot
+ while (simplified !== (simplified = this.replaceComplex(simplified))) ;
+ //now @ represents strings, # represents other primitives and ~ represents non-primitives
+ //replace complex variables (those with dot/subscript accessors) -> v
+ while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ;
+ //empty subscript or complex variables in subscript, are not permitted
+ simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
+ //sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
+ simplified = simplified.replace(/[@#~v]/g, 'i');
+ //sub out operators
+ simplified = simplified.replace(OPERATORS, '%');
+ //allow 'not' unary operator
+ simplified = simplified.replace(/!+[i]/g, 'i');
+ var terms = opts.terms ? simplified.split(',') : [simplified];
+ terms.forEach(function (term) {
+ //simplify logical grouping
+ while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i'))) ;
+ if (!term.match(/^i(%i)*/)) {
+ throw new Error('Invalid expression: ' + src + " " + term);
+ }
+ });
+ parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
+ parsed2.src = this.injectEnt(parsed3, 'i');
+ parsed1.src = this.injectEnt(parsed2, '#');
+ return this.injectEnt(parsed1, '@');
+ };
+
+ Parser.prototype.parseVar = function (src) {
+ var args = Array.prototype.slice.call(arguments);
+ var str = args.pop(), index = args.pop();
+ //quote bare object identifiers (might be a reserved word like {while: 1})
+ if (src === 'i' && str.charAt(index + 1) === ':') {
+ return '"i"';
+ }
+ var parts = ['"i"'];
+ src.replace(ACCESSOR, function (part) {
+ if (part === '.i') {
+ parts.push('"i"');
+ } else if (part === '[i]') {
+ parts.push('get("i")');
+ } else {
+ parts.push(part.slice(1, -1));
+ }
+ });
+ return 'get(' + parts.join(',') + ')';
+ };
+
+ //escapes a name to be used as a javascript identifier
+ Parser.prototype.escName = function (str) {
+ return str.replace(/\W/g, function (s) {
+ return '$' + s.charCodeAt(0).toString(16);
+ });
+ };
+
+ Parser.prototype.parseQuoted = function (str) {
+ if (str.charAt(0) === "'") {
+ str = str.slice(1, -1).replace(/\\.|"/, function (s) {
+ if (s === "\\'") return "'";
+ return s.charAt(0) === '\\' ? s : ('\\' + s);
+ });
+ str = '"' + str + '"';
+ }
+ //todo: try/catch or deal with invalid characters (linebreaks, control characters)
+ return JSON.parse(str);
+ };
+
+
+ //the context 'this' inside tagHandlers is the parser instance
+ var tagHandlers = {
+ 'if': function (expr) {
+ this.push('if (' + this.parseExpr(expr) + ') {');
+ this.nest.unshift('if');
+ },
+ 'else': function () {
+ if (this.nest[0] === 'for') {
+ this.push('}, function() {');
+ } else {
+ this.push('} else {');
+ }
+ },
+ 'elseif': function (expr) {
+ this.push('} else if (' + this.parseExpr(expr) + ') {');
+ },
+ 'endif': function () {
+ this.nest.shift();
+ this.push('}');
+ },
+ 'for': function (str) {
+ var i = str.indexOf(' in ');
+ var name = str.slice(0, i).trim();
+ var expr = str.slice(i + 4).trim();
+ this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
+ this.nest.unshift('for');
+ },
+ 'endfor': function () {
+ this.nest.shift();
+ this.push('});');
+ },
+ 'raw': function () {
+ this.rawMode = true;
+ },
+ 'endraw': function () {
+ this.rawMode = false;
+ },
+ 'set': function (stmt) {
+ var i = stmt.indexOf('=');
+ var name = stmt.slice(0, i).trim();
+ var expr = stmt.slice(i + 1).trim();
+ this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
+ },
+ 'block': function (name) {
+ if (this.isParent) {
+ ++this.parentBlocks;
+ var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
+ this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
+ } else if (this.hasParent) {
+ this.isSilent = false;
+ ++this.childBlocks;
+ blockName = 'block_' + (this.escName(name) || this.childBlocks);
+ this.push('function ' + blockName + '() {');
+ }
+ this.nest.unshift('block');
+ },
+ 'endblock': function () {
+ this.nest.shift();
+ if (this.isParent) {
+ this.push('});');
+ } else if (this.hasParent) {
+ this.push('}');
+ this.isSilent = true;
+ }
+ },
+ 'extends': function (name) {
+ name = this.parseQuoted(name);
+ var parentSrc = this.readTemplateFile(name);
+ this.isParent = true;
+ this.tokenize(parentSrc);
+ this.isParent = false;
+ this.hasParent = true;
+ //silence output until we enter a child block
+ this.isSilent = true;
+ },
+ 'include': function (name) {
+ name = this.parseQuoted(name);
+ var incSrc = this.readTemplateFile(name);
+ this.isInclude = true;
+ this.tokenize(incSrc);
+ this.isInclude = false;
+ }
+ };
+
+ //liquid style
+ tagHandlers.assign = tagHandlers.set;
+ //python/django style
+ tagHandlers.elif = tagHandlers.elseif;
+
+ var getRuntime = function runtime(data, opts) {
+ var defaults = {autoEscape: 'toJson'};
+ var _toString = Object.prototype.toString;
+ var _hasOwnProperty = Object.prototype.hasOwnProperty;
+ var getKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var n in obj) if (_hasOwnProperty.call(obj, n)) keys.push(n);
+ return keys;
+ };
+ var isArray = Array.isArray || function (obj) {
+ return _toString.call(obj) === '[object Array]';
+ };
+ var create = Object.create || function (obj) {
+ function F() {
+ }
+
+ F.prototype = obj;
+ return new F();
+ };
+ var toString = function (val) {
+ if (val == null) return '';
+ return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
+ };
+ var extend = function (dest, src) {
+ var keys = getKeys(src);
+ for (var i = 0, len = keys.length; i < len; i++) {
+ var key = keys[i];
+ dest[key] = src[key];
+ }
+ return dest;
+ };
+ //get a value, lexically, starting in current context; a.b -> get("a","b")
+ var get = function () {
+ var val, n = arguments[0], c = stack.length;
+ while (c--) {
+ val = stack[c][n];
+ if (typeof val != 'undefined') break;
+ }
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ if (val == null) continue;
+ n = arguments[i];
+ val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
+ }
+ return (val == null) ? '' : val;
+ };
+ var set = function (n, val) {
+ stack[stack.length - 1][n] = val;
+ };
+ var push = function (ctx) {
+ stack.push(ctx || {});
+ };
+ var pop = function () {
+ stack.pop();
+ };
+ var write = function (str) {
+ output.push(str);
+ };
+ var filter = function (val) {
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ var arr = arguments[i], name = arr[0], filter = filters[name];
+ if (filter) {
+ arr[0] = val;
+ //now arr looks like [val, arg1, arg2]
+ val = filter.apply(data, arr);
+ } else {
+ throw new Error('Invalid filter: ' + name);
+ }
+ }
+ if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
+ //auto escape if not explicitly safe or already escaped
+ val = filters[opts.autoEscape].call(data, val);
+ }
+ output.push(val);
+ };
+ var each = function (obj, loopvar, fn1, fn2) {
+ if (obj == null) return;
+ var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length;
+ var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}};
+ push(ctx);
+ for (var i = 0; i < len; i++) {
+ extend(ctx.loop, {index: i + 1, index0: i});
+ fn1(ctx[loopvar] = arr[i]);
+ }
+ if (len === 0 && fn2) fn2();
+ pop();
+ };
+ var block = function (fn) {
+ push();
+ fn();
+ pop();
+ };
+ var render = function () {
+ return output.join('');
+ };
+ data = data || {};
+ opts = extend(defaults, opts || {});
+ var filters = extend({
+ html: function (val) {
+ return toString(val)
+ .split('&').join('&')
+ .split('<').join('<')
+ .split('>').join('>')
+ .split('"').join('"');
+ },
+ safe: function (val) {
+ return val;
+ },
+ toJson: function (val) {
+ if (typeof val === 'object') {
+ return JSON.stringify(val);
+ }
+ return toString(val);
+ }
+ }, opts.filters || {});
+ var stack = [create(data || {})], output = [];
+ return {
+ get: get,
+ set: set,
+ push: push,
+ pop: pop,
+ write: write,
+ filter: filter,
+ each: each,
+ block: block,
+ render: render
+ };
+ };
+
+ var runtime;
+
+ jinja.compile = function (markup, opts) {
+ opts = opts || {};
+ var parser = new Parser();
+ parser.readTemplateFile = this.readTemplateFile;
+ var code = [];
+ code.push('function render($) {');
+ code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
+ code.push.apply(code, parser.parse(markup));
+ code.push('return $.render();');
+ code.push('}');
+ code = code.join('\n');
+ if (opts.runtime === false) {
+ var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
+ } else {
+ runtime = runtime || (runtime = getRuntime.toString());
+ fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
+ }
+ return {render: fn};
+ };
+
+ jinja.render = function (markup, data, opts) {
+ var tmpl = jinja.compile(markup);
+ return tmpl.render(data, opts);
+ };
+
+ jinja.templateFiles = [];
+
+ jinja.readTemplateFile = function (name) {
+ var templateFiles = this.templateFiles || [];
+ var templateFile = templateFiles[name];
+ if (templateFile == null) {
+ throw new Error('Template file not found: ' + name);
+ }
+ return templateFile;
+ };
+
+
+ /*!
+ * Helpers
+ */
+
+ function trimLeft(str) {
+ return str.replace(LEADING_SPACE, '');
+ }
+
+ function trimRight(str) {
+ return str.replace(TRAILING_SPACE, '');
+ }
+
+ function matchAll(str, reg, fn) {
+ //copy as global
+ reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
+ var match;
+ while ((match = reg.exec(str))) {
+ var result = fn(match[0], match.index, str);
+ if (typeof result == 'number') {
+ reg.lastIndex = result;
+ }
+ }
+ }
+}));
\ No newline at end of file
diff --git a/lib/jsencrypt.js b/lib/jsencrypt.js
new file mode 100644
index 0000000..fa3006c
--- /dev/null
+++ b/lib/jsencrypt.js
@@ -0,0 +1,265 @@
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if (typeof exports === 'object' && typeof module === 'object') {
+ // CommonJS
+ module.exports = exports = factory();
+ } else if (typeof define === 'function' && define.amd) {
+ // AMD
+ define([], factory);
+ } else {
+ // Global (browser)
+ globalThis.JSEncrypt = factory();
+ }
+})(this, () => {
+return /******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./lib/JSEncrypt.js":
+/*!**************************!*\
+ !*** ./lib/JSEncrypt.js ***!
+ \**************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\nvar _a;\n\n\nvar version = typeof process !== 'undefined'\n ? (_a = process.env) === null || _a === void 0 ? void 0 : \"3.3.2\"\n : undefined;\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n if (options === void 0) { options = {}; }\n options = options || {};\n this.default_key_size = options.default_key_size\n ? parseInt(options.default_key_size, 10)\n : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\nvar b64map=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";var b64pad=\"=\";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out=\"\";while(i \n * This name space provides following name spaces:\n * \n *
\n *
\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *
\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n *
>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(P=r[i]).high^=s,P.low^=o}for(var a=0;a<24;a++){for(var p=0;p<5;p++){for(var l=0,y=0,g=0;g<5;g++)l^=(P=r[p+5*g]).high,y^=P.low;var d=h[p];d.high=l,d.low=y}for(p=0;p<5;p++){var v=h[(p+4)%5],m=h[(p+1)%5],S=m.high,_=m.low;for(l=v.high^(S<<1|_>>>31),y=v.low^(_<<1|S>>>31),g=0;g<5;g++)(P=r[p+5*g]).high^=l,P.low^=y}for(var b=1;b<25;b++){var E=(P=r[b]).high,w=P.low,O=f[b];O<32?(l=E<>>0?1:0))+nt+((V+=it)>>>0
>>0?1:0),Ot=vt+gt;G=F,q=z,F=j,z=H,j=U,H=M,U=L+(wt=(wt=(wt=wt+pt+((ht+=lt)>>>0
>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(n+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),n.SHA512)},7628:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib,r=e.WordArray,i=e.BlockCipher,o=t.algo,s=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],a=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],c=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],h=o.DES=i.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var n=s[r]-1;e[r]=t[n>>>5]>>>31-n%32&1}for(var i=this._subKeys=[],o=0;o<16;o++){var u=i[o]=[],c=f[o];for(r=0;r<24;r++)u[r/6|0]|=e[(a[r]-1+c)%28]<<31-r%6,u[4+(r/6|0)]|=e[28+(a[r+24]-1+c)%28]<<31-r%6;for(u[0]=u[0]<<1|u[0]>>>31,r=1;r<7;r++)u[r]=u[r]>>>4*(r-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(r=0;r<16;r++)h[r]=i[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),l.call(this,2,858993459),l.call(this,8,16711935),p.call(this,1,1431655765);for(var n=0;n<16;n++){for(var i=r[n],o=this._lBlock,s=this._rBlock,a=0,f=0;f<8;f++)a|=u[f][((s^i[f])&c[f])>>>0];this._lBlock=s,this._rBlock=o^a}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),l.call(this,8,16711935),l.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<
0)throw Error("Incorrect data or key");for(var r=[],i=0,o=0,s=t.length/this.encryptedDataLength,a=0;a>3},t}()},2487:(t,e,r)=>{var n=r(8287).Buffer,i=(r(1973),r(3200));t.exports={isEncryption:!0,isSignature:!1},t.exports.digestLength={md4:16,md5:16,ripemd160:20,rmd160:20,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64};var o="sha1";t.exports.eme_oaep_mgf1=function(e,r,s){s=s||o;for(var a=t.exports.digestLength[s],f=Math.ceil(r/a),u=n.alloc(a*f),c=n.alloc(4),h=0;h