From c262859405bae26ea7962cbd6b895d9eef58b55b Mon Sep 17 00:00:00 2001 From: Segun Date: Thu, 23 Feb 2023 02:14:23 +0100 Subject: [PATCH] Correct rendering of images reconstructed from Legacy JSON (#1359) * prelim work * supports for lng & lon as longitude * review * more flexible support for legacy json * update * update * update * hotfix * update --- dist/leaflet.distortableimage.js | 878 +++++++-------------------- dist/leaflet.distortableimage.js.map | 2 +- examples/js/archive.js | 292 ++++----- src/DistortableCollection.js | 85 ++- 4 files changed, 469 insertions(+), 788 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 634bf43b3..f8315841d 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -195,13 +195,9 @@ ansiHTML.reset() /***/ (function() { function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } - -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } - +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - var arr = []; L.DistortableCollection = L.FeatureGroup.extend({ options: { @@ -221,16 +217,14 @@ L.DistortableCollection = L.FeatureGroup.extend({ onAdd: function onAdd(map) { L.FeatureGroup.prototype.onAdd.call(this, map); this._map = map; - if (this.editable) { this.editing.enable(); } + /** * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, * events that need to be added on individual images are kept here to do so through `layeradd`. */ - - this.on('layeradd', this._addEvents, this); this.on('layerremove', this._removeEvents, this); }, @@ -238,7 +232,6 @@ L.DistortableCollection = L.FeatureGroup.extend({ if (this.editing) { this.editing.disable(); } - this.off('layeradd', this._addEvents, this); this.off('layerremove', this._removeEvents, this); }, @@ -250,7 +243,6 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, this); L.DomEvent.on(layer.getElement(), { mousedown: this._deselectOthers, - /* Enable longpress for multi select for touch devices. */ contextmenu: this._longPressMultiSelect }, this); @@ -268,21 +260,16 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _longPressMultiSelect: function _longPressMultiSelect(e) { var _this = this; - if (!this.editable) { return; } - e.preventDefault(); this.eachLayer(function (layer) { var edit = layer.editing; - if (layer.getElement() === e.target && edit.enabled()) { L.DomUtil.toggleClass(layer.getElement(), 'collected'); - if (_this.anyCollected()) { layer.deselect(); - _this.editing._addToolbar(); } else { _this.editing._removeToolbar(); @@ -301,13 +288,12 @@ L.DistortableCollection = L.FeatureGroup.extend({ if (e.shiftKey) { /* conditional prevents disabled images from flickering multi-select mode */ if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); // re-order layers by _leaflet_id to match their display order in UI + L.DomUtil.toggleClass(e.target, 'collected'); + // re-order layers by _leaflet_id to match their display order in UI // add new layer to right position and avoid repitition - var newArr = arr.every(function (each) { return each._leaflet_id !== layer._leaflet_id; }); - if (newArr) { arr.push(layer); } else { @@ -315,7 +301,6 @@ L.DistortableCollection = L.FeatureGroup.extend({ } } } - if (this.anyCollected()) { layer.deselect(); } else { @@ -324,11 +309,9 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _deselectOthers: function _deselectOthers(e) { var _this2 = this; - if (!this.editable) { return; } - this.eachLayer(function (layer) { if (layer.getElement() !== e.target) { layer.deselect(); @@ -336,7 +319,6 @@ L.DistortableCollection = L.FeatureGroup.extend({ _this2._toggleCollected(e, layer); } }); - if (e) { L.DomEvent.stopPropagation(e); } @@ -345,15 +327,12 @@ L.DistortableCollection = L.FeatureGroup.extend({ var overlay = e.target; var map = this._map; var i; - if (!this.isCollected(overlay)) { return; } - this.eachLayer(function (layer) { layer._dragStartPoints = {}; layer.deselect(); - for (i = 0; i < 4; i++) { var c = layer.getCorner(i); layer._dragStartPoints[i] = map.latLngToLayerPoint(c); @@ -363,20 +342,15 @@ L.DistortableCollection = L.FeatureGroup.extend({ _dragMultiple: function _dragMultiple(e) { var overlay = e.target; var map = this._map; - if (!this.isCollected(overlay)) { return; } - var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); - var delta = overlay._dragStartPoints[0].subtract(topLeft); - this._updateCollectionFromPoints(delta, overlay); }, _toRemove: function _toRemove() { var _this3 = this; - var layerArr = this.getLayers(); return layerArr.filter(function (layer) { var mode = layer.editing._mode; @@ -385,7 +359,6 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _toMove: function _toMove(overlay) { var _this4 = this; - var layerArr = this.getLayers(); return layerArr.filter(function (layer) { var mode = layer.editing._mode; @@ -394,16 +367,13 @@ L.DistortableCollection = L.FeatureGroup.extend({ }, _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { var layersToMove = this._toMove(overlay); - var p = new L.Transformation(1, -delta.x, 1, -delta.y); var i; layersToMove.forEach(function (layer) { var movedPoints = {}; - for (i = 0; i < 4; i++) { movedPoints[i] = p.transform(layer._dragStartPoints[i]); } - layer.setCornersFromPoints(movedPoints); }); }, @@ -426,20 +396,16 @@ L.DistortableCollection = L.FeatureGroup.extend({ _context.prev = 2; _context.next = 5; return axios.get(url); - case 5: response = _context.sent; - if (!response.data.hasOwnProperty('avg_cm_per_pixel')) { _context.next = 14; break; } - if (!(response.data.collection.length > 1)) { _context.next = 10; break; } - response.data.collection.forEach(function (data) { imgCollectionProps[index] = data; index++; @@ -448,20 +414,17 @@ L.DistortableCollection = L.FeatureGroup.extend({ avg_cm_per_pixel: response.data.avg_cm_per_pixel, imgCollectionProps: imgCollectionProps }); - case 10: imgCollectionProps[index] = response.data.collection; return _context.abrupt("return", { avg_cm_per_pixel: response.data.avg_cm_per_pixel, imgCollectionProps: imgCollectionProps }); - case 14: if (!(response.data.length > 1)) { _context.next = 17; break; } - response.data.forEach(function (data) { imgCollectionProps[index] = data; index++; @@ -469,22 +432,18 @@ L.DistortableCollection = L.FeatureGroup.extend({ return _context.abrupt("return", { imgCollectionProps: imgCollectionProps }); - case 17: imgCollectionProps[index] = response.data; return _context.abrupt("return", { imgCollectionProps: imgCollectionProps }); - case 19: _context.next = 24; break; - case 21: _context.prev = 21; _context.t0 = _context["catch"](2); console.log('err', _context.t0); - case 24: case "end": return _context.stop(); @@ -496,7 +455,6 @@ L.DistortableCollection = L.FeatureGroup.extend({ // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json recreateImagesFromJsonUrl: function recreateImagesFromJsonUrl(url) { var _this5 = this; - return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { var imageCollectionObj; return _regeneratorRuntime().wrap(function _callee2$(_context2) { @@ -504,23 +462,18 @@ L.DistortableCollection = L.FeatureGroup.extend({ switch (_context2.prev = _context2.next) { case 0: imageCollectionObj = {}; - if (!url) { _context2.next = 6; break; } - _context2.next = 4; return _this5.fetchRemoteJson(url); - case 4: imageCollectionObj = _context2.sent; return _context2.abrupt("return", imageCollectionObj); - case 6: ; return _context2.abrupt("return", imageCollectionObj); - case 8: case "end": return _context2.stop(); @@ -536,21 +489,20 @@ L.DistortableCollection = L.FeatureGroup.extend({ this.eachLayer(function (layer) { if (allImages || this.isCollected(layer)) { var sections = layer._image.src.split('/'); - var filename = sections[sections.length - 1]; var zc = layer.getCorners(); var corners = [{ lat: zc[0].lat, - lon: zc[0].lng + lon: zc[0].lng || zc[0].lon }, { lat: zc[1].lat, - lon: zc[1].lng - }, { - lat: zc[2].lat, - lon: zc[2].lng + lon: zc[1].lng || zc[1].lon }, { lat: zc[3].lat, - lon: zc[3].lng + lon: zc[3].lng || zc[3].lon + }, { + lat: zc[2].lat, + lon: zc[2].lng || zc[2].lon }]; json.images.push({ id: layer._leaflet_id, @@ -567,9 +519,71 @@ L.DistortableCollection = L.FeatureGroup.extend({ json.images = json.images.reverse(); json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); return json; - } + } // generateExportJson(allImages = false) { + // const json = {}; + // json.images = []; + // this.eachLayer(function(layer) { + // if (allImages || this.isCollected(layer)) { + // const sections = layer._image.src.split('/'); + // const filename = sections[sections.length - 1]; + // const zc = layer.getCorners(); + // const corners = [ + // {lat: zc[0].lat, lon: zc[0].lng}, + // {lat: zc[1].lat, lon: zc[1].lng}, + // {lat: zc[3].lat, lon: zc[3].lng}, + // {lat: zc[2].lat, lon: zc[2].lng}, + // ]; + // json.images.push({ + // id: layer._leaflet_id, + // src: layer._image.src, + // width: layer._image.width, + // height: layer._image.height, + // tooltipText: layer.getTooltipText(), + // image_file_name: filename, + // nodes: corners, + // cm_per_pixel: L.ImageUtil.getCmPerPixel(layer), + // }); + // } + // }, this); + // json.images = json.images.reverse(); + // json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); + // return json; + // }, + // OPTION 3 + // generateExportJson(allImages = false) { + // const json = {}; + // json.images = []; + // this.eachLayer(function(layer) { + // if (allImages || this.isCollected(layer)) { + // let corners = []; + // const sections = layer._image.src.split('/'); + // const filename = sections[sections.length - 1]; + // const zc = layer.getCorners(); + // // supports longitude written as 'lon' or 'lng' + // for (i = 0; i < zc.length; i++) { + // if (zc[0].lng) { + // corners.push({lat: zc[i].lat, lon: zc[i].lng}); + // } else if (zc[0].lon) { + // corners.push({lat: zc[i].lat, lon: zc[i].lon}); + // } + // } + // json.images.push({ + // id: layer._leaflet_id, + // src: layer._image.src, + // width: layer._image.width, + // height: layer._image.height, + // tooltipText: layer.getTooltipText(), + // image_file_name: filename, + // nodes: corners, + // cm_per_pixel: L.ImageUtil.getCmPerPixel(layer), + // }); + // } + // }, this); + // json.images = json.images.reverse(); + // json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); + // return json; + // }, }); - L.distortableCollection = function (id, options) { return new L.DistortableCollection(id, options); }; @@ -607,57 +621,44 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ }, onAdd: function onAdd(map) { var _this = this; - this._map = map; - if (!this.getElement()) { this._initImage(); } - map.on('viewreset', this._reset, this); - if (this.options.corners) { this._corners = this.options.corners; - if (map.options.zoomAnimation && L.Browser.any3d) { map.on('zoomanim', this._animateZoom, this); } - } // Have to wait for the image to load because need to access its w/h - + } + // Have to wait for the image to load because need to access its w/h L.DomEvent.on(this.getElement(), 'load', function () { _this.getPane().appendChild(_this.getElement()); - _this._initImageDimensions(); - if (_this.options.rotation) { var units = _this.options.rotation.deg >= 0 ? 'deg' : 'rad'; - _this.setAngle(_this.options.rotation[units], units); } else { _this.rotation = { deg: 0, rad: 0 }; - _this._reset(); } - /* Initialize default corners if not already set */ - + /* Initialize default corners if not already set */ if (!_this._corners) { if (map.options.zoomAnimation && L.Browser.any3d) { map.on('zoomanim', _this._animateZoom, _this); } } - /** if there is a featureGroup, only its editable option matters */ - + /** if there is a featureGroup, only its editable option matters */ var eventParents = _this._eventParents; - if (eventParents) { _this.eP = eventParents[Object.keys(eventParents)[0]]; - if (_this.eP.editable) { _this.editing.enable(); } @@ -665,7 +666,6 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ if (_this.editable) { _this.editing.enable(); } - _this.eP = null; } }); @@ -675,15 +675,14 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ singleclickoff: this._resetClickListeners, singleclick: this._singleClick }, this); + /** * custom events fired from DoubleClickLabels.js. Used to differentiate * single / dblclick to not deselect images on map dblclick. */ - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { L.DomEvent.on(map, 'click', this.deselect, this); } - this.fire('add'); L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this); L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); @@ -696,11 +695,9 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ singleclick: this._singleClick }, this); L.DomEvent.off(map, 'click', this.deselect, this); - if (this.editing) { this.editing.disable(); } - this.fire('remove'); L.ImageOverlay.prototype.onRemove.call(this, map); L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); @@ -715,13 +712,11 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var imageWidth = parseInt(aspectRatio * imageHeight); var center = map.project(map.getCenter()); var offset = L.point(imageWidth, imageHeight).divideBy(2); - if (this.options.corners) { this._corners = this.options.corners; } else { this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; } - this._initialDimensions = { 'center': center, 'offset': offset, @@ -751,15 +746,11 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ }, deselect: function deselect() { var edit = this.editing; - if (!edit.enabled()) { return; } - edit._removeToolbar(); - edit._hideMarkers(); - this._selected = false; this.fire('deselect'); return this; @@ -767,31 +758,25 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ select: function select(e) { var edit = this.editing; var eP = this.eP; - if (!edit.enabled()) { return; } - if (e) { L.DomEvent.stopPropagation(e); - } // this ensures deselection of all other images, allowing us to keep collection group optional - + } + // this ensures deselection of all other images, allowing us to keep collection group optional this._programmaticGrouping(); - this._selected = true; - edit._addToolbar(); - edit._showMarkers(); + this.fire('select'); - this.fire('select'); // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it - + // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it if (eP && eP.anyCollected()) { this.deselect(); return; } - return this; }, _programmaticGrouping: function _programmaticGrouping() { @@ -806,11 +791,9 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ this._corners[corner] = latlng; this.setBounds(L.latLngBounds(this.getCorners())); this.fire('update'); - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { edit._updateToolbarPos(); } - this.edited = true; return this; }, @@ -820,7 +803,6 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ } else { var exceedsTop; var exceedsBottom; - if (zoom === 0) { exceedsTop = map.project(corner).y < 2; exceedsBottom = map.project(corner).y >= 255; @@ -828,7 +810,6 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ exceedsTop = map.project(corner).y / zoom < 2; exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; } - return exceedsTop || exceedsBottom; } }, @@ -852,8 +833,9 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var map = this._map; var zoom = map.getZoom(); var edit = this.editing; - var i = 0; // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 + var i = 0; + // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 for (var k in latlngObj) { if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate @@ -862,19 +844,15 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ return; } } - for (var _k in latlngObj) { this._corners[i] = latlngObj[_k]; i += 1; } - this.setBounds(L.latLngBounds(this.getCorners())); this.fire('update'); - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { edit._updateToolbarPos(); } - this.edited = true; return this; }, @@ -883,10 +861,8 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var zoom = map.getZoom(); var edit = this.editing; var i = 0; - for (var k in pointsObj) { var corner = map.layerPointToLatLng(pointsObj[k]); - if (this._cornerExceedsMapLats(zoom, corner, map)) { // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate this.setBounds(L.latLngBounds(this.getCorners())); @@ -894,19 +870,15 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ return; } } - for (var _k2 in pointsObj) { this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); i += 1; } - this.setBounds(L.latLngBounds(this.getCorners())); this.fire('update'); - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { edit._updateToolbarPos(); } - this.edited = true; return this; }, @@ -916,16 +888,13 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var i; var p; var scaledCorners = {}; - if (scale === 0) { return; } - for (i = 0; i < 4; i++) { p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); scaledCorners[i] = map.unproject(p); } - this.setCorners(scaledCorners); return this; }, @@ -938,15 +907,12 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var row1y = matrix[5]; var determinant = row0x * row1y - row0y * row1x; var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); - if (determinant < 0) { angle += angle < 0 ? Math.PI : -Math.PI; } - if (angle < 0) { angle = 2 * Math.PI + angle; } - return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); }, setAngle: function setAngle(angle) { @@ -964,17 +930,14 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var i; var p; var q; - if (unit === 'deg') { angle = L.TrigUtil.degreesToRadians(angle); } - for (i = 0; i < 4; i++) { p = map.project(this.getCorner(i)).subtract(center); q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); corners[i] = map.unproject(q.add(center)); } - this.setCorners(corners); return this; }, @@ -984,12 +947,10 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var p; var transCorners = {}; var delta = map.project(formerPoint).subtract(map.project(newPoint)); - for (i = 0; i < 4; i++) { p = map.project(this.getCorner(i)).subtract(delta); transCorners[i] = map.unproject(p); } - this.setCorners(transCorners); }, restore: function restore() { @@ -998,20 +959,16 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var offset = this._initialDimensions.offset; var zoom = this._initialDimensions.zoom; var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; - for (var i = 0; i < 4; i++) { if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { this.setCorner(i, map.unproject(corners[i], zoom)); } } - this.edited = false; this.fire('restore'); return this; }, - /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ - /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ _getTranslateString: function _getTranslateString(point) { // on WebKit browsers (Chrome/Safari/iOS Safari/Android) @@ -1019,6 +976,7 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ // makes animation smoother as it ensures HW accel is used. // Firefox 13 doesn't care // (same speed either way), Opera 12 doesn't support translate3d + var is3d = L.Browser.webkit3d; var open = 'translate' + (is3d ? '3d' : '') + '('; var close = (is3d ? ',0' : '') + ')'; @@ -1028,27 +986,22 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var map = this._map; var image = this.getElement(); var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); - var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); - var topLeft = latLngToLayerPoint(this.getCorner(0)); var warp = L.DomUtil.getMatrixString(transformMatrix); - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - + /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ image._leaflet_pos = topLeft; image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); + /* Set origin to the upper-left corner rather than * the center of the image, which is the default. */ - image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; this.rotation.deg = this.getAngle(); this.rotation.rad = this.getAngle('rad'); }, - /* * Calculates the transform string that will be * correct *at the end* of zooming. @@ -1058,20 +1011,15 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ _animateZoom: function _animateZoom(event) { var map = this._map; var image = this.getElement(); - var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); }; - var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); - var topLeft = latLngToNewLayerPoint(this.getCorner(0)); var warp = L.DomUtil.getMatrixString(transformMatrix); - var translation = this._getTranslateString(topLeft); - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - + /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ image._leaflet_pos = topLeft; image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); }, @@ -1099,10 +1047,10 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ var c = []; var j; /* Convert corners to container points (i.e. cartesian coordinates). */ - for (j = 0; j < 4; j++) { c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); } + /* * This matrix describes the action of * the CSS transform on each corner of the image. @@ -1114,16 +1062,12 @@ L.DistortableImageOverlay = L.ImageOverlay.extend({ * says that the upper-left corner of the image * maps to the first latlng in this._corners. */ - - return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); } }); - L.distortableImageOverlay = function (id, options) { return new L.DistortableImageOverlay(id, options); }; - L.Map.addInitHook(function () { if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { L.DomUtil.addClass(this.getContainer(), 'ldi'); @@ -1139,7 +1083,6 @@ L.Map.addInitHook(function () { /***/ (function() { var _this = this; - L.DomUtil = L.DomUtil || {}; L.DistortableImage = L.DistortableImage || {}; L.distortableImage = L.DistortableImage; @@ -1156,9 +1099,7 @@ L.DistortableImage.Keymapper = L.Handler.extend({ this._container = this._buildContainer(); this._scrollWrapper = this._wrap(); this._toggler = this._createButton(); - this._setMapper(this._container, this._scrollWrapper, this._toggler); - L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this); L.DomEvent.disableClickPropagation(this._container); L.DomEvent.disableScrollPropagation(this._container); @@ -1185,8 +1126,8 @@ L.DistortableImage.Keymapper = L.Handler.extend({ toggler.innerHTML = L.IconUtil.create('keyboard_open'); toggler.setAttribute('id', 'toggle-keymapper'); toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); // Will force screen readers like VoiceOver to read this as "Show keymap - button" - + toggler.setAttribute('title', 'Show keymap'); + // Will force screen readers like VoiceOver to read this as "Show keymap - button" toggler.setAttribute('role', 'button'); toggler.setAttribute('aria-label', 'Show keymap'); return toggler; @@ -1201,18 +1142,14 @@ L.DistortableImage.Keymapper = L.Handler.extend({ this._keymapper = L.control({ position: this.options.position }); - this._keymapper.onAdd = function () { container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
' + - /* eslint-disable */ + wrap.insertAdjacentHTML('beforeend', '
' + '
' + /* eslint-disable */ '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\xa0u
Stack up / down
q\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\xa0backspace
Export Image(s)
e
'); /* eslint-enable */ - container.appendChild(button); return container; }; - this._keymapper.addTo(this._map); }, _toggleKeymapper: function _toggleKeymapper(e) { @@ -1227,7 +1164,6 @@ L.DistortableImage.Keymapper = L.Handler.extend({ if (document.querySelector('#keymapper-iconset')) { return; } - var el = L.DomUtil.create('div', ''); el.id = 'keymapper-iconset'; el.setAttribute('hidden', 'hidden'); @@ -1237,15 +1173,13 @@ L.DistortableImage.Keymapper = L.Handler.extend({ } }); L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; // dont enable keymapper for mobile - + L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; + // dont enable keymapper for mobile if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { _this.enable(); - _this._injectIconSet(); } }); - L.distortableImage.keymapper = function (map, options) { return new L.DistortableImage.Keymapper(map, options); }; @@ -1258,8 +1192,9 @@ L.distortableImage.keymapper = function (map, options) { \************************************************/ /***/ (function() { -L.DistortableImage = L.DistortableImage || {}; // this class holds the keybindings and toolbar API for an image collection instance +L.DistortableImage = L.DistortableImage || {}; +// this class holds the keybindings and toolbar API for an image collection instance L.DistortableCollection.Edit = L.Handler.extend({ options: { keymap: L.distortableImage.group_action_map @@ -1276,11 +1211,9 @@ L.DistortableCollection.Edit = L.Handler.extend({ this.editActions = this.options.actions; this.runExporter = L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') || this.startExport, this); L.DomEvent.on(document, 'keydown', this._onKeyDown, this); - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { L.DomEvent.on(map, 'click', this._decollectAll, this); } - L.DomEvent.on(map, { singleclickon: this._singleClickListeners, singleclickoff: this._resetClickListeners, @@ -1288,7 +1221,6 @@ L.DistortableCollection.Edit = L.Handler.extend({ boxcollectend: this._addCollections }, this); this._group.editable = true; - this._group.eachLayer(function (layer) { return layer.editing.enable(); }); @@ -1297,22 +1229,17 @@ L.DistortableCollection.Edit = L.Handler.extend({ var group = this._group; var map = group._map; L.DomEvent.off(document, 'keydown', this._onKeyDown, this); - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { L.DomEvent.off(map, 'click', this._decollectAll, this); } - L.DomEvent.off(map, { singleclickon: this._singleClickListeners, singleclickoff: this._resetClickListeners, singleclick: this._singleClick, boxcollectend: this._addCollections }, this); - this._decollectAll(); - this._group.editable = false; - this._group.eachLayer(function (layer) { return layer.editing.disable(); }); @@ -1330,11 +1257,9 @@ L.DistortableCollection.Edit = L.Handler.extend({ _onKeyDown: function _onKeyDown(e) { var keymap = this.options.keymap; var handlerName = keymap[e.key]; - if (!this[handlerName]) { return; } - if (this._group.anyCollected()) { this[handlerName].call(this); } @@ -1358,7 +1283,6 @@ L.DistortableCollection.Edit = L.Handler.extend({ }, _decollectAll: function _decollectAll(e) { var oe; - if (e) { oe = e.originalEvent; } @@ -1366,113 +1290,86 @@ L.DistortableCollection.Edit = L.Handler.extend({ * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete * also prevents deselection following a click on a disabled img by differentiating it from the map */ - - if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { return; } - this._group.eachLayer(function (layer) { L.DomUtil.removeClass(layer.getElement(), 'collected'); layer.deselect(); }); - this._removeToolbar(); - if (e) { L.DomEvent.stopPropagation(e); } }, _unlockGroup: function _unlockGroup() { var _this = this; - if (!this.hasTool(L.UnlockAction)) { return; } - this._group.eachLayer(function (layer) { if (_this._group.isCollected(layer)) { var edit = layer.editing; - - edit._unlock(); // unlock updates the layer's handles; deselect to ensure they're hidden - - + edit._unlock(); + // unlock updates the layer's handles; deselect to ensure they're hidden layer.deselect(); } }); }, _lockGroup: function _lockGroup() { var _this2 = this; - if (!this.hasTool(L.LockAction)) { return; } - this._group.eachLayer(function (layer) { if (_this2._group.isCollected(layer)) { var edit = layer.editing; - - edit._lock(); // map.addLayer also deselects the image, so we reselect here - - + edit._lock(); + // map.addLayer also deselects the image, so we reselect here L.DomUtil.addClass(layer.getElement(), 'collected'); } }); }, _addCollections: function _addCollections(e) { var _this3 = this; - var box = e.boxCollectBounds; var map = this._group._map; - this._group.eachLayer(function (layer) { var edit = layer.editing; - if (layer.isSelected()) { layer.deselect(); } - var zoom = map.getZoom(); var center = map.getCenter(); var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); - if (box.intersects(imgBounds) && edit.enabled()) { if (!_this3.toolbar) { _this3._addToolbar(); } - L.DomUtil.addClass(layer.getElement(), 'collected'); } }); }, _removeGroup: function _removeGroup(e) { var _this4 = this; - if (!this.hasTool(L.DeleteAction)) { return; } - var layersToRemove = this._group._toRemove(); - var n = layersToRemove.length; - if (n === 0) { return; } - var choice = L.DomUtil.confirmDeletes(n); - if (choice) { layersToRemove.forEach(function (layer) { _this4._group.removeLayer(layer); }); - if (!this._group.anyCollected()) { this._removeToolbar(); } } - if (e) { L.DomEvent.stopPropagation(e); } @@ -1481,17 +1378,14 @@ L.DistortableCollection.Edit = L.Handler.extend({ if (!this.customCollection) { this._exportOpts.collection = undefined; } - clearInterval(this.updateInterval); }, _addToolbar: function _addToolbar() { var group = this._group; var map = group._map; - if (group.options.suppressToolbar || this.toolbar) { return; } - this.toolbar = L.distortableImage.controlBar({ actions: this.editActions, position: 'topleft' @@ -1499,7 +1393,6 @@ L.DistortableCollection.Edit = L.Handler.extend({ }, _removeToolbar: function _removeToolbar() { var map = this._group._map; - if (this.toolbar) { map.removeLayer(this.toolbar); this.toolbar = false; @@ -1515,25 +1408,18 @@ L.DistortableCollection.Edit = L.Handler.extend({ addTool: function addTool(value) { if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { this._removeToolbar(); - this.editActions.push(value); - this._addToolbar(); } - return this; }, removeTool: function removeTool(value) { var _this5 = this; - this.editActions.some(function (item, idx) { if (_this5.editActions[idx] === value) { _this5._removeToolbar(); - _this5.editActions.splice(idx, 1); - _this5._addToolbar(); - return true; } else { return false; @@ -1543,54 +1429,51 @@ L.DistortableCollection.Edit = L.Handler.extend({ }, startExport: function startExport() { var _this6 = this; - if (!this.hasTool(L.ExportAction)) { return; } - return new Promise(function (resolve) { var opts = _this6._exportOpts; opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion var statusUrl; - _this6.updateInterval = null; // this may be overridden to update the UI to show export progress or completion + _this6.updateInterval = null; + // this may be overridden to update the UI to show export progress or completion var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); // optimization: fetch status directly from google storage: - + data = JSON.parse(data); + // optimization: fetch status directly from google storage: if (data.status_url) { if (statusUrl !== data.status_url && data.status_url.match('.json')) { // if (data.status_url && data.status_url.substr(0,1) === "/") { // opts.statusUrl = opts.statusUrl + data.status_url; // } else { - statusUrl = data.status_url; // } + statusUrl = data.status_url; + // } } if (data.status === 'complete') { clearInterval(_this6.updateInterval); - if (!_this6.customCollection) { _this6._exportOpts.collection = undefined; } - resolve(); - if (data.jpg !== null) { alert('Export succeeded. ' + opts.exportUrl + data.jpg); } - } // TODO: update to clearInterval when status == "failed" if we update that in this file: - // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb - + } + // TODO: update to clearInterval when status == "failed" if we update that in this file: + // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb console.log(data); } - }; // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; - // this may be overridden to integrate with any UI - + }; + // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; + // this may be overridden to integrate with any UI var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; // repeatedly fetch the status.json - + statusUrl = opts.statusUrl + data; + // repeatedly fetch the status.json _this6.updateInterval = setInterval(function () { var reqOpts = { method: 'GET' @@ -1602,9 +1485,9 @@ L.DistortableCollection.Edit = L.Handler.extend({ } }).then(opts.updater); }, opts.frequency); - }; // initiate the export - + }; + // initiate the export var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { var form = new FormData(); form.append('collection', JSON.stringify(mergedOpts.collection)); @@ -1620,18 +1503,15 @@ L.DistortableCollection.Edit = L.Handler.extend({ return res.text(); } }).then(mergedOpts.handleStatusRes); - }; // If the user has passed collection property - + }; + // If the user has passed collection property _this6.customCollection = !!opts.collection; - if (!_this6.customCollection) { opts.collection = _this6._group.generateExportJson().images; } - opts.frequency = opts.frequency || 3000; opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! - opts.updater = opts.updater || _defaultUpdater; opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; @@ -1639,7 +1519,6 @@ L.DistortableCollection.Edit = L.Handler.extend({ }); } }); - L.distortableCollection.edit = function (group, options) { return new L.DistortableCollection.Edit(group, options); }; @@ -1652,8 +1531,9 @@ L.distortableCollection.edit = function (group, options) { \*******************************************/ /***/ (function() { -L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance +L.DistortableImage = L.DistortableImage || {}; +// holds the keybindings & toolbar API for an individual image instance L.DistortableImage.Edit = L.Handler.extend({ options: { opacity: 0.5, @@ -1670,60 +1550,47 @@ L.DistortableImage.Edit = L.Handler.extend({ L.setOptions(this, options); L.distortableImage.action_map.Escape = '_deselect'; }, - - /* Run on image selection. */ - addHooks: function addHooks() { + /* Run on image selection. */addHooks: function addHooks() { var overlay = this._overlay; this.editActions = this.options.actions; - /* bring the selected image into view */ + /* bring the selected image into view */ overlay.bringToFront(); - this._initModes(); - this._initHandles(); - this._appendHandlesandDragable(); - if (overlay.isSelected() && !overlay.options.suppressToolbar) { this._addToolbar(); } - this.parentGroup = overlay.eP ? overlay.eP : false; L.DomEvent.on(overlay.getElement(), { dblclick: this.nextMode }, this); L.DomEvent.on(window, 'keydown', this._onKeyDown, this); }, - - /* Run on image deselection. */ - removeHooks: function removeHooks() { + /* Run on image deselection. */removeHooks: function removeHooks() { var overlay = this._overlay; - var eP = this.parentGroup; // First, check if dragging exists - it may be off due to locking + var eP = this.parentGroup; + // First, check if dragging exists - it may be off due to locking this._disableDragging(); - if (this.toolbar) { this._removeToolbar(); } - for (var handle in this._handles) { L.DomUtil.remove(handle); } + /** * ensures if you disable an image while it is multi-selected * additional deselection logic is run */ - - if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { L.DomUtil.removeClass(overlay.getElement(), 'collected'); } - if (eP && !eP.anyCollected() && eP.editing.toolbar) { eP.editing._removeToolbar(); } - L.DomEvent.off(overlay.getElement(), { dblclick: this.nextMode }, this); @@ -1733,27 +1600,24 @@ L.DistortableImage.Edit = L.Handler.extend({ if (!this._enabled) { return this; } - this._overlay.deselect(); - this._enabled = false; this.removeHooks(); return this; }, _initModes: function _initModes() { - this._modes = {}; // passed from L.DistortablImage.PopupBar. If the mode is one + this._modes = {}; + // passed from L.DistortablImage.PopupBar. If the mode is one // of the current toolbar actions, adds it to this._modes - for (var mode in L.DistortableImage.Edit.MODES) { var action = L.DistortableImage.Edit.MODES[mode]; - if (this.editActions.indexOf(action) !== -1) { this._modes[mode] = action; } - } // sets the current mode to the 1st available one if the one selected - // during initialization is not available - + } + // sets the current mode to the 1st available one if the one selected + // during initialization is not available if (!this._modes[this._mode]) { this._mode = Object.keys(this._modes)[0]; } @@ -1762,44 +1626,33 @@ L.DistortableImage.Edit = L.Handler.extend({ var overlay = this._overlay; var i; this._dragHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { this._dragHandles.addLayer(L.dragHandle(overlay, i)); } - this._scaleHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); } - this._distortHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { this._distortHandles.addLayer(L.distortHandle(overlay, i)); } - this._rotateHandles = L.layerGroup(); // individual rotate - for (i = 0; i < 4; i++) { this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } // handle includes rotate AND scale - + } + // handle includes rotate AND scale this._freeRotateHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); } - this._lockHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { this._lockHandles.addLayer(L.lockHandle(overlay, i, { draggable: false })); } - this._handles = { drag: this._dragHandles, scale: this._scaleHandles, @@ -1810,26 +1663,22 @@ L.DistortableImage.Edit = L.Handler.extend({ }; }, _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; // won't throw error if user adds 0 mode actions to toolbar + var ov = this._overlay; + // won't throw error if user adds 0 mode actions to toolbar if (!this._mode) { this._enableDragging(); - return; } - this._updateHandle(); - if (!ov.isSelected() && this.currentHandle) { this.currentHandle.eachLayer(function (handle) { handle.setOpacity(0); - if (handle.dragging) { handle.dragging.disable(); } }); } - if (!this.isMode('lock')) { this._enableDragging(); } @@ -1839,11 +1688,9 @@ L.DistortableImage.Edit = L.Handler.extend({ var handlerName = keymap[e.key]; var ov = this._overlay; var eP = this.parentGroup; - if (eP && eP.anyCollected()) { return; } - if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { if (ov.isSelected() && this.toolbar) { this[handlerName].call(this); @@ -1852,29 +1699,22 @@ L.DistortableImage.Edit = L.Handler.extend({ }, replaceTool: function replaceTool(old, next) { var _this = this; - if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { return this; } - this.editActions.some(function (item, idx) { if (item === old) { _this._removeToolbar(); - _this.editActions[idx] = next; - _this._addToolbar(); - for (var mode in L.DistortableImage.Edit.MODES) { if (L.DistortableImage.Edit.MODES[mode] === old) { delete _this._modes[mode]; - _this._nextOrNone(mode); } else if (L.DistortableImage.Edit.MODES[mode] === next) { _this._modes[mode] = next; } } - return true; } }); @@ -1883,22 +1723,17 @@ L.DistortableImage.Edit = L.Handler.extend({ addTool: function addTool(value) { if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { this._removeToolbar(); - this.editActions.push(value); - this._addToolbar(); - for (var mode in L.DistortableImage.Edit.MODES) { if (L.DistortableImage.Edit.MODES[mode] === value) { this._modes[mode] = value; } } - if (!this._overlay.isSelected()) { this._removeToolbar(); } } - return this; }, hasTool: function hasTool(value) { @@ -1908,31 +1743,23 @@ L.DistortableImage.Edit = L.Handler.extend({ }, removeTool: function removeTool(value) { var _this2 = this; - this.editActions.some(function (item, idx) { if (item === value) { _this2._removeToolbar(); - _this2.editActions.splice(idx, 1); - _this2._addToolbar(); - for (var mode in L.DistortableImage.Edit.MODES) { if (L.DistortableImage.Edit.MODES[mode] === value) { delete _this2._modes[mode]; - _this2._nextOrNone(mode); } } - return true; } }); - if (!this._overlay.isSelected()) { this._removeToolbar(); } - return this; }, // set the mode to the next mode or if that was the last one set mode to '' @@ -1944,9 +1771,7 @@ L.DistortableImage.Edit = L.Handler.extend({ if (mode === 'lock') { this._enableDragging(); } - this._mode = ''; - this._updateHandle(); } } @@ -1954,7 +1779,6 @@ L.DistortableImage.Edit = L.Handler.extend({ _removeToolbar: function _removeToolbar() { var ov = this._overlay; var map = ov._map; - if (this.toolbar) { map.removeLayer(this.toolbar); this.toolbar = false; @@ -1962,43 +1786,36 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _enableDragging: function _enableDragging() { var _this3 = this; - var overlay = this._overlay; var map = overlay._map; this.dragging = new L.Draggable(overlay.getElement()); this.dragging.enable(); - /* Hide toolbars and markers while dragging; click will re-show it */ + /* Hide toolbars and markers while dragging; click will re-show it */ this.dragging.on('dragstart', function () { overlay.fire('dragstart'); - _this3._removeToolbar(); }); + /* * Adjust default behavior of L.Draggable, which overwrites the CSS3 * distort transformations that we set when it calls L.DomUtil.setPosition. */ - this.dragging._updatePosition = function () { var topLeft = overlay.getCorner(0); - var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); - var currentPoint; var corners = {}; var i; this.fire('predrag'); - for (i = 0; i < 4; i++) { currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); } - overlay.setCorners(corners); overlay.fire('drag'); this.fire('drag'); }; - this.dragging.on('dragend', function () { overlay.fire('dragend'); }); @@ -2033,44 +1850,34 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _toggleOpacity: function _toggleOpacity() { var image = this._overlay.getElement(); - if (!this.hasTool(L.OpacityAction)) { return; } - this._transparent = !this._transparent; var opacity = this._transparent ? this.options.opacity : 1; L.DomUtil.setOpacity(image, opacity); image.setAttribute('opacity', opacity); - this._refresh(); }, _setOpacities: function _setOpacities(o) { var image = this._overlay.getElement(); - this._opacity = o; - if (!this.hasTool(L.OpacitiesAction)) { return; } - this._opacity < 1 ? this._transparent = true : this._transparent = false; L.DomUtil.setOpacity(image, this._opacity); image.setAttribute('opacity', this._opacity); - this._refresh(); }, _toggleBorder: function _toggleBorder() { var image = this._overlay.getElement(); - if (!this.hasTool(L.BorderAction)) { return; } - this._outlined = !this._outlined; var outline = this._outlined ? this.options.outline : 'none'; image.style.outline = outline; - this._refresh(); }, // compare this to using overlay zIndex @@ -2084,19 +1891,14 @@ L.DistortableImage.Edit = L.Handler.extend({ _removeOverlay: function _removeOverlay() { var ov = this._overlay; var eP = this.parentGroup; - if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; } - var choice = L.DomUtil.confirmDelete(); - if (!choice) { return; } - this._removeToolbar(); - if (eP) { eP.removeLayer(ov); } else { @@ -2108,43 +1910,45 @@ L.DistortableImage.Edit = L.Handler.extend({ var overlay = this._overlay; var map = overlay._map; var img = overlay.getElement(); - if (!this.hasTool(L.ExportAction)) { return; - } // make a new image - + } + // make a new image var downloadable = new Image(); downloadable.id = downloadable.id || 'tempId12345'; document.body.appendChild(downloadable); - downloadable.onload = function onLoadDownloadableImage() { var height = downloadable.height; var width = downloadable.width; var nw = map.latLngToLayerPoint(overlay.getCorner(0)); var ne = map.latLngToLayerPoint(overlay.getCorner(1)); var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); // I think this is to move the image to the upper left corner, + var se = map.latLngToLayerPoint(overlay.getCorner(3)); + + // I think this is to move the image to the upper left corner, // eslint-disable-next-line max-len // jywarren: i think we may need these or the image goes off the edge of the canvas // jywarren: but these seem to break the distortion math... + // jywarren: i think it should be rejiggered so it // finds the most negative values of x and y and then // adds those to all coordinates + // nw.x -= nw.x; // ne.x -= nw.x; // se.x -= nw.x; // sw.x -= nw.x; + // nw.y -= nw.y; // ne.y -= nw.y; // se.y -= nw.y; // sw.y -= nw.y; - // run once warping is complete + // run once warping is complete downloadable.onload = function () { L.DomUtil.remove(downloadable); }; - if (window && window.hasOwnProperty('warpWebGl')) { warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download ); @@ -2155,87 +1959,65 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _stackUp: function _stackUp() { var t = this._toggledImage; - if (!t || !this.hasTool(L.StackAction)) { return; } - this._toggledImage = false; - this._overlay.bringToFront(); - this._refresh(); }, _stackDown: function _stackDown() { var t = this._toggledImage; - if (t || !this.hasTool(L.StackAction)) { return; } - this._toggledImage = true; - this._overlay.bringToBack(); - this._refresh(); }, _unlock: function _unlock() { var ov = this._overlay; var map = ov._map; var eP = this.parentGroup; - if (!this.isMode('lock')) { return; } - if (eP && !eP.isCollected(ov) || !eP) { if (!this.hasTool(L.LockAction)) { return; } } - if (this.currentHandle) { map.removeLayer(this.currentHandle); } - if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { this._mode = ''; this.currentHandle = ''; } else { this._mode = ov.options.mode; } - this._updateHandle(); - this._enableDragging(); - this._refresh(); }, _lock: function _lock() { var ov = this._overlay; var map = ov._map; var eP = this.parentGroup; - if (this.isMode('lock')) { return; } - if (eP && !eP.isCollected(ov) || !eP) { if (!this.hasTool(L.LockAction)) { return; } } - if (this.currentHandle) { map.removeLayer(this.currentHandle); } - this._mode = 'lock'; - this._updateHandle(); - this._disableDragging(); - this._refresh(); }, _deselect: function _deselect() { @@ -2243,49 +2025,40 @@ L.DistortableImage.Edit = L.Handler.extend({ }, _showMarkers: function _showMarkers(e) { var eP = this.parentGroup; - if (!this.currentHandle) { return; - } // only markers we want in collect interface for now is lock - - + } + // only markers we want in collect interface for now is lock if (!this.isMode('lock') && eP && eP.anyCollected()) { return; } - this.currentHandle.eachLayer(function (handle) { handle.setOpacity(1); - if (handle.dragging) { handle.dragging.enable(); } - L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); }); }, _hideMarkers: function _hideMarkers() { var ov = this._overlay; - var eP = this.parentGroup; // workaround for race condition w/ feature group + var eP = this.parentGroup; + // workaround for race condition w/ feature group if (!this._handles) { this._initHandles(); } - if (!this.currentHandle) { return; } - if (this.isMode('lock') && eP && eP.isCollected(ov)) { return; } - this.currentHandle.eachLayer(function (handle) { handle.setOpacity(0); - if (handle.dragging) { handle.dragging.disable(); } - L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); }); }, @@ -2293,13 +2066,10 @@ L.DistortableImage.Edit = L.Handler.extend({ var ov = this._overlay; var map = ov._map; var mode = this.getMode(); - if (this.currentHandle) { map.removeLayer(this.currentHandle); } - this.currentHandle = mode === '' ? '' : this._handles[mode]; - if (this.currentHandle !== '') { map.addLayer(this.currentHandle); } @@ -2307,28 +2077,24 @@ L.DistortableImage.Edit = L.Handler.extend({ _addToolbar: function _addToolbar() { var ov = this._overlay; var eP = this.parentGroup; - var map = ov._map; // Find the topmost point on the image. - + var map = ov._map; + // Find the topmost point on the image. var corners = ov.getCorners(); var maxLat = -Infinity; - if (eP && eP.anyCollected()) { eP.editing._addToolbar(); - return; } - if (ov.options.suppressToolbar || this.toolbar) { return; } - for (var i = 0; i < corners.length; i++) { if (corners[i].lat > maxLat) { maxLat = corners[i].lat; } - } // Longitude is based on the centroid of the image. - + } + // Longitude is based on the centroid of the image. var raisedPoint = ov.getCenter(); raisedPoint.lat = maxLat; this.toolbar = L.distortableImage.popupBar(raisedPoint, { @@ -2340,27 +2106,24 @@ L.DistortableImage.Edit = L.Handler.extend({ if (this.toolbar) { this._removeToolbar(); } - this._addToolbar(); }, _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; // Find the topmost point on the image. - + var overlay = this._overlay; + // Find the topmost point on the image. var corners = overlay.getCorners(); var toolbar = this.toolbar; var maxLat = -Infinity; - if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { for (var i = 0; i < corners.length; i++) { if (corners[i].lat > maxLat) { maxLat = corners[i].lat; } - } // Longitude is based on the centroid of the image. - + } + // Longitude is based on the centroid of the image. var raisedPoint = overlay.getCenter(); raisedPoint.lat = maxLat; - if (!overlay.options.suppressToolbar) { this.toolbar.setLatLng(raisedPoint); } @@ -2373,7 +2136,6 @@ L.DistortableImage.Edit = L.Handler.extend({ if (!this.enabled()) { return; } - return this._mode; }, getModes: function getModes() { @@ -2383,43 +2145,32 @@ L.DistortableImage.Edit = L.Handler.extend({ if (!this.enabled()) { return false; } - return this._mode === mode; }, setMode: function setMode(newMode) { var ov = this._overlay; var eP = this.parentGroup; var mode = this.getMode(); - if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { return; } - if (this.toolbar) { this.toolbar.clickTool(newMode); } - if (this.isMode('lock') && !this.dragging) { this._enableDragging(); } - this._mode = newMode; - if (this.isMode('lock')) { this._disableDragging(); } - this._updateHandle(); - this._refresh(); - if (eP && eP.isCollected(ov)) { ov.deselect(); } - return this; }, - /** * need to attach a stop to img dblclick or it will propagate to * the map and fire the handler that shows map location labels on map dblclick. @@ -2431,19 +2182,15 @@ L.DistortableImage.Edit = L.Handler.extend({ var idx = modesArray.indexOf(mode); var nextIdx = (idx + 1) % modesArray.length; var newMode = modesArray[nextIdx]; - if (e) { if (eP && eP.anyCollected()) { return; } - L.DomEvent.stop(e); } - return this.setMode(newMode); } }); - L.distortableImage.edit = function (overlay, options) { return new L.DistortableImage.Edit(overlay, options); }; @@ -2462,7 +2209,6 @@ L.BorderAction = L.EditAction.extend({ var mode = edit._mode; var use; var tooltip; - if (edit._outlined) { use = 'border_outer'; tooltip = overlay.options.translation.removeBorder; @@ -2470,15 +2216,15 @@ L.BorderAction = L.EditAction.extend({ use = 'border_clear'; tooltip = overlay.options.translation.addBorder; } - options = options || {}; options.toolbarIcon = { svg: true, html: use, tooltip: tooltip, className: mode === 'lock' ? 'disabled' : '' - }; // conditional for disabling keybindings for this action when the image is locked. + }; + // conditional for disabling keybindings for this action when the image is locked. L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; L.EditAction.prototype.initialize.call(this, map, overlay, options); }, @@ -2486,7 +2232,6 @@ L.BorderAction = L.EditAction.extend({ var edit = this._overlay.editing; L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); - edit._toggleBorder(); } }); @@ -2508,16 +2253,14 @@ L.DeleteAction = L.EditAction.extend({ * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. */ - if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; // backspace windows / delete mac - + tooltip = overlay.options.translation.deleteImage; + // backspace windows / delete mac L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; } else { tooltip = overlay.options.translation.deleteImages; L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; } - options = options || {}; options.toolbarIcon = { svg: true, @@ -2529,7 +2272,6 @@ L.DeleteAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); } else { @@ -2560,7 +2302,6 @@ L.DistortAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - edit._distortMode(); } }); @@ -2587,7 +2328,6 @@ L.DragAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - edit._dragMode(); } }); @@ -2617,12 +2357,10 @@ L.EditAction = L.Toolbar2.Action.extend({ this._map = map; L.setOptions(this, options); L.Toolbar2.Action.prototype.initialize.call(this, options); - this._injectIconSet(); }, _createIcon: function _createIcon(toolbar, container, args) { var _this = this; - var iconOptions = this.options.toolbarIcon; var className = iconOptions.className; var edit = this._overlay.editing; @@ -2630,58 +2368,45 @@ L.EditAction = L.Toolbar2.Action.extend({ this.toolbar = toolbar; this._icon = L.DomUtil.create('li', '', container); this._link = L.DomUtil.create('a', '', this._icon); - if (iconOptions.svg) { this._link.innerHTML = L.IconUtil.create(iconOptions.html); } else { this._link.innerHTML = iconOptions.html; } - this._link.setAttribute('href', '#'); - this._link.setAttribute('title', iconOptions.tooltip); - if (style) { this._link.setAttribute('style', style); } - ; - this._link.setAttribute('role', 'button'); - L.DomUtil.addClass(this._link, this.constructor.baseClass); - if (className) { L.DomUtil.addClass(this._link, className); - if (className === 'disabled') { L.DomUtil.addClass(this._icon, className); } - if (className === edit._mode) { L.DomUtil.addClass(this._link, 'selected-mode'); } else { L.DomUtil.removeClass(this._link, 'selected-mode'); } } - L.DomEvent.on(this._link, 'click', this.enable, this); L.DomEvent.on(this._overlay, 'update', function () { var match = _this._link.innerHTML.match(/xlink:href="#restore"/); - if (match && match.length === 1) { _this._enableAction(); } }); - /* Add secondary toolbar */ + /* Add secondary toolbar */ this._addSubToolbar(toolbar, this._icon, args); }, _injectIconSet: function _injectIconSet() { if (document.querySelector('#iconset')) { return; } - var el = document.createElement('div'); el.id = 'iconset'; el.setAttribute('hidden', 'hidden'); @@ -2697,7 +2422,6 @@ L.EditAction = L.Toolbar2.Action.extend({ L.DomUtil.addClass(this._link, 'disabled'); } }); - L.editAction = function (map, overlay, options) { return new L.EditAction(map, overlay, options); }; @@ -2718,7 +2442,6 @@ L.ExportAction = L.EditAction.extend({ this.isExporting = false; this.mouseLeaveSkip = true; this.isHooksExecuted = false; - if (edit instanceof L.DistortableImage.Edit) { L.DistortableImage.action_map.e = '_getExport'; tooltip = overlay.options.translation.exportImage; @@ -2726,7 +2449,6 @@ L.ExportAction = L.EditAction.extend({ L.DistortableImage.group_action_map.e = 'runExporter'; tooltip = overlay.options.translation.exportImages; } - options = options || {}; options.toolbarIcon = { svg: true, @@ -2737,20 +2459,17 @@ L.ExportAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - if (edit instanceof L.DistortableImage.Edit) { edit._getExport(); - return; - } // Make sure that addHooks is executed only once, event listeners will handle the rest - + } + // Make sure that addHooks is executed only once, event listeners will handle the rest if (this.isHooksExecuted) { return; } else { this.isHooksExecuted = true; } - var exportTool = this._link.parentElement; this.mouseEnterHandler = this.handleMouseEnter.bind(this); this.mouseLeaveHandler = this.handleMouseLeave.bind(this); @@ -2768,7 +2487,6 @@ L.ExportAction = L.EditAction.extend({ if (this.mouseLeaveSkip) { return; } - this.resetState(); this.detachMouseEventListeners(exportTool); edit.cancelExport(); @@ -2837,7 +2555,6 @@ L.FreeRotateAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - edit._freeRotateMode(); } }); @@ -2864,7 +2581,6 @@ L.GeolocateAction = L.EditAction.extend({ }, addHooks: function addHooks() { var image = this._overlay.getElement(); - EXIF.getData(image, L.EXIF(image)); } }); @@ -2882,7 +2598,6 @@ L.LockAction = L.EditAction.extend({ var edit = overlay.editing; var use; var tooltip; - if (edit instanceof L.DistortableImage.Edit) { L.DistortableImage.action_map.u = '_unlock'; L.DistortableImage.action_map.l = '_lock'; @@ -2893,7 +2608,6 @@ L.LockAction = L.EditAction.extend({ tooltip = overlay.options.translation.lockImages; use = 'lock'; } - options = options || {}; options.toolbarIcon = { svg: true, @@ -2905,7 +2619,6 @@ L.LockAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); } else { @@ -2923,8 +2636,8 @@ L.LockAction = L.EditAction.extend({ /***/ (function() { var opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. -// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. +// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. var subtoolbarCss = new CSSStyleSheet(); subtoolbarCss.replaceSync(".leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n "); subtoolbarCss.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"); @@ -2957,7 +2670,6 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ }, appendToContainer: function appendToContainer(container) { var baseClass = this.constructor.baseClass + '-' + this._calculateDepth(); - var className = baseClass + ' ' + this.options.className; var Action; var action; @@ -2967,25 +2679,23 @@ L.OpacitiesToolbar2 = L.Toolbar2.extend({ var m; this._container = container; this._ul = L.DomUtil.create('ul', className, container); - this._ul.style.transform = this.options.style ? this.options.style : ''; // Ensure that clicks, drags, etc. don't bubble up to the map. + this._ul.style.transform = this.options.style ? this.options.style : ''; + + // Ensure that clicks, drags, etc. don't bubble up to the map. // These are the map events that the L.Draw.Polyline handler listens for. // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but // if only 'mouseup' is silenced, then the map gets stuck in a halfway // state because it receives a 'mousedown' event and is waiting for the // corresponding 'mouseup' event. - this._disabledEvents = ['click', 'mousemove', 'dblclick', 'mousedown', 'mouseup', 'touchstart']; - for (j = 0, m = this._disabledEvents.length; j < m; j++) { L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation); } - /* Instantiate each toolbar action and add its corresponding toolbar icon. */ - + /* Instantiate each toolbar action and add its corresponding toolbar icon. */ for (i = 0, l = this.options.actions.length; i < l; i++) { Action = this._getActionConstructor(this.options.actions[i]); action = new Action(); - action._createIcon(this, this._ul, this._arguments); } } @@ -3009,9 +2719,7 @@ L.OpacitiesAction = L.EditAction.extend({ }, addHooks: function addHooks() { var _this = this; - var link = this._link; - if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) { L.DomUtil.removeClass(link, 'subtoolbar_enabled'); setTimeout(function () { @@ -3020,7 +2728,6 @@ L.OpacitiesAction = L.EditAction.extend({ } else { L.DomUtil.addClass(link, 'subtoolbar_enabled'); } - ; L.IconUtil.toggleXlink(link, 'opacities', 'cancel'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel'); @@ -3041,7 +2748,6 @@ L.OpacityAction = L.EditAction.extend({ var mode = edit._mode; var use; var tooltip; - if (edit._transparent) { use = 'opacity_empty'; tooltip = overlay.options.translation.makeImageOpaque; @@ -3049,7 +2755,6 @@ L.OpacityAction = L.EditAction.extend({ use = 'opacity'; tooltip = overlay.options.translation.makeImageTransparent; } - options = options || {}; options.toolbarIcon = { svg: true, @@ -3065,7 +2770,6 @@ L.OpacityAction = L.EditAction.extend({ var link = this._link; L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - edit._toggleOpacity(); } }); @@ -3123,7 +2827,6 @@ L.RotateAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - edit._rotateMode(); } }); @@ -3150,7 +2853,6 @@ L.ScaleAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - edit._scaleMode(); } }); @@ -3168,7 +2870,6 @@ L.StackAction = L.EditAction.extend({ var edit = overlay.editing; var use; var tooltip; - if (edit._toggledImage) { use = 'flip_to_back'; tooltip = overlay.options.translation.stackToFront; @@ -3176,7 +2877,6 @@ L.StackAction = L.EditAction.extend({ use = 'flip_to_front'; tooltip = overlay.options.translation.stackToBack; } - options = options || {}; options.toolbarIcon = { svg: true, @@ -3192,7 +2892,6 @@ L.StackAction = L.EditAction.extend({ var edit = this._overlay.editing; L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); - edit._toggleOrder(); } }); @@ -3218,7 +2917,6 @@ L.UnlockAction = L.EditAction.extend({ }, addHooks: function addHooks() { var edit = this._overlay.editing; - edit._unlockGroup(); } }); @@ -3237,38 +2935,37 @@ L.EXIF = function getEXIFdata(img) { console.log(EXIF.getAllTags(img)); var GPS = EXIF.getAllTags(img); var altitude; - /* If the lat/lng is available. */ + /* If the lat/lng is available. */ if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { // sadly, encoded in [degrees,minutes,seconds] // primitive value = GPS.GPSLatitude[x].numerator var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; - if (GPS.GPSLatitudeRef !== 'N') { lat = lat * -1; } - if (GPS.GPSLongitudeRef === 'W') { lng = lng * -1; } - } // Attempt to use GPS compass heading; will require - // some trig to calc corner points, which you can find below: - + } - var angle = 0; // "T" refers to "True north", so -90. + // Attempt to use GPS compass heading; will require + // some trig to calc corner points, which you can find below: + var angle = 0; + // "T" refers to "True north", so -90. if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); // "M" refers to "Magnetic north" + angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); + // "M" refers to "Magnetic north" } else if (GPS.GPSImgDirectionRef === 'M') { angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); } else { console.log('No compass data found'); } - console.log('Orientation:', GPS.Orientation); - /* If there is orientation data -- i.e. landscape/portrait etc */ + /* If there is orientation data -- i.e. landscape/portrait etc */ if (GPS.Orientation === 6) { // CCW angle += Math.PI / 180 * -90; @@ -3279,9 +2976,8 @@ L.EXIF = function getEXIFdata(img) { // 180 angle += Math.PI / 180 * 180; } - /* If there is altitude data */ - + /* If there is altitude data */ if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { // Attempt to use GPS altitude: // (may eventually need to find EXIF field of view for correction) @@ -3308,7 +3004,8 @@ L.DistortHandle = L.EditHandle.extend({ options: { TYPE: 'distort', icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len + iconUrl: + // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3322,7 +3019,6 @@ L.DistortHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); - L.distortHandle = function (overlay, idx, options) { return new L.DistortHandle(overlay, idx, options); }; @@ -3355,7 +3051,6 @@ L.DragHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); - L.dragHandle = function (overlay, idx, options) { return new L.DragHandle(overlay, idx, options); }; @@ -3378,23 +3073,18 @@ L.EditHandle = L.Marker.extend({ draggable: true, zIndexOffset: 10 }; - if (options && options.hasOwnProperty('draggable')) { markerOptions.draggable = options.draggable; } - L.Marker.prototype.initialize.call(this, latlng, markerOptions); }, onAdd: function onAdd(map) { L.Marker.prototype.onAdd.call(this, map); - this._bindListeners(); - this.updateHandle(); }, onRemove: function onRemove(map) { this._unbindListeners(); - L.Marker.prototype.onRemove.call(this, map); }, _onHandleDragStart: function _onHandleDragStart() { @@ -3405,7 +3095,6 @@ L.EditHandle = L.Marker.extend({ }, _fireEdit: function _fireEdit() { this._handled.edited = true; - this._handled.fire('edit'); }, _bindListeners: function _bindListeners() { @@ -3415,9 +3104,7 @@ L.EditHandle = L.Marker.extend({ drag: this._onHandleDrag, dragend: this._onHandleDragEnd }, this); - this._handled._map.on('zoomend', this.updateHandle, this); - this._handled.on('update', this.updateHandle, this); }, _unbindListeners: function _unbindListeners() { @@ -3427,36 +3114,25 @@ L.EditHandle = L.Marker.extend({ drag: this._onHandleDrag, dragend: this._onHandleDragEnd }, this); - this._handled._map.off('zoomend', this.updateHandle, this); - this._handled.off('update', this.updateHandle, this); }, - - /* Takes two latlngs and calculates the scaling difference. */ - _calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { + /* Takes two latlngs and calculates the scaling difference. */_calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { var overlay = this._handled; var map = overlay._map; var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); var formerPoint = map.latLngToLayerPoint(latlngA); var newPoint = map.latLngToLayerPoint(latlngB); - var formerRadiusSquared = this._d2(centerPoint, formerPoint); - var newRadiusSquared = this._d2(centerPoint, newPoint); - return Math.sqrt(newRadiusSquared / formerRadiusSquared); }, - - /* Distance between two points in cartesian space, squared (distance formula). */ - _d2: function _d2(a, b) { + /* Distance between two points in cartesian space, squared (distance formula). */_d2: function _d2(a, b) { var dx = a.x - b.x; var dy = a.y - b.y; return Math.pow(dx, 2) + Math.pow(dy, 2); }, - - /* Takes two latlngs and calculates the angle between them. */ - calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { + /* Takes two latlngs and calculates the angle between them. */calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { var overlay = this._handled; var map = overlay._map; var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); @@ -3480,7 +3156,8 @@ L.FreeRotateHandle = L.EditHandle.extend({ options: { TYPE: 'freeRotate', icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len + iconUrl: + // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3492,27 +3169,20 @@ L.FreeRotateHandle = L.EditHandle.extend({ var formerLatLng = overlay.getCorner(this._corner); var newLatLng = this.getLatLng(); var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - if (angle !== 0) { overlay.rotateBy(angle, 'rad'); } - var edgeMinWidth = overlay.edgeMinWidth; - if (!edgeMinWidth) { edgeMinWidth = 50; - } - /* just in case */ - + } /* just in case */ var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); var w = Math.abs(corner1.x - corner2.x); var h = Math.abs(corner1.y - corner2.y); var distance = Math.sqrt(w * w + h * h); - if (distance > edgeMinWidth || scale > 1) { overlay.scaleBy(scale); } else { @@ -3523,7 +3193,6 @@ L.FreeRotateHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); - L.freeRotateHandle = function (overlay, idx, options) { return new L.FreeRotateHandle(overlay, idx, options); }; @@ -3553,9 +3222,7 @@ L.LockHandle = L.EditHandle.extend({ }, _bindListeners: function _bindListeners() { var icon = this.getElement(); - L.EditHandle.prototype._bindListeners.call(this); - L.DomEvent.on(icon, { mousedown: this._tooltipOn, mouseup: this._tooltipOff @@ -3564,39 +3231,31 @@ L.LockHandle = L.EditHandle.extend({ }, _unbindListeners: function _unbindListeners() { var icon = this.getElement(); - L.EditHandle.prototype._bindListeners.call(this); - L.DomEvent.off(icon, { mousedown: this._tooltipOn, mouseup: this._tooltipOff }, this); L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); }, - - /* cannot be dragged */ - _onHandleDrag: function _onHandleDrag() {}, + /* cannot be dragged */_onHandleDrag: function _onHandleDrag() {}, updateHandle: function updateHandle() { this.setLatLng(this._handled.getCorner(this._corner)); }, _tooltipOn: function _tooltipOn(e) { var eP = this._handled.parentGroup; var edit = eP ? eP.editing : this._handled.editing; - if (e.shiftKey) { return; } - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { return; } - var handlesArr = edit._lockHandles; this._timer = setTimeout(L.bind(function () { if (this._timeout) { clearTimeout(this._timeout); } - if (!this.getTooltip()) { this.bindTooltip('Locked!', { permanent: true @@ -3608,40 +3267,32 @@ L.LockHandle = L.EditHandle.extend({ } }); } - this.openTooltip(); }, this), 500); }, _tooltipOff: function _tooltipOff(e) { var eP = this._handled.parentGroup; var edit = eP ? eP.editing : this._handled.editing; - if (e.shiftKey) { return; } - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { return; } - var handlesArr = edit._lockHandles; - if (e.currentTarget === document) { handlesArr.eachLayer(function (handle) { handle.closeTooltip(); }); } - if (this._timer) { clearTimeout(this._timer); } - this._timeout = setTimeout(L.bind(function () { this.closeTooltip(); }, this), 400); } }); - L.lockHandle = function (overlay, idx, options) { return new L.LockHandle(overlay, idx, options); }; @@ -3658,7 +3309,8 @@ L.RotateHandle = L.EditHandle.extend({ options: { TYPE: 'rotate', icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len + iconUrl: + // eslint-disable-next-line max-len 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3669,18 +3321,17 @@ L.RotateHandle = L.EditHandle.extend({ var formerLatLng = overlay.getCorner(this._corner); var newLatLng = this.getLatLng(); var angle = this.calculateAngleDelta(formerLatLng, newLatLng); + /* * running rotation logic even for an angle delta of 0 * prevents a small, occasional marker flicker */ - overlay.rotateBy(angle, 'rad'); }, updateHandle: function updateHandle() { this.setLatLng(this._handled.getCorner(this._corner)); } }); - L.rotateHandle = function (overlay, idx, options) { return new L.RotateHandle(overlay, idx, options); }; @@ -3697,7 +3348,8 @@ L.ScaleHandle = L.EditHandle.extend({ options: { TYPE: 'scale', icon: L.icon({ - iconUrl: // eslint-disable-next-line max-len + iconUrl: + // eslint-disable-next-line max-len 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', iconSize: [32, 32], iconAnchor: [16, 16] @@ -3709,26 +3361,21 @@ L.ScaleHandle = L.EditHandle.extend({ var edgeMinWidth = overlay.edgeMinWidth; var formerLatLng = overlay.getCorner(this._corner); var newLatLng = this.getLatLng(); - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); + /* * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; * this enables preventing scaling to zero, but we might also add an overall scale limit */ - if (!edgeMinWidth) { edgeMinWidth = 50; - } - /* just in case */ - - + } /* just in case */ var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); var w = Math.abs(corner1.x - corner2.x); var h = Math.abs(corner1.y - corner2.y); var distance = Math.sqrt(w * w + h * h); - if (distance > edgeMinWidth || scale > 1) { overlay.scaleBy(scale); /* @@ -3743,7 +3390,6 @@ L.ScaleHandle = L.EditHandle.extend({ this.setLatLng(this._handled.getCorner(this._corner)); } }); - L.scaleHandle = function (overlay, idx, options) { return new L.ScaleHandle(overlay, idx, options); }; @@ -3760,17 +3406,16 @@ L.distortableImage = L.DistortableImage || {}; L.distortableImage = L.DistortableImage; L.DistortableImage.group_action_map = {}; L.DistortableImage.ControlBar = L.Toolbar2.Control.extend({}); - L.distortableImage.controlBar = function (options) { return new L.DistortableImage.ControlBar(options); }; -/** addInitHooks run before onAdd */ - +/** addInitHooks run before onAdd */ L.DistortableCollection.addInitHook(function () { /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; // all possible modes + this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; + // all possible modes L.DistortableCollection.Edit.MODES = { lock: L.LockAction, unlock: L.UnlockAction @@ -3811,28 +3456,24 @@ L.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({ }, clickTool: function clickTool(name) { var tools = this.tools(); - for (var i = 0; i < tools.length; i++) { var tool = tools.item(i).children[0]; - if (L.DomUtil.hasClass(tool, name)) { tool.click(); return tool; } } - return false; } }); - L.distortableImage.popupBar = function (latlng, options) { return new L.DistortableImage.PopupBar(latlng, options); }; - L.DistortableImageOverlay.addInitHook(function () { /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction]; // all possible modes + this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction]; + // all possible modes L.DistortableImage.Edit.MODES = { drag: L.DragAction, scale: L.ScaleAction, @@ -3878,7 +3519,8 @@ L.IconSet = L.Class.extend({ /***/ (function() { L.KeymapperIconSet = L.IconSet.extend({ - _symbols: // eslint-disable-next-line max-len + _symbols: + // eslint-disable-next-line max-len '' }); @@ -3907,11 +3549,11 @@ L.Map.mergeOptions({ boxCollector: true, boxZoom: false }); + /** * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with * our `L.DistortableCollection` class instead of a zoom box. * */ - L.Map.BoxCollector = L.Map.BoxZoom.extend({ initialize: function initialize(map) { this._map = map; @@ -3946,14 +3588,12 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ _onMouseDown: function _onMouseDown(e) { if (!e.shiftKey || e.which !== 1 && e.button !== 1) { return false; - } // Clear the deferred resetState if it hasn't executed yet, otherwise it - // will interrupt the interaction and orphan a box element in the container. - + } + // Clear the deferred resetState if it hasn't executed yet, otherwise it + // will interrupt the interaction and orphan a box element in the container. this._clearDeferredResetState(); - this._resetState(); - L.DomUtil.disableTextSelection(); L.DomUtil.disableImageDrag(); this._startPoint = this._map.mouseEventToContainerPoint(e); @@ -3968,15 +3608,11 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ this._moved = true; this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container); L.DomUtil.addClass(this._container, 'leaflet-crosshair'); - this._map.fire('boxzoomstart'); } - this._point = this._map.mouseEventToContainerPoint(e); this._bounds = L.bounds(this._startPoint, this._point); - var size = this._bounds.getSize(); - L.DomUtil.setPosition(this._box, this._bounds.min); this._box.style.width = size.x + 'px'; this._box.style.height = size.y + 'px'; @@ -3986,7 +3622,6 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ L.DomUtil.remove(this._box); L.DomUtil.removeClass(this._container, 'leaflet-crosshair'); } - L.DomUtil.enableTextSelection(); L.DomUtil.enableImageDrag(); L.DomEvent.off(document, { @@ -3999,27 +3634,21 @@ L.Map.BoxCollector = L.Map.BoxZoom.extend({ if (e.which !== 1 && e.button !== 1) { return; } - this._finish(); - if (!this._moved) { return; - } // Postpone to next JS tick so internal click event handling - // still see it as "moved". - + } + // Postpone to next JS tick so internal click event handling + // still see it as "moved". this._clearDeferredResetState(); - this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); - var zoom = this._map.getZoom(); + var center = this._map.getCenter(); - var center = this._map.getCenter(); // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 - - + // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); - this._map.fire('boxcollectend', { boxCollectBounds: bounds }); @@ -4038,26 +3667,23 @@ L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); L.Map.mergeOptions({ doubleClickLabels: true }); + /** * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. */ - L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ enable: function enable() { var map = this._map; - if (this._enabled) { return this; - } // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. - + } + // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. if (map.doubleClickZoom.enabled()) { map.doubleClickZoom.disable(); } - this._map.fire('singleclickon'); - this._enabled = true; this.addHooks(); return this; @@ -4066,19 +3692,18 @@ L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ if (!this._enabled) { return this; } - this._enabled = false; this.removeHooks(); return this; }, _fireIfSingle: function _fireIfSingle(e) { var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector + var oe = e.originalEvent; + // prevents deselection in case of box selector if (oe && oe.shiftKey) { return; } - map._clicked += 1; this._map._clickTimeout = setTimeout(function () { if (map._clicked === 1) { @@ -4101,11 +3726,9 @@ L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ map._clicked = 0; clearTimeout(map._clickTimeout); }, 0); - if (!labels) { return; } - if (labels.options.opacity === 1) { labels.options.opacity = 0; labels.setOpacity(0); @@ -4146,18 +3769,17 @@ L.Map.DoubleClickZoom.include({ enable: function enable() { if (this._enabled) { return this; - } // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first - + } + // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first if (this._map.doubleClickLabels) { if (this._map.doubleClickLabels.enabled()) { return this; } - } // signify to collection/instance classes to turn on 'singleclick' listeners - + } + // signify to collection/instance classes to turn on 'singleclick' listeners this._map.fire('singleclickon'); - this._enabled = true; this.addHooks(); return this; @@ -4165,23 +3787,22 @@ L.Map.DoubleClickZoom.include({ disable: function disable() { if (!this._enabled) { return this; - } // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. - + } + // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. this._map.fire('singleclickoff'); - this._enabled = false; this.removeHooks(); return this; }, _fireIfSingle: function _fireIfSingle(e) { var map = this._map; - var oe = e.originalEvent; // prevents deselection in case of box selector + var oe = e.originalEvent; + // prevents deselection in case of box selector if (oe && oe.shiftKey) { return; } - map._clicked += 1; this._map._clickTimeout = setTimeout(function () { if (map._clicked === 1) { @@ -4207,15 +3828,12 @@ L.Map.DoubleClickZoom.include({ map._clicked = 0; clearTimeout(map._clickTimeout); }, 0); - if (!oe) { return false; } - var oldZoom = map.getZoom(); var delta = map.options.zoomDelta; var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; - if (map.options.doubleClickZoom === 'center') { map.setZoom(zoom); } else { @@ -4246,37 +3864,32 @@ L.Map.include({ labelOpacity: 1, doubleClickLabels: true }, opts); - if (!opts.labels) { this.mutantOptions = L.extend(this.mutantOptions, { labelOpacity: opts.labels ? 1 : undefined, doubleClickLabels: opts.labels ? true : undefined }); } - this._googleMutant = L.tileLayer(url, { maxZoom: opts.maxZoom, maxNativeZoom: opts.maxNativeZoom, minZoom: opts.minZoom, opacity: opts.mutantOpacity }).addTo(this); - if (opts.labels) { this._addLabels(opts); - } // shouldn't have this handler at all if there are no labels to toggle + } + // shouldn't have this handler at all if there are no labels to toggle else { this.doubleClickLabels = undefined; } - return this; }, _addLabels: function _addLabels(opts) { var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; - if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { opts.labelOpacity = 1; } - this._labels = L.tileLayer(url, { attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', subdomains: 'abcd', @@ -4287,16 +3900,14 @@ L.Map.include({ minZoom: opts.minZoom, ext: 'png' }).addTo(this); - if (this.mutantOptions.doubleClickLabels) { this.doubleClickLabels.enable(); } - return this; } -}); // start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead +}); +// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead // during initialization - L.Map.addInitHook(function () { this.doubleClickLabels.disable(); this.doubleClickZoom.enable(); @@ -4316,6 +3927,7 @@ L.DomUtil = L.extend(L.DomUtil, { }, getMatrixString: function getMatrixString(m) { var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; + /* * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, * which act as the identity on the z-axis. @@ -4323,14 +3935,11 @@ L.DomUtil = L.extend(L.DomUtil, { * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry */ - var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; - if (!is3d) { console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); } - return str; }, toggleClass: function toggleClass(el, className) { @@ -4344,16 +3953,13 @@ L.DomUtil = L.extend(L.DomUtil, { if (n === 1) { return this.confirmDelete(); } - var translation = this.translation.confirmImagesDeletes; var warningMsg = ''; - if (typeof translation === 'function') { warningMsg = translation(n); } else { warningMsg = translation; } - return window.confirm(warningMsg); } }); @@ -4376,12 +3982,10 @@ L.IconUtil = { if (/^#/.test(ref)) { ref = ref.replace(/^#/, ''); } - return '' + '' + ''; }, addClassToSvg: function addClassToSvg(container, loader) { var svg = container.querySelector('svg'); - if (svg) { L.DomUtil.addClass(svg, loader); } @@ -4391,29 +3995,23 @@ L.IconUtil = { if (!/^#/.test(ref1)) { ref1 = '#' + ref1; } - if (!/^#/.test(ref2)) { ref2 = '#' + ref2; } - var use = container.querySelector('use'); - if (use) { var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; use.setAttribute('xlink:href', toggled); return toggled; } - return false; }, toggleTitle: function toggleTitle(container, title1, title2) { var toggled = container.getAttribute('title') === title1 ? title2 : title1; container.setAttribute('title', toggled); - if (container.hasAttribute('aria-label')) { container.setAttribute('aria-label', toggled); } - return toggled; } }; @@ -4451,19 +4049,15 @@ L.MatrixUtil = { multmm: function multmm(a, b) { var c = []; var i; - for (i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) { var cij = 0; - for (var k = 0; k < 3; k++) { cij += a[3 * i + k] * b[3 * k + j]; } - c[3 * i + j] = cij; } } - return c; }, // multiply a 3*3 matrix and a 3-vector @@ -4473,11 +4067,9 @@ L.MatrixUtil = { // multiply a scalar and a 3*3 matrix multsm: function multsm(s, m) { var matrix = []; - for (var i = 0, l = m.length; i < l; i++) { matrix.push(s * m[i]); } - return matrix; }, basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { @@ -4492,7 +4084,9 @@ L.MatrixUtil = { general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); // Normalize to the unique matrix with m[8] == 1. + var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); + + // Normalize to the unique matrix with m[8] == 1. // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ return L.MatrixUtil.multsm(1 / m[8], m); @@ -4554,7 +4148,6 @@ L.Utils = { confirmImageDelete: 'Are you sure? This image will be permanently deleted from the map.', confirmImagesDeletes: 'Are you sure? These images will be permanently deleted from the map.' }; - if (!this.options.translation) { this.options.translation = translation; } else { @@ -4565,7 +4158,6 @@ L.Utils = { } } } - L.DomUtil.initTranslation(this.options.translation); }, getNestedVal: function getNestedVal(obj, key, nestedKey) { @@ -7551,7 +7143,7 @@ module.exports.formatError = function (err) { /******/ /******/ /* webpack/runtime/getFullHash */ /******/ !function() { -/******/ __webpack_require__.h = function() { return "b664115763eb65292f36"; } +/******/ __webpack_require__.h = function() { return "238194f0dba6630d80eb"; } /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map index 828169f3d..c1010ff10 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet.distortableimage.js","mappings":";;;;;;;;;;AAAY;;AAEZ;;AAEA;AACA,mDAAmD,IAAI,SAAS,MAAM,IAAI;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB,GAAG;AACH;AACA,uBAAuB;AACvB,GAAG;AACH,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,UAAU,+BAA+B;AAChF;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;+CC9KA;;;;;;AADA,IAAMA,GAAG,GAAG,EAAZ;AACAC,CAAC,CAACC,qBAAF,GAA0BD,CAAC,CAACE,YAAF,CAAeC,MAAf,CAAsB;EAC9CC,OAAO,EAAE;IACPC,QAAQ,EAAE,IADH;IAEPC,UAAU,EAAE;MACVC,cAAc,EAAE,gCADN;MAEVC,SAAS,EAAE,yBAFD;MAGVC,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AcpjB,CAAd,EAAiB;MACjC,OAAOojB,GAAG,IAAIA,GAAG,CAACpjB,CAAD,CAAjB;IACD,CAFM,EAEJojB,GAFI,CAAP;EAGD;AAhDO,CAAV;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AChfa;AACb;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,mBAAO,CAAC,gFAAoB;AACrD,4BAA4B,mBAAO,CAAC,sFAAuB;AAC3D,wBAAwB,mBAAO,CAAC,8EAAmB;AACnD,6CAA6C,yCAAyC,+CAA+C;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,sDAAsD;AACtD,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB,8BAA8B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KACiC,EAAE,EAGtC;AACL,aAAa,KAC4B,EAAE,EAGtC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;;;;;;;;;;;ACrMD,8CAA2C,CAAC,WAAW,EAAC,CAAC,mBAAmB,EAAE,6CAA6C,qoBAAqoB,6pBAA6pB,KAAK,uBAAuB,EAAE,KAAK,UAAU,KAAK,WAAW,aAAa,aAAa,YAAY,MAAM,aAAa,SAAS,WAAW,aAAa,aAAa,YAAY,GAAG,QAAQ,UAAU,OAAO,yBAAyB,2BAA2B,yBAAyB,2BAA2B,6BAA6B,uBAAuB,6BAA6B,yBAAyB,uBAAuB,yBAAyB,yBAAyB,2BAA2B,uBAAuB,uBAAuB,uBAAuB,yBAAyB,uBAAuB,6BAA6B,yBAAyB,yBAAyB,2BAA2B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,2BAA2B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,uBAAuB,qBAAqB,qBAAqB,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,eAAe,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,iBAAiB,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa,cAAc,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,aAAa,cAAc,cAAc,cAAc,aAAa,cAAc,WAAW,aAAa,YAAY,cAAc,eAAe,cAAc,aAAa,cAAc,YAAY,YAAY,WAAW,YAAY,YAAY,YAAY,eAAe,YAAY,aAAa,cAAc,WAAW,cAAc,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,aAAa,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,YAAY,eAAe,cAAc,eAAe,cAAc,MAAM,aAAa,WAAW,aAAa,cAAc,aAAa,cAAc,eAAe,YAAY,eAAe,aAAa,YAAY,aAAa,aAAa,cAAc,YAAY,YAAY,YAAY,aAAa,YAAY,eAAe,aAAa,aAAa,cAAc,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,cAAc,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,eAAe,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,YAAY,WAAW,WAAW,cAAc,cAAc,eAAe,eAAe,a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AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,WAAW,mFAAmF,WAAW;AAC/K;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,UAAU;AACvB;;AAEA,CAAC;AACD;AACA,cAAc,sCAAsC;;AAEpD,0EAA0E,WAAW;AACrF,6EAA6E,WAAW;AACxF,wFAAwF,WAAW;;AAEnG;AACA;AACA,aAAa,qCAAqC;AAClD,aAAa,sDAAsD;AACnE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0EAA0E,aAAa;AACvF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mGAAmG,eAAe;AAClH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,gFAAgF,iBAAiB;AACjG;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,WAAW,mFAAmF,WAAW;AAC/K;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA,eAAe,gCAAmB;AAClC;AACA,cAAc,6DAA6D;;AAE3E,cAAc,yDAAyD;;AAEvE,cAAc,gCAAgC;;AAE9C,cAAc,2BAA2B;;AAEzC;AACA,aAAa,QAAQ;AACrB,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC;;AAEA;AACA,aAAa,QAAQ;AACrB,cAAc,yDAAyD;AACvE,cAAc,qBAAqB;AACnC,cAAc,eAAe;AAC7B;;AAEA;AACA,WAAW,iBAAiB;AAC5B,aAAa,gBAAgB;AAC7B;;;AAGA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,4CAA4C;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,aAAa,mBAAmB;AAChC;AACA,aAAa,QAAQ;;AAErB;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,aAAa;AAC1B,aAAa,OAAO;AACpB,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,gCAAmB;;AAEtC,eAAe,gCAAmB;AAClC;;AAEA,0BAA0B,gCAAmB;AAC7C,WAAW,mCAAmC;;;AAG9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,gBAAgB,gCAAmB,wBAAwB,gCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB,2BAA2B;AACzD,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAmB;AACnB,qBAAqB,gCAAmB;AACxC,+CAA+C;AAC/C,sBAAsB;AACtB,uFAAuF,gCAAmB;;AAE1G,CAAC;AACD;AACA;AACA,oGAAoG,aAAa;AACjH,UAAU;AACV;;;;;;;;;;;;;;;;;;;;;AC1zBA;AACA;AAC2C;AACJ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;;AAEjD;AACA,WAAW,mCAAmC;;AAE9C;AACA,WAAW,0CAA0C;;AAErD;AACA,WAAW,+BAA+B;;AAE1C;AACA,oEAAkB;AAClB;AACA,WAAW,eAAe;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA,KAAK;AACL;AACA,eAAe,mBAAmB;;AAElC;AACA;;AAEA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YA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;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3CA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB,6BAA6B;;AAE7B,uBAAuB;;AAEvB,0BAA0B;AAC1B;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;;;;;;UC1DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA,sBAAsB;UACtB,oDAAoD,uBAAuB;UAC3E;UACA;UACA,GAAG;UACH;UACA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WCxCA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;;;;;WCJA,wCAAwC;;;;;WCAxC,qCAAqC;;;;;WCArC,8CAA8C;;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA;;;;;WCzCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,2BAA2B;WAC3B,4BAA4B;WAC5B,2BAA2B;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA,iBAAiB,qCAAqC;WACtD;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,iBAAiB;WACrC;WACA;WACA;WACA,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA,QAAQ;WACR;WACA,MAAM;WACN,KAAK;WACL,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;;WAEA;WACA;;WAEA;;WAEA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;;WAEA;WACA;WACA,EAAE;;WAEF;WACA;;WAEA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,oBAAoB,oBAAoB;WACxC;WACA;WACA;WACA;WACA,EAAE;;WAEF;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA,IAAI;WACJ;;WAEA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;WACA;WACA;;;;;WCrYA;;;;;WCAA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB,2BAA2B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,kBAAkB,cAAc;WAChC;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,cAAc,MAAM;WACpB;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA,cAAc,aAAa;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,iBAAiB,4BAA4B;WAC7C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,uCAAuC;WACzD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,iCAAiC;WACpD;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,uCAAuC;WAC7D;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,sBAAsB;WAC5C;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,wCAAwC;WAC3D;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,IAAI;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,sCAAsC;WACtC;WACA;WACA,EAAE;WACF;;WAEA;;WAEA;;;;;UE9fA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA","sources":["webpack://leaflet-distortableimage/./node_modules/ansi-html-community/index.js","webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/./node_modules/events/events.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/index.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/named-references.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/numeric-unicode-map.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/surrogate-pairs.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/clients/WebSocketClient.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/modules/logger/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/overlay.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/socket.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/createSocketURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/log.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/parseURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/reloadApp.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/sendMessage.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/stripAnsi.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/dev-server.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/emitter.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log-apply-result.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log.js","webpack://leaflet-distortableimage/webpack/bootstrap","webpack://leaflet-distortableimage/webpack/runtime/compat get default export","webpack://leaflet-distortableimage/webpack/runtime/define property getters","webpack://leaflet-distortableimage/webpack/runtime/get javascript update chunk filename","webpack://leaflet-distortableimage/webpack/runtime/get update manifest filename","webpack://leaflet-distortableimage/webpack/runtime/getFullHash","webpack://leaflet-distortableimage/webpack/runtime/hasOwnProperty shorthand","webpack://leaflet-distortableimage/webpack/runtime/load script","webpack://leaflet-distortableimage/webpack/runtime/make namespace object","webpack://leaflet-distortableimage/webpack/runtime/hot module replacement","webpack://leaflet-distortableimage/webpack/runtime/publicPath","webpack://leaflet-distortableimage/webpack/runtime/jsonp chunk loading","webpack://leaflet-distortableimage/webpack/before-startup","webpack://leaflet-distortableimage/webpack/startup","webpack://leaflet-distortableimage/webpack/after-startup"],"sourcesContent":["'use strict'\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n","const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n tooltipText: layer.getTooltipText(),\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n interactive: true,\n tooltipText: '',\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n\n this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar named_references_1 = require(\"./named-references\");\nvar numeric_unicode_map_1 = require(\"./numeric-unicode-map\");\nvar surrogate_pairs_1 = require(\"./surrogate-pairs\");\nvar allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 });\nvar encodeRegExps = {\n specialChars: /[<>'\"&]/g,\n nonAscii: /(?:[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n nonAsciiPrintable: /(?:[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n extensive: /(?:[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g\n};\nvar defaultEncodeOptions = {\n mode: 'specialChars',\n level: 'all',\n numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nfunction encode(text, _a) {\n var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n if (!text) {\n return '';\n }\n var encodeRegExp = encodeRegExps[mode];\n var references = allNamedReferences[level].characters;\n var isHex = numeric === 'hexadecimal';\n encodeRegExp.lastIndex = 0;\n var _b = encodeRegExp.exec(text);\n var _c;\n if (_b) {\n _c = '';\n var _d = 0;\n do {\n if (_d !== _b.index) {\n _c += text.substring(_d, _b.index);\n }\n var _e = _b[0];\n var result_1 = references[_e];\n if (!result_1) {\n var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0);\n result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';';\n }\n _c += result_1;\n _d = _b.index + _e.length;\n } while ((_b = encodeRegExp.exec(text)));\n if (_d !== text.length) {\n _c += text.substring(_d);\n }\n }\n else {\n _c =\n text;\n }\n return _c;\n}\nexports.encode = encode;\nvar defaultDecodeOptions = {\n scope: 'body',\n level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n xml: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.xml\n },\n html4: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html4\n },\n html5: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html5\n }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n level: 'all'\n};\n/** Decodes a single entity */\nfunction decodeEntity(entity, _a) {\n var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b;\n if (!entity) {\n return '';\n }\n var _b = entity;\n var decodeEntityLastChar_1 = entity[entity.length - 1];\n if (false\n && decodeEntityLastChar_1 === '=') {\n _b =\n entity;\n }\n else if (false\n && decodeEntityLastChar_1 !== ';') {\n _b =\n entity;\n }\n else {\n var decodeResultByReference_1 = allNamedReferences[level].entities[entity];\n if (decodeResultByReference_1) {\n _b = decodeResultByReference_1;\n }\n else if (entity[0] === '&' && entity[1] === '#') {\n var decodeSecondChar_1 = entity[2];\n var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X'\n ? parseInt(entity.substr(3), 16)\n : parseInt(entity.substr(2));\n _b =\n decodeCode_1 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_1 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_1)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1);\n }\n }\n return _b;\n}\nexports.decodeEntity = decodeEntity;\n/** Decodes all entities in the text */\nfunction decode(text, _a) {\n var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b;\n if (!text) {\n return '';\n }\n var decodeRegExp = decodeRegExps[level][scope];\n var references = allNamedReferences[level].entities;\n var isAttribute = scope === 'attribute';\n var isStrict = scope === 'strict';\n decodeRegExp.lastIndex = 0;\n var replaceMatch_1 = decodeRegExp.exec(text);\n var replaceResult_1;\n if (replaceMatch_1) {\n replaceResult_1 = '';\n var replaceLastIndex_1 = 0;\n do {\n if (replaceLastIndex_1 !== replaceMatch_1.index) {\n replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index);\n }\n var replaceInput_1 = replaceMatch_1[0];\n var decodeResult_1 = replaceInput_1;\n var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1];\n if (isAttribute\n && decodeEntityLastChar_2 === '=') {\n decodeResult_1 = replaceInput_1;\n }\n else if (isStrict\n && decodeEntityLastChar_2 !== ';') {\n decodeResult_1 = replaceInput_1;\n }\n else {\n var decodeResultByReference_2 = references[replaceInput_1];\n if (decodeResultByReference_2) {\n decodeResult_1 = decodeResultByReference_2;\n }\n else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') {\n var decodeSecondChar_2 = replaceInput_1[2];\n var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X'\n ? parseInt(replaceInput_1.substr(3), 16)\n : parseInt(replaceInput_1.substr(2));\n decodeResult_1 =\n decodeCode_2 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_2 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_2)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2);\n }\n }\n replaceResult_1 += decodeResult_1;\n replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length;\n } while ((replaceMatch_1 = decodeRegExp.exec(text)));\n if (replaceLastIndex_1 !== text.length) {\n replaceResult_1 += text.substring(replaceLastIndex_1);\n }\n }\n else {\n replaceResult_1 =\n text;\n }\n return replaceResult_1;\n}\nexports.decode = decode;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.bodyRegExps={xml:/&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\",\"&\":\"&\"},characters:{\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"&\":\"&\"}},html4:{entities:{\"'\":\"'\",\" \":\" \",\" \":\" \",\"¡\":\"¡\",\"¡\":\"¡\",\"¢\":\"¢\",\"¢\":\"¢\",\"£\":\"£\",\"£\":\"£\",\"¤\":\"¤\",\"¤\":\"¤\",\"¥\":\"¥\",\"¥\":\"¥\",\"¦\":\"¦\",\"¦\":\"¦\",\"§\":\"§\",\"§\":\"§\",\"¨\":\"¨\",\"¨\":\"¨\",\"©\":\"©\",\"©\":\"©\",\"ª\":\"ª\",\"ª\":\"ª\",\"«\":\"«\",\"«\":\"«\",\"¬\":\"¬\",\"¬\":\"¬\",\"­\":\"­\",\"­\":\"­\",\"®\":\"®\",\"®\":\"®\",\"¯\":\"¯\",\"¯\":\"¯\",\"°\":\"°\",\"°\":\"°\",\"±\":\"±\",\"±\":\"±\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"´\":\"´\",\"´\":\"´\",\"µ\":\"µ\",\"µ\":\"µ\",\"¶\":\"¶\",\"¶\":\"¶\",\"·\":\"·\",\"·\":\"·\",\"¸\":\"¸\",\"¸\":\"¸\",\"¹\":\"¹\",\"¹\":\"¹\",\"º\":\"º\",\"º\":\"º\",\"»\":\"»\",\"»\":\"»\",\"¼\":\"¼\",\"¼\":\"¼\",\"½\":\"½\",\"½\":\"½\",\"¾\":\"¾\",\"¾\":\"¾\",\"¿\":\"¿\",\"¿\":\"¿\",\"À\":\"À\",\"À\":\"À\",\"Á\":\"Á\",\"Á\":\"Á\",\"Â\":\"Â\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"È\":\"È\",\"È\":\"È\",\"É\":\"É\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"×\":\"×\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"ß\":\"ß\",\"à\":\"à\",\"à\":\"à\",\"á\":\"á\",\"á\":\"á\",\"â\":\"â\",\"â\":\"â\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"å\":\"å\",\"å\":\"å\",\"æ\":\"æ\",\"æ\":\"æ\",\"ç\":\"ç\",\"ç\":\"ç\",\"è\":\"è\",\"è\":\"è\",\"é\":\"é\",\"é\":\"é\",\"ê\":\"ê\",\"ê\":\"ê\",\"ë\":\"ë\",\"ë\":\"ë\",\"ì\":\"ì\",\"ì\":\"ì\",\"í\":\"í\",\"í\":\"í\",\"î\":\"î\",\"î\":\"î\",\"ï\":\"ï\",\"ï\":\"ï\",\"ð\":\"ð\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ò\":\"ò\",\"ó\":\"ó\",\"ó\":\"ó\",\"ô\":\"ô\",\"ô\":\"ô\",\"õ\":\"õ\",\"õ\":\"õ\",\"ö\":\"ö\",\"ö\":\"ö\",\"÷\":\"÷\",\"÷\":\"÷\",\"ø\":\"ø\",\"ø\":\"ø\",\"ù\":\"ù\",\"ù\":\"ù\",\"ú\":\"ú\",\"ú\":\"ú\",\"û\":\"û\",\"û\":\"û\",\"ü\":\"ü\",\"ü\":\"ü\",\"ý\":\"ý\",\"ý\":\"ý\",\"þ\":\"þ\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\""\":'\"',\""\":'\"',\"&\":\"&\",\"&\":\"&\",\"<\":\"<\",\"<\":\"<\",\">\":\">\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"⟨\":\"〈\",\"⟩\":\"〉\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"},characters:{\"'\":\"'\",\" \":\" \",\"¡\":\"¡\",\"¢\":\"¢\",\"£\":\"£\",\"¤\":\"¤\",\"¥\":\"¥\",\"¦\":\"¦\",\"§\":\"§\",\"¨\":\"¨\",\"©\":\"©\",\"ª\":\"ª\",\"«\":\"«\",\"¬\":\"¬\",\"­\":\"­\",\"®\":\"®\",\"¯\":\"¯\",\"°\":\"°\",\"±\":\"±\",\"²\":\"²\",\"³\":\"³\",\"´\":\"´\",\"µ\":\"µ\",\"¶\":\"¶\",\"·\":\"·\",\"¸\":\"¸\",\"¹\":\"¹\",\"º\":\"º\",\"»\":\"»\",\"¼\":\"¼\",\"½\":\"½\",\"¾\":\"¾\",\"¿\":\"¿\",\"À\":\"À\",\"Á\":\"Á\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"È\":\"È\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"à\":\"à\",\"á\":\"á\",\"â\":\"â\",\"ã\":\"ã\",\"ä\":\"ä\",\"å\":\"å\",\"æ\":\"æ\",\"ç\":\"ç\",\"è\":\"è\",\"é\":\"é\",\"ê\":\"ê\",\"ë\":\"ë\",\"ì\":\"ì\",\"í\":\"í\",\"î\":\"î\",\"ï\":\"ï\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ó\":\"ó\",\"ô\":\"ô\",\"õ\":\"õ\",\"ö\":\"ö\",\"÷\":\"÷\",\"ø\":\"ø\",\"ù\":\"ù\",\"ú\":\"ú\",\"û\":\"û\",\"ü\":\"ü\",\"ý\":\"ý\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",'\"':\""\",\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"〈\":\"⟨\",\"〉\":\"⟩\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"}},html5:{entities:{\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"&\":\"&\",\"&\":\"&\",\"Á\":\"Á\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"ℬ\":\"ℬ\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"ℭ\":\"ℭ\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"ⅅ\":\"ⅅ\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"∯\":\"∯\",\"¨\":\"¨\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⫤\":\"⫤\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"⇓\":\"⇓\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"É\":\"É\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"ℋ\":\"ℋ\",\"Ħ\":\"Ħ\",\"≎\":\"≎\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"ℑ\":\"ℑ\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"⇒\":\"⇒\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"ℒ\":\"ℒ\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"ℳ\":\"ℳ\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"≫\":\"≫\",\"≪\":\"≪\",\" \":\"\\n\",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℌ\":\"ℌ\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∷\":\"∷\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",\""\":'\"',\""\":'\"',\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"ℜ\":\"ℜ\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"⇒\":\"⇒\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↓\":\"↓\",\"←\":\"←\",\"→\":\"→\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∋\":\"∋\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⋑\":\"⋑\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\" \":\"\\t\",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",\"_\":\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"↑\":\"↑\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"​\":\"​\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"â\":\"â\",\"´\":\"´\",\"´\":\"´\",\"а\":\"а\",\"æ\":\"æ\",\"æ\":\"æ\",\"⁡\":\"⁡\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"&\":\"&\",\"&\":\"&\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∠\":\"∠\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"Å\":\"Å\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"≈\":\"≈\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"≈\":\"≈\",\"≊\":\"≊\",\"å\":\"å\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"≈\":\"≈\",\"≍\":\"≍\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"∳\":\"∳\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⌅\":\"⌅\",\"⎵\":\"⎵\",\"⎶\":\"⎶\",\"≌\":\"≌\",\"б\":\"б\",\"„\":\"„\",\"∵\":\"∵\",\"∵\":\"∵\",\"⦰\":\"⦰\",\"϶\":\"϶\",\"ℬ\":\"ℬ\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▪\":\"▪\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⊥\":\"⊥\",\"⊥\":\"⊥\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"─\":\"─\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"‵\":\"‵\",\"˘\":\"˘\",\"¦\":\"¦\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"\\":\"\\\\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"•\":\"•\",\"≎\":\"≎\",\"⪮\":\"⪮\",\"≏\":\"≏\",\"≏\":\"≏\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"ˇ\":\"ˇ\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"¸\":\"¸\",\"¸\":\"¸\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"¢\":\"¢\",\"·\":\"·\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"®\":\"®\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"≗\":\"≗\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\"♣\":\"♣\",\":\":\":\",\"≔\":\"≔\",\"≔\":\"≔\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"∘\":\"∘\",\"∁\":\"∁\",\"ℂ\":\"ℂ\",\"≅\":\"≅\",\"⩭\":\"⩭\",\"∮\":\"∮\",\"𝕔\":\"𝕔\",\"∐\":\"∐\",\"©\":\"©\",\"©\":\"©\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"¤\":\"¤\",\"↶\":\"↶\",\"↷\":\"↷\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"∲\":\"∲\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⇓\":\"⇓\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"↓\":\"↓\",\"‐\":\"‐\",\"⊣\":\"⊣\",\"⤏\":\"⤏\",\"˝\":\"˝\",\"ď\":\"ď\",\"д\":\"д\",\"ⅆ\":\"ⅆ\",\"‡\":\"‡\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⋄\":\"⋄\",\"⋄\":\"⋄\",\"♦\":\"♦\",\"♦\":\"♦\",\"¨\":\"¨\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"÷\":\"÷\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",\"$\":\"$\",\"𝕕\":\"𝕕\",\"˙\":\"˙\",\"≐\":\"≐\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌆\":\"⌆\",\"↓\":\"↓\",\"⇊\":\"⇊\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⤐\":\"⤐\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"▾\":\"▾\",\"⇵\":\"⇵\",\"⥯\":\"⥯\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"⩷\":\"⩷\",\"≑\":\"≑\",\"é\":\"é\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\"∅\":\"∅\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"≖\":\"≖\",\"≕\":\"≕\",\"≂\":\"≂\",\"⪖\":\"⪖\",\"⪕\":\"⪕\",\"=\":\"=\",\"≟\":\"≟\",\"≡\":\"≡\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"≐\":\"≐\",\"≂\":\"≂\",\"η\":\"η\",\"ð\":\"ð\",\"ð\":\"ð\",\"ë\":\"ë\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"∃\":\"∃\",\"ℰ\":\"ℰ\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",\"fj\":\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"∀\":\"∀\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"≧\":\"≧\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"ϝ\":\"ϝ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≥\":\"≥\",\"≧\":\"≧\",\"⩾\":\"⩾\",\"⩾\":\"⩾\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"≫\":\"≫\",\"⋙\":\"⋙\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"≷\":\"≷\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⪈\":\"⪈\",\"≩\":\"≩\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"`\":\"`\",\"ℊ\":\"ℊ\",\"≳\":\"≳\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\">\":\">\",\">\":\">\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⪆\":\"⪆\",\"⥸\":\"⥸\",\"⋗\":\"⋗\",\"⋛\":\"⋛\",\"⪌\":\"⪌\",\"≷\":\"≷\",\"≳\":\"≳\",\"≩︀\":\"≩︀\",\"≩︀\":\"≩︀\",\"⇔\":\"⇔\",\" \":\" \",\"½\":\"½\",\"ℋ\":\"ℋ\",\"ъ\":\"ъ\",\"↔\":\"↔\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ℏ\":\"ℏ\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"‐\":\"‐\",\"í\":\"í\",\"í\":\"í\",\"⁣\":\"⁣\",\"î\":\"î\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"¡\":\"¡\",\"⇔\":\"⇔\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"ì\":\"ì\",\"ⅈ\":\"ⅈ\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ℑ\":\"ℑ\",\"ℐ\":\"ℐ\",\"ℑ\":\"ℑ\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"∈\":\"∈\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"ı\":\"ı\",\"∫\":\"∫\",\"⊺\":\"⊺\",\"ℤ\":\"ℤ\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"⨼\":\"⨼\",\"¿\":\"¿\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"∈\":\"∈\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"∈\":\"∈\",\"⁢\":\"⁢\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⇚\":\"⇚\",\"⇐\":\"⇐\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"≦\":\"≦\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"ℒ\":\"ℒ\",\"λ\":\"λ\",\"⟨\":\"⟨\",\"⦑\":\"⦑\",\"⟨\":\"⟨\",\"⪅\":\"⪅\",\"«\":\"«\",\"«\":\"«\",\"←\":\"←\",\"⇤\":\"⇤\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↩\":\"↩\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"⌈\":\"⌈\",\"{\":\"{\",\"л\":\"л\",\"⤶\":\"⤶\",\"“\":\"“\",\"„\":\"„\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"←\":\"←\",\"↢\":\"↢\",\"↽\":\"↽\",\"↼\":\"↼\",\"⇇\":\"⇇\",\"↔\":\"↔\",\"⇆\":\"⇆\",\"⇋\":\"⇋\",\"↭\":\"↭\",\"⋋\":\"⋋\",\"⋚\":\"⋚\",\"≤\":\"≤\",\"≦\":\"≦\",\"⩽\":\"⩽\",\"⩽\":\"⩽\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⪅\":\"⪅\",\"⋖\":\"⋖\",\"⋚\":\"⋚\",\"⪋\":\"⪋\",\"≶\":\"≶\",\"≲\":\"≲\",\"⥼\":\"⥼\",\"⌊\":\"⌊\",\"𝔩\":\"𝔩\",\"≶\":\"≶\",\"⪑\":\"⪑\",\"↽\":\"↽\",\"↼\":\"↼\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"≪\":\"≪\",\"⇇\":\"⇇\",\"⌞\":\"⌞\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⪇\":\"⪇\",\"≨\":\"≨\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟦\":\"⟦\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟼\":\"⟼\",\"⟶\":\"⟶\",\"↫\":\"↫\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"_\":\"_\",\"◊\":\"◊\",\"◊\":\"◊\",\"⧫\":\"⧫\",\"(\":\"(\",\"⦓\":\"⦓\",\"⇆\":\"⇆\",\"⌟\":\"⌟\",\"⇋\":\"⇋\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"↰\":\"↰\",\"≲\":\"≲\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"[\":\"[\",\"‘\":\"‘\",\"‚\":\"‚\",\"ł\":\"ł\",\"<\":\"<\",\"<\":\"<\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋖\":\"⋖\",\"⋋\":\"⋋\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"◂\":\"◂\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"✠\":\"✠\",\"↦\":\"↦\",\"↦\":\"↦\",\"↧\":\"↧\",\"↤\":\"↤\",\"↥\":\"↥\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"∡\":\"∡\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"µ\":\"µ\",\"∣\":\"∣\",\"*\":\"*\",\"⫰\":\"⫰\",\"·\":\"·\",\"·\":\"·\",\"−\":\"−\",\"⊟\":\"⊟\",\"∸\":\"∸\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"…\":\"…\",\"∓\":\"∓\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"∓\":\"∓\",\"𝓂\":\"𝓂\",\"∾\":\"∾\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"≫̸\":\"≫̸\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"≪̸\":\"≪̸\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"∇\":\"∇\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"≉\":\"≉\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"≉\":\"≉\",\"♮\":\"♮\",\"♮\":\"♮\",\"ℕ\":\"ℕ\",\" \":\" \",\" \":\" \",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"≇\":\"≇\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"≠\":\"≠\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"↗\":\"↗\",\"↗\":\"↗\",\"≐̸\":\"≐̸\",\"≢\":\"≢\",\"⤨\":\"⤨\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"∄\":\"∄\",\"𝔫\":\"𝔫\",\"≧̸\":\"≧̸\",\"≱\":\"≱\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"⩾̸\":\"⩾̸\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≯\":\"≯\",\"≯\":\"≯\",\"⇎\":\"⇎\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"∋\":\"∋\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"∋\":\"∋\",\"њ\":\"њ\",\"⇍\":\"⇍\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"≰\":\"≰\",\"↚\":\"↚\",\"↮\":\"↮\",\"≰\":\"≰\",\"≦̸\":\"≦̸\",\"⩽̸\":\"⩽̸\",\"⩽̸\":\"⩽̸\",\"≮\":\"≮\",\"≴\":\"≴\",\"≮\":\"≮\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"∤\":\"∤\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"¬\":\"¬\",\"∉\":\"∉\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"∉\":\"∉\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"∌\":\"∌\",\"∌\":\"∌\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"∦\":\"∦\",\"∦\":\"∦\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"⊀\":\"⊀\",\"⋠\":\"⋠\",\"⪯̸\":\"⪯̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⇏\":\"⇏\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"↛\":\"↛\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"⊁\":\"⊁\",\"⋡\":\"⋡\",\"⪰̸\":\"⪰̸\",\"𝓃\":\"𝓃\",\"∤\":\"∤\",\"∦\":\"∦\",\"≁\":\"≁\",\"≄\":\"≄\",\"≄\":\"≄\",\"∤\":\"∤\",\"∦\":\"∦\",\"⋢\":\"⋢\",\"⋣\":\"⋣\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊈\":\"⊈\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⫅̸\":\"⫅̸\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"⊉\":\"⊉\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"⫆̸\":\"⫆̸\",\"≹\":\"≹\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"≸\":\"≸\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"↖\":\"↖\",\"↖\":\"↖\",\"⤧\":\"⤧\",\"Ⓢ\":\"Ⓢ\",\"ó\":\"ó\",\"ó\":\"ó\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"ô\":\"ô\",\"ô\":\"ô\",\"о\":\"о\",\"⊝\":\"⊝\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⊙\":\"⊙\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"Ω\":\"Ω\",\"∮\":\"∮\",\"↺\":\"↺\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"‾\":\"‾\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"⊖\":\"⊖\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"⊕\":\"⊕\",\"∨\":\"∨\",\"↻\":\"↻\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"ª\":\"ª\",\"º\":\"º\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ℴ\":\"ℴ\",\"ø\":\"ø\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"õ\":\"õ\",\"⊗\":\"⊗\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"∥\":\"∥\",\"¶\":\"¶\",\"¶\":\"¶\",\"∥\":\"∥\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"∂\":\"∂\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"⊥\":\"⊥\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"ℳ\":\"ℳ\",\"☎\":\"☎\",\"π\":\"π\",\"⋔\":\"⋔\",\"ϖ\":\"ϖ\",\"ℏ\":\"ℏ\",\"ℎ\":\"ℎ\",\"ℏ\":\"ℏ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⊞\":\"⊞\",\"⨢\":\"⨢\",\"∔\":\"∔\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"±\":\"±\",\"±\":\"±\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"±\":\"±\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"£\":\"£\",\"≺\":\"≺\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"≺\":\"≺\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"≾\":\"≾\",\"′\":\"′\",\"ℙ\":\"ℙ\",\"⪵\":\"⪵\",\"⪹\":\"⪹\",\"⋨\":\"⋨\",\"∏\":\"∏\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"∝\":\"∝\",\"∝\":\"∝\",\"≾\":\"≾\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"⨌\":\"⨌\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"ℍ\":\"ℍ\",\"⨖\":\"⨖\",\"?\":\"?\",\"≟\":\"≟\",\""\":'\"',\""\":'\"',\"⇛\":\"⇛\",\"⇒\":\"⇒\",\"⤜\":\"⤜\",\"⤏\":\"⤏\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"√\":\"√\",\"⦳\":\"⦳\",\"⟩\":\"⟩\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"⟩\":\"⟩\",\"»\":\"»\",\"»\":\"»\",\"→\":\"→\",\"⥵\":\"⥵\",\"⇥\":\"⇥\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"↪\":\"↪\",\"↬\":\"↬\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"ℚ\":\"ℚ\",\"⤍\":\"⤍\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"⌉\":\"⌉\",\"}\":\"}\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"”\":\"”\",\"”\":\"”\",\"↳\":\"↳\",\"ℜ\":\"ℜ\",\"ℛ\":\"ℛ\",\"ℜ\":\"ℜ\",\"ℝ\":\"ℝ\",\"▭\":\"▭\",\"®\":\"®\",\"®\":\"®\",\"⥽\":\"⥽\",\"⌋\":\"⌋\",\"𝔯\":\"𝔯\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"→\":\"→\",\"↣\":\"↣\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"⇉\":\"⇉\",\"↝\":\"↝\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"≓\":\"≓\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⟧\":\"⟧\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"⇉\":\"⇉\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"↱\":\"↱\",\"]\":\"]\",\"’\":\"’\",\"’\":\"’\",\"⋌\":\"⋌\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"▸\":\"▸\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"‚\":\"‚\",\"≻\":\"≻\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"≿\":\"≿\",\"с\":\"с\",\"⋅\":\"⋅\",\"⊡\":\"⊡\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"⤥\":\"⤥\",\"↘\":\"↘\",\"↘\":\"↘\",\"§\":\"§\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"∖\":\"∖\",\"∖\":\"∖\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"⌢\":\"⌢\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"∣\":\"∣\",\"∥\":\"∥\",\"­\":\"­\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"ς\":\"ς\",\"∼\":\"∼\",\"⩪\":\"⩪\",\"≃\":\"≃\",\"≃\":\"≃\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"←\":\"←\",\"∖\":\"∖\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"∣\":\"∣\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"♠\":\"♠\",\"∥\":\"∥\",\"⊓\":\"⊓\",\"⊓︀\":\"⊓︀\",\"⊔\":\"⊔\",\"⊔︀\":\"⊔︀\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"□\":\"□\",\"□\":\"□\",\"▪\":\"▪\",\"▪\":\"▪\",\"→\":\"→\",\"𝓈\":\"𝓈\",\"∖\":\"∖\",\"⌣\":\"⌣\",\"⋆\":\"⋆\",\"☆\":\"☆\",\"★\":\"★\",\"ϵ\":\"ϵ\",\"ϕ\":\"ϕ\",\"¯\":\"¯\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⊆\":\"⊆\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⊂\":\"⊂\",\"⊆\":\"⊆\",\"⫅\":\"⫅\",\"⊊\":\"⊊\",\"⫋\":\"⫋\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"≻\":\"≻\",\"⪸\":\"⪸\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"⪺\":\"⪺\",\"⪶\":\"⪶\",\"⋩\":\"⋩\",\"≿\":\"≿\",\"∑\":\"∑\",\"♪\":\"♪\",\"¹\":\"¹\",\"¹\":\"¹\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"⊃\":\"⊃\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⊇\":\"⊇\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⫆\":\"⫆\",\"⊋\":\"⊋\",\"⫌\":\"⫌\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤦\":\"⤦\",\"↙\":\"↙\",\"↙\":\"↙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"⎴\":\"⎴\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⃛\":\"⃛\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"∴\":\"∴\",\"∴\":\"∴\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"ϑ\":\"ϑ\",\"≈\":\"≈\",\"∼\":\"∼\",\" \":\" \",\"≈\":\"≈\",\"∼\":\"∼\",\"þ\":\"þ\",\"þ\":\"þ\",\"˜\":\"˜\",\"×\":\"×\",\"×\":\"×\",\"⊠\":\"⊠\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"∭\":\"∭\",\"⤨\":\"⤨\",\"⊤\":\"⊤\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"⤩\":\"⤩\",\"‴\":\"‴\",\"™\":\"™\",\"▵\":\"▵\",\"▿\":\"▿\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"≜\":\"≜\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"◬\":\"◬\",\"≜\":\"≜\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"≬\":\"≬\",\"↞\":\"↞\",\"↠\":\"↠\",\"⇑\":\"⇑\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ú\":\"ú\",\"↑\":\"↑\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"û\":\"û\",\"у\":\"у\",\"⇅\":\"⇅\",\"ű\":\"ű\",\"⥮\":\"⥮\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"ù\":\"ù\",\"↿\":\"↿\",\"↾\":\"↾\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"¨\":\"¨\",\"¨\":\"¨\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"↑\":\"↑\",\"↕\":\"↕\",\"↿\":\"↿\",\"↾\":\"↾\",\"⊎\":\"⊎\",\"υ\":\"υ\",\"ϒ\":\"ϒ\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"▵\":\"▵\",\"▴\":\"▴\",\"⇈\":\"⇈\",\"ü\":\"ü\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⇕\":\"⇕\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⊨\":\"⊨\",\"⦜\":\"⦜\",\"ϵ\":\"ϵ\",\"ϰ\":\"ϰ\",\"∅\":\"∅\",\"ϕ\":\"ϕ\",\"ϖ\":\"ϖ\",\"∝\":\"∝\",\"↕\":\"↕\",\"ϱ\":\"ϱ\",\"ς\":\"ς\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"ϑ\":\"ϑ\",\"⊲\":\"⊲\",\"⊳\":\"⊳\",\"в\":\"в\",\"⊢\":\"⊢\",\"∨\":\"∨\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"|\":\"|\",\"|\":\"|\",\"𝔳\":\"𝔳\",\"⊲\":\"⊲\",\"⊂⃒\":\"⊂⃒\",\"⊃⃒\":\"⊃⃒\",\"𝕧\":\"𝕧\",\"∝\":\"∝\",\"⊳\":\"⊳\",\"𝓋\":\"𝓋\",\"⫋︀\":\"⫋︀\",\"⊊︀\":\"⊊︀\",\"⫌︀\":\"⫌︀\",\"⊋︀\":\"⊋︀\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"∧\":\"∧\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"℘\":\"℘\",\"≀\":\"≀\",\"≀\":\"≀\",\"𝓌\":\"𝓌\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"▽\":\"▽\",\"𝔵\":\"𝔵\",\"⟺\":\"⟺\",\"⟷\":\"⟷\",\"ξ\":\"ξ\",\"⟸\":\"⟸\",\"⟵\":\"⟵\",\"⟼\":\"⟼\",\"⋻\":\"⋻\",\"⨀\":\"⨀\",\"𝕩\":\"𝕩\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⟹\":\"⟹\",\"⟶\":\"⟶\",\"𝓍\":\"𝓍\",\"⨆\":\"⨆\",\"⨄\":\"⨄\",\"△\":\"△\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"ý\":\"ý\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ℨ\":\"ℨ\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"},characters:{\"Æ\":\"Æ\",\"&\":\"&\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"Ħ\":\"Ħ\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"\\n\":\" \",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",'\"':\""\",\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\"\\t\":\" \",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",_:\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"а\":\"а\",\"æ\":\"æ\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"ã\":\"ã\",\"ä\":\"ä\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⎶\":\"⎶\",\"б\":\"б\",\"„\":\"„\",\"⦰\":\"⦰\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"◯\":\"◯\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"\\\\\":\"\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"⪮\":\"⪮\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\":\":\":\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"⩭\":\"⩭\",\"𝕔\":\"𝕔\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"‐\":\"‐\",\"⤏\":\"⤏\",\"ď\":\"ď\",\"д\":\"д\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"♦\":\"♦\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",$:\"$\",\"𝕕\":\"𝕕\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"=\":\"=\",\"≟\":\"≟\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"η\":\"η\",\"ð\":\"ð\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",fj:\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"ℊ\":\"ℊ\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⥸\":\"⥸\",\"≩︀\":\"≩︀\",\"ъ\":\"ъ\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"í\":\"í\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"λ\":\"λ\",\"⦑\":\"⦑\",\"⪅\":\"⪅\",\"«\":\"«\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"л\":\"л\",\"⤶\":\"⤶\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"⇇\":\"⇇\",\"⋋\":\"⋋\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⋖\":\"⋖\",\"⥼\":\"⥼\",\"𝔩\":\"𝔩\",\"⪑\":\"⪑\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟼\":\"⟼\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"◊\":\"◊\",\"(\":\"(\",\"⦓\":\"⦓\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"‚\":\"‚\",\"ł\":\"ł\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"⫰\":\"⫰\",\"−\":\"−\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"𝓂\":\"𝓂\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"♮\":\"♮\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"≐̸\":\"≐̸\",\"⤨\":\"⤨\",\"𝔫\":\"𝔫\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"њ\":\"њ\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"𝓃\":\"𝓃\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"ñ\":\"ñ\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"⤧\":\"⤧\",\"ó\":\"ó\",\"ô\":\"ô\",\"о\":\"о\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"∨\":\"∨\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"¶\":\"¶\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"☎\":\"☎\",\"π\":\"π\",\"ϖ\":\"ϖ\",\"ℎ\":\"ℎ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⨢\":\"⨢\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"′\":\"′\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"⨖\":\"⨖\",\"?\":\"?\",\"⤜\":\"⤜\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"⦳\":\"⦳\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"»\":\"»\",\"⥵\":\"⥵\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"↳\":\"↳\",\"▭\":\"▭\",\"⥽\":\"⥽\",\"𝔯\":\"𝔯\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"⇉\":\"⇉\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"с\":\"с\",\"⋅\":\"⋅\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"⩪\":\"⩪\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"⊓︀\":\"⊓︀\",\"⊔︀\":\"⊔︀\",\"𝓈\":\"𝓈\",\"☆\":\"☆\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"♪\":\"♪\",\"¹\":\"¹\",\"²\":\"²\",\"³\":\"³\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"þ\":\"þ\",\"×\":\"×\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"‴\":\"‴\",\"▵\":\"▵\",\"≜\":\"≜\",\"◬\":\"◬\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"у\":\"у\",\"ű\":\"ű\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⦜\":\"⦜\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"в\":\"в\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"𝔳\":\"𝔳\",\"𝕧\":\"𝕧\",\"𝓋\":\"𝓋\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"𝓌\":\"𝓌\",\"𝔵\":\"𝔵\",\"ξ\":\"ξ\",\"⋻\":\"⋻\",\"𝕩\":\"𝕩\",\"𝓍\":\"𝓍\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"}}};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { log } from \"../utils/log.js\";\n\nvar WebSocketClient = /*#__PURE__*/function () {\n /**\n * @param {string} url\n */\n function WebSocketClient(url) {\n _classCallCheck(this, WebSocketClient);\n\n this.client = new WebSocket(url);\n\n this.client.onerror = function (error) {\n log.error(error);\n };\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n\n _createClass(WebSocketClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.client.onopen = f;\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.client.onclose = f;\n } // call f with the message string as the first argument\n\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.client.onmessage = function (e) {\n f(e.data);\n };\n }\n }]);\n\n return WebSocketClient;\n}();\n\nexport { WebSocketClient as default };","/* global __resourceQuery, __webpack_hash__ */\n/// \nimport webpackHotLog from \"webpack/hot/log.js\";\nimport stripAnsi from \"./utils/stripAnsi.js\";\nimport parseURL from \"./utils/parseURL.js\";\nimport socket from \"./socket.js\";\nimport { formatProblem, show, hide } from \"./overlay.js\";\nimport { log, setLogLevel } from \"./utils/log.js\";\nimport sendMessage from \"./utils/sendMessage.js\";\nimport reloadApp from \"./utils/reloadApp.js\";\nimport createSocketURL from \"./utils/createSocketURL.js\";\n/**\n * @typedef {Object} Options\n * @property {boolean} hot\n * @property {boolean} liveReload\n * @property {boolean} progress\n * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay\n * @property {string} [logging]\n * @property {number} [reconnect]\n */\n\n/**\n * @typedef {Object} Status\n * @property {boolean} isUnloading\n * @property {string} currentHash\n * @property {string} [previousHash]\n */\n\n/**\n * @type {Status}\n */\n\nvar status = {\n isUnloading: false,\n // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement\n // eslint-disable-next-line camelcase\n currentHash: typeof __webpack_hash__ !== \"undefined\" ? __webpack_hash__ : \"\"\n};\n/** @type {Options} */\n\nvar options = {\n hot: false,\n liveReload: false,\n progress: false,\n overlay: false\n};\nvar parsedResourceQuery = parseURL(__resourceQuery);\n\nif (parsedResourceQuery.hot === \"true\") {\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n}\n\nif (parsedResourceQuery[\"live-reload\"] === \"true\") {\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n}\n\nif (parsedResourceQuery.logging) {\n options.logging = parsedResourceQuery.logging;\n}\n\nif (typeof parsedResourceQuery.reconnect !== \"undefined\") {\n options.reconnect = Number(parsedResourceQuery.reconnect);\n}\n/**\n * @param {string} level\n */\n\n\nfunction setAllLogLevel(level) {\n // This is needed because the HMR logger operate separately from dev server logger\n webpackHotLog.setLogLevel(level === \"verbose\" || level === \"log\" ? \"info\" : level);\n setLogLevel(level);\n}\n\nif (options.logging) {\n setAllLogLevel(options.logging);\n}\n\nself.addEventListener(\"beforeunload\", function () {\n status.isUnloading = true;\n});\nvar onSocketMessage = {\n hot: function hot() {\n if (parsedResourceQuery.hot === \"false\") {\n return;\n }\n\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n },\n liveReload: function liveReload() {\n if (parsedResourceQuery[\"live-reload\"] === \"false\") {\n return;\n }\n\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n },\n invalid: function invalid() {\n log.info(\"App updated. Recompiling...\"); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Invalid\");\n },\n\n /**\n * @param {string} hash\n */\n hash: function hash(_hash) {\n status.previousHash = status.currentHash;\n status.currentHash = _hash;\n },\n logging: setAllLogLevel,\n\n /**\n * @param {boolean} value\n */\n overlay: function overlay(value) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n options.overlay = value;\n },\n\n /**\n * @param {number} value\n */\n reconnect: function reconnect(value) {\n if (parsedResourceQuery.reconnect === \"false\") {\n return;\n }\n\n options.reconnect = value;\n },\n\n /**\n * @param {boolean} value\n */\n progress: function progress(value) {\n options.progress = value;\n },\n\n /**\n * @param {{ pluginName?: string, percent: number, msg: string }} data\n */\n \"progress-update\": function progressUpdate(data) {\n if (options.progress) {\n log.info(\"\".concat(data.pluginName ? \"[\".concat(data.pluginName, \"] \") : \"\").concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage(\"Progress\", data);\n },\n \"still-ok\": function stillOk() {\n log.info(\"Nothing changed.\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"StillOk\");\n },\n ok: function ok() {\n sendMessage(\"Ok\");\n\n if (options.overlay) {\n hide();\n }\n\n reloadApp(options, status);\n },\n // TODO: remove in v5 in favor of 'static-changed'\n\n /**\n * @param {string} file\n */\n \"content-changed\": function contentChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {string} file\n */\n \"static-changed\": function staticChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {Error[]} warnings\n * @param {any} params\n */\n warnings: function warnings(_warnings, params) {\n log.warn(\"Warnings while compiling.\");\n\n var printableWarnings = _warnings.map(function (error) {\n var _formatProblem = formatProblem(\"warning\", error),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Warnings\", printableWarnings);\n\n for (var i = 0; i < printableWarnings.length; i++) {\n log.warn(printableWarnings[i]);\n }\n\n var needShowOverlayForWarnings = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.warnings;\n\n if (needShowOverlayForWarnings) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"warning\", _warnings, trustedTypesPolicyName || null);\n }\n\n if (params && params.preventReloading) {\n return;\n }\n\n reloadApp(options, status);\n },\n\n /**\n * @param {Error[]} errors\n */\n errors: function errors(_errors) {\n log.error(\"Errors while compiling. Reload prevented.\");\n\n var printableErrors = _errors.map(function (error) {\n var _formatProblem2 = formatProblem(\"error\", error),\n header = _formatProblem2.header,\n body = _formatProblem2.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Errors\", printableErrors);\n\n for (var i = 0; i < printableErrors.length; i++) {\n log.error(printableErrors[i]);\n }\n\n var needShowOverlayForErrors = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.errors;\n\n if (needShowOverlayForErrors) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"error\", _errors, trustedTypesPolicyName || null);\n }\n },\n\n /**\n * @param {Error} error\n */\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.info(\"Disconnected!\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Close\");\n }\n};\nvar socketURL = createSocketURL(parsedResourceQuery);\nsocket(socketURL, onSocketMessage, options.reconnect);","/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\n\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nvar LogType = Object.freeze({\n error:\n /** @type {\"error\"} */\n \"error\",\n // message, c style arguments\n warn:\n /** @type {\"warn\"} */\n \"warn\",\n // message, c style arguments\n info:\n /** @type {\"info\"} */\n \"info\",\n // message, c style arguments\n log:\n /** @type {\"log\"} */\n \"log\",\n // message, c style arguments\n debug:\n /** @type {\"debug\"} */\n \"debug\",\n // message, c style arguments\n trace:\n /** @type {\"trace\"} */\n \"trace\",\n // no arguments\n group:\n /** @type {\"group\"} */\n \"group\",\n // [label]\n groupCollapsed:\n /** @type {\"groupCollapsed\"} */\n \"groupCollapsed\",\n // [label]\n groupEnd:\n /** @type {\"groupEnd\"} */\n \"groupEnd\",\n // [label]\n profile:\n /** @type {\"profile\"} */\n \"profile\",\n // [profileName]\n profileEnd:\n /** @type {\"profileEnd\"} */\n \"profileEnd\",\n // [profileName]\n time:\n /** @type {\"time\"} */\n \"time\",\n // name, time as [seconds, nanoseconds]\n clear:\n /** @type {\"clear\"} */\n \"clear\",\n // no arguments\n status:\n /** @type {\"status\"} */\n \"status\" // message, arguments\n\n});\nexports.LogType = LogType;\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\n\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n\n return WebpackLogger;\n}();\n\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n\n\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace( // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n\n if (typeof item === \"function\") {\n return item;\n }\n\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n/**\n * @enum {number}\n */\n\n\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] :\n /** @type {FilterItemTypes[]} */\n [].concat(debug).map(filterToFunction);\n /** @type {number} */\n\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n\n switch (type) {\n case LogType.debug:\n if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n }\n\n // falls through\n\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n\n break;\n\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n\n break;\n }\n\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n\n break;\n\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n\n break;\n\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n/** @type {createConsoleLogger.LoggerOptions} */\n\n\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n\n\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\n\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;","// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\nimport ansiHTML from \"ansi-html-community\";\nimport { encode } from \"html-entities\";\nvar colors = {\n reset: [\"transparent\", \"transparent\"],\n black: \"181818\",\n red: \"E36049\",\n green: \"B3CB74\",\n yellow: \"FFD080\",\n blue: \"7CAFC2\",\n magenta: \"7FACCA\",\n cyan: \"C3C2EF\",\n lightgrey: \"EBE7E3\",\n darkgrey: \"6D7891\"\n};\n/** @type {HTMLIFrameElement | null | undefined} */\n\nvar iframeContainerElement;\n/** @type {HTMLDivElement | null | undefined} */\n\nvar containerElement;\n/** @type {Array<(element: HTMLDivElement) => void>} */\n\nvar onLoadQueue = [];\n/** @type {TrustedTypePolicy | undefined} */\n\nvar overlayTrustedTypesPolicy;\nansiHTML.setColors(colors);\n/**\n * @param {string | null} trustedTypesPolicyName\n */\n\nfunction createContainer(trustedTypesPolicyName) {\n // Enable Trusted Types if they are available in the current browser.\n if (window.trustedTypes) {\n overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || \"webpack-dev-server#overlay\", {\n createHTML: function createHTML(value) {\n return value;\n }\n });\n }\n\n iframeContainerElement = document.createElement(\"iframe\");\n iframeContainerElement.id = \"webpack-dev-server-client-overlay\";\n iframeContainerElement.src = \"about:blank\";\n iframeContainerElement.style.position = \"fixed\";\n iframeContainerElement.style.left = 0;\n iframeContainerElement.style.top = 0;\n iframeContainerElement.style.right = 0;\n iframeContainerElement.style.bottom = 0;\n iframeContainerElement.style.width = \"100vw\";\n iframeContainerElement.style.height = \"100vh\";\n iframeContainerElement.style.border = \"none\";\n iframeContainerElement.style.zIndex = 9999999999;\n\n iframeContainerElement.onload = function () {\n containerElement =\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.createElement(\"div\");\n containerElement.id = \"webpack-dev-server-client-overlay-div\";\n containerElement.style.position = \"fixed\";\n containerElement.style.boxSizing = \"border-box\";\n containerElement.style.left = 0;\n containerElement.style.top = 0;\n containerElement.style.right = 0;\n containerElement.style.bottom = 0;\n containerElement.style.width = \"100vw\";\n containerElement.style.height = \"100vh\";\n containerElement.style.backgroundColor = \"rgba(0, 0, 0, 0.85)\";\n containerElement.style.color = \"#E8E8E8\";\n containerElement.style.fontFamily = \"Menlo, Consolas, monospace\";\n containerElement.style.fontSize = \"large\";\n containerElement.style.padding = \"2rem\";\n containerElement.style.lineHeight = \"1.2\";\n containerElement.style.whiteSpace = \"pre-wrap\";\n containerElement.style.overflow = \"auto\";\n var headerElement = document.createElement(\"span\");\n headerElement.innerText = \"Compiled with problems:\";\n var closeButtonElement = document.createElement(\"button\");\n closeButtonElement.innerText = \"X\";\n closeButtonElement.style.background = \"transparent\";\n closeButtonElement.style.border = \"none\";\n closeButtonElement.style.fontSize = \"20px\";\n closeButtonElement.style.fontWeight = \"bold\";\n closeButtonElement.style.color = \"white\";\n closeButtonElement.style.cursor = \"pointer\";\n closeButtonElement.style.cssFloat = \"right\"; // @ts-ignore\n\n closeButtonElement.style.styleFloat = \"right\";\n closeButtonElement.addEventListener(\"click\", function () {\n hide();\n });\n containerElement.appendChild(headerElement);\n containerElement.appendChild(closeButtonElement);\n containerElement.appendChild(document.createElement(\"br\"));\n containerElement.appendChild(document.createElement(\"br\"));\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.body.appendChild(containerElement);\n onLoadQueue.forEach(function (onLoad) {\n onLoad(\n /** @type {HTMLDivElement} */\n containerElement);\n });\n onLoadQueue = [];\n /** @type {HTMLIFrameElement} */\n\n iframeContainerElement.onload = null;\n };\n\n document.body.appendChild(iframeContainerElement);\n}\n/**\n * @param {(element: HTMLDivElement) => void} callback\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction ensureOverlayExists(callback, trustedTypesPolicyName) {\n if (containerElement) {\n // Everything is ready, call the callback right away.\n callback(containerElement);\n return;\n }\n\n onLoadQueue.push(callback);\n\n if (iframeContainerElement) {\n return;\n }\n\n createContainer(trustedTypesPolicyName);\n} // Successful compilation.\n\n\nfunction hide() {\n if (!iframeContainerElement) {\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(iframeContainerElement);\n iframeContainerElement = null;\n containerElement = null;\n}\n/**\n * @param {string} type\n * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item\n * @returns {{ header: string, body: string }}\n */\n\n\nfunction formatProblem(type, item) {\n var header = type === \"warning\" ? \"WARNING\" : \"ERROR\";\n var body = \"\";\n\n if (typeof item === \"string\") {\n body += item;\n } else {\n var file = item.file || \"\"; // eslint-disable-next-line no-nested-ternary\n\n var moduleName = item.moduleName ? item.moduleName.indexOf(\"!\") !== -1 ? \"\".concat(item.moduleName.replace(/^(\\s|\\S)*!/, \"\"), \" (\").concat(item.moduleName, \")\") : \"\".concat(item.moduleName) : \"\";\n var loc = item.loc;\n header += \"\".concat(moduleName || file ? \" in \".concat(moduleName ? \"\".concat(moduleName).concat(file ? \" (\".concat(file, \")\") : \"\") : file).concat(loc ? \" \".concat(loc) : \"\") : \"\");\n body += item.message || \"\";\n }\n\n return {\n header: header,\n body: body\n };\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n/**\n * @param {string} type\n * @param {Array} messages\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction show(type, messages, trustedTypesPolicyName) {\n ensureOverlayExists(function () {\n messages.forEach(function (message) {\n var entryElement = document.createElement(\"div\");\n var typeElement = document.createElement(\"span\");\n\n var _formatProblem = formatProblem(type, message),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n typeElement.innerText = header;\n typeElement.style.color = \"#\".concat(colors.red); // Make it look similar to our terminal.\n\n var text = ansiHTML(encode(body));\n var messageTextNode = document.createElement(\"div\");\n messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text;\n entryElement.appendChild(typeElement);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(messageTextNode);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n /** @type {HTMLDivElement} */\n\n containerElement.appendChild(entryElement);\n });\n }, trustedTypesPolicyName);\n}\n\nexport { formatProblem, show, hide };","/* global __webpack_dev_server_client__ */\nimport WebSocketClient from \"./clients/WebSocketClient.js\";\nimport { log } from \"./utils/log.js\"; // this WebsocketClient is here as a default fallback, in case the client is not injected\n\n/* eslint-disable camelcase */\n\nvar Client = // eslint-disable-next-line no-nested-ternary\ntypeof __webpack_dev_server_client__ !== \"undefined\" ? typeof __webpack_dev_server_client__.default !== \"undefined\" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : WebSocketClient;\n/* eslint-enable camelcase */\n\nvar retries = 0;\nvar maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance\n// It is mutable to enforce singleton\n// eslint-disable-next-line import/no-mutable-exports\n\nexport var client = null;\n/**\n * @param {string} url\n * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers\n * @param {number} [reconnect]\n */\n\nvar socket = function initSocket(url, handlers, reconnect) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n\n if (typeof reconnect !== \"undefined\") {\n maxRetries = reconnect;\n }\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries < maxRetries) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n log.info(\"Trying to reconnect...\");\n setTimeout(function () {\n socket(url, handlers, reconnect);\n }, retryInMs);\n }\n });\n client.onMessage(\n /**\n * @param {any} data\n */\n function (data) {\n var message = JSON.parse(data);\n\n if (handlers[message.type]) {\n handlers[message.type](message.data, message.params);\n }\n });\n};\n\nexport default socket;","/**\n * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL\n * @returns {string}\n */\nfunction format(objURL) {\n var protocol = objURL.protocol || \"\";\n\n if (protocol && protocol.substr(-1) !== \":\") {\n protocol += \":\";\n }\n\n var auth = objURL.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var host = \"\";\n\n if (objURL.hostname) {\n host = auth + (objURL.hostname.indexOf(\":\") === -1 ? objURL.hostname : \"[\".concat(objURL.hostname, \"]\"));\n\n if (objURL.port) {\n host += \":\".concat(objURL.port);\n }\n }\n\n var pathname = objURL.pathname || \"\";\n\n if (objURL.slashes) {\n host = \"//\".concat(host || \"\");\n\n if (pathname && pathname.charAt(0) !== \"/\") {\n pathname = \"/\".concat(pathname);\n }\n } else if (!host) {\n host = \"\";\n }\n\n var search = objURL.search || \"\";\n\n if (search && search.charAt(0) !== \"?\") {\n search = \"?\".concat(search);\n }\n\n var hash = objURL.hash || \"\";\n\n if (hash && hash.charAt(0) !== \"#\") {\n hash = \"#\".concat(hash);\n }\n\n pathname = pathname.replace(/[?#]/g,\n /**\n * @param {string} match\n * @returns {string}\n */\n function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace(\"#\", \"%23\");\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n/**\n * @param {URL & { fromCurrentScript?: boolean }} parsedURL\n * @returns {string}\n */\n\n\nfunction createSocketURL(parsedURL) {\n var hostname = parsedURL.hostname; // Node.js module parses it as `::`\n // `new URL(urlString, [baseURLString])` parses it as '[::]'\n\n var isInAddrAny = hostname === \"0.0.0.0\" || hostname === \"::\" || hostname === \"[::]\"; // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf(\"http\") === 0) {\n hostname = self.location.hostname;\n }\n\n var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets.\n\n if (socketURLProtocol === \"auto:\" || hostname && isInAddrAny && self.location.protocol === \"https:\") {\n socketURLProtocol = self.location.protocol;\n }\n\n socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, \"ws\");\n var socketURLAuth = \"\"; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property\n // Parse authentication credentials in case we need them\n\n if (parsedURL.username) {\n socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username,\n // we only include password if the username is not empty.\n\n if (parsedURL.password) {\n // Result: :\n socketURLAuth = socketURLAuth.concat(\":\", parsedURL.password);\n }\n } // In case the host is a raw IPv6 address, it can be enclosed in\n // the brackets as the brackets are needed in the final URL string.\n // Need to remove those as url.format blindly adds its own set of brackets\n // if the host string contains colons. That would lead to non-working\n // double brackets (e.g. [[::]]) host\n //\n // All of these web socket url params are optionally passed in through resourceQuery,\n // so we need to fall back to the default if they are not provided\n\n\n var socketURLHostname = (hostname || self.location.hostname || \"localhost\").replace(/^\\[(.*)\\]$/, \"$1\");\n var socketURLPort = parsedURL.port;\n\n if (!socketURLPort || socketURLPort === \"0\") {\n socketURLPort = self.location.port;\n } // If path is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n\n\n var socketURLPathname = \"/ws\";\n\n if (parsedURL.pathname && !parsedURL.fromCurrentScript) {\n socketURLPathname = parsedURL.pathname;\n }\n\n return format({\n protocol: socketURLProtocol,\n auth: socketURLAuth,\n hostname: socketURLHostname,\n port: socketURLPort,\n pathname: socketURLPathname,\n slashes: true\n });\n}\n\nexport default createSocketURL;","/**\n * @returns {string}\n */\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute(\"src\");\n } // Fallback to getting all scripts running in the document.\n\n\n var scriptElements = document.scripts || [];\n var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) {\n return element.getAttribute(\"src\");\n });\n\n if (scriptElementsWithSrc.length > 0) {\n var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1];\n return currentScript.getAttribute(\"src\");\n } // Fail as there was no script to use.\n\n\n throw new Error(\"[webpack-dev-server] Failed to get current script source.\");\n}\n\nexport default getCurrentScriptSource;","import logger from \"../modules/logger/index.js\";\nvar name = \"webpack-dev-server\"; // default level is set on the client side, so it does not need\n// to be set by the CLI or API\n\nvar defaultLevel = \"info\"; // options new options, merge with old options\n\n/**\n * @param {false | true | \"none\" | \"error\" | \"warn\" | \"info\" | \"log\" | \"verbose\"} level\n * @returns {void}\n */\n\nfunction setLogLevel(level) {\n logger.configureDefaultLogger({\n level: level\n });\n}\n\nsetLogLevel(defaultLevel);\nvar log = logger.getLogger(name);\nexport { log, setLogLevel };","import getCurrentScriptSource from \"./getCurrentScriptSource.js\";\n/**\n * @param {string} resourceQuery\n * @returns {{ [key: string]: string | boolean }}\n */\n\nfunction parseURL(resourceQuery) {\n /** @type {{ [key: string]: string }} */\n var options = {};\n\n if (typeof resourceQuery === \"string\" && resourceQuery !== \"\") {\n var searchParams = resourceQuery.slice(1).split(\"&\");\n\n for (var i = 0; i < searchParams.length; i++) {\n var pair = searchParams[i].split(\"=\");\n options[pair[0]] = decodeURIComponent(pair[1]);\n }\n } else {\n // Else, get the url from the ', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n","const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng || zc[0].lon},\n {lat: zc[1].lat, lon: zc[1].lng || zc[1].lon},\n {lat: zc[3].lat, lon: zc[3].lng || zc[3].lon},\n {lat: zc[2].lat, lon: zc[2].lng || zc[2].lon},\n ];\n\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n tooltipText: layer.getTooltipText(),\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n return json;\n },\n\n // generateExportJson(allImages = false) {\n // const json = {};\n // json.images = [];\n\n // this.eachLayer(function(layer) {\n // if (allImages || this.isCollected(layer)) {\n // const sections = layer._image.src.split('/');\n // const filename = sections[sections.length - 1];\n // const zc = layer.getCorners();\n\n // const corners = [\n // {lat: zc[0].lat, lon: zc[0].lng},\n // {lat: zc[1].lat, lon: zc[1].lng},\n // {lat: zc[3].lat, lon: zc[3].lng},\n // {lat: zc[2].lat, lon: zc[2].lng},\n // ];\n\n\n // json.images.push({\n // id: layer._leaflet_id,\n // src: layer._image.src,\n // width: layer._image.width,\n // height: layer._image.height,\n // tooltipText: layer.getTooltipText(),\n // image_file_name: filename,\n // nodes: corners,\n // cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n // });\n // }\n // }, this);\n\n // json.images = json.images.reverse();\n // json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n // return json;\n // },\n\n // OPTION 3\n // generateExportJson(allImages = false) {\n // const json = {};\n // json.images = [];\n\n // this.eachLayer(function(layer) {\n // if (allImages || this.isCollected(layer)) {\n // let corners = [];\n // const sections = layer._image.src.split('/');\n // const filename = sections[sections.length - 1];\n // const zc = layer.getCorners();\n\n // // supports longitude written as 'lon' or 'lng'\n // for (i = 0; i < zc.length; i++) {\n // if (zc[0].lng) {\n // corners.push({lat: zc[i].lat, lon: zc[i].lng});\n // } else if (zc[0].lon) {\n // corners.push({lat: zc[i].lat, lon: zc[i].lon});\n // }\n // }\n\n // json.images.push({\n // id: layer._leaflet_id,\n // src: layer._image.src,\n // width: layer._image.width,\n // height: layer._image.height,\n // tooltipText: layer.getTooltipText(),\n // image_file_name: filename,\n // nodes: corners,\n // cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n // });\n // }\n // }, this);\n\n // json.images = json.images.reverse();\n // json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n // return json;\n // },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n interactive: true,\n tooltipText: '',\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n\n this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar named_references_1 = require(\"./named-references\");\nvar numeric_unicode_map_1 = require(\"./numeric-unicode-map\");\nvar surrogate_pairs_1 = require(\"./surrogate-pairs\");\nvar allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 });\nvar encodeRegExps = {\n specialChars: /[<>'\"&]/g,\n nonAscii: /(?:[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n nonAsciiPrintable: /(?:[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n extensive: /(?:[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g\n};\nvar defaultEncodeOptions = {\n mode: 'specialChars',\n level: 'all',\n numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nfunction encode(text, _a) {\n var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n if (!text) {\n return '';\n }\n var encodeRegExp = encodeRegExps[mode];\n var references = allNamedReferences[level].characters;\n var isHex = numeric === 'hexadecimal';\n encodeRegExp.lastIndex = 0;\n var _b = encodeRegExp.exec(text);\n var _c;\n if (_b) {\n _c = '';\n var _d = 0;\n do {\n if (_d !== _b.index) {\n _c += text.substring(_d, _b.index);\n }\n var _e = _b[0];\n var result_1 = references[_e];\n if (!result_1) {\n var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0);\n result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';';\n }\n _c += result_1;\n _d = _b.index + _e.length;\n } while ((_b = encodeRegExp.exec(text)));\n if (_d !== text.length) {\n _c += text.substring(_d);\n }\n }\n else {\n _c =\n text;\n }\n return _c;\n}\nexports.encode = encode;\nvar defaultDecodeOptions = {\n scope: 'body',\n level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n xml: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.xml\n },\n html4: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html4\n },\n html5: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html5\n }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n level: 'all'\n};\n/** Decodes a single entity */\nfunction decodeEntity(entity, _a) {\n var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b;\n if (!entity) {\n return '';\n }\n var _b = entity;\n var decodeEntityLastChar_1 = entity[entity.length - 1];\n if (false\n && decodeEntityLastChar_1 === '=') {\n _b =\n entity;\n }\n else if (false\n && decodeEntityLastChar_1 !== ';') {\n _b =\n entity;\n }\n else {\n var decodeResultByReference_1 = allNamedReferences[level].entities[entity];\n if (decodeResultByReference_1) {\n _b = decodeResultByReference_1;\n }\n else if (entity[0] === '&' && entity[1] === '#') {\n var decodeSecondChar_1 = entity[2];\n var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X'\n ? parseInt(entity.substr(3), 16)\n : parseInt(entity.substr(2));\n _b =\n decodeCode_1 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_1 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_1)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1);\n }\n }\n return _b;\n}\nexports.decodeEntity = decodeEntity;\n/** Decodes all entities in the text */\nfunction decode(text, _a) {\n var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b;\n if (!text) {\n return '';\n }\n var decodeRegExp = decodeRegExps[level][scope];\n var references = allNamedReferences[level].entities;\n var isAttribute = scope === 'attribute';\n var isStrict = scope === 'strict';\n decodeRegExp.lastIndex = 0;\n var replaceMatch_1 = decodeRegExp.exec(text);\n var replaceResult_1;\n if (replaceMatch_1) {\n replaceResult_1 = '';\n var replaceLastIndex_1 = 0;\n do {\n if (replaceLastIndex_1 !== replaceMatch_1.index) {\n replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index);\n }\n var replaceInput_1 = replaceMatch_1[0];\n var decodeResult_1 = replaceInput_1;\n var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1];\n if (isAttribute\n && decodeEntityLastChar_2 === '=') {\n decodeResult_1 = replaceInput_1;\n }\n else if (isStrict\n && decodeEntityLastChar_2 !== ';') {\n decodeResult_1 = replaceInput_1;\n }\n else {\n var decodeResultByReference_2 = references[replaceInput_1];\n if (decodeResultByReference_2) {\n decodeResult_1 = decodeResultByReference_2;\n }\n else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') {\n var decodeSecondChar_2 = replaceInput_1[2];\n var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X'\n ? parseInt(replaceInput_1.substr(3), 16)\n : parseInt(replaceInput_1.substr(2));\n decodeResult_1 =\n decodeCode_2 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_2 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_2)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2);\n }\n }\n replaceResult_1 += decodeResult_1;\n replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length;\n } while ((replaceMatch_1 = decodeRegExp.exec(text)));\n if (replaceLastIndex_1 !== text.length) {\n replaceResult_1 += text.substring(replaceLastIndex_1);\n }\n }\n else {\n replaceResult_1 =\n text;\n }\n return replaceResult_1;\n}\nexports.decode = decode;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.bodyRegExps={xml:/&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\",\"&\":\"&\"},characters:{\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"&\":\"&\"}},html4:{entities:{\"'\":\"'\",\" \":\" \",\" \":\" \",\"¡\":\"¡\",\"¡\":\"¡\",\"¢\":\"¢\",\"¢\":\"¢\",\"£\":\"£\",\"£\":\"£\",\"¤\":\"¤\",\"¤\":\"¤\",\"¥\":\"¥\",\"¥\":\"¥\",\"¦\":\"¦\",\"¦\":\"¦\",\"§\":\"§\",\"§\":\"§\",\"¨\":\"¨\",\"¨\":\"¨\",\"©\":\"©\",\"©\":\"©\",\"ª\":\"ª\",\"ª\":\"ª\",\"«\":\"«\",\"«\":\"«\",\"¬\":\"¬\",\"¬\":\"¬\",\"­\":\"­\",\"­\":\"­\",\"®\":\"®\",\"®\":\"®\",\"¯\":\"¯\",\"¯\":\"¯\",\"°\":\"°\",\"°\":\"°\",\"±\":\"±\",\"±\":\"±\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"´\":\"´\",\"´\":\"´\",\"µ\":\"µ\",\"µ\":\"µ\",\"¶\":\"¶\",\"¶\":\"¶\",\"·\":\"·\",\"·\":\"·\",\"¸\":\"¸\",\"¸\":\"¸\",\"¹\":\"¹\",\"¹\":\"¹\",\"º\":\"º\",\"º\":\"º\",\"»\":\"»\",\"»\":\"»\",\"¼\":\"¼\",\"¼\":\"¼\",\"½\":\"½\",\"½\":\"½\",\"¾\":\"¾\",\"¾\":\"¾\",\"¿\":\"¿\",\"¿\":\"¿\",\"À\":\"À\",\"À\":\"À\",\"Á\":\"Á\",\"Á\":\"Á\",\"Â\":\"Â\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"È\":\"È\",\"È\":\"È\",\"É\":\"É\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"×\":\"×\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"ß\":\"ß\",\"à\":\"à\",\"à\":\"à\",\"á\":\"á\",\"á\":\"á\",\"â\":\"â\",\"â\":\"â\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"å\":\"å\",\"å\":\"å\",\"æ\":\"æ\",\"æ\":\"æ\",\"ç\":\"ç\",\"ç\":\"ç\",\"è\":\"è\",\"è\":\"è\",\"é\":\"é\",\"é\":\"é\",\"ê\":\"ê\",\"ê\":\"ê\",\"ë\":\"ë\",\"ë\":\"ë\",\"ì\":\"ì\",\"ì\":\"ì\",\"í\":\"í\",\"í\":\"í\",\"î\":\"î\",\"î\":\"î\",\"ï\":\"ï\",\"ï\":\"ï\",\"ð\":\"ð\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ò\":\"ò\",\"ó\":\"ó\",\"ó\":\"ó\",\"ô\":\"ô\",\"ô\":\"ô\",\"õ\":\"õ\",\"õ\":\"õ\",\"ö\":\"ö\",\"ö\":\"ö\",\"÷\":\"÷\",\"÷\":\"÷\",\"ø\":\"ø\",\"ø\":\"ø\",\"ù\":\"ù\",\"ù\":\"ù\",\"ú\":\"ú\",\"ú\":\"ú\",\"û\":\"û\",\"û\":\"û\",\"ü\":\"ü\",\"ü\":\"ü\",\"ý\":\"ý\",\"ý\":\"ý\",\"þ\":\"þ\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\""\":'\"',\""\":'\"',\"&\":\"&\",\"&\":\"&\",\"<\":\"<\",\"<\":\"<\",\">\":\">\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"⟨\":\"〈\",\"⟩\":\"〉\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"},characters:{\"'\":\"'\",\" \":\" \",\"¡\":\"¡\",\"¢\":\"¢\",\"£\":\"£\",\"¤\":\"¤\",\"¥\":\"¥\",\"¦\":\"¦\",\"§\":\"§\",\"¨\":\"¨\",\"©\":\"©\",\"ª\":\"ª\",\"«\":\"«\",\"¬\":\"¬\",\"­\":\"­\",\"®\":\"®\",\"¯\":\"¯\",\"°\":\"°\",\"±\":\"±\",\"²\":\"²\",\"³\":\"³\",\"´\":\"´\",\"µ\":\"µ\",\"¶\":\"¶\",\"·\":\"·\",\"¸\":\"¸\",\"¹\":\"¹\",\"º\":\"º\",\"»\":\"»\",\"¼\":\"¼\",\"½\":\"½\",\"¾\":\"¾\",\"¿\":\"¿\",\"À\":\"À\",\"Á\":\"Á\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"È\":\"È\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"à\":\"à\",\"á\":\"á\",\"â\":\"â\",\"ã\":\"ã\",\"ä\":\"ä\",\"å\":\"å\",\"æ\":\"æ\",\"ç\":\"ç\",\"è\":\"è\",\"é\":\"é\",\"ê\":\"ê\",\"ë\":\"ë\",\"ì\":\"ì\",\"í\":\"í\",\"î\":\"î\",\"ï\":\"ï\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ó\":\"ó\",\"ô\":\"ô\",\"õ\":\"õ\",\"ö\":\"ö\",\"÷\":\"÷\",\"ø\":\"ø\",\"ù\":\"ù\",\"ú\":\"ú\",\"û\":\"û\",\"ü\":\"ü\",\"ý\":\"ý\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",'\"':\""\",\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"〈\":\"⟨\",\"〉\":\"⟩\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"}},html5:{entities:{\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"&\":\"&\",\"&\":\"&\",\"Á\":\"Á\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"ℬ\":\"ℬ\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"ℭ\":\"ℭ\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"ⅅ\":\"ⅅ\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"∯\":\"∯\",\"¨\":\"¨\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⫤\":\"⫤\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"⇓\":\"⇓\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"É\":\"É\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"ℋ\":\"ℋ\",\"Ħ\":\"Ħ\",\"≎\":\"≎\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"ℑ\":\"ℑ\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"⇒\":\"⇒\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"ℒ\":\"ℒ\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"ℳ\":\"ℳ\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"≫\":\"≫\",\"≪\":\"≪\",\" \":\"\\n\",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℌ\":\"ℌ\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∷\":\"∷\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",\""\":'\"',\""\":'\"',\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"ℜ\":\"ℜ\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"⇒\":\"⇒\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↓\":\"↓\",\"←\":\"←\",\"→\":\"→\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∋\":\"∋\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⋑\":\"⋑\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\" \":\"\\t\",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",\"_\":\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"↑\":\"↑\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"​\":\"​\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"â\":\"â\",\"´\":\"´\",\"´\":\"´\",\"а\":\"а\",\"æ\":\"æ\",\"æ\":\"æ\",\"⁡\":\"⁡\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"&\":\"&\",\"&\":\"&\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∠\":\"∠\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"Å\":\"Å\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"≈\":\"≈\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"≈\":\"≈\",\"≊\":\"≊\",\"å\":\"å\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"≈\":\"≈\",\"≍\":\"≍\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"∳\":\"∳\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⌅\":\"⌅\",\"⎵\":\"⎵\",\"⎶\":\"⎶\",\"≌\":\"≌\",\"б\":\"б\",\"„\":\"„\",\"∵\":\"∵\",\"∵\":\"∵\",\"⦰\":\"⦰\",\"϶\":\"϶\",\"ℬ\":\"ℬ\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▪\":\"▪\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⊥\":\"⊥\",\"⊥\":\"⊥\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"─\":\"─\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"‵\":\"‵\",\"˘\":\"˘\",\"¦\":\"¦\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"\\":\"\\\\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"•\":\"•\",\"≎\":\"≎\",\"⪮\":\"⪮\",\"≏\":\"≏\",\"≏\":\"≏\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"ˇ\":\"ˇ\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"¸\":\"¸\",\"¸\":\"¸\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"¢\":\"¢\",\"·\":\"·\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"®\":\"®\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"≗\":\"≗\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\"♣\":\"♣\",\":\":\":\",\"≔\":\"≔\",\"≔\":\"≔\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"∘\":\"∘\",\"∁\":\"∁\",\"ℂ\":\"ℂ\",\"≅\":\"≅\",\"⩭\":\"⩭\",\"∮\":\"∮\",\"𝕔\":\"𝕔\",\"∐\":\"∐\",\"©\":\"©\",\"©\":\"©\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"¤\":\"¤\",\"↶\":\"↶\",\"↷\":\"↷\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"∲\":\"∲\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⇓\":\"⇓\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"↓\":\"↓\",\"‐\":\"‐\",\"⊣\":\"⊣\",\"⤏\":\"⤏\",\"˝\":\"˝\",\"ď\":\"ď\",\"д\":\"д\",\"ⅆ\":\"ⅆ\",\"‡\":\"‡\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⋄\":\"⋄\",\"⋄\":\"⋄\",\"♦\":\"♦\",\"♦\":\"♦\",\"¨\":\"¨\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"÷\":\"÷\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",\"$\":\"$\",\"𝕕\":\"𝕕\",\"˙\":\"˙\",\"≐\":\"≐\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌆\":\"⌆\",\"↓\":\"↓\",\"⇊\":\"⇊\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⤐\":\"⤐\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"▾\":\"▾\",\"⇵\":\"⇵\",\"⥯\":\"⥯\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"⩷\":\"⩷\",\"≑\":\"≑\",\"é\":\"é\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\"∅\":\"∅\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"≖\":\"≖\",\"≕\":\"≕\",\"≂\":\"≂\",\"⪖\":\"⪖\",\"⪕\":\"⪕\",\"=\":\"=\",\"≟\":\"≟\",\"≡\":\"≡\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"≐\":\"≐\",\"≂\":\"≂\",\"η\":\"η\",\"ð\":\"ð\",\"ð\":\"ð\",\"ë\":\"ë\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"∃\":\"∃\",\"ℰ\":\"ℰ\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",\"fj\":\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"∀\":\"∀\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"≧\":\"≧\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"ϝ\":\"ϝ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≥\":\"≥\",\"≧\":\"≧\",\"⩾\":\"⩾\",\"⩾\":\"⩾\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"≫\":\"≫\",\"⋙\":\"⋙\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"≷\":\"≷\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⪈\":\"⪈\",\"≩\":\"≩\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"`\":\"`\",\"ℊ\":\"ℊ\",\"≳\":\"≳\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\">\":\">\",\">\":\">\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⪆\":\"⪆\",\"⥸\":\"⥸\",\"⋗\":\"⋗\",\"⋛\":\"⋛\",\"⪌\":\"⪌\",\"≷\":\"≷\",\"≳\":\"≳\",\"≩︀\":\"≩︀\",\"≩︀\":\"≩︀\",\"⇔\":\"⇔\",\" \":\" \",\"½\":\"½\",\"ℋ\":\"ℋ\",\"ъ\":\"ъ\",\"↔\":\"↔\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ℏ\":\"ℏ\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"‐\":\"‐\",\"í\":\"í\",\"í\":\"í\",\"⁣\":\"⁣\",\"î\":\"î\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"¡\":\"¡\",\"⇔\":\"⇔\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"ì\":\"ì\",\"ⅈ\":\"ⅈ\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ℑ\":\"ℑ\",\"ℐ\":\"ℐ\",\"ℑ\":\"ℑ\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"∈\":\"∈\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"ı\":\"ı\",\"∫\":\"∫\",\"⊺\":\"⊺\",\"ℤ\":\"ℤ\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"⨼\":\"⨼\",\"¿\":\"¿\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"∈\":\"∈\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"∈\":\"∈\",\"⁢\":\"⁢\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⇚\":\"⇚\",\"⇐\":\"⇐\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"≦\":\"≦\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"ℒ\":\"ℒ\",\"λ\":\"λ\",\"⟨\":\"⟨\",\"⦑\":\"⦑\",\"⟨\":\"⟨\",\"⪅\":\"⪅\",\"«\":\"«\",\"«\":\"«\",\"←\":\"←\",\"⇤\":\"⇤\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↩\":\"↩\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"⌈\":\"⌈\",\"{\":\"{\",\"л\":\"л\",\"⤶\":\"⤶\",\"“\":\"“\",\"„\":\"„\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"←\":\"←\",\"↢\":\"↢\",\"↽\":\"↽\",\"↼\":\"↼\",\"⇇\":\"⇇\",\"↔\":\"↔\",\"⇆\":\"⇆\",\"⇋\":\"⇋\",\"↭\":\"↭\",\"⋋\":\"⋋\",\"⋚\":\"⋚\",\"≤\":\"≤\",\"≦\":\"≦\",\"⩽\":\"⩽\",\"⩽\":\"⩽\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⪅\":\"⪅\",\"⋖\":\"⋖\",\"⋚\":\"⋚\",\"⪋\":\"⪋\",\"≶\":\"≶\",\"≲\":\"≲\",\"⥼\":\"⥼\",\"⌊\":\"⌊\",\"𝔩\":\"𝔩\",\"≶\":\"≶\",\"⪑\":\"⪑\",\"↽\":\"↽\",\"↼\":\"↼\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"≪\":\"≪\",\"⇇\":\"⇇\",\"⌞\":\"⌞\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⪇\":\"⪇\",\"≨\":\"≨\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟦\":\"⟦\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟼\":\"⟼\",\"⟶\":\"⟶\",\"↫\":\"↫\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"_\":\"_\",\"◊\":\"◊\",\"◊\":\"◊\",\"⧫\":\"⧫\",\"(\":\"(\",\"⦓\":\"⦓\",\"⇆\":\"⇆\",\"⌟\":\"⌟\",\"⇋\":\"⇋\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"↰\":\"↰\",\"≲\":\"≲\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"[\":\"[\",\"‘\":\"‘\",\"‚\":\"‚\",\"ł\":\"ł\",\"<\":\"<\",\"<\":\"<\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋖\":\"⋖\",\"⋋\":\"⋋\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"◂\":\"◂\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"✠\":\"✠\",\"↦\":\"↦\",\"↦\":\"↦\",\"↧\":\"↧\",\"↤\":\"↤\",\"↥\":\"↥\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"∡\":\"∡\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"µ\":\"µ\",\"∣\":\"∣\",\"*\":\"*\",\"⫰\":\"⫰\",\"·\":\"·\",\"·\":\"·\",\"−\":\"−\",\"⊟\":\"⊟\",\"∸\":\"∸\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"…\":\"…\",\"∓\":\"∓\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"∓\":\"∓\",\"𝓂\":\"𝓂\",\"∾\":\"∾\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"≫̸\":\"≫̸\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"≪̸\":\"≪̸\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"∇\":\"∇\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"≉\":\"≉\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"≉\":\"≉\",\"♮\":\"♮\",\"♮\":\"♮\",\"ℕ\":\"ℕ\",\" \":\" \",\" \":\" \",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"≇\":\"≇\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"≠\":\"≠\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"↗\":\"↗\",\"↗\":\"↗\",\"≐̸\":\"≐̸\",\"≢\":\"≢\",\"⤨\":\"⤨\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"∄\":\"∄\",\"𝔫\":\"𝔫\",\"≧̸\":\"≧̸\",\"≱\":\"≱\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"⩾̸\":\"⩾̸\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≯\":\"≯\",\"≯\":\"≯\",\"⇎\":\"⇎\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"∋\":\"∋\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"∋\":\"∋\",\"њ\":\"њ\",\"⇍\":\"⇍\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"≰\":\"≰\",\"↚\":\"↚\",\"↮\":\"↮\",\"≰\":\"≰\",\"≦̸\":\"≦̸\",\"⩽̸\":\"⩽̸\",\"⩽̸\":\"⩽̸\",\"≮\":\"≮\",\"≴\":\"≴\",\"≮\":\"≮\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"∤\":\"∤\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"¬\":\"¬\",\"∉\":\"∉\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"∉\":\"∉\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"∌\":\"∌\",\"∌\":\"∌\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"∦\":\"∦\",\"∦\":\"∦\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"⊀\":\"⊀\",\"⋠\":\"⋠\",\"⪯̸\":\"⪯̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⇏\":\"⇏\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"↛\":\"↛\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"⊁\":\"⊁\",\"⋡\":\"⋡\",\"⪰̸\":\"⪰̸\",\"𝓃\":\"𝓃\",\"∤\":\"∤\",\"∦\":\"∦\",\"≁\":\"≁\",\"≄\":\"≄\",\"≄\":\"≄\",\"∤\":\"∤\",\"∦\":\"∦\",\"⋢\":\"⋢\",\"⋣\":\"⋣\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊈\":\"⊈\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⫅̸\":\"⫅̸\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"⊉\":\"⊉\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"⫆̸\":\"⫆̸\",\"≹\":\"≹\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"≸\":\"≸\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"↖\":\"↖\",\"↖\":\"↖\",\"⤧\":\"⤧\",\"Ⓢ\":\"Ⓢ\",\"ó\":\"ó\",\"ó\":\"ó\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"ô\":\"ô\",\"ô\":\"ô\",\"о\":\"о\",\"⊝\":\"⊝\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⊙\":\"⊙\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"Ω\":\"Ω\",\"∮\":\"∮\",\"↺\":\"↺\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"‾\":\"‾\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"⊖\":\"⊖\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"⊕\":\"⊕\",\"∨\":\"∨\",\"↻\":\"↻\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"ª\":\"ª\",\"º\":\"º\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ℴ\":\"ℴ\",\"ø\":\"ø\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"õ\":\"õ\",\"⊗\":\"⊗\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"∥\":\"∥\",\"¶\":\"¶\",\"¶\":\"¶\",\"∥\":\"∥\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"∂\":\"∂\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"⊥\":\"⊥\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"ℳ\":\"ℳ\",\"☎\":\"☎\",\"π\":\"π\",\"⋔\":\"⋔\",\"ϖ\":\"ϖ\",\"ℏ\":\"ℏ\",\"ℎ\":\"ℎ\",\"ℏ\":\"ℏ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⊞\":\"⊞\",\"⨢\":\"⨢\",\"∔\":\"∔\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"±\":\"±\",\"±\":\"±\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"±\":\"±\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"£\":\"£\",\"≺\":\"≺\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"≺\":\"≺\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"≾\":\"≾\",\"′\":\"′\",\"ℙ\":\"ℙ\",\"⪵\":\"⪵\",\"⪹\":\"⪹\",\"⋨\":\"⋨\",\"∏\":\"∏\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"∝\":\"∝\",\"∝\":\"∝\",\"≾\":\"≾\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"⨌\":\"⨌\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"ℍ\":\"ℍ\",\"⨖\":\"⨖\",\"?\":\"?\",\"≟\":\"≟\",\""\":'\"',\""\":'\"',\"⇛\":\"⇛\",\"⇒\":\"⇒\",\"⤜\":\"⤜\",\"⤏\":\"⤏\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"√\":\"√\",\"⦳\":\"⦳\",\"⟩\":\"⟩\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"⟩\":\"⟩\",\"»\":\"»\",\"»\":\"»\",\"→\":\"→\",\"⥵\":\"⥵\",\"⇥\":\"⇥\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"↪\":\"↪\",\"↬\":\"↬\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"ℚ\":\"ℚ\",\"⤍\":\"⤍\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"⌉\":\"⌉\",\"}\":\"}\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"”\":\"”\",\"”\":\"”\",\"↳\":\"↳\",\"ℜ\":\"ℜ\",\"ℛ\":\"ℛ\",\"ℜ\":\"ℜ\",\"ℝ\":\"ℝ\",\"▭\":\"▭\",\"®\":\"®\",\"®\":\"®\",\"⥽\":\"⥽\",\"⌋\":\"⌋\",\"𝔯\":\"𝔯\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"→\":\"→\",\"↣\":\"↣\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"⇉\":\"⇉\",\"↝\":\"↝\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"≓\":\"≓\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⟧\":\"⟧\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"⇉\":\"⇉\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"↱\":\"↱\",\"]\":\"]\",\"’\":\"’\",\"’\":\"’\",\"⋌\":\"⋌\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"▸\":\"▸\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"‚\":\"‚\",\"≻\":\"≻\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"≿\":\"≿\",\"с\":\"с\",\"⋅\":\"⋅\",\"⊡\":\"⊡\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"⤥\":\"⤥\",\"↘\":\"↘\",\"↘\":\"↘\",\"§\":\"§\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"∖\":\"∖\",\"∖\":\"∖\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"⌢\":\"⌢\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"∣\":\"∣\",\"∥\":\"∥\",\"­\":\"­\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"ς\":\"ς\",\"∼\":\"∼\",\"⩪\":\"⩪\",\"≃\":\"≃\",\"≃\":\"≃\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"←\":\"←\",\"∖\":\"∖\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"∣\":\"∣\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"♠\":\"♠\",\"∥\":\"∥\",\"⊓\":\"⊓\",\"⊓︀\":\"⊓︀\",\"⊔\":\"⊔\",\"⊔︀\":\"⊔︀\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"□\":\"□\",\"□\":\"□\",\"▪\":\"▪\",\"▪\":\"▪\",\"→\":\"→\",\"𝓈\":\"𝓈\",\"∖\":\"∖\",\"⌣\":\"⌣\",\"⋆\":\"⋆\",\"☆\":\"☆\",\"★\":\"★\",\"ϵ\":\"ϵ\",\"ϕ\":\"ϕ\",\"¯\":\"¯\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⊆\":\"⊆\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⊂\":\"⊂\",\"⊆\":\"⊆\",\"⫅\":\"⫅\",\"⊊\":\"⊊\",\"⫋\":\"⫋\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"≻\":\"≻\",\"⪸\":\"⪸\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"⪺\":\"⪺\",\"⪶\":\"⪶\",\"⋩\":\"⋩\",\"≿\":\"≿\",\"∑\":\"∑\",\"♪\":\"♪\",\"¹\":\"¹\",\"¹\":\"¹\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"⊃\":\"⊃\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⊇\":\"⊇\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⫆\":\"⫆\",\"⊋\":\"⊋\",\"⫌\":\"⫌\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤦\":\"⤦\",\"↙\":\"↙\",\"↙\":\"↙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"⎴\":\"⎴\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⃛\":\"⃛\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"∴\":\"∴\",\"∴\":\"∴\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"ϑ\":\"ϑ\",\"≈\":\"≈\",\"∼\":\"∼\",\" \":\" \",\"≈\":\"≈\",\"∼\":\"∼\",\"þ\":\"þ\",\"þ\":\"þ\",\"˜\":\"˜\",\"×\":\"×\",\"×\":\"×\",\"⊠\":\"⊠\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"∭\":\"∭\",\"⤨\":\"⤨\",\"⊤\":\"⊤\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"⤩\":\"⤩\",\"‴\":\"‴\",\"™\":\"™\",\"▵\":\"▵\",\"▿\":\"▿\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"≜\":\"≜\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"◬\":\"◬\",\"≜\":\"≜\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"≬\":\"≬\",\"↞\":\"↞\",\"↠\":\"↠\",\"⇑\":\"⇑\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ú\":\"ú\",\"↑\":\"↑\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"û\":\"û\",\"у\":\"у\",\"⇅\":\"⇅\",\"ű\":\"ű\",\"⥮\":\"⥮\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"ù\":\"ù\",\"↿\":\"↿\",\"↾\":\"↾\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"¨\":\"¨\",\"¨\":\"¨\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"↑\":\"↑\",\"↕\":\"↕\",\"↿\":\"↿\",\"↾\":\"↾\",\"⊎\":\"⊎\",\"υ\":\"υ\",\"ϒ\":\"ϒ\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"▵\":\"▵\",\"▴\":\"▴\",\"⇈\":\"⇈\",\"ü\":\"ü\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⇕\":\"⇕\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⊨\":\"⊨\",\"⦜\":\"⦜\",\"ϵ\":\"ϵ\",\"ϰ\":\"ϰ\",\"∅\":\"∅\",\"ϕ\":\"ϕ\",\"ϖ\":\"ϖ\",\"∝\":\"∝\",\"↕\":\"↕\",\"ϱ\":\"ϱ\",\"ς\":\"ς\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"ϑ\":\"ϑ\",\"⊲\":\"⊲\",\"⊳\":\"⊳\",\"в\":\"в\",\"⊢\":\"⊢\",\"∨\":\"∨\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"|\":\"|\",\"|\":\"|\",\"𝔳\":\"𝔳\",\"⊲\":\"⊲\",\"⊂⃒\":\"⊂⃒\",\"⊃⃒\":\"⊃⃒\",\"𝕧\":\"𝕧\",\"∝\":\"∝\",\"⊳\":\"⊳\",\"𝓋\":\"𝓋\",\"⫋︀\":\"⫋︀\",\"⊊︀\":\"⊊︀\",\"⫌︀\":\"⫌︀\",\"⊋︀\":\"⊋︀\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"∧\":\"∧\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"℘\":\"℘\",\"≀\":\"≀\",\"≀\":\"≀\",\"𝓌\":\"𝓌\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"▽\":\"▽\",\"𝔵\":\"𝔵\",\"⟺\":\"⟺\",\"⟷\":\"⟷\",\"ξ\":\"ξ\",\"⟸\":\"⟸\",\"⟵\":\"⟵\",\"⟼\":\"⟼\",\"⋻\":\"⋻\",\"⨀\":\"⨀\",\"𝕩\":\"𝕩\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⟹\":\"⟹\",\"⟶\":\"⟶\",\"𝓍\":\"𝓍\",\"⨆\":\"⨆\",\"⨄\":\"⨄\",\"△\":\"△\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"ý\":\"ý\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ℨ\":\"ℨ\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"},characters:{\"Æ\":\"Æ\",\"&\":\"&\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"Ħ\":\"Ħ\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"\\n\":\" \",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",'\"':\""\",\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\"\\t\":\" \",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",_:\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"а\":\"а\",\"æ\":\"æ\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"ã\":\"ã\",\"ä\":\"ä\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⎶\":\"⎶\",\"б\":\"б\",\"„\":\"„\",\"⦰\":\"⦰\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"◯\":\"◯\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"\\\\\":\"\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"⪮\":\"⪮\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\":\":\":\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"⩭\":\"⩭\",\"𝕔\":\"𝕔\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"‐\":\"‐\",\"⤏\":\"⤏\",\"ď\":\"ď\",\"д\":\"д\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"♦\":\"♦\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",$:\"$\",\"𝕕\":\"𝕕\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"=\":\"=\",\"≟\":\"≟\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"η\":\"η\",\"ð\":\"ð\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",fj:\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"ℊ\":\"ℊ\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⥸\":\"⥸\",\"≩︀\":\"≩︀\",\"ъ\":\"ъ\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"í\":\"í\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"λ\":\"λ\",\"⦑\":\"⦑\",\"⪅\":\"⪅\",\"«\":\"«\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"л\":\"л\",\"⤶\":\"⤶\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"⇇\":\"⇇\",\"⋋\":\"⋋\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⋖\":\"⋖\",\"⥼\":\"⥼\",\"𝔩\":\"𝔩\",\"⪑\":\"⪑\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟼\":\"⟼\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"◊\":\"◊\",\"(\":\"(\",\"⦓\":\"⦓\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"‚\":\"‚\",\"ł\":\"ł\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"⫰\":\"⫰\",\"−\":\"−\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"𝓂\":\"𝓂\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"♮\":\"♮\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"≐̸\":\"≐̸\",\"⤨\":\"⤨\",\"𝔫\":\"𝔫\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"њ\":\"њ\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"𝓃\":\"𝓃\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"ñ\":\"ñ\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"⤧\":\"⤧\",\"ó\":\"ó\",\"ô\":\"ô\",\"о\":\"о\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"∨\":\"∨\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"¶\":\"¶\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"☎\":\"☎\",\"π\":\"π\",\"ϖ\":\"ϖ\",\"ℎ\":\"ℎ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⨢\":\"⨢\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"′\":\"′\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"⨖\":\"⨖\",\"?\":\"?\",\"⤜\":\"⤜\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"⦳\":\"⦳\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"»\":\"»\",\"⥵\":\"⥵\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"↳\":\"↳\",\"▭\":\"▭\",\"⥽\":\"⥽\",\"𝔯\":\"𝔯\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"⇉\":\"⇉\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"с\":\"с\",\"⋅\":\"⋅\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"⩪\":\"⩪\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"⊓︀\":\"⊓︀\",\"⊔︀\":\"⊔︀\",\"𝓈\":\"𝓈\",\"☆\":\"☆\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"♪\":\"♪\",\"¹\":\"¹\",\"²\":\"²\",\"³\":\"³\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"þ\":\"þ\",\"×\":\"×\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"‴\":\"‴\",\"▵\":\"▵\",\"≜\":\"≜\",\"◬\":\"◬\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"у\":\"у\",\"ű\":\"ű\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⦜\":\"⦜\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"в\":\"в\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"𝔳\":\"𝔳\",\"𝕧\":\"𝕧\",\"𝓋\":\"𝓋\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"𝓌\":\"𝓌\",\"𝔵\":\"𝔵\",\"ξ\":\"ξ\",\"⋻\":\"⋻\",\"𝕩\":\"𝕩\",\"𝓍\":\"𝓍\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"}}};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { log } from \"../utils/log.js\";\n\nvar WebSocketClient = /*#__PURE__*/function () {\n /**\n * @param {string} url\n */\n function WebSocketClient(url) {\n _classCallCheck(this, WebSocketClient);\n\n this.client = new WebSocket(url);\n\n this.client.onerror = function (error) {\n log.error(error);\n };\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n\n _createClass(WebSocketClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.client.onopen = f;\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.client.onclose = f;\n } // call f with the message string as the first argument\n\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.client.onmessage = function (e) {\n f(e.data);\n };\n }\n }]);\n\n return WebSocketClient;\n}();\n\nexport { WebSocketClient as default };","/* global __resourceQuery, __webpack_hash__ */\n/// \nimport webpackHotLog from \"webpack/hot/log.js\";\nimport stripAnsi from \"./utils/stripAnsi.js\";\nimport parseURL from \"./utils/parseURL.js\";\nimport socket from \"./socket.js\";\nimport { formatProblem, show, hide } from \"./overlay.js\";\nimport { log, setLogLevel } from \"./utils/log.js\";\nimport sendMessage from \"./utils/sendMessage.js\";\nimport reloadApp from \"./utils/reloadApp.js\";\nimport createSocketURL from \"./utils/createSocketURL.js\";\n/**\n * @typedef {Object} Options\n * @property {boolean} hot\n * @property {boolean} liveReload\n * @property {boolean} progress\n * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay\n * @property {string} [logging]\n * @property {number} [reconnect]\n */\n\n/**\n * @typedef {Object} Status\n * @property {boolean} isUnloading\n * @property {string} currentHash\n * @property {string} [previousHash]\n */\n\n/**\n * @type {Status}\n */\n\nvar status = {\n isUnloading: false,\n // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement\n // eslint-disable-next-line camelcase\n currentHash: typeof __webpack_hash__ !== \"undefined\" ? __webpack_hash__ : \"\"\n};\n/** @type {Options} */\n\nvar options = {\n hot: false,\n liveReload: false,\n progress: false,\n overlay: false\n};\nvar parsedResourceQuery = parseURL(__resourceQuery);\n\nif (parsedResourceQuery.hot === \"true\") {\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n}\n\nif (parsedResourceQuery[\"live-reload\"] === \"true\") {\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n}\n\nif (parsedResourceQuery.logging) {\n options.logging = parsedResourceQuery.logging;\n}\n\nif (typeof parsedResourceQuery.reconnect !== \"undefined\") {\n options.reconnect = Number(parsedResourceQuery.reconnect);\n}\n/**\n * @param {string} level\n */\n\n\nfunction setAllLogLevel(level) {\n // This is needed because the HMR logger operate separately from dev server logger\n webpackHotLog.setLogLevel(level === \"verbose\" || level === \"log\" ? \"info\" : level);\n setLogLevel(level);\n}\n\nif (options.logging) {\n setAllLogLevel(options.logging);\n}\n\nself.addEventListener(\"beforeunload\", function () {\n status.isUnloading = true;\n});\nvar onSocketMessage = {\n hot: function hot() {\n if (parsedResourceQuery.hot === \"false\") {\n return;\n }\n\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n },\n liveReload: function liveReload() {\n if (parsedResourceQuery[\"live-reload\"] === \"false\") {\n return;\n }\n\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n },\n invalid: function invalid() {\n log.info(\"App updated. Recompiling...\"); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Invalid\");\n },\n\n /**\n * @param {string} hash\n */\n hash: function hash(_hash) {\n status.previousHash = status.currentHash;\n status.currentHash = _hash;\n },\n logging: setAllLogLevel,\n\n /**\n * @param {boolean} value\n */\n overlay: function overlay(value) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n options.overlay = value;\n },\n\n /**\n * @param {number} value\n */\n reconnect: function reconnect(value) {\n if (parsedResourceQuery.reconnect === \"false\") {\n return;\n }\n\n options.reconnect = value;\n },\n\n /**\n * @param {boolean} value\n */\n progress: function progress(value) {\n options.progress = value;\n },\n\n /**\n * @param {{ pluginName?: string, percent: number, msg: string }} data\n */\n \"progress-update\": function progressUpdate(data) {\n if (options.progress) {\n log.info(\"\".concat(data.pluginName ? \"[\".concat(data.pluginName, \"] \") : \"\").concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage(\"Progress\", data);\n },\n \"still-ok\": function stillOk() {\n log.info(\"Nothing changed.\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"StillOk\");\n },\n ok: function ok() {\n sendMessage(\"Ok\");\n\n if (options.overlay) {\n hide();\n }\n\n reloadApp(options, status);\n },\n // TODO: remove in v5 in favor of 'static-changed'\n\n /**\n * @param {string} file\n */\n \"content-changed\": function contentChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {string} file\n */\n \"static-changed\": function staticChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {Error[]} warnings\n * @param {any} params\n */\n warnings: function warnings(_warnings, params) {\n log.warn(\"Warnings while compiling.\");\n\n var printableWarnings = _warnings.map(function (error) {\n var _formatProblem = formatProblem(\"warning\", error),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Warnings\", printableWarnings);\n\n for (var i = 0; i < printableWarnings.length; i++) {\n log.warn(printableWarnings[i]);\n }\n\n var needShowOverlayForWarnings = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.warnings;\n\n if (needShowOverlayForWarnings) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"warning\", _warnings, trustedTypesPolicyName || null);\n }\n\n if (params && params.preventReloading) {\n return;\n }\n\n reloadApp(options, status);\n },\n\n /**\n * @param {Error[]} errors\n */\n errors: function errors(_errors) {\n log.error(\"Errors while compiling. Reload prevented.\");\n\n var printableErrors = _errors.map(function (error) {\n var _formatProblem2 = formatProblem(\"error\", error),\n header = _formatProblem2.header,\n body = _formatProblem2.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Errors\", printableErrors);\n\n for (var i = 0; i < printableErrors.length; i++) {\n log.error(printableErrors[i]);\n }\n\n var needShowOverlayForErrors = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.errors;\n\n if (needShowOverlayForErrors) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"error\", _errors, trustedTypesPolicyName || null);\n }\n },\n\n /**\n * @param {Error} error\n */\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.info(\"Disconnected!\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Close\");\n }\n};\nvar socketURL = createSocketURL(parsedResourceQuery);\nsocket(socketURL, onSocketMessage, options.reconnect);","/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\n\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nvar LogType = Object.freeze({\n error:\n /** @type {\"error\"} */\n \"error\",\n // message, c style arguments\n warn:\n /** @type {\"warn\"} */\n \"warn\",\n // message, c style arguments\n info:\n /** @type {\"info\"} */\n \"info\",\n // message, c style arguments\n log:\n /** @type {\"log\"} */\n \"log\",\n // message, c style arguments\n debug:\n /** @type {\"debug\"} */\n \"debug\",\n // message, c style arguments\n trace:\n /** @type {\"trace\"} */\n \"trace\",\n // no arguments\n group:\n /** @type {\"group\"} */\n \"group\",\n // [label]\n groupCollapsed:\n /** @type {\"groupCollapsed\"} */\n \"groupCollapsed\",\n // [label]\n groupEnd:\n /** @type {\"groupEnd\"} */\n \"groupEnd\",\n // [label]\n profile:\n /** @type {\"profile\"} */\n \"profile\",\n // [profileName]\n profileEnd:\n /** @type {\"profileEnd\"} */\n \"profileEnd\",\n // [profileName]\n time:\n /** @type {\"time\"} */\n \"time\",\n // name, time as [seconds, nanoseconds]\n clear:\n /** @type {\"clear\"} */\n \"clear\",\n // no arguments\n status:\n /** @type {\"status\"} */\n \"status\" // message, arguments\n\n});\nexports.LogType = LogType;\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\n\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n\n return WebpackLogger;\n}();\n\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n\n\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace( // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n\n if (typeof item === \"function\") {\n return item;\n }\n\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n/**\n * @enum {number}\n */\n\n\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] :\n /** @type {FilterItemTypes[]} */\n [].concat(debug).map(filterToFunction);\n /** @type {number} */\n\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n\n switch (type) {\n case LogType.debug:\n if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n }\n\n // falls through\n\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n\n break;\n\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n\n break;\n }\n\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n\n break;\n\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n\n break;\n\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n/** @type {createConsoleLogger.LoggerOptions} */\n\n\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n\n\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\n\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;","// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\nimport ansiHTML from \"ansi-html-community\";\nimport { encode } from \"html-entities\";\nvar colors = {\n reset: [\"transparent\", \"transparent\"],\n black: \"181818\",\n red: \"E36049\",\n green: \"B3CB74\",\n yellow: \"FFD080\",\n blue: \"7CAFC2\",\n magenta: \"7FACCA\",\n cyan: \"C3C2EF\",\n lightgrey: \"EBE7E3\",\n darkgrey: \"6D7891\"\n};\n/** @type {HTMLIFrameElement | null | undefined} */\n\nvar iframeContainerElement;\n/** @type {HTMLDivElement | null | undefined} */\n\nvar containerElement;\n/** @type {Array<(element: HTMLDivElement) => void>} */\n\nvar onLoadQueue = [];\n/** @type {TrustedTypePolicy | undefined} */\n\nvar overlayTrustedTypesPolicy;\nansiHTML.setColors(colors);\n/**\n * @param {string | null} trustedTypesPolicyName\n */\n\nfunction createContainer(trustedTypesPolicyName) {\n // Enable Trusted Types if they are available in the current browser.\n if (window.trustedTypes) {\n overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || \"webpack-dev-server#overlay\", {\n createHTML: function createHTML(value) {\n return value;\n }\n });\n }\n\n iframeContainerElement = document.createElement(\"iframe\");\n iframeContainerElement.id = \"webpack-dev-server-client-overlay\";\n iframeContainerElement.src = \"about:blank\";\n iframeContainerElement.style.position = \"fixed\";\n iframeContainerElement.style.left = 0;\n iframeContainerElement.style.top = 0;\n iframeContainerElement.style.right = 0;\n iframeContainerElement.style.bottom = 0;\n iframeContainerElement.style.width = \"100vw\";\n iframeContainerElement.style.height = \"100vh\";\n iframeContainerElement.style.border = \"none\";\n iframeContainerElement.style.zIndex = 9999999999;\n\n iframeContainerElement.onload = function () {\n containerElement =\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.createElement(\"div\");\n containerElement.id = \"webpack-dev-server-client-overlay-div\";\n containerElement.style.position = \"fixed\";\n containerElement.style.boxSizing = \"border-box\";\n containerElement.style.left = 0;\n containerElement.style.top = 0;\n containerElement.style.right = 0;\n containerElement.style.bottom = 0;\n containerElement.style.width = \"100vw\";\n containerElement.style.height = \"100vh\";\n containerElement.style.backgroundColor = \"rgba(0, 0, 0, 0.85)\";\n containerElement.style.color = \"#E8E8E8\";\n containerElement.style.fontFamily = \"Menlo, Consolas, monospace\";\n containerElement.style.fontSize = \"large\";\n containerElement.style.padding = \"2rem\";\n containerElement.style.lineHeight = \"1.2\";\n containerElement.style.whiteSpace = \"pre-wrap\";\n containerElement.style.overflow = \"auto\";\n var headerElement = document.createElement(\"span\");\n headerElement.innerText = \"Compiled with problems:\";\n var closeButtonElement = document.createElement(\"button\");\n closeButtonElement.innerText = \"X\";\n closeButtonElement.style.background = \"transparent\";\n closeButtonElement.style.border = \"none\";\n closeButtonElement.style.fontSize = \"20px\";\n closeButtonElement.style.fontWeight = \"bold\";\n closeButtonElement.style.color = \"white\";\n closeButtonElement.style.cursor = \"pointer\";\n closeButtonElement.style.cssFloat = \"right\"; // @ts-ignore\n\n closeButtonElement.style.styleFloat = \"right\";\n closeButtonElement.addEventListener(\"click\", function () {\n hide();\n });\n containerElement.appendChild(headerElement);\n containerElement.appendChild(closeButtonElement);\n containerElement.appendChild(document.createElement(\"br\"));\n containerElement.appendChild(document.createElement(\"br\"));\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.body.appendChild(containerElement);\n onLoadQueue.forEach(function (onLoad) {\n onLoad(\n /** @type {HTMLDivElement} */\n containerElement);\n });\n onLoadQueue = [];\n /** @type {HTMLIFrameElement} */\n\n iframeContainerElement.onload = null;\n };\n\n document.body.appendChild(iframeContainerElement);\n}\n/**\n * @param {(element: HTMLDivElement) => void} callback\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction ensureOverlayExists(callback, trustedTypesPolicyName) {\n if (containerElement) {\n // Everything is ready, call the callback right away.\n callback(containerElement);\n return;\n }\n\n onLoadQueue.push(callback);\n\n if (iframeContainerElement) {\n return;\n }\n\n createContainer(trustedTypesPolicyName);\n} // Successful compilation.\n\n\nfunction hide() {\n if (!iframeContainerElement) {\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(iframeContainerElement);\n iframeContainerElement = null;\n containerElement = null;\n}\n/**\n * @param {string} type\n * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item\n * @returns {{ header: string, body: string }}\n */\n\n\nfunction formatProblem(type, item) {\n var header = type === \"warning\" ? \"WARNING\" : \"ERROR\";\n var body = \"\";\n\n if (typeof item === \"string\") {\n body += item;\n } else {\n var file = item.file || \"\"; // eslint-disable-next-line no-nested-ternary\n\n var moduleName = item.moduleName ? item.moduleName.indexOf(\"!\") !== -1 ? \"\".concat(item.moduleName.replace(/^(\\s|\\S)*!/, \"\"), \" (\").concat(item.moduleName, \")\") : \"\".concat(item.moduleName) : \"\";\n var loc = item.loc;\n header += \"\".concat(moduleName || file ? \" in \".concat(moduleName ? \"\".concat(moduleName).concat(file ? \" (\".concat(file, \")\") : \"\") : file).concat(loc ? \" \".concat(loc) : \"\") : \"\");\n body += item.message || \"\";\n }\n\n return {\n header: header,\n body: body\n };\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n/**\n * @param {string} type\n * @param {Array} messages\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction show(type, messages, trustedTypesPolicyName) {\n ensureOverlayExists(function () {\n messages.forEach(function (message) {\n var entryElement = document.createElement(\"div\");\n var typeElement = document.createElement(\"span\");\n\n var _formatProblem = formatProblem(type, message),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n typeElement.innerText = header;\n typeElement.style.color = \"#\".concat(colors.red); // Make it look similar to our terminal.\n\n var text = ansiHTML(encode(body));\n var messageTextNode = document.createElement(\"div\");\n messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text;\n entryElement.appendChild(typeElement);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(messageTextNode);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n /** @type {HTMLDivElement} */\n\n containerElement.appendChild(entryElement);\n });\n }, trustedTypesPolicyName);\n}\n\nexport { formatProblem, show, hide };","/* global __webpack_dev_server_client__ */\nimport WebSocketClient from \"./clients/WebSocketClient.js\";\nimport { log } from \"./utils/log.js\"; // this WebsocketClient is here as a default fallback, in case the client is not injected\n\n/* eslint-disable camelcase */\n\nvar Client = // eslint-disable-next-line no-nested-ternary\ntypeof __webpack_dev_server_client__ !== \"undefined\" ? typeof __webpack_dev_server_client__.default !== \"undefined\" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : WebSocketClient;\n/* eslint-enable camelcase */\n\nvar retries = 0;\nvar maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance\n// It is mutable to enforce singleton\n// eslint-disable-next-line import/no-mutable-exports\n\nexport var client = null;\n/**\n * @param {string} url\n * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers\n * @param {number} [reconnect]\n */\n\nvar socket = function initSocket(url, handlers, reconnect) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n\n if (typeof reconnect !== \"undefined\") {\n maxRetries = reconnect;\n }\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries < maxRetries) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n log.info(\"Trying to reconnect...\");\n setTimeout(function () {\n socket(url, handlers, reconnect);\n }, retryInMs);\n }\n });\n client.onMessage(\n /**\n * @param {any} data\n */\n function (data) {\n var message = JSON.parse(data);\n\n if (handlers[message.type]) {\n handlers[message.type](message.data, message.params);\n }\n });\n};\n\nexport default socket;","/**\n * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL\n * @returns {string}\n */\nfunction format(objURL) {\n var protocol = objURL.protocol || \"\";\n\n if (protocol && protocol.substr(-1) !== \":\") {\n protocol += \":\";\n }\n\n var auth = objURL.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var host = \"\";\n\n if (objURL.hostname) {\n host = auth + (objURL.hostname.indexOf(\":\") === -1 ? objURL.hostname : \"[\".concat(objURL.hostname, \"]\"));\n\n if (objURL.port) {\n host += \":\".concat(objURL.port);\n }\n }\n\n var pathname = objURL.pathname || \"\";\n\n if (objURL.slashes) {\n host = \"//\".concat(host || \"\");\n\n if (pathname && pathname.charAt(0) !== \"/\") {\n pathname = \"/\".concat(pathname);\n }\n } else if (!host) {\n host = \"\";\n }\n\n var search = objURL.search || \"\";\n\n if (search && search.charAt(0) !== \"?\") {\n search = \"?\".concat(search);\n }\n\n var hash = objURL.hash || \"\";\n\n if (hash && hash.charAt(0) !== \"#\") {\n hash = \"#\".concat(hash);\n }\n\n pathname = pathname.replace(/[?#]/g,\n /**\n * @param {string} match\n * @returns {string}\n */\n function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace(\"#\", \"%23\");\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n/**\n * @param {URL & { fromCurrentScript?: boolean }} parsedURL\n * @returns {string}\n */\n\n\nfunction createSocketURL(parsedURL) {\n var hostname = parsedURL.hostname; // Node.js module parses it as `::`\n // `new URL(urlString, [baseURLString])` parses it as '[::]'\n\n var isInAddrAny = hostname === \"0.0.0.0\" || hostname === \"::\" || hostname === \"[::]\"; // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf(\"http\") === 0) {\n hostname = self.location.hostname;\n }\n\n var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets.\n\n if (socketURLProtocol === \"auto:\" || hostname && isInAddrAny && self.location.protocol === \"https:\") {\n socketURLProtocol = self.location.protocol;\n }\n\n socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, \"ws\");\n var socketURLAuth = \"\"; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property\n // Parse authentication credentials in case we need them\n\n if (parsedURL.username) {\n socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username,\n // we only include password if the username is not empty.\n\n if (parsedURL.password) {\n // Result: :\n socketURLAuth = socketURLAuth.concat(\":\", parsedURL.password);\n }\n } // In case the host is a raw IPv6 address, it can be enclosed in\n // the brackets as the brackets are needed in the final URL string.\n // Need to remove those as url.format blindly adds its own set of brackets\n // if the host string contains colons. That would lead to non-working\n // double brackets (e.g. [[::]]) host\n //\n // All of these web socket url params are optionally passed in through resourceQuery,\n // so we need to fall back to the default if they are not provided\n\n\n var socketURLHostname = (hostname || self.location.hostname || \"localhost\").replace(/^\\[(.*)\\]$/, \"$1\");\n var socketURLPort = parsedURL.port;\n\n if (!socketURLPort || socketURLPort === \"0\") {\n socketURLPort = self.location.port;\n } // If path is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n\n\n var socketURLPathname = \"/ws\";\n\n if (parsedURL.pathname && !parsedURL.fromCurrentScript) {\n socketURLPathname = parsedURL.pathname;\n }\n\n return format({\n protocol: socketURLProtocol,\n auth: socketURLAuth,\n hostname: socketURLHostname,\n port: socketURLPort,\n pathname: socketURLPathname,\n slashes: true\n });\n}\n\nexport default createSocketURL;","/**\n * @returns {string}\n */\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute(\"src\");\n } // Fallback to getting all scripts running in the document.\n\n\n var scriptElements = document.scripts || [];\n var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) {\n return element.getAttribute(\"src\");\n });\n\n if (scriptElementsWithSrc.length > 0) {\n var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1];\n return currentScript.getAttribute(\"src\");\n } // Fail as there was no script to use.\n\n\n throw new Error(\"[webpack-dev-server] Failed to get current script source.\");\n}\n\nexport default getCurrentScriptSource;","import logger from \"../modules/logger/index.js\";\nvar name = \"webpack-dev-server\"; // default level is set on the client side, so it does not need\n// to be set by the CLI or API\n\nvar defaultLevel = \"info\"; // options new options, merge with old options\n\n/**\n * @param {false | true | \"none\" | \"error\" | \"warn\" | \"info\" | \"log\" | \"verbose\"} level\n * @returns {void}\n */\n\nfunction setLogLevel(level) {\n logger.configureDefaultLogger({\n level: level\n });\n}\n\nsetLogLevel(defaultLevel);\nvar log = logger.getLogger(name);\nexport { log, setLogLevel };","import getCurrentScriptSource from \"./getCurrentScriptSource.js\";\n/**\n * @param {string} resourceQuery\n * @returns {{ [key: string]: string | boolean }}\n */\n\nfunction parseURL(resourceQuery) {\n /** @type {{ [key: string]: string }} */\n var options = {};\n\n if (typeof resourceQuery === \"string\" && resourceQuery !== \"\") {\n var searchParams = resourceQuery.slice(1).split(\"&\");\n\n for (var i = 0; i < searchParams.length; i++) {\n var pair = searchParams[i].split(\"=\");\n options[pair[0]] = decodeURIComponent(pair[1]);\n }\n } else {\n // Else, get the url from the