]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/assets/iD/iD.js
Update to iD v2.31.1
[rails.git] / vendor / assets / iD / iD.js
index 7e56b7e9edc9d2996aef49617ea58d10760700c8..add1166ba8130e52e6176961090d13bd1ebf8f1c 100644 (file)
@@ -1,11 +1,33 @@
+"use strict";
 (() => {
   var __create = Object.create;
+  var __freeze = Object.freeze;
   var __defProp = Object.defineProperty;
+  var __defProps = Object.defineProperties;
   var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
   var __getOwnPropNames = Object.getOwnPropertyNames;
+  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
   var __getProtoOf = Object.getPrototypeOf;
   var __hasOwnProp = Object.prototype.hasOwnProperty;
+  var __propIsEnum = Object.prototype.propertyIsEnumerable;
+  var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
+  var __typeError = (msg) => {
+    throw TypeError(msg);
+  };
   var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+  var __spreadValues = (a2, b2) => {
+    for (var prop in b2 || (b2 = {}))
+      if (__hasOwnProp.call(b2, prop))
+        __defNormalProp(a2, prop, b2[prop]);
+    if (__getOwnPropSymbols)
+      for (var prop of __getOwnPropSymbols(b2)) {
+        if (__propIsEnum.call(b2, prop))
+          __defNormalProp(a2, prop, b2[prop]);
+      }
+    return a2;
+  };
+  var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
   var __require = /* @__PURE__ */ ((x2) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x2, {
     get: (a2, b2) => (typeof require !== "undefined" ? require : a2)[b2]
   }) : x2)(function(x2) {
     mod
   ));
   var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+  var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(raw || cooked.slice()) }));
+  var __await = function(promise, isYieldStar) {
+    this[0] = promise;
+    this[1] = isYieldStar;
+  };
+  var __yieldStar = (value) => {
+    var obj = value[__knownSymbol("asyncIterator")], isAwait = false, method, it = {};
+    if (obj == null) {
+      obj = value[__knownSymbol("iterator")]();
+      method = (k2) => it[k2] = (x2) => obj[k2](x2);
+    } else {
+      obj = obj.call(value);
+      method = (k2) => it[k2] = (v2) => {
+        if (isAwait) {
+          isAwait = false;
+          if (k2 === "throw") throw v2;
+          return v2;
+        }
+        isAwait = true;
+        return {
+          done: false,
+          value: new __await(new Promise((resolve) => {
+            var x2 = obj[k2](v2);
+            if (!(x2 instanceof Object)) __typeError("Object expected");
+            resolve(x2);
+          }), 1)
+        };
+      };
+    }
+    return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x2) => {
+      throw x2;
+    }, "return" in obj && method("return"), it;
+  };
 
   // node_modules/diacritics/index.js
   var require_diacritics = __commonJS({
     }
   });
 
-  // node_modules/which-polygon/node_modules/quickselect/quickselect.js
-  var require_quickselect = __commonJS({
-    "node_modules/which-polygon/node_modules/quickselect/quickselect.js"(exports2, module2) {
-      (function(global2, factory) {
-        typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.quickselect = factory();
-      })(exports2, function() {
+  // node_modules/aes-js/index.js
+  var require_aes_js = __commonJS({
+    "node_modules/aes-js/index.js"(exports2, module2) {
+      (function(root3) {
         "use strict";
-        function quickselect3(arr, k2, left, right, compare2) {
-          quickselectStep2(arr, k2, left || 0, right || arr.length - 1, compare2 || defaultCompare2);
+        function checkInt(value) {
+          return parseInt(value) === value;
         }
-        function quickselectStep2(arr, k2, left, right, compare2) {
-          while (right > left) {
-            if (right - left > 600) {
-              var n3 = right - left + 1;
-              var m2 = k2 - left + 1;
-              var z2 = Math.log(n3);
-              var s2 = 0.5 * Math.exp(2 * z2 / 3);
-              var sd = 0.5 * Math.sqrt(z2 * s2 * (n3 - s2) / n3) * (m2 - n3 / 2 < 0 ? -1 : 1);
-              var newLeft = Math.max(left, Math.floor(k2 - m2 * s2 / n3 + sd));
-              var newRight = Math.min(right, Math.floor(k2 + (n3 - m2) * s2 / n3 + sd));
-              quickselectStep2(arr, k2, newLeft, newRight, compare2);
+        function checkInts(arrayish) {
+          if (!checkInt(arrayish.length)) {
+            return false;
+          }
+          for (var i3 = 0; i3 < arrayish.length; i3++) {
+            if (!checkInt(arrayish[i3]) || arrayish[i3] < 0 || arrayish[i3] > 255) {
+              return false;
             }
-            var t2 = arr[k2];
-            var i3 = left;
-            var j2 = right;
-            swap3(arr, left, k2);
-            if (compare2(arr[right], t2) > 0) swap3(arr, left, right);
-            while (i3 < j2) {
-              swap3(arr, i3, j2);
-              i3++;
-              j2--;
-              while (compare2(arr[i3], t2) < 0) i3++;
-              while (compare2(arr[j2], t2) > 0) j2--;
+          }
+          return true;
+        }
+        function coerceArray(arg, copy2) {
+          if (arg.buffer && arg.name === "Uint8Array") {
+            if (copy2) {
+              if (arg.slice) {
+                arg = arg.slice();
+              } else {
+                arg = Array.prototype.slice.call(arg);
+              }
             }
-            if (compare2(arr[left], t2) === 0) swap3(arr, left, j2);
-            else {
-              j2++;
-              swap3(arr, j2, right);
+            return arg;
+          }
+          if (Array.isArray(arg)) {
+            if (!checkInts(arg)) {
+              throw new Error("Array contains invalid value: " + arg);
             }
-            if (j2 <= k2) left = j2 + 1;
-            if (k2 <= j2) right = j2 - 1;
+            return new Uint8Array(arg);
           }
+          if (checkInt(arg.length) && checkInts(arg)) {
+            return new Uint8Array(arg);
+          }
+          throw new Error("unsupported array-like object");
         }
-        function swap3(arr, i3, j2) {
-          var tmp = arr[i3];
-          arr[i3] = arr[j2];
-          arr[j2] = tmp;
-        }
-        function defaultCompare2(a2, b2) {
-          return a2 < b2 ? -1 : a2 > b2 ? 1 : 0;
-        }
-        return quickselect3;
-      });
-    }
-  });
-
-  // node_modules/which-polygon/node_modules/rbush/index.js
-  var require_rbush = __commonJS({
-    "node_modules/which-polygon/node_modules/rbush/index.js"(exports2, module2) {
-      "use strict";
-      module2.exports = rbush;
-      module2.exports.default = rbush;
-      var quickselect3 = require_quickselect();
-      function rbush(maxEntries, format2) {
-        if (!(this instanceof rbush)) return new rbush(maxEntries, format2);
-        this._maxEntries = Math.max(4, maxEntries || 9);
-        this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
-        if (format2) {
-          this._initFormat(format2);
+        function createArray(length2) {
+          return new Uint8Array(length2);
         }
-        this.clear();
-      }
-      rbush.prototype = {
-        all: function() {
-          return this._all(this.data, []);
-        },
-        search: function(bbox2) {
-          var node = this.data, result = [], toBBox = this.toBBox;
-          if (!intersects2(bbox2, node)) return result;
-          var nodesToSearch = [], i3, len, child, childBBox;
-          while (node) {
-            for (i3 = 0, len = node.children.length; i3 < len; i3++) {
-              child = node.children[i3];
-              childBBox = node.leaf ? toBBox(child) : child;
-              if (intersects2(bbox2, childBBox)) {
-                if (node.leaf) result.push(child);
-                else if (contains2(bbox2, childBBox)) this._all(child, result);
-                else nodesToSearch.push(child);
-              }
+        function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {
+          if (sourceStart != null || sourceEnd != null) {
+            if (sourceArray.slice) {
+              sourceArray = sourceArray.slice(sourceStart, sourceEnd);
+            } else {
+              sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);
             }
-            node = nodesToSearch.pop();
           }
-          return result;
-        },
-        collides: function(bbox2) {
-          var node = this.data, toBBox = this.toBBox;
-          if (!intersects2(bbox2, node)) return false;
-          var nodesToSearch = [], i3, len, child, childBBox;
-          while (node) {
-            for (i3 = 0, len = node.children.length; i3 < len; i3++) {
-              child = node.children[i3];
-              childBBox = node.leaf ? toBBox(child) : child;
-              if (intersects2(bbox2, childBBox)) {
-                if (node.leaf || contains2(bbox2, childBBox)) return true;
-                nodesToSearch.push(child);
+          targetArray.set(sourceArray, targetStart);
+        }
+        var convertUtf8 = /* @__PURE__ */ function() {
+          function toBytes(text) {
+            var result = [], i3 = 0;
+            text = encodeURI(text);
+            while (i3 < text.length) {
+              var c2 = text.charCodeAt(i3++);
+              if (c2 === 37) {
+                result.push(parseInt(text.substr(i3, 2), 16));
+                i3 += 2;
+              } else {
+                result.push(c2);
               }
             }
-            node = nodesToSearch.pop();
+            return coerceArray(result);
           }
-          return false;
-        },
-        load: function(data) {
-          if (!(data && data.length)) return this;
-          if (data.length < this._minEntries) {
-            for (var i3 = 0, len = data.length; i3 < len; i3++) {
-              this.insert(data[i3]);
+          function fromBytes(bytes) {
+            var result = [], i3 = 0;
+            while (i3 < bytes.length) {
+              var c2 = bytes[i3];
+              if (c2 < 128) {
+                result.push(String.fromCharCode(c2));
+                i3++;
+              } else if (c2 > 191 && c2 < 224) {
+                result.push(String.fromCharCode((c2 & 31) << 6 | bytes[i3 + 1] & 63));
+                i3 += 2;
+              } else {
+                result.push(String.fromCharCode((c2 & 15) << 12 | (bytes[i3 + 1] & 63) << 6 | bytes[i3 + 2] & 63));
+                i3 += 3;
+              }
             }
-            return this;
+            return result.join("");
           }
-          var node = this._build(data.slice(), 0, data.length - 1, 0);
-          if (!this.data.children.length) {
-            this.data = node;
-          } else if (this.data.height === node.height) {
-            this._splitRoot(this.data, node);
-          } else {
-            if (this.data.height < node.height) {
-              var tmpNode = this.data;
-              this.data = node;
-              node = tmpNode;
+          return {
+            toBytes,
+            fromBytes
+          };
+        }();
+        var convertHex = /* @__PURE__ */ function() {
+          function toBytes(text) {
+            var result = [];
+            for (var i3 = 0; i3 < text.length; i3 += 2) {
+              result.push(parseInt(text.substr(i3, 2), 16));
             }
-            this._insert(node, this.data.height - node.height - 1, true);
+            return result;
           }
-          return this;
-        },
-        insert: function(item) {
-          if (item) this._insert(item, this.data.height - 1);
-          return this;
-        },
-        clear: function() {
-          this.data = createNode2([]);
-          return this;
-        },
-        remove: function(item, equalsFn) {
-          if (!item) return this;
-          var node = this.data, bbox2 = this.toBBox(item), path = [], indexes = [], i3, parent, index, goingUp;
-          while (node || path.length) {
-            if (!node) {
-              node = path.pop();
-              parent = path[path.length - 1];
-              i3 = indexes.pop();
-              goingUp = true;
-            }
-            if (node.leaf) {
-              index = findItem2(item, node.children, equalsFn);
-              if (index !== -1) {
-                node.children.splice(index, 1);
-                path.push(node);
-                this._condense(path);
-                return this;
-              }
+          var Hex = "0123456789abcdef";
+          function fromBytes(bytes) {
+            var result = [];
+            for (var i3 = 0; i3 < bytes.length; i3++) {
+              var v2 = bytes[i3];
+              result.push(Hex[(v2 & 240) >> 4] + Hex[v2 & 15]);
             }
-            if (!goingUp && !node.leaf && contains2(node, bbox2)) {
-              path.push(node);
-              indexes.push(i3);
-              i3 = 0;
-              parent = node;
-              node = node.children[0];
-            } else if (parent) {
-              i3++;
-              node = parent.children[i3];
-              goingUp = false;
-            } else node = null;
+            return result.join("");
           }
-          return this;
-        },
-        toBBox: function(item) {
-          return item;
-        },
-        compareMinX: compareNodeMinX2,
-        compareMinY: compareNodeMinY2,
-        toJSON: function() {
-          return this.data;
-        },
-        fromJSON: function(data) {
-          this.data = data;
-          return this;
-        },
-        _all: function(node, result) {
-          var nodesToSearch = [];
-          while (node) {
-            if (node.leaf) result.push.apply(result, node.children);
-            else nodesToSearch.push.apply(nodesToSearch, node.children);
-            node = nodesToSearch.pop();
+          return {
+            toBytes,
+            fromBytes
+          };
+        }();
+        var numberOfRounds = { 16: 10, 24: 12, 32: 14 };
+        var rcon = [1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145];
+        var S2 = [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22];
+        var Si = [82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125];
+        var T1 = [3328402341, 4168907908, 4000806809, 4135287693, 4294111757, 3597364157, 3731845041, 2445657428, 1613770832, 33620227, 3462883241, 1445669757, 3892248089, 3050821474, 1303096294, 3967186586, 2412431941, 528646813, 2311702848, 4202528135, 4026202645, 2992200171, 2387036105, 4226871307, 1101901292, 3017069671, 1604494077, 1169141738, 597466303, 1403299063, 3832705686, 2613100635, 1974974402, 3791519004, 1033081774, 1277568618, 1815492186, 2118074177, 4126668546, 2211236943, 1748251740, 1369810420, 3521504564, 4193382664, 3799085459, 2883115123, 1647391059, 706024767, 134480908, 2512897874, 1176707941, 2646852446, 806885416, 932615841, 168101135, 798661301, 235341577, 605164086, 461406363, 3756188221, 3454790438, 1311188841, 2142417613, 3933566367, 302582043, 495158174, 1479289972, 874125870, 907746093, 3698224818, 3025820398, 1537253627, 2756858614, 1983593293, 3084310113, 2108928974, 1378429307, 3722699582, 1580150641, 327451799, 2790478837, 3117535592, 0, 3253595436, 1075847264, 3825007647, 2041688520, 3059440621, 3563743934, 2378943302, 1740553945, 1916352843, 2487896798, 2555137236, 2958579944, 2244988746, 3151024235, 3320835882, 1336584933, 3992714006, 2252555205, 2588757463, 1714631509, 293963156, 2319795663, 3925473552, 67240454, 4269768577, 2689618160, 2017213508, 631218106, 1269344483, 2723238387, 1571005438, 2151694528, 93294474, 1066570413, 563977660, 1882732616, 4059428100, 1673313503, 2008463041, 2950355573, 1109467491, 537923632, 3858759450, 4260623118, 3218264685, 2177748300, 403442708, 638784309, 3287084079, 3193921505, 899127202, 2286175436, 773265209, 2479146071, 1437050866, 4236148354, 2050833735, 3362022572, 3126681063, 840505643, 3866325909, 3227541664, 427917720, 2655997905, 2749160575, 1143087718, 1412049534, 999329963, 193497219, 2353415882, 3354324521, 1807268051, 672404540, 2816401017, 3160301282, 369822493, 2916866934, 3688947771, 1681011286, 1949973070, 336202270, 2454276571, 201721354, 1210328172, 3093060836, 2680341085, 3184776046, 1135389935, 3294782118, 965841320, 831886756, 3554993207, 4068047243, 3588745010, 2345191491, 1849112409, 3664604599, 26054028, 2983581028, 2622377682, 1235855840, 3630984372, 2891339514, 4092916743, 3488279077, 3395642799, 4101667470, 1202630377, 268961816, 1874508501, 4034427016, 1243948399, 1546530418, 941366308, 1470539505, 1941222599, 2546386513, 3421038627, 2715671932, 3899946140, 1042226977, 2521517021, 1639824860, 227249030, 260737669, 3765465232, 2084453954, 1907733956, 3429263018, 2420656344, 100860677, 4160157185, 470683154, 3261161891, 1781871967, 2924959737, 1773779408, 394692241, 2579611992, 974986535, 664706745, 3655459128, 3958962195, 731420851, 571543859, 3530123707, 2849626480, 126783113, 865375399, 765172662, 1008606754, 361203602, 3387549984, 2278477385, 2857719295, 1344809080, 2782912378, 59542671, 1503764984, 160008576, 437062935, 1707065306, 3622233649, 2218934982, 3496503480, 2185314755, 697932208, 1512910199, 504303377, 2075177163, 2824099068, 1841019862, 739644986];
+        var T2 = [2781242211, 2230877308, 2582542199, 2381740923, 234877682, 3184946027, 2984144751, 1418839493, 1348481072, 50462977, 2848876391, 2102799147, 434634494, 1656084439, 3863849899, 2599188086, 1167051466, 2636087938, 1082771913, 2281340285, 368048890, 3954334041, 3381544775, 201060592, 3963727277, 1739838676, 4250903202, 3930435503, 3206782108, 4149453988, 2531553906, 1536934080, 3262494647, 484572669, 2923271059, 1783375398, 1517041206, 1098792767, 49674231, 1334037708, 1550332980, 4098991525, 886171109, 150598129, 2481090929, 1940642008, 1398944049, 1059722517, 201851908, 1385547719, 1699095331, 1587397571, 674240536, 2704774806, 252314885, 3039795866, 151914247, 908333586, 2602270848, 1038082786, 651029483, 1766729511, 3447698098, 2682942837, 454166793, 2652734339, 1951935532, 775166490, 758520603, 3000790638, 4004797018, 4217086112, 4137964114, 1299594043, 1639438038, 3464344499, 2068982057, 1054729187, 1901997871, 2534638724, 4121318227, 1757008337, 0, 750906861, 1614815264, 535035132, 3363418545, 3988151131, 3201591914, 1183697867, 3647454910, 1265776953, 3734260298, 3566750796, 3903871064, 1250283471, 1807470800, 717615087, 3847203498, 384695291, 3313910595, 3617213773, 1432761139, 2484176261, 3481945413, 283769337, 100925954, 2180939647, 4037038160, 1148730428, 3123027871, 3813386408, 4087501137, 4267549603, 3229630528, 2315620239, 2906624658, 3156319645, 1215313976, 82966005, 3747855548, 3245848246, 1974459098, 1665278241, 807407632, 451280895, 251524083, 1841287890, 1283575245, 337120268, 891687699, 801369324, 3787349855, 2721421207, 3431482436, 959321879, 1469301956, 4065699751, 2197585534, 1199193405, 2898814052, 3887750493, 724703513, 2514908019, 2696962144, 2551808385, 3516813135, 2141445340, 1715741218, 2119445034, 2872807568, 2198571144, 3398190662, 700968686, 3547052216, 1009259540, 2041044702, 3803995742, 487983883, 1991105499, 1004265696, 1449407026, 1316239930, 504629770, 3683797321, 168560134, 1816667172, 3837287516, 1570751170, 1857934291, 4014189740, 2797888098, 2822345105, 2754712981, 936633572, 2347923833, 852879335, 1133234376, 1500395319, 3084545389, 2348912013, 1689376213, 3533459022, 3762923945, 3034082412, 4205598294, 133428468, 634383082, 2949277029, 2398386810, 3913789102, 403703816, 3580869306, 2297460856, 1867130149, 1918643758, 607656988, 4049053350, 3346248884, 1368901318, 600565992, 2090982877, 2632479860, 557719327, 3717614411, 3697393085, 2249034635, 2232388234, 2430627952, 1115438654, 3295786421, 2865522278, 3633334344, 84280067, 33027830, 303828494, 2747425121, 1600795957, 4188952407, 3496589753, 2434238086, 1486471617, 658119965, 3106381470, 953803233, 334231800, 3005978776, 857870609, 3151128937, 1890179545, 2298973838, 2805175444, 3056442267, 574365214, 2450884487, 550103529, 1233637070, 4289353045, 2018519080, 2057691103, 2399374476, 4166623649, 2148108681, 387583245, 3664101311, 836232934, 3330556482, 3100665960, 3280093505, 2955516313, 2002398509, 287182607, 3413881008, 4238890068, 3597515707, 975967766];
+        var T3 = [1671808611, 2089089148, 2006576759, 2072901243, 4061003762, 1807603307, 1873927791, 3310653893, 810573872, 16974337, 1739181671, 729634347, 4263110654, 3613570519, 2883997099, 1989864566, 3393556426, 2191335298, 3376449993, 2106063485, 4195741690, 1508618841, 1204391495, 4027317232, 2917941677, 3563566036, 2734514082, 2951366063, 2629772188, 2767672228, 1922491506, 3227229120, 3082974647, 4246528509, 2477669779, 644500518, 911895606, 1061256767, 4144166391, 3427763148, 878471220, 2784252325, 3845444069, 4043897329, 1905517169, 3631459288, 827548209, 356461077, 67897348, 3344078279, 593839651, 3277757891, 405286936, 2527147926, 84871685, 2595565466, 118033927, 305538066, 2157648768, 3795705826, 3945188843, 661212711, 2999812018, 1973414517, 152769033, 2208177539, 745822252, 439235610, 455947803, 1857215598, 1525593178, 2700827552, 1391895634, 994932283, 3596728278, 3016654259, 695947817, 3812548067, 795958831, 2224493444, 1408607827, 3513301457, 0, 3979133421, 543178784, 4229948412, 2982705585, 1542305371, 1790891114, 3410398667, 3201918910, 961245753, 1256100938, 1289001036, 1491644504, 3477767631, 3496721360, 4012557807, 2867154858, 4212583931, 1137018435, 1305975373, 861234739, 2241073541, 1171229253, 4178635257, 33948674, 2139225727, 1357946960, 1011120188, 2679776671, 2833468328, 1374921297, 2751356323, 1086357568, 2408187279, 2460827538, 2646352285, 944271416, 4110742005, 3168756668, 3066132406, 3665145818, 560153121, 271589392, 4279952895, 4077846003, 3530407890, 3444343245, 202643468, 322250259, 3962553324, 1608629855, 2543990167, 1154254916, 389623319, 3294073796, 2817676711, 2122513534, 1028094525, 1689045092, 1575467613, 422261273, 1939203699, 1621147744, 2174228865, 1339137615, 3699352540, 577127458, 712922154, 2427141008, 2290289544, 1187679302, 3995715566, 3100863416, 339486740, 3732514782, 1591917662, 186455563, 3681988059, 3762019296, 844522546, 978220090, 169743370, 1239126601, 101321734, 611076132, 1558493276, 3260915650, 3547250131, 2901361580, 1655096418, 2443721105, 2510565781, 3828863972, 2039214713, 3878868455, 3359869896, 928607799, 1840765549, 2374762893, 3580146133, 1322425422, 2850048425, 1823791212, 1459268694, 4094161908, 3928346602, 1706019429, 2056189050, 2934523822, 135794696, 3134549946, 2022240376, 628050469, 779246638, 472135708, 2800834470, 3032970164, 3327236038, 3894660072, 3715932637, 1956440180, 522272287, 1272813131, 3185336765, 2340818315, 2323976074, 1888542832, 1044544574, 3049550261, 1722469478, 1222152264, 50660867, 4127324150, 236067854, 1638122081, 895445557, 1475980887, 3117443513, 2257655686, 3243809217, 489110045, 2662934430, 3778599393, 4162055160, 2561878936, 288563729, 1773916777, 3648039385, 2391345038, 2493985684, 2612407707, 505560094, 2274497927, 3911240169, 3460925390, 1442818645, 678973480, 3749357023, 2358182796, 2717407649, 2306869641, 219617805, 3218761151, 3862026214, 1120306242, 1756942440, 1103331905, 2578459033, 762796589, 252780047, 2966125488, 1425844308, 3151392187, 372911126];
+        var T4 = [1667474886, 2088535288, 2004326894, 2071694838, 4075949567, 1802223062, 1869591006, 3318043793, 808472672, 16843522, 1734846926, 724270422, 4278065639, 3621216949, 2880169549, 1987484396, 3402253711, 2189597983, 3385409673, 2105378810, 4210693615, 1499065266, 1195886990, 4042263547, 2913856577, 3570689971, 2728590687, 2947541573, 2627518243, 2762274643, 1920112356, 3233831835, 3082273397, 4261223649, 2475929149, 640051788, 909531756, 1061110142, 4160160501, 3435941763, 875846760, 2779116625, 3857003729, 4059105529, 1903268834, 3638064043, 825316194, 353713962, 67374088, 3351728789, 589522246, 3284360861, 404236336, 2526454071, 84217610, 2593830191, 117901582, 303183396, 2155911963, 3806477791, 3958056653, 656894286, 2998062463, 1970642922, 151591698, 2206440989, 741110872, 437923380, 454765878, 1852748508, 1515908788, 2694904667, 1381168804, 993742198, 3604373943, 3014905469, 690584402, 3823320797, 791638366, 2223281939, 1398011302, 3520161977, 0, 3991743681, 538992704, 4244381667, 2981218425, 1532751286, 1785380564, 3419096717, 3200178535, 960056178, 1246420628, 1280103576, 1482221744, 3486468741, 3503319995, 4025428677, 2863326543, 4227536621, 1128514950, 1296947098, 859002214, 2240123921, 1162203018, 4193849577, 33687044, 2139062782, 1347481760, 1010582648, 2678045221, 2829640523, 1364325282, 2745433693, 1077985408, 2408548869, 2459086143, 2644360225, 943212656, 4126475505, 3166494563, 3065430391, 3671750063, 555836226, 269496352, 4294908645, 4092792573, 3537006015, 3452783745, 202118168, 320025894, 3974901699, 1600119230, 2543297077, 1145359496, 387397934, 3301201811, 2812801621, 2122220284, 1027426170, 1684319432, 1566435258, 421079858, 1936954854, 1616945344, 2172753945, 1330631070, 3705438115, 572679748, 707427924, 2425400123, 2290647819, 1179044492, 4008585671, 3099120491, 336870440, 3739122087, 1583276732, 185277718, 3688593069, 3772791771, 842159716, 976899700, 168435220, 1229577106, 101059084, 606366792, 1549591736, 3267517855, 3553849021, 2897014595, 1650632388, 2442242105, 2509612081, 3840161747, 2038008818, 3890688725, 3368567691, 926374254, 1835907034, 2374863873, 3587531953, 1313788572, 2846482505, 1819063512, 1448540844, 4109633523, 3941213647, 1701162954, 2054852340, 2930698567, 134748176, 3132806511, 2021165296, 623210314, 774795868, 471606328, 2795958615, 3031746419, 3334885783, 3907527627, 3722280097, 1953799400, 522133822, 1263263126, 3183336545, 2341176845, 2324333839, 1886425312, 1044267644, 3048588401, 1718004428, 1212733584, 50529542, 4143317495, 235803164, 1633788866, 892690282, 1465383342, 3115962473, 2256965911, 3250673817, 488449850, 2661202215, 3789633753, 4177007595, 2560144171, 286339874, 1768537042, 3654906025, 2391705863, 2492770099, 2610673197, 505291324, 2273808917, 3924369609, 3469625735, 1431699370, 673740880, 3755965093, 2358021891, 2711746649, 2307489801, 218961690, 3217021541, 3873845719, 1111672452, 1751693520, 1094828930, 2576986153, 757954394, 252645662, 2964376443, 1414855848, 3149649517, 370555436];
+        var T5 = [1374988112, 2118214995, 437757123, 975658646, 1001089995, 530400753, 2902087851, 1273168787, 540080725, 2910219766, 2295101073, 4110568485, 1340463100, 3307916247, 641025152, 3043140495, 3736164937, 632953703, 1172967064, 1576976609, 3274667266, 2169303058, 2370213795, 1809054150, 59727847, 361929877, 3211623147, 2505202138, 3569255213, 1484005843, 1239443753, 2395588676, 1975683434, 4102977912, 2572697195, 666464733, 3202437046, 4035489047, 3374361702, 2110667444, 1675577880, 3843699074, 2538681184, 1649639237, 2976151520, 3144396420, 4269907996, 4178062228, 1883793496, 2403728665, 2497604743, 1383856311, 2876494627, 1917518562, 3810496343, 1716890410, 3001755655, 800440835, 2261089178, 3543599269, 807962610, 599762354, 33778362, 3977675356, 2328828971, 2809771154, 4077384432, 1315562145, 1708848333, 101039829, 3509871135, 3299278474, 875451293, 2733856160, 92987698, 2767645557, 193195065, 1080094634, 1584504582, 3178106961, 1042385657, 2531067453, 3711829422, 1306967366, 2438237621, 1908694277, 67556463, 1615861247, 429456164, 3602770327, 2302690252, 1742315127, 2968011453, 126454664, 3877198648, 2043211483, 2709260871, 2084704233, 4169408201, 0, 159417987, 841739592, 504459436, 1817866830, 4245618683, 260388950, 1034867998, 908933415, 168810852, 1750902305, 2606453969, 607530554, 202008497, 2472011535, 3035535058, 463180190, 2160117071, 1641816226, 1517767529, 470948374, 3801332234, 3231722213, 1008918595, 303765277, 235474187, 4069246893, 766945465, 337553864, 1475418501, 2943682380, 4003061179, 2743034109, 4144047775, 1551037884, 1147550661, 1543208500, 2336434550, 3408119516, 3069049960, 3102011747, 3610369226, 1113818384, 328671808, 2227573024, 2236228733, 3535486456, 2935566865, 3341394285, 496906059, 3702665459, 226906860, 2009195472, 733156972, 2842737049, 294930682, 1206477858, 2835123396, 2700099354, 1451044056, 573804783, 2269728455, 3644379585, 2362090238, 2564033334, 2801107407, 2776292904, 3669462566, 1068351396, 742039012, 1350078989, 1784663195, 1417561698, 4136440770, 2430122216, 775550814, 2193862645, 2673705150, 1775276924, 1876241833, 3475313331, 3366754619, 270040487, 3902563182, 3678124923, 3441850377, 1851332852, 3969562369, 2203032232, 3868552805, 2868897406, 566021896, 4011190502, 3135740889, 1248802510, 3936291284, 699432150, 832877231, 708780849, 3332740144, 899835584, 1951317047, 4236429990, 3767586992, 866637845, 4043610186, 1106041591, 2144161806, 395441711, 1984812685, 1139781709, 3433712980, 3835036895, 2664543715, 1282050075, 3240894392, 1181045119, 2640243204, 25965917, 4203181171, 4211818798, 3009879386, 2463879762, 3910161971, 1842759443, 2597806476, 933301370, 1509430414, 3943906441, 3467192302, 3076639029, 3776767469, 2051518780, 2631065433, 1441952575, 404016761, 1942435775, 1408749034, 1610459739, 3745345300, 2017778566, 3400528769, 3110650942, 941896748, 3265478751, 371049330, 3168937228, 675039627, 4279080257, 967311729, 135050206, 3635733660, 1683407248, 2076935265, 3576870512, 1215061108, 3501741890];
+        var T6 = [1347548327, 1400783205, 3273267108, 2520393566, 3409685355, 4045380933, 2880240216, 2471224067, 1428173050, 4138563181, 2441661558, 636813900, 4233094615, 3620022987, 2149987652, 2411029155, 1239331162, 1730525723, 2554718734, 3781033664, 46346101, 310463728, 2743944855, 3328955385, 3875770207, 2501218972, 3955191162, 3667219033, 768917123, 3545789473, 692707433, 1150208456, 1786102409, 2029293177, 1805211710, 3710368113, 3065962831, 401639597, 1724457132, 3028143674, 409198410, 2196052529, 1620529459, 1164071807, 3769721975, 2226875310, 486441376, 2499348523, 1483753576, 428819965, 2274680428, 3075636216, 598438867, 3799141122, 1474502543, 711349675, 129166120, 53458370, 2592523643, 2782082824, 4063242375, 2988687269, 3120694122, 1559041666, 730517276, 2460449204, 4042459122, 2706270690, 3446004468, 3573941694, 533804130, 2328143614, 2637442643, 2695033685, 839224033, 1973745387, 957055980, 2856345839, 106852767, 1371368976, 4181598602, 1033297158, 2933734917, 1179510461, 3046200461, 91341917, 1862534868, 4284502037, 605657339, 2547432937, 3431546947, 2003294622, 3182487618, 2282195339, 954669403, 3682191598, 1201765386, 3917234703, 3388507166, 0, 2198438022, 1211247597, 2887651696, 1315723890, 4227665663, 1443857720, 507358933, 657861945, 1678381017, 560487590, 3516619604, 975451694, 2970356327, 261314535, 3535072918, 2652609425, 1333838021, 2724322336, 1767536459, 370938394, 182621114, 3854606378, 1128014560, 487725847, 185469197, 2918353863, 3106780840, 3356761769, 2237133081, 1286567175, 3152976349, 4255350624, 2683765030, 3160175349, 3309594171, 878443390, 1988838185, 3704300486, 1756818940, 1673061617, 3403100636, 272786309, 1075025698, 545572369, 2105887268, 4174560061, 296679730, 1841768865, 1260232239, 4091327024, 3960309330, 3497509347, 1814803222, 2578018489, 4195456072, 575138148, 3299409036, 446754879, 3629546796, 4011996048, 3347532110, 3252238545, 4270639778, 915985419, 3483825537, 681933534, 651868046, 2755636671, 3828103837, 223377554, 2607439820, 1649704518, 3270937875, 3901806776, 1580087799, 4118987695, 3198115200, 2087309459, 2842678573, 3016697106, 1003007129, 2802849917, 1860738147, 2077965243, 164439672, 4100872472, 32283319, 2827177882, 1709610350, 2125135846, 136428751, 3874428392, 3652904859, 3460984630, 3572145929, 3593056380, 2939266226, 824852259, 818324884, 3224740454, 930369212, 2801566410, 2967507152, 355706840, 1257309336, 4148292826, 243256656, 790073846, 2373340630, 1296297904, 1422699085, 3756299780, 3818836405, 457992840, 3099667487, 2135319889, 77422314, 1560382517, 1945798516, 788204353, 1521706781, 1385356242, 870912086, 325965383, 2358957921, 2050466060, 2388260884, 2313884476, 4006521127, 901210569, 3990953189, 1014646705, 1503449823, 1062597235, 2031621326, 3212035895, 3931371469, 1533017514, 350174575, 2256028891, 2177544179, 1052338372, 741876788, 1606591296, 1914052035, 213705253, 2334669897, 1107234197, 1899603969, 3725069491, 2631447780, 2422494913, 1635502980, 1893020342, 1950903388, 1120974935];
+        var T7 = [2807058932, 1699970625, 2764249623, 1586903591, 1808481195, 1173430173, 1487645946, 59984867, 4199882800, 1844882806, 1989249228, 1277555970, 3623636965, 3419915562, 1149249077, 2744104290, 1514790577, 459744698, 244860394, 3235995134, 1963115311, 4027744588, 2544078150, 4190530515, 1608975247, 2627016082, 2062270317, 1507497298, 2200818878, 567498868, 1764313568, 3359936201, 2305455554, 2037970062, 1047239e3, 1910319033, 1337376481, 2904027272, 2892417312, 984907214, 1243112415, 830661914, 861968209, 2135253587, 2011214180, 2927934315, 2686254721, 731183368, 1750626376, 4246310725, 1820824798, 4172763771, 3542330227, 48394827, 2404901663, 2871682645, 671593195, 3254988725, 2073724613, 145085239, 2280796200, 2779915199, 1790575107, 2187128086, 472615631, 3029510009, 4075877127, 3802222185, 4107101658, 3201631749, 1646252340, 4270507174, 1402811438, 1436590835, 3778151818, 3950355702, 3963161475, 4020912224, 2667994737, 273792366, 2331590177, 104699613, 95345982, 3175501286, 2377486676, 1560637892, 3564045318, 369057872, 4213447064, 3919042237, 1137477952, 2658625497, 1119727848, 2340947849, 1530455833, 4007360968, 172466556, 266959938, 516552836, 0, 2256734592, 3980931627, 1890328081, 1917742170, 4294704398, 945164165, 3575528878, 958871085, 3647212047, 2787207260, 1423022939, 775562294, 1739656202, 3876557655, 2530391278, 2443058075, 3310321856, 547512796, 1265195639, 437656594, 3121275539, 719700128, 3762502690, 387781147, 218828297, 3350065803, 2830708150, 2848461854, 428169201, 122466165, 3720081049, 1627235199, 648017665, 4122762354, 1002783846, 2117360635, 695634755, 3336358691, 4234721005, 4049844452, 3704280881, 2232435299, 574624663, 287343814, 612205898, 1039717051, 840019705, 2708326185, 793451934, 821288114, 1391201670, 3822090177, 376187827, 3113855344, 1224348052, 1679968233, 2361698556, 1058709744, 752375421, 2431590963, 1321699145, 3519142200, 2734591178, 188127444, 2177869557, 3727205754, 2384911031, 3215212461, 2648976442, 2450346104, 3432737375, 1180849278, 331544205, 3102249176, 4150144569, 2952102595, 2159976285, 2474404304, 766078933, 313773861, 2570832044, 2108100632, 1668212892, 3145456443, 2013908262, 418672217, 3070356634, 2594734927, 1852171925, 3867060991, 3473416636, 3907448597, 2614737639, 919489135, 164948639, 2094410160, 2997825956, 590424639, 2486224549, 1723872674, 3157750862, 3399941250, 3501252752, 3625268135, 2555048196, 3673637356, 1343127501, 4130281361, 3599595085, 2957853679, 1297403050, 81781910, 3051593425, 2283490410, 532201772, 1367295589, 3926170974, 895287692, 1953757831, 1093597963, 492483431, 3528626907, 1446242576, 1192455638, 1636604631, 209336225, 344873464, 1015671571, 669961897, 3375740769, 3857572124, 2973530695, 3747192018, 1933530610, 3464042516, 935293895, 3454686199, 2858115069, 1863638845, 3683022916, 4085369519, 3292445032, 875313188, 1080017571, 3279033885, 621591778, 1233856572, 2504130317, 24197544, 3017672716, 3835484340, 3247465558, 2220981195, 3060847922, 1551124588, 1463996600];
+        var T8 = [4104605777, 1097159550, 396673818, 660510266, 2875968315, 2638606623, 4200115116, 3808662347, 821712160, 1986918061, 3430322568, 38544885, 3856137295, 718002117, 893681702, 1654886325, 2975484382, 3122358053, 3926825029, 4274053469, 796197571, 1290801793, 1184342925, 3556361835, 2405426947, 2459735317, 1836772287, 1381620373, 3196267988, 1948373848, 3764988233, 3385345166, 3263785589, 2390325492, 1480485785, 3111247143, 3780097726, 2293045232, 548169417, 3459953789, 3746175075, 439452389, 1362321559, 1400849762, 1685577905, 1806599355, 2174754046, 137073913, 1214797936, 1174215055, 3731654548, 2079897426, 1943217067, 1258480242, 529487843, 1437280870, 3945269170, 3049390895, 3313212038, 923313619, 679998e3, 3215307299, 57326082, 377642221, 3474729866, 2041877159, 133361907, 1776460110, 3673476453, 96392454, 878845905, 2801699524, 777231668, 4082475170, 2330014213, 4142626212, 2213296395, 1626319424, 1906247262, 1846563261, 562755902, 3708173718, 1040559837, 3871163981, 1418573201, 3294430577, 114585348, 1343618912, 2566595609, 3186202582, 1078185097, 3651041127, 3896688048, 2307622919, 425408743, 3371096953, 2081048481, 1108339068, 2216610296, 0, 2156299017, 736970802, 292596766, 1517440620, 251657213, 2235061775, 2933202493, 758720310, 265905162, 1554391400, 1532285339, 908999204, 174567692, 1474760595, 4002861748, 2610011675, 3234156416, 3693126241, 2001430874, 303699484, 2478443234, 2687165888, 585122620, 454499602, 151849742, 2345119218, 3064510765, 514443284, 4044981591, 1963412655, 2581445614, 2137062819, 19308535, 1928707164, 1715193156, 4219352155, 1126790795, 600235211, 3992742070, 3841024952, 836553431, 1669664834, 2535604243, 3323011204, 1243905413, 3141400786, 4180808110, 698445255, 2653899549, 2989552604, 2253581325, 3252932727, 3004591147, 1891211689, 2487810577, 3915653703, 4237083816, 4030667424, 2100090966, 865136418, 1229899655, 953270745, 3399679628, 3557504664, 4118925222, 2061379749, 3079546586, 2915017791, 983426092, 2022837584, 1607244650, 2118541908, 2366882550, 3635996816, 972512814, 3283088770, 1568718495, 3499326569, 3576539503, 621982671, 2895723464, 410887952, 2623762152, 1002142683, 645401037, 1494807662, 2595684844, 1335535747, 2507040230, 4293295786, 3167684641, 367585007, 3885750714, 1865862730, 2668221674, 2960971305, 2763173681, 1059270954, 2777952454, 2724642869, 1320957812, 2194319100, 2429595872, 2815956275, 77089521, 3973773121, 3444575871, 2448830231, 1305906550, 4021308739, 2857194700, 2516901860, 3518358430, 1787304780, 740276417, 1699839814, 1592394909, 2352307457, 2272556026, 188821243, 1729977011, 3687994002, 274084841, 3594982253, 3613494426, 2701949495, 4162096729, 322734571, 2837966542, 1640576439, 484830689, 1202797690, 3537852828, 4067639125, 349075736, 3342319475, 4157467219, 4255800159, 1030690015, 1155237496, 2951971274, 1757691577, 607398968, 2738905026, 499347990, 3794078908, 1011452712, 227885567, 2818666809, 213114376, 3034881240, 1455525988, 3414450555, 850817237, 1817998408, 3092726480];
+        var U1 = [0, 235474187, 470948374, 303765277, 941896748, 908933415, 607530554, 708780849, 1883793496, 2118214995, 1817866830, 1649639237, 1215061108, 1181045119, 1417561698, 1517767529, 3767586992, 4003061179, 4236429990, 4069246893, 3635733660, 3602770327, 3299278474, 3400528769, 2430122216, 2664543715, 2362090238, 2193862645, 2835123396, 2801107407, 3035535058, 3135740889, 3678124923, 3576870512, 3341394285, 3374361702, 3810496343, 3977675356, 4279080257, 4043610186, 2876494627, 2776292904, 3076639029, 3110650942, 2472011535, 2640243204, 2403728665, 2169303058, 1001089995, 899835584, 666464733, 699432150, 59727847, 226906860, 530400753, 294930682, 1273168787, 1172967064, 1475418501, 1509430414, 1942435775, 2110667444, 1876241833, 1641816226, 2910219766, 2743034109, 2976151520, 3211623147, 2505202138, 2606453969, 2302690252, 2269728455, 3711829422, 3543599269, 3240894392, 3475313331, 3843699074, 3943906441, 4178062228, 4144047775, 1306967366, 1139781709, 1374988112, 1610459739, 1975683434, 2076935265, 1775276924, 1742315127, 1034867998, 866637845, 566021896, 800440835, 92987698, 193195065, 429456164, 395441711, 1984812685, 2017778566, 1784663195, 1683407248, 1315562145, 1080094634, 1383856311, 1551037884, 101039829, 135050206, 437757123, 337553864, 1042385657, 807962610, 573804783, 742039012, 2531067453, 2564033334, 2328828971, 2227573024, 2935566865, 2700099354, 3001755655, 3168937228, 3868552805, 3902563182, 4203181171, 4102977912, 3736164937, 3501741890, 3265478751, 3433712980, 1106041591, 1340463100, 1576976609, 1408749034, 2043211483, 2009195472, 1708848333, 1809054150, 832877231, 1068351396, 766945465, 599762354, 159417987, 126454664, 361929877, 463180190, 2709260871, 2943682380, 3178106961, 3009879386, 2572697195, 2538681184, 2236228733, 2336434550, 3509871135, 3745345300, 3441850377, 3274667266, 3910161971, 3877198648, 4110568485, 4211818798, 2597806476, 2497604743, 2261089178, 2295101073, 2733856160, 2902087851, 3202437046, 2968011453, 3936291284, 3835036895, 4136440770, 4169408201, 3535486456, 3702665459, 3467192302, 3231722213, 2051518780, 1951317047, 1716890410, 1750902305, 1113818384, 1282050075, 1584504582, 1350078989, 168810852, 67556463, 371049330, 404016761, 841739592, 1008918595, 775550814, 540080725, 3969562369, 3801332234, 4035489047, 4269907996, 3569255213, 3669462566, 3366754619, 3332740144, 2631065433, 2463879762, 2160117071, 2395588676, 2767645557, 2868897406, 3102011747, 3069049960, 202008497, 33778362, 270040487, 504459436, 875451293, 975658646, 675039627, 641025152, 2084704233, 1917518562, 1615861247, 1851332852, 1147550661, 1248802510, 1484005843, 1451044056, 933301370, 967311729, 733156972, 632953703, 260388950, 25965917, 328671808, 496906059, 1206477858, 1239443753, 1543208500, 1441952575, 2144161806, 1908694277, 1675577880, 1842759443, 3610369226, 3644379585, 3408119516, 3307916247, 4011190502, 3776767469, 4077384432, 4245618683, 2809771154, 2842737049, 3144396420, 3043140495, 2673705150, 2438237621, 2203032232, 2370213795];
+        var U2 = [0, 185469197, 370938394, 487725847, 741876788, 657861945, 975451694, 824852259, 1483753576, 1400783205, 1315723890, 1164071807, 1950903388, 2135319889, 1649704518, 1767536459, 2967507152, 3152976349, 2801566410, 2918353863, 2631447780, 2547432937, 2328143614, 2177544179, 3901806776, 3818836405, 4270639778, 4118987695, 3299409036, 3483825537, 3535072918, 3652904859, 2077965243, 1893020342, 1841768865, 1724457132, 1474502543, 1559041666, 1107234197, 1257309336, 598438867, 681933534, 901210569, 1052338372, 261314535, 77422314, 428819965, 310463728, 3409685355, 3224740454, 3710368113, 3593056380, 3875770207, 3960309330, 4045380933, 4195456072, 2471224067, 2554718734, 2237133081, 2388260884, 3212035895, 3028143674, 2842678573, 2724322336, 4138563181, 4255350624, 3769721975, 3955191162, 3667219033, 3516619604, 3431546947, 3347532110, 2933734917, 2782082824, 3099667487, 3016697106, 2196052529, 2313884476, 2499348523, 2683765030, 1179510461, 1296297904, 1347548327, 1533017514, 1786102409, 1635502980, 2087309459, 2003294622, 507358933, 355706840, 136428751, 53458370, 839224033, 957055980, 605657339, 790073846, 2373340630, 2256028891, 2607439820, 2422494913, 2706270690, 2856345839, 3075636216, 3160175349, 3573941694, 3725069491, 3273267108, 3356761769, 4181598602, 4063242375, 4011996048, 3828103837, 1033297158, 915985419, 730517276, 545572369, 296679730, 446754879, 129166120, 213705253, 1709610350, 1860738147, 1945798516, 2029293177, 1239331162, 1120974935, 1606591296, 1422699085, 4148292826, 4233094615, 3781033664, 3931371469, 3682191598, 3497509347, 3446004468, 3328955385, 2939266226, 2755636671, 3106780840, 2988687269, 2198438022, 2282195339, 2501218972, 2652609425, 1201765386, 1286567175, 1371368976, 1521706781, 1805211710, 1620529459, 2105887268, 1988838185, 533804130, 350174575, 164439672, 46346101, 870912086, 954669403, 636813900, 788204353, 2358957921, 2274680428, 2592523643, 2441661558, 2695033685, 2880240216, 3065962831, 3182487618, 3572145929, 3756299780, 3270937875, 3388507166, 4174560061, 4091327024, 4006521127, 3854606378, 1014646705, 930369212, 711349675, 560487590, 272786309, 457992840, 106852767, 223377554, 1678381017, 1862534868, 1914052035, 2031621326, 1211247597, 1128014560, 1580087799, 1428173050, 32283319, 182621114, 401639597, 486441376, 768917123, 651868046, 1003007129, 818324884, 1503449823, 1385356242, 1333838021, 1150208456, 1973745387, 2125135846, 1673061617, 1756818940, 2970356327, 3120694122, 2802849917, 2887651696, 2637442643, 2520393566, 2334669897, 2149987652, 3917234703, 3799141122, 4284502037, 4100872472, 3309594171, 3460984630, 3545789473, 3629546796, 2050466060, 1899603969, 1814803222, 1730525723, 1443857720, 1560382517, 1075025698, 1260232239, 575138148, 692707433, 878443390, 1062597235, 243256656, 91341917, 409198410, 325965383, 3403100636, 3252238545, 3704300486, 3620022987, 3874428392, 3990953189, 4042459122, 4227665663, 2460449204, 2578018489, 2226875310, 2411029155, 3198115200, 3046200461, 2827177882, 2743944855];
+        var U3 = [0, 218828297, 437656594, 387781147, 875313188, 958871085, 775562294, 590424639, 1750626376, 1699970625, 1917742170, 2135253587, 1551124588, 1367295589, 1180849278, 1265195639, 3501252752, 3720081049, 3399941250, 3350065803, 3835484340, 3919042237, 4270507174, 4085369519, 3102249176, 3051593425, 2734591178, 2952102595, 2361698556, 2177869557, 2530391278, 2614737639, 3145456443, 3060847922, 2708326185, 2892417312, 2404901663, 2187128086, 2504130317, 2555048196, 3542330227, 3727205754, 3375740769, 3292445032, 3876557655, 3926170974, 4246310725, 4027744588, 1808481195, 1723872674, 1910319033, 2094410160, 1608975247, 1391201670, 1173430173, 1224348052, 59984867, 244860394, 428169201, 344873464, 935293895, 984907214, 766078933, 547512796, 1844882806, 1627235199, 2011214180, 2062270317, 1507497298, 1423022939, 1137477952, 1321699145, 95345982, 145085239, 532201772, 313773861, 830661914, 1015671571, 731183368, 648017665, 3175501286, 2957853679, 2807058932, 2858115069, 2305455554, 2220981195, 2474404304, 2658625497, 3575528878, 3625268135, 3473416636, 3254988725, 3778151818, 3963161475, 4213447064, 4130281361, 3599595085, 3683022916, 3432737375, 3247465558, 3802222185, 4020912224, 4172763771, 4122762354, 3201631749, 3017672716, 2764249623, 2848461854, 2331590177, 2280796200, 2431590963, 2648976442, 104699613, 188127444, 472615631, 287343814, 840019705, 1058709744, 671593195, 621591778, 1852171925, 1668212892, 1953757831, 2037970062, 1514790577, 1463996600, 1080017571, 1297403050, 3673637356, 3623636965, 3235995134, 3454686199, 4007360968, 3822090177, 4107101658, 4190530515, 2997825956, 3215212461, 2830708150, 2779915199, 2256734592, 2340947849, 2627016082, 2443058075, 172466556, 122466165, 273792366, 492483431, 1047239e3, 861968209, 612205898, 695634755, 1646252340, 1863638845, 2013908262, 1963115311, 1446242576, 1530455833, 1277555970, 1093597963, 1636604631, 1820824798, 2073724613, 1989249228, 1436590835, 1487645946, 1337376481, 1119727848, 164948639, 81781910, 331544205, 516552836, 1039717051, 821288114, 669961897, 719700128, 2973530695, 3157750862, 2871682645, 2787207260, 2232435299, 2283490410, 2667994737, 2450346104, 3647212047, 3564045318, 3279033885, 3464042516, 3980931627, 3762502690, 4150144569, 4199882800, 3070356634, 3121275539, 2904027272, 2686254721, 2200818878, 2384911031, 2570832044, 2486224549, 3747192018, 3528626907, 3310321856, 3359936201, 3950355702, 3867060991, 4049844452, 4234721005, 1739656202, 1790575107, 2108100632, 1890328081, 1402811438, 1586903591, 1233856572, 1149249077, 266959938, 48394827, 369057872, 418672217, 1002783846, 919489135, 567498868, 752375421, 209336225, 24197544, 376187827, 459744698, 945164165, 895287692, 574624663, 793451934, 1679968233, 1764313568, 2117360635, 1933530610, 1343127501, 1560637892, 1243112415, 1192455638, 3704280881, 3519142200, 3336358691, 3419915562, 3907448597, 3857572124, 4075877127, 4294704398, 3029510009, 3113855344, 2927934315, 2744104290, 2159976285, 2377486676, 2594734927, 2544078150];
+        var U4 = [0, 151849742, 303699484, 454499602, 607398968, 758720310, 908999204, 1059270954, 1214797936, 1097159550, 1517440620, 1400849762, 1817998408, 1699839814, 2118541908, 2001430874, 2429595872, 2581445614, 2194319100, 2345119218, 3034881240, 3186202582, 2801699524, 2951971274, 3635996816, 3518358430, 3399679628, 3283088770, 4237083816, 4118925222, 4002861748, 3885750714, 1002142683, 850817237, 698445255, 548169417, 529487843, 377642221, 227885567, 77089521, 1943217067, 2061379749, 1640576439, 1757691577, 1474760595, 1592394909, 1174215055, 1290801793, 2875968315, 2724642869, 3111247143, 2960971305, 2405426947, 2253581325, 2638606623, 2487810577, 3808662347, 3926825029, 4044981591, 4162096729, 3342319475, 3459953789, 3576539503, 3693126241, 1986918061, 2137062819, 1685577905, 1836772287, 1381620373, 1532285339, 1078185097, 1229899655, 1040559837, 923313619, 740276417, 621982671, 439452389, 322734571, 137073913, 19308535, 3871163981, 4021308739, 4104605777, 4255800159, 3263785589, 3414450555, 3499326569, 3651041127, 2933202493, 2815956275, 3167684641, 3049390895, 2330014213, 2213296395, 2566595609, 2448830231, 1305906550, 1155237496, 1607244650, 1455525988, 1776460110, 1626319424, 2079897426, 1928707164, 96392454, 213114376, 396673818, 514443284, 562755902, 679998e3, 865136418, 983426092, 3708173718, 3557504664, 3474729866, 3323011204, 4180808110, 4030667424, 3945269170, 3794078908, 2507040230, 2623762152, 2272556026, 2390325492, 2975484382, 3092726480, 2738905026, 2857194700, 3973773121, 3856137295, 4274053469, 4157467219, 3371096953, 3252932727, 3673476453, 3556361835, 2763173681, 2915017791, 3064510765, 3215307299, 2156299017, 2307622919, 2459735317, 2610011675, 2081048481, 1963412655, 1846563261, 1729977011, 1480485785, 1362321559, 1243905413, 1126790795, 878845905, 1030690015, 645401037, 796197571, 274084841, 425408743, 38544885, 188821243, 3613494426, 3731654548, 3313212038, 3430322568, 4082475170, 4200115116, 3780097726, 3896688048, 2668221674, 2516901860, 2366882550, 2216610296, 3141400786, 2989552604, 2837966542, 2687165888, 1202797690, 1320957812, 1437280870, 1554391400, 1669664834, 1787304780, 1906247262, 2022837584, 265905162, 114585348, 499347990, 349075736, 736970802, 585122620, 972512814, 821712160, 2595684844, 2478443234, 2293045232, 2174754046, 3196267988, 3079546586, 2895723464, 2777952454, 3537852828, 3687994002, 3234156416, 3385345166, 4142626212, 4293295786, 3841024952, 3992742070, 174567692, 57326082, 410887952, 292596766, 777231668, 660510266, 1011452712, 893681702, 1108339068, 1258480242, 1343618912, 1494807662, 1715193156, 1865862730, 1948373848, 2100090966, 2701949495, 2818666809, 3004591147, 3122358053, 2235061775, 2352307457, 2535604243, 2653899549, 3915653703, 3764988233, 4219352155, 4067639125, 3444575871, 3294430577, 3746175075, 3594982253, 836553431, 953270745, 600235211, 718002117, 367585007, 484830689, 133361907, 251657213, 2041877159, 1891211689, 1806599355, 1654886325, 1568718495, 1418573201, 1335535747, 1184342925];
+        function convertToInt32(bytes) {
+          var result = [];
+          for (var i3 = 0; i3 < bytes.length; i3 += 4) {
+            result.push(
+              bytes[i3] << 24 | bytes[i3 + 1] << 16 | bytes[i3 + 2] << 8 | bytes[i3 + 3]
+            );
           }
           return result;
-        },
-        _build: function(items, left, right, height) {
-          var N2 = right - left + 1, M2 = this._maxEntries, node;
-          if (N2 <= M2) {
-            node = createNode2(items.slice(left, right + 1));
-            calcBBox2(node, this.toBBox);
-            return node;
+        }
+        var AES = function(key) {
+          if (!(this instanceof AES)) {
+            throw Error("AES must be instanitated with `new`");
           }
-          if (!height) {
-            height = Math.ceil(Math.log(N2) / Math.log(M2));
-            M2 = Math.ceil(N2 / Math.pow(M2, height - 1));
+          Object.defineProperty(this, "key", {
+            value: coerceArray(key, true)
+          });
+          this._prepare();
+        };
+        AES.prototype._prepare = function() {
+          var rounds = numberOfRounds[this.key.length];
+          if (rounds == null) {
+            throw new Error("invalid key size (must be 16, 24 or 32 bytes)");
           }
-          node = createNode2([]);
-          node.leaf = false;
-          node.height = height;
-          var N22 = Math.ceil(N2 / M2), N1 = N22 * Math.ceil(Math.sqrt(M2)), i3, j2, right2, right3;
-          multiSelect2(items, left, right, N1, this.compareMinX);
-          for (i3 = left; i3 <= right; i3 += N1) {
-            right2 = Math.min(i3 + N1 - 1, right);
-            multiSelect2(items, i3, right2, N22, this.compareMinY);
-            for (j2 = i3; j2 <= right2; j2 += N22) {
-              right3 = Math.min(j2 + N22 - 1, right2);
-              node.children.push(this._build(items, j2, right3, height - 1));
-            }
+          this._Ke = [];
+          this._Kd = [];
+          for (var i3 = 0; i3 <= rounds; i3++) {
+            this._Ke.push([0, 0, 0, 0]);
+            this._Kd.push([0, 0, 0, 0]);
           }
-          calcBBox2(node, this.toBBox);
-          return node;
-        },
-        _chooseSubtree: function(bbox2, node, level, path) {
-          var i3, len, child, targetNode, area, enlargement, minArea, minEnlargement;
-          while (true) {
-            path.push(node);
-            if (node.leaf || path.length - 1 === level) break;
-            minArea = minEnlargement = Infinity;
-            for (i3 = 0, len = node.children.length; i3 < len; i3++) {
-              child = node.children[i3];
-              area = bboxArea2(child);
-              enlargement = enlargedArea2(bbox2, child) - area;
-              if (enlargement < minEnlargement) {
-                minEnlargement = enlargement;
-                minArea = area < minArea ? area : minArea;
-                targetNode = child;
-              } else if (enlargement === minEnlargement) {
-                if (area < minArea) {
-                  minArea = area;
-                  targetNode = child;
-                }
+          var roundKeyCount = (rounds + 1) * 4;
+          var KC = this.key.length / 4;
+          var tk = convertToInt32(this.key);
+          var index;
+          for (var i3 = 0; i3 < KC; i3++) {
+            index = i3 >> 2;
+            this._Ke[index][i3 % 4] = tk[i3];
+            this._Kd[rounds - index][i3 % 4] = tk[i3];
+          }
+          var rconpointer = 0;
+          var t2 = KC, tt2;
+          while (t2 < roundKeyCount) {
+            tt2 = tk[KC - 1];
+            tk[0] ^= S2[tt2 >> 16 & 255] << 24 ^ S2[tt2 >> 8 & 255] << 16 ^ S2[tt2 & 255] << 8 ^ S2[tt2 >> 24 & 255] ^ rcon[rconpointer] << 24;
+            rconpointer += 1;
+            if (KC != 8) {
+              for (var i3 = 1; i3 < KC; i3++) {
+                tk[i3] ^= tk[i3 - 1];
+              }
+            } else {
+              for (var i3 = 1; i3 < KC / 2; i3++) {
+                tk[i3] ^= tk[i3 - 1];
+              }
+              tt2 = tk[KC / 2 - 1];
+              tk[KC / 2] ^= S2[tt2 & 255] ^ S2[tt2 >> 8 & 255] << 8 ^ S2[tt2 >> 16 & 255] << 16 ^ S2[tt2 >> 24 & 255] << 24;
+              for (var i3 = KC / 2 + 1; i3 < KC; i3++) {
+                tk[i3] ^= tk[i3 - 1];
               }
             }
-            node = targetNode || node.children[0];
-          }
-          return node;
-        },
-        _insert: function(item, level, isNode) {
-          var toBBox = this.toBBox, bbox2 = isNode ? item : toBBox(item), insertPath = [];
-          var node = this._chooseSubtree(bbox2, this.data, level, insertPath);
-          node.children.push(item);
-          extend3(node, bbox2);
-          while (level >= 0) {
-            if (insertPath[level].children.length > this._maxEntries) {
-              this._split(insertPath, level);
-              level--;
-            } else break;
+            var i3 = 0, r2, c2;
+            while (i3 < KC && t2 < roundKeyCount) {
+              r2 = t2 >> 2;
+              c2 = t2 % 4;
+              this._Ke[r2][c2] = tk[i3];
+              this._Kd[rounds - r2][c2] = tk[i3++];
+              t2++;
+            }
           }
-          this._adjustParentBBoxes(bbox2, insertPath, level);
-        },
-        // split overflowed node into two
-        _split: function(insertPath, level) {
-          var node = insertPath[level], M2 = node.children.length, m2 = this._minEntries;
-          this._chooseSplitAxis(node, m2, M2);
-          var splitIndex = this._chooseSplitIndex(node, m2, M2);
-          var newNode = createNode2(node.children.splice(splitIndex, node.children.length - splitIndex));
-          newNode.height = node.height;
-          newNode.leaf = node.leaf;
-          calcBBox2(node, this.toBBox);
-          calcBBox2(newNode, this.toBBox);
-          if (level) insertPath[level - 1].children.push(newNode);
-          else this._splitRoot(node, newNode);
-        },
-        _splitRoot: function(node, newNode) {
-          this.data = createNode2([node, newNode]);
-          this.data.height = node.height + 1;
-          this.data.leaf = false;
-          calcBBox2(this.data, this.toBBox);
-        },
-        _chooseSplitIndex: function(node, m2, M2) {
-          var i3, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
-          minOverlap = minArea = Infinity;
-          for (i3 = m2; i3 <= M2 - m2; i3++) {
-            bbox1 = distBBox2(node, 0, i3, this.toBBox);
-            bbox2 = distBBox2(node, i3, M2, this.toBBox);
-            overlap = intersectionArea2(bbox1, bbox2);
-            area = bboxArea2(bbox1) + bboxArea2(bbox2);
-            if (overlap < minOverlap) {
-              minOverlap = overlap;
-              index = i3;
-              minArea = area < minArea ? area : minArea;
-            } else if (overlap === minOverlap) {
-              if (area < minArea) {
-                minArea = area;
-                index = i3;
-              }
+          for (var r2 = 1; r2 < rounds; r2++) {
+            for (var c2 = 0; c2 < 4; c2++) {
+              tt2 = this._Kd[r2][c2];
+              this._Kd[r2][c2] = U1[tt2 >> 24 & 255] ^ U2[tt2 >> 16 & 255] ^ U3[tt2 >> 8 & 255] ^ U4[tt2 & 255];
             }
           }
-          return index;
-        },
-        // sorts node children by the best axis for split
-        _chooseSplitAxis: function(node, m2, M2) {
-          var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX2, compareMinY = node.leaf ? this.compareMinY : compareNodeMinY2, xMargin = this._allDistMargin(node, m2, M2, compareMinX), yMargin = this._allDistMargin(node, m2, M2, compareMinY);
-          if (xMargin < yMargin) node.children.sort(compareMinX);
-        },
-        // total margin of all possible split distributions where each node is at least m full
-        _allDistMargin: function(node, m2, M2, compare2) {
-          node.children.sort(compare2);
-          var toBBox = this.toBBox, leftBBox = distBBox2(node, 0, m2, toBBox), rightBBox = distBBox2(node, M2 - m2, M2, toBBox), margin = bboxMargin2(leftBBox) + bboxMargin2(rightBBox), i3, child;
-          for (i3 = m2; i3 < M2 - m2; i3++) {
-            child = node.children[i3];
-            extend3(leftBBox, node.leaf ? toBBox(child) : child);
-            margin += bboxMargin2(leftBBox);
+        };
+        AES.prototype.encrypt = function(plaintext) {
+          if (plaintext.length != 16) {
+            throw new Error("invalid plaintext size (must be 16 bytes)");
           }
-          for (i3 = M2 - m2 - 1; i3 >= m2; i3--) {
-            child = node.children[i3];
-            extend3(rightBBox, node.leaf ? toBBox(child) : child);
-            margin += bboxMargin2(rightBBox);
+          var rounds = this._Ke.length - 1;
+          var a2 = [0, 0, 0, 0];
+          var t2 = convertToInt32(plaintext);
+          for (var i3 = 0; i3 < 4; i3++) {
+            t2[i3] ^= this._Ke[0][i3];
           }
-          return margin;
-        },
-        _adjustParentBBoxes: function(bbox2, path, level) {
-          for (var i3 = level; i3 >= 0; i3--) {
-            extend3(path[i3], bbox2);
+          for (var r2 = 1; r2 < rounds; r2++) {
+            for (var i3 = 0; i3 < 4; i3++) {
+              a2[i3] = T1[t2[i3] >> 24 & 255] ^ T2[t2[(i3 + 1) % 4] >> 16 & 255] ^ T3[t2[(i3 + 2) % 4] >> 8 & 255] ^ T4[t2[(i3 + 3) % 4] & 255] ^ this._Ke[r2][i3];
+            }
+            t2 = a2.slice();
           }
-        },
-        _condense: function(path) {
-          for (var i3 = path.length - 1, siblings; i3 >= 0; i3--) {
-            if (path[i3].children.length === 0) {
-              if (i3 > 0) {
-                siblings = path[i3 - 1].children;
-                siblings.splice(siblings.indexOf(path[i3]), 1);
-              } else this.clear();
-            } else calcBBox2(path[i3], this.toBBox);
+          var result = createArray(16), tt2;
+          for (var i3 = 0; i3 < 4; i3++) {
+            tt2 = this._Ke[rounds][i3];
+            result[4 * i3] = (S2[t2[i3] >> 24 & 255] ^ tt2 >> 24) & 255;
+            result[4 * i3 + 1] = (S2[t2[(i3 + 1) % 4] >> 16 & 255] ^ tt2 >> 16) & 255;
+            result[4 * i3 + 2] = (S2[t2[(i3 + 2) % 4] >> 8 & 255] ^ tt2 >> 8) & 255;
+            result[4 * i3 + 3] = (S2[t2[(i3 + 3) % 4] & 255] ^ tt2) & 255;
           }
-        },
-        _initFormat: function(format2) {
-          var compareArr = ["return a", " - b", ";"];
-          this.compareMinX = new Function("a", "b", compareArr.join(format2[0]));
-          this.compareMinY = new Function("a", "b", compareArr.join(format2[1]));
-          this.toBBox = new Function(
-            "a",
-            "return {minX: a" + format2[0] + ", minY: a" + format2[1] + ", maxX: a" + format2[2] + ", maxY: a" + format2[3] + "};"
-          );
-        }
-      };
-      function findItem2(item, items, equalsFn) {
-        if (!equalsFn) return items.indexOf(item);
-        for (var i3 = 0; i3 < items.length; i3++) {
-          if (equalsFn(item, items[i3])) return i3;
-        }
-        return -1;
-      }
-      function calcBBox2(node, toBBox) {
-        distBBox2(node, 0, node.children.length, toBBox, node);
-      }
-      function distBBox2(node, k2, p2, toBBox, destNode) {
-        if (!destNode) destNode = createNode2(null);
-        destNode.minX = Infinity;
-        destNode.minY = Infinity;
-        destNode.maxX = -Infinity;
-        destNode.maxY = -Infinity;
-        for (var i3 = k2, child; i3 < p2; i3++) {
-          child = node.children[i3];
-          extend3(destNode, node.leaf ? toBBox(child) : child);
-        }
-        return destNode;
-      }
-      function extend3(a2, b2) {
-        a2.minX = Math.min(a2.minX, b2.minX);
-        a2.minY = Math.min(a2.minY, b2.minY);
-        a2.maxX = Math.max(a2.maxX, b2.maxX);
-        a2.maxY = Math.max(a2.maxY, b2.maxY);
-        return a2;
-      }
-      function compareNodeMinX2(a2, b2) {
-        return a2.minX - b2.minX;
-      }
-      function compareNodeMinY2(a2, b2) {
-        return a2.minY - b2.minY;
-      }
-      function bboxArea2(a2) {
-        return (a2.maxX - a2.minX) * (a2.maxY - a2.minY);
-      }
-      function bboxMargin2(a2) {
-        return a2.maxX - a2.minX + (a2.maxY - a2.minY);
-      }
-      function enlargedArea2(a2, b2) {
-        return (Math.max(b2.maxX, a2.maxX) - Math.min(b2.minX, a2.minX)) * (Math.max(b2.maxY, a2.maxY) - Math.min(b2.minY, a2.minY));
-      }
-      function intersectionArea2(a2, b2) {
-        var minX = Math.max(a2.minX, b2.minX), minY = Math.max(a2.minY, b2.minY), maxX = Math.min(a2.maxX, b2.maxX), maxY = Math.min(a2.maxY, b2.maxY);
-        return Math.max(0, maxX - minX) * Math.max(0, maxY - minY);
-      }
-      function contains2(a2, b2) {
-        return a2.minX <= b2.minX && a2.minY <= b2.minY && b2.maxX <= a2.maxX && b2.maxY <= a2.maxY;
-      }
-      function intersects2(a2, b2) {
-        return b2.minX <= a2.maxX && b2.minY <= a2.maxY && b2.maxX >= a2.minX && b2.maxY >= a2.minY;
-      }
-      function createNode2(children2) {
-        return {
-          children: children2,
-          height: 1,
-          leaf: true,
-          minX: Infinity,
-          minY: Infinity,
-          maxX: -Infinity,
-          maxY: -Infinity
+          return result;
         };
-      }
-      function multiSelect2(arr, left, right, n3, compare2) {
-        var stack = [left, right], mid;
-        while (stack.length) {
-          right = stack.pop();
-          left = stack.pop();
-          if (right - left <= n3) continue;
-          mid = left + Math.ceil((right - left) / n3 / 2) * n3;
-          quickselect3(arr, mid, left, right, compare2);
-          stack.push(left, mid, mid, right);
-        }
-      }
-    }
-  });
-
-  // node_modules/lineclip/index.js
-  var require_lineclip = __commonJS({
-    "node_modules/lineclip/index.js"(exports2, module2) {
-      "use strict";
-      module2.exports = lineclip2;
-      lineclip2.polyline = lineclip2;
-      lineclip2.polygon = polygonclip2;
-      function lineclip2(points, bbox2, result) {
-        var len = points.length, codeA = bitCode2(points[0], bbox2), part = [], i3, a2, b2, codeB, lastCode;
-        if (!result) result = [];
-        for (i3 = 1; i3 < len; i3++) {
-          a2 = points[i3 - 1];
-          b2 = points[i3];
-          codeB = lastCode = bitCode2(b2, bbox2);
-          while (true) {
-            if (!(codeA | codeB)) {
-              part.push(a2);
-              if (codeB !== lastCode) {
-                part.push(b2);
-                if (i3 < len - 1) {
-                  result.push(part);
-                  part = [];
-                }
-              } else if (i3 === len - 1) {
-                part.push(b2);
-              }
-              break;
-            } else if (codeA & codeB) {
-              break;
-            } else if (codeA) {
-              a2 = intersect2(a2, b2, codeA, bbox2);
-              codeA = bitCode2(a2, bbox2);
-            } else {
-              b2 = intersect2(a2, b2, codeB, bbox2);
-              codeB = bitCode2(b2, bbox2);
-            }
+        AES.prototype.decrypt = function(ciphertext) {
+          if (ciphertext.length != 16) {
+            throw new Error("invalid ciphertext size (must be 16 bytes)");
           }
-          codeA = lastCode;
-        }
-        if (part.length) result.push(part);
-        return result;
-      }
-      function polygonclip2(points, bbox2) {
-        var result, edge, prev, prevInside, i3, p2, inside;
-        for (edge = 1; edge <= 8; edge *= 2) {
-          result = [];
-          prev = points[points.length - 1];
-          prevInside = !(bitCode2(prev, bbox2) & edge);
-          for (i3 = 0; i3 < points.length; i3++) {
-            p2 = points[i3];
-            inside = !(bitCode2(p2, bbox2) & edge);
-            if (inside !== prevInside) result.push(intersect2(prev, p2, edge, bbox2));
-            if (inside) result.push(p2);
-            prev = p2;
-            prevInside = inside;
+          var rounds = this._Kd.length - 1;
+          var a2 = [0, 0, 0, 0];
+          var t2 = convertToInt32(ciphertext);
+          for (var i3 = 0; i3 < 4; i3++) {
+            t2[i3] ^= this._Kd[0][i3];
           }
-          points = result;
-          if (!points.length) break;
-        }
-        return result;
-      }
-      function intersect2(a2, b2, edge, bbox2) {
-        return edge & 8 ? [a2[0] + (b2[0] - a2[0]) * (bbox2[3] - a2[1]) / (b2[1] - a2[1]), bbox2[3]] : (
-          // top
-          edge & 4 ? [a2[0] + (b2[0] - a2[0]) * (bbox2[1] - a2[1]) / (b2[1] - a2[1]), bbox2[1]] : (
-            // bottom
-            edge & 2 ? [bbox2[2], a2[1] + (b2[1] - a2[1]) * (bbox2[2] - a2[0]) / (b2[0] - a2[0])] : (
-              // right
-              edge & 1 ? [bbox2[0], a2[1] + (b2[1] - a2[1]) * (bbox2[0] - a2[0]) / (b2[0] - a2[0])] : (
-                // left
-                null
-              )
-            )
-          )
-        );
-      }
-      function bitCode2(p2, bbox2) {
-        var code = 0;
-        if (p2[0] < bbox2[0]) code |= 1;
-        else if (p2[0] > bbox2[2]) code |= 2;
-        if (p2[1] < bbox2[1]) code |= 4;
-        else if (p2[1] > bbox2[3]) code |= 8;
-        return code;
-      }
-    }
-  });
-
-  // node_modules/which-polygon/index.js
-  var require_which_polygon = __commonJS({
-    "node_modules/which-polygon/index.js"(exports2, module2) {
-      "use strict";
-      var rbush = require_rbush();
-      var lineclip2 = require_lineclip();
-      module2.exports = whichPolygon5;
-      function whichPolygon5(data) {
-        var bboxes = [];
-        for (var i3 = 0; i3 < data.features.length; i3++) {
-          var feature3 = data.features[i3];
-          if (!feature3.geometry) continue;
-          var coords = feature3.geometry.coordinates;
-          if (feature3.geometry.type === "Polygon") {
-            bboxes.push(treeItem(coords, feature3.properties));
-          } else if (feature3.geometry.type === "MultiPolygon") {
-            for (var j2 = 0; j2 < coords.length; j2++) {
-              bboxes.push(treeItem(coords[j2], feature3.properties));
+          for (var r2 = 1; r2 < rounds; r2++) {
+            for (var i3 = 0; i3 < 4; i3++) {
+              a2[i3] = T5[t2[i3] >> 24 & 255] ^ T6[t2[(i3 + 3) % 4] >> 16 & 255] ^ T7[t2[(i3 + 2) % 4] >> 8 & 255] ^ T8[t2[(i3 + 1) % 4] & 255] ^ this._Kd[r2][i3];
             }
+            t2 = a2.slice();
           }
-        }
-        var tree = rbush().load(bboxes);
-        function query(p2, multi) {
-          var output = [], result = tree.search({
-            minX: p2[0],
-            minY: p2[1],
-            maxX: p2[0],
-            maxY: p2[1]
-          });
-          for (var i4 = 0; i4 < result.length; i4++) {
-            if (insidePolygon(result[i4].coords, p2)) {
-              if (multi)
-                output.push(result[i4].props);
-              else
-                return result[i4].props;
+          var result = createArray(16), tt2;
+          for (var i3 = 0; i3 < 4; i3++) {
+            tt2 = this._Kd[rounds][i3];
+            result[4 * i3] = (Si[t2[i3] >> 24 & 255] ^ tt2 >> 24) & 255;
+            result[4 * i3 + 1] = (Si[t2[(i3 + 3) % 4] >> 16 & 255] ^ tt2 >> 16) & 255;
+            result[4 * i3 + 2] = (Si[t2[(i3 + 2) % 4] >> 8 & 255] ^ tt2 >> 8) & 255;
+            result[4 * i3 + 3] = (Si[t2[(i3 + 1) % 4] & 255] ^ tt2) & 255;
+          }
+          return result;
+        };
+        var ModeOfOperationECB = function(key) {
+          if (!(this instanceof ModeOfOperationECB)) {
+            throw Error("AES must be instanitated with `new`");
+          }
+          this.description = "Electronic Code Block";
+          this.name = "ecb";
+          this._aes = new AES(key);
+        };
+        ModeOfOperationECB.prototype.encrypt = function(plaintext) {
+          plaintext = coerceArray(plaintext);
+          if (plaintext.length % 16 !== 0) {
+            throw new Error("invalid plaintext size (must be multiple of 16 bytes)");
+          }
+          var ciphertext = createArray(plaintext.length);
+          var block2 = createArray(16);
+          for (var i3 = 0; i3 < plaintext.length; i3 += 16) {
+            copyArray(plaintext, block2, 0, i3, i3 + 16);
+            block2 = this._aes.encrypt(block2);
+            copyArray(block2, ciphertext, i3);
+          }
+          return ciphertext;
+        };
+        ModeOfOperationECB.prototype.decrypt = function(ciphertext) {
+          ciphertext = coerceArray(ciphertext);
+          if (ciphertext.length % 16 !== 0) {
+            throw new Error("invalid ciphertext size (must be multiple of 16 bytes)");
+          }
+          var plaintext = createArray(ciphertext.length);
+          var block2 = createArray(16);
+          for (var i3 = 0; i3 < ciphertext.length; i3 += 16) {
+            copyArray(ciphertext, block2, 0, i3, i3 + 16);
+            block2 = this._aes.decrypt(block2);
+            copyArray(block2, plaintext, i3);
+          }
+          return plaintext;
+        };
+        var ModeOfOperationCBC = function(key, iv) {
+          if (!(this instanceof ModeOfOperationCBC)) {
+            throw Error("AES must be instanitated with `new`");
+          }
+          this.description = "Cipher Block Chaining";
+          this.name = "cbc";
+          if (!iv) {
+            iv = createArray(16);
+          } else if (iv.length != 16) {
+            throw new Error("invalid initialation vector size (must be 16 bytes)");
+          }
+          this._lastCipherblock = coerceArray(iv, true);
+          this._aes = new AES(key);
+        };
+        ModeOfOperationCBC.prototype.encrypt = function(plaintext) {
+          plaintext = coerceArray(plaintext);
+          if (plaintext.length % 16 !== 0) {
+            throw new Error("invalid plaintext size (must be multiple of 16 bytes)");
+          }
+          var ciphertext = createArray(plaintext.length);
+          var block2 = createArray(16);
+          for (var i3 = 0; i3 < plaintext.length; i3 += 16) {
+            copyArray(plaintext, block2, 0, i3, i3 + 16);
+            for (var j2 = 0; j2 < 16; j2++) {
+              block2[j2] ^= this._lastCipherblock[j2];
             }
+            this._lastCipherblock = this._aes.encrypt(block2);
+            copyArray(this._lastCipherblock, ciphertext, i3);
           }
-          return multi && output.length ? output : null;
-        }
-        query.tree = tree;
-        query.bbox = function queryBBox(bbox2) {
-          var output = [];
-          var result = tree.search({
-            minX: bbox2[0],
-            minY: bbox2[1],
-            maxX: bbox2[2],
-            maxY: bbox2[3]
-          });
-          for (var i4 = 0; i4 < result.length; i4++) {
-            if (polygonIntersectsBBox(result[i4].coords, bbox2)) {
-              output.push(result[i4].props);
+          return ciphertext;
+        };
+        ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {
+          ciphertext = coerceArray(ciphertext);
+          if (ciphertext.length % 16 !== 0) {
+            throw new Error("invalid ciphertext size (must be multiple of 16 bytes)");
+          }
+          var plaintext = createArray(ciphertext.length);
+          var block2 = createArray(16);
+          for (var i3 = 0; i3 < ciphertext.length; i3 += 16) {
+            copyArray(ciphertext, block2, 0, i3, i3 + 16);
+            block2 = this._aes.decrypt(block2);
+            for (var j2 = 0; j2 < 16; j2++) {
+              plaintext[i3 + j2] = block2[j2] ^ this._lastCipherblock[j2];
             }
+            copyArray(ciphertext, this._lastCipherblock, 0, i3, i3 + 16);
           }
-          return output;
+          return plaintext;
         };
-        return query;
-      }
-      function polygonIntersectsBBox(polygon2, bbox2) {
-        var bboxCenter = [
-          (bbox2[0] + bbox2[2]) / 2,
-          (bbox2[1] + bbox2[3]) / 2
-        ];
-        if (insidePolygon(polygon2, bboxCenter)) return true;
-        for (var i3 = 0; i3 < polygon2.length; i3++) {
-          if (lineclip2(polygon2[i3], bbox2).length > 0) return true;
-        }
-        return false;
-      }
-      function insidePolygon(rings, p2) {
-        var inside = false;
-        for (var i3 = 0, len = rings.length; i3 < len; i3++) {
-          var ring = rings[i3];
-          for (var j2 = 0, len2 = ring.length, k2 = len2 - 1; j2 < len2; k2 = j2++) {
-            if (rayIntersect(p2, ring[j2], ring[k2])) inside = !inside;
+        var ModeOfOperationCFB = function(key, iv, segmentSize) {
+          if (!(this instanceof ModeOfOperationCFB)) {
+            throw Error("AES must be instanitated with `new`");
           }
-        }
-        return inside;
-      }
-      function rayIntersect(p2, p1, p22) {
-        return p1[1] > p2[1] !== p22[1] > p2[1] && p2[0] < (p22[0] - p1[0]) * (p2[1] - p1[1]) / (p22[1] - p1[1]) + p1[0];
-      }
-      function treeItem(coords, props) {
-        var item = {
-          minX: Infinity,
-          minY: Infinity,
-          maxX: -Infinity,
-          maxY: -Infinity,
-          coords,
-          props
+          this.description = "Cipher Feedback";
+          this.name = "cfb";
+          if (!iv) {
+            iv = createArray(16);
+          } else if (iv.length != 16) {
+            throw new Error("invalid initialation vector size (must be 16 size)");
+          }
+          if (!segmentSize) {
+            segmentSize = 1;
+          }
+          this.segmentSize = segmentSize;
+          this._shiftRegister = coerceArray(iv, true);
+          this._aes = new AES(key);
         };
-        for (var i3 = 0; i3 < coords[0].length; i3++) {
-          var p2 = coords[0][i3];
-          item.minX = Math.min(item.minX, p2[0]);
-          item.minY = Math.min(item.minY, p2[1]);
-          item.maxX = Math.max(item.maxX, p2[0]);
-          item.maxY = Math.max(item.maxY, p2[1]);
-        }
-        return item;
-      }
-    }
-  });
-
-  // node_modules/wgs84/index.js
-  var require_wgs84 = __commonJS({
-    "node_modules/wgs84/index.js"(exports2, module2) {
-      module2.exports.RADIUS = 6378137;
-      module2.exports.FLATTENING = 1 / 298.257223563;
-      module2.exports.POLAR_RADIUS = 63567523142e-4;
-    }
-  });
-
-  // node_modules/@mapbox/geojson-area/index.js
-  var require_geojson_area = __commonJS({
-    "node_modules/@mapbox/geojson-area/index.js"(exports2, module2) {
-      var wgs84 = require_wgs84();
-      module2.exports.geometry = geometry;
-      module2.exports.ring = ringArea;
-      function geometry(_2) {
-        var area = 0, i3;
-        switch (_2.type) {
-          case "Polygon":
-            return polygonArea(_2.coordinates);
-          case "MultiPolygon":
-            for (i3 = 0; i3 < _2.coordinates.length; i3++) {
-              area += polygonArea(_2.coordinates[i3]);
+        ModeOfOperationCFB.prototype.encrypt = function(plaintext) {
+          if (plaintext.length % this.segmentSize != 0) {
+            throw new Error("invalid plaintext size (must be segmentSize bytes)");
+          }
+          var encrypted = coerceArray(plaintext, true);
+          var xorSegment;
+          for (var i3 = 0; i3 < encrypted.length; i3 += this.segmentSize) {
+            xorSegment = this._aes.encrypt(this._shiftRegister);
+            for (var j2 = 0; j2 < this.segmentSize; j2++) {
+              encrypted[i3 + j2] ^= xorSegment[j2];
             }
-            return area;
-          case "Point":
-          case "MultiPoint":
-          case "LineString":
-          case "MultiLineString":
-            return 0;
-          case "GeometryCollection":
-            for (i3 = 0; i3 < _2.geometries.length; i3++) {
-              area += geometry(_2.geometries[i3]);
+            copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
+            copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i3, i3 + this.segmentSize);
+          }
+          return encrypted;
+        };
+        ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {
+          if (ciphertext.length % this.segmentSize != 0) {
+            throw new Error("invalid ciphertext size (must be segmentSize bytes)");
+          }
+          var plaintext = coerceArray(ciphertext, true);
+          var xorSegment;
+          for (var i3 = 0; i3 < plaintext.length; i3 += this.segmentSize) {
+            xorSegment = this._aes.encrypt(this._shiftRegister);
+            for (var j2 = 0; j2 < this.segmentSize; j2++) {
+              plaintext[i3 + j2] ^= xorSegment[j2];
             }
-            return area;
-        }
-      }
-      function polygonArea(coords) {
-        var area = 0;
-        if (coords && coords.length > 0) {
-          area += Math.abs(ringArea(coords[0]));
-          for (var i3 = 1; i3 < coords.length; i3++) {
-            area -= Math.abs(ringArea(coords[i3]));
+            copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
+            copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i3, i3 + this.segmentSize);
           }
-        }
-        return area;
-      }
-      function ringArea(coords) {
-        var p1, p2, p3, lowerIndex, middleIndex, upperIndex, i3, area = 0, coordsLength = coords.length;
-        if (coordsLength > 2) {
-          for (i3 = 0; i3 < coordsLength; i3++) {
-            if (i3 === coordsLength - 2) {
-              lowerIndex = coordsLength - 2;
-              middleIndex = coordsLength - 1;
-              upperIndex = 0;
-            } else if (i3 === coordsLength - 1) {
-              lowerIndex = coordsLength - 1;
-              middleIndex = 0;
-              upperIndex = 1;
-            } else {
-              lowerIndex = i3;
-              middleIndex = i3 + 1;
-              upperIndex = i3 + 2;
+          return plaintext;
+        };
+        var ModeOfOperationOFB = function(key, iv) {
+          if (!(this instanceof ModeOfOperationOFB)) {
+            throw Error("AES must be instanitated with `new`");
+          }
+          this.description = "Output Feedback";
+          this.name = "ofb";
+          if (!iv) {
+            iv = createArray(16);
+          } else if (iv.length != 16) {
+            throw new Error("invalid initialation vector size (must be 16 bytes)");
+          }
+          this._lastPrecipher = coerceArray(iv, true);
+          this._lastPrecipherIndex = 16;
+          this._aes = new AES(key);
+        };
+        ModeOfOperationOFB.prototype.encrypt = function(plaintext) {
+          var encrypted = coerceArray(plaintext, true);
+          for (var i3 = 0; i3 < encrypted.length; i3++) {
+            if (this._lastPrecipherIndex === 16) {
+              this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);
+              this._lastPrecipherIndex = 0;
             }
-            p1 = coords[lowerIndex];
-            p2 = coords[middleIndex];
-            p3 = coords[upperIndex];
-            area += (rad(p3[0]) - rad(p1[0])) * Math.sin(rad(p2[1]));
+            encrypted[i3] ^= this._lastPrecipher[this._lastPrecipherIndex++];
           }
-          area = area * wgs84.RADIUS * wgs84.RADIUS / 2;
-        }
-        return area;
-      }
-      function rad(_2) {
-        return _2 * Math.PI / 180;
-      }
-    }
-  });
-
-  // node_modules/circle-to-polygon/input-validation/validateCenter.js
-  var require_validateCenter = __commonJS({
-    "node_modules/circle-to-polygon/input-validation/validateCenter.js"(exports2) {
-      exports2.validateCenter = function validateCenter(center) {
-        var validCenterLengths = [2, 3];
-        if (!Array.isArray(center) || !validCenterLengths.includes(center.length)) {
-          throw new Error("ERROR! Center has to be an array of length two or three");
-        }
-        var [lng, lat] = center;
-        if (typeof lng !== "number" || typeof lat !== "number") {
-          throw new Error(
-            "ERROR! Longitude and Latitude has to be numbers but where ".concat(typeof lng, " and ").concat(typeof lat)
-          );
-        }
-        if (lng > 180 || lng < -180) {
-          throw new Error("ERROR! Longitude has to be between -180 and 180 but was ".concat(lng));
-        }
-        if (lat > 90 || lat < -90) {
-          throw new Error("ERROR! Latitude has to be between -90 and 90 but was ".concat(lat));
-        }
-      };
-    }
-  });
-
-  // node_modules/circle-to-polygon/input-validation/validateRadius.js
-  var require_validateRadius = __commonJS({
-    "node_modules/circle-to-polygon/input-validation/validateRadius.js"(exports2) {
-      exports2.validateRadius = function validateRadius(radius) {
-        if (typeof radius !== "number") {
-          throw new Error("ERROR! Radius has to be a positive number but was: ".concat(typeof radius));
-        }
-        if (radius <= 0) {
-          throw new Error("ERROR! Radius has to be a positive number but was: ".concat(radius));
-        }
-      };
-    }
-  });
-
-  // node_modules/circle-to-polygon/input-validation/validateNumberOfEdges.js
-  var require_validateNumberOfEdges = __commonJS({
-    "node_modules/circle-to-polygon/input-validation/validateNumberOfEdges.js"(exports2) {
-      exports2.validateNumberOfEdges = function validateNumberOfEdges(numberOfEdges) {
-        if (typeof numberOfEdges !== "number") {
-          const ARGUMENT_TYPE = Array.isArray(numberOfEdges) ? "array" : typeof numberOfEdges;
-          throw new Error("ERROR! Number of edges has to be a number but was: ".concat(ARGUMENT_TYPE));
-        }
-        if (numberOfEdges < 3) {
-          throw new Error("ERROR! Number of edges has to be at least 3 but was: ".concat(numberOfEdges));
-        }
-      };
-    }
-  });
-
-  // node_modules/circle-to-polygon/input-validation/validateEarthRadius.js
-  var require_validateEarthRadius = __commonJS({
-    "node_modules/circle-to-polygon/input-validation/validateEarthRadius.js"(exports2) {
-      exports2.validateEarthRadius = function validateEarthRadius(earthRadius2) {
-        if (typeof earthRadius2 !== "number") {
-          const ARGUMENT_TYPE = Array.isArray(earthRadius2) ? "array" : typeof earthRadius2;
-          throw new Error("ERROR! Earth radius has to be a number but was: ".concat(ARGUMENT_TYPE));
-        }
-        if (earthRadius2 <= 0) {
-          throw new Error("ERROR! Earth radius has to be a positive number but was: ".concat(earthRadius2));
-        }
-      };
-    }
-  });
-
-  // node_modules/circle-to-polygon/input-validation/validateBearing.js
-  var require_validateBearing = __commonJS({
-    "node_modules/circle-to-polygon/input-validation/validateBearing.js"(exports2) {
-      exports2.validateBearing = function validateBearing(bearing) {
-        if (typeof bearing !== "number") {
-          const ARGUMENT_TYPE = Array.isArray(bearing) ? "array" : typeof bearing;
-          throw new Error("ERROR! Bearing has to be a number but was: ".concat(ARGUMENT_TYPE));
-        }
-      };
-    }
-  });
-
-  // node_modules/circle-to-polygon/input-validation/index.js
-  var require_input_validation = __commonJS({
-    "node_modules/circle-to-polygon/input-validation/index.js"(exports2) {
-      var validateCenter = require_validateCenter().validateCenter;
-      var validateRadius = require_validateRadius().validateRadius;
-      var validateNumberOfEdges = require_validateNumberOfEdges().validateNumberOfEdges;
-      var validateEarthRadius = require_validateEarthRadius().validateEarthRadius;
-      var validateBearing = require_validateBearing().validateBearing;
-      function validateInput({ center, radius, numberOfEdges, earthRadius: earthRadius2, bearing }) {
-        validateCenter(center);
-        validateRadius(radius);
-        validateNumberOfEdges(numberOfEdges);
-        validateEarthRadius(earthRadius2);
-        validateBearing(bearing);
-      }
-      exports2.validateCenter = validateCenter;
-      exports2.validateRadius = validateRadius;
-      exports2.validateNumberOfEdges = validateNumberOfEdges;
-      exports2.validateEarthRadius = validateEarthRadius;
-      exports2.validateBearing = validateBearing;
-      exports2.validateInput = validateInput;
-    }
-  });
-
-  // node_modules/circle-to-polygon/index.js
-  var require_circle_to_polygon = __commonJS({
-    "node_modules/circle-to-polygon/index.js"(exports2, module2) {
-      "use strict";
-      var { validateInput } = require_input_validation();
-      var defaultEarthRadius = 6378137;
-      function toRadians(angleInDegrees) {
-        return angleInDegrees * Math.PI / 180;
-      }
-      function toDegrees(angleInRadians) {
-        return angleInRadians * 180 / Math.PI;
-      }
-      function offset(c1, distance, earthRadius2, bearing) {
-        var lat1 = toRadians(c1[1]);
-        var lon1 = toRadians(c1[0]);
-        var dByR = distance / earthRadius2;
-        var lat = Math.asin(
-          Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)
-        );
-        var lon = lon1 + Math.atan2(
-          Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
-          Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)
-        );
-        return [toDegrees(lon), toDegrees(lat)];
-      }
-      module2.exports = function circleToPolygon2(center, radius, options2) {
-        var n3 = getNumberOfEdges(options2);
-        var earthRadius2 = getEarthRadius(options2);
-        var bearing = getBearing(options2);
-        var direction = getDirection(options2);
-        validateInput({ center, radius, numberOfEdges: n3, earthRadius: earthRadius2, bearing });
-        var start2 = toRadians(bearing);
-        var coordinates = [];
-        for (var i3 = 0; i3 < n3; ++i3) {
-          coordinates.push(
-            offset(
-              center,
-              radius,
-              earthRadius2,
-              start2 + direction * 2 * Math.PI * -i3 / n3
-            )
-          );
-        }
-        coordinates.push(coordinates[0]);
-        return {
-          type: "Polygon",
-          coordinates: [coordinates]
+          return encrypted;
         };
-      };
-      function getNumberOfEdges(options2) {
-        if (isUndefinedOrNull(options2)) {
-          return 32;
-        } else if (isObjectNotArray(options2)) {
-          var numberOfEdges = options2.numberOfEdges;
-          return numberOfEdges === void 0 ? 32 : numberOfEdges;
-        }
-        return options2;
-      }
-      function getEarthRadius(options2) {
-        if (isUndefinedOrNull(options2)) {
-          return defaultEarthRadius;
-        } else if (isObjectNotArray(options2)) {
-          var earthRadius2 = options2.earthRadius;
-          return earthRadius2 === void 0 ? defaultEarthRadius : earthRadius2;
-        }
-        return defaultEarthRadius;
-      }
-      function getDirection(options2) {
-        if (isObjectNotArray(options2) && options2.rightHandRule) {
-          return -1;
-        }
-        return 1;
-      }
-      function getBearing(options2) {
-        if (isUndefinedOrNull(options2)) {
-          return 0;
-        } else if (isObjectNotArray(options2)) {
-          var bearing = options2.bearing;
-          return bearing === void 0 ? 0 : bearing;
-        }
-        return 0;
-      }
-      function isObjectNotArray(argument) {
-        return argument !== null && typeof argument === "object" && !Array.isArray(argument);
-      }
-      function isUndefinedOrNull(argument) {
-        return argument === null || argument === void 0;
-      }
-    }
-  });
-
-  // node_modules/geojson-precision/index.js
-  var require_geojson_precision = __commonJS({
-    "node_modules/geojson-precision/index.js"(exports2, module2) {
-      (function() {
-        function parse(t2, coordinatePrecision, extrasPrecision) {
-          function point(p2) {
-            return p2.map(function(e3, index) {
-              if (index < 2) {
-                return 1 * e3.toFixed(coordinatePrecision);
-              } else {
-                return 1 * e3.toFixed(extrasPrecision);
-              }
-            });
+        ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;
+        var Counter = function(initialValue) {
+          if (!(this instanceof Counter)) {
+            throw Error("Counter must be instanitated with `new`");
           }
-          function multi(l2) {
-            return l2.map(point);
+          if (initialValue !== 0 && !initialValue) {
+            initialValue = 1;
           }
-          function poly(p2) {
-            return p2.map(multi);
+          if (typeof initialValue === "number") {
+            this._counter = createArray(16);
+            this.setValue(initialValue);
+          } else {
+            this.setBytes(initialValue);
           }
-          function multiPoly(m2) {
-            return m2.map(poly);
+        };
+        Counter.prototype.setValue = function(value) {
+          if (typeof value !== "number" || parseInt(value) != value) {
+            throw new Error("invalid counter value (must be an integer)");
           }
-          function geometry(obj) {
-            if (!obj) {
-              return {};
-            }
-            switch (obj.type) {
-              case "Point":
-                obj.coordinates = point(obj.coordinates);
-                return obj;
-              case "LineString":
-              case "MultiPoint":
-                obj.coordinates = multi(obj.coordinates);
-                return obj;
-              case "Polygon":
-              case "MultiLineString":
-                obj.coordinates = poly(obj.coordinates);
-                return obj;
-              case "MultiPolygon":
-                obj.coordinates = multiPoly(obj.coordinates);
-                return obj;
-              case "GeometryCollection":
-                obj.geometries = obj.geometries.map(geometry);
-                return obj;
-              default:
-                return {};
-            }
+          if (value > Number.MAX_SAFE_INTEGER) {
+            throw new Error("integer value out of safe range");
           }
-          function feature3(obj) {
-            obj.geometry = geometry(obj.geometry);
-            return obj;
+          for (var index = 15; index >= 0; --index) {
+            this._counter[index] = value % 256;
+            value = parseInt(value / 256);
           }
-          function featureCollection(f2) {
-            f2.features = f2.features.map(feature3);
-            return f2;
+        };
+        Counter.prototype.setBytes = function(bytes) {
+          bytes = coerceArray(bytes, true);
+          if (bytes.length != 16) {
+            throw new Error("invalid counter bytes size (must be 16 bytes)");
           }
-          function geometryCollection(g3) {
-            g3.geometries = g3.geometries.map(geometry);
-            return g3;
+          this._counter = bytes;
+        };
+        Counter.prototype.increment = function() {
+          for (var i3 = 15; i3 >= 0; i3--) {
+            if (this._counter[i3] === 255) {
+              this._counter[i3] = 0;
+            } else {
+              this._counter[i3]++;
+              break;
+            }
           }
-          if (!t2) {
-            return t2;
+        };
+        var ModeOfOperationCTR = function(key, counter) {
+          if (!(this instanceof ModeOfOperationCTR)) {
+            throw Error("AES must be instanitated with `new`");
           }
-          switch (t2.type) {
-            case "Feature":
-              return feature3(t2);
-            case "GeometryCollection":
-              return geometryCollection(t2);
-            case "FeatureCollection":
-              return featureCollection(t2);
-            case "Point":
-            case "LineString":
-            case "Polygon":
-            case "MultiPoint":
-            case "MultiPolygon":
-            case "MultiLineString":
-              return geometry(t2);
-            default:
-              return t2;
+          this.description = "Counter";
+          this.name = "ctr";
+          if (!(counter instanceof Counter)) {
+            counter = new Counter(counter);
           }
-        }
-        module2.exports = parse;
-        module2.exports.parse = parse;
-      })();
-    }
-  });
-
-  // node_modules/@aitodotai/json-stringify-pretty-compact/index.js
-  var require_json_stringify_pretty_compact = __commonJS({
-    "node_modules/@aitodotai/json-stringify-pretty-compact/index.js"(exports2, module2) {
-      function isObject2(obj) {
-        return typeof obj === "object" && obj !== null;
-      }
-      function forEach(obj, cb) {
-        if (Array.isArray(obj)) {
-          obj.forEach(cb);
-        } else if (isObject2(obj)) {
-          Object.keys(obj).forEach(function(key) {
-            var val = obj[key];
-            cb(val, key);
-          });
-        }
-      }
-      function getTreeDepth(obj) {
-        var depth = 0;
-        if (Array.isArray(obj) || isObject2(obj)) {
-          forEach(obj, function(val) {
-            if (Array.isArray(val) || isObject2(val)) {
-              var tmpDepth = getTreeDepth(val);
-              if (tmpDepth > depth) {
-                depth = tmpDepth;
-              }
+          this._counter = counter;
+          this._remainingCounter = null;
+          this._remainingCounterIndex = 16;
+          this._aes = new AES(key);
+        };
+        ModeOfOperationCTR.prototype.encrypt = function(plaintext) {
+          var encrypted = coerceArray(plaintext, true);
+          for (var i3 = 0; i3 < encrypted.length; i3++) {
+            if (this._remainingCounterIndex === 16) {
+              this._remainingCounter = this._aes.encrypt(this._counter._counter);
+              this._remainingCounterIndex = 0;
+              this._counter.increment();
             }
-          });
-          return depth + 1;
+            encrypted[i3] ^= this._remainingCounter[this._remainingCounterIndex++];
+          }
+          return encrypted;
+        };
+        ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;
+        function pkcs7pad(data) {
+          data = coerceArray(data, true);
+          var padder = 16 - data.length % 16;
+          var result = createArray(data.length + padder);
+          copyArray(data, result);
+          for (var i3 = data.length; i3 < result.length; i3++) {
+            result[i3] = padder;
+          }
+          return result;
         }
-        return depth;
-      }
-      function stringify3(obj, options2) {
-        options2 = options2 || {};
-        var indent = JSON.stringify([1], null, get4(options2, "indent", 2)).slice(2, -3);
-        var addMargin = get4(options2, "margins", false);
-        var addArrayMargin = get4(options2, "arrayMargins", false);
-        var addObjectMargin = get4(options2, "objectMargins", false);
-        var maxLength = indent === "" ? Infinity : get4(options2, "maxLength", 80);
-        var maxNesting = get4(options2, "maxNesting", Infinity);
-        return function _stringify(obj2, currentIndent, reserved) {
-          if (obj2 && typeof obj2.toJSON === "function") {
-            obj2 = obj2.toJSON();
+        function pkcs7strip(data) {
+          data = coerceArray(data, true);
+          if (data.length < 16) {
+            throw new Error("PKCS#7 invalid length");
           }
-          var string = JSON.stringify(obj2);
-          if (string === void 0) {
-            return string;
+          var padder = data[data.length - 1];
+          if (padder > 16) {
+            throw new Error("PKCS#7 padding byte out of range");
           }
-          var length2 = maxLength - currentIndent.length - reserved;
-          var treeDepth = getTreeDepth(obj2);
-          if (treeDepth <= maxNesting && string.length <= length2) {
-            var prettified = prettify(string, {
-              addMargin,
-              addArrayMargin,
-              addObjectMargin
-            });
-            if (prettified.length <= length2) {
-              return prettified;
+          var length2 = data.length - padder;
+          for (var i3 = 0; i3 < padder; i3++) {
+            if (data[length2 + i3] !== padder) {
+              throw new Error("PKCS#7 invalid padding byte");
             }
           }
-          if (isObject2(obj2)) {
-            var nextIndent = currentIndent + indent;
-            var items = [];
-            var delimiters;
-            var comma = function(array2, index2) {
-              return index2 === array2.length - 1 ? 0 : 1;
-            };
-            if (Array.isArray(obj2)) {
-              for (var index = 0; index < obj2.length; index++) {
-                items.push(
-                  _stringify(obj2[index], nextIndent, comma(obj2, index)) || "null"
-                );
-              }
-              delimiters = "[]";
-            } else {
-              Object.keys(obj2).forEach(function(key, index2, array2) {
-                var keyPart = JSON.stringify(key) + ": ";
-                var value = _stringify(
-                  obj2[key],
-                  nextIndent,
-                  keyPart.length + comma(array2, index2)
-                );
-                if (value !== void 0) {
-                  items.push(keyPart + value);
-                }
-              });
-              delimiters = "{}";
-            }
-            if (items.length > 0) {
-              return [
-                delimiters[0],
-                indent + items.join(",\n" + nextIndent),
-                delimiters[1]
-              ].join("\n" + currentIndent);
+          var result = createArray(length2);
+          copyArray(data, result, 0, 0, length2);
+          return result;
+        }
+        var aesjs2 = {
+          AES,
+          Counter,
+          ModeOfOperation: {
+            ecb: ModeOfOperationECB,
+            cbc: ModeOfOperationCBC,
+            cfb: ModeOfOperationCFB,
+            ofb: ModeOfOperationOFB,
+            ctr: ModeOfOperationCTR
+          },
+          utils: {
+            hex: convertHex,
+            utf8: convertUtf8
+          },
+          padding: {
+            pkcs7: {
+              pad: pkcs7pad,
+              strip: pkcs7strip
             }
+          },
+          _arrayTest: {
+            coerceArray,
+            createArray,
+            copyArray
           }
-          return string;
-        }(obj, "", 0);
-      }
-      var stringOrChar = /("(?:[^\\"]|\\.)*")|[:,\][}{]/g;
-      function prettify(string, options2) {
-        options2 = options2 || {};
-        var tokens = {
-          "{": "{",
-          "}": "}",
-          "[": "[",
-          "]": "]",
-          ",": ", ",
-          ":": ": "
         };
-        if (options2.addMargin || options2.addObjectMargin) {
-          tokens["{"] = "{ ";
-          tokens["}"] = " }";
-        }
-        if (options2.addMargin || options2.addArrayMargin) {
-          tokens["["] = "[ ";
-          tokens["]"] = " ]";
+        if (typeof exports2 !== "undefined") {
+          module2.exports = aesjs2;
+        } else if (typeof define === "function" && define.amd) {
+          define([], function() {
+            return aesjs2;
+          });
+        } else {
+          if (root3.aesjs) {
+            aesjs2._aesjs = root3.aesjs;
+          }
+          root3.aesjs = aesjs2;
         }
-        return string.replace(stringOrChar, function(match, string2) {
-          return string2 ? match : tokens[match];
-        });
-      }
-      function get4(options2, name, defaultValue) {
-        return name in options2 ? options2[name] : defaultValue;
-      }
-      module2.exports = stringify3;
+      })(exports2);
     }
   });
 
-  // node_modules/aes-js/index.js
-  var require_aes_js = __commonJS({
-    "node_modules/aes-js/index.js"(exports2, module2) {
-      (function(root3) {
-        "use strict";
-        function checkInt(value) {
-          return parseInt(value) === value;
-        }
-        function checkInts(arrayish) {
-          if (!checkInt(arrayish.length)) {
-            return false;
-          }
-          for (var i3 = 0; i3 < arrayish.length; i3++) {
-            if (!checkInt(arrayish[i3]) || arrayish[i3] < 0 || arrayish[i3] > 255) {
-              return false;
-            }
+  // node_modules/fast-deep-equal/index.js
+  var require_fast_deep_equal = __commonJS({
+    "node_modules/fast-deep-equal/index.js"(exports2, module2) {
+      "use strict";
+      module2.exports = function equal(a2, b2) {
+        if (a2 === b2) return true;
+        if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") {
+          if (a2.constructor !== b2.constructor) return false;
+          var length2, i3, keys2;
+          if (Array.isArray(a2)) {
+            length2 = a2.length;
+            if (length2 != b2.length) return false;
+            for (i3 = length2; i3-- !== 0; )
+              if (!equal(a2[i3], b2[i3])) return false;
+            return true;
+          }
+          if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags;
+          if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf();
+          if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString();
+          keys2 = Object.keys(a2);
+          length2 = keys2.length;
+          if (length2 !== Object.keys(b2).length) return false;
+          for (i3 = length2; i3-- !== 0; )
+            if (!Object.prototype.hasOwnProperty.call(b2, keys2[i3])) return false;
+          for (i3 = length2; i3-- !== 0; ) {
+            var key = keys2[i3];
+            if (!equal(a2[key], b2[key])) return false;
           }
           return true;
         }
-        function coerceArray(arg, copy2) {
-          if (arg.buffer && arg.name === "Uint8Array") {
-            if (copy2) {
-              if (arg.slice) {
-                arg = arg.slice();
-              } else {
-                arg = Array.prototype.slice.call(arg);
-              }
-            }
-            return arg;
-          }
-          if (Array.isArray(arg)) {
-            if (!checkInts(arg)) {
-              throw new Error("Array contains invalid value: " + arg);
+        return a2 !== a2 && b2 !== b2;
+      };
+    }
+  });
+
+  // node_modules/lodash/lodash.js
+  var require_lodash = __commonJS({
+    "node_modules/lodash/lodash.js"(exports2, module2) {
+      (function() {
+        var undefined2;
+        var VERSION = "4.17.21";
+        var LARGE_ARRAY_SIZE2 = 200;
+        var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT3 = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
+        var HASH_UNDEFINED4 = "__lodash_hash_undefined__";
+        var MAX_MEMOIZE_SIZE = 500;
+        var PLACEHOLDER = "__lodash_placeholder__";
+        var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
+        var COMPARE_PARTIAL_FLAG5 = 1, COMPARE_UNORDERED_FLAG3 = 2;
+        var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512;
+        var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...";
+        var HOT_COUNT = 800, HOT_SPAN = 16;
+        var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3;
+        var INFINITY2 = 1 / 0, MAX_SAFE_INTEGER4 = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN2 = 0 / 0;
+        var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+        var wrapFlags = [
+          ["ary", WRAP_ARY_FLAG],
+          ["bind", WRAP_BIND_FLAG],
+          ["bindKey", WRAP_BIND_KEY_FLAG],
+          ["curry", WRAP_CURRY_FLAG],
+          ["curryRight", WRAP_CURRY_RIGHT_FLAG],
+          ["flip", WRAP_FLIP_FLAG],
+          ["partial", WRAP_PARTIAL_FLAG],
+          ["partialRight", WRAP_PARTIAL_RIGHT_FLAG],
+          ["rearg", WRAP_REARG_FLAG]
+        ];
+        var argsTag4 = "[object Arguments]", arrayTag3 = "[object Array]", asyncTag2 = "[object AsyncFunction]", boolTag3 = "[object Boolean]", dateTag3 = "[object Date]", domExcTag = "[object DOMException]", errorTag3 = "[object Error]", funcTag3 = "[object Function]", genTag2 = "[object GeneratorFunction]", mapTag4 = "[object Map]", numberTag4 = "[object Number]", nullTag2 = "[object Null]", objectTag4 = "[object Object]", promiseTag2 = "[object Promise]", proxyTag2 = "[object Proxy]", regexpTag3 = "[object RegExp]", setTag4 = "[object Set]", stringTag3 = "[object String]", symbolTag3 = "[object Symbol]", undefinedTag2 = "[object Undefined]", weakMapTag3 = "[object WeakMap]", weakSetTag = "[object WeakSet]";
+        var arrayBufferTag3 = "[object ArrayBuffer]", dataViewTag4 = "[object DataView]", float32Tag2 = "[object Float32Array]", float64Tag2 = "[object Float64Array]", int8Tag2 = "[object Int8Array]", int16Tag2 = "[object Int16Array]", int32Tag2 = "[object Int32Array]", uint8Tag2 = "[object Uint8Array]", uint8ClampedTag2 = "[object Uint8ClampedArray]", uint16Tag2 = "[object Uint16Array]", uint32Tag2 = "[object Uint32Array]";
+        var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+        var reEscapedHtml2 = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml2 = /[&<>"']/g, reHasEscapedHtml2 = RegExp(reEscapedHtml2.source), reHasUnescapedHtml2 = RegExp(reUnescapedHtml2.source);
+        var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g;
+        var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+        var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar2.source);
+        var reTrimStart2 = /^\s+/;
+        var reWhitespace2 = /\s/;
+        var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /;
+        var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
+        var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
+        var reEscapeChar = /\\(\\)?/g;
+        var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+        var reFlags = /\w*$/;
+        var reIsBadHex2 = /^[-+]0x[0-9a-f]+$/i;
+        var reIsBinary2 = /^0b[01]+$/i;
+        var reIsHostCtor2 = /^\[object .+?Constructor\]$/;
+        var reIsOctal2 = /^0o[0-7]+$/i;
+        var reIsUint2 = /^(?:0|[1-9]\d*)$/;
+        var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
+        var reNoMatch = /($^)/;
+        var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+        var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
+        var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d";
+        var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
+        var reApos = RegExp(rsApos, "g");
+        var reComboMark = RegExp(rsCombo, "g");
+        var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
+        var reUnicodeWord = RegExp([
+          rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")",
+          rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")",
+          rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower,
+          rsUpper + "+" + rsOptContrUpper,
+          rsOrdUpper,
+          rsOrdLower,
+          rsDigits,
+          rsEmoji
+        ].join("|"), "g");
+        var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
+        var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
+        var contextProps = [
+          "Array",
+          "Buffer",
+          "DataView",
+          "Date",
+          "Error",
+          "Float32Array",
+          "Float64Array",
+          "Function",
+          "Int8Array",
+          "Int16Array",
+          "Int32Array",
+          "Map",
+          "Math",
+          "Object",
+          "Promise",
+          "RegExp",
+          "Set",
+          "String",
+          "Symbol",
+          "TypeError",
+          "Uint8Array",
+          "Uint8ClampedArray",
+          "Uint16Array",
+          "Uint32Array",
+          "WeakMap",
+          "_",
+          "clearTimeout",
+          "isFinite",
+          "parseInt",
+          "setTimeout"
+        ];
+        var templateCounter = -1;
+        var typedArrayTags2 = {};
+        typedArrayTags2[float32Tag2] = typedArrayTags2[float64Tag2] = typedArrayTags2[int8Tag2] = typedArrayTags2[int16Tag2] = typedArrayTags2[int32Tag2] = typedArrayTags2[uint8Tag2] = typedArrayTags2[uint8ClampedTag2] = typedArrayTags2[uint16Tag2] = typedArrayTags2[uint32Tag2] = true;
+        typedArrayTags2[argsTag4] = typedArrayTags2[arrayTag3] = typedArrayTags2[arrayBufferTag3] = typedArrayTags2[boolTag3] = typedArrayTags2[dataViewTag4] = typedArrayTags2[dateTag3] = typedArrayTags2[errorTag3] = typedArrayTags2[funcTag3] = typedArrayTags2[mapTag4] = typedArrayTags2[numberTag4] = typedArrayTags2[objectTag4] = typedArrayTags2[regexpTag3] = typedArrayTags2[setTag4] = typedArrayTags2[stringTag3] = typedArrayTags2[weakMapTag3] = false;
+        var cloneableTags = {};
+        cloneableTags[argsTag4] = cloneableTags[arrayTag3] = cloneableTags[arrayBufferTag3] = cloneableTags[dataViewTag4] = cloneableTags[boolTag3] = cloneableTags[dateTag3] = cloneableTags[float32Tag2] = cloneableTags[float64Tag2] = cloneableTags[int8Tag2] = cloneableTags[int16Tag2] = cloneableTags[int32Tag2] = cloneableTags[mapTag4] = cloneableTags[numberTag4] = cloneableTags[objectTag4] = cloneableTags[regexpTag3] = cloneableTags[setTag4] = cloneableTags[stringTag3] = cloneableTags[symbolTag3] = cloneableTags[uint8Tag2] = cloneableTags[uint8ClampedTag2] = cloneableTags[uint16Tag2] = cloneableTags[uint32Tag2] = true;
+        cloneableTags[errorTag3] = cloneableTags[funcTag3] = cloneableTags[weakMapTag3] = false;
+        var deburredLetters = {
+          // Latin-1 Supplement block.
+          "\xC0": "A",
+          "\xC1": "A",
+          "\xC2": "A",
+          "\xC3": "A",
+          "\xC4": "A",
+          "\xC5": "A",
+          "\xE0": "a",
+          "\xE1": "a",
+          "\xE2": "a",
+          "\xE3": "a",
+          "\xE4": "a",
+          "\xE5": "a",
+          "\xC7": "C",
+          "\xE7": "c",
+          "\xD0": "D",
+          "\xF0": "d",
+          "\xC8": "E",
+          "\xC9": "E",
+          "\xCA": "E",
+          "\xCB": "E",
+          "\xE8": "e",
+          "\xE9": "e",
+          "\xEA": "e",
+          "\xEB": "e",
+          "\xCC": "I",
+          "\xCD": "I",
+          "\xCE": "I",
+          "\xCF": "I",
+          "\xEC": "i",
+          "\xED": "i",
+          "\xEE": "i",
+          "\xEF": "i",
+          "\xD1": "N",
+          "\xF1": "n",
+          "\xD2": "O",
+          "\xD3": "O",
+          "\xD4": "O",
+          "\xD5": "O",
+          "\xD6": "O",
+          "\xD8": "O",
+          "\xF2": "o",
+          "\xF3": "o",
+          "\xF4": "o",
+          "\xF5": "o",
+          "\xF6": "o",
+          "\xF8": "o",
+          "\xD9": "U",
+          "\xDA": "U",
+          "\xDB": "U",
+          "\xDC": "U",
+          "\xF9": "u",
+          "\xFA": "u",
+          "\xFB": "u",
+          "\xFC": "u",
+          "\xDD": "Y",
+          "\xFD": "y",
+          "\xFF": "y",
+          "\xC6": "Ae",
+          "\xE6": "ae",
+          "\xDE": "Th",
+          "\xFE": "th",
+          "\xDF": "ss",
+          // Latin Extended-A block.
+          "\u0100": "A",
+          "\u0102": "A",
+          "\u0104": "A",
+          "\u0101": "a",
+          "\u0103": "a",
+          "\u0105": "a",
+          "\u0106": "C",
+          "\u0108": "C",
+          "\u010A": "C",
+          "\u010C": "C",
+          "\u0107": "c",
+          "\u0109": "c",
+          "\u010B": "c",
+          "\u010D": "c",
+          "\u010E": "D",
+          "\u0110": "D",
+          "\u010F": "d",
+          "\u0111": "d",
+          "\u0112": "E",
+          "\u0114": "E",
+          "\u0116": "E",
+          "\u0118": "E",
+          "\u011A": "E",
+          "\u0113": "e",
+          "\u0115": "e",
+          "\u0117": "e",
+          "\u0119": "e",
+          "\u011B": "e",
+          "\u011C": "G",
+          "\u011E": "G",
+          "\u0120": "G",
+          "\u0122": "G",
+          "\u011D": "g",
+          "\u011F": "g",
+          "\u0121": "g",
+          "\u0123": "g",
+          "\u0124": "H",
+          "\u0126": "H",
+          "\u0125": "h",
+          "\u0127": "h",
+          "\u0128": "I",
+          "\u012A": "I",
+          "\u012C": "I",
+          "\u012E": "I",
+          "\u0130": "I",
+          "\u0129": "i",
+          "\u012B": "i",
+          "\u012D": "i",
+          "\u012F": "i",
+          "\u0131": "i",
+          "\u0134": "J",
+          "\u0135": "j",
+          "\u0136": "K",
+          "\u0137": "k",
+          "\u0138": "k",
+          "\u0139": "L",
+          "\u013B": "L",
+          "\u013D": "L",
+          "\u013F": "L",
+          "\u0141": "L",
+          "\u013A": "l",
+          "\u013C": "l",
+          "\u013E": "l",
+          "\u0140": "l",
+          "\u0142": "l",
+          "\u0143": "N",
+          "\u0145": "N",
+          "\u0147": "N",
+          "\u014A": "N",
+          "\u0144": "n",
+          "\u0146": "n",
+          "\u0148": "n",
+          "\u014B": "n",
+          "\u014C": "O",
+          "\u014E": "O",
+          "\u0150": "O",
+          "\u014D": "o",
+          "\u014F": "o",
+          "\u0151": "o",
+          "\u0154": "R",
+          "\u0156": "R",
+          "\u0158": "R",
+          "\u0155": "r",
+          "\u0157": "r",
+          "\u0159": "r",
+          "\u015A": "S",
+          "\u015C": "S",
+          "\u015E": "S",
+          "\u0160": "S",
+          "\u015B": "s",
+          "\u015D": "s",
+          "\u015F": "s",
+          "\u0161": "s",
+          "\u0162": "T",
+          "\u0164": "T",
+          "\u0166": "T",
+          "\u0163": "t",
+          "\u0165": "t",
+          "\u0167": "t",
+          "\u0168": "U",
+          "\u016A": "U",
+          "\u016C": "U",
+          "\u016E": "U",
+          "\u0170": "U",
+          "\u0172": "U",
+          "\u0169": "u",
+          "\u016B": "u",
+          "\u016D": "u",
+          "\u016F": "u",
+          "\u0171": "u",
+          "\u0173": "u",
+          "\u0174": "W",
+          "\u0175": "w",
+          "\u0176": "Y",
+          "\u0177": "y",
+          "\u0178": "Y",
+          "\u0179": "Z",
+          "\u017B": "Z",
+          "\u017D": "Z",
+          "\u017A": "z",
+          "\u017C": "z",
+          "\u017E": "z",
+          "\u0132": "IJ",
+          "\u0133": "ij",
+          "\u0152": "Oe",
+          "\u0153": "oe",
+          "\u0149": "'n",
+          "\u017F": "s"
+        };
+        var htmlEscapes2 = {
+          "&": "&amp;",
+          "<": "&lt;",
+          ">": "&gt;",
+          '"': "&quot;",
+          "'": "&#39;"
+        };
+        var htmlUnescapes2 = {
+          "&amp;": "&",
+          "&lt;": "<",
+          "&gt;": ">",
+          "&quot;": '"',
+          "&#39;": "'"
+        };
+        var stringEscapes = {
+          "\\": "\\",
+          "'": "'",
+          "\n": "n",
+          "\r": "r",
+          "\u2028": "u2028",
+          "\u2029": "u2029"
+        };
+        var freeParseFloat = parseFloat, freeParseInt2 = parseInt;
+        var freeGlobal2 = typeof global == "object" && global && global.Object === Object && global;
+        var freeSelf2 = typeof self == "object" && self && self.Object === Object && self;
+        var root3 = freeGlobal2 || freeSelf2 || Function("return this")();
+        var freeExports3 = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2;
+        var freeModule3 = freeExports3 && typeof module2 == "object" && module2 && !module2.nodeType && module2;
+        var moduleExports3 = freeModule3 && freeModule3.exports === freeExports3;
+        var freeProcess2 = moduleExports3 && freeGlobal2.process;
+        var nodeUtil2 = function() {
+          try {
+            var types = freeModule3 && freeModule3.require && freeModule3.require("util").types;
+            if (types) {
+              return types;
             }
-            return new Uint8Array(arg);
+            return freeProcess2 && freeProcess2.binding && freeProcess2.binding("util");
+          } catch (e3) {
           }
-          if (checkInt(arg.length) && checkInts(arg)) {
-            return new Uint8Array(arg);
+        }();
+        var nodeIsArrayBuffer = nodeUtil2 && nodeUtil2.isArrayBuffer, nodeIsDate = nodeUtil2 && nodeUtil2.isDate, nodeIsMap = nodeUtil2 && nodeUtil2.isMap, nodeIsRegExp = nodeUtil2 && nodeUtil2.isRegExp, nodeIsSet = nodeUtil2 && nodeUtil2.isSet, nodeIsTypedArray2 = nodeUtil2 && nodeUtil2.isTypedArray;
+        function apply(func, thisArg, args) {
+          switch (args.length) {
+            case 0:
+              return func.call(thisArg);
+            case 1:
+              return func.call(thisArg, args[0]);
+            case 2:
+              return func.call(thisArg, args[0], args[1]);
+            case 3:
+              return func.call(thisArg, args[0], args[1], args[2]);
           }
-          throw new Error("unsupported array-like object");
+          return func.apply(thisArg, args);
         }
-        function createArray(length2) {
-          return new Uint8Array(length2);
+        function arrayAggregator(array2, setter, iteratee, accumulator) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length;
+          while (++index < length2) {
+            var value = array2[index];
+            setter(accumulator, value, iteratee(value), array2);
+          }
+          return accumulator;
         }
-        function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {
-          if (sourceStart != null || sourceEnd != null) {
-            if (sourceArray.slice) {
-              sourceArray = sourceArray.slice(sourceStart, sourceEnd);
-            } else {
-              sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);
+        function arrayEach(array2, iteratee) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length;
+          while (++index < length2) {
+            if (iteratee(array2[index], index, array2) === false) {
+              break;
             }
           }
-          targetArray.set(sourceArray, targetStart);
+          return array2;
         }
-        var convertUtf8 = /* @__PURE__ */ function() {
-          function toBytes(text) {
-            var result = [], i3 = 0;
-            text = encodeURI(text);
-            while (i3 < text.length) {
-              var c2 = text.charCodeAt(i3++);
-              if (c2 === 37) {
-                result.push(parseInt(text.substr(i3, 2), 16));
-                i3 += 2;
-              } else {
-                result.push(c2);
-              }
+        function arrayEachRight(array2, iteratee) {
+          var length2 = array2 == null ? 0 : array2.length;
+          while (length2--) {
+            if (iteratee(array2[length2], length2, array2) === false) {
+              break;
             }
-            return coerceArray(result);
           }
-          function fromBytes(bytes) {
-            var result = [], i3 = 0;
-            while (i3 < bytes.length) {
-              var c2 = bytes[i3];
-              if (c2 < 128) {
-                result.push(String.fromCharCode(c2));
-                i3++;
-              } else if (c2 > 191 && c2 < 224) {
-                result.push(String.fromCharCode((c2 & 31) << 6 | bytes[i3 + 1] & 63));
-                i3 += 2;
-              } else {
-                result.push(String.fromCharCode((c2 & 15) << 12 | (bytes[i3 + 1] & 63) << 6 | bytes[i3 + 2] & 63));
-                i3 += 3;
-              }
+          return array2;
+        }
+        function arrayEvery(array2, predicate) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length;
+          while (++index < length2) {
+            if (!predicate(array2[index], index, array2)) {
+              return false;
             }
-            return result.join("");
           }
-          return {
-            toBytes,
-            fromBytes
-          };
-        }();
-        var convertHex = /* @__PURE__ */ function() {
-          function toBytes(text) {
-            var result = [];
-            for (var i3 = 0; i3 < text.length; i3 += 2) {
-              result.push(parseInt(text.substr(i3, 2), 16));
+          return true;
+        }
+        function arrayFilter2(array2, predicate) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length, resIndex = 0, result = [];
+          while (++index < length2) {
+            var value = array2[index];
+            if (predicate(value, index, array2)) {
+              result[resIndex++] = value;
             }
-            return result;
           }
-          var Hex = "0123456789abcdef";
-          function fromBytes(bytes) {
-            var result = [];
-            for (var i3 = 0; i3 < bytes.length; i3++) {
-              var v2 = bytes[i3];
-              result.push(Hex[(v2 & 240) >> 4] + Hex[v2 & 15]);
+          return result;
+        }
+        function arrayIncludes(array2, value) {
+          var length2 = array2 == null ? 0 : array2.length;
+          return !!length2 && baseIndexOf(array2, value, 0) > -1;
+        }
+        function arrayIncludesWith(array2, value, comparator) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length;
+          while (++index < length2) {
+            if (comparator(value, array2[index])) {
+              return true;
             }
-            return result.join("");
           }
-          return {
-            toBytes,
-            fromBytes
-          };
-        }();
-        var numberOfRounds = { 16: 10, 24: 12, 32: 14 };
-        var rcon = [1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145];
-        var S2 = [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22];
-        var Si = [82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125];
-        var T1 = [3328402341, 4168907908, 4000806809, 4135287693, 4294111757, 3597364157, 3731845041, 2445657428, 1613770832, 33620227, 3462883241, 1445669757, 3892248089, 3050821474, 1303096294, 3967186586, 2412431941, 528646813, 2311702848, 4202528135, 4026202645, 2992200171, 2387036105, 4226871307, 1101901292, 3017069671, 1604494077, 1169141738, 597466303, 1403299063, 3832705686, 2613100635, 1974974402, 3791519004, 1033081774, 1277568618, 1815492186, 2118074177, 4126668546, 2211236943, 1748251740, 1369810420, 3521504564, 4193382664, 3799085459, 2883115123, 1647391059, 706024767, 134480908, 2512897874, 1176707941, 2646852446, 806885416, 932615841, 168101135, 798661301, 235341577, 605164086, 461406363, 3756188221, 3454790438, 1311188841, 2142417613, 3933566367, 302582043, 495158174, 1479289972, 874125870, 907746093, 3698224818, 3025820398, 1537253627, 2756858614, 1983593293, 3084310113, 2108928974, 1378429307, 3722699582, 1580150641, 327451799, 2790478837, 3117535592, 0, 3253595436, 1075847264, 3825007647, 2041688520, 3059440621, 3563743934, 2378943302, 1740553945, 1916352843, 2487896798, 2555137236, 2958579944, 2244988746, 3151024235, 3320835882, 1336584933, 3992714006, 2252555205, 2588757463, 1714631509, 293963156, 2319795663, 3925473552, 67240454, 4269768577, 2689618160, 2017213508, 631218106, 1269344483, 2723238387, 1571005438, 2151694528, 93294474, 1066570413, 563977660, 1882732616, 4059428100, 1673313503, 2008463041, 2950355573, 1109467491, 537923632, 3858759450, 4260623118, 3218264685, 2177748300, 403442708, 638784309, 3287084079, 3193921505, 899127202, 2286175436, 773265209, 2479146071, 1437050866, 4236148354, 2050833735, 3362022572, 3126681063, 840505643, 3866325909, 3227541664, 427917720, 2655997905, 2749160575, 1143087718, 1412049534, 999329963, 193497219, 2353415882, 3354324521, 1807268051, 672404540, 2816401017, 3160301282, 369822493, 2916866934, 3688947771, 1681011286, 1949973070, 336202270, 2454276571, 201721354, 1210328172, 3093060836, 2680341085, 3184776046, 1135389935, 3294782118, 965841320, 831886756, 3554993207, 4068047243, 3588745010, 2345191491, 1849112409, 3664604599, 26054028, 2983581028, 2622377682, 1235855840, 3630984372, 2891339514, 4092916743, 3488279077, 3395642799, 4101667470, 1202630377, 268961816, 1874508501, 4034427016, 1243948399, 1546530418, 941366308, 1470539505, 1941222599, 2546386513, 3421038627, 2715671932, 3899946140, 1042226977, 2521517021, 1639824860, 227249030, 260737669, 3765465232, 2084453954, 1907733956, 3429263018, 2420656344, 100860677, 4160157185, 470683154, 3261161891, 1781871967, 2924959737, 1773779408, 394692241, 2579611992, 974986535, 664706745, 3655459128, 3958962195, 731420851, 571543859, 3530123707, 2849626480, 126783113, 865375399, 765172662, 1008606754, 361203602, 3387549984, 2278477385, 2857719295, 1344809080, 2782912378, 59542671, 1503764984, 160008576, 437062935, 1707065306, 3622233649, 2218934982, 3496503480, 2185314755, 697932208, 1512910199, 504303377, 2075177163, 2824099068, 1841019862, 739644986];
-        var T2 = [2781242211, 2230877308, 2582542199, 2381740923, 234877682, 3184946027, 2984144751, 1418839493, 1348481072, 50462977, 2848876391, 2102799147, 434634494, 1656084439, 3863849899, 2599188086, 1167051466, 2636087938, 1082771913, 2281340285, 368048890, 3954334041, 3381544775, 201060592, 3963727277, 1739838676, 4250903202, 3930435503, 3206782108, 4149453988, 2531553906, 1536934080, 3262494647, 484572669, 2923271059, 1783375398, 1517041206, 1098792767, 49674231, 1334037708, 1550332980, 4098991525, 886171109, 150598129, 2481090929, 1940642008, 1398944049, 1059722517, 201851908, 1385547719, 1699095331, 1587397571, 674240536, 2704774806, 252314885, 3039795866, 151914247, 908333586, 2602270848, 1038082786, 651029483, 1766729511, 3447698098, 2682942837, 454166793, 2652734339, 1951935532, 775166490, 758520603, 3000790638, 4004797018, 4217086112, 4137964114, 1299594043, 1639438038, 3464344499, 2068982057, 1054729187, 1901997871, 2534638724, 4121318227, 1757008337, 0, 750906861, 1614815264, 535035132, 3363418545, 3988151131, 3201591914, 1183697867, 3647454910, 1265776953, 3734260298, 3566750796, 3903871064, 1250283471, 1807470800, 717615087, 3847203498, 384695291, 3313910595, 3617213773, 1432761139, 2484176261, 3481945413, 283769337, 100925954, 2180939647, 4037038160, 1148730428, 3123027871, 3813386408, 4087501137, 4267549603, 3229630528, 2315620239, 2906624658, 3156319645, 1215313976, 82966005, 3747855548, 3245848246, 1974459098, 1665278241, 807407632, 451280895, 251524083, 1841287890, 1283575245, 337120268, 891687699, 801369324, 3787349855, 2721421207, 3431482436, 959321879, 1469301956, 4065699751, 2197585534, 1199193405, 2898814052, 3887750493, 724703513, 2514908019, 2696962144, 2551808385, 3516813135, 2141445340, 1715741218, 2119445034, 2872807568, 2198571144, 3398190662, 700968686, 3547052216, 1009259540, 2041044702, 3803995742, 487983883, 1991105499, 1004265696, 1449407026, 1316239930, 504629770, 3683797321, 168560134, 1816667172, 3837287516, 1570751170, 1857934291, 4014189740, 2797888098, 2822345105, 2754712981, 936633572, 2347923833, 852879335, 1133234376, 1500395319, 3084545389, 2348912013, 1689376213, 3533459022, 3762923945, 3034082412, 4205598294, 133428468, 634383082, 2949277029, 2398386810, 3913789102, 403703816, 3580869306, 2297460856, 1867130149, 1918643758, 607656988, 4049053350, 3346248884, 1368901318, 600565992, 2090982877, 2632479860, 557719327, 3717614411, 3697393085, 2249034635, 2232388234, 2430627952, 1115438654, 3295786421, 2865522278, 3633334344, 84280067, 33027830, 303828494, 2747425121, 1600795957, 4188952407, 3496589753, 2434238086, 1486471617, 658119965, 3106381470, 953803233, 334231800, 3005978776, 857870609, 3151128937, 1890179545, 2298973838, 2805175444, 3056442267, 574365214, 2450884487, 550103529, 1233637070, 4289353045, 2018519080, 2057691103, 2399374476, 4166623649, 2148108681, 387583245, 3664101311, 836232934, 3330556482, 3100665960, 3280093505, 2955516313, 2002398509, 287182607, 3413881008, 4238890068, 3597515707, 975967766];
-        var T3 = [1671808611, 2089089148, 2006576759, 2072901243, 4061003762, 1807603307, 1873927791, 3310653893, 810573872, 16974337, 1739181671, 729634347, 4263110654, 3613570519, 2883997099, 1989864566, 3393556426, 2191335298, 3376449993, 2106063485, 4195741690, 1508618841, 1204391495, 4027317232, 2917941677, 3563566036, 2734514082, 2951366063, 2629772188, 2767672228, 1922491506, 3227229120, 3082974647, 4246528509, 2477669779, 644500518, 911895606, 1061256767, 4144166391, 3427763148, 878471220, 2784252325, 3845444069, 4043897329, 1905517169, 3631459288, 827548209, 356461077, 67897348, 3344078279, 593839651, 3277757891, 405286936, 2527147926, 84871685, 2595565466, 118033927, 305538066, 2157648768, 3795705826, 3945188843, 661212711, 2999812018, 1973414517, 152769033, 2208177539, 745822252, 439235610, 455947803, 1857215598, 1525593178, 2700827552, 1391895634, 994932283, 3596728278, 3016654259, 695947817, 3812548067, 795958831, 2224493444, 1408607827, 3513301457, 0, 3979133421, 543178784, 4229948412, 2982705585, 1542305371, 1790891114, 3410398667, 3201918910, 961245753, 1256100938, 1289001036, 1491644504, 3477767631, 3496721360, 4012557807, 2867154858, 4212583931, 1137018435, 1305975373, 861234739, 2241073541, 1171229253, 4178635257, 33948674, 2139225727, 1357946960, 1011120188, 2679776671, 2833468328, 1374921297, 2751356323, 1086357568, 2408187279, 2460827538, 2646352285, 944271416, 4110742005, 3168756668, 3066132406, 3665145818, 560153121, 271589392, 4279952895, 4077846003, 3530407890, 3444343245, 202643468, 322250259, 3962553324, 1608629855, 2543990167, 1154254916, 389623319, 3294073796, 2817676711, 2122513534, 1028094525, 1689045092, 1575467613, 422261273, 1939203699, 1621147744, 2174228865, 1339137615, 3699352540, 577127458, 712922154, 2427141008, 2290289544, 1187679302, 3995715566, 3100863416, 339486740, 3732514782, 1591917662, 186455563, 3681988059, 3762019296, 844522546, 978220090, 169743370, 1239126601, 101321734, 611076132, 1558493276, 3260915650, 3547250131, 2901361580, 1655096418, 2443721105, 2510565781, 3828863972, 2039214713, 3878868455, 3359869896, 928607799, 1840765549, 2374762893, 3580146133, 1322425422, 2850048425, 1823791212, 1459268694, 4094161908, 3928346602, 1706019429, 2056189050, 2934523822, 135794696, 3134549946, 2022240376, 628050469, 779246638, 472135708, 2800834470, 3032970164, 3327236038, 3894660072, 3715932637, 1956440180, 522272287, 1272813131, 3185336765, 2340818315, 2323976074, 1888542832, 1044544574, 3049550261, 1722469478, 1222152264, 50660867, 4127324150, 236067854, 1638122081, 895445557, 1475980887, 3117443513, 2257655686, 3243809217, 489110045, 2662934430, 3778599393, 4162055160, 2561878936, 288563729, 1773916777, 3648039385, 2391345038, 2493985684, 2612407707, 505560094, 2274497927, 3911240169, 3460925390, 1442818645, 678973480, 3749357023, 2358182796, 2717407649, 2306869641, 219617805, 3218761151, 3862026214, 1120306242, 1756942440, 1103331905, 2578459033, 762796589, 252780047, 2966125488, 1425844308, 3151392187, 372911126];
-        var T4 = [1667474886, 2088535288, 2004326894, 2071694838, 4075949567, 1802223062, 1869591006, 3318043793, 808472672, 16843522, 1734846926, 724270422, 4278065639, 3621216949, 2880169549, 1987484396, 3402253711, 2189597983, 3385409673, 2105378810, 4210693615, 1499065266, 1195886990, 4042263547, 2913856577, 3570689971, 2728590687, 2947541573, 2627518243, 2762274643, 1920112356, 3233831835, 3082273397, 4261223649, 2475929149, 640051788, 909531756, 1061110142, 4160160501, 3435941763, 875846760, 2779116625, 3857003729, 4059105529, 1903268834, 3638064043, 825316194, 353713962, 67374088, 3351728789, 589522246, 3284360861, 404236336, 2526454071, 84217610, 2593830191, 117901582, 303183396, 2155911963, 3806477791, 3958056653, 656894286, 2998062463, 1970642922, 151591698, 2206440989, 741110872, 437923380, 454765878, 1852748508, 1515908788, 2694904667, 1381168804, 993742198, 3604373943, 3014905469, 690584402, 3823320797, 791638366, 2223281939, 1398011302, 3520161977, 0, 3991743681, 538992704, 4244381667, 2981218425, 1532751286, 1785380564, 3419096717, 3200178535, 960056178, 1246420628, 1280103576, 1482221744, 3486468741, 3503319995, 4025428677, 2863326543, 4227536621, 1128514950, 1296947098, 859002214, 2240123921, 1162203018, 4193849577, 33687044, 2139062782, 1347481760, 1010582648, 2678045221, 2829640523, 1364325282, 2745433693, 1077985408, 2408548869, 2459086143, 2644360225, 943212656, 4126475505, 3166494563, 3065430391, 3671750063, 555836226, 269496352, 4294908645, 4092792573, 3537006015, 3452783745, 202118168, 320025894, 3974901699, 1600119230, 2543297077, 1145359496, 387397934, 3301201811, 2812801621, 2122220284, 1027426170, 1684319432, 1566435258, 421079858, 1936954854, 1616945344, 2172753945, 1330631070, 3705438115, 572679748, 707427924, 2425400123, 2290647819, 1179044492, 4008585671, 3099120491, 336870440, 3739122087, 1583276732, 185277718, 3688593069, 3772791771, 842159716, 976899700, 168435220, 1229577106, 101059084, 606366792, 1549591736, 3267517855, 3553849021, 2897014595, 1650632388, 2442242105, 2509612081, 3840161747, 2038008818, 3890688725, 3368567691, 926374254, 1835907034, 2374863873, 3587531953, 1313788572, 2846482505, 1819063512, 1448540844, 4109633523, 3941213647, 1701162954, 2054852340, 2930698567, 134748176, 3132806511, 2021165296, 623210314, 774795868, 471606328, 2795958615, 3031746419, 3334885783, 3907527627, 3722280097, 1953799400, 522133822, 1263263126, 3183336545, 2341176845, 2324333839, 1886425312, 1044267644, 3048588401, 1718004428, 1212733584, 50529542, 4143317495, 235803164, 1633788866, 892690282, 1465383342, 3115962473, 2256965911, 3250673817, 488449850, 2661202215, 3789633753, 4177007595, 2560144171, 286339874, 1768537042, 3654906025, 2391705863, 2492770099, 2610673197, 505291324, 2273808917, 3924369609, 3469625735, 1431699370, 673740880, 3755965093, 2358021891, 2711746649, 2307489801, 218961690, 3217021541, 3873845719, 1111672452, 1751693520, 1094828930, 2576986153, 757954394, 252645662, 2964376443, 1414855848, 3149649517, 370555436];
-        var T5 = [1374988112, 2118214995, 437757123, 975658646, 1001089995, 530400753, 2902087851, 1273168787, 540080725, 2910219766, 2295101073, 4110568485, 1340463100, 3307916247, 641025152, 3043140495, 3736164937, 632953703, 1172967064, 1576976609, 3274667266, 2169303058, 2370213795, 1809054150, 59727847, 361929877, 3211623147, 2505202138, 3569255213, 1484005843, 1239443753, 2395588676, 1975683434, 4102977912, 2572697195, 666464733, 3202437046, 4035489047, 3374361702, 2110667444, 1675577880, 3843699074, 2538681184, 1649639237, 2976151520, 3144396420, 4269907996, 4178062228, 1883793496, 2403728665, 2497604743, 1383856311, 2876494627, 1917518562, 3810496343, 1716890410, 3001755655, 800440835, 2261089178, 3543599269, 807962610, 599762354, 33778362, 3977675356, 2328828971, 2809771154, 4077384432, 1315562145, 1708848333, 101039829, 3509871135, 3299278474, 875451293, 2733856160, 92987698, 2767645557, 193195065, 1080094634, 1584504582, 3178106961, 1042385657, 2531067453, 3711829422, 1306967366, 2438237621, 1908694277, 67556463, 1615861247, 429456164, 3602770327, 2302690252, 1742315127, 2968011453, 126454664, 3877198648, 2043211483, 2709260871, 2084704233, 4169408201, 0, 159417987, 841739592, 504459436, 1817866830, 4245618683, 260388950, 1034867998, 908933415, 168810852, 1750902305, 2606453969, 607530554, 202008497, 2472011535, 3035535058, 463180190, 2160117071, 1641816226, 1517767529, 470948374, 3801332234, 3231722213, 1008918595, 303765277, 235474187, 4069246893, 766945465, 337553864, 1475418501, 2943682380, 4003061179, 2743034109, 4144047775, 1551037884, 1147550661, 1543208500, 2336434550, 3408119516, 3069049960, 3102011747, 3610369226, 1113818384, 328671808, 2227573024, 2236228733, 3535486456, 2935566865, 3341394285, 496906059, 3702665459, 226906860, 2009195472, 733156972, 2842737049, 294930682, 1206477858, 2835123396, 2700099354, 1451044056, 573804783, 2269728455, 3644379585, 2362090238, 2564033334, 2801107407, 2776292904, 3669462566, 1068351396, 742039012, 1350078989, 1784663195, 1417561698, 4136440770, 2430122216, 775550814, 2193862645, 2673705150, 1775276924, 1876241833, 3475313331, 3366754619, 270040487, 3902563182, 3678124923, 3441850377, 1851332852, 3969562369, 2203032232, 3868552805, 2868897406, 566021896, 4011190502, 3135740889, 1248802510, 3936291284, 699432150, 832877231, 708780849, 3332740144, 899835584, 1951317047, 4236429990, 3767586992, 866637845, 4043610186, 1106041591, 2144161806, 395441711, 1984812685, 1139781709, 3433712980, 3835036895, 2664543715, 1282050075, 3240894392, 1181045119, 2640243204, 25965917, 4203181171, 4211818798, 3009879386, 2463879762, 3910161971, 1842759443, 2597806476, 933301370, 1509430414, 3943906441, 3467192302, 3076639029, 3776767469, 2051518780, 2631065433, 1441952575, 404016761, 1942435775, 1408749034, 1610459739, 3745345300, 2017778566, 3400528769, 3110650942, 941896748, 3265478751, 371049330, 3168937228, 675039627, 4279080257, 967311729, 135050206, 3635733660, 1683407248, 2076935265, 3576870512, 1215061108, 3501741890];
-        var T6 = [1347548327, 1400783205, 3273267108, 2520393566, 3409685355, 4045380933, 2880240216, 2471224067, 1428173050, 4138563181, 2441661558, 636813900, 4233094615, 3620022987, 2149987652, 2411029155, 1239331162, 1730525723, 2554718734, 3781033664, 46346101, 310463728, 2743944855, 3328955385, 3875770207, 2501218972, 3955191162, 3667219033, 768917123, 3545789473, 692707433, 1150208456, 1786102409, 2029293177, 1805211710, 3710368113, 3065962831, 401639597, 1724457132, 3028143674, 409198410, 2196052529, 1620529459, 1164071807, 3769721975, 2226875310, 486441376, 2499348523, 1483753576, 428819965, 2274680428, 3075636216, 598438867, 3799141122, 1474502543, 711349675, 129166120, 53458370, 2592523643, 2782082824, 4063242375, 2988687269, 3120694122, 1559041666, 730517276, 2460449204, 4042459122, 2706270690, 3446004468, 3573941694, 533804130, 2328143614, 2637442643, 2695033685, 839224033, 1973745387, 957055980, 2856345839, 106852767, 1371368976, 4181598602, 1033297158, 2933734917, 1179510461, 3046200461, 91341917, 1862534868, 4284502037, 605657339, 2547432937, 3431546947, 2003294622, 3182487618, 2282195339, 954669403, 3682191598, 1201765386, 3917234703, 3388507166, 0, 2198438022, 1211247597, 2887651696, 1315723890, 4227665663, 1443857720, 507358933, 657861945, 1678381017, 560487590, 3516619604, 975451694, 2970356327, 261314535, 3535072918, 2652609425, 1333838021, 2724322336, 1767536459, 370938394, 182621114, 3854606378, 1128014560, 487725847, 185469197, 2918353863, 3106780840, 3356761769, 2237133081, 1286567175, 3152976349, 4255350624, 2683765030, 3160175349, 3309594171, 878443390, 1988838185, 3704300486, 1756818940, 1673061617, 3403100636, 272786309, 1075025698, 545572369, 2105887268, 4174560061, 296679730, 1841768865, 1260232239, 4091327024, 3960309330, 3497509347, 1814803222, 2578018489, 4195456072, 575138148, 3299409036, 446754879, 3629546796, 4011996048, 3347532110, 3252238545, 4270639778, 915985419, 3483825537, 681933534, 651868046, 2755636671, 3828103837, 223377554, 2607439820, 1649704518, 3270937875, 3901806776, 1580087799, 4118987695, 3198115200, 2087309459, 2842678573, 3016697106, 1003007129, 2802849917, 1860738147, 2077965243, 164439672, 4100872472, 32283319, 2827177882, 1709610350, 2125135846, 136428751, 3874428392, 3652904859, 3460984630, 3572145929, 3593056380, 2939266226, 824852259, 818324884, 3224740454, 930369212, 2801566410, 2967507152, 355706840, 1257309336, 4148292826, 243256656, 790073846, 2373340630, 1296297904, 1422699085, 3756299780, 3818836405, 457992840, 3099667487, 2135319889, 77422314, 1560382517, 1945798516, 788204353, 1521706781, 1385356242, 870912086, 325965383, 2358957921, 2050466060, 2388260884, 2313884476, 4006521127, 901210569, 3990953189, 1014646705, 1503449823, 1062597235, 2031621326, 3212035895, 3931371469, 1533017514, 350174575, 2256028891, 2177544179, 1052338372, 741876788, 1606591296, 1914052035, 213705253, 2334669897, 1107234197, 1899603969, 3725069491, 2631447780, 2422494913, 1635502980, 1893020342, 1950903388, 1120974935];
-        var T7 = [2807058932, 1699970625, 2764249623, 1586903591, 1808481195, 1173430173, 1487645946, 59984867, 4199882800, 1844882806, 1989249228, 1277555970, 3623636965, 3419915562, 1149249077, 2744104290, 1514790577, 459744698, 244860394, 3235995134, 1963115311, 4027744588, 2544078150, 4190530515, 1608975247, 2627016082, 2062270317, 1507497298, 2200818878, 567498868, 1764313568, 3359936201, 2305455554, 2037970062, 1047239e3, 1910319033, 1337376481, 2904027272, 2892417312, 984907214, 1243112415, 830661914, 861968209, 2135253587, 2011214180, 2927934315, 2686254721, 731183368, 1750626376, 4246310725, 1820824798, 4172763771, 3542330227, 48394827, 2404901663, 2871682645, 671593195, 3254988725, 2073724613, 145085239, 2280796200, 2779915199, 1790575107, 2187128086, 472615631, 3029510009, 4075877127, 3802222185, 4107101658, 3201631749, 1646252340, 4270507174, 1402811438, 1436590835, 3778151818, 3950355702, 3963161475, 4020912224, 2667994737, 273792366, 2331590177, 104699613, 95345982, 3175501286, 2377486676, 1560637892, 3564045318, 369057872, 4213447064, 3919042237, 1137477952, 2658625497, 1119727848, 2340947849, 1530455833, 4007360968, 172466556, 266959938, 516552836, 0, 2256734592, 3980931627, 1890328081, 1917742170, 4294704398, 945164165, 3575528878, 958871085, 3647212047, 2787207260, 1423022939, 775562294, 1739656202, 3876557655, 2530391278, 2443058075, 3310321856, 547512796, 1265195639, 437656594, 3121275539, 719700128, 3762502690, 387781147, 218828297, 3350065803, 2830708150, 2848461854, 428169201, 122466165, 3720081049, 1627235199, 648017665, 4122762354, 1002783846, 2117360635, 695634755, 3336358691, 4234721005, 4049844452, 3704280881, 2232435299, 574624663, 287343814, 612205898, 1039717051, 840019705, 2708326185, 793451934, 821288114, 1391201670, 3822090177, 376187827, 3113855344, 1224348052, 1679968233, 2361698556, 1058709744, 752375421, 2431590963, 1321699145, 3519142200, 2734591178, 188127444, 2177869557, 3727205754, 2384911031, 3215212461, 2648976442, 2450346104, 3432737375, 1180849278, 331544205, 3102249176, 4150144569, 2952102595, 2159976285, 2474404304, 766078933, 313773861, 2570832044, 2108100632, 1668212892, 3145456443, 2013908262, 418672217, 3070356634, 2594734927, 1852171925, 3867060991, 3473416636, 3907448597, 2614737639, 919489135, 164948639, 2094410160, 2997825956, 590424639, 2486224549, 1723872674, 3157750862, 3399941250, 3501252752, 3625268135, 2555048196, 3673637356, 1343127501, 4130281361, 3599595085, 2957853679, 1297403050, 81781910, 3051593425, 2283490410, 532201772, 1367295589, 3926170974, 895287692, 1953757831, 1093597963, 492483431, 3528626907, 1446242576, 1192455638, 1636604631, 209336225, 344873464, 1015671571, 669961897, 3375740769, 3857572124, 2973530695, 3747192018, 1933530610, 3464042516, 935293895, 3454686199, 2858115069, 1863638845, 3683022916, 4085369519, 3292445032, 875313188, 1080017571, 3279033885, 621591778, 1233856572, 2504130317, 24197544, 3017672716, 3835484340, 3247465558, 2220981195, 3060847922, 1551124588, 1463996600];
-        var T8 = [4104605777, 1097159550, 396673818, 660510266, 2875968315, 2638606623, 4200115116, 3808662347, 821712160, 1986918061, 3430322568, 38544885, 3856137295, 718002117, 893681702, 1654886325, 2975484382, 3122358053, 3926825029, 4274053469, 796197571, 1290801793, 1184342925, 3556361835, 2405426947, 2459735317, 1836772287, 1381620373, 3196267988, 1948373848, 3764988233, 3385345166, 3263785589, 2390325492, 1480485785, 3111247143, 3780097726, 2293045232, 548169417, 3459953789, 3746175075, 439452389, 1362321559, 1400849762, 1685577905, 1806599355, 2174754046, 137073913, 1214797936, 1174215055, 3731654548, 2079897426, 1943217067, 1258480242, 529487843, 1437280870, 3945269170, 3049390895, 3313212038, 923313619, 679998e3, 3215307299, 57326082, 377642221, 3474729866, 2041877159, 133361907, 1776460110, 3673476453, 96392454, 878845905, 2801699524, 777231668, 4082475170, 2330014213, 4142626212, 2213296395, 1626319424, 1906247262, 1846563261, 562755902, 3708173718, 1040559837, 3871163981, 1418573201, 3294430577, 114585348, 1343618912, 2566595609, 3186202582, 1078185097, 3651041127, 3896688048, 2307622919, 425408743, 3371096953, 2081048481, 1108339068, 2216610296, 0, 2156299017, 736970802, 292596766, 1517440620, 251657213, 2235061775, 2933202493, 758720310, 265905162, 1554391400, 1532285339, 908999204, 174567692, 1474760595, 4002861748, 2610011675, 3234156416, 3693126241, 2001430874, 303699484, 2478443234, 2687165888, 585122620, 454499602, 151849742, 2345119218, 3064510765, 514443284, 4044981591, 1963412655, 2581445614, 2137062819, 19308535, 1928707164, 1715193156, 4219352155, 1126790795, 600235211, 3992742070, 3841024952, 836553431, 1669664834, 2535604243, 3323011204, 1243905413, 3141400786, 4180808110, 698445255, 2653899549, 2989552604, 2253581325, 3252932727, 3004591147, 1891211689, 2487810577, 3915653703, 4237083816, 4030667424, 2100090966, 865136418, 1229899655, 953270745, 3399679628, 3557504664, 4118925222, 2061379749, 3079546586, 2915017791, 983426092, 2022837584, 1607244650, 2118541908, 2366882550, 3635996816, 972512814, 3283088770, 1568718495, 3499326569, 3576539503, 621982671, 2895723464, 410887952, 2623762152, 1002142683, 645401037, 1494807662, 2595684844, 1335535747, 2507040230, 4293295786, 3167684641, 367585007, 3885750714, 1865862730, 2668221674, 2960971305, 2763173681, 1059270954, 2777952454, 2724642869, 1320957812, 2194319100, 2429595872, 2815956275, 77089521, 3973773121, 3444575871, 2448830231, 1305906550, 4021308739, 2857194700, 2516901860, 3518358430, 1787304780, 740276417, 1699839814, 1592394909, 2352307457, 2272556026, 188821243, 1729977011, 3687994002, 274084841, 3594982253, 3613494426, 2701949495, 4162096729, 322734571, 2837966542, 1640576439, 484830689, 1202797690, 3537852828, 4067639125, 349075736, 3342319475, 4157467219, 4255800159, 1030690015, 1155237496, 2951971274, 1757691577, 607398968, 2738905026, 499347990, 3794078908, 1011452712, 227885567, 2818666809, 213114376, 3034881240, 1455525988, 3414450555, 850817237, 1817998408, 3092726480];
-        var U1 = [0, 235474187, 470948374, 303765277, 941896748, 908933415, 607530554, 708780849, 1883793496, 2118214995, 1817866830, 1649639237, 1215061108, 1181045119, 1417561698, 1517767529, 3767586992, 4003061179, 4236429990, 4069246893, 3635733660, 3602770327, 3299278474, 3400528769, 2430122216, 2664543715, 2362090238, 2193862645, 2835123396, 2801107407, 3035535058, 3135740889, 3678124923, 3576870512, 3341394285, 3374361702, 3810496343, 3977675356, 4279080257, 4043610186, 2876494627, 2776292904, 3076639029, 3110650942, 2472011535, 2640243204, 2403728665, 2169303058, 1001089995, 899835584, 666464733, 699432150, 59727847, 226906860, 530400753, 294930682, 1273168787, 1172967064, 1475418501, 1509430414, 1942435775, 2110667444, 1876241833, 1641816226, 2910219766, 2743034109, 2976151520, 3211623147, 2505202138, 2606453969, 2302690252, 2269728455, 3711829422, 3543599269, 3240894392, 3475313331, 3843699074, 3943906441, 4178062228, 4144047775, 1306967366, 1139781709, 1374988112, 1610459739, 1975683434, 2076935265, 1775276924, 1742315127, 1034867998, 866637845, 566021896, 800440835, 92987698, 193195065, 429456164, 395441711, 1984812685, 2017778566, 1784663195, 1683407248, 1315562145, 1080094634, 1383856311, 1551037884, 101039829, 135050206, 437757123, 337553864, 1042385657, 807962610, 573804783, 742039012, 2531067453, 2564033334, 2328828971, 2227573024, 2935566865, 2700099354, 3001755655, 3168937228, 3868552805, 3902563182, 4203181171, 4102977912, 3736164937, 3501741890, 3265478751, 3433712980, 1106041591, 1340463100, 1576976609, 1408749034, 2043211483, 2009195472, 1708848333, 1809054150, 832877231, 1068351396, 766945465, 599762354, 159417987, 126454664, 361929877, 463180190, 2709260871, 2943682380, 3178106961, 3009879386, 2572697195, 2538681184, 2236228733, 2336434550, 3509871135, 3745345300, 3441850377, 3274667266, 3910161971, 3877198648, 4110568485, 4211818798, 2597806476, 2497604743, 2261089178, 2295101073, 2733856160, 2902087851, 3202437046, 2968011453, 3936291284, 3835036895, 4136440770, 4169408201, 3535486456, 3702665459, 3467192302, 3231722213, 2051518780, 1951317047, 1716890410, 1750902305, 1113818384, 1282050075, 1584504582, 1350078989, 168810852, 67556463, 371049330, 404016761, 841739592, 1008918595, 775550814, 540080725, 3969562369, 3801332234, 4035489047, 4269907996, 3569255213, 3669462566, 3366754619, 3332740144, 2631065433, 2463879762, 2160117071, 2395588676, 2767645557, 2868897406, 3102011747, 3069049960, 202008497, 33778362, 270040487, 504459436, 875451293, 975658646, 675039627, 641025152, 2084704233, 1917518562, 1615861247, 1851332852, 1147550661, 1248802510, 1484005843, 1451044056, 933301370, 967311729, 733156972, 632953703, 260388950, 25965917, 328671808, 496906059, 1206477858, 1239443753, 1543208500, 1441952575, 2144161806, 1908694277, 1675577880, 1842759443, 3610369226, 3644379585, 3408119516, 3307916247, 4011190502, 3776767469, 4077384432, 4245618683, 2809771154, 2842737049, 3144396420, 3043140495, 2673705150, 2438237621, 2203032232, 2370213795];
-        var U2 = [0, 185469197, 370938394, 487725847, 741876788, 657861945, 975451694, 824852259, 1483753576, 1400783205, 1315723890, 1164071807, 1950903388, 2135319889, 1649704518, 1767536459, 2967507152, 3152976349, 2801566410, 2918353863, 2631447780, 2547432937, 2328143614, 2177544179, 3901806776, 3818836405, 4270639778, 4118987695, 3299409036, 3483825537, 3535072918, 3652904859, 2077965243, 1893020342, 1841768865, 1724457132, 1474502543, 1559041666, 1107234197, 1257309336, 598438867, 681933534, 901210569, 1052338372, 261314535, 77422314, 428819965, 310463728, 3409685355, 3224740454, 3710368113, 3593056380, 3875770207, 3960309330, 4045380933, 4195456072, 2471224067, 2554718734, 2237133081, 2388260884, 3212035895, 3028143674, 2842678573, 2724322336, 4138563181, 4255350624, 3769721975, 3955191162, 3667219033, 3516619604, 3431546947, 3347532110, 2933734917, 2782082824, 3099667487, 3016697106, 2196052529, 2313884476, 2499348523, 2683765030, 1179510461, 1296297904, 1347548327, 1533017514, 1786102409, 1635502980, 2087309459, 2003294622, 507358933, 355706840, 136428751, 53458370, 839224033, 957055980, 605657339, 790073846, 2373340630, 2256028891, 2607439820, 2422494913, 2706270690, 2856345839, 3075636216, 3160175349, 3573941694, 3725069491, 3273267108, 3356761769, 4181598602, 4063242375, 4011996048, 3828103837, 1033297158, 915985419, 730517276, 545572369, 296679730, 446754879, 129166120, 213705253, 1709610350, 1860738147, 1945798516, 2029293177, 1239331162, 1120974935, 1606591296, 1422699085, 4148292826, 4233094615, 3781033664, 3931371469, 3682191598, 3497509347, 3446004468, 3328955385, 2939266226, 2755636671, 3106780840, 2988687269, 2198438022, 2282195339, 2501218972, 2652609425, 1201765386, 1286567175, 1371368976, 1521706781, 1805211710, 1620529459, 2105887268, 1988838185, 533804130, 350174575, 164439672, 46346101, 870912086, 954669403, 636813900, 788204353, 2358957921, 2274680428, 2592523643, 2441661558, 2695033685, 2880240216, 3065962831, 3182487618, 3572145929, 3756299780, 3270937875, 3388507166, 4174560061, 4091327024, 4006521127, 3854606378, 1014646705, 930369212, 711349675, 560487590, 272786309, 457992840, 106852767, 223377554, 1678381017, 1862534868, 1914052035, 2031621326, 1211247597, 1128014560, 1580087799, 1428173050, 32283319, 182621114, 401639597, 486441376, 768917123, 651868046, 1003007129, 818324884, 1503449823, 1385356242, 1333838021, 1150208456, 1973745387, 2125135846, 1673061617, 1756818940, 2970356327, 3120694122, 2802849917, 2887651696, 2637442643, 2520393566, 2334669897, 2149987652, 3917234703, 3799141122, 4284502037, 4100872472, 3309594171, 3460984630, 3545789473, 3629546796, 2050466060, 1899603969, 1814803222, 1730525723, 1443857720, 1560382517, 1075025698, 1260232239, 575138148, 692707433, 878443390, 1062597235, 243256656, 91341917, 409198410, 325965383, 3403100636, 3252238545, 3704300486, 3620022987, 3874428392, 3990953189, 4042459122, 4227665663, 2460449204, 2578018489, 2226875310, 2411029155, 3198115200, 3046200461, 2827177882, 2743944855];
-        var U3 = [0, 218828297, 437656594, 387781147, 875313188, 958871085, 775562294, 590424639, 1750626376, 1699970625, 1917742170, 2135253587, 1551124588, 1367295589, 1180849278, 1265195639, 3501252752, 3720081049, 3399941250, 3350065803, 3835484340, 3919042237, 4270507174, 4085369519, 3102249176, 3051593425, 2734591178, 2952102595, 2361698556, 2177869557, 2530391278, 2614737639, 3145456443, 3060847922, 2708326185, 2892417312, 2404901663, 2187128086, 2504130317, 2555048196, 3542330227, 3727205754, 3375740769, 3292445032, 3876557655, 3926170974, 4246310725, 4027744588, 1808481195, 1723872674, 1910319033, 2094410160, 1608975247, 1391201670, 1173430173, 1224348052, 59984867, 244860394, 428169201, 344873464, 935293895, 984907214, 766078933, 547512796, 1844882806, 1627235199, 2011214180, 2062270317, 1507497298, 1423022939, 1137477952, 1321699145, 95345982, 145085239, 532201772, 313773861, 830661914, 1015671571, 731183368, 648017665, 3175501286, 2957853679, 2807058932, 2858115069, 2305455554, 2220981195, 2474404304, 2658625497, 3575528878, 3625268135, 3473416636, 3254988725, 3778151818, 3963161475, 4213447064, 4130281361, 3599595085, 3683022916, 3432737375, 3247465558, 3802222185, 4020912224, 4172763771, 4122762354, 3201631749, 3017672716, 2764249623, 2848461854, 2331590177, 2280796200, 2431590963, 2648976442, 104699613, 188127444, 472615631, 287343814, 840019705, 1058709744, 671593195, 621591778, 1852171925, 1668212892, 1953757831, 2037970062, 1514790577, 1463996600, 1080017571, 1297403050, 3673637356, 3623636965, 3235995134, 3454686199, 4007360968, 3822090177, 4107101658, 4190530515, 2997825956, 3215212461, 2830708150, 2779915199, 2256734592, 2340947849, 2627016082, 2443058075, 172466556, 122466165, 273792366, 492483431, 1047239e3, 861968209, 612205898, 695634755, 1646252340, 1863638845, 2013908262, 1963115311, 1446242576, 1530455833, 1277555970, 1093597963, 1636604631, 1820824798, 2073724613, 1989249228, 1436590835, 1487645946, 1337376481, 1119727848, 164948639, 81781910, 331544205, 516552836, 1039717051, 821288114, 669961897, 719700128, 2973530695, 3157750862, 2871682645, 2787207260, 2232435299, 2283490410, 2667994737, 2450346104, 3647212047, 3564045318, 3279033885, 3464042516, 3980931627, 3762502690, 4150144569, 4199882800, 3070356634, 3121275539, 2904027272, 2686254721, 2200818878, 2384911031, 2570832044, 2486224549, 3747192018, 3528626907, 3310321856, 3359936201, 3950355702, 3867060991, 4049844452, 4234721005, 1739656202, 1790575107, 2108100632, 1890328081, 1402811438, 1586903591, 1233856572, 1149249077, 266959938, 48394827, 369057872, 418672217, 1002783846, 919489135, 567498868, 752375421, 209336225, 24197544, 376187827, 459744698, 945164165, 895287692, 574624663, 793451934, 1679968233, 1764313568, 2117360635, 1933530610, 1343127501, 1560637892, 1243112415, 1192455638, 3704280881, 3519142200, 3336358691, 3419915562, 3907448597, 3857572124, 4075877127, 4294704398, 3029510009, 3113855344, 2927934315, 2744104290, 2159976285, 2377486676, 2594734927, 2544078150];
-        var U4 = [0, 151849742, 303699484, 454499602, 607398968, 758720310, 908999204, 1059270954, 1214797936, 1097159550, 1517440620, 1400849762, 1817998408, 1699839814, 2118541908, 2001430874, 2429595872, 2581445614, 2194319100, 2345119218, 3034881240, 3186202582, 2801699524, 2951971274, 3635996816, 3518358430, 3399679628, 3283088770, 4237083816, 4118925222, 4002861748, 3885750714, 1002142683, 850817237, 698445255, 548169417, 529487843, 377642221, 227885567, 77089521, 1943217067, 2061379749, 1640576439, 1757691577, 1474760595, 1592394909, 1174215055, 1290801793, 2875968315, 2724642869, 3111247143, 2960971305, 2405426947, 2253581325, 2638606623, 2487810577, 3808662347, 3926825029, 4044981591, 4162096729, 3342319475, 3459953789, 3576539503, 3693126241, 1986918061, 2137062819, 1685577905, 1836772287, 1381620373, 1532285339, 1078185097, 1229899655, 1040559837, 923313619, 740276417, 621982671, 439452389, 322734571, 137073913, 19308535, 3871163981, 4021308739, 4104605777, 4255800159, 3263785589, 3414450555, 3499326569, 3651041127, 2933202493, 2815956275, 3167684641, 3049390895, 2330014213, 2213296395, 2566595609, 2448830231, 1305906550, 1155237496, 1607244650, 1455525988, 1776460110, 1626319424, 2079897426, 1928707164, 96392454, 213114376, 396673818, 514443284, 562755902, 679998e3, 865136418, 983426092, 3708173718, 3557504664, 3474729866, 3323011204, 4180808110, 4030667424, 3945269170, 3794078908, 2507040230, 2623762152, 2272556026, 2390325492, 2975484382, 3092726480, 2738905026, 2857194700, 3973773121, 3856137295, 4274053469, 4157467219, 3371096953, 3252932727, 3673476453, 3556361835, 2763173681, 2915017791, 3064510765, 3215307299, 2156299017, 2307622919, 2459735317, 2610011675, 2081048481, 1963412655, 1846563261, 1729977011, 1480485785, 1362321559, 1243905413, 1126790795, 878845905, 1030690015, 645401037, 796197571, 274084841, 425408743, 38544885, 188821243, 3613494426, 3731654548, 3313212038, 3430322568, 4082475170, 4200115116, 3780097726, 3896688048, 2668221674, 2516901860, 2366882550, 2216610296, 3141400786, 2989552604, 2837966542, 2687165888, 1202797690, 1320957812, 1437280870, 1554391400, 1669664834, 1787304780, 1906247262, 2022837584, 265905162, 114585348, 499347990, 349075736, 736970802, 585122620, 972512814, 821712160, 2595684844, 2478443234, 2293045232, 2174754046, 3196267988, 3079546586, 2895723464, 2777952454, 3537852828, 3687994002, 3234156416, 3385345166, 4142626212, 4293295786, 3841024952, 3992742070, 174567692, 57326082, 410887952, 292596766, 777231668, 660510266, 1011452712, 893681702, 1108339068, 1258480242, 1343618912, 1494807662, 1715193156, 1865862730, 1948373848, 2100090966, 2701949495, 2818666809, 3004591147, 3122358053, 2235061775, 2352307457, 2535604243, 2653899549, 3915653703, 3764988233, 4219352155, 4067639125, 3444575871, 3294430577, 3746175075, 3594982253, 836553431, 953270745, 600235211, 718002117, 367585007, 484830689, 133361907, 251657213, 2041877159, 1891211689, 1806599355, 1654886325, 1568718495, 1418573201, 1335535747, 1184342925];
-        function convertToInt32(bytes) {
-          var result = [];
-          for (var i3 = 0; i3 < bytes.length; i3 += 4) {
-            result.push(
-              bytes[i3] << 24 | bytes[i3 + 1] << 16 | bytes[i3 + 2] << 8 | bytes[i3 + 3]
-            );
+          return false;
+        }
+        function arrayMap2(array2, iteratee) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length, result = Array(length2);
+          while (++index < length2) {
+            result[index] = iteratee(array2[index], index, array2);
           }
           return result;
         }
-        var AES = function(key) {
-          if (!(this instanceof AES)) {
-            throw Error("AES must be instanitated with `new`");
+        function arrayPush2(array2, values) {
+          var index = -1, length2 = values.length, offset = array2.length;
+          while (++index < length2) {
+            array2[offset + index] = values[index];
           }
-          Object.defineProperty(this, "key", {
-            value: coerceArray(key, true)
-          });
-          this._prepare();
-        };
-        AES.prototype._prepare = function() {
-          var rounds = numberOfRounds[this.key.length];
-          if (rounds == null) {
-            throw new Error("invalid key size (must be 16, 24 or 32 bytes)");
+          return array2;
+        }
+        function arrayReduce(array2, iteratee, accumulator, initAccum) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length;
+          if (initAccum && length2) {
+            accumulator = array2[++index];
           }
-          this._Ke = [];
-          this._Kd = [];
-          for (var i3 = 0; i3 <= rounds; i3++) {
-            this._Ke.push([0, 0, 0, 0]);
-            this._Kd.push([0, 0, 0, 0]);
+          while (++index < length2) {
+            accumulator = iteratee(accumulator, array2[index], index, array2);
           }
-          var roundKeyCount = (rounds + 1) * 4;
-          var KC = this.key.length / 4;
-          var tk = convertToInt32(this.key);
-          var index;
-          for (var i3 = 0; i3 < KC; i3++) {
-            index = i3 >> 2;
-            this._Ke[index][i3 % 4] = tk[i3];
-            this._Kd[rounds - index][i3 % 4] = tk[i3];
+          return accumulator;
+        }
+        function arrayReduceRight(array2, iteratee, accumulator, initAccum) {
+          var length2 = array2 == null ? 0 : array2.length;
+          if (initAccum && length2) {
+            accumulator = array2[--length2];
           }
-          var rconpointer = 0;
-          var t2 = KC, tt2;
-          while (t2 < roundKeyCount) {
-            tt2 = tk[KC - 1];
-            tk[0] ^= S2[tt2 >> 16 & 255] << 24 ^ S2[tt2 >> 8 & 255] << 16 ^ S2[tt2 & 255] << 8 ^ S2[tt2 >> 24 & 255] ^ rcon[rconpointer] << 24;
-            rconpointer += 1;
-            if (KC != 8) {
-              for (var i3 = 1; i3 < KC; i3++) {
-                tk[i3] ^= tk[i3 - 1];
-              }
-            } else {
-              for (var i3 = 1; i3 < KC / 2; i3++) {
-                tk[i3] ^= tk[i3 - 1];
-              }
-              tt2 = tk[KC / 2 - 1];
-              tk[KC / 2] ^= S2[tt2 & 255] ^ S2[tt2 >> 8 & 255] << 8 ^ S2[tt2 >> 16 & 255] << 16 ^ S2[tt2 >> 24 & 255] << 24;
-              for (var i3 = KC / 2 + 1; i3 < KC; i3++) {
-                tk[i3] ^= tk[i3 - 1];
-              }
-            }
-            var i3 = 0, r2, c2;
-            while (i3 < KC && t2 < roundKeyCount) {
-              r2 = t2 >> 2;
-              c2 = t2 % 4;
-              this._Ke[r2][c2] = tk[i3];
-              this._Kd[rounds - r2][c2] = tk[i3++];
-              t2++;
+          while (length2--) {
+            accumulator = iteratee(accumulator, array2[length2], length2, array2);
+          }
+          return accumulator;
+        }
+        function arraySome2(array2, predicate) {
+          var index = -1, length2 = array2 == null ? 0 : array2.length;
+          while (++index < length2) {
+            if (predicate(array2[index], index, array2)) {
+              return true;
             }
           }
-          for (var r2 = 1; r2 < rounds; r2++) {
-            for (var c2 = 0; c2 < 4; c2++) {
-              tt2 = this._Kd[r2][c2];
-              this._Kd[r2][c2] = U1[tt2 >> 24 & 255] ^ U2[tt2 >> 16 & 255] ^ U3[tt2 >> 8 & 255] ^ U4[tt2 & 255];
+          return false;
+        }
+        var asciiSize = baseProperty("length");
+        function asciiToArray(string) {
+          return string.split("");
+        }
+        function asciiWords(string) {
+          return string.match(reAsciiWord) || [];
+        }
+        function baseFindKey(collection, predicate, eachFunc) {
+          var result;
+          eachFunc(collection, function(value, key, collection2) {
+            if (predicate(value, key, collection2)) {
+              result = key;
+              return false;
+            }
+          });
+          return result;
+        }
+        function baseFindIndex(array2, predicate, fromIndex, fromRight) {
+          var length2 = array2.length, index = fromIndex + (fromRight ? 1 : -1);
+          while (fromRight ? index-- : ++index < length2) {
+            if (predicate(array2[index], index, array2)) {
+              return index;
             }
           }
-        };
-        AES.prototype.encrypt = function(plaintext) {
-          if (plaintext.length != 16) {
-            throw new Error("invalid plaintext size (must be 16 bytes)");
+          return -1;
+        }
+        function baseIndexOf(array2, value, fromIndex) {
+          return value === value ? strictIndexOf(array2, value, fromIndex) : baseFindIndex(array2, baseIsNaN, fromIndex);
+        }
+        function baseIndexOfWith(array2, value, fromIndex, comparator) {
+          var index = fromIndex - 1, length2 = array2.length;
+          while (++index < length2) {
+            if (comparator(array2[index], value)) {
+              return index;
+            }
           }
-          var rounds = this._Ke.length - 1;
-          var a2 = [0, 0, 0, 0];
-          var t2 = convertToInt32(plaintext);
-          for (var i3 = 0; i3 < 4; i3++) {
-            t2[i3] ^= this._Ke[0][i3];
+          return -1;
+        }
+        function baseIsNaN(value) {
+          return value !== value;
+        }
+        function baseMean(array2, iteratee) {
+          var length2 = array2 == null ? 0 : array2.length;
+          return length2 ? baseSum(array2, iteratee) / length2 : NAN2;
+        }
+        function baseProperty(key) {
+          return function(object) {
+            return object == null ? undefined2 : object[key];
+          };
+        }
+        function basePropertyOf2(object) {
+          return function(key) {
+            return object == null ? undefined2 : object[key];
+          };
+        }
+        function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+          eachFunc(collection, function(value, index, collection2) {
+            accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2);
+          });
+          return accumulator;
+        }
+        function baseSortBy(array2, comparer) {
+          var length2 = array2.length;
+          array2.sort(comparer);
+          while (length2--) {
+            array2[length2] = array2[length2].value;
           }
-          for (var r2 = 1; r2 < rounds; r2++) {
-            for (var i3 = 0; i3 < 4; i3++) {
-              a2[i3] = T1[t2[i3] >> 24 & 255] ^ T2[t2[(i3 + 1) % 4] >> 16 & 255] ^ T3[t2[(i3 + 2) % 4] >> 8 & 255] ^ T4[t2[(i3 + 3) % 4] & 255] ^ this._Ke[r2][i3];
+          return array2;
+        }
+        function baseSum(array2, iteratee) {
+          var result, index = -1, length2 = array2.length;
+          while (++index < length2) {
+            var current = iteratee(array2[index]);
+            if (current !== undefined2) {
+              result = result === undefined2 ? current : result + current;
             }
-            t2 = a2.slice();
           }
-          var result = createArray(16), tt2;
-          for (var i3 = 0; i3 < 4; i3++) {
-            tt2 = this._Ke[rounds][i3];
-            result[4 * i3] = (S2[t2[i3] >> 24 & 255] ^ tt2 >> 24) & 255;
-            result[4 * i3 + 1] = (S2[t2[(i3 + 1) % 4] >> 16 & 255] ^ tt2 >> 16) & 255;
-            result[4 * i3 + 2] = (S2[t2[(i3 + 2) % 4] >> 8 & 255] ^ tt2 >> 8) & 255;
-            result[4 * i3 + 3] = (S2[t2[(i3 + 3) % 4] & 255] ^ tt2) & 255;
+          return result;
+        }
+        function baseTimes2(n3, iteratee) {
+          var index = -1, result = Array(n3);
+          while (++index < n3) {
+            result[index] = iteratee(index);
           }
           return result;
-        };
-        AES.prototype.decrypt = function(ciphertext) {
-          if (ciphertext.length != 16) {
-            throw new Error("invalid ciphertext size (must be 16 bytes)");
+        }
+        function baseToPairs(object, props) {
+          return arrayMap2(props, function(key) {
+            return [key, object[key]];
+          });
+        }
+        function baseTrim2(string) {
+          return string ? string.slice(0, trimmedEndIndex2(string) + 1).replace(reTrimStart2, "") : string;
+        }
+        function baseUnary2(func) {
+          return function(value) {
+            return func(value);
+          };
+        }
+        function baseValues(object, props) {
+          return arrayMap2(props, function(key) {
+            return object[key];
+          });
+        }
+        function cacheHas2(cache, key) {
+          return cache.has(key);
+        }
+        function charsStartIndex(strSymbols, chrSymbols) {
+          var index = -1, length2 = strSymbols.length;
+          while (++index < length2 && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
           }
-          var rounds = this._Kd.length - 1;
-          var a2 = [0, 0, 0, 0];
-          var t2 = convertToInt32(ciphertext);
-          for (var i3 = 0; i3 < 4; i3++) {
-            t2[i3] ^= this._Kd[0][i3];
+          return index;
+        }
+        function charsEndIndex(strSymbols, chrSymbols) {
+          var index = strSymbols.length;
+          while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
           }
-          for (var r2 = 1; r2 < rounds; r2++) {
-            for (var i3 = 0; i3 < 4; i3++) {
-              a2[i3] = T5[t2[i3] >> 24 & 255] ^ T6[t2[(i3 + 3) % 4] >> 16 & 255] ^ T7[t2[(i3 + 2) % 4] >> 8 & 255] ^ T8[t2[(i3 + 1) % 4] & 255] ^ this._Kd[r2][i3];
+          return index;
+        }
+        function countHolders(array2, placeholder) {
+          var length2 = array2.length, result = 0;
+          while (length2--) {
+            if (array2[length2] === placeholder) {
+              ++result;
             }
-            t2 = a2.slice();
-          }
-          var result = createArray(16), tt2;
-          for (var i3 = 0; i3 < 4; i3++) {
-            tt2 = this._Kd[rounds][i3];
-            result[4 * i3] = (Si[t2[i3] >> 24 & 255] ^ tt2 >> 24) & 255;
-            result[4 * i3 + 1] = (Si[t2[(i3 + 3) % 4] >> 16 & 255] ^ tt2 >> 16) & 255;
-            result[4 * i3 + 2] = (Si[t2[(i3 + 2) % 4] >> 8 & 255] ^ tt2 >> 8) & 255;
-            result[4 * i3 + 3] = (Si[t2[(i3 + 1) % 4] & 255] ^ tt2) & 255;
           }
           return result;
-        };
-        var ModeOfOperationECB = function(key) {
-          if (!(this instanceof ModeOfOperationECB)) {
-            throw Error("AES must be instanitated with `new`");
-          }
-          this.description = "Electronic Code Block";
-          this.name = "ecb";
-          this._aes = new AES(key);
-        };
-        ModeOfOperationECB.prototype.encrypt = function(plaintext) {
-          plaintext = coerceArray(plaintext);
-          if (plaintext.length % 16 !== 0) {
-            throw new Error("invalid plaintext size (must be multiple of 16 bytes)");
-          }
-          var ciphertext = createArray(plaintext.length);
-          var block2 = createArray(16);
-          for (var i3 = 0; i3 < plaintext.length; i3 += 16) {
-            copyArray(plaintext, block2, 0, i3, i3 + 16);
-            block2 = this._aes.encrypt(block2);
-            copyArray(block2, ciphertext, i3);
+        }
+        var deburrLetter = basePropertyOf2(deburredLetters);
+        var escapeHtmlChar2 = basePropertyOf2(htmlEscapes2);
+        function escapeStringChar(chr) {
+          return "\\" + stringEscapes[chr];
+        }
+        function getValue2(object, key) {
+          return object == null ? undefined2 : object[key];
+        }
+        function hasUnicode(string) {
+          return reHasUnicode.test(string);
+        }
+        function hasUnicodeWord(string) {
+          return reHasUnicodeWord.test(string);
+        }
+        function iteratorToArray(iterator) {
+          var data, result = [];
+          while (!(data = iterator.next()).done) {
+            result.push(data.value);
           }
-          return ciphertext;
-        };
-        ModeOfOperationECB.prototype.decrypt = function(ciphertext) {
-          ciphertext = coerceArray(ciphertext);
-          if (ciphertext.length % 16 !== 0) {
-            throw new Error("invalid ciphertext size (must be multiple of 16 bytes)");
+          return result;
+        }
+        function mapToArray2(map2) {
+          var index = -1, result = Array(map2.size);
+          map2.forEach(function(value, key) {
+            result[++index] = [key, value];
+          });
+          return result;
+        }
+        function overArg2(func, transform2) {
+          return function(arg) {
+            return func(transform2(arg));
+          };
+        }
+        function replaceHolders(array2, placeholder) {
+          var index = -1, length2 = array2.length, resIndex = 0, result = [];
+          while (++index < length2) {
+            var value = array2[index];
+            if (value === placeholder || value === PLACEHOLDER) {
+              array2[index] = PLACEHOLDER;
+              result[resIndex++] = index;
+            }
           }
-          var plaintext = createArray(ciphertext.length);
-          var block2 = createArray(16);
-          for (var i3 = 0; i3 < ciphertext.length; i3 += 16) {
-            copyArray(ciphertext, block2, 0, i3, i3 + 16);
-            block2 = this._aes.decrypt(block2);
-            copyArray(block2, plaintext, i3);
+          return result;
+        }
+        function setToArray2(set4) {
+          var index = -1, result = Array(set4.size);
+          set4.forEach(function(value) {
+            result[++index] = value;
+          });
+          return result;
+        }
+        function setToPairs(set4) {
+          var index = -1, result = Array(set4.size);
+          set4.forEach(function(value) {
+            result[++index] = [value, value];
+          });
+          return result;
+        }
+        function strictIndexOf(array2, value, fromIndex) {
+          var index = fromIndex - 1, length2 = array2.length;
+          while (++index < length2) {
+            if (array2[index] === value) {
+              return index;
+            }
           }
-          return plaintext;
-        };
-        var ModeOfOperationCBC = function(key, iv) {
-          if (!(this instanceof ModeOfOperationCBC)) {
-            throw Error("AES must be instanitated with `new`");
+          return -1;
+        }
+        function strictLastIndexOf(array2, value, fromIndex) {
+          var index = fromIndex + 1;
+          while (index--) {
+            if (array2[index] === value) {
+              return index;
+            }
           }
-          this.description = "Cipher Block Chaining";
-          this.name = "cbc";
-          if (!iv) {
-            iv = createArray(16);
-          } else if (iv.length != 16) {
-            throw new Error("invalid initialation vector size (must be 16 bytes)");
+          return index;
+        }
+        function stringSize(string) {
+          return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);
+        }
+        function stringToArray(string) {
+          return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
+        }
+        function trimmedEndIndex2(string) {
+          var index = string.length;
+          while (index-- && reWhitespace2.test(string.charAt(index))) {
           }
-          this._lastCipherblock = coerceArray(iv, true);
-          this._aes = new AES(key);
-        };
-        ModeOfOperationCBC.prototype.encrypt = function(plaintext) {
-          plaintext = coerceArray(plaintext);
-          if (plaintext.length % 16 !== 0) {
-            throw new Error("invalid plaintext size (must be multiple of 16 bytes)");
+          return index;
+        }
+        var unescapeHtmlChar2 = basePropertyOf2(htmlUnescapes2);
+        function unicodeSize(string) {
+          var result = reUnicode.lastIndex = 0;
+          while (reUnicode.test(string)) {
+            ++result;
           }
-          var ciphertext = createArray(plaintext.length);
-          var block2 = createArray(16);
-          for (var i3 = 0; i3 < plaintext.length; i3 += 16) {
-            copyArray(plaintext, block2, 0, i3, i3 + 16);
-            for (var j2 = 0; j2 < 16; j2++) {
-              block2[j2] ^= this._lastCipherblock[j2];
+          return result;
+        }
+        function unicodeToArray(string) {
+          return string.match(reUnicode) || [];
+        }
+        function unicodeWords(string) {
+          return string.match(reUnicodeWord) || [];
+        }
+        var runInContext = function runInContext2(context) {
+          context = context == null ? root3 : _2.defaults(root3.Object(), context, _2.pick(root3, contextProps));
+          var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError;
+          var arrayProto2 = Array2.prototype, funcProto3 = Function2.prototype, objectProto13 = Object2.prototype;
+          var coreJsData2 = context["__core-js_shared__"];
+          var funcToString3 = funcProto3.toString;
+          var hasOwnProperty10 = objectProto13.hasOwnProperty;
+          var idCounter = 0;
+          var maskSrcKey2 = function() {
+            var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || "");
+            return uid ? "Symbol(src)_1." + uid : "";
+          }();
+          var nativeObjectToString3 = objectProto13.toString;
+          var objectCtorString = funcToString3.call(Object2);
+          var oldDash = root3._;
+          var reIsNative2 = RegExp2(
+            "^" + funcToString3.call(hasOwnProperty10).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
+          );
+          var Buffer3 = moduleExports3 ? context.Buffer : undefined2, Symbol3 = context.Symbol, Uint8Array3 = context.Uint8Array, allocUnsafe = Buffer3 ? Buffer3.allocUnsafe : undefined2, getPrototype = overArg2(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable3 = objectProto13.propertyIsEnumerable, splice2 = arrayProto2.splice, spreadableSymbol = Symbol3 ? Symbol3.isConcatSpreadable : undefined2, symIterator = Symbol3 ? Symbol3.iterator : undefined2, symToStringTag3 = Symbol3 ? Symbol3.toStringTag : undefined2;
+          var defineProperty = function() {
+            try {
+              var func = getNative2(Object2, "defineProperty");
+              func({}, "", {});
+              return func;
+            } catch (e3) {
             }
-            this._lastCipherblock = this._aes.encrypt(block2);
-            copyArray(this._lastCipherblock, ciphertext, i3);
-          }
-          return ciphertext;
-        };
-        ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {
-          ciphertext = coerceArray(ciphertext);
-          if (ciphertext.length % 16 !== 0) {
-            throw new Error("invalid ciphertext size (must be multiple of 16 bytes)");
+          }();
+          var ctxClearTimeout = context.clearTimeout !== root3.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root3.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root3.setTimeout && context.setTimeout;
+          var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols2 = Object2.getOwnPropertySymbols, nativeIsBuffer2 = Buffer3 ? Buffer3.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto2.join, nativeKeys2 = overArg2(Object2.keys, Object2), nativeMax2 = Math2.max, nativeMin2 = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto2.reverse;
+          var DataView3 = getNative2(context, "DataView"), Map3 = getNative2(context, "Map"), Promise3 = getNative2(context, "Promise"), Set3 = getNative2(context, "Set"), WeakMap2 = getNative2(context, "WeakMap"), nativeCreate2 = getNative2(Object2, "create");
+          var metaMap = WeakMap2 && new WeakMap2();
+          var realNames = {};
+          var dataViewCtorString2 = toSource2(DataView3), mapCtorString2 = toSource2(Map3), promiseCtorString2 = toSource2(Promise3), setCtorString2 = toSource2(Set3), weakMapCtorString2 = toSource2(WeakMap2);
+          var symbolProto3 = Symbol3 ? Symbol3.prototype : undefined2, symbolValueOf2 = symbolProto3 ? symbolProto3.valueOf : undefined2, symbolToString2 = symbolProto3 ? symbolProto3.toString : undefined2;
+          function lodash(value) {
+            if (isObjectLike2(value) && !isArray2(value) && !(value instanceof LazyWrapper)) {
+              if (value instanceof LodashWrapper) {
+                return value;
+              }
+              if (hasOwnProperty10.call(value, "__wrapped__")) {
+                return wrapperClone(value);
+              }
+            }
+            return new LodashWrapper(value);
           }
-          var plaintext = createArray(ciphertext.length);
-          var block2 = createArray(16);
-          for (var i3 = 0; i3 < ciphertext.length; i3 += 16) {
-            copyArray(ciphertext, block2, 0, i3, i3 + 16);
-            block2 = this._aes.decrypt(block2);
-            for (var j2 = 0; j2 < 16; j2++) {
-              plaintext[i3 + j2] = block2[j2] ^ this._lastCipherblock[j2];
+          var baseCreate = /* @__PURE__ */ function() {
+            function object() {
             }
-            copyArray(ciphertext, this._lastCipherblock, 0, i3, i3 + 16);
+            return function(proto) {
+              if (!isObject2(proto)) {
+                return {};
+              }
+              if (objectCreate) {
+                return objectCreate(proto);
+              }
+              object.prototype = proto;
+              var result2 = new object();
+              object.prototype = undefined2;
+              return result2;
+            };
+          }();
+          function baseLodash() {
           }
-          return plaintext;
-        };
-        var ModeOfOperationCFB = function(key, iv, segmentSize) {
-          if (!(this instanceof ModeOfOperationCFB)) {
-            throw Error("AES must be instanitated with `new`");
+          function LodashWrapper(value, chainAll) {
+            this.__wrapped__ = value;
+            this.__actions__ = [];
+            this.__chain__ = !!chainAll;
+            this.__index__ = 0;
+            this.__values__ = undefined2;
           }
-          this.description = "Cipher Feedback";
-          this.name = "cfb";
-          if (!iv) {
-            iv = createArray(16);
-          } else if (iv.length != 16) {
-            throw new Error("invalid initialation vector size (must be 16 size)");
-          }
-          if (!segmentSize) {
-            segmentSize = 1;
+          lodash.templateSettings = {
+            /**
+             * Used to detect `data` property values to be HTML-escaped.
+             *
+             * @memberOf _.templateSettings
+             * @type {RegExp}
+             */
+            "escape": reEscape,
+            /**
+             * Used to detect code to be evaluated.
+             *
+             * @memberOf _.templateSettings
+             * @type {RegExp}
+             */
+            "evaluate": reEvaluate,
+            /**
+             * Used to detect `data` property values to inject.
+             *
+             * @memberOf _.templateSettings
+             * @type {RegExp}
+             */
+            "interpolate": reInterpolate,
+            /**
+             * Used to reference the data object in the template text.
+             *
+             * @memberOf _.templateSettings
+             * @type {string}
+             */
+            "variable": "",
+            /**
+             * Used to import variables into the compiled template.
+             *
+             * @memberOf _.templateSettings
+             * @type {Object}
+             */
+            "imports": {
+              /**
+               * A reference to the `lodash` function.
+               *
+               * @memberOf _.templateSettings.imports
+               * @type {Function}
+               */
+              "_": lodash
+            }
+          };
+          lodash.prototype = baseLodash.prototype;
+          lodash.prototype.constructor = lodash;
+          LodashWrapper.prototype = baseCreate(baseLodash.prototype);
+          LodashWrapper.prototype.constructor = LodashWrapper;
+          function LazyWrapper(value) {
+            this.__wrapped__ = value;
+            this.__actions__ = [];
+            this.__dir__ = 1;
+            this.__filtered__ = false;
+            this.__iteratees__ = [];
+            this.__takeCount__ = MAX_ARRAY_LENGTH;
+            this.__views__ = [];
           }
-          this.segmentSize = segmentSize;
-          this._shiftRegister = coerceArray(iv, true);
-          this._aes = new AES(key);
-        };
-        ModeOfOperationCFB.prototype.encrypt = function(plaintext) {
-          if (plaintext.length % this.segmentSize != 0) {
-            throw new Error("invalid plaintext size (must be segmentSize bytes)");
+          function lazyClone() {
+            var result2 = new LazyWrapper(this.__wrapped__);
+            result2.__actions__ = copyArray(this.__actions__);
+            result2.__dir__ = this.__dir__;
+            result2.__filtered__ = this.__filtered__;
+            result2.__iteratees__ = copyArray(this.__iteratees__);
+            result2.__takeCount__ = this.__takeCount__;
+            result2.__views__ = copyArray(this.__views__);
+            return result2;
           }
-          var encrypted = coerceArray(plaintext, true);
-          var xorSegment;
-          for (var i3 = 0; i3 < encrypted.length; i3 += this.segmentSize) {
-            xorSegment = this._aes.encrypt(this._shiftRegister);
-            for (var j2 = 0; j2 < this.segmentSize; j2++) {
-              encrypted[i3 + j2] ^= xorSegment[j2];
+          function lazyReverse() {
+            if (this.__filtered__) {
+              var result2 = new LazyWrapper(this);
+              result2.__dir__ = -1;
+              result2.__filtered__ = true;
+            } else {
+              result2 = this.clone();
+              result2.__dir__ *= -1;
             }
-            copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
-            copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i3, i3 + this.segmentSize);
+            return result2;
           }
-          return encrypted;
-        };
-        ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {
-          if (ciphertext.length % this.segmentSize != 0) {
-            throw new Error("invalid ciphertext size (must be segmentSize bytes)");
+          function lazyValue() {
+            var array2 = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array2), isRight = dir < 0, arrLength = isArr ? array2.length : 0, view = getView(0, arrLength, this.__views__), start2 = view.start, end = view.end, length2 = end - start2, index = isRight ? end : start2 - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin2(length2, this.__takeCount__);
+            if (!isArr || !isRight && arrLength == length2 && takeCount == length2) {
+              return baseWrapperValue(array2, this.__actions__);
+            }
+            var result2 = [];
+            outer:
+              while (length2-- && resIndex < takeCount) {
+                index += dir;
+                var iterIndex = -1, value = array2[index];
+                while (++iterIndex < iterLength) {
+                  var data = iteratees[iterIndex], iteratee2 = data.iteratee, type2 = data.type, computed = iteratee2(value);
+                  if (type2 == LAZY_MAP_FLAG) {
+                    value = computed;
+                  } else if (!computed) {
+                    if (type2 == LAZY_FILTER_FLAG) {
+                      continue outer;
+                    } else {
+                      break outer;
+                    }
+                  }
+                }
+                result2[resIndex++] = value;
+              }
+            return result2;
           }
-          var plaintext = coerceArray(ciphertext, true);
-          var xorSegment;
-          for (var i3 = 0; i3 < plaintext.length; i3 += this.segmentSize) {
-            xorSegment = this._aes.encrypt(this._shiftRegister);
-            for (var j2 = 0; j2 < this.segmentSize; j2++) {
-              plaintext[i3 + j2] ^= xorSegment[j2];
+          LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+          LazyWrapper.prototype.constructor = LazyWrapper;
+          function Hash2(entries) {
+            var index = -1, length2 = entries == null ? 0 : entries.length;
+            this.clear();
+            while (++index < length2) {
+              var entry = entries[index];
+              this.set(entry[0], entry[1]);
             }
-            copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
-            copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i3, i3 + this.segmentSize);
           }
-          return plaintext;
-        };
-        var ModeOfOperationOFB = function(key, iv) {
-          if (!(this instanceof ModeOfOperationOFB)) {
-            throw Error("AES must be instanitated with `new`");
+          function hashClear2() {
+            this.__data__ = nativeCreate2 ? nativeCreate2(null) : {};
+            this.size = 0;
           }
-          this.description = "Output Feedback";
-          this.name = "ofb";
-          if (!iv) {
-            iv = createArray(16);
-          } else if (iv.length != 16) {
-            throw new Error("invalid initialation vector size (must be 16 bytes)");
+          function hashDelete2(key) {
+            var result2 = this.has(key) && delete this.__data__[key];
+            this.size -= result2 ? 1 : 0;
+            return result2;
           }
-          this._lastPrecipher = coerceArray(iv, true);
-          this._lastPrecipherIndex = 16;
-          this._aes = new AES(key);
-        };
-        ModeOfOperationOFB.prototype.encrypt = function(plaintext) {
-          var encrypted = coerceArray(plaintext, true);
-          for (var i3 = 0; i3 < encrypted.length; i3++) {
-            if (this._lastPrecipherIndex === 16) {
-              this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);
-              this._lastPrecipherIndex = 0;
+          function hashGet2(key) {
+            var data = this.__data__;
+            if (nativeCreate2) {
+              var result2 = data[key];
+              return result2 === HASH_UNDEFINED4 ? undefined2 : result2;
             }
-            encrypted[i3] ^= this._lastPrecipher[this._lastPrecipherIndex++];
+            return hasOwnProperty10.call(data, key) ? data[key] : undefined2;
           }
-          return encrypted;
-        };
-        ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;
-        var Counter = function(initialValue) {
-          if (!(this instanceof Counter)) {
-            throw Error("Counter must be instanitated with `new`");
+          function hashHas2(key) {
+            var data = this.__data__;
+            return nativeCreate2 ? data[key] !== undefined2 : hasOwnProperty10.call(data, key);
           }
-          if (initialValue !== 0 && !initialValue) {
-            initialValue = 1;
+          function hashSet2(key, value) {
+            var data = this.__data__;
+            this.size += this.has(key) ? 0 : 1;
+            data[key] = nativeCreate2 && value === undefined2 ? HASH_UNDEFINED4 : value;
+            return this;
           }
-          if (typeof initialValue === "number") {
-            this._counter = createArray(16);
-            this.setValue(initialValue);
-          } else {
-            this.setBytes(initialValue);
+          Hash2.prototype.clear = hashClear2;
+          Hash2.prototype["delete"] = hashDelete2;
+          Hash2.prototype.get = hashGet2;
+          Hash2.prototype.has = hashHas2;
+          Hash2.prototype.set = hashSet2;
+          function ListCache2(entries) {
+            var index = -1, length2 = entries == null ? 0 : entries.length;
+            this.clear();
+            while (++index < length2) {
+              var entry = entries[index];
+              this.set(entry[0], entry[1]);
+            }
           }
-        };
-        Counter.prototype.setValue = function(value) {
-          if (typeof value !== "number" || parseInt(value) != value) {
-            throw new Error("invalid counter value (must be an integer)");
+          function listCacheClear2() {
+            this.__data__ = [];
+            this.size = 0;
           }
-          if (value > Number.MAX_SAFE_INTEGER) {
-            throw new Error("integer value out of safe range");
+          function listCacheDelete2(key) {
+            var data = this.__data__, index = assocIndexOf2(data, key);
+            if (index < 0) {
+              return false;
+            }
+            var lastIndex = data.length - 1;
+            if (index == lastIndex) {
+              data.pop();
+            } else {
+              splice2.call(data, index, 1);
+            }
+            --this.size;
+            return true;
           }
-          for (var index = 15; index >= 0; --index) {
-            this._counter[index] = value % 256;
-            value = parseInt(value / 256);
+          function listCacheGet2(key) {
+            var data = this.__data__, index = assocIndexOf2(data, key);
+            return index < 0 ? undefined2 : data[index][1];
           }
-        };
-        Counter.prototype.setBytes = function(bytes) {
-          bytes = coerceArray(bytes, true);
-          if (bytes.length != 16) {
-            throw new Error("invalid counter bytes size (must be 16 bytes)");
+          function listCacheHas2(key) {
+            return assocIndexOf2(this.__data__, key) > -1;
           }
-          this._counter = bytes;
-        };
-        Counter.prototype.increment = function() {
-          for (var i3 = 15; i3 >= 0; i3--) {
-            if (this._counter[i3] === 255) {
-              this._counter[i3] = 0;
+          function listCacheSet2(key, value) {
+            var data = this.__data__, index = assocIndexOf2(data, key);
+            if (index < 0) {
+              ++this.size;
+              data.push([key, value]);
             } else {
-              this._counter[i3]++;
-              break;
+              data[index][1] = value;
             }
+            return this;
           }
-        };
-        var ModeOfOperationCTR = function(key, counter) {
-          if (!(this instanceof ModeOfOperationCTR)) {
-            throw Error("AES must be instanitated with `new`");
+          ListCache2.prototype.clear = listCacheClear2;
+          ListCache2.prototype["delete"] = listCacheDelete2;
+          ListCache2.prototype.get = listCacheGet2;
+          ListCache2.prototype.has = listCacheHas2;
+          ListCache2.prototype.set = listCacheSet2;
+          function MapCache2(entries) {
+            var index = -1, length2 = entries == null ? 0 : entries.length;
+            this.clear();
+            while (++index < length2) {
+              var entry = entries[index];
+              this.set(entry[0], entry[1]);
+            }
           }
-          this.description = "Counter";
-          this.name = "ctr";
-          if (!(counter instanceof Counter)) {
-            counter = new Counter(counter);
+          function mapCacheClear2() {
+            this.size = 0;
+            this.__data__ = {
+              "hash": new Hash2(),
+              "map": new (Map3 || ListCache2)(),
+              "string": new Hash2()
+            };
           }
-          this._counter = counter;
-          this._remainingCounter = null;
-          this._remainingCounterIndex = 16;
-          this._aes = new AES(key);
-        };
-        ModeOfOperationCTR.prototype.encrypt = function(plaintext) {
-          var encrypted = coerceArray(plaintext, true);
-          for (var i3 = 0; i3 < encrypted.length; i3++) {
-            if (this._remainingCounterIndex === 16) {
-              this._remainingCounter = this._aes.encrypt(this._counter._counter);
-              this._remainingCounterIndex = 0;
-              this._counter.increment();
+          function mapCacheDelete2(key) {
+            var result2 = getMapData2(this, key)["delete"](key);
+            this.size -= result2 ? 1 : 0;
+            return result2;
+          }
+          function mapCacheGet2(key) {
+            return getMapData2(this, key).get(key);
+          }
+          function mapCacheHas2(key) {
+            return getMapData2(this, key).has(key);
+          }
+          function mapCacheSet2(key, value) {
+            var data = getMapData2(this, key), size2 = data.size;
+            data.set(key, value);
+            this.size += data.size == size2 ? 0 : 1;
+            return this;
+          }
+          MapCache2.prototype.clear = mapCacheClear2;
+          MapCache2.prototype["delete"] = mapCacheDelete2;
+          MapCache2.prototype.get = mapCacheGet2;
+          MapCache2.prototype.has = mapCacheHas2;
+          MapCache2.prototype.set = mapCacheSet2;
+          function SetCache2(values2) {
+            var index = -1, length2 = values2 == null ? 0 : values2.length;
+            this.__data__ = new MapCache2();
+            while (++index < length2) {
+              this.add(values2[index]);
             }
-            encrypted[i3] ^= this._remainingCounter[this._remainingCounterIndex++];
           }
-          return encrypted;
-        };
-        ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;
-        function pkcs7pad(data) {
-          data = coerceArray(data, true);
-          var padder = 16 - data.length % 16;
-          var result = createArray(data.length + padder);
-          copyArray(data, result);
-          for (var i3 = data.length; i3 < result.length; i3++) {
-            result[i3] = padder;
+          function setCacheAdd2(value) {
+            this.__data__.set(value, HASH_UNDEFINED4);
+            return this;
           }
-          return result;
-        }
-        function pkcs7strip(data) {
-          data = coerceArray(data, true);
-          if (data.length < 16) {
-            throw new Error("PKCS#7 invalid length");
+          function setCacheHas2(value) {
+            return this.__data__.has(value);
           }
-          var padder = data[data.length - 1];
-          if (padder > 16) {
-            throw new Error("PKCS#7 padding byte out of range");
+          SetCache2.prototype.add = SetCache2.prototype.push = setCacheAdd2;
+          SetCache2.prototype.has = setCacheHas2;
+          function Stack2(entries) {
+            var data = this.__data__ = new ListCache2(entries);
+            this.size = data.size;
           }
-          var length2 = data.length - padder;
-          for (var i3 = 0; i3 < padder; i3++) {
-            if (data[length2 + i3] !== padder) {
-              throw new Error("PKCS#7 invalid padding byte");
+          function stackClear2() {
+            this.__data__ = new ListCache2();
+            this.size = 0;
+          }
+          function stackDelete2(key) {
+            var data = this.__data__, result2 = data["delete"](key);
+            this.size = data.size;
+            return result2;
+          }
+          function stackGet2(key) {
+            return this.__data__.get(key);
+          }
+          function stackHas2(key) {
+            return this.__data__.has(key);
+          }
+          function stackSet2(key, value) {
+            var data = this.__data__;
+            if (data instanceof ListCache2) {
+              var pairs2 = data.__data__;
+              if (!Map3 || pairs2.length < LARGE_ARRAY_SIZE2 - 1) {
+                pairs2.push([key, value]);
+                this.size = ++data.size;
+                return this;
+              }
+              data = this.__data__ = new MapCache2(pairs2);
             }
+            data.set(key, value);
+            this.size = data.size;
+            return this;
           }
-          var result = createArray(length2);
-          copyArray(data, result, 0, 0, length2);
-          return result;
-        }
-        var aesjs2 = {
-          AES,
-          Counter,
-          ModeOfOperation: {
-            ecb: ModeOfOperationECB,
-            cbc: ModeOfOperationCBC,
-            cfb: ModeOfOperationCFB,
-            ofb: ModeOfOperationOFB,
-            ctr: ModeOfOperationCTR
-          },
-          utils: {
-            hex: convertHex,
-            utf8: convertUtf8
-          },
-          padding: {
-            pkcs7: {
-              pad: pkcs7pad,
-              strip: pkcs7strip
+          Stack2.prototype.clear = stackClear2;
+          Stack2.prototype["delete"] = stackDelete2;
+          Stack2.prototype.get = stackGet2;
+          Stack2.prototype.has = stackHas2;
+          Stack2.prototype.set = stackSet2;
+          function arrayLikeKeys2(value, inherited) {
+            var isArr = isArray2(value), isArg = !isArr && isArguments2(value), isBuff = !isArr && !isArg && isBuffer2(value), isType = !isArr && !isArg && !isBuff && isTypedArray2(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes2(value.length, String2) : [], length2 = result2.length;
+            for (var key in value) {
+              if ((inherited || hasOwnProperty10.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
+              (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
+              isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
+              isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
+              isIndex2(key, length2)))) {
+                result2.push(key);
+              }
             }
-          },
-          _arrayTest: {
-            coerceArray,
-            createArray,
-            copyArray
+            return result2;
           }
-        };
-        if (typeof exports2 !== "undefined") {
-          module2.exports = aesjs2;
-        } else if (typeof define === "function" && define.amd) {
-          define([], function() {
-            return aesjs2;
-          });
-        } else {
-          if (root3.aesjs) {
-            aesjs2._aesjs = root3.aesjs;
+          function arraySample(array2) {
+            var length2 = array2.length;
+            return length2 ? array2[baseRandom(0, length2 - 1)] : undefined2;
           }
-          root3.aesjs = aesjs2;
-        }
-      })(exports2);
-    }
-  });
-
-  // node_modules/lodash/lodash.js
-  var require_lodash = __commonJS({
-    "node_modules/lodash/lodash.js"(exports2, module2) {
-      (function() {
-        var undefined2;
-        var VERSION = "4.17.21";
-        var LARGE_ARRAY_SIZE2 = 200;
-        var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT3 = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
-        var HASH_UNDEFINED4 = "__lodash_hash_undefined__";
-        var MAX_MEMOIZE_SIZE = 500;
-        var PLACEHOLDER = "__lodash_placeholder__";
-        var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
-        var COMPARE_PARTIAL_FLAG5 = 1, COMPARE_UNORDERED_FLAG3 = 2;
-        var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512;
-        var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...";
-        var HOT_COUNT = 800, HOT_SPAN = 16;
-        var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3;
-        var INFINITY2 = 1 / 0, MAX_SAFE_INTEGER4 = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN2 = 0 / 0;
-        var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
-        var wrapFlags = [
-          ["ary", WRAP_ARY_FLAG],
-          ["bind", WRAP_BIND_FLAG],
-          ["bindKey", WRAP_BIND_KEY_FLAG],
-          ["curry", WRAP_CURRY_FLAG],
-          ["curryRight", WRAP_CURRY_RIGHT_FLAG],
-          ["flip", WRAP_FLIP_FLAG],
-          ["partial", WRAP_PARTIAL_FLAG],
-          ["partialRight", WRAP_PARTIAL_RIGHT_FLAG],
-          ["rearg", WRAP_REARG_FLAG]
-        ];
-        var argsTag4 = "[object Arguments]", arrayTag3 = "[object Array]", asyncTag2 = "[object AsyncFunction]", boolTag3 = "[object Boolean]", dateTag3 = "[object Date]", domExcTag = "[object DOMException]", errorTag3 = "[object Error]", funcTag3 = "[object Function]", genTag2 = "[object GeneratorFunction]", mapTag4 = "[object Map]", numberTag4 = "[object Number]", nullTag2 = "[object Null]", objectTag4 = "[object Object]", promiseTag2 = "[object Promise]", proxyTag2 = "[object Proxy]", regexpTag3 = "[object RegExp]", setTag4 = "[object Set]", stringTag3 = "[object String]", symbolTag3 = "[object Symbol]", undefinedTag2 = "[object Undefined]", weakMapTag3 = "[object WeakMap]", weakSetTag = "[object WeakSet]";
-        var arrayBufferTag3 = "[object ArrayBuffer]", dataViewTag4 = "[object DataView]", float32Tag2 = "[object Float32Array]", float64Tag2 = "[object Float64Array]", int8Tag2 = "[object Int8Array]", int16Tag2 = "[object Int16Array]", int32Tag2 = "[object Int32Array]", uint8Tag2 = "[object Uint8Array]", uint8ClampedTag2 = "[object Uint8ClampedArray]", uint16Tag2 = "[object Uint16Array]", uint32Tag2 = "[object Uint32Array]";
-        var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
-        var reEscapedHtml2 = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml2 = /[&<>"']/g, reHasEscapedHtml2 = RegExp(reEscapedHtml2.source), reHasUnescapedHtml2 = RegExp(reUnescapedHtml2.source);
-        var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g;
-        var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-        var reRegExpChar2 = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar2.source);
-        var reTrimStart2 = /^\s+/;
-        var reWhitespace2 = /\s/;
-        var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /;
-        var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
-        var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
-        var reEscapeChar = /\\(\\)?/g;
-        var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
-        var reFlags = /\w*$/;
-        var reIsBadHex2 = /^[-+]0x[0-9a-f]+$/i;
-        var reIsBinary2 = /^0b[01]+$/i;
-        var reIsHostCtor2 = /^\[object .+?Constructor\]$/;
-        var reIsOctal2 = /^0o[0-7]+$/i;
-        var reIsUint2 = /^(?:0|[1-9]\d*)$/;
-        var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
-        var reNoMatch = /($^)/;
-        var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
-        var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
-        var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d";
-        var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
-        var reApos = RegExp(rsApos, "g");
-        var reComboMark = RegExp(rsCombo, "g");
-        var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
-        var reUnicodeWord = RegExp([
-          rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")",
-          rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")",
-          rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower,
-          rsUpper + "+" + rsOptContrUpper,
-          rsOrdUpper,
-          rsOrdLower,
-          rsDigits,
-          rsEmoji
-        ].join("|"), "g");
-        var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
-        var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
-        var contextProps = [
-          "Array",
-          "Buffer",
-          "DataView",
-          "Date",
-          "Error",
-          "Float32Array",
-          "Float64Array",
-          "Function",
-          "Int8Array",
-          "Int16Array",
-          "Int32Array",
-          "Map",
-          "Math",
-          "Object",
-          "Promise",
-          "RegExp",
-          "Set",
-          "String",
-          "Symbol",
-          "TypeError",
-          "Uint8Array",
-          "Uint8ClampedArray",
-          "Uint16Array",
-          "Uint32Array",
-          "WeakMap",
-          "_",
-          "clearTimeout",
-          "isFinite",
-          "parseInt",
-          "setTimeout"
-        ];
-        var templateCounter = -1;
-        var typedArrayTags2 = {};
-        typedArrayTags2[float32Tag2] = typedArrayTags2[float64Tag2] = typedArrayTags2[int8Tag2] = typedArrayTags2[int16Tag2] = typedArrayTags2[int32Tag2] = typedArrayTags2[uint8Tag2] = typedArrayTags2[uint8ClampedTag2] = typedArrayTags2[uint16Tag2] = typedArrayTags2[uint32Tag2] = true;
-        typedArrayTags2[argsTag4] = typedArrayTags2[arrayTag3] = typedArrayTags2[arrayBufferTag3] = typedArrayTags2[boolTag3] = typedArrayTags2[dataViewTag4] = typedArrayTags2[dateTag3] = typedArrayTags2[errorTag3] = typedArrayTags2[funcTag3] = typedArrayTags2[mapTag4] = typedArrayTags2[numberTag4] = typedArrayTags2[objectTag4] = typedArrayTags2[regexpTag3] = typedArrayTags2[setTag4] = typedArrayTags2[stringTag3] = typedArrayTags2[weakMapTag3] = false;
-        var cloneableTags = {};
-        cloneableTags[argsTag4] = cloneableTags[arrayTag3] = cloneableTags[arrayBufferTag3] = cloneableTags[dataViewTag4] = cloneableTags[boolTag3] = cloneableTags[dateTag3] = cloneableTags[float32Tag2] = cloneableTags[float64Tag2] = cloneableTags[int8Tag2] = cloneableTags[int16Tag2] = cloneableTags[int32Tag2] = cloneableTags[mapTag4] = cloneableTags[numberTag4] = cloneableTags[objectTag4] = cloneableTags[regexpTag3] = cloneableTags[setTag4] = cloneableTags[stringTag3] = cloneableTags[symbolTag3] = cloneableTags[uint8Tag2] = cloneableTags[uint8ClampedTag2] = cloneableTags[uint16Tag2] = cloneableTags[uint32Tag2] = true;
-        cloneableTags[errorTag3] = cloneableTags[funcTag3] = cloneableTags[weakMapTag3] = false;
-        var deburredLetters = {
-          // Latin-1 Supplement block.
-          "\xC0": "A",
-          "\xC1": "A",
-          "\xC2": "A",
-          "\xC3": "A",
-          "\xC4": "A",
-          "\xC5": "A",
-          "\xE0": "a",
-          "\xE1": "a",
-          "\xE2": "a",
-          "\xE3": "a",
-          "\xE4": "a",
-          "\xE5": "a",
-          "\xC7": "C",
-          "\xE7": "c",
-          "\xD0": "D",
-          "\xF0": "d",
-          "\xC8": "E",
-          "\xC9": "E",
-          "\xCA": "E",
-          "\xCB": "E",
-          "\xE8": "e",
-          "\xE9": "e",
-          "\xEA": "e",
-          "\xEB": "e",
-          "\xCC": "I",
-          "\xCD": "I",
-          "\xCE": "I",
-          "\xCF": "I",
-          "\xEC": "i",
-          "\xED": "i",
-          "\xEE": "i",
-          "\xEF": "i",
-          "\xD1": "N",
-          "\xF1": "n",
-          "\xD2": "O",
-          "\xD3": "O",
-          "\xD4": "O",
-          "\xD5": "O",
-          "\xD6": "O",
-          "\xD8": "O",
-          "\xF2": "o",
-          "\xF3": "o",
-          "\xF4": "o",
-          "\xF5": "o",
-          "\xF6": "o",
-          "\xF8": "o",
-          "\xD9": "U",
-          "\xDA": "U",
-          "\xDB": "U",
-          "\xDC": "U",
-          "\xF9": "u",
-          "\xFA": "u",
-          "\xFB": "u",
-          "\xFC": "u",
-          "\xDD": "Y",
-          "\xFD": "y",
-          "\xFF": "y",
-          "\xC6": "Ae",
-          "\xE6": "ae",
-          "\xDE": "Th",
-          "\xFE": "th",
-          "\xDF": "ss",
-          // Latin Extended-A block.
-          "\u0100": "A",
-          "\u0102": "A",
-          "\u0104": "A",
-          "\u0101": "a",
-          "\u0103": "a",
-          "\u0105": "a",
-          "\u0106": "C",
-          "\u0108": "C",
-          "\u010A": "C",
-          "\u010C": "C",
-          "\u0107": "c",
-          "\u0109": "c",
-          "\u010B": "c",
-          "\u010D": "c",
-          "\u010E": "D",
-          "\u0110": "D",
-          "\u010F": "d",
-          "\u0111": "d",
-          "\u0112": "E",
-          "\u0114": "E",
-          "\u0116": "E",
-          "\u0118": "E",
-          "\u011A": "E",
-          "\u0113": "e",
-          "\u0115": "e",
-          "\u0117": "e",
-          "\u0119": "e",
-          "\u011B": "e",
-          "\u011C": "G",
-          "\u011E": "G",
-          "\u0120": "G",
-          "\u0122": "G",
-          "\u011D": "g",
-          "\u011F": "g",
-          "\u0121": "g",
-          "\u0123": "g",
-          "\u0124": "H",
-          "\u0126": "H",
-          "\u0125": "h",
-          "\u0127": "h",
-          "\u0128": "I",
-          "\u012A": "I",
-          "\u012C": "I",
-          "\u012E": "I",
-          "\u0130": "I",
-          "\u0129": "i",
-          "\u012B": "i",
-          "\u012D": "i",
-          "\u012F": "i",
-          "\u0131": "i",
-          "\u0134": "J",
-          "\u0135": "j",
-          "\u0136": "K",
-          "\u0137": "k",
-          "\u0138": "k",
-          "\u0139": "L",
-          "\u013B": "L",
-          "\u013D": "L",
-          "\u013F": "L",
-          "\u0141": "L",
-          "\u013A": "l",
-          "\u013C": "l",
-          "\u013E": "l",
-          "\u0140": "l",
-          "\u0142": "l",
-          "\u0143": "N",
-          "\u0145": "N",
-          "\u0147": "N",
-          "\u014A": "N",
-          "\u0144": "n",
-          "\u0146": "n",
-          "\u0148": "n",
-          "\u014B": "n",
-          "\u014C": "O",
-          "\u014E": "O",
-          "\u0150": "O",
-          "\u014D": "o",
-          "\u014F": "o",
-          "\u0151": "o",
-          "\u0154": "R",
-          "\u0156": "R",
-          "\u0158": "R",
-          "\u0155": "r",
-          "\u0157": "r",
-          "\u0159": "r",
-          "\u015A": "S",
-          "\u015C": "S",
-          "\u015E": "S",
-          "\u0160": "S",
-          "\u015B": "s",
-          "\u015D": "s",
-          "\u015F": "s",
-          "\u0161": "s",
-          "\u0162": "T",
-          "\u0164": "T",
-          "\u0166": "T",
-          "\u0163": "t",
-          "\u0165": "t",
-          "\u0167": "t",
-          "\u0168": "U",
-          "\u016A": "U",
-          "\u016C": "U",
-          "\u016E": "U",
-          "\u0170": "U",
-          "\u0172": "U",
-          "\u0169": "u",
-          "\u016B": "u",
-          "\u016D": "u",
-          "\u016F": "u",
-          "\u0171": "u",
-          "\u0173": "u",
-          "\u0174": "W",
-          "\u0175": "w",
-          "\u0176": "Y",
-          "\u0177": "y",
-          "\u0178": "Y",
-          "\u0179": "Z",
-          "\u017B": "Z",
-          "\u017D": "Z",
-          "\u017A": "z",
-          "\u017C": "z",
-          "\u017E": "z",
-          "\u0132": "IJ",
-          "\u0133": "ij",
-          "\u0152": "Oe",
-          "\u0153": "oe",
-          "\u0149": "'n",
-          "\u017F": "s"
-        };
-        var htmlEscapes2 = {
-          "&": "&amp;",
-          "<": "&lt;",
-          ">": "&gt;",
-          '"': "&quot;",
-          "'": "&#39;"
-        };
-        var htmlUnescapes2 = {
-          "&amp;": "&",
-          "&lt;": "<",
-          "&gt;": ">",
-          "&quot;": '"',
-          "&#39;": "'"
-        };
-        var stringEscapes = {
-          "\\": "\\",
-          "'": "'",
-          "\n": "n",
-          "\r": "r",
-          "\u2028": "u2028",
-          "\u2029": "u2029"
-        };
-        var freeParseFloat = parseFloat, freeParseInt2 = parseInt;
-        var freeGlobal2 = typeof global == "object" && global && global.Object === Object && global;
-        var freeSelf2 = typeof self == "object" && self && self.Object === Object && self;
-        var root3 = freeGlobal2 || freeSelf2 || Function("return this")();
-        var freeExports3 = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2;
-        var freeModule3 = freeExports3 && typeof module2 == "object" && module2 && !module2.nodeType && module2;
-        var moduleExports3 = freeModule3 && freeModule3.exports === freeExports3;
-        var freeProcess2 = moduleExports3 && freeGlobal2.process;
-        var nodeUtil2 = function() {
-          try {
-            var types = freeModule3 && freeModule3.require && freeModule3.require("util").types;
-            if (types) {
-              return types;
-            }
-            return freeProcess2 && freeProcess2.binding && freeProcess2.binding("util");
-          } catch (e3) {
-          }
-        }();
-        var nodeIsArrayBuffer = nodeUtil2 && nodeUtil2.isArrayBuffer, nodeIsDate = nodeUtil2 && nodeUtil2.isDate, nodeIsMap = nodeUtil2 && nodeUtil2.isMap, nodeIsRegExp = nodeUtil2 && nodeUtil2.isRegExp, nodeIsSet = nodeUtil2 && nodeUtil2.isSet, nodeIsTypedArray2 = nodeUtil2 && nodeUtil2.isTypedArray;
-        function apply(func, thisArg, args) {
-          switch (args.length) {
-            case 0:
-              return func.call(thisArg);
-            case 1:
-              return func.call(thisArg, args[0]);
-            case 2:
-              return func.call(thisArg, args[0], args[1]);
-            case 3:
-              return func.call(thisArg, args[0], args[1], args[2]);
-          }
-          return func.apply(thisArg, args);
-        }
-        function arrayAggregator(array2, setter, iteratee, accumulator) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length;
-          while (++index < length2) {
-            var value = array2[index];
-            setter(accumulator, value, iteratee(value), array2);
-          }
-          return accumulator;
-        }
-        function arrayEach(array2, iteratee) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length;
-          while (++index < length2) {
-            if (iteratee(array2[index], index, array2) === false) {
-              break;
-            }
+          function arraySampleSize(array2, n3) {
+            return shuffleSelf(copyArray(array2), baseClamp(n3, 0, array2.length));
           }
-          return array2;
-        }
-        function arrayEachRight(array2, iteratee) {
-          var length2 = array2 == null ? 0 : array2.length;
-          while (length2--) {
-            if (iteratee(array2[length2], length2, array2) === false) {
-              break;
-            }
+          function arrayShuffle(array2) {
+            return shuffleSelf(copyArray(array2));
           }
-          return array2;
-        }
-        function arrayEvery(array2, predicate) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length;
-          while (++index < length2) {
-            if (!predicate(array2[index], index, array2)) {
-              return false;
+          function assignMergeValue(object, key, value) {
+            if (value !== undefined2 && !eq2(object[key], value) || value === undefined2 && !(key in object)) {
+              baseAssignValue(object, key, value);
             }
           }
-          return true;
-        }
-        function arrayFilter2(array2, predicate) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length, resIndex = 0, result = [];
-          while (++index < length2) {
-            var value = array2[index];
-            if (predicate(value, index, array2)) {
-              result[resIndex++] = value;
+          function assignValue(object, key, value) {
+            var objValue = object[key];
+            if (!(hasOwnProperty10.call(object, key) && eq2(objValue, value)) || value === undefined2 && !(key in object)) {
+              baseAssignValue(object, key, value);
             }
           }
-          return result;
-        }
-        function arrayIncludes(array2, value) {
-          var length2 = array2 == null ? 0 : array2.length;
-          return !!length2 && baseIndexOf(array2, value, 0) > -1;
-        }
-        function arrayIncludesWith(array2, value, comparator) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length;
-          while (++index < length2) {
-            if (comparator(value, array2[index])) {
-              return true;
+          function assocIndexOf2(array2, key) {
+            var length2 = array2.length;
+            while (length2--) {
+              if (eq2(array2[length2][0], key)) {
+                return length2;
+              }
             }
+            return -1;
           }
-          return false;
-        }
-        function arrayMap2(array2, iteratee) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length, result = Array(length2);
-          while (++index < length2) {
-            result[index] = iteratee(array2[index], index, array2);
-          }
-          return result;
-        }
-        function arrayPush2(array2, values) {
-          var index = -1, length2 = values.length, offset = array2.length;
-          while (++index < length2) {
-            array2[offset + index] = values[index];
-          }
-          return array2;
-        }
-        function arrayReduce(array2, iteratee, accumulator, initAccum) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length;
-          if (initAccum && length2) {
-            accumulator = array2[++index];
-          }
-          while (++index < length2) {
-            accumulator = iteratee(accumulator, array2[index], index, array2);
+          function baseAggregator(collection, setter, iteratee2, accumulator) {
+            baseEach(collection, function(value, key, collection2) {
+              setter(accumulator, value, iteratee2(value), collection2);
+            });
+            return accumulator;
           }
-          return accumulator;
-        }
-        function arrayReduceRight(array2, iteratee, accumulator, initAccum) {
-          var length2 = array2 == null ? 0 : array2.length;
-          if (initAccum && length2) {
-            accumulator = array2[--length2];
+          function baseAssign(object, source) {
+            return object && copyObject(source, keys2(source), object);
           }
-          while (length2--) {
-            accumulator = iteratee(accumulator, array2[length2], length2, array2);
+          function baseAssignIn(object, source) {
+            return object && copyObject(source, keysIn(source), object);
           }
-          return accumulator;
-        }
-        function arraySome2(array2, predicate) {
-          var index = -1, length2 = array2 == null ? 0 : array2.length;
-          while (++index < length2) {
-            if (predicate(array2[index], index, array2)) {
-              return true;
+          function baseAssignValue(object, key, value) {
+            if (key == "__proto__" && defineProperty) {
+              defineProperty(object, key, {
+                "configurable": true,
+                "enumerable": true,
+                "value": value,
+                "writable": true
+              });
+            } else {
+              object[key] = value;
             }
           }
-          return false;
-        }
-        var asciiSize = baseProperty("length");
-        function asciiToArray(string) {
-          return string.split("");
-        }
-        function asciiWords(string) {
-          return string.match(reAsciiWord) || [];
-        }
-        function baseFindKey(collection, predicate, eachFunc) {
-          var result;
-          eachFunc(collection, function(value, key, collection2) {
-            if (predicate(value, key, collection2)) {
-              result = key;
-              return false;
-            }
-          });
-          return result;
-        }
-        function baseFindIndex(array2, predicate, fromIndex, fromRight) {
-          var length2 = array2.length, index = fromIndex + (fromRight ? 1 : -1);
-          while (fromRight ? index-- : ++index < length2) {
-            if (predicate(array2[index], index, array2)) {
-              return index;
+          function baseAt(object, paths) {
+            var index = -1, length2 = paths.length, result2 = Array2(length2), skip = object == null;
+            while (++index < length2) {
+              result2[index] = skip ? undefined2 : get4(object, paths[index]);
             }
+            return result2;
           }
-          return -1;
-        }
-        function baseIndexOf(array2, value, fromIndex) {
-          return value === value ? strictIndexOf(array2, value, fromIndex) : baseFindIndex(array2, baseIsNaN, fromIndex);
-        }
-        function baseIndexOfWith(array2, value, fromIndex, comparator) {
-          var index = fromIndex - 1, length2 = array2.length;
-          while (++index < length2) {
-            if (comparator(array2[index], value)) {
-              return index;
+          function baseClamp(number3, lower2, upper) {
+            if (number3 === number3) {
+              if (upper !== undefined2) {
+                number3 = number3 <= upper ? number3 : upper;
+              }
+              if (lower2 !== undefined2) {
+                number3 = number3 >= lower2 ? number3 : lower2;
+              }
             }
+            return number3;
           }
-          return -1;
-        }
-        function baseIsNaN(value) {
-          return value !== value;
-        }
-        function baseMean(array2, iteratee) {
-          var length2 = array2 == null ? 0 : array2.length;
-          return length2 ? baseSum(array2, iteratee) / length2 : NAN2;
-        }
-        function baseProperty(key) {
-          return function(object) {
-            return object == null ? undefined2 : object[key];
-          };
-        }
-        function basePropertyOf2(object) {
-          return function(key) {
-            return object == null ? undefined2 : object[key];
-          };
-        }
-        function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
-          eachFunc(collection, function(value, index, collection2) {
-            accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2);
-          });
-          return accumulator;
-        }
-        function baseSortBy(array2, comparer) {
-          var length2 = array2.length;
-          array2.sort(comparer);
-          while (length2--) {
-            array2[length2] = array2[length2].value;
-          }
-          return array2;
-        }
-        function baseSum(array2, iteratee) {
-          var result, index = -1, length2 = array2.length;
-          while (++index < length2) {
-            var current = iteratee(array2[index]);
-            if (current !== undefined2) {
-              result = result === undefined2 ? current : result + current;
+          function baseClone(value, bitmask, customizer, key, object, stack) {
+            var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
+            if (customizer) {
+              result2 = object ? customizer(value, key, object, stack) : customizer(value);
             }
-          }
-          return result;
-        }
-        function baseTimes2(n3, iteratee) {
-          var index = -1, result = Array(n3);
-          while (++index < n3) {
-            result[index] = iteratee(index);
-          }
-          return result;
-        }
-        function baseToPairs(object, props) {
-          return arrayMap2(props, function(key) {
-            return [key, object[key]];
-          });
-        }
-        function baseTrim2(string) {
-          return string ? string.slice(0, trimmedEndIndex2(string) + 1).replace(reTrimStart2, "") : string;
-        }
-        function baseUnary2(func) {
-          return function(value) {
-            return func(value);
-          };
-        }
-        function baseValues(object, props) {
-          return arrayMap2(props, function(key) {
-            return object[key];
-          });
-        }
-        function cacheHas2(cache, key) {
-          return cache.has(key);
-        }
-        function charsStartIndex(strSymbols, chrSymbols) {
-          var index = -1, length2 = strSymbols.length;
-          while (++index < length2 && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
-          }
-          return index;
-        }
-        function charsEndIndex(strSymbols, chrSymbols) {
-          var index = strSymbols.length;
-          while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
-          }
-          return index;
-        }
-        function countHolders(array2, placeholder) {
-          var length2 = array2.length, result = 0;
-          while (length2--) {
-            if (array2[length2] === placeholder) {
-              ++result;
+            if (result2 !== undefined2) {
+              return result2;
             }
-          }
-          return result;
-        }
-        var deburrLetter = basePropertyOf2(deburredLetters);
-        var escapeHtmlChar2 = basePropertyOf2(htmlEscapes2);
-        function escapeStringChar(chr) {
-          return "\\" + stringEscapes[chr];
-        }
-        function getValue2(object, key) {
-          return object == null ? undefined2 : object[key];
-        }
-        function hasUnicode(string) {
-          return reHasUnicode.test(string);
-        }
-        function hasUnicodeWord(string) {
-          return reHasUnicodeWord.test(string);
-        }
-        function iteratorToArray(iterator) {
-          var data, result = [];
-          while (!(data = iterator.next()).done) {
-            result.push(data.value);
-          }
-          return result;
-        }
-        function mapToArray2(map2) {
-          var index = -1, result = Array(map2.size);
-          map2.forEach(function(value, key) {
-            result[++index] = [key, value];
-          });
-          return result;
-        }
-        function overArg2(func, transform2) {
-          return function(arg) {
-            return func(transform2(arg));
-          };
-        }
-        function replaceHolders(array2, placeholder) {
-          var index = -1, length2 = array2.length, resIndex = 0, result = [];
-          while (++index < length2) {
-            var value = array2[index];
-            if (value === placeholder || value === PLACEHOLDER) {
-              array2[index] = PLACEHOLDER;
-              result[resIndex++] = index;
+            if (!isObject2(value)) {
+              return value;
             }
-          }
-          return result;
-        }
-        function setToArray2(set4) {
-          var index = -1, result = Array(set4.size);
-          set4.forEach(function(value) {
-            result[++index] = value;
-          });
-          return result;
-        }
-        function setToPairs(set4) {
-          var index = -1, result = Array(set4.size);
-          set4.forEach(function(value) {
-            result[++index] = [value, value];
-          });
-          return result;
-        }
-        function strictIndexOf(array2, value, fromIndex) {
-          var index = fromIndex - 1, length2 = array2.length;
-          while (++index < length2) {
-            if (array2[index] === value) {
-              return index;
+            var isArr = isArray2(value);
+            if (isArr) {
+              result2 = initCloneArray(value);
+              if (!isDeep) {
+                return copyArray(value, result2);
+              }
+            } else {
+              var tag2 = getTag2(value), isFunc = tag2 == funcTag3 || tag2 == genTag2;
+              if (isBuffer2(value)) {
+                return cloneBuffer(value, isDeep);
+              }
+              if (tag2 == objectTag4 || tag2 == argsTag4 || isFunc && !object) {
+                result2 = isFlat || isFunc ? {} : initCloneObject(value);
+                if (!isDeep) {
+                  return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value));
+                }
+              } else {
+                if (!cloneableTags[tag2]) {
+                  return object ? value : {};
+                }
+                result2 = initCloneByTag(value, tag2, isDeep);
+              }
             }
-          }
-          return -1;
-        }
-        function strictLastIndexOf(array2, value, fromIndex) {
-          var index = fromIndex + 1;
-          while (index--) {
-            if (array2[index] === value) {
-              return index;
+            stack || (stack = new Stack2());
+            var stacked = stack.get(value);
+            if (stacked) {
+              return stacked;
             }
+            stack.set(value, result2);
+            if (isSet(value)) {
+              value.forEach(function(subValue) {
+                result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
+              });
+            } else if (isMap(value)) {
+              value.forEach(function(subValue, key2) {
+                result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
+              });
+            }
+            var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys2 : isFlat ? keysIn : keys2;
+            var props = isArr ? undefined2 : keysFunc(value);
+            arrayEach(props || value, function(subValue, key2) {
+              if (props) {
+                key2 = subValue;
+                subValue = value[key2];
+              }
+              assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
+            });
+            return result2;
           }
-          return index;
-        }
-        function stringSize(string) {
-          return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);
-        }
-        function stringToArray(string) {
-          return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
-        }
-        function trimmedEndIndex2(string) {
-          var index = string.length;
-          while (index-- && reWhitespace2.test(string.charAt(index))) {
-          }
-          return index;
-        }
-        var unescapeHtmlChar2 = basePropertyOf2(htmlUnescapes2);
-        function unicodeSize(string) {
-          var result = reUnicode.lastIndex = 0;
-          while (reUnicode.test(string)) {
-            ++result;
+          function baseConforms(source) {
+            var props = keys2(source);
+            return function(object) {
+              return baseConformsTo(object, source, props);
+            };
           }
-          return result;
-        }
-        function unicodeToArray(string) {
-          return string.match(reUnicode) || [];
-        }
-        function unicodeWords(string) {
-          return string.match(reUnicodeWord) || [];
-        }
-        var runInContext = function runInContext2(context) {
-          context = context == null ? root3 : _2.defaults(root3.Object(), context, _2.pick(root3, contextProps));
-          var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError;
-          var arrayProto2 = Array2.prototype, funcProto3 = Function2.prototype, objectProto13 = Object2.prototype;
-          var coreJsData2 = context["__core-js_shared__"];
-          var funcToString3 = funcProto3.toString;
-          var hasOwnProperty10 = objectProto13.hasOwnProperty;
-          var idCounter = 0;
-          var maskSrcKey2 = function() {
-            var uid = /[^.]+$/.exec(coreJsData2 && coreJsData2.keys && coreJsData2.keys.IE_PROTO || "");
-            return uid ? "Symbol(src)_1." + uid : "";
-          }();
-          var nativeObjectToString3 = objectProto13.toString;
-          var objectCtorString = funcToString3.call(Object2);
-          var oldDash = root3._;
-          var reIsNative2 = RegExp2(
-            "^" + funcToString3.call(hasOwnProperty10).replace(reRegExpChar2, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
-          );
-          var Buffer3 = moduleExports3 ? context.Buffer : undefined2, Symbol3 = context.Symbol, Uint8Array3 = context.Uint8Array, allocUnsafe = Buffer3 ? Buffer3.allocUnsafe : undefined2, getPrototype = overArg2(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable3 = objectProto13.propertyIsEnumerable, splice2 = arrayProto2.splice, spreadableSymbol = Symbol3 ? Symbol3.isConcatSpreadable : undefined2, symIterator = Symbol3 ? Symbol3.iterator : undefined2, symToStringTag3 = Symbol3 ? Symbol3.toStringTag : undefined2;
-          var defineProperty = function() {
-            try {
-              var func = getNative2(Object2, "defineProperty");
-              func({}, "", {});
-              return func;
-            } catch (e3) {
+          function baseConformsTo(object, source, props) {
+            var length2 = props.length;
+            if (object == null) {
+              return !length2;
             }
-          }();
-          var ctxClearTimeout = context.clearTimeout !== root3.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root3.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root3.setTimeout && context.setTimeout;
-          var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols2 = Object2.getOwnPropertySymbols, nativeIsBuffer2 = Buffer3 ? Buffer3.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto2.join, nativeKeys2 = overArg2(Object2.keys, Object2), nativeMax2 = Math2.max, nativeMin2 = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto2.reverse;
-          var DataView3 = getNative2(context, "DataView"), Map3 = getNative2(context, "Map"), Promise3 = getNative2(context, "Promise"), Set3 = getNative2(context, "Set"), WeakMap2 = getNative2(context, "WeakMap"), nativeCreate2 = getNative2(Object2, "create");
-          var metaMap = WeakMap2 && new WeakMap2();
-          var realNames = {};
-          var dataViewCtorString2 = toSource2(DataView3), mapCtorString2 = toSource2(Map3), promiseCtorString2 = toSource2(Promise3), setCtorString2 = toSource2(Set3), weakMapCtorString2 = toSource2(WeakMap2);
-          var symbolProto3 = Symbol3 ? Symbol3.prototype : undefined2, symbolValueOf2 = symbolProto3 ? symbolProto3.valueOf : undefined2, symbolToString2 = symbolProto3 ? symbolProto3.toString : undefined2;
-          function lodash(value) {
-            if (isObjectLike2(value) && !isArray2(value) && !(value instanceof LazyWrapper)) {
-              if (value instanceof LodashWrapper) {
-                return value;
-              }
-              if (hasOwnProperty10.call(value, "__wrapped__")) {
-                return wrapperClone(value);
+            object = Object2(object);
+            while (length2--) {
+              var key = props[length2], predicate = source[key], value = object[key];
+              if (value === undefined2 && !(key in object) || !predicate(value)) {
+                return false;
               }
             }
-            return new LodashWrapper(value);
+            return true;
           }
-          var baseCreate = /* @__PURE__ */ function() {
-            function object() {
+          function baseDelay(func, wait, args) {
+            if (typeof func != "function") {
+              throw new TypeError2(FUNC_ERROR_TEXT3);
             }
-            return function(proto) {
-              if (!isObject2(proto)) {
-                return {};
-              }
-              if (objectCreate) {
-                return objectCreate(proto);
-              }
-              object.prototype = proto;
-              var result2 = new object();
-              object.prototype = undefined2;
-              return result2;
-            };
-          }();
-          function baseLodash() {
-          }
-          function LodashWrapper(value, chainAll) {
-            this.__wrapped__ = value;
-            this.__actions__ = [];
-            this.__chain__ = !!chainAll;
-            this.__index__ = 0;
-            this.__values__ = undefined2;
+            return setTimeout2(function() {
+              func.apply(undefined2, args);
+            }, wait);
           }
-          lodash.templateSettings = {
-            /**
-             * Used to detect `data` property values to be HTML-escaped.
-             *
-             * @memberOf _.templateSettings
-             * @type {RegExp}
-             */
-            "escape": reEscape,
-            /**
-             * Used to detect code to be evaluated.
-             *
-             * @memberOf _.templateSettings
-             * @type {RegExp}
-             */
-            "evaluate": reEvaluate,
-            /**
-             * Used to detect `data` property values to inject.
-             *
-             * @memberOf _.templateSettings
-             * @type {RegExp}
-             */
-            "interpolate": reInterpolate,
-            /**
-             * Used to reference the data object in the template text.
-             *
-             * @memberOf _.templateSettings
-             * @type {string}
-             */
-            "variable": "",
-            /**
-             * Used to import variables into the compiled template.
-             *
-             * @memberOf _.templateSettings
-             * @type {Object}
-             */
-            "imports": {
-              /**
-               * A reference to the `lodash` function.
-               *
-               * @memberOf _.templateSettings.imports
-               * @type {Function}
-               */
-              "_": lodash
+          function baseDifference(array2, values2, iteratee2, comparator) {
+            var index = -1, includes2 = arrayIncludes, isCommon = true, length2 = array2.length, result2 = [], valuesLength = values2.length;
+            if (!length2) {
+              return result2;
             }
-          };
-          lodash.prototype = baseLodash.prototype;
-          lodash.prototype.constructor = lodash;
-          LodashWrapper.prototype = baseCreate(baseLodash.prototype);
-          LodashWrapper.prototype.constructor = LodashWrapper;
-          function LazyWrapper(value) {
-            this.__wrapped__ = value;
-            this.__actions__ = [];
-            this.__dir__ = 1;
-            this.__filtered__ = false;
-            this.__iteratees__ = [];
-            this.__takeCount__ = MAX_ARRAY_LENGTH;
-            this.__views__ = [];
-          }
-          function lazyClone() {
-            var result2 = new LazyWrapper(this.__wrapped__);
-            result2.__actions__ = copyArray(this.__actions__);
-            result2.__dir__ = this.__dir__;
-            result2.__filtered__ = this.__filtered__;
-            result2.__iteratees__ = copyArray(this.__iteratees__);
-            result2.__takeCount__ = this.__takeCount__;
-            result2.__views__ = copyArray(this.__views__);
-            return result2;
-          }
-          function lazyReverse() {
-            if (this.__filtered__) {
-              var result2 = new LazyWrapper(this);
-              result2.__dir__ = -1;
-              result2.__filtered__ = true;
-            } else {
-              result2 = this.clone();
-              result2.__dir__ *= -1;
+            if (iteratee2) {
+              values2 = arrayMap2(values2, baseUnary2(iteratee2));
             }
-            return result2;
-          }
-          function lazyValue() {
-            var array2 = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array2), isRight = dir < 0, arrLength = isArr ? array2.length : 0, view = getView(0, arrLength, this.__views__), start2 = view.start, end = view.end, length2 = end - start2, index = isRight ? end : start2 - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin2(length2, this.__takeCount__);
-            if (!isArr || !isRight && arrLength == length2 && takeCount == length2) {
-              return baseWrapperValue(array2, this.__actions__);
+            if (comparator) {
+              includes2 = arrayIncludesWith;
+              isCommon = false;
+            } else if (values2.length >= LARGE_ARRAY_SIZE2) {
+              includes2 = cacheHas2;
+              isCommon = false;
+              values2 = new SetCache2(values2);
             }
-            var result2 = [];
             outer:
-              while (length2-- && resIndex < takeCount) {
-                index += dir;
-                var iterIndex = -1, value = array2[index];
-                while (++iterIndex < iterLength) {
-                  var data = iteratees[iterIndex], iteratee2 = data.iteratee, type2 = data.type, computed = iteratee2(value);
-                  if (type2 == LAZY_MAP_FLAG) {
-                    value = computed;
-                  } else if (!computed) {
-                    if (type2 == LAZY_FILTER_FLAG) {
+              while (++index < length2) {
+                var value = array2[index], computed = iteratee2 == null ? value : iteratee2(value);
+                value = comparator || value !== 0 ? value : 0;
+                if (isCommon && computed === computed) {
+                  var valuesIndex = valuesLength;
+                  while (valuesIndex--) {
+                    if (values2[valuesIndex] === computed) {
                       continue outer;
-                    } else {
-                      break outer;
                     }
                   }
+                  result2.push(value);
+                } else if (!includes2(values2, computed, comparator)) {
+                  result2.push(value);
                 }
-                result2[resIndex++] = value;
               }
             return result2;
           }
-          LazyWrapper.prototype = baseCreate(baseLodash.prototype);
-          LazyWrapper.prototype.constructor = LazyWrapper;
-          function Hash2(entries) {
-            var index = -1, length2 = entries == null ? 0 : entries.length;
-            this.clear();
+          var baseEach = createBaseEach(baseForOwn);
+          var baseEachRight = createBaseEach(baseForOwnRight, true);
+          function baseEvery(collection, predicate) {
+            var result2 = true;
+            baseEach(collection, function(value, index, collection2) {
+              result2 = !!predicate(value, index, collection2);
+              return result2;
+            });
+            return result2;
+          }
+          function baseExtremum(array2, iteratee2, comparator) {
+            var index = -1, length2 = array2.length;
             while (++index < length2) {
-              var entry = entries[index];
-              this.set(entry[0], entry[1]);
+              var value = array2[index], current = iteratee2(value);
+              if (current != null && (computed === undefined2 ? current === current && !isSymbol2(current) : comparator(current, computed))) {
+                var computed = current, result2 = value;
+              }
             }
+            return result2;
           }
-          function hashClear2() {
-            this.__data__ = nativeCreate2 ? nativeCreate2(null) : {};
-            this.size = 0;
+          function baseFill(array2, value, start2, end) {
+            var length2 = array2.length;
+            start2 = toInteger(start2);
+            if (start2 < 0) {
+              start2 = -start2 > length2 ? 0 : length2 + start2;
+            }
+            end = end === undefined2 || end > length2 ? length2 : toInteger(end);
+            if (end < 0) {
+              end += length2;
+            }
+            end = start2 > end ? 0 : toLength(end);
+            while (start2 < end) {
+              array2[start2++] = value;
+            }
+            return array2;
           }
-          function hashDelete2(key) {
-            var result2 = this.has(key) && delete this.__data__[key];
-            this.size -= result2 ? 1 : 0;
+          function baseFilter(collection, predicate) {
+            var result2 = [];
+            baseEach(collection, function(value, index, collection2) {
+              if (predicate(value, index, collection2)) {
+                result2.push(value);
+              }
+            });
             return result2;
           }
-          function hashGet2(key) {
-            var data = this.__data__;
-            if (nativeCreate2) {
-              var result2 = data[key];
-              return result2 === HASH_UNDEFINED4 ? undefined2 : result2;
+          function baseFlatten(array2, depth, predicate, isStrict, result2) {
+            var index = -1, length2 = array2.length;
+            predicate || (predicate = isFlattenable);
+            result2 || (result2 = []);
+            while (++index < length2) {
+              var value = array2[index];
+              if (depth > 0 && predicate(value)) {
+                if (depth > 1) {
+                  baseFlatten(value, depth - 1, predicate, isStrict, result2);
+                } else {
+                  arrayPush2(result2, value);
+                }
+              } else if (!isStrict) {
+                result2[result2.length] = value;
+              }
             }
-            return hasOwnProperty10.call(data, key) ? data[key] : undefined2;
+            return result2;
           }
-          function hashHas2(key) {
-            var data = this.__data__;
-            return nativeCreate2 ? data[key] !== undefined2 : hasOwnProperty10.call(data, key);
+          var baseFor = createBaseFor();
+          var baseForRight = createBaseFor(true);
+          function baseForOwn(object, iteratee2) {
+            return object && baseFor(object, iteratee2, keys2);
           }
-          function hashSet2(key, value) {
-            var data = this.__data__;
-            this.size += this.has(key) ? 0 : 1;
-            data[key] = nativeCreate2 && value === undefined2 ? HASH_UNDEFINED4 : value;
-            return this;
+          function baseForOwnRight(object, iteratee2) {
+            return object && baseForRight(object, iteratee2, keys2);
           }
-          Hash2.prototype.clear = hashClear2;
-          Hash2.prototype["delete"] = hashDelete2;
-          Hash2.prototype.get = hashGet2;
-          Hash2.prototype.has = hashHas2;
-          Hash2.prototype.set = hashSet2;
-          function ListCache2(entries) {
-            var index = -1, length2 = entries == null ? 0 : entries.length;
-            this.clear();
-            while (++index < length2) {
-              var entry = entries[index];
-              this.set(entry[0], entry[1]);
-            }
+          function baseFunctions(object, props) {
+            return arrayFilter2(props, function(key) {
+              return isFunction2(object[key]);
+            });
           }
-          function listCacheClear2() {
-            this.__data__ = [];
-            this.size = 0;
-          }
-          function listCacheDelete2(key) {
-            var data = this.__data__, index = assocIndexOf2(data, key);
-            if (index < 0) {
-              return false;
-            }
-            var lastIndex = data.length - 1;
-            if (index == lastIndex) {
-              data.pop();
-            } else {
-              splice2.call(data, index, 1);
-            }
-            --this.size;
-            return true;
-          }
-          function listCacheGet2(key) {
-            var data = this.__data__, index = assocIndexOf2(data, key);
-            return index < 0 ? undefined2 : data[index][1];
-          }
-          function listCacheHas2(key) {
-            return assocIndexOf2(this.__data__, key) > -1;
-          }
-          function listCacheSet2(key, value) {
-            var data = this.__data__, index = assocIndexOf2(data, key);
-            if (index < 0) {
-              ++this.size;
-              data.push([key, value]);
-            } else {
-              data[index][1] = value;
-            }
-            return this;
-          }
-          ListCache2.prototype.clear = listCacheClear2;
-          ListCache2.prototype["delete"] = listCacheDelete2;
-          ListCache2.prototype.get = listCacheGet2;
-          ListCache2.prototype.has = listCacheHas2;
-          ListCache2.prototype.set = listCacheSet2;
-          function MapCache2(entries) {
-            var index = -1, length2 = entries == null ? 0 : entries.length;
-            this.clear();
-            while (++index < length2) {
-              var entry = entries[index];
-              this.set(entry[0], entry[1]);
-            }
-          }
-          function mapCacheClear2() {
-            this.size = 0;
-            this.__data__ = {
-              "hash": new Hash2(),
-              "map": new (Map3 || ListCache2)(),
-              "string": new Hash2()
-            };
-          }
-          function mapCacheDelete2(key) {
-            var result2 = getMapData2(this, key)["delete"](key);
-            this.size -= result2 ? 1 : 0;
-            return result2;
-          }
-          function mapCacheGet2(key) {
-            return getMapData2(this, key).get(key);
-          }
-          function mapCacheHas2(key) {
-            return getMapData2(this, key).has(key);
-          }
-          function mapCacheSet2(key, value) {
-            var data = getMapData2(this, key), size2 = data.size;
-            data.set(key, value);
-            this.size += data.size == size2 ? 0 : 1;
-            return this;
-          }
-          MapCache2.prototype.clear = mapCacheClear2;
-          MapCache2.prototype["delete"] = mapCacheDelete2;
-          MapCache2.prototype.get = mapCacheGet2;
-          MapCache2.prototype.has = mapCacheHas2;
-          MapCache2.prototype.set = mapCacheSet2;
-          function SetCache2(values2) {
-            var index = -1, length2 = values2 == null ? 0 : values2.length;
-            this.__data__ = new MapCache2();
-            while (++index < length2) {
-              this.add(values2[index]);
-            }
-          }
-          function setCacheAdd2(value) {
-            this.__data__.set(value, HASH_UNDEFINED4);
-            return this;
-          }
-          function setCacheHas2(value) {
-            return this.__data__.has(value);
-          }
-          SetCache2.prototype.add = SetCache2.prototype.push = setCacheAdd2;
-          SetCache2.prototype.has = setCacheHas2;
-          function Stack2(entries) {
-            var data = this.__data__ = new ListCache2(entries);
-            this.size = data.size;
-          }
-          function stackClear2() {
-            this.__data__ = new ListCache2();
-            this.size = 0;
-          }
-          function stackDelete2(key) {
-            var data = this.__data__, result2 = data["delete"](key);
-            this.size = data.size;
-            return result2;
-          }
-          function stackGet2(key) {
-            return this.__data__.get(key);
-          }
-          function stackHas2(key) {
-            return this.__data__.has(key);
-          }
-          function stackSet2(key, value) {
-            var data = this.__data__;
-            if (data instanceof ListCache2) {
-              var pairs2 = data.__data__;
-              if (!Map3 || pairs2.length < LARGE_ARRAY_SIZE2 - 1) {
-                pairs2.push([key, value]);
-                this.size = ++data.size;
-                return this;
-              }
-              data = this.__data__ = new MapCache2(pairs2);
-            }
-            data.set(key, value);
-            this.size = data.size;
-            return this;
-          }
-          Stack2.prototype.clear = stackClear2;
-          Stack2.prototype["delete"] = stackDelete2;
-          Stack2.prototype.get = stackGet2;
-          Stack2.prototype.has = stackHas2;
-          Stack2.prototype.set = stackSet2;
-          function arrayLikeKeys2(value, inherited) {
-            var isArr = isArray2(value), isArg = !isArr && isArguments2(value), isBuff = !isArr && !isArg && isBuffer2(value), isType = !isArr && !isArg && !isBuff && isTypedArray2(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes2(value.length, String2) : [], length2 = result2.length;
-            for (var key in value) {
-              if ((inherited || hasOwnProperty10.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
-              (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
-              isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
-              isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
-              isIndex2(key, length2)))) {
-                result2.push(key);
-              }
-            }
-            return result2;
-          }
-          function arraySample(array2) {
-            var length2 = array2.length;
-            return length2 ? array2[baseRandom(0, length2 - 1)] : undefined2;
-          }
-          function arraySampleSize(array2, n3) {
-            return shuffleSelf(copyArray(array2), baseClamp(n3, 0, array2.length));
-          }
-          function arrayShuffle(array2) {
-            return shuffleSelf(copyArray(array2));
-          }
-          function assignMergeValue(object, key, value) {
-            if (value !== undefined2 && !eq2(object[key], value) || value === undefined2 && !(key in object)) {
-              baseAssignValue(object, key, value);
-            }
-          }
-          function assignValue(object, key, value) {
-            var objValue = object[key];
-            if (!(hasOwnProperty10.call(object, key) && eq2(objValue, value)) || value === undefined2 && !(key in object)) {
-              baseAssignValue(object, key, value);
-            }
-          }
-          function assocIndexOf2(array2, key) {
-            var length2 = array2.length;
-            while (length2--) {
-              if (eq2(array2[length2][0], key)) {
-                return length2;
-              }
-            }
-            return -1;
-          }
-          function baseAggregator(collection, setter, iteratee2, accumulator) {
-            baseEach(collection, function(value, key, collection2) {
-              setter(accumulator, value, iteratee2(value), collection2);
-            });
-            return accumulator;
-          }
-          function baseAssign(object, source) {
-            return object && copyObject(source, keys2(source), object);
-          }
-          function baseAssignIn(object, source) {
-            return object && copyObject(source, keysIn(source), object);
-          }
-          function baseAssignValue(object, key, value) {
-            if (key == "__proto__" && defineProperty) {
-              defineProperty(object, key, {
-                "configurable": true,
-                "enumerable": true,
-                "value": value,
-                "writable": true
-              });
-            } else {
-              object[key] = value;
-            }
-          }
-          function baseAt(object, paths) {
-            var index = -1, length2 = paths.length, result2 = Array2(length2), skip = object == null;
-            while (++index < length2) {
-              result2[index] = skip ? undefined2 : get4(object, paths[index]);
-            }
-            return result2;
-          }
-          function baseClamp(number3, lower2, upper) {
-            if (number3 === number3) {
-              if (upper !== undefined2) {
-                number3 = number3 <= upper ? number3 : upper;
-              }
-              if (lower2 !== undefined2) {
-                number3 = number3 >= lower2 ? number3 : lower2;
-              }
-            }
-            return number3;
-          }
-          function baseClone(value, bitmask, customizer, key, object, stack) {
-            var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
-            if (customizer) {
-              result2 = object ? customizer(value, key, object, stack) : customizer(value);
-            }
-            if (result2 !== undefined2) {
-              return result2;
-            }
-            if (!isObject2(value)) {
-              return value;
-            }
-            var isArr = isArray2(value);
-            if (isArr) {
-              result2 = initCloneArray(value);
-              if (!isDeep) {
-                return copyArray(value, result2);
-              }
-            } else {
-              var tag2 = getTag2(value), isFunc = tag2 == funcTag3 || tag2 == genTag2;
-              if (isBuffer2(value)) {
-                return cloneBuffer(value, isDeep);
-              }
-              if (tag2 == objectTag4 || tag2 == argsTag4 || isFunc && !object) {
-                result2 = isFlat || isFunc ? {} : initCloneObject(value);
-                if (!isDeep) {
-                  return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value));
-                }
-              } else {
-                if (!cloneableTags[tag2]) {
-                  return object ? value : {};
-                }
-                result2 = initCloneByTag(value, tag2, isDeep);
-              }
-            }
-            stack || (stack = new Stack2());
-            var stacked = stack.get(value);
-            if (stacked) {
-              return stacked;
-            }
-            stack.set(value, result2);
-            if (isSet(value)) {
-              value.forEach(function(subValue) {
-                result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
-              });
-            } else if (isMap(value)) {
-              value.forEach(function(subValue, key2) {
-                result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
-              });
-            }
-            var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys2 : isFlat ? keysIn : keys2;
-            var props = isArr ? undefined2 : keysFunc(value);
-            arrayEach(props || value, function(subValue, key2) {
-              if (props) {
-                key2 = subValue;
-                subValue = value[key2];
-              }
-              assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
-            });
-            return result2;
-          }
-          function baseConforms(source) {
-            var props = keys2(source);
-            return function(object) {
-              return baseConformsTo(object, source, props);
-            };
-          }
-          function baseConformsTo(object, source, props) {
-            var length2 = props.length;
-            if (object == null) {
-              return !length2;
-            }
-            object = Object2(object);
-            while (length2--) {
-              var key = props[length2], predicate = source[key], value = object[key];
-              if (value === undefined2 && !(key in object) || !predicate(value)) {
-                return false;
-              }
-            }
-            return true;
-          }
-          function baseDelay(func, wait, args) {
-            if (typeof func != "function") {
-              throw new TypeError2(FUNC_ERROR_TEXT3);
-            }
-            return setTimeout2(function() {
-              func.apply(undefined2, args);
-            }, wait);
-          }
-          function baseDifference(array2, values2, iteratee2, comparator) {
-            var index = -1, includes2 = arrayIncludes, isCommon = true, length2 = array2.length, result2 = [], valuesLength = values2.length;
-            if (!length2) {
-              return result2;
-            }
-            if (iteratee2) {
-              values2 = arrayMap2(values2, baseUnary2(iteratee2));
-            }
-            if (comparator) {
-              includes2 = arrayIncludesWith;
-              isCommon = false;
-            } else if (values2.length >= LARGE_ARRAY_SIZE2) {
-              includes2 = cacheHas2;
-              isCommon = false;
-              values2 = new SetCache2(values2);
-            }
-            outer:
-              while (++index < length2) {
-                var value = array2[index], computed = iteratee2 == null ? value : iteratee2(value);
-                value = comparator || value !== 0 ? value : 0;
-                if (isCommon && computed === computed) {
-                  var valuesIndex = valuesLength;
-                  while (valuesIndex--) {
-                    if (values2[valuesIndex] === computed) {
-                      continue outer;
-                    }
-                  }
-                  result2.push(value);
-                } else if (!includes2(values2, computed, comparator)) {
-                  result2.push(value);
-                }
-              }
-            return result2;
-          }
-          var baseEach = createBaseEach(baseForOwn);
-          var baseEachRight = createBaseEach(baseForOwnRight, true);
-          function baseEvery(collection, predicate) {
-            var result2 = true;
-            baseEach(collection, function(value, index, collection2) {
-              result2 = !!predicate(value, index, collection2);
-              return result2;
-            });
-            return result2;
-          }
-          function baseExtremum(array2, iteratee2, comparator) {
-            var index = -1, length2 = array2.length;
-            while (++index < length2) {
-              var value = array2[index], current = iteratee2(value);
-              if (current != null && (computed === undefined2 ? current === current && !isSymbol2(current) : comparator(current, computed))) {
-                var computed = current, result2 = value;
-              }
-            }
-            return result2;
-          }
-          function baseFill(array2, value, start2, end) {
-            var length2 = array2.length;
-            start2 = toInteger(start2);
-            if (start2 < 0) {
-              start2 = -start2 > length2 ? 0 : length2 + start2;
-            }
-            end = end === undefined2 || end > length2 ? length2 : toInteger(end);
-            if (end < 0) {
-              end += length2;
-            }
-            end = start2 > end ? 0 : toLength(end);
-            while (start2 < end) {
-              array2[start2++] = value;
-            }
-            return array2;
-          }
-          function baseFilter(collection, predicate) {
-            var result2 = [];
-            baseEach(collection, function(value, index, collection2) {
-              if (predicate(value, index, collection2)) {
-                result2.push(value);
-              }
-            });
-            return result2;
-          }
-          function baseFlatten(array2, depth, predicate, isStrict, result2) {
-            var index = -1, length2 = array2.length;
-            predicate || (predicate = isFlattenable);
-            result2 || (result2 = []);
-            while (++index < length2) {
-              var value = array2[index];
-              if (depth > 0 && predicate(value)) {
-                if (depth > 1) {
-                  baseFlatten(value, depth - 1, predicate, isStrict, result2);
-                } else {
-                  arrayPush2(result2, value);
-                }
-              } else if (!isStrict) {
-                result2[result2.length] = value;
-              }
-            }
-            return result2;
-          }
-          var baseFor = createBaseFor();
-          var baseForRight = createBaseFor(true);
-          function baseForOwn(object, iteratee2) {
-            return object && baseFor(object, iteratee2, keys2);
-          }
-          function baseForOwnRight(object, iteratee2) {
-            return object && baseForRight(object, iteratee2, keys2);
-          }
-          function baseFunctions(object, props) {
-            return arrayFilter2(props, function(key) {
-              return isFunction2(object[key]);
-            });
-          }
-          function baseGet(object, path) {
-            path = castPath(path, object);
-            var index = 0, length2 = path.length;
-            while (object != null && index < length2) {
-              object = object[toKey(path[index++])];
-            }
-            return index && index == length2 ? object : undefined2;
+          function baseGet(object, path) {
+            path = castPath(path, object);
+            var index = 0, length2 = path.length;
+            while (object != null && index < length2) {
+              object = object[toKey(path[index++])];
+            }
+            return index && index == length2 ? object : undefined2;
           }
           function baseGetAllKeys2(object, keysFunc, symbolsFunc) {
             var result2 = keysFunc(object);
             }
             return symToStringTag3 && symToStringTag3 in Object2(value) ? getRawTag2(value) : objectToString2(value);
           }
-          function baseGt(value, other) {
-            return value > other;
+          function baseGt(value, other2) {
+            return value > other2;
           }
           function baseHas(object, key) {
             return object != null && hasOwnProperty10.call(object, key);
           function baseIsDate(value) {
             return isObjectLike2(value) && baseGetTag2(value) == dateTag3;
           }
-          function baseIsEqual2(value, other, bitmask, customizer, stack) {
-            if (value === other) {
+          function baseIsEqual2(value, other2, bitmask, customizer, stack) {
+            if (value === other2) {
               return true;
             }
-            if (value == null || other == null || !isObjectLike2(value) && !isObjectLike2(other)) {
-              return value !== value && other !== other;
+            if (value == null || other2 == null || !isObjectLike2(value) && !isObjectLike2(other2)) {
+              return value !== value && other2 !== other2;
             }
-            return baseIsEqualDeep2(value, other, bitmask, customizer, baseIsEqual2, stack);
+            return baseIsEqualDeep2(value, other2, bitmask, customizer, baseIsEqual2, stack);
           }
-          function baseIsEqualDeep2(object, other, bitmask, customizer, equalFunc, stack) {
-            var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag3 : getTag2(object), othTag = othIsArr ? arrayTag3 : getTag2(other);
+          function baseIsEqualDeep2(object, other2, bitmask, customizer, equalFunc, stack) {
+            var objIsArr = isArray2(object), othIsArr = isArray2(other2), objTag = objIsArr ? arrayTag3 : getTag2(object), othTag = othIsArr ? arrayTag3 : getTag2(other2);
             objTag = objTag == argsTag4 ? objectTag4 : objTag;
             othTag = othTag == argsTag4 ? objectTag4 : othTag;
             var objIsObj = objTag == objectTag4, othIsObj = othTag == objectTag4, isSameTag = objTag == othTag;
             if (isSameTag && isBuffer2(object)) {
-              if (!isBuffer2(other)) {
+              if (!isBuffer2(other2)) {
                 return false;
               }
               objIsArr = true;
             }
             if (isSameTag && !objIsObj) {
               stack || (stack = new Stack2());
-              return objIsArr || isTypedArray2(object) ? equalArrays2(object, other, bitmask, customizer, equalFunc, stack) : equalByTag2(object, other, objTag, bitmask, customizer, equalFunc, stack);
+              return objIsArr || isTypedArray2(object) ? equalArrays2(object, other2, bitmask, customizer, equalFunc, stack) : equalByTag2(object, other2, objTag, bitmask, customizer, equalFunc, stack);
             }
             if (!(bitmask & COMPARE_PARTIAL_FLAG5)) {
-              var objIsWrapped = objIsObj && hasOwnProperty10.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty10.call(other, "__wrapped__");
+              var objIsWrapped = objIsObj && hasOwnProperty10.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty10.call(other2, "__wrapped__");
               if (objIsWrapped || othIsWrapped) {
-                var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
+                var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other2.value() : other2;
                 stack || (stack = new Stack2());
                 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
               }
               return false;
             }
             stack || (stack = new Stack2());
-            return equalObjects2(object, other, bitmask, customizer, equalFunc, stack);
+            return equalObjects2(object, other2, bitmask, customizer, equalFunc, stack);
           }
           function baseIsMap(value) {
             return isObjectLike2(value) && getTag2(value) == mapTag4;
             }
             return result2;
           }
-          function baseLt(value, other) {
-            return value < other;
+          function baseLt(value, other2) {
+            return value < other2;
           }
           function baseMap(collection, iteratee2) {
             var index = -1, result2 = isArrayLike2(collection) ? Array2(collection.length) : [];
               });
               return { "criteria": criteria, "index": ++index, "value": value };
             });
-            return baseSortBy(result2, function(object, other) {
-              return compareMultiple(object, other, orders);
+            return baseSortBy(result2, function(object, other2) {
+              return compareMultiple(object, other2, orders);
             });
           }
           function basePick(object, paths) {
             var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
             return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
           }
-          function compareAscending(value, other) {
-            if (value !== other) {
+          function compareAscending(value, other2) {
+            if (value !== other2) {
               var valIsDefined = value !== undefined2, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol2(value);
-              var othIsDefined = other !== undefined2, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol2(other);
-              if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
+              var othIsDefined = other2 !== undefined2, othIsNull = other2 === null, othIsReflexive = other2 === other2, othIsSymbol = isSymbol2(other2);
+              if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other2 || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
                 return 1;
               }
-              if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
+              if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other2 || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
                 return -1;
               }
             }
             return 0;
           }
-          function compareMultiple(object, other, orders) {
-            var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length2 = objCriteria.length, ordersLength = orders.length;
+          function compareMultiple(object, other2, orders) {
+            var index = -1, objCriteria = object.criteria, othCriteria = other2.criteria, length2 = objCriteria.length, ordersLength = orders.length;
             while (++index < length2) {
               var result2 = compareAscending(objCriteria[index], othCriteria[index]);
               if (result2) {
                 return result2 * (order == "desc" ? -1 : 1);
               }
             }
-            return object.index - other.index;
+            return object.index - other2.index;
           }
           function composeArgs(args, partials, holders, isCurried) {
             var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax2(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried;
             };
           }
           function createMathOperation(operator, defaultValue) {
-            return function(value, other) {
+            return function(value, other2) {
               var result2;
-              if (value === undefined2 && other === undefined2) {
+              if (value === undefined2 && other2 === undefined2) {
                 return defaultValue;
               }
               if (value !== undefined2) {
                 result2 = value;
               }
-              if (other !== undefined2) {
+              if (other2 !== undefined2) {
                 if (result2 === undefined2) {
-                  return other;
+                  return other2;
                 }
-                if (typeof value == "string" || typeof other == "string") {
+                if (typeof value == "string" || typeof other2 == "string") {
                   value = baseToString2(value);
-                  other = baseToString2(other);
+                  other2 = baseToString2(other2);
                 } else {
                   value = baseToNumber(value);
-                  other = baseToNumber(other);
+                  other2 = baseToNumber(other2);
                 }
-                result2 = operator(value, other);
+                result2 = operator(value, other2);
               }
               return result2;
             };
             };
           }
           function createRelationalOperation(operator) {
-            return function(value, other) {
-              if (!(typeof value == "string" && typeof other == "string")) {
+            return function(value, other2) {
+              if (!(typeof value == "string" && typeof other2 == "string")) {
                 value = toNumber3(value);
-                other = toNumber3(other);
+                other2 = toNumber3(other2);
               }
-              return operator(value, other);
+              return operator(value, other2);
             };
           }
           function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) {
           function customOmitClone(value) {
             return isPlainObject(value) ? undefined2 : value;
           }
-          function equalArrays2(array2, other, bitmask, customizer, equalFunc, stack) {
-            var isPartial = bitmask & COMPARE_PARTIAL_FLAG5, arrLength = array2.length, othLength = other.length;
+          function equalArrays2(array2, other2, bitmask, customizer, equalFunc, stack) {
+            var isPartial = bitmask & COMPARE_PARTIAL_FLAG5, arrLength = array2.length, othLength = other2.length;
             if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
               return false;
             }
             var arrStacked = stack.get(array2);
-            var othStacked = stack.get(other);
+            var othStacked = stack.get(other2);
             if (arrStacked && othStacked) {
-              return arrStacked == other && othStacked == array2;
+              return arrStacked == other2 && othStacked == array2;
             }
             var index = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG3 ? new SetCache2() : undefined2;
-            stack.set(array2, other);
-            stack.set(other, array2);
+            stack.set(array2, other2);
+            stack.set(other2, array2);
             while (++index < arrLength) {
-              var arrValue = array2[index], othValue = other[index];
+              var arrValue = array2[index], othValue = other2[index];
               if (customizer) {
-                var compared = isPartial ? customizer(othValue, arrValue, index, other, array2, stack) : customizer(arrValue, othValue, index, array2, other, stack);
+                var compared = isPartial ? customizer(othValue, arrValue, index, other2, array2, stack) : customizer(arrValue, othValue, index, array2, other2, stack);
               }
               if (compared !== undefined2) {
                 if (compared) {
                 break;
               }
               if (seen) {
-                if (!arraySome2(other, function(othValue2, othIndex) {
+                if (!arraySome2(other2, function(othValue2, othIndex) {
                   if (!cacheHas2(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
                     return seen.push(othIndex);
                   }
               }
             }
             stack["delete"](array2);
-            stack["delete"](other);
+            stack["delete"](other2);
             return result2;
           }
-          function equalByTag2(object, other, tag2, bitmask, customizer, equalFunc, stack) {
+          function equalByTag2(object, other2, tag2, bitmask, customizer, equalFunc, stack) {
             switch (tag2) {
               case dataViewTag4:
-                if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
+                if (object.byteLength != other2.byteLength || object.byteOffset != other2.byteOffset) {
                   return false;
                 }
                 object = object.buffer;
-                other = other.buffer;
+                other2 = other2.buffer;
               case arrayBufferTag3:
-                if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array3(object), new Uint8Array3(other))) {
+                if (object.byteLength != other2.byteLength || !equalFunc(new Uint8Array3(object), new Uint8Array3(other2))) {
                   return false;
                 }
                 return true;
               case boolTag3:
               case dateTag3:
               case numberTag4:
-                return eq2(+object, +other);
+                return eq2(+object, +other2);
               case errorTag3:
-                return object.name == other.name && object.message == other.message;
+                return object.name == other2.name && object.message == other2.message;
               case regexpTag3:
               case stringTag3:
-                return object == other + "";
+                return object == other2 + "";
               case mapTag4:
                 var convert = mapToArray2;
               case setTag4:
                 var isPartial = bitmask & COMPARE_PARTIAL_FLAG5;
                 convert || (convert = setToArray2);
-                if (object.size != other.size && !isPartial) {
+                if (object.size != other2.size && !isPartial) {
                   return false;
                 }
                 var stacked = stack.get(object);
                 if (stacked) {
-                  return stacked == other;
+                  return stacked == other2;
                 }
                 bitmask |= COMPARE_UNORDERED_FLAG3;
-                stack.set(object, other);
-                var result2 = equalArrays2(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
+                stack.set(object, other2);
+                var result2 = equalArrays2(convert(object), convert(other2), bitmask, customizer, equalFunc, stack);
                 stack["delete"](object);
                 return result2;
               case symbolTag3:
                 if (symbolValueOf2) {
-                  return symbolValueOf2.call(object) == symbolValueOf2.call(other);
+                  return symbolValueOf2.call(object) == symbolValueOf2.call(other2);
                 }
             }
             return false;
           }
-          function equalObjects2(object, other, bitmask, customizer, equalFunc, stack) {
-            var isPartial = bitmask & COMPARE_PARTIAL_FLAG5, objProps = getAllKeys2(object), objLength = objProps.length, othProps = getAllKeys2(other), othLength = othProps.length;
+          function equalObjects2(object, other2, bitmask, customizer, equalFunc, stack) {
+            var isPartial = bitmask & COMPARE_PARTIAL_FLAG5, objProps = getAllKeys2(object), objLength = objProps.length, othProps = getAllKeys2(other2), othLength = othProps.length;
             if (objLength != othLength && !isPartial) {
               return false;
             }
             var index = objLength;
             while (index--) {
               var key = objProps[index];
-              if (!(isPartial ? key in other : hasOwnProperty10.call(other, key))) {
+              if (!(isPartial ? key in other2 : hasOwnProperty10.call(other2, key))) {
                 return false;
               }
             }
             var objStacked = stack.get(object);
-            var othStacked = stack.get(other);
+            var othStacked = stack.get(other2);
             if (objStacked && othStacked) {
-              return objStacked == other && othStacked == object;
+              return objStacked == other2 && othStacked == object;
             }
             var result2 = true;
-            stack.set(object, other);
-            stack.set(other, object);
+            stack.set(object, other2);
+            stack.set(other2, object);
             var skipCtor = isPartial;
             while (++index < objLength) {
               key = objProps[index];
-              var objValue = object[key], othValue = other[key];
+              var objValue = object[key], othValue = other2[key];
               if (customizer) {
-                var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
+                var compared = isPartial ? customizer(othValue, objValue, key, other2, object, stack) : customizer(objValue, othValue, key, object, other2, stack);
               }
               if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
                 result2 = false;
               skipCtor || (skipCtor = key == "constructor");
             }
             if (result2 && !skipCtor) {
-              var objCtor = object.constructor, othCtor = other.constructor;
-              if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
+              var objCtor = object.constructor, othCtor = other2.constructor;
+              if (objCtor != othCtor && ("constructor" in object && "constructor" in other2) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
                 result2 = false;
               }
             }
             stack["delete"](object);
-            stack["delete"](other);
+            stack["delete"](other2);
             return result2;
           }
           function flatRest(func) {
             return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value !== "__proto__" : value === null;
           }
           function isLaziable(func) {
-            var funcName = getFuncName(func), other = lodash[funcName];
-            if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) {
+            var funcName = getFuncName(func), other2 = lodash[funcName];
+            if (typeof other2 != "function" || !(funcName in LazyWrapper.prototype)) {
               return false;
             }
-            if (func === other) {
+            if (func === other2) {
               return true;
             }
-            var data = getData(other);
+            var data = getData(other2);
             return !!data && func === data[0];
           }
           function isMasked2(func) {
           function conformsTo(object, source) {
             return source == null || baseConformsTo(object, source, keys2(source));
           }
-          function eq2(value, other) {
-            return value === other || value !== value && other !== other;
+          function eq2(value, other2) {
+            return value === other2 || value !== value && other2 !== other2;
           }
           var gt2 = createRelationalOperation(baseGt);
-          var gte = createRelationalOperation(function(value, other) {
-            return value >= other;
+          var gte = createRelationalOperation(function(value, other2) {
+            return value >= other2;
           });
           var isArguments2 = baseIsArguments2(/* @__PURE__ */ function() {
             return arguments;
             }
             return true;
           }
-          function isEqual4(value, other) {
-            return baseIsEqual2(value, other);
+          function isEqual4(value, other2) {
+            return baseIsEqual2(value, other2);
           }
-          function isEqualWith(value, other, customizer) {
+          function isEqualWith(value, other2, customizer) {
             customizer = typeof customizer == "function" ? customizer : undefined2;
-            var result2 = customizer ? customizer(value, other) : undefined2;
-            return result2 === undefined2 ? baseIsEqual2(value, other, undefined2, customizer) : !!result2;
+            var result2 = customizer ? customizer(value, other2) : undefined2;
+            return result2 === undefined2 ? baseIsEqual2(value, other2, undefined2, customizer) : !!result2;
           }
           function isError(value) {
             if (!isObjectLike2(value)) {
             return isObjectLike2(value) && baseGetTag2(value) == weakSetTag;
           }
           var lt2 = createRelationalOperation(baseLt);
-          var lte = createRelationalOperation(function(value, other) {
-            return value <= other;
+          var lte = createRelationalOperation(function(value, other2) {
+            return value <= other2;
           });
           function toArray(value) {
             if (!value) {
               return NAN2;
             }
             if (isObject2(value)) {
-              var other = typeof value.valueOf == "function" ? value.valueOf() : value;
-              value = isObject2(other) ? other + "" : other;
+              var other2 = typeof value.valueOf == "function" ? value.valueOf() : value;
+              value = isObject2(other2) ? other2 + "" : other2;
             }
             if (typeof value != "string") {
               return value === 0 ? value : +value;
     }
   });
 
-  // node_modules/fast-deep-equal/index.js
-  var require_fast_deep_equal = __commonJS({
-    "node_modules/fast-deep-equal/index.js"(exports2, module2) {
-      "use strict";
-      module2.exports = function equal(a2, b2) {
-        if (a2 === b2) return true;
-        if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") {
-          if (a2.constructor !== b2.constructor) return false;
-          var length2, i3, keys2;
-          if (Array.isArray(a2)) {
-            length2 = a2.length;
-            if (length2 != b2.length) return false;
-            for (i3 = length2; i3-- !== 0; )
-              if (!equal(a2[i3], b2[i3])) return false;
-            return true;
-          }
-          if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags;
-          if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf();
-          if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString();
-          keys2 = Object.keys(a2);
-          length2 = keys2.length;
-          if (length2 !== Object.keys(b2).length) return false;
-          for (i3 = length2; i3-- !== 0; )
-            if (!Object.prototype.hasOwnProperty.call(b2, keys2[i3])) return false;
-          for (i3 = length2; i3-- !== 0; ) {
-            var key = keys2[i3];
-            if (!equal(a2[key], b2[key])) return false;
+  // node_modules/which-polygon/node_modules/quickselect/quickselect.js
+  var require_quickselect = __commonJS({
+    "node_modules/which-polygon/node_modules/quickselect/quickselect.js"(exports2, module2) {
+      (function(global2, factory) {
+        typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.quickselect = factory();
+      })(exports2, function() {
+        "use strict";
+        function quickselect3(arr, k2, left, right, compare2) {
+          quickselectStep(arr, k2, left || 0, right || arr.length - 1, compare2 || defaultCompare2);
+        }
+        function quickselectStep(arr, k2, left, right, compare2) {
+          while (right > left) {
+            if (right - left > 600) {
+              var n3 = right - left + 1;
+              var m2 = k2 - left + 1;
+              var z2 = Math.log(n3);
+              var s2 = 0.5 * Math.exp(2 * z2 / 3);
+              var sd = 0.5 * Math.sqrt(z2 * s2 * (n3 - s2) / n3) * (m2 - n3 / 2 < 0 ? -1 : 1);
+              var newLeft = Math.max(left, Math.floor(k2 - m2 * s2 / n3 + sd));
+              var newRight = Math.min(right, Math.floor(k2 + (n3 - m2) * s2 / n3 + sd));
+              quickselectStep(arr, k2, newLeft, newRight, compare2);
+            }
+            var t2 = arr[k2];
+            var i3 = left;
+            var j2 = right;
+            swap3(arr, left, k2);
+            if (compare2(arr[right], t2) > 0) swap3(arr, left, right);
+            while (i3 < j2) {
+              swap3(arr, i3, j2);
+              i3++;
+              j2--;
+              while (compare2(arr[i3], t2) < 0) i3++;
+              while (compare2(arr[j2], t2) > 0) j2--;
+            }
+            if (compare2(arr[left], t2) === 0) swap3(arr, left, j2);
+            else {
+              j2++;
+              swap3(arr, j2, right);
+            }
+            if (j2 <= k2) left = j2 + 1;
+            if (k2 <= j2) right = j2 - 1;
           }
-          return true;
         }
-        return a2 !== a2 && b2 !== b2;
-      };
+        function swap3(arr, i3, j2) {
+          var tmp = arr[i3];
+          arr[i3] = arr[j2];
+          arr[j2] = tmp;
+        }
+        function defaultCompare2(a2, b2) {
+          return a2 < b2 ? -1 : a2 > b2 ? 1 : 0;
+        }
+        return quickselect3;
+      });
     }
   });
 
-  // node_modules/fast-json-stable-stringify/index.js
-  var require_fast_json_stable_stringify = __commonJS({
-    "node_modules/fast-json-stable-stringify/index.js"(exports2, module2) {
+  // node_modules/which-polygon/node_modules/rbush/index.js
+  var require_rbush = __commonJS({
+    "node_modules/which-polygon/node_modules/rbush/index.js"(exports2, module2) {
       "use strict";
-      module2.exports = function(data, opts) {
-        if (!opts) opts = {};
-        if (typeof opts === "function") opts = { cmp: opts };
-        var cycles = typeof opts.cycles === "boolean" ? opts.cycles : false;
-        var cmp = opts.cmp && /* @__PURE__ */ function(f2) {
-          return function(node) {
-            return function(a2, b2) {
-              var aobj = { key: a2, value: node[a2] };
-              var bobj = { key: b2, value: node[b2] };
-              return f2(aobj, bobj);
-            };
-          };
-        }(opts.cmp);
-        var seen = [];
-        return function stringify3(node) {
-          if (node && node.toJSON && typeof node.toJSON === "function") {
-            node = node.toJSON();
-          }
-          if (node === void 0) return;
-          if (typeof node == "number") return isFinite(node) ? "" + node : "null";
-          if (typeof node !== "object") return JSON.stringify(node);
-          var i3, out;
-          if (Array.isArray(node)) {
-            out = "[";
-            for (i3 = 0; i3 < node.length; i3++) {
-              if (i3) out += ",";
-              out += stringify3(node[i3]) || "null";
+      module2.exports = rbush;
+      module2.exports.default = rbush;
+      var quickselect3 = require_quickselect();
+      function rbush(maxEntries, format2) {
+        if (!(this instanceof rbush)) return new rbush(maxEntries, format2);
+        this._maxEntries = Math.max(4, maxEntries || 9);
+        this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
+        if (format2) {
+          this._initFormat(format2);
+        }
+        this.clear();
+      }
+      rbush.prototype = {
+        all: function() {
+          return this._all(this.data, []);
+        },
+        search: function(bbox2) {
+          var node = this.data, result = [], toBBox = this.toBBox;
+          if (!intersects2(bbox2, node)) return result;
+          var nodesToSearch = [], i3, len, child, childBBox;
+          while (node) {
+            for (i3 = 0, len = node.children.length; i3 < len; i3++) {
+              child = node.children[i3];
+              childBBox = node.leaf ? toBBox(child) : child;
+              if (intersects2(bbox2, childBBox)) {
+                if (node.leaf) result.push(child);
+                else if (contains2(bbox2, childBBox)) this._all(child, result);
+                else nodesToSearch.push(child);
+              }
             }
-            return out + "]";
-          }
-          if (node === null) return "null";
-          if (seen.indexOf(node) !== -1) {
-            if (cycles) return JSON.stringify("__cycle__");
-            throw new TypeError("Converting circular structure to JSON");
+            node = nodesToSearch.pop();
           }
-          var seenIndex = seen.push(node) - 1;
-          var keys2 = Object.keys(node).sort(cmp && cmp(node));
-          out = "";
-          for (i3 = 0; i3 < keys2.length; i3++) {
-            var key = keys2[i3];
-            var value = stringify3(node[key]);
-            if (!value) continue;
-            if (out) out += ",";
-            out += JSON.stringify(key) + ":" + value;
+          return result;
+        },
+        collides: function(bbox2) {
+          var node = this.data, toBBox = this.toBBox;
+          if (!intersects2(bbox2, node)) return false;
+          var nodesToSearch = [], i3, len, child, childBBox;
+          while (node) {
+            for (i3 = 0, len = node.children.length; i3 < len; i3++) {
+              child = node.children[i3];
+              childBBox = node.leaf ? toBBox(child) : child;
+              if (intersects2(bbox2, childBBox)) {
+                if (node.leaf || contains2(bbox2, childBBox)) return true;
+                nodesToSearch.push(child);
+              }
+            }
+            node = nodesToSearch.pop();
           }
-          seen.splice(seenIndex, 1);
-          return "{" + out + "}";
-        }(data);
-      };
-    }
-  });
-
-  // node_modules/@mapbox/sexagesimal/index.js
-  var require_sexagesimal = __commonJS({
-    "node_modules/@mapbox/sexagesimal/index.js"(exports2, module2) {
-      module2.exports = element;
-      module2.exports.pair = pair3;
-      module2.exports.format = format2;
-      module2.exports.formatPair = formatPair;
-      module2.exports.coordToDMS = coordToDMS;
-      function element(input, dims) {
-        var result = search(input, dims);
-        return result === null ? null : result.val;
-      }
-      function formatPair(input) {
-        return format2(input.lat, "lat") + " " + format2(input.lon, "lon");
-      }
-      function format2(input, dim) {
-        var dms = coordToDMS(input, dim);
-        return dms.whole + "\xB0 " + (dms.minutes ? dms.minutes + "' " : "") + (dms.seconds ? dms.seconds + '" ' : "") + dms.dir;
-      }
-      function coordToDMS(input, dim) {
-        var dirs = { lat: ["N", "S"], lon: ["E", "W"] }[dim] || "";
-        var dir = dirs[input >= 0 ? 0 : 1];
-        var abs3 = Math.abs(input);
-        var whole = Math.floor(abs3);
-        var fraction = abs3 - whole;
-        var fractionMinutes = fraction * 60;
-        var minutes = Math.floor(fractionMinutes);
-        var seconds = Math.floor((fractionMinutes - minutes) * 60);
-        return {
-          whole,
-          minutes,
-          seconds,
-          dir
-        };
-      }
-      function search(input, dims) {
-        if (!dims) dims = "NSEW";
-        if (typeof input !== "string") return null;
-        input = input.toUpperCase();
-        var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
-        var m2 = input.match(regex);
-        if (!m2) return null;
-        var matched = m2[0];
-        var dim;
-        if (m2[1] && m2[5]) {
-          dim = m2[1];
-          matched = matched.slice(0, -1);
-        } else {
-          dim = m2[1] || m2[5];
-        }
-        if (dim && dims.indexOf(dim) === -1) return null;
-        var deg = m2[2] ? parseFloat(m2[2]) : 0;
-        var min3 = m2[3] ? parseFloat(m2[3]) / 60 : 0;
-        var sec = m2[4] ? parseFloat(m2[4]) / 3600 : 0;
-        var sign2 = deg < 0 ? -1 : 1;
-        if (dim === "S" || dim === "W") sign2 *= -1;
-        return {
-          val: (Math.abs(deg) + min3 + sec) * sign2,
-          dim,
-          matched,
-          remain: input.slice(matched.length)
-        };
-      }
-      function pair3(input, dims) {
-        input = input.trim();
-        var one2 = search(input, dims);
-        if (!one2) return null;
-        input = one2.remain.trim();
-        var two = search(input, dims);
-        if (!two || two.remain) return null;
-        if (one2.dim) {
-          return swapdim(one2.val, two.val, one2.dim);
-        } else {
-          return [one2.val, two.val];
-        }
-      }
-      function swapdim(a2, b2, dim) {
-        if (dim === "N" || dim === "S") return [a2, b2];
-        if (dim === "W" || dim === "E") return [b2, a2];
-      }
-    }
-  });
-
-  // node_modules/polygon-clipping/dist/polygon-clipping.umd.js
-  var require_polygon_clipping_umd = __commonJS({
-    "node_modules/polygon-clipping/dist/polygon-clipping.umd.js"(exports2, module2) {
-      (function(global2, factory) {
-        typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.polygonClipping = factory());
-      })(exports2, function() {
-        "use strict";
-        function __generator(thisArg, body) {
-          var _2 = {
-            label: 0,
-            sent: function() {
-              if (t2[0] & 1) throw t2[1];
-              return t2[1];
-            },
-            trys: [],
-            ops: []
-          }, f2, y2, t2, g3;
-          return g3 = {
-            next: verb(0),
-            "throw": verb(1),
-            "return": verb(2)
-          }, typeof Symbol === "function" && (g3[Symbol.iterator] = function() {
+          return false;
+        },
+        load: function(data) {
+          if (!(data && data.length)) return this;
+          if (data.length < this._minEntries) {
+            for (var i3 = 0, len = data.length; i3 < len; i3++) {
+              this.insert(data[i3]);
+            }
             return this;
-          }), g3;
-          function verb(n3) {
-            return function(v2) {
-              return step([n3, v2]);
-            };
           }
-          function step(op) {
-            if (f2) throw new TypeError("Generator is already executing.");
-            while (_2) try {
-              if (f2 = 1, y2 && (t2 = op[0] & 2 ? y2["return"] : op[0] ? y2["throw"] || ((t2 = y2["return"]) && t2.call(y2), 0) : y2.next) && !(t2 = t2.call(y2, op[1])).done) return t2;
-              if (y2 = 0, t2) op = [op[0] & 2, t2.value];
-              switch (op[0]) {
-                case 0:
-                case 1:
-                  t2 = op;
-                  break;
-                case 4:
-                  _2.label++;
-                  return {
-                    value: op[1],
-                    done: false
-                  };
-                case 5:
-                  _2.label++;
-                  y2 = op[1];
-                  op = [0];
-                  continue;
-                case 7:
-                  op = _2.ops.pop();
-                  _2.trys.pop();
-                  continue;
-                default:
-                  if (!(t2 = _2.trys, t2 = t2.length > 0 && t2[t2.length - 1]) && (op[0] === 6 || op[0] === 2)) {
-                    _2 = 0;
-                    continue;
-                  }
-                  if (op[0] === 3 && (!t2 || op[1] > t2[0] && op[1] < t2[3])) {
-                    _2.label = op[1];
-                    break;
-                  }
-                  if (op[0] === 6 && _2.label < t2[1]) {
-                    _2.label = t2[1];
-                    t2 = op;
-                    break;
-                  }
-                  if (t2 && _2.label < t2[2]) {
-                    _2.label = t2[2];
-                    _2.ops.push(op);
-                    break;
-                  }
-                  if (t2[2]) _2.ops.pop();
-                  _2.trys.pop();
-                  continue;
-              }
-              op = body.call(thisArg, _2);
-            } catch (e3) {
-              op = [6, e3];
-              y2 = 0;
-            } finally {
-              f2 = t2 = 0;
+          var node = this._build(data.slice(), 0, data.length - 1, 0);
+          if (!this.data.children.length) {
+            this.data = node;
+          } else if (this.data.height === node.height) {
+            this._splitRoot(this.data, node);
+          } else {
+            if (this.data.height < node.height) {
+              var tmpNode = this.data;
+              this.data = node;
+              node = tmpNode;
             }
-            if (op[0] & 5) throw op[1];
-            return {
-              value: op[0] ? op[1] : void 0,
-              done: true
-            };
+            this._insert(node, this.data.height - node.height - 1, true);
           }
-        }
-        var Node = (
-          /** @class */
-          /* @__PURE__ */ function() {
-            function Node2(key, data) {
-              this.next = null;
-              this.key = key;
-              this.data = data;
-              this.left = null;
-              this.right = null;
+          return this;
+        },
+        insert: function(item) {
+          if (item) this._insert(item, this.data.height - 1);
+          return this;
+        },
+        clear: function() {
+          this.data = createNode2([]);
+          return this;
+        },
+        remove: function(item, equalsFn) {
+          if (!item) return this;
+          var node = this.data, bbox2 = this.toBBox(item), path = [], indexes = [], i3, parent, index, goingUp;
+          while (node || path.length) {
+            if (!node) {
+              node = path.pop();
+              parent = path[path.length - 1];
+              i3 = indexes.pop();
+              goingUp = true;
             }
-            return Node2;
-          }()
-        );
-        function DEFAULT_COMPARE(a2, b2) {
-          return a2 > b2 ? 1 : a2 < b2 ? -1 : 0;
-        }
-        function splay(i3, t2, comparator) {
-          var N2 = new Node(null, null);
-          var l2 = N2;
-          var r2 = N2;
-          while (true) {
-            var cmp2 = comparator(i3, t2.key);
-            if (cmp2 < 0) {
-              if (t2.left === null) break;
-              if (comparator(i3, t2.left.key) < 0) {
-                var y2 = t2.left;
-                t2.left = y2.right;
-                y2.right = t2;
-                t2 = y2;
-                if (t2.left === null) break;
-              }
-              r2.left = t2;
-              r2 = t2;
-              t2 = t2.left;
-            } else if (cmp2 > 0) {
-              if (t2.right === null) break;
-              if (comparator(i3, t2.right.key) > 0) {
-                var y2 = t2.right;
-                t2.right = y2.left;
-                y2.left = t2;
-                t2 = y2;
-                if (t2.right === null) break;
+            if (node.leaf) {
+              index = findItem2(item, node.children, equalsFn);
+              if (index !== -1) {
+                node.children.splice(index, 1);
+                path.push(node);
+                this._condense(path);
+                return this;
               }
-              l2.right = t2;
-              l2 = t2;
-              t2 = t2.right;
-            } else break;
+            }
+            if (!goingUp && !node.leaf && contains2(node, bbox2)) {
+              path.push(node);
+              indexes.push(i3);
+              i3 = 0;
+              parent = node;
+              node = node.children[0];
+            } else if (parent) {
+              i3++;
+              node = parent.children[i3];
+              goingUp = false;
+            } else node = null;
           }
-          l2.right = t2.left;
-          r2.left = t2.right;
-          t2.left = N2.right;
-          t2.right = N2.left;
-          return t2;
-        }
-        function insert(i3, data, t2, comparator) {
-          var node = new Node(i3, data);
-          if (t2 === null) {
-            node.left = node.right = null;
+          return this;
+        },
+        toBBox: function(item) {
+          return item;
+        },
+        compareMinX: compareNodeMinX2,
+        compareMinY: compareNodeMinY2,
+        toJSON: function() {
+          return this.data;
+        },
+        fromJSON: function(data) {
+          this.data = data;
+          return this;
+        },
+        _all: function(node, result) {
+          var nodesToSearch = [];
+          while (node) {
+            if (node.leaf) result.push.apply(result, node.children);
+            else nodesToSearch.push.apply(nodesToSearch, node.children);
+            node = nodesToSearch.pop();
+          }
+          return result;
+        },
+        _build: function(items, left, right, height) {
+          var N2 = right - left + 1, M2 = this._maxEntries, node;
+          if (N2 <= M2) {
+            node = createNode2(items.slice(left, right + 1));
+            calcBBox2(node, this.toBBox);
             return node;
           }
-          t2 = splay(i3, t2, comparator);
-          var cmp2 = comparator(i3, t2.key);
-          if (cmp2 < 0) {
-            node.left = t2.left;
-            node.right = t2;
-            t2.left = null;
-          } else if (cmp2 >= 0) {
-            node.right = t2.right;
-            node.left = t2;
-            t2.right = null;
+          if (!height) {
+            height = Math.ceil(Math.log(N2) / Math.log(M2));
+            M2 = Math.ceil(N2 / Math.pow(M2, height - 1));
           }
-          return node;
-        }
-        function split(key, v2, comparator) {
-          var left = null;
-          var right = null;
-          if (v2) {
-            v2 = splay(key, v2, comparator);
-            var cmp2 = comparator(v2.key, key);
-            if (cmp2 === 0) {
-              left = v2.left;
-              right = v2.right;
-            } else if (cmp2 < 0) {
-              right = v2.right;
-              v2.right = null;
-              left = v2;
-            } else {
-              left = v2.left;
-              v2.left = null;
-              right = v2;
+          node = createNode2([]);
+          node.leaf = false;
+          node.height = height;
+          var N22 = Math.ceil(N2 / M2), N1 = N22 * Math.ceil(Math.sqrt(M2)), i3, j2, right2, right3;
+          multiSelect2(items, left, right, N1, this.compareMinX);
+          for (i3 = left; i3 <= right; i3 += N1) {
+            right2 = Math.min(i3 + N1 - 1, right);
+            multiSelect2(items, i3, right2, N22, this.compareMinY);
+            for (j2 = i3; j2 <= right2; j2 += N22) {
+              right3 = Math.min(j2 + N22 - 1, right2);
+              node.children.push(this._build(items, j2, right3, height - 1));
             }
           }
-          return {
-            left,
-            right
-          };
-        }
-        function merge2(left, right, comparator) {
-          if (right === null) return left;
-          if (left === null) return right;
-          right = splay(left.key, right, comparator);
-          right.left = left;
-          return right;
-        }
-        function printRow(root3, prefix, isTail, out, printNode) {
-          if (root3) {
-            out("" + prefix + (isTail ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ") + printNode(root3) + "\n");
-            var indent = prefix + (isTail ? "    " : "\u2502   ");
-            if (root3.left) printRow(root3.left, indent, false, out, printNode);
-            if (root3.right) printRow(root3.right, indent, true, out, printNode);
-          }
-        }
-        var Tree = (
-          /** @class */
-          function() {
-            function Tree2(comparator) {
-              if (comparator === void 0) {
-                comparator = DEFAULT_COMPARE;
-              }
-              this._root = null;
-              this._size = 0;
-              this._comparator = comparator;
-            }
-            Tree2.prototype.insert = function(key, data) {
-              this._size++;
-              return this._root = insert(key, data, this._root, this._comparator);
-            };
-            Tree2.prototype.add = function(key, data) {
-              var node = new Node(key, data);
-              if (this._root === null) {
-                node.left = node.right = null;
-                this._size++;
-                this._root = node;
-              }
-              var comparator = this._comparator;
-              var t2 = splay(key, this._root, comparator);
-              var cmp2 = comparator(key, t2.key);
-              if (cmp2 === 0) this._root = t2;
-              else {
-                if (cmp2 < 0) {
-                  node.left = t2.left;
-                  node.right = t2;
-                  t2.left = null;
-                } else if (cmp2 > 0) {
-                  node.right = t2.right;
-                  node.left = t2;
-                  t2.right = null;
-                }
-                this._size++;
-                this._root = node;
-              }
-              return this._root;
-            };
-            Tree2.prototype.remove = function(key) {
-              this._root = this._remove(key, this._root, this._comparator);
-            };
-            Tree2.prototype._remove = function(i3, t2, comparator) {
-              var x2;
-              if (t2 === null) return null;
-              t2 = splay(i3, t2, comparator);
-              var cmp2 = comparator(i3, t2.key);
-              if (cmp2 === 0) {
-                if (t2.left === null) {
-                  x2 = t2.right;
-                } else {
-                  x2 = splay(i3, t2.left, comparator);
-                  x2.right = t2.right;
-                }
-                this._size--;
-                return x2;
-              }
-              return t2;
-            };
-            Tree2.prototype.pop = function() {
-              var node = this._root;
-              if (node) {
-                while (node.left) node = node.left;
-                this._root = splay(node.key, this._root, this._comparator);
-                this._root = this._remove(node.key, this._root, this._comparator);
-                return {
-                  key: node.key,
-                  data: node.data
-                };
-              }
-              return null;
-            };
-            Tree2.prototype.findStatic = function(key) {
-              var current = this._root;
-              var compare2 = this._comparator;
-              while (current) {
-                var cmp2 = compare2(key, current.key);
-                if (cmp2 === 0) return current;
-                else if (cmp2 < 0) current = current.left;
-                else current = current.right;
-              }
-              return null;
-            };
-            Tree2.prototype.find = function(key) {
-              if (this._root) {
-                this._root = splay(key, this._root, this._comparator);
-                if (this._comparator(key, this._root.key) !== 0) return null;
-              }
-              return this._root;
-            };
-            Tree2.prototype.contains = function(key) {
-              var current = this._root;
-              var compare2 = this._comparator;
-              while (current) {
-                var cmp2 = compare2(key, current.key);
-                if (cmp2 === 0) return true;
-                else if (cmp2 < 0) current = current.left;
-                else current = current.right;
-              }
-              return false;
-            };
-            Tree2.prototype.forEach = function(visitor, ctx) {
-              var current = this._root;
-              var Q2 = [];
-              var done = false;
-              while (!done) {
-                if (current !== null) {
-                  Q2.push(current);
-                  current = current.left;
-                } else {
-                  if (Q2.length !== 0) {
-                    current = Q2.pop();
-                    visitor.call(ctx, current);
-                    current = current.right;
-                  } else done = true;
-                }
-              }
-              return this;
-            };
-            Tree2.prototype.range = function(low, high, fn, ctx) {
-              var Q2 = [];
-              var compare2 = this._comparator;
-              var node = this._root;
-              var cmp2;
-              while (Q2.length !== 0 || node) {
-                if (node) {
-                  Q2.push(node);
-                  node = node.left;
-                } else {
-                  node = Q2.pop();
-                  cmp2 = compare2(node.key, high);
-                  if (cmp2 > 0) {
-                    break;
-                  } else if (compare2(node.key, low) >= 0) {
-                    if (fn.call(ctx, node)) return this;
-                  }
-                  node = node.right;
-                }
-              }
-              return this;
-            };
-            Tree2.prototype.keys = function() {
-              var keys2 = [];
-              this.forEach(function(_a3) {
-                var key = _a3.key;
-                return keys2.push(key);
-              });
-              return keys2;
-            };
-            Tree2.prototype.values = function() {
-              var values = [];
-              this.forEach(function(_a3) {
-                var data = _a3.data;
-                return values.push(data);
-              });
-              return values;
-            };
-            Tree2.prototype.min = function() {
-              if (this._root) return this.minNode(this._root).key;
-              return null;
-            };
-            Tree2.prototype.max = function() {
-              if (this._root) return this.maxNode(this._root).key;
-              return null;
-            };
-            Tree2.prototype.minNode = function(t2) {
-              if (t2 === void 0) {
-                t2 = this._root;
-              }
-              if (t2) while (t2.left) t2 = t2.left;
-              return t2;
-            };
-            Tree2.prototype.maxNode = function(t2) {
-              if (t2 === void 0) {
-                t2 = this._root;
-              }
-              if (t2) while (t2.right) t2 = t2.right;
-              return t2;
-            };
-            Tree2.prototype.at = function(index2) {
-              var current = this._root;
-              var done = false;
-              var i3 = 0;
-              var Q2 = [];
-              while (!done) {
-                if (current) {
-                  Q2.push(current);
-                  current = current.left;
-                } else {
-                  if (Q2.length > 0) {
-                    current = Q2.pop();
-                    if (i3 === index2) return current;
-                    i3++;
-                    current = current.right;
-                  } else done = true;
-                }
-              }
-              return null;
-            };
-            Tree2.prototype.next = function(d2) {
-              var root3 = this._root;
-              var successor = null;
-              if (d2.right) {
-                successor = d2.right;
-                while (successor.left) successor = successor.left;
-                return successor;
-              }
-              var comparator = this._comparator;
-              while (root3) {
-                var cmp2 = comparator(d2.key, root3.key);
-                if (cmp2 === 0) break;
-                else if (cmp2 < 0) {
-                  successor = root3;
-                  root3 = root3.left;
-                } else root3 = root3.right;
-              }
-              return successor;
-            };
-            Tree2.prototype.prev = function(d2) {
-              var root3 = this._root;
-              var predecessor = null;
-              if (d2.left !== null) {
-                predecessor = d2.left;
-                while (predecessor.right) predecessor = predecessor.right;
-                return predecessor;
-              }
-              var comparator = this._comparator;
-              while (root3) {
-                var cmp2 = comparator(d2.key, root3.key);
-                if (cmp2 === 0) break;
-                else if (cmp2 < 0) root3 = root3.left;
-                else {
-                  predecessor = root3;
-                  root3 = root3.right;
+          calcBBox2(node, this.toBBox);
+          return node;
+        },
+        _chooseSubtree: function(bbox2, node, level, path) {
+          var i3, len, child, targetNode, area, enlargement, minArea, minEnlargement;
+          while (true) {
+            path.push(node);
+            if (node.leaf || path.length - 1 === level) break;
+            minArea = minEnlargement = Infinity;
+            for (i3 = 0, len = node.children.length; i3 < len; i3++) {
+              child = node.children[i3];
+              area = bboxArea2(child);
+              enlargement = enlargedArea2(bbox2, child) - area;
+              if (enlargement < minEnlargement) {
+                minEnlargement = enlargement;
+                minArea = area < minArea ? area : minArea;
+                targetNode = child;
+              } else if (enlargement === minEnlargement) {
+                if (area < minArea) {
+                  minArea = area;
+                  targetNode = child;
                 }
               }
-              return predecessor;
-            };
-            Tree2.prototype.clear = function() {
-              this._root = null;
-              this._size = 0;
-              return this;
-            };
-            Tree2.prototype.toList = function() {
-              return toList(this._root);
-            };
-            Tree2.prototype.load = function(keys2, values, presort) {
-              if (values === void 0) {
-                values = [];
-              }
-              if (presort === void 0) {
-                presort = false;
-              }
-              var size = keys2.length;
-              var comparator = this._comparator;
-              if (presort) sort(keys2, values, 0, size - 1, comparator);
-              if (this._root === null) {
-                this._root = loadRecursive(keys2, values, 0, size);
-                this._size = size;
-              } else {
-                var mergedList = mergeLists(this.toList(), createList(keys2, values), comparator);
-                size = this._size + size;
-                this._root = sortedListToBST({
-                  head: mergedList
-                }, 0, size);
-              }
-              return this;
-            };
-            Tree2.prototype.isEmpty = function() {
-              return this._root === null;
-            };
-            Object.defineProperty(Tree2.prototype, "size", {
-              get: function() {
-                return this._size;
-              },
-              enumerable: true,
-              configurable: true
-            });
-            Object.defineProperty(Tree2.prototype, "root", {
-              get: function() {
-                return this._root;
-              },
-              enumerable: true,
-              configurable: true
-            });
-            Tree2.prototype.toString = function(printNode) {
-              if (printNode === void 0) {
-                printNode = function(n3) {
-                  return String(n3.key);
-                };
-              }
-              var out = [];
-              printRow(this._root, "", true, function(v2) {
-                return out.push(v2);
-              }, printNode);
-              return out.join("");
-            };
-            Tree2.prototype.update = function(key, newKey, newData) {
-              var comparator = this._comparator;
-              var _a3 = split(key, this._root, comparator), left = _a3.left, right = _a3.right;
-              if (comparator(key, newKey) < 0) {
-                right = insert(newKey, newData, right, comparator);
-              } else {
-                left = insert(newKey, newData, left, comparator);
-              }
-              this._root = merge2(left, right, comparator);
-            };
-            Tree2.prototype.split = function(key) {
-              return split(key, this._root, this._comparator);
-            };
-            Tree2.prototype[Symbol.iterator] = function() {
-              var current, Q2, done;
-              return __generator(this, function(_a3) {
-                switch (_a3.label) {
-                  case 0:
-                    current = this._root;
-                    Q2 = [];
-                    done = false;
-                    _a3.label = 1;
-                  case 1:
-                    if (!!done) return [3, 6];
-                    if (!(current !== null)) return [3, 2];
-                    Q2.push(current);
-                    current = current.left;
-                    return [3, 5];
-                  case 2:
-                    if (!(Q2.length !== 0)) return [3, 4];
-                    current = Q2.pop();
-                    return [4, current];
-                  case 3:
-                    _a3.sent();
-                    current = current.right;
-                    return [3, 5];
-                  case 4:
-                    done = true;
-                    _a3.label = 5;
-                  case 5:
-                    return [3, 1];
-                  case 6:
-                    return [
-                      2
-                      /*return*/
-                    ];
-                }
-              });
-            };
-            return Tree2;
-          }()
-        );
-        function loadRecursive(keys2, values, start2, end) {
-          var size = end - start2;
-          if (size > 0) {
-            var middle = start2 + Math.floor(size / 2);
-            var key = keys2[middle];
-            var data = values[middle];
-            var node = new Node(key, data);
-            node.left = loadRecursive(keys2, values, start2, middle);
-            node.right = loadRecursive(keys2, values, middle + 1, end);
-            return node;
+            }
+            node = targetNode || node.children[0];
           }
-          return null;
-        }
-        function createList(keys2, values) {
-          var head = new Node(null, null);
-          var p2 = head;
-          for (var i3 = 0; i3 < keys2.length; i3++) {
-            p2 = p2.next = new Node(keys2[i3], values[i3]);
+          return node;
+        },
+        _insert: function(item, level, isNode) {
+          var toBBox = this.toBBox, bbox2 = isNode ? item : toBBox(item), insertPath = [];
+          var node = this._chooseSubtree(bbox2, this.data, level, insertPath);
+          node.children.push(item);
+          extend3(node, bbox2);
+          while (level >= 0) {
+            if (insertPath[level].children.length > this._maxEntries) {
+              this._split(insertPath, level);
+              level--;
+            } else break;
           }
-          p2.next = null;
-          return head.next;
-        }
-        function toList(root3) {
-          var current = root3;
-          var Q2 = [];
-          var done = false;
-          var head = new Node(null, null);
-          var p2 = head;
-          while (!done) {
-            if (current) {
-              Q2.push(current);
-              current = current.left;
-            } else {
-              if (Q2.length > 0) {
-                current = p2 = p2.next = Q2.pop();
-                current = current.right;
-              } else done = true;
+          this._adjustParentBBoxes(bbox2, insertPath, level);
+        },
+        // split overflowed node into two
+        _split: function(insertPath, level) {
+          var node = insertPath[level], M2 = node.children.length, m2 = this._minEntries;
+          this._chooseSplitAxis(node, m2, M2);
+          var splitIndex = this._chooseSplitIndex(node, m2, M2);
+          var newNode = createNode2(node.children.splice(splitIndex, node.children.length - splitIndex));
+          newNode.height = node.height;
+          newNode.leaf = node.leaf;
+          calcBBox2(node, this.toBBox);
+          calcBBox2(newNode, this.toBBox);
+          if (level) insertPath[level - 1].children.push(newNode);
+          else this._splitRoot(node, newNode);
+        },
+        _splitRoot: function(node, newNode) {
+          this.data = createNode2([node, newNode]);
+          this.data.height = node.height + 1;
+          this.data.leaf = false;
+          calcBBox2(this.data, this.toBBox);
+        },
+        _chooseSplitIndex: function(node, m2, M2) {
+          var i3, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
+          minOverlap = minArea = Infinity;
+          for (i3 = m2; i3 <= M2 - m2; i3++) {
+            bbox1 = distBBox2(node, 0, i3, this.toBBox);
+            bbox2 = distBBox2(node, i3, M2, this.toBBox);
+            overlap = intersectionArea2(bbox1, bbox2);
+            area = bboxArea2(bbox1) + bboxArea2(bbox2);
+            if (overlap < minOverlap) {
+              minOverlap = overlap;
+              index = i3;
+              minArea = area < minArea ? area : minArea;
+            } else if (overlap === minOverlap) {
+              if (area < minArea) {
+                minArea = area;
+                index = i3;
+              }
             }
           }
-          p2.next = null;
-          return head.next;
-        }
-        function sortedListToBST(list2, start2, end) {
-          var size = end - start2;
-          if (size > 0) {
-            var middle = start2 + Math.floor(size / 2);
-            var left = sortedListToBST(list2, start2, middle);
-            var root3 = list2.head;
-            root3.left = left;
-            list2.head = list2.head.next;
-            root3.right = sortedListToBST(list2, middle + 1, end);
-            return root3;
-          }
-          return null;
-        }
-        function mergeLists(l1, l2, compare2) {
-          var head = new Node(null, null);
-          var p2 = head;
-          var p1 = l1;
-          var p22 = l2;
-          while (p1 !== null && p22 !== null) {
-            if (compare2(p1.key, p22.key) < 0) {
-              p2.next = p1;
-              p1 = p1.next;
-            } else {
-              p2.next = p22;
-              p22 = p22.next;
-            }
-            p2 = p2.next;
-          }
-          if (p1 !== null) {
-            p2.next = p1;
-          } else if (p22 !== null) {
-            p2.next = p22;
+          return index;
+        },
+        // sorts node children by the best axis for split
+        _chooseSplitAxis: function(node, m2, M2) {
+          var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX2, compareMinY = node.leaf ? this.compareMinY : compareNodeMinY2, xMargin = this._allDistMargin(node, m2, M2, compareMinX), yMargin = this._allDistMargin(node, m2, M2, compareMinY);
+          if (xMargin < yMargin) node.children.sort(compareMinX);
+        },
+        // total margin of all possible split distributions where each node is at least m full
+        _allDistMargin: function(node, m2, M2, compare2) {
+          node.children.sort(compare2);
+          var toBBox = this.toBBox, leftBBox = distBBox2(node, 0, m2, toBBox), rightBBox = distBBox2(node, M2 - m2, M2, toBBox), margin = bboxMargin2(leftBBox) + bboxMargin2(rightBBox), i3, child;
+          for (i3 = m2; i3 < M2 - m2; i3++) {
+            child = node.children[i3];
+            extend3(leftBBox, node.leaf ? toBBox(child) : child);
+            margin += bboxMargin2(leftBBox);
           }
-          return head.next;
-        }
-        function sort(keys2, values, left, right, compare2) {
-          if (left >= right) return;
-          var pivot = keys2[left + right >> 1];
-          var i3 = left - 1;
-          var j2 = right + 1;
-          while (true) {
-            do
-              i3++;
-            while (compare2(keys2[i3], pivot) < 0);
-            do
-              j2--;
-            while (compare2(keys2[j2], pivot) > 0);
-            if (i3 >= j2) break;
-            var tmp = keys2[i3];
-            keys2[i3] = keys2[j2];
-            keys2[j2] = tmp;
-            tmp = values[i3];
-            values[i3] = values[j2];
-            values[j2] = tmp;
+          for (i3 = M2 - m2 - 1; i3 >= m2; i3--) {
+            child = node.children[i3];
+            extend3(rightBBox, node.leaf ? toBBox(child) : child);
+            margin += bboxMargin2(rightBBox);
           }
-          sort(keys2, values, left, j2, compare2);
-          sort(keys2, values, j2 + 1, right, compare2);
-        }
-        const isInBbox2 = (bbox2, point) => {
-          return bbox2.ll.x <= point.x && point.x <= bbox2.ur.x && bbox2.ll.y <= point.y && point.y <= bbox2.ur.y;
-        };
-        const getBboxOverlap2 = (b1, b2) => {
-          if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null;
-          const lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;
-          const upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x;
-          const lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;
-          const upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y;
-          return {
-            ll: {
-              x: lowerX,
-              y: lowerY
-            },
-            ur: {
-              x: upperX,
-              y: upperY
-            }
-          };
-        };
-        let epsilon$1 = Number.EPSILON;
-        if (epsilon$1 === void 0) epsilon$1 = Math.pow(2, -52);
-        const EPSILON_SQ = epsilon$1 * epsilon$1;
-        const cmp = (a2, b2) => {
-          if (-epsilon$1 < a2 && a2 < epsilon$1) {
-            if (-epsilon$1 < b2 && b2 < epsilon$1) {
-              return 0;
-            }
+          return margin;
+        },
+        _adjustParentBBoxes: function(bbox2, path, level) {
+          for (var i3 = level; i3 >= 0; i3--) {
+            extend3(path[i3], bbox2);
           }
-          const ab = a2 - b2;
-          if (ab * ab < EPSILON_SQ * a2 * b2) {
-            return 0;
+        },
+        _condense: function(path) {
+          for (var i3 = path.length - 1, siblings; i3 >= 0; i3--) {
+            if (path[i3].children.length === 0) {
+              if (i3 > 0) {
+                siblings = path[i3 - 1].children;
+                siblings.splice(siblings.indexOf(path[i3]), 1);
+              } else this.clear();
+            } else calcBBox2(path[i3], this.toBBox);
           }
-          return a2 < b2 ? -1 : 1;
+        },
+        _initFormat: function(format2) {
+          var compareArr = ["return a", " - b", ";"];
+          this.compareMinX = new Function("a", "b", compareArr.join(format2[0]));
+          this.compareMinY = new Function("a", "b", compareArr.join(format2[1]));
+          this.toBBox = new Function(
+            "a",
+            "return {minX: a" + format2[0] + ", minY: a" + format2[1] + ", maxX: a" + format2[2] + ", maxY: a" + format2[3] + "};"
+          );
+        }
+      };
+      function findItem2(item, items, equalsFn) {
+        if (!equalsFn) return items.indexOf(item);
+        for (var i3 = 0; i3 < items.length; i3++) {
+          if (equalsFn(item, items[i3])) return i3;
+        }
+        return -1;
+      }
+      function calcBBox2(node, toBBox) {
+        distBBox2(node, 0, node.children.length, toBBox, node);
+      }
+      function distBBox2(node, k2, p2, toBBox, destNode) {
+        if (!destNode) destNode = createNode2(null);
+        destNode.minX = Infinity;
+        destNode.minY = Infinity;
+        destNode.maxX = -Infinity;
+        destNode.maxY = -Infinity;
+        for (var i3 = k2, child; i3 < p2; i3++) {
+          child = node.children[i3];
+          extend3(destNode, node.leaf ? toBBox(child) : child);
+        }
+        return destNode;
+      }
+      function extend3(a2, b2) {
+        a2.minX = Math.min(a2.minX, b2.minX);
+        a2.minY = Math.min(a2.minY, b2.minY);
+        a2.maxX = Math.max(a2.maxX, b2.maxX);
+        a2.maxY = Math.max(a2.maxY, b2.maxY);
+        return a2;
+      }
+      function compareNodeMinX2(a2, b2) {
+        return a2.minX - b2.minX;
+      }
+      function compareNodeMinY2(a2, b2) {
+        return a2.minY - b2.minY;
+      }
+      function bboxArea2(a2) {
+        return (a2.maxX - a2.minX) * (a2.maxY - a2.minY);
+      }
+      function bboxMargin2(a2) {
+        return a2.maxX - a2.minX + (a2.maxY - a2.minY);
+      }
+      function enlargedArea2(a2, b2) {
+        return (Math.max(b2.maxX, a2.maxX) - Math.min(b2.minX, a2.minX)) * (Math.max(b2.maxY, a2.maxY) - Math.min(b2.minY, a2.minY));
+      }
+      function intersectionArea2(a2, b2) {
+        var minX = Math.max(a2.minX, b2.minX), minY = Math.max(a2.minY, b2.minY), maxX = Math.min(a2.maxX, b2.maxX), maxY = Math.min(a2.maxY, b2.maxY);
+        return Math.max(0, maxX - minX) * Math.max(0, maxY - minY);
+      }
+      function contains2(a2, b2) {
+        return a2.minX <= b2.minX && a2.minY <= b2.minY && b2.maxX <= a2.maxX && b2.maxY <= a2.maxY;
+      }
+      function intersects2(a2, b2) {
+        return b2.minX <= a2.maxX && b2.minY <= a2.maxY && b2.maxX >= a2.minX && b2.maxY >= a2.minY;
+      }
+      function createNode2(children2) {
+        return {
+          children: children2,
+          height: 1,
+          leaf: true,
+          minX: Infinity,
+          minY: Infinity,
+          maxX: -Infinity,
+          maxY: -Infinity
         };
-        class PtRounder {
-          constructor() {
-            this.reset();
-          }
-          reset() {
-            this.xRounder = new CoordRounder();
-            this.yRounder = new CoordRounder();
-          }
-          round(x2, y2) {
-            return {
-              x: this.xRounder.round(x2),
-              y: this.yRounder.round(y2)
-            };
-          }
+      }
+      function multiSelect2(arr, left, right, n3, compare2) {
+        var stack = [left, right], mid;
+        while (stack.length) {
+          right = stack.pop();
+          left = stack.pop();
+          if (right - left <= n3) continue;
+          mid = left + Math.ceil((right - left) / n3 / 2) * n3;
+          quickselect3(arr, mid, left, right, compare2);
+          stack.push(left, mid, mid, right);
         }
-        class CoordRounder {
-          constructor() {
-            this.tree = new Tree();
-            this.round(0);
-          }
-          // Note: this can rounds input values backwards or forwards.
-          //       You might ask, why not restrict this to just rounding
-          //       forwards? Wouldn't that allow left endpoints to always
-          //       remain left endpoints during splitting (never change to
-          //       right). No - it wouldn't, because we snap intersections
-          //       to endpoints (to establish independence from the segment
-          //       angle for t-intersections).
-          round(coord2) {
-            const node = this.tree.add(coord2);
-            const prevNode = this.tree.prev(node);
-            if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {
-              this.tree.remove(coord2);
-              return prevNode.key;
-            }
-            const nextNode = this.tree.next(node);
-            if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {
-              this.tree.remove(coord2);
-              return nextNode.key;
+      }
+    }
+  });
+
+  // node_modules/lineclip/index.js
+  var require_lineclip = __commonJS({
+    "node_modules/lineclip/index.js"(exports2, module2) {
+      "use strict";
+      module2.exports = lineclip2;
+      lineclip2.polyline = lineclip2;
+      lineclip2.polygon = polygonclip2;
+      function lineclip2(points, bbox2, result) {
+        var len = points.length, codeA = bitCode2(points[0], bbox2), part = [], i3, a2, b2, codeB, lastCode;
+        if (!result) result = [];
+        for (i3 = 1; i3 < len; i3++) {
+          a2 = points[i3 - 1];
+          b2 = points[i3];
+          codeB = lastCode = bitCode2(b2, bbox2);
+          while (true) {
+            if (!(codeA | codeB)) {
+              part.push(a2);
+              if (codeB !== lastCode) {
+                part.push(b2);
+                if (i3 < len - 1) {
+                  result.push(part);
+                  part = [];
+                }
+              } else if (i3 === len - 1) {
+                part.push(b2);
+              }
+              break;
+            } else if (codeA & codeB) {
+              break;
+            } else if (codeA) {
+              a2 = intersect2(a2, b2, codeA, bbox2);
+              codeA = bitCode2(a2, bbox2);
+            } else {
+              b2 = intersect2(a2, b2, codeB, bbox2);
+              codeB = bitCode2(b2, bbox2);
             }
-            return coord2;
           }
+          codeA = lastCode;
         }
-        const rounder = new PtRounder();
-        const epsilon3 = 11102230246251565e-32;
-        const splitter = 134217729;
-        const resulterrbound = (3 + 8 * epsilon3) * epsilon3;
-        function sum(elen, e3, flen, f2, h2) {
-          let Q2, Qnew, hh, bvirt;
-          let enow = e3[0];
-          let fnow = f2[0];
-          let eindex = 0;
-          let findex = 0;
-          if (fnow > enow === fnow > -enow) {
-            Q2 = enow;
-            enow = e3[++eindex];
-          } else {
-            Q2 = fnow;
-            fnow = f2[++findex];
+        if (part.length) result.push(part);
+        return result;
+      }
+      function polygonclip2(points, bbox2) {
+        var result, edge, prev, prevInside, i3, p2, inside;
+        for (edge = 1; edge <= 8; edge *= 2) {
+          result = [];
+          prev = points[points.length - 1];
+          prevInside = !(bitCode2(prev, bbox2) & edge);
+          for (i3 = 0; i3 < points.length; i3++) {
+            p2 = points[i3];
+            inside = !(bitCode2(p2, bbox2) & edge);
+            if (inside !== prevInside) result.push(intersect2(prev, p2, edge, bbox2));
+            if (inside) result.push(p2);
+            prev = p2;
+            prevInside = inside;
           }
-          let hindex = 0;
-          if (eindex < elen && findex < flen) {
-            if (fnow > enow === fnow > -enow) {
-              Qnew = enow + Q2;
-              hh = Q2 - (Qnew - enow);
-              enow = e3[++eindex];
-            } else {
-              Qnew = fnow + Q2;
-              hh = Q2 - (Qnew - fnow);
-              fnow = f2[++findex];
-            }
-            Q2 = Qnew;
-            if (hh !== 0) {
-              h2[hindex++] = hh;
-            }
-            while (eindex < elen && findex < flen) {
-              if (fnow > enow === fnow > -enow) {
-                Qnew = Q2 + enow;
-                bvirt = Qnew - Q2;
-                hh = Q2 - (Qnew - bvirt) + (enow - bvirt);
-                enow = e3[++eindex];
-              } else {
-                Qnew = Q2 + fnow;
-                bvirt = Qnew - Q2;
-                hh = Q2 - (Qnew - bvirt) + (fnow - bvirt);
-                fnow = f2[++findex];
-              }
-              Q2 = Qnew;
-              if (hh !== 0) {
-                h2[hindex++] = hh;
-              }
+          points = result;
+          if (!points.length) break;
+        }
+        return result;
+      }
+      function intersect2(a2, b2, edge, bbox2) {
+        return edge & 8 ? [a2[0] + (b2[0] - a2[0]) * (bbox2[3] - a2[1]) / (b2[1] - a2[1]), bbox2[3]] : (
+          // top
+          edge & 4 ? [a2[0] + (b2[0] - a2[0]) * (bbox2[1] - a2[1]) / (b2[1] - a2[1]), bbox2[1]] : (
+            // bottom
+            edge & 2 ? [bbox2[2], a2[1] + (b2[1] - a2[1]) * (bbox2[2] - a2[0]) / (b2[0] - a2[0])] : (
+              // right
+              edge & 1 ? [bbox2[0], a2[1] + (b2[1] - a2[1]) * (bbox2[0] - a2[0]) / (b2[0] - a2[0])] : (
+                // left
+                null
+              )
+            )
+          )
+        );
+      }
+      function bitCode2(p2, bbox2) {
+        var code = 0;
+        if (p2[0] < bbox2[0]) code |= 1;
+        else if (p2[0] > bbox2[2]) code |= 2;
+        if (p2[1] < bbox2[1]) code |= 4;
+        else if (p2[1] > bbox2[3]) code |= 8;
+        return code;
+      }
+    }
+  });
+
+  // node_modules/which-polygon/index.js
+  var require_which_polygon = __commonJS({
+    "node_modules/which-polygon/index.js"(exports2, module2) {
+      "use strict";
+      var rbush = require_rbush();
+      var lineclip2 = require_lineclip();
+      module2.exports = whichPolygon5;
+      function whichPolygon5(data) {
+        var bboxes = [];
+        for (var i3 = 0; i3 < data.features.length; i3++) {
+          var feature3 = data.features[i3];
+          if (!feature3.geometry) continue;
+          var coords = feature3.geometry.coordinates;
+          if (feature3.geometry.type === "Polygon") {
+            bboxes.push(treeItem(coords, feature3.properties));
+          } else if (feature3.geometry.type === "MultiPolygon") {
+            for (var j2 = 0; j2 < coords.length; j2++) {
+              bboxes.push(treeItem(coords[j2], feature3.properties));
             }
           }
-          while (eindex < elen) {
-            Qnew = Q2 + enow;
-            bvirt = Qnew - Q2;
-            hh = Q2 - (Qnew - bvirt) + (enow - bvirt);
-            enow = e3[++eindex];
-            Q2 = Qnew;
-            if (hh !== 0) {
-              h2[hindex++] = hh;
+        }
+        var tree = rbush().load(bboxes);
+        function query(p2, multi) {
+          var output = [], result = tree.search({
+            minX: p2[0],
+            minY: p2[1],
+            maxX: p2[0],
+            maxY: p2[1]
+          });
+          for (var i4 = 0; i4 < result.length; i4++) {
+            if (insidePolygon(result[i4].coords, p2)) {
+              if (multi)
+                output.push(result[i4].props);
+              else
+                return result[i4].props;
             }
           }
-          while (findex < flen) {
-            Qnew = Q2 + fnow;
-            bvirt = Qnew - Q2;
-            hh = Q2 - (Qnew - bvirt) + (fnow - bvirt);
-            fnow = f2[++findex];
-            Q2 = Qnew;
-            if (hh !== 0) {
-              h2[hindex++] = hh;
+          return multi && output.length ? output : null;
+        }
+        query.tree = tree;
+        query.bbox = function queryBBox(bbox2) {
+          var output = [];
+          var result = tree.search({
+            minX: bbox2[0],
+            minY: bbox2[1],
+            maxX: bbox2[2],
+            maxY: bbox2[3]
+          });
+          for (var i4 = 0; i4 < result.length; i4++) {
+            if (polygonIntersectsBBox(result[i4].coords, bbox2)) {
+              output.push(result[i4].props);
             }
           }
-          if (Q2 !== 0 || hindex === 0) {
-            h2[hindex++] = Q2;
+          return output;
+        };
+        return query;
+      }
+      function polygonIntersectsBBox(polygon2, bbox2) {
+        var bboxCenter = [
+          (bbox2[0] + bbox2[2]) / 2,
+          (bbox2[1] + bbox2[3]) / 2
+        ];
+        if (insidePolygon(polygon2, bboxCenter)) return true;
+        for (var i3 = 0; i3 < polygon2.length; i3++) {
+          if (lineclip2(polygon2[i3], bbox2).length > 0) return true;
+        }
+        return false;
+      }
+      function insidePolygon(rings, p2) {
+        var inside = false;
+        for (var i3 = 0, len = rings.length; i3 < len; i3++) {
+          var ring = rings[i3];
+          for (var j2 = 0, len2 = ring.length, k2 = len2 - 1; j2 < len2; k2 = j2++) {
+            if (rayIntersect(p2, ring[j2], ring[k2])) inside = !inside;
           }
-          return hindex;
         }
-        function estimate(elen, e3) {
-          let Q2 = e3[0];
-          for (let i3 = 1; i3 < elen; i3++) Q2 += e3[i3];
-          return Q2;
+        return inside;
+      }
+      function rayIntersect(p2, p1, p22) {
+        return p1[1] > p2[1] !== p22[1] > p2[1] && p2[0] < (p22[0] - p1[0]) * (p2[1] - p1[1]) / (p22[1] - p1[1]) + p1[0];
+      }
+      function treeItem(coords, props) {
+        var item = {
+          minX: Infinity,
+          minY: Infinity,
+          maxX: -Infinity,
+          maxY: -Infinity,
+          coords,
+          props
+        };
+        for (var i3 = 0; i3 < coords[0].length; i3++) {
+          var p2 = coords[0][i3];
+          item.minX = Math.min(item.minX, p2[0]);
+          item.minY = Math.min(item.minY, p2[1]);
+          item.maxX = Math.max(item.maxX, p2[0]);
+          item.maxY = Math.max(item.maxY, p2[1]);
         }
-        function vec(n3) {
-          return new Float64Array(n3);
+        return item;
+      }
+    }
+  });
+
+  // node_modules/wgs84/index.js
+  var require_wgs84 = __commonJS({
+    "node_modules/wgs84/index.js"(exports2, module2) {
+      module2.exports.RADIUS = 6378137;
+      module2.exports.FLATTENING = 1 / 298.257223563;
+      module2.exports.POLAR_RADIUS = 63567523142e-4;
+    }
+  });
+
+  // node_modules/@mapbox/geojson-area/index.js
+  var require_geojson_area = __commonJS({
+    "node_modules/@mapbox/geojson-area/index.js"(exports2, module2) {
+      var wgs84 = require_wgs84();
+      module2.exports.geometry = geometry;
+      module2.exports.ring = ringArea;
+      function geometry(_2) {
+        var area = 0, i3;
+        switch (_2.type) {
+          case "Polygon":
+            return polygonArea(_2.coordinates);
+          case "MultiPolygon":
+            for (i3 = 0; i3 < _2.coordinates.length; i3++) {
+              area += polygonArea(_2.coordinates[i3]);
+            }
+            return area;
+          case "Point":
+          case "MultiPoint":
+          case "LineString":
+          case "MultiLineString":
+            return 0;
+          case "GeometryCollection":
+            for (i3 = 0; i3 < _2.geometries.length; i3++) {
+              area += geometry(_2.geometries[i3]);
+            }
+            return area;
         }
-        const ccwerrboundA = (3 + 16 * epsilon3) * epsilon3;
-        const ccwerrboundB = (2 + 12 * epsilon3) * epsilon3;
-        const ccwerrboundC = (9 + 64 * epsilon3) * epsilon3 * epsilon3;
-        const B2 = vec(4);
-        const C1 = vec(8);
-        const C2 = vec(12);
-        const D2 = vec(16);
-        const u2 = vec(4);
-        function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {
-          let acxtail, acytail, bcxtail, bcytail;
-          let bvirt, c2, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
-          const acx = ax - cx;
-          const bcx = bx - cx;
-          const acy = ay - cy;
-          const bcy = by - cy;
-          s1 = acx * bcy;
-          c2 = splitter * acx;
-          ahi = c2 - (c2 - acx);
-          alo = acx - ahi;
-          c2 = splitter * bcy;
-          bhi = c2 - (c2 - bcy);
-          blo = bcy - bhi;
-          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
-          t1 = acy * bcx;
-          c2 = splitter * acy;
-          ahi = c2 - (c2 - acy);
-          alo = acy - ahi;
-          c2 = splitter * bcx;
-          bhi = c2 - (c2 - bcx);
-          blo = bcx - bhi;
-          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
-          _i = s0 - t0;
-          bvirt = s0 - _i;
-          B2[0] = s0 - (_i + bvirt) + (bvirt - t0);
-          _j = s1 + _i;
-          bvirt = _j - s1;
-          _0 = s1 - (_j - bvirt) + (_i - bvirt);
-          _i = _0 - t1;
-          bvirt = _0 - _i;
-          B2[1] = _0 - (_i + bvirt) + (bvirt - t1);
-          u3 = _j + _i;
-          bvirt = u3 - _j;
-          B2[2] = _j - (u3 - bvirt) + (_i - bvirt);
-          B2[3] = u3;
-          let det = estimate(4, B2);
-          let errbound = ccwerrboundB * detsum;
-          if (det >= errbound || -det >= errbound) {
-            return det;
+      }
+      function polygonArea(coords) {
+        var area = 0;
+        if (coords && coords.length > 0) {
+          area += Math.abs(ringArea(coords[0]));
+          for (var i3 = 1; i3 < coords.length; i3++) {
+            area -= Math.abs(ringArea(coords[i3]));
           }
-          bvirt = ax - acx;
-          acxtail = ax - (acx + bvirt) + (bvirt - cx);
-          bvirt = bx - bcx;
-          bcxtail = bx - (bcx + bvirt) + (bvirt - cx);
-          bvirt = ay - acy;
-          acytail = ay - (acy + bvirt) + (bvirt - cy);
-          bvirt = by - bcy;
-          bcytail = by - (bcy + bvirt) + (bvirt - cy);
-          if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {
-            return det;
+        }
+        return area;
+      }
+      function ringArea(coords) {
+        var p1, p2, p3, lowerIndex, middleIndex, upperIndex, i3, area = 0, coordsLength = coords.length;
+        if (coordsLength > 2) {
+          for (i3 = 0; i3 < coordsLength; i3++) {
+            if (i3 === coordsLength - 2) {
+              lowerIndex = coordsLength - 2;
+              middleIndex = coordsLength - 1;
+              upperIndex = 0;
+            } else if (i3 === coordsLength - 1) {
+              lowerIndex = coordsLength - 1;
+              middleIndex = 0;
+              upperIndex = 1;
+            } else {
+              lowerIndex = i3;
+              middleIndex = i3 + 1;
+              upperIndex = i3 + 2;
+            }
+            p1 = coords[lowerIndex];
+            p2 = coords[middleIndex];
+            p3 = coords[upperIndex];
+            area += (rad(p3[0]) - rad(p1[0])) * Math.sin(rad(p2[1]));
           }
-          errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);
-          det += acx * bcytail + bcy * acxtail - (acy * bcxtail + bcx * acytail);
-          if (det >= errbound || -det >= errbound) return det;
-          s1 = acxtail * bcy;
-          c2 = splitter * acxtail;
-          ahi = c2 - (c2 - acxtail);
-          alo = acxtail - ahi;
-          c2 = splitter * bcy;
-          bhi = c2 - (c2 - bcy);
-          blo = bcy - bhi;
-          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
-          t1 = acytail * bcx;
-          c2 = splitter * acytail;
-          ahi = c2 - (c2 - acytail);
-          alo = acytail - ahi;
-          c2 = splitter * bcx;
-          bhi = c2 - (c2 - bcx);
-          blo = bcx - bhi;
-          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
-          _i = s0 - t0;
-          bvirt = s0 - _i;
-          u2[0] = s0 - (_i + bvirt) + (bvirt - t0);
-          _j = s1 + _i;
-          bvirt = _j - s1;
-          _0 = s1 - (_j - bvirt) + (_i - bvirt);
-          _i = _0 - t1;
-          bvirt = _0 - _i;
-          u2[1] = _0 - (_i + bvirt) + (bvirt - t1);
-          u3 = _j + _i;
-          bvirt = u3 - _j;
-          u2[2] = _j - (u3 - bvirt) + (_i - bvirt);
-          u2[3] = u3;
-          const C1len = sum(4, B2, 4, u2, C1);
-          s1 = acx * bcytail;
-          c2 = splitter * acx;
-          ahi = c2 - (c2 - acx);
-          alo = acx - ahi;
-          c2 = splitter * bcytail;
-          bhi = c2 - (c2 - bcytail);
-          blo = bcytail - bhi;
-          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
-          t1 = acy * bcxtail;
-          c2 = splitter * acy;
-          ahi = c2 - (c2 - acy);
-          alo = acy - ahi;
-          c2 = splitter * bcxtail;
-          bhi = c2 - (c2 - bcxtail);
-          blo = bcxtail - bhi;
-          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
-          _i = s0 - t0;
-          bvirt = s0 - _i;
-          u2[0] = s0 - (_i + bvirt) + (bvirt - t0);
-          _j = s1 + _i;
-          bvirt = _j - s1;
-          _0 = s1 - (_j - bvirt) + (_i - bvirt);
-          _i = _0 - t1;
-          bvirt = _0 - _i;
-          u2[1] = _0 - (_i + bvirt) + (bvirt - t1);
-          u3 = _j + _i;
-          bvirt = u3 - _j;
-          u2[2] = _j - (u3 - bvirt) + (_i - bvirt);
-          u2[3] = u3;
-          const C2len = sum(C1len, C1, 4, u2, C2);
-          s1 = acxtail * bcytail;
-          c2 = splitter * acxtail;
-          ahi = c2 - (c2 - acxtail);
-          alo = acxtail - ahi;
-          c2 = splitter * bcytail;
-          bhi = c2 - (c2 - bcytail);
-          blo = bcytail - bhi;
-          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
-          t1 = acytail * bcxtail;
-          c2 = splitter * acytail;
-          ahi = c2 - (c2 - acytail);
-          alo = acytail - ahi;
-          c2 = splitter * bcxtail;
-          bhi = c2 - (c2 - bcxtail);
-          blo = bcxtail - bhi;
-          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
-          _i = s0 - t0;
-          bvirt = s0 - _i;
-          u2[0] = s0 - (_i + bvirt) + (bvirt - t0);
-          _j = s1 + _i;
-          bvirt = _j - s1;
-          _0 = s1 - (_j - bvirt) + (_i - bvirt);
-          _i = _0 - t1;
-          bvirt = _0 - _i;
-          u2[1] = _0 - (_i + bvirt) + (bvirt - t1);
-          u3 = _j + _i;
-          bvirt = u3 - _j;
-          u2[2] = _j - (u3 - bvirt) + (_i - bvirt);
-          u2[3] = u3;
-          const Dlen = sum(C2len, C2, 4, u2, D2);
-          return D2[Dlen - 1];
+          area = area * wgs84.RADIUS * wgs84.RADIUS / 2;
         }
-        function orient2d(ax, ay, bx, by, cx, cy) {
-          const detleft = (ay - cy) * (bx - cx);
-          const detright = (ax - cx) * (by - cy);
-          const det = detleft - detright;
-          const detsum = Math.abs(detleft + detright);
-          if (Math.abs(det) >= ccwerrboundA * detsum) return det;
-          return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);
+        return area;
+      }
+      function rad(_2) {
+        return _2 * Math.PI / 180;
+      }
+    }
+  });
+
+  // node_modules/circle-to-polygon/input-validation/validateCenter.js
+  var require_validateCenter = __commonJS({
+    "node_modules/circle-to-polygon/input-validation/validateCenter.js"(exports2) {
+      exports2.validateCenter = function validateCenter(center) {
+        var validCenterLengths = [2, 3];
+        if (!Array.isArray(center) || !validCenterLengths.includes(center.length)) {
+          throw new Error("ERROR! Center has to be an array of length two or three");
         }
-        const crossProduct2 = (a2, b2) => a2.x * b2.y - a2.y * b2.x;
-        const dotProduct2 = (a2, b2) => a2.x * b2.x + a2.y * b2.y;
-        const compareVectorAngles = (basePt, endPt1, endPt2) => {
-          const res = orient2d(basePt.x, basePt.y, endPt1.x, endPt1.y, endPt2.x, endPt2.y);
-          if (res > 0) return -1;
-          if (res < 0) return 1;
-          return 0;
-        };
-        const length2 = (v2) => Math.sqrt(dotProduct2(v2, v2));
-        const sineOfAngle2 = (pShared, pBase, pAngle) => {
-          const vBase = {
-            x: pBase.x - pShared.x,
-            y: pBase.y - pShared.y
-          };
-          const vAngle = {
-            x: pAngle.x - pShared.x,
-            y: pAngle.y - pShared.y
-          };
-          return crossProduct2(vAngle, vBase) / length2(vAngle) / length2(vBase);
-        };
-        const cosineOfAngle2 = (pShared, pBase, pAngle) => {
-          const vBase = {
-            x: pBase.x - pShared.x,
-            y: pBase.y - pShared.y
-          };
-          const vAngle = {
-            x: pAngle.x - pShared.x,
-            y: pAngle.y - pShared.y
-          };
-          return dotProduct2(vAngle, vBase) / length2(vAngle) / length2(vBase);
-        };
-        const horizontalIntersection2 = (pt2, v2, y2) => {
-          if (v2.y === 0) return null;
-          return {
-            x: pt2.x + v2.x / v2.y * (y2 - pt2.y),
-            y: y2
-          };
-        };
-        const verticalIntersection2 = (pt2, v2, x2) => {
-          if (v2.x === 0) return null;
-          return {
-            x: x2,
-            y: pt2.y + v2.y / v2.x * (x2 - pt2.x)
-          };
-        };
-        const intersection$1 = (pt1, v1, pt2, v2) => {
-          if (v1.x === 0) return verticalIntersection2(pt2, v2, pt1.x);
-          if (v2.x === 0) return verticalIntersection2(pt1, v1, pt2.x);
-          if (v1.y === 0) return horizontalIntersection2(pt2, v2, pt1.y);
-          if (v2.y === 0) return horizontalIntersection2(pt1, v1, pt2.y);
-          const kross = crossProduct2(v1, v2);
-          if (kross == 0) return null;
-          const ve2 = {
-            x: pt2.x - pt1.x,
-            y: pt2.y - pt1.y
-          };
-          const d1 = crossProduct2(ve2, v1) / kross;
-          const d2 = crossProduct2(ve2, v2) / kross;
-          const x12 = pt1.x + d2 * v1.x, x2 = pt2.x + d1 * v2.x;
-          const y12 = pt1.y + d2 * v1.y, y2 = pt2.y + d1 * v2.y;
-          const x3 = (x12 + x2) / 2;
-          const y3 = (y12 + y2) / 2;
-          return {
-            x: x3,
-            y: y3
-          };
+        var [lng, lat] = center;
+        if (typeof lng !== "number" || typeof lat !== "number") {
+          throw new Error(
+            "ERROR! Longitude and Latitude has to be numbers but where ".concat(typeof lng, " and ").concat(typeof lat)
+          );
+        }
+        if (lng > 180 || lng < -180) {
+          throw new Error("ERROR! Longitude has to be between -180 and 180 but was ".concat(lng));
+        }
+        if (lat > 90 || lat < -90) {
+          throw new Error("ERROR! Latitude has to be between -90 and 90 but was ".concat(lat));
+        }
+      };
+    }
+  });
+
+  // node_modules/circle-to-polygon/input-validation/validateRadius.js
+  var require_validateRadius = __commonJS({
+    "node_modules/circle-to-polygon/input-validation/validateRadius.js"(exports2) {
+      exports2.validateRadius = function validateRadius(radius) {
+        if (typeof radius !== "number") {
+          throw new Error("ERROR! Radius has to be a positive number but was: ".concat(typeof radius));
+        }
+        if (radius <= 0) {
+          throw new Error("ERROR! Radius has to be a positive number but was: ".concat(radius));
+        }
+      };
+    }
+  });
+
+  // node_modules/circle-to-polygon/input-validation/validateNumberOfEdges.js
+  var require_validateNumberOfEdges = __commonJS({
+    "node_modules/circle-to-polygon/input-validation/validateNumberOfEdges.js"(exports2) {
+      exports2.validateNumberOfEdges = function validateNumberOfEdges(numberOfEdges) {
+        if (typeof numberOfEdges !== "number") {
+          const ARGUMENT_TYPE = Array.isArray(numberOfEdges) ? "array" : typeof numberOfEdges;
+          throw new Error("ERROR! Number of edges has to be a number but was: ".concat(ARGUMENT_TYPE));
+        }
+        if (numberOfEdges < 3) {
+          throw new Error("ERROR! Number of edges has to be at least 3 but was: ".concat(numberOfEdges));
+        }
+      };
+    }
+  });
+
+  // node_modules/circle-to-polygon/input-validation/validateEarthRadius.js
+  var require_validateEarthRadius = __commonJS({
+    "node_modules/circle-to-polygon/input-validation/validateEarthRadius.js"(exports2) {
+      exports2.validateEarthRadius = function validateEarthRadius(earthRadius2) {
+        if (typeof earthRadius2 !== "number") {
+          const ARGUMENT_TYPE = Array.isArray(earthRadius2) ? "array" : typeof earthRadius2;
+          throw new Error("ERROR! Earth radius has to be a number but was: ".concat(ARGUMENT_TYPE));
+        }
+        if (earthRadius2 <= 0) {
+          throw new Error("ERROR! Earth radius has to be a positive number but was: ".concat(earthRadius2));
+        }
+      };
+    }
+  });
+
+  // node_modules/circle-to-polygon/input-validation/validateBearing.js
+  var require_validateBearing = __commonJS({
+    "node_modules/circle-to-polygon/input-validation/validateBearing.js"(exports2) {
+      exports2.validateBearing = function validateBearing(bearing) {
+        if (typeof bearing !== "number") {
+          const ARGUMENT_TYPE = Array.isArray(bearing) ? "array" : typeof bearing;
+          throw new Error("ERROR! Bearing has to be a number but was: ".concat(ARGUMENT_TYPE));
+        }
+      };
+    }
+  });
+
+  // node_modules/circle-to-polygon/input-validation/index.js
+  var require_input_validation = __commonJS({
+    "node_modules/circle-to-polygon/input-validation/index.js"(exports2) {
+      var validateCenter = require_validateCenter().validateCenter;
+      var validateRadius = require_validateRadius().validateRadius;
+      var validateNumberOfEdges = require_validateNumberOfEdges().validateNumberOfEdges;
+      var validateEarthRadius = require_validateEarthRadius().validateEarthRadius;
+      var validateBearing = require_validateBearing().validateBearing;
+      function validateInput({ center, radius, numberOfEdges, earthRadius: earthRadius2, bearing }) {
+        validateCenter(center);
+        validateRadius(radius);
+        validateNumberOfEdges(numberOfEdges);
+        validateEarthRadius(earthRadius2);
+        validateBearing(bearing);
+      }
+      exports2.validateCenter = validateCenter;
+      exports2.validateRadius = validateRadius;
+      exports2.validateNumberOfEdges = validateNumberOfEdges;
+      exports2.validateEarthRadius = validateEarthRadius;
+      exports2.validateBearing = validateBearing;
+      exports2.validateInput = validateInput;
+    }
+  });
+
+  // node_modules/circle-to-polygon/index.js
+  var require_circle_to_polygon = __commonJS({
+    "node_modules/circle-to-polygon/index.js"(exports2, module2) {
+      "use strict";
+      var { validateInput } = require_input_validation();
+      var defaultEarthRadius = 6378137;
+      function toRadians(angleInDegrees) {
+        return angleInDegrees * Math.PI / 180;
+      }
+      function toDegrees(angleInRadians) {
+        return angleInRadians * 180 / Math.PI;
+      }
+      function offset(c1, distance, earthRadius2, bearing) {
+        var lat1 = toRadians(c1[1]);
+        var lon1 = toRadians(c1[0]);
+        var dByR = distance / earthRadius2;
+        var lat = Math.asin(
+          Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)
+        );
+        var lon = lon1 + Math.atan2(
+          Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
+          Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)
+        );
+        return [toDegrees(lon), toDegrees(lat)];
+      }
+      module2.exports = function circleToPolygon2(center, radius, options2) {
+        var n3 = getNumberOfEdges(options2);
+        var earthRadius2 = getEarthRadius(options2);
+        var bearing = getBearing(options2);
+        var direction = getDirection(options2);
+        validateInput({ center, radius, numberOfEdges: n3, earthRadius: earthRadius2, bearing });
+        var start2 = toRadians(bearing);
+        var coordinates = [];
+        for (var i3 = 0; i3 < n3; ++i3) {
+          coordinates.push(
+            offset(
+              center,
+              radius,
+              earthRadius2,
+              start2 + direction * 2 * Math.PI * -i3 / n3
+            )
+          );
+        }
+        coordinates.push(coordinates[0]);
+        return {
+          type: "Polygon",
+          coordinates: [coordinates]
         };
-        class SweepEvent2 {
-          // for ordering sweep events in the sweep event queue
-          static compare(a2, b2) {
-            const ptCmp = SweepEvent2.comparePoints(a2.point, b2.point);
-            if (ptCmp !== 0) return ptCmp;
-            if (a2.point !== b2.point) a2.link(b2);
-            if (a2.isLeft !== b2.isLeft) return a2.isLeft ? 1 : -1;
-            return Segment2.compare(a2.segment, b2.segment);
+      };
+      function getNumberOfEdges(options2) {
+        if (isUndefinedOrNull(options2)) {
+          return 32;
+        } else if (isObjectNotArray(options2)) {
+          var numberOfEdges = options2.numberOfEdges;
+          return numberOfEdges === void 0 ? 32 : numberOfEdges;
+        }
+        return options2;
+      }
+      function getEarthRadius(options2) {
+        if (isUndefinedOrNull(options2)) {
+          return defaultEarthRadius;
+        } else if (isObjectNotArray(options2)) {
+          var earthRadius2 = options2.earthRadius;
+          return earthRadius2 === void 0 ? defaultEarthRadius : earthRadius2;
+        }
+        return defaultEarthRadius;
+      }
+      function getDirection(options2) {
+        if (isObjectNotArray(options2) && options2.rightHandRule) {
+          return -1;
+        }
+        return 1;
+      }
+      function getBearing(options2) {
+        if (isUndefinedOrNull(options2)) {
+          return 0;
+        } else if (isObjectNotArray(options2)) {
+          var bearing = options2.bearing;
+          return bearing === void 0 ? 0 : bearing;
+        }
+        return 0;
+      }
+      function isObjectNotArray(argument) {
+        return argument !== null && typeof argument === "object" && !Array.isArray(argument);
+      }
+      function isUndefinedOrNull(argument) {
+        return argument === null || argument === void 0;
+      }
+    }
+  });
+
+  // node_modules/geojson-precision/index.js
+  var require_geojson_precision = __commonJS({
+    "node_modules/geojson-precision/index.js"(exports2, module2) {
+      (function() {
+        function parse(t2, coordinatePrecision, extrasPrecision) {
+          function point(p2) {
+            return p2.map(function(e3, index) {
+              if (index < 2) {
+                return 1 * e3.toFixed(coordinatePrecision);
+              } else {
+                return 1 * e3.toFixed(extrasPrecision);
+              }
+            });
           }
-          // for ordering points in sweep line order
-          static comparePoints(aPt, bPt) {
-            if (aPt.x < bPt.x) return -1;
-            if (aPt.x > bPt.x) return 1;
-            if (aPt.y < bPt.y) return -1;
-            if (aPt.y > bPt.y) return 1;
-            return 0;
+          function multi(l2) {
+            return l2.map(point);
           }
-          // Warning: 'point' input will be modified and re-used (for performance)
-          constructor(point, isLeft) {
-            if (point.events === void 0) point.events = [this];
-            else point.events.push(this);
-            this.point = point;
-            this.isLeft = isLeft;
+          function poly(p2) {
+            return p2.map(multi);
           }
-          link(other) {
-            if (other.point === this.point) {
-              throw new Error("Tried to link already linked events");
-            }
-            const otherEvents = other.point.events;
-            for (let i3 = 0, iMax = otherEvents.length; i3 < iMax; i3++) {
-              const evt = otherEvents[i3];
-              this.point.events.push(evt);
-              evt.point = this.point;
-            }
-            this.checkForConsuming();
+          function multiPoly(m2) {
+            return m2.map(poly);
           }
-          /* Do a pass over our linked events and check to see if any pair
-           * of segments match, and should be consumed. */
-          checkForConsuming() {
-            const numEvents = this.point.events.length;
-            for (let i3 = 0; i3 < numEvents; i3++) {
-              const evt1 = this.point.events[i3];
-              if (evt1.segment.consumedBy !== void 0) continue;
-              for (let j2 = i3 + 1; j2 < numEvents; j2++) {
-                const evt2 = this.point.events[j2];
-                if (evt2.consumedBy !== void 0) continue;
-                if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;
-                evt1.segment.consume(evt2.segment);
-              }
+          function geometry(obj) {
+            if (!obj) {
+              return {};
             }
-          }
-          getAvailableLinkedEvents() {
-            const events = [];
-            for (let i3 = 0, iMax = this.point.events.length; i3 < iMax; i3++) {
-              const evt = this.point.events[i3];
-              if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {
-                events.push(evt);
-              }
+            switch (obj.type) {
+              case "Point":
+                obj.coordinates = point(obj.coordinates);
+                return obj;
+              case "LineString":
+              case "MultiPoint":
+                obj.coordinates = multi(obj.coordinates);
+                return obj;
+              case "Polygon":
+              case "MultiLineString":
+                obj.coordinates = poly(obj.coordinates);
+                return obj;
+              case "MultiPolygon":
+                obj.coordinates = multiPoly(obj.coordinates);
+                return obj;
+              case "GeometryCollection":
+                obj.geometries = obj.geometries.map(geometry);
+                return obj;
+              default:
+                return {};
             }
-            return events;
           }
-          /**
-           * Returns a comparator function for sorting linked events that will
-           * favor the event that will give us the smallest left-side angle.
-           * All ring construction starts as low as possible heading to the right,
-           * so by always turning left as sharp as possible we'll get polygons
-           * without uncessary loops & holes.
-           *
-           * The comparator function has a compute cache such that it avoids
-           * re-computing already-computed values.
-           */
-          getLeftmostComparator(baseEvent) {
-            const cache = /* @__PURE__ */ new Map();
-            const fillCache = (linkedEvent) => {
-              const nextEvent = linkedEvent.otherSE;
-              cache.set(linkedEvent, {
-                sine: sineOfAngle2(this.point, baseEvent.point, nextEvent.point),
-                cosine: cosineOfAngle2(this.point, baseEvent.point, nextEvent.point)
-              });
-            };
-            return (a2, b2) => {
-              if (!cache.has(a2)) fillCache(a2);
-              if (!cache.has(b2)) fillCache(b2);
-              const {
-                sine: asine,
-                cosine: acosine
-              } = cache.get(a2);
-              const {
-                sine: bsine,
-                cosine: bcosine
-              } = cache.get(b2);
-              if (asine >= 0 && bsine >= 0) {
-                if (acosine < bcosine) return 1;
-                if (acosine > bcosine) return -1;
-                return 0;
-              }
-              if (asine < 0 && bsine < 0) {
-                if (acosine < bcosine) return -1;
-                if (acosine > bcosine) return 1;
-                return 0;
-              }
-              if (bsine < asine) return -1;
-              if (bsine > asine) return 1;
-              return 0;
-            };
+          function feature3(obj) {
+            obj.geometry = geometry(obj.geometry);
+            return obj;
           }
-        }
-        let segmentId2 = 0;
-        class Segment2 {
-          /* This compare() function is for ordering segments in the sweep
-           * line tree, and does so according to the following criteria:
-           *
-           * Consider the vertical line that lies an infinestimal step to the
-           * right of the right-more of the two left endpoints of the input
-           * segments. Imagine slowly moving a point up from negative infinity
-           * in the increasing y direction. Which of the two segments will that
-           * point intersect first? That segment comes 'before' the other one.
-           *
-           * If neither segment would be intersected by such a line, (if one
-           * or more of the segments are vertical) then the line to be considered
-           * is directly on the right-more of the two left inputs.
-           */
-          static compare(a2, b2) {
-            const alx = a2.leftSE.point.x;
-            const blx = b2.leftSE.point.x;
-            const arx = a2.rightSE.point.x;
-            const brx = b2.rightSE.point.x;
-            if (brx < alx) return 1;
-            if (arx < blx) return -1;
-            const aly = a2.leftSE.point.y;
-            const bly = b2.leftSE.point.y;
-            const ary = a2.rightSE.point.y;
-            const bry = b2.rightSE.point.y;
-            if (alx < blx) {
-              if (bly < aly && bly < ary) return 1;
-              if (bly > aly && bly > ary) return -1;
-              const aCmpBLeft = a2.comparePoint(b2.leftSE.point);
-              if (aCmpBLeft < 0) return 1;
-              if (aCmpBLeft > 0) return -1;
-              const bCmpARight = b2.comparePoint(a2.rightSE.point);
-              if (bCmpARight !== 0) return bCmpARight;
-              return -1;
-            }
-            if (alx > blx) {
-              if (aly < bly && aly < bry) return -1;
-              if (aly > bly && aly > bry) return 1;
-              const bCmpALeft = b2.comparePoint(a2.leftSE.point);
-              if (bCmpALeft !== 0) return bCmpALeft;
-              const aCmpBRight = a2.comparePoint(b2.rightSE.point);
-              if (aCmpBRight < 0) return 1;
-              if (aCmpBRight > 0) return -1;
-              return 1;
-            }
-            if (aly < bly) return -1;
-            if (aly > bly) return 1;
-            if (arx < brx) {
-              const bCmpARight = b2.comparePoint(a2.rightSE.point);
-              if (bCmpARight !== 0) return bCmpARight;
-            }
-            if (arx > brx) {
-              const aCmpBRight = a2.comparePoint(b2.rightSE.point);
-              if (aCmpBRight < 0) return 1;
-              if (aCmpBRight > 0) return -1;
-            }
-            if (arx !== brx) {
-              const ay = ary - aly;
-              const ax = arx - alx;
-              const by = bry - bly;
-              const bx = brx - blx;
-              if (ay > ax && by < bx) return 1;
-              if (ay < ax && by > bx) return -1;
-            }
-            if (arx > brx) return 1;
-            if (arx < brx) return -1;
-            if (ary < bry) return -1;
-            if (ary > bry) return 1;
-            if (a2.id < b2.id) return -1;
-            if (a2.id > b2.id) return 1;
-            return 0;
+          function featureCollection(f2) {
+            f2.features = f2.features.map(feature3);
+            return f2;
           }
-          /* Warning: a reference to ringWindings input will be stored,
-           *  and possibly will be later modified */
-          constructor(leftSE, rightSE, rings, windings) {
-            this.id = ++segmentId2;
-            this.leftSE = leftSE;
-            leftSE.segment = this;
-            leftSE.otherSE = rightSE;
-            this.rightSE = rightSE;
-            rightSE.segment = this;
-            rightSE.otherSE = leftSE;
-            this.rings = rings;
-            this.windings = windings;
+          function geometryCollection(g3) {
+            g3.geometries = g3.geometries.map(geometry);
+            return g3;
           }
-          static fromRing(pt1, pt2, ring) {
-            let leftPt, rightPt, winding;
-            const cmpPts = SweepEvent2.comparePoints(pt1, pt2);
-            if (cmpPts < 0) {
-              leftPt = pt1;
-              rightPt = pt2;
-              winding = 1;
-            } else if (cmpPts > 0) {
-              leftPt = pt2;
-              rightPt = pt1;
-              winding = -1;
-            } else throw new Error("Tried to create degenerate segment at [".concat(pt1.x, ", ").concat(pt1.y, "]"));
-            const leftSE = new SweepEvent2(leftPt, true);
-            const rightSE = new SweepEvent2(rightPt, false);
-            return new Segment2(leftSE, rightSE, [ring], [winding]);
+          if (!t2) {
+            return t2;
           }
-          /* When a segment is split, the rightSE is replaced with a new sweep event */
-          replaceRightSE(newRightSE) {
-            this.rightSE = newRightSE;
-            this.rightSE.segment = this;
-            this.rightSE.otherSE = this.leftSE;
-            this.leftSE.otherSE = this.rightSE;
+          switch (t2.type) {
+            case "Feature":
+              return feature3(t2);
+            case "GeometryCollection":
+              return geometryCollection(t2);
+            case "FeatureCollection":
+              return featureCollection(t2);
+            case "Point":
+            case "LineString":
+            case "Polygon":
+            case "MultiPoint":
+            case "MultiPolygon":
+            case "MultiLineString":
+              return geometry(t2);
+            default:
+              return t2;
           }
-          bbox() {
-            const y12 = this.leftSE.point.y;
-            const y2 = this.rightSE.point.y;
-            return {
-              ll: {
-                x: this.leftSE.point.x,
-                y: y12 < y2 ? y12 : y2
-              },
-              ur: {
-                x: this.rightSE.point.x,
-                y: y12 > y2 ? y12 : y2
+        }
+        module2.exports = parse;
+        module2.exports.parse = parse;
+      })();
+    }
+  });
+
+  // node_modules/@aitodotai/json-stringify-pretty-compact/index.js
+  var require_json_stringify_pretty_compact = __commonJS({
+    "node_modules/@aitodotai/json-stringify-pretty-compact/index.js"(exports2, module2) {
+      function isObject2(obj) {
+        return typeof obj === "object" && obj !== null;
+      }
+      function forEach(obj, cb) {
+        if (Array.isArray(obj)) {
+          obj.forEach(cb);
+        } else if (isObject2(obj)) {
+          Object.keys(obj).forEach(function(key) {
+            var val = obj[key];
+            cb(val, key);
+          });
+        }
+      }
+      function getTreeDepth(obj) {
+        var depth = 0;
+        if (Array.isArray(obj) || isObject2(obj)) {
+          forEach(obj, function(val) {
+            if (Array.isArray(val) || isObject2(val)) {
+              var tmpDepth = getTreeDepth(val);
+              if (tmpDepth > depth) {
+                depth = tmpDepth;
               }
-            };
-          }
-          /* A vector from the left point to the right */
-          vector() {
-            return {
-              x: this.rightSE.point.x - this.leftSE.point.x,
-              y: this.rightSE.point.y - this.leftSE.point.y
-            };
+            }
+          });
+          return depth + 1;
+        }
+        return depth;
+      }
+      function stringify3(obj, options2) {
+        options2 = options2 || {};
+        var indent = JSON.stringify([1], null, get4(options2, "indent", 2)).slice(2, -3);
+        var addMargin = get4(options2, "margins", false);
+        var addArrayMargin = get4(options2, "arrayMargins", false);
+        var addObjectMargin = get4(options2, "objectMargins", false);
+        var maxLength = indent === "" ? Infinity : get4(options2, "maxLength", 80);
+        var maxNesting = get4(options2, "maxNesting", Infinity);
+        return function _stringify(obj2, currentIndent, reserved) {
+          if (obj2 && typeof obj2.toJSON === "function") {
+            obj2 = obj2.toJSON();
           }
-          isAnEndpoint(pt2) {
-            return pt2.x === this.leftSE.point.x && pt2.y === this.leftSE.point.y || pt2.x === this.rightSE.point.x && pt2.y === this.rightSE.point.y;
+          var string = JSON.stringify(obj2);
+          if (string === void 0) {
+            return string;
           }
-          /* Compare this segment with a point.
-           *
-           * A point P is considered to be colinear to a segment if there
-           * exists a distance D such that if we travel along the segment
-           * from one * endpoint towards the other a distance D, we find
-           * ourselves at point P.
-           *
-           * Return value indicates:
-           *
-           *   1: point lies above the segment (to the left of vertical)
-           *   0: point is colinear to segment
-           *  -1: point lies below the segment (to the right of vertical)
-           */
-          comparePoint(point) {
-            if (this.isAnEndpoint(point)) return 0;
-            const lPt = this.leftSE.point;
-            const rPt = this.rightSE.point;
-            const v2 = this.vector();
-            if (lPt.x === rPt.x) {
-              if (point.x === lPt.x) return 0;
-              return point.x < lPt.x ? 1 : -1;
+          var length2 = maxLength - currentIndent.length - reserved;
+          var treeDepth = getTreeDepth(obj2);
+          if (treeDepth <= maxNesting && string.length <= length2) {
+            var prettified = prettify(string, {
+              addMargin,
+              addArrayMargin,
+              addObjectMargin
+            });
+            if (prettified.length <= length2) {
+              return prettified;
             }
-            const yDist = (point.y - lPt.y) / v2.y;
-            const xFromYDist = lPt.x + yDist * v2.x;
-            if (point.x === xFromYDist) return 0;
-            const xDist = (point.x - lPt.x) / v2.x;
-            const yFromXDist = lPt.y + xDist * v2.y;
-            if (point.y === yFromXDist) return 0;
-            return point.y < yFromXDist ? -1 : 1;
           }
-          /**
-           * Given another segment, returns the first non-trivial intersection
-           * between the two segments (in terms of sweep line ordering), if it exists.
-           *
-           * A 'non-trivial' intersection is one that will cause one or both of the
-           * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:
-           *
-           *   * endpoint of segA with endpoint of segB --> trivial
-           *   * endpoint of segA with point along segB --> non-trivial
-           *   * endpoint of segB with point along segA --> non-trivial
-           *   * point along segA with point along segB --> non-trivial
-           *
-           * If no non-trivial intersection exists, return null
-           * Else, return null.
-           */
-          getIntersection(other) {
-            const tBbox = this.bbox();
-            const oBbox = other.bbox();
-            const bboxOverlap = getBboxOverlap2(tBbox, oBbox);
-            if (bboxOverlap === null) return null;
-            const tlp = this.leftSE.point;
-            const trp = this.rightSE.point;
-            const olp = other.leftSE.point;
-            const orp = other.rightSE.point;
-            const touchesOtherLSE = isInBbox2(tBbox, olp) && this.comparePoint(olp) === 0;
-            const touchesThisLSE = isInBbox2(oBbox, tlp) && other.comparePoint(tlp) === 0;
-            const touchesOtherRSE = isInBbox2(tBbox, orp) && this.comparePoint(orp) === 0;
-            const touchesThisRSE = isInBbox2(oBbox, trp) && other.comparePoint(trp) === 0;
-            if (touchesThisLSE && touchesOtherLSE) {
-              if (touchesThisRSE && !touchesOtherRSE) return trp;
-              if (!touchesThisRSE && touchesOtherRSE) return orp;
-              return null;
-            }
-            if (touchesThisLSE) {
-              if (touchesOtherRSE) {
-                if (tlp.x === orp.x && tlp.y === orp.y) return null;
+          if (isObject2(obj2)) {
+            var nextIndent = currentIndent + indent;
+            var items = [];
+            var delimiters;
+            var comma = function(array2, index2) {
+              return index2 === array2.length - 1 ? 0 : 1;
+            };
+            if (Array.isArray(obj2)) {
+              for (var index = 0; index < obj2.length; index++) {
+                items.push(
+                  _stringify(obj2[index], nextIndent, comma(obj2, index)) || "null"
+                );
               }
-              return tlp;
+              delimiters = "[]";
+            } else {
+              Object.keys(obj2).forEach(function(key, index2, array2) {
+                var keyPart = JSON.stringify(key) + ": ";
+                var value = _stringify(
+                  obj2[key],
+                  nextIndent,
+                  keyPart.length + comma(array2, index2)
+                );
+                if (value !== void 0) {
+                  items.push(keyPart + value);
+                }
+              });
+              delimiters = "{}";
             }
-            if (touchesOtherLSE) {
-              if (touchesThisRSE) {
-                if (trp.x === olp.x && trp.y === olp.y) return null;
-              }
-              return olp;
+            if (items.length > 0) {
+              return [
+                delimiters[0],
+                indent + items.join(",\n" + nextIndent),
+                delimiters[1]
+              ].join("\n" + currentIndent);
             }
-            if (touchesThisRSE && touchesOtherRSE) return null;
-            if (touchesThisRSE) return trp;
-            if (touchesOtherRSE) return orp;
-            const pt2 = intersection$1(tlp, this.vector(), olp, other.vector());
-            if (pt2 === null) return null;
-            if (!isInBbox2(bboxOverlap, pt2)) return null;
-            return rounder.round(pt2.x, pt2.y);
           }
-          /**
-           * Split the given segment into multiple segments on the given points.
-           *  * Each existing segment will retain its leftSE and a new rightSE will be
-           *    generated for it.
-           *  * A new segment will be generated which will adopt the original segment's
-           *    rightSE, and a new leftSE will be generated for it.
-           *  * If there are more than two points given to split on, new segments
-           *    in the middle will be generated with new leftSE and rightSE's.
-           *  * An array of the newly generated SweepEvents will be returned.
-           *
-           * Warning: input array of points is modified
-           */
-          split(point) {
-            const newEvents = [];
-            const alreadyLinked = point.events !== void 0;
-            const newLeftSE = new SweepEvent2(point, true);
-            const newRightSE = new SweepEvent2(point, false);
-            const oldRightSE = this.rightSE;
-            this.replaceRightSE(newRightSE);
-            newEvents.push(newRightSE);
-            newEvents.push(newLeftSE);
-            const newSeg = new Segment2(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice());
-            if (SweepEvent2.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {
-              newSeg.swapEvents();
-            }
-            if (SweepEvent2.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {
-              this.swapEvents();
-            }
-            if (alreadyLinked) {
-              newLeftSE.checkForConsuming();
-              newRightSE.checkForConsuming();
-            }
-            return newEvents;
+          return string;
+        }(obj, "", 0);
+      }
+      var stringOrChar = /("(?:[^\\"]|\\.)*")|[:,\][}{]/g;
+      function prettify(string, options2) {
+        options2 = options2 || {};
+        var tokens = {
+          "{": "{",
+          "}": "}",
+          "[": "[",
+          "]": "]",
+          ",": ", ",
+          ":": ": "
+        };
+        if (options2.addMargin || options2.addObjectMargin) {
+          tokens["{"] = "{ ";
+          tokens["}"] = " }";
+        }
+        if (options2.addMargin || options2.addArrayMargin) {
+          tokens["["] = "[ ";
+          tokens["]"] = " ]";
+        }
+        return string.replace(stringOrChar, function(match, string2) {
+          return string2 ? match : tokens[match];
+        });
+      }
+      function get4(options2, name, defaultValue) {
+        return name in options2 ? options2[name] : defaultValue;
+      }
+      module2.exports = stringify3;
+    }
+  });
+
+  // node_modules/fast-json-stable-stringify/index.js
+  var require_fast_json_stable_stringify = __commonJS({
+    "node_modules/fast-json-stable-stringify/index.js"(exports2, module2) {
+      "use strict";
+      module2.exports = function(data, opts) {
+        if (!opts) opts = {};
+        if (typeof opts === "function") opts = { cmp: opts };
+        var cycles = typeof opts.cycles === "boolean" ? opts.cycles : false;
+        var cmp = opts.cmp && /* @__PURE__ */ function(f2) {
+          return function(node) {
+            return function(a2, b2) {
+              var aobj = { key: a2, value: node[a2] };
+              var bobj = { key: b2, value: node[b2] };
+              return f2(aobj, bobj);
+            };
+          };
+        }(opts.cmp);
+        var seen = [];
+        return function stringify3(node) {
+          if (node && node.toJSON && typeof node.toJSON === "function") {
+            node = node.toJSON();
           }
-          /* Swap which event is left and right */
-          swapEvents() {
-            const tmpEvt = this.rightSE;
-            this.rightSE = this.leftSE;
-            this.leftSE = tmpEvt;
-            this.leftSE.isLeft = true;
-            this.rightSE.isLeft = false;
-            for (let i3 = 0, iMax = this.windings.length; i3 < iMax; i3++) {
-              this.windings[i3] *= -1;
+          if (node === void 0) return;
+          if (typeof node == "number") return isFinite(node) ? "" + node : "null";
+          if (typeof node !== "object") return JSON.stringify(node);
+          var i3, out;
+          if (Array.isArray(node)) {
+            out = "[";
+            for (i3 = 0; i3 < node.length; i3++) {
+              if (i3) out += ",";
+              out += stringify3(node[i3]) || "null";
             }
+            return out + "]";
           }
-          /* Consume another segment. We take their rings under our wing
-           * and mark them as consumed. Use for perfectly overlapping segments */
-          consume(other) {
-            let consumer = this;
-            let consumee = other;
-            while (consumer.consumedBy) consumer = consumer.consumedBy;
-            while (consumee.consumedBy) consumee = consumee.consumedBy;
-            const cmp2 = Segment2.compare(consumer, consumee);
-            if (cmp2 === 0) return;
-            if (cmp2 > 0) {
-              const tmp = consumer;
-              consumer = consumee;
-              consumee = tmp;
-            }
-            if (consumer.prev === consumee) {
-              const tmp = consumer;
-              consumer = consumee;
-              consumee = tmp;
-            }
-            for (let i3 = 0, iMax = consumee.rings.length; i3 < iMax; i3++) {
-              const ring = consumee.rings[i3];
-              const winding = consumee.windings[i3];
-              const index2 = consumer.rings.indexOf(ring);
-              if (index2 === -1) {
-                consumer.rings.push(ring);
-                consumer.windings.push(winding);
-              } else consumer.windings[index2] += winding;
-            }
-            consumee.rings = null;
-            consumee.windings = null;
-            consumee.consumedBy = consumer;
-            consumee.leftSE.consumedBy = consumer.leftSE;
-            consumee.rightSE.consumedBy = consumer.rightSE;
-          }
-          /* The first segment previous segment chain that is in the result */
-          prevInResult() {
-            if (this._prevInResult !== void 0) return this._prevInResult;
-            if (!this.prev) this._prevInResult = null;
-            else if (this.prev.isInResult()) this._prevInResult = this.prev;
-            else this._prevInResult = this.prev.prevInResult();
-            return this._prevInResult;
+          if (node === null) return "null";
+          if (seen.indexOf(node) !== -1) {
+            if (cycles) return JSON.stringify("__cycle__");
+            throw new TypeError("Converting circular structure to JSON");
           }
-          beforeState() {
-            if (this._beforeState !== void 0) return this._beforeState;
-            if (!this.prev) this._beforeState = {
-              rings: [],
-              windings: [],
-              multiPolys: []
-            };
-            else {
-              const seg = this.prev.consumedBy || this.prev;
-              this._beforeState = seg.afterState();
-            }
-            return this._beforeState;
+          var seenIndex = seen.push(node) - 1;
+          var keys2 = Object.keys(node).sort(cmp && cmp(node));
+          out = "";
+          for (i3 = 0; i3 < keys2.length; i3++) {
+            var key = keys2[i3];
+            var value = stringify3(node[key]);
+            if (!value) continue;
+            if (out) out += ",";
+            out += JSON.stringify(key) + ":" + value;
           }
-          afterState() {
-            if (this._afterState !== void 0) return this._afterState;
-            const beforeState = this.beforeState();
-            this._afterState = {
-              rings: beforeState.rings.slice(0),
-              windings: beforeState.windings.slice(0),
-              multiPolys: []
+          seen.splice(seenIndex, 1);
+          return "{" + out + "}";
+        }(data);
+      };
+    }
+  });
+
+  // node_modules/@mapbox/sexagesimal/index.js
+  var require_sexagesimal = __commonJS({
+    "node_modules/@mapbox/sexagesimal/index.js"(exports2, module2) {
+      module2.exports = element;
+      module2.exports.pair = pair3;
+      module2.exports.format = format2;
+      module2.exports.formatPair = formatPair;
+      module2.exports.coordToDMS = coordToDMS;
+      function element(input, dims) {
+        var result = search(input, dims);
+        return result === null ? null : result.val;
+      }
+      function formatPair(input) {
+        return format2(input.lat, "lat") + " " + format2(input.lon, "lon");
+      }
+      function format2(input, dim) {
+        var dms = coordToDMS(input, dim);
+        return dms.whole + "\xB0 " + (dms.minutes ? dms.minutes + "' " : "") + (dms.seconds ? dms.seconds + '" ' : "") + dms.dir;
+      }
+      function coordToDMS(input, dim) {
+        var dirs = { lat: ["N", "S"], lon: ["E", "W"] }[dim] || "";
+        var dir = dirs[input >= 0 ? 0 : 1];
+        var abs3 = Math.abs(input);
+        var whole = Math.floor(abs3);
+        var fraction = abs3 - whole;
+        var fractionMinutes = fraction * 60;
+        var minutes = Math.floor(fractionMinutes);
+        var seconds = Math.floor((fractionMinutes - minutes) * 60);
+        return {
+          whole,
+          minutes,
+          seconds,
+          dir
+        };
+      }
+      function search(input, dims) {
+        if (!dims) dims = "NSEW";
+        if (typeof input !== "string") return null;
+        input = input.toUpperCase();
+        var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
+        var m2 = input.match(regex);
+        if (!m2) return null;
+        var matched = m2[0];
+        var dim;
+        if (m2[1] && m2[5]) {
+          dim = m2[1];
+          matched = matched.slice(0, -1);
+        } else {
+          dim = m2[1] || m2[5];
+        }
+        if (dim && dims.indexOf(dim) === -1) return null;
+        var deg = m2[2] ? parseFloat(m2[2]) : 0;
+        var min3 = m2[3] ? parseFloat(m2[3]) / 60 : 0;
+        var sec = m2[4] ? parseFloat(m2[4]) / 3600 : 0;
+        var sign2 = deg < 0 ? -1 : 1;
+        if (dim === "S" || dim === "W") sign2 *= -1;
+        return {
+          val: (Math.abs(deg) + min3 + sec) * sign2,
+          dim,
+          matched,
+          remain: input.slice(matched.length)
+        };
+      }
+      function pair3(input, dims) {
+        input = input.trim();
+        var one2 = search(input, dims);
+        if (!one2) return null;
+        input = one2.remain.trim();
+        var two = search(input, dims);
+        if (!two || two.remain) return null;
+        if (one2.dim) {
+          return swapdim(one2.val, two.val, one2.dim);
+        } else {
+          return [one2.val, two.val];
+        }
+      }
+      function swapdim(a2, b2, dim) {
+        if (dim === "N" || dim === "S") return [a2, b2];
+        if (dim === "W" || dim === "E") return [b2, a2];
+      }
+    }
+  });
+
+  // node_modules/polygon-clipping/dist/polygon-clipping.umd.js
+  var require_polygon_clipping_umd = __commonJS({
+    "node_modules/polygon-clipping/dist/polygon-clipping.umd.js"(exports2, module2) {
+      (function(global2, factory) {
+        typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.polygonClipping = factory());
+      })(exports2, function() {
+        "use strict";
+        function __generator(thisArg, body) {
+          var _2 = {
+            label: 0,
+            sent: function() {
+              if (t2[0] & 1) throw t2[1];
+              return t2[1];
+            },
+            trys: [],
+            ops: []
+          }, f2, y2, t2, g3;
+          return g3 = {
+            next: verb(0),
+            "throw": verb(1),
+            "return": verb(2)
+          }, typeof Symbol === "function" && (g3[Symbol.iterator] = function() {
+            return this;
+          }), g3;
+          function verb(n3) {
+            return function(v2) {
+              return step([n3, v2]);
             };
-            const ringsAfter = this._afterState.rings;
-            const windingsAfter = this._afterState.windings;
-            const mpsAfter = this._afterState.multiPolys;
-            for (let i3 = 0, iMax = this.rings.length; i3 < iMax; i3++) {
-              const ring = this.rings[i3];
-              const winding = this.windings[i3];
-              const index2 = ringsAfter.indexOf(ring);
-              if (index2 === -1) {
-                ringsAfter.push(ring);
-                windingsAfter.push(winding);
-              } else windingsAfter[index2] += winding;
-            }
-            const polysAfter = [];
-            const polysExclude = [];
-            for (let i3 = 0, iMax = ringsAfter.length; i3 < iMax; i3++) {
-              if (windingsAfter[i3] === 0) continue;
-              const ring = ringsAfter[i3];
-              const poly = ring.poly;
-              if (polysExclude.indexOf(poly) !== -1) continue;
-              if (ring.isExterior) polysAfter.push(poly);
-              else {
-                if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);
-                const index2 = polysAfter.indexOf(ring.poly);
-                if (index2 !== -1) polysAfter.splice(index2, 1);
-              }
-            }
-            for (let i3 = 0, iMax = polysAfter.length; i3 < iMax; i3++) {
-              const mp = polysAfter[i3].multiPoly;
-              if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);
-            }
-            return this._afterState;
           }
-          /* Is this segment part of the final result? */
-          isInResult() {
-            if (this.consumedBy) return false;
-            if (this._isInResult !== void 0) return this._isInResult;
-            const mpsBefore = this.beforeState().multiPolys;
-            const mpsAfter = this.afterState().multiPolys;
-            switch (operation2.type) {
-              case "union": {
-                const noBefores = mpsBefore.length === 0;
-                const noAfters = mpsAfter.length === 0;
-                this._isInResult = noBefores !== noAfters;
-                break;
-              }
-              case "intersection": {
-                let least;
-                let most;
-                if (mpsBefore.length < mpsAfter.length) {
-                  least = mpsBefore.length;
-                  most = mpsAfter.length;
-                } else {
-                  least = mpsAfter.length;
-                  most = mpsBefore.length;
-                }
-                this._isInResult = most === operation2.numMultiPolys && least < most;
-                break;
-              }
-              case "xor": {
-                const diff = Math.abs(mpsBefore.length - mpsAfter.length);
-                this._isInResult = diff % 2 === 1;
-                break;
-              }
-              case "difference": {
-                const isJustSubject = (mps) => mps.length === 1 && mps[0].isSubject;
-                this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);
-                break;
+          function step(op) {
+            if (f2) throw new TypeError("Generator is already executing.");
+            while (_2) try {
+              if (f2 = 1, y2 && (t2 = op[0] & 2 ? y2["return"] : op[0] ? y2["throw"] || ((t2 = y2["return"]) && t2.call(y2), 0) : y2.next) && !(t2 = t2.call(y2, op[1])).done) return t2;
+              if (y2 = 0, t2) op = [op[0] & 2, t2.value];
+              switch (op[0]) {
+                case 0:
+                case 1:
+                  t2 = op;
+                  break;
+                case 4:
+                  _2.label++;
+                  return {
+                    value: op[1],
+                    done: false
+                  };
+                case 5:
+                  _2.label++;
+                  y2 = op[1];
+                  op = [0];
+                  continue;
+                case 7:
+                  op = _2.ops.pop();
+                  _2.trys.pop();
+                  continue;
+                default:
+                  if (!(t2 = _2.trys, t2 = t2.length > 0 && t2[t2.length - 1]) && (op[0] === 6 || op[0] === 2)) {
+                    _2 = 0;
+                    continue;
+                  }
+                  if (op[0] === 3 && (!t2 || op[1] > t2[0] && op[1] < t2[3])) {
+                    _2.label = op[1];
+                    break;
+                  }
+                  if (op[0] === 6 && _2.label < t2[1]) {
+                    _2.label = t2[1];
+                    t2 = op;
+                    break;
+                  }
+                  if (t2 && _2.label < t2[2]) {
+                    _2.label = t2[2];
+                    _2.ops.push(op);
+                    break;
+                  }
+                  if (t2[2]) _2.ops.pop();
+                  _2.trys.pop();
+                  continue;
               }
-              default:
-                throw new Error("Unrecognized operation type found ".concat(operation2.type));
+              op = body.call(thisArg, _2);
+            } catch (e3) {
+              op = [6, e3];
+              y2 = 0;
+            } finally {
+              f2 = t2 = 0;
             }
-            return this._isInResult;
+            if (op[0] & 5) throw op[1];
+            return {
+              value: op[0] ? op[1] : void 0,
+              done: true
+            };
           }
         }
-        class RingIn2 {
-          constructor(geomRing, poly, isExterior) {
-            if (!Array.isArray(geomRing) || geomRing.length === 0) {
-              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
-            }
-            this.poly = poly;
-            this.isExterior = isExterior;
-            this.segments = [];
-            if (typeof geomRing[0][0] !== "number" || typeof geomRing[0][1] !== "number") {
-              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+        var Node = (
+          /** @class */
+          /* @__PURE__ */ function() {
+            function Node2(key, data) {
+              this.next = null;
+              this.key = key;
+              this.data = data;
+              this.left = null;
+              this.right = null;
             }
-            const firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);
-            this.bbox = {
-              ll: {
-                x: firstPoint.x,
-                y: firstPoint.y
-              },
-              ur: {
-                x: firstPoint.x,
-                y: firstPoint.y
+            return Node2;
+          }()
+        );
+        function DEFAULT_COMPARE(a2, b2) {
+          return a2 > b2 ? 1 : a2 < b2 ? -1 : 0;
+        }
+        function splay(i3, t2, comparator) {
+          var N2 = new Node(null, null);
+          var l2 = N2;
+          var r2 = N2;
+          while (true) {
+            var cmp2 = comparator(i3, t2.key);
+            if (cmp2 < 0) {
+              if (t2.left === null) break;
+              if (comparator(i3, t2.left.key) < 0) {
+                var y2 = t2.left;
+                t2.left = y2.right;
+                y2.right = t2;
+                t2 = y2;
+                if (t2.left === null) break;
               }
-            };
-            let prevPoint = firstPoint;
-            for (let i3 = 1, iMax = geomRing.length; i3 < iMax; i3++) {
-              if (typeof geomRing[i3][0] !== "number" || typeof geomRing[i3][1] !== "number") {
-                throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+              r2.left = t2;
+              r2 = t2;
+              t2 = t2.left;
+            } else if (cmp2 > 0) {
+              if (t2.right === null) break;
+              if (comparator(i3, t2.right.key) > 0) {
+                var y2 = t2.right;
+                t2.right = y2.left;
+                y2.left = t2;
+                t2 = y2;
+                if (t2.right === null) break;
               }
-              let point = rounder.round(geomRing[i3][0], geomRing[i3][1]);
-              if (point.x === prevPoint.x && point.y === prevPoint.y) continue;
-              this.segments.push(Segment2.fromRing(prevPoint, point, this));
-              if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;
-              if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;
-              if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;
-              if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;
-              prevPoint = point;
-            }
-            if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {
-              this.segments.push(Segment2.fromRing(prevPoint, firstPoint, this));
-            }
-          }
-          getSweepEvents() {
-            const sweepEvents = [];
-            for (let i3 = 0, iMax = this.segments.length; i3 < iMax; i3++) {
-              const segment = this.segments[i3];
-              sweepEvents.push(segment.leftSE);
-              sweepEvents.push(segment.rightSE);
-            }
-            return sweepEvents;
+              l2.right = t2;
+              l2 = t2;
+              t2 = t2.right;
+            } else break;
           }
+          l2.right = t2.left;
+          r2.left = t2.right;
+          t2.left = N2.right;
+          t2.right = N2.left;
+          return t2;
         }
-        class PolyIn2 {
-          constructor(geomPoly, multiPoly) {
-            if (!Array.isArray(geomPoly)) {
-              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
-            }
-            this.exteriorRing = new RingIn2(geomPoly[0], this, true);
-            this.bbox = {
-              ll: {
-                x: this.exteriorRing.bbox.ll.x,
-                y: this.exteriorRing.bbox.ll.y
-              },
-              ur: {
-                x: this.exteriorRing.bbox.ur.x,
-                y: this.exteriorRing.bbox.ur.y
-              }
-            };
-            this.interiorRings = [];
-            for (let i3 = 1, iMax = geomPoly.length; i3 < iMax; i3++) {
-              const ring = new RingIn2(geomPoly[i3], this, false);
-              if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;
-              if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;
-              if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;
-              if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;
-              this.interiorRings.push(ring);
-            }
-            this.multiPoly = multiPoly;
+        function insert(i3, data, t2, comparator) {
+          var node = new Node(i3, data);
+          if (t2 === null) {
+            node.left = node.right = null;
+            return node;
           }
-          getSweepEvents() {
-            const sweepEvents = this.exteriorRing.getSweepEvents();
-            for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
-              const ringSweepEvents = this.interiorRings[i3].getSweepEvents();
-              for (let j2 = 0, jMax = ringSweepEvents.length; j2 < jMax; j2++) {
-                sweepEvents.push(ringSweepEvents[j2]);
-              }
-            }
-            return sweepEvents;
+          t2 = splay(i3, t2, comparator);
+          var cmp2 = comparator(i3, t2.key);
+          if (cmp2 < 0) {
+            node.left = t2.left;
+            node.right = t2;
+            t2.left = null;
+          } else if (cmp2 >= 0) {
+            node.right = t2.right;
+            node.left = t2;
+            t2.right = null;
           }
+          return node;
         }
-        class MultiPolyIn2 {
-          constructor(geom, isSubject) {
-            if (!Array.isArray(geom)) {
-              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
-            }
-            try {
-              if (typeof geom[0][0][0] === "number") geom = [geom];
-            } catch (ex) {
-            }
-            this.polys = [];
-            this.bbox = {
-              ll: {
-                x: Number.POSITIVE_INFINITY,
-                y: Number.POSITIVE_INFINITY
-              },
-              ur: {
-                x: Number.NEGATIVE_INFINITY,
-                y: Number.NEGATIVE_INFINITY
-              }
-            };
-            for (let i3 = 0, iMax = geom.length; i3 < iMax; i3++) {
-              const poly = new PolyIn2(geom[i3], this);
-              if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;
-              if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;
-              if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;
-              if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;
-              this.polys.push(poly);
-            }
-            this.isSubject = isSubject;
-          }
-          getSweepEvents() {
-            const sweepEvents = [];
-            for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
-              const polySweepEvents = this.polys[i3].getSweepEvents();
-              for (let j2 = 0, jMax = polySweepEvents.length; j2 < jMax; j2++) {
-                sweepEvents.push(polySweepEvents[j2]);
-              }
+        function split(key, v2, comparator) {
+          var left = null;
+          var right = null;
+          if (v2) {
+            v2 = splay(key, v2, comparator);
+            var cmp2 = comparator(v2.key, key);
+            if (cmp2 === 0) {
+              left = v2.left;
+              right = v2.right;
+            } else if (cmp2 < 0) {
+              right = v2.right;
+              v2.right = null;
+              left = v2;
+            } else {
+              left = v2.left;
+              v2.left = null;
+              right = v2;
             }
-            return sweepEvents;
           }
+          return {
+            left,
+            right
+          };
         }
-        class RingOut2 {
-          /* Given the segments from the sweep line pass, compute & return a series
-           * of closed rings from all the segments marked to be part of the result */
-          static factory(allSegments) {
-            const ringsOut = [];
-            for (let i3 = 0, iMax = allSegments.length; i3 < iMax; i3++) {
-              const segment = allSegments[i3];
-              if (!segment.isInResult() || segment.ringOut) continue;
-              let prevEvent = null;
-              let event = segment.leftSE;
-              let nextEvent = segment.rightSE;
-              const events = [event];
-              const startingPoint = event.point;
-              const intersectionLEs = [];
-              while (true) {
-                prevEvent = event;
-                event = nextEvent;
-                events.push(event);
-                if (event.point === startingPoint) break;
-                while (true) {
-                  const availableLEs = event.getAvailableLinkedEvents();
-                  if (availableLEs.length === 0) {
-                    const firstPt = events[0].point;
-                    const lastPt = events[events.length - 1].point;
-                    throw new Error("Unable to complete output ring starting at [".concat(firstPt.x, ",") + " ".concat(firstPt.y, "]. Last matching segment found ends at") + " [".concat(lastPt.x, ", ").concat(lastPt.y, "]."));
-                  }
-                  if (availableLEs.length === 1) {
-                    nextEvent = availableLEs[0].otherSE;
-                    break;
-                  }
-                  let indexLE = null;
-                  for (let j2 = 0, jMax = intersectionLEs.length; j2 < jMax; j2++) {
-                    if (intersectionLEs[j2].point === event.point) {
-                      indexLE = j2;
-                      break;
-                    }
-                  }
-                  if (indexLE !== null) {
-                    const intersectionLE = intersectionLEs.splice(indexLE)[0];
-                    const ringEvents = events.splice(intersectionLE.index);
-                    ringEvents.unshift(ringEvents[0].otherSE);
-                    ringsOut.push(new RingOut2(ringEvents.reverse()));
-                    continue;
-                  }
-                  intersectionLEs.push({
-                    index: events.length,
-                    point: event.point
-                  });
-                  const comparator = event.getLeftmostComparator(prevEvent);
-                  nextEvent = availableLEs.sort(comparator)[0].otherSE;
-                  break;
-                }
-              }
-              ringsOut.push(new RingOut2(events));
-            }
-            return ringsOut;
-          }
-          constructor(events) {
-            this.events = events;
-            for (let i3 = 0, iMax = events.length; i3 < iMax; i3++) {
-              events[i3].segment.ringOut = this;
-            }
-            this.poly = null;
-          }
-          getGeom() {
-            let prevPt = this.events[0].point;
-            const points = [prevPt];
-            for (let i3 = 1, iMax = this.events.length - 1; i3 < iMax; i3++) {
-              const pt3 = this.events[i3].point;
-              const nextPt2 = this.events[i3 + 1].point;
-              if (compareVectorAngles(pt3, prevPt, nextPt2) === 0) continue;
-              points.push(pt3);
-              prevPt = pt3;
-            }
-            if (points.length === 1) return null;
-            const pt2 = points[0];
-            const nextPt = points[1];
-            if (compareVectorAngles(pt2, prevPt, nextPt) === 0) points.shift();
-            points.push(points[0]);
-            const step = this.isExteriorRing() ? 1 : -1;
-            const iStart = this.isExteriorRing() ? 0 : points.length - 1;
-            const iEnd = this.isExteriorRing() ? points.length : -1;
-            const orderedPoints = [];
-            for (let i3 = iStart; i3 != iEnd; i3 += step) orderedPoints.push([points[i3].x, points[i3].y]);
-            return orderedPoints;
-          }
-          isExteriorRing() {
-            if (this._isExteriorRing === void 0) {
-              const enclosing = this.enclosingRing();
-              this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;
-            }
-            return this._isExteriorRing;
-          }
-          enclosingRing() {
-            if (this._enclosingRing === void 0) {
-              this._enclosingRing = this._calcEnclosingRing();
-            }
-            return this._enclosingRing;
-          }
-          /* Returns the ring that encloses this one, if any */
-          _calcEnclosingRing() {
-            let leftMostEvt = this.events[0];
-            for (let i3 = 1, iMax = this.events.length; i3 < iMax; i3++) {
-              const evt = this.events[i3];
-              if (SweepEvent2.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;
-            }
-            let prevSeg = leftMostEvt.segment.prevInResult();
-            let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
-            while (true) {
-              if (!prevSeg) return null;
-              if (!prevPrevSeg) return prevSeg.ringOut;
-              if (prevPrevSeg.ringOut !== prevSeg.ringOut) {
-                if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {
-                  return prevSeg.ringOut;
-                } else return prevSeg.ringOut.enclosingRing();
-              }
-              prevSeg = prevPrevSeg.prevInResult();
-              prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
-            }
-          }
+        function merge2(left, right, comparator) {
+          if (right === null) return left;
+          if (left === null) return right;
+          right = splay(left.key, right, comparator);
+          right.left = left;
+          return right;
         }
-        class PolyOut2 {
-          constructor(exteriorRing) {
-            this.exteriorRing = exteriorRing;
-            exteriorRing.poly = this;
-            this.interiorRings = [];
-          }
-          addInterior(ring) {
-            this.interiorRings.push(ring);
-            ring.poly = this;
-          }
-          getGeom() {
-            const geom = [this.exteriorRing.getGeom()];
-            if (geom[0] === null) return null;
-            for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
-              const ringGeom = this.interiorRings[i3].getGeom();
-              if (ringGeom === null) continue;
-              geom.push(ringGeom);
-            }
-            return geom;
+        function printRow(root3, prefix, isTail, out, printNode) {
+          if (root3) {
+            out("" + prefix + (isTail ? "\u2514\u2500\u2500 " : "\u251C\u2500\u2500 ") + printNode(root3) + "\n");
+            var indent = prefix + (isTail ? "    " : "\u2502   ");
+            if (root3.left) printRow(root3.left, indent, false, out, printNode);
+            if (root3.right) printRow(root3.right, indent, true, out, printNode);
           }
         }
-        class MultiPolyOut2 {
-          constructor(rings) {
-            this.rings = rings;
-            this.polys = this._composePolys(rings);
-          }
-          getGeom() {
-            const geom = [];
-            for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
-              const polyGeom = this.polys[i3].getGeom();
-              if (polyGeom === null) continue;
-              geom.push(polyGeom);
-            }
-            return geom;
-          }
-          _composePolys(rings) {
-            const polys = [];
-            for (let i3 = 0, iMax = rings.length; i3 < iMax; i3++) {
-              const ring = rings[i3];
-              if (ring.poly) continue;
-              if (ring.isExteriorRing()) polys.push(new PolyOut2(ring));
-              else {
-                const enclosingRing = ring.enclosingRing();
-                if (!enclosingRing.poly) polys.push(new PolyOut2(enclosingRing));
-                enclosingRing.poly.addInterior(ring);
+        var Tree = (
+          /** @class */
+          function() {
+            function Tree2(comparator) {
+              if (comparator === void 0) {
+                comparator = DEFAULT_COMPARE;
               }
+              this._root = null;
+              this._size = 0;
+              this._comparator = comparator;
             }
-            return polys;
-          }
-        }
-        class SweepLine2 {
-          constructor(queue) {
-            let comparator = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Segment2.compare;
-            this.queue = queue;
-            this.tree = new Tree(comparator);
-            this.segments = [];
-          }
-          process(event) {
-            const segment = event.segment;
-            const newEvents = [];
-            if (event.consumedBy) {
-              if (event.isLeft) this.queue.remove(event.otherSE);
-              else this.tree.remove(segment);
-              return newEvents;
-            }
-            const node = event.isLeft ? this.tree.add(segment) : this.tree.find(segment);
-            if (!node) throw new Error("Unable to find segment #".concat(segment.id, " ") + "[".concat(segment.leftSE.point.x, ", ").concat(segment.leftSE.point.y, "] -> ") + "[".concat(segment.rightSE.point.x, ", ").concat(segment.rightSE.point.y, "] ") + "in SweepLine tree.");
-            let prevNode = node;
-            let nextNode = node;
-            let prevSeg = void 0;
-            let nextSeg = void 0;
-            while (prevSeg === void 0) {
-              prevNode = this.tree.prev(prevNode);
-              if (prevNode === null) prevSeg = null;
-              else if (prevNode.key.consumedBy === void 0) prevSeg = prevNode.key;
-            }
-            while (nextSeg === void 0) {
-              nextNode = this.tree.next(nextNode);
-              if (nextNode === null) nextSeg = null;
-              else if (nextNode.key.consumedBy === void 0) nextSeg = nextNode.key;
-            }
-            if (event.isLeft) {
-              let prevMySplitter = null;
-              if (prevSeg) {
-                const prevInter = prevSeg.getIntersection(segment);
-                if (prevInter !== null) {
-                  if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;
-                  if (!prevSeg.isAnEndpoint(prevInter)) {
-                    const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);
-                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                      newEvents.push(newEventsFromSplit[i3]);
-                    }
-                  }
-                }
+            Tree2.prototype.insert = function(key, data) {
+              this._size++;
+              return this._root = insert(key, data, this._root, this._comparator);
+            };
+            Tree2.prototype.add = function(key, data) {
+              var node = new Node(key, data);
+              if (this._root === null) {
+                node.left = node.right = null;
+                this._size++;
+                this._root = node;
               }
-              let nextMySplitter = null;
-              if (nextSeg) {
-                const nextInter = nextSeg.getIntersection(segment);
-                if (nextInter !== null) {
-                  if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;
-                  if (!nextSeg.isAnEndpoint(nextInter)) {
-                    const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);
-                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                      newEvents.push(newEventsFromSplit[i3]);
-                    }
-                  }
+              var comparator = this._comparator;
+              var t2 = splay(key, this._root, comparator);
+              var cmp2 = comparator(key, t2.key);
+              if (cmp2 === 0) this._root = t2;
+              else {
+                if (cmp2 < 0) {
+                  node.left = t2.left;
+                  node.right = t2;
+                  t2.left = null;
+                } else if (cmp2 > 0) {
+                  node.right = t2.right;
+                  node.left = t2;
+                  t2.right = null;
                 }
+                this._size++;
+                this._root = node;
               }
-              if (prevMySplitter !== null || nextMySplitter !== null) {
-                let mySplitter = null;
-                if (prevMySplitter === null) mySplitter = nextMySplitter;
-                else if (nextMySplitter === null) mySplitter = prevMySplitter;
-                else {
-                  const cmpSplitters = SweepEvent2.comparePoints(prevMySplitter, nextMySplitter);
-                  mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;
-                }
-                this.queue.remove(segment.rightSE);
-                newEvents.push(segment.rightSE);
-                const newEventsFromSplit = segment.split(mySplitter);
-                for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                  newEvents.push(newEventsFromSplit[i3]);
+              return this._root;
+            };
+            Tree2.prototype.remove = function(key) {
+              this._root = this._remove(key, this._root, this._comparator);
+            };
+            Tree2.prototype._remove = function(i3, t2, comparator) {
+              var x2;
+              if (t2 === null) return null;
+              t2 = splay(i3, t2, comparator);
+              var cmp2 = comparator(i3, t2.key);
+              if (cmp2 === 0) {
+                if (t2.left === null) {
+                  x2 = t2.right;
+                } else {
+                  x2 = splay(i3, t2.left, comparator);
+                  x2.right = t2.right;
                 }
+                this._size--;
+                return x2;
               }
-              if (newEvents.length > 0) {
-                this.tree.remove(segment);
-                newEvents.push(event);
-              } else {
-                this.segments.push(segment);
-                segment.prev = prevSeg;
+              return t2;
+            };
+            Tree2.prototype.pop = function() {
+              var node = this._root;
+              if (node) {
+                while (node.left) node = node.left;
+                this._root = splay(node.key, this._root, this._comparator);
+                this._root = this._remove(node.key, this._root, this._comparator);
+                return {
+                  key: node.key,
+                  data: node.data
+                };
               }
-            } else {
-              if (prevSeg && nextSeg) {
-                const inter = prevSeg.getIntersection(nextSeg);
-                if (inter !== null) {
-                  if (!prevSeg.isAnEndpoint(inter)) {
-                    const newEventsFromSplit = this._splitSafely(prevSeg, inter);
-                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                      newEvents.push(newEventsFromSplit[i3]);
-                    }
-                  }
-                  if (!nextSeg.isAnEndpoint(inter)) {
-                    const newEventsFromSplit = this._splitSafely(nextSeg, inter);
-                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                      newEvents.push(newEventsFromSplit[i3]);
-                    }
-                  }
-                }
+              return null;
+            };
+            Tree2.prototype.findStatic = function(key) {
+              var current = this._root;
+              var compare2 = this._comparator;
+              while (current) {
+                var cmp2 = compare2(key, current.key);
+                if (cmp2 === 0) return current;
+                else if (cmp2 < 0) current = current.left;
+                else current = current.right;
               }
-              this.tree.remove(segment);
-            }
-            return newEvents;
-          }
-          /* Safely split a segment that is currently in the datastructures
-           * IE - a segment other than the one that is currently being processed. */
-          _splitSafely(seg, pt2) {
-            this.tree.remove(seg);
-            const rightSE = seg.rightSE;
-            this.queue.remove(rightSE);
-            const newEvents = seg.split(pt2);
-            newEvents.push(rightSE);
-            if (seg.consumedBy === void 0) this.tree.add(seg);
-            return newEvents;
-          }
-        }
-        const POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== "undefined" && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1e6;
-        const POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== "undefined" && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1e6;
-        class Operation2 {
-          run(type2, geom, moreGeoms) {
-            operation2.type = type2;
-            rounder.reset();
-            const multipolys = [new MultiPolyIn2(geom, true)];
-            for (let i3 = 0, iMax = moreGeoms.length; i3 < iMax; i3++) {
-              multipolys.push(new MultiPolyIn2(moreGeoms[i3], false));
-            }
-            operation2.numMultiPolys = multipolys.length;
-            if (operation2.type === "difference") {
-              const subject = multipolys[0];
-              let i3 = 1;
-              while (i3 < multipolys.length) {
-                if (getBboxOverlap2(multipolys[i3].bbox, subject.bbox) !== null) i3++;
-                else multipolys.splice(i3, 1);
+              return null;
+            };
+            Tree2.prototype.find = function(key) {
+              if (this._root) {
+                this._root = splay(key, this._root, this._comparator);
+                if (this._comparator(key, this._root.key) !== 0) return null;
               }
-            }
-            if (operation2.type === "intersection") {
-              for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
-                const mpA = multipolys[i3];
-                for (let j2 = i3 + 1, jMax = multipolys.length; j2 < jMax; j2++) {
-                  if (getBboxOverlap2(mpA.bbox, multipolys[j2].bbox) === null) return [];
-                }
+              return this._root;
+            };
+            Tree2.prototype.contains = function(key) {
+              var current = this._root;
+              var compare2 = this._comparator;
+              while (current) {
+                var cmp2 = compare2(key, current.key);
+                if (cmp2 === 0) return true;
+                else if (cmp2 < 0) current = current.left;
+                else current = current.right;
               }
-            }
-            const queue = new Tree(SweepEvent2.compare);
-            for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
-              const sweepEvents = multipolys[i3].getSweepEvents();
-              for (let j2 = 0, jMax = sweepEvents.length; j2 < jMax; j2++) {
-                queue.insert(sweepEvents[j2]);
-                if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {
-                  throw new Error("Infinite loop when putting segment endpoints in a priority queue (queue size too big).");
+              return false;
+            };
+            Tree2.prototype.forEach = function(visitor, ctx) {
+              var current = this._root;
+              var Q2 = [];
+              var done = false;
+              while (!done) {
+                if (current !== null) {
+                  Q2.push(current);
+                  current = current.left;
+                } else {
+                  if (Q2.length !== 0) {
+                    current = Q2.pop();
+                    visitor.call(ctx, current);
+                    current = current.right;
+                  } else done = true;
                 }
               }
-            }
-            const sweepLine = new SweepLine2(queue);
-            let prevQueueSize = queue.size;
-            let node = queue.pop();
-            while (node) {
-              const evt = node.key;
-              if (queue.size === prevQueueSize) {
-                const seg = evt.segment;
-                throw new Error("Unable to pop() ".concat(evt.isLeft ? "left" : "right", " SweepEvent ") + "[".concat(evt.point.x, ", ").concat(evt.point.y, "] from segment #").concat(seg.id, " ") + "[".concat(seg.leftSE.point.x, ", ").concat(seg.leftSE.point.y, "] -> ") + "[".concat(seg.rightSE.point.x, ", ").concat(seg.rightSE.point.y, "] from queue."));
+              return this;
+            };
+            Tree2.prototype.range = function(low, high, fn, ctx) {
+              var Q2 = [];
+              var compare2 = this._comparator;
+              var node = this._root;
+              var cmp2;
+              while (Q2.length !== 0 || node) {
+                if (node) {
+                  Q2.push(node);
+                  node = node.left;
+                } else {
+                  node = Q2.pop();
+                  cmp2 = compare2(node.key, high);
+                  if (cmp2 > 0) {
+                    break;
+                  } else if (compare2(node.key, low) >= 0) {
+                    if (fn.call(ctx, node)) return this;
+                  }
+                  node = node.right;
+                }
               }
-              if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {
-                throw new Error("Infinite loop when passing sweep line over endpoints (queue size too big).");
+              return this;
+            };
+            Tree2.prototype.keys = function() {
+              var keys2 = [];
+              this.forEach(function(_a4) {
+                var key = _a4.key;
+                return keys2.push(key);
+              });
+              return keys2;
+            };
+            Tree2.prototype.values = function() {
+              var values = [];
+              this.forEach(function(_a4) {
+                var data = _a4.data;
+                return values.push(data);
+              });
+              return values;
+            };
+            Tree2.prototype.min = function() {
+              if (this._root) return this.minNode(this._root).key;
+              return null;
+            };
+            Tree2.prototype.max = function() {
+              if (this._root) return this.maxNode(this._root).key;
+              return null;
+            };
+            Tree2.prototype.minNode = function(t2) {
+              if (t2 === void 0) {
+                t2 = this._root;
               }
-              if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {
-                throw new Error("Infinite loop when passing sweep line over endpoints (too many sweep line segments).");
+              if (t2) while (t2.left) t2 = t2.left;
+              return t2;
+            };
+            Tree2.prototype.maxNode = function(t2) {
+              if (t2 === void 0) {
+                t2 = this._root;
               }
-              const newEvents = sweepLine.process(evt);
-              for (let i3 = 0, iMax = newEvents.length; i3 < iMax; i3++) {
-                const evt2 = newEvents[i3];
-                if (evt2.consumedBy === void 0) queue.insert(evt2);
+              if (t2) while (t2.right) t2 = t2.right;
+              return t2;
+            };
+            Tree2.prototype.at = function(index2) {
+              var current = this._root;
+              var done = false;
+              var i3 = 0;
+              var Q2 = [];
+              while (!done) {
+                if (current) {
+                  Q2.push(current);
+                  current = current.left;
+                } else {
+                  if (Q2.length > 0) {
+                    current = Q2.pop();
+                    if (i3 === index2) return current;
+                    i3++;
+                    current = current.right;
+                  } else done = true;
+                }
               }
-              prevQueueSize = queue.size;
-              node = queue.pop();
-            }
-            rounder.reset();
-            const ringsOut = RingOut2.factory(sweepLine.segments);
-            const result = new MultiPolyOut2(ringsOut);
-            return result.getGeom();
+              return null;
+            };
+            Tree2.prototype.next = function(d2) {
+              var root3 = this._root;
+              var successor = null;
+              if (d2.right) {
+                successor = d2.right;
+                while (successor.left) successor = successor.left;
+                return successor;
+              }
+              var comparator = this._comparator;
+              while (root3) {
+                var cmp2 = comparator(d2.key, root3.key);
+                if (cmp2 === 0) break;
+                else if (cmp2 < 0) {
+                  successor = root3;
+                  root3 = root3.left;
+                } else root3 = root3.right;
+              }
+              return successor;
+            };
+            Tree2.prototype.prev = function(d2) {
+              var root3 = this._root;
+              var predecessor = null;
+              if (d2.left !== null) {
+                predecessor = d2.left;
+                while (predecessor.right) predecessor = predecessor.right;
+                return predecessor;
+              }
+              var comparator = this._comparator;
+              while (root3) {
+                var cmp2 = comparator(d2.key, root3.key);
+                if (cmp2 === 0) break;
+                else if (cmp2 < 0) root3 = root3.left;
+                else {
+                  predecessor = root3;
+                  root3 = root3.right;
+                }
+              }
+              return predecessor;
+            };
+            Tree2.prototype.clear = function() {
+              this._root = null;
+              this._size = 0;
+              return this;
+            };
+            Tree2.prototype.toList = function() {
+              return toList(this._root);
+            };
+            Tree2.prototype.load = function(keys2, values, presort) {
+              if (values === void 0) {
+                values = [];
+              }
+              if (presort === void 0) {
+                presort = false;
+              }
+              var size = keys2.length;
+              var comparator = this._comparator;
+              if (presort) sort(keys2, values, 0, size - 1, comparator);
+              if (this._root === null) {
+                this._root = loadRecursive(keys2, values, 0, size);
+                this._size = size;
+              } else {
+                var mergedList = mergeLists(this.toList(), createList(keys2, values), comparator);
+                size = this._size + size;
+                this._root = sortedListToBST({
+                  head: mergedList
+                }, 0, size);
+              }
+              return this;
+            };
+            Tree2.prototype.isEmpty = function() {
+              return this._root === null;
+            };
+            Object.defineProperty(Tree2.prototype, "size", {
+              get: function() {
+                return this._size;
+              },
+              enumerable: true,
+              configurable: true
+            });
+            Object.defineProperty(Tree2.prototype, "root", {
+              get: function() {
+                return this._root;
+              },
+              enumerable: true,
+              configurable: true
+            });
+            Tree2.prototype.toString = function(printNode) {
+              if (printNode === void 0) {
+                printNode = function(n3) {
+                  return String(n3.key);
+                };
+              }
+              var out = [];
+              printRow(this._root, "", true, function(v2) {
+                return out.push(v2);
+              }, printNode);
+              return out.join("");
+            };
+            Tree2.prototype.update = function(key, newKey, newData) {
+              var comparator = this._comparator;
+              var _a4 = split(key, this._root, comparator), left = _a4.left, right = _a4.right;
+              if (comparator(key, newKey) < 0) {
+                right = insert(newKey, newData, right, comparator);
+              } else {
+                left = insert(newKey, newData, left, comparator);
+              }
+              this._root = merge2(left, right, comparator);
+            };
+            Tree2.prototype.split = function(key) {
+              return split(key, this._root, this._comparator);
+            };
+            Tree2.prototype[Symbol.iterator] = function() {
+              var current, Q2, done;
+              return __generator(this, function(_a4) {
+                switch (_a4.label) {
+                  case 0:
+                    current = this._root;
+                    Q2 = [];
+                    done = false;
+                    _a4.label = 1;
+                  case 1:
+                    if (!!done) return [3, 6];
+                    if (!(current !== null)) return [3, 2];
+                    Q2.push(current);
+                    current = current.left;
+                    return [3, 5];
+                  case 2:
+                    if (!(Q2.length !== 0)) return [3, 4];
+                    current = Q2.pop();
+                    return [4, current];
+                  case 3:
+                    _a4.sent();
+                    current = current.right;
+                    return [3, 5];
+                  case 4:
+                    done = true;
+                    _a4.label = 5;
+                  case 5:
+                    return [3, 1];
+                  case 6:
+                    return [
+                      2
+                      /*return*/
+                    ];
+                }
+              });
+            };
+            return Tree2;
+          }()
+        );
+        function loadRecursive(keys2, values, start2, end) {
+          var size = end - start2;
+          if (size > 0) {
+            var middle = start2 + Math.floor(size / 2);
+            var key = keys2[middle];
+            var data = values[middle];
+            var node = new Node(key, data);
+            node.left = loadRecursive(keys2, values, start2, middle);
+            node.right = loadRecursive(keys2, values, middle + 1, end);
+            return node;
           }
+          return null;
         }
-        const operation2 = new Operation2();
-        const union2 = function(geom) {
-          for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
-            moreGeoms[_key - 1] = arguments[_key];
+        function createList(keys2, values) {
+          var head = new Node(null, null);
+          var p2 = head;
+          for (var i3 = 0; i3 < keys2.length; i3++) {
+            p2 = p2.next = new Node(keys2[i3], values[i3]);
           }
-          return operation2.run("union", geom, moreGeoms);
-        };
-        const intersection2 = function(geom) {
-          for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
-            moreGeoms[_key2 - 1] = arguments[_key2];
+          p2.next = null;
+          return head.next;
+        }
+        function toList(root3) {
+          var current = root3;
+          var Q2 = [];
+          var done = false;
+          var head = new Node(null, null);
+          var p2 = head;
+          while (!done) {
+            if (current) {
+              Q2.push(current);
+              current = current.left;
+            } else {
+              if (Q2.length > 0) {
+                current = p2 = p2.next = Q2.pop();
+                current = current.right;
+              } else done = true;
+            }
           }
-          return operation2.run("intersection", geom, moreGeoms);
-        };
-        const xor = function(geom) {
-          for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
-            moreGeoms[_key3 - 1] = arguments[_key3];
+          p2.next = null;
+          return head.next;
+        }
+        function sortedListToBST(list2, start2, end) {
+          var size = end - start2;
+          if (size > 0) {
+            var middle = start2 + Math.floor(size / 2);
+            var left = sortedListToBST(list2, start2, middle);
+            var root3 = list2.head;
+            root3.left = left;
+            list2.head = list2.head.next;
+            root3.right = sortedListToBST(list2, middle + 1, end);
+            return root3;
           }
-          return operation2.run("xor", geom, moreGeoms);
-        };
-        const difference2 = function(subjectGeom) {
-          for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
-            clippingGeoms[_key4 - 1] = arguments[_key4];
+          return null;
+        }
+        function mergeLists(l1, l2, compare2) {
+          var head = new Node(null, null);
+          var p2 = head;
+          var p1 = l1;
+          var p22 = l2;
+          while (p1 !== null && p22 !== null) {
+            if (compare2(p1.key, p22.key) < 0) {
+              p2.next = p1;
+              p1 = p1.next;
+            } else {
+              p2.next = p22;
+              p22 = p22.next;
+            }
+            p2 = p2.next;
           }
-          return operation2.run("difference", subjectGeom, clippingGeoms);
+          if (p1 !== null) {
+            p2.next = p1;
+          } else if (p22 !== null) {
+            p2.next = p22;
+          }
+          return head.next;
+        }
+        function sort(keys2, values, left, right, compare2) {
+          if (left >= right) return;
+          var pivot = keys2[left + right >> 1];
+          var i3 = left - 1;
+          var j2 = right + 1;
+          while (true) {
+            do
+              i3++;
+            while (compare2(keys2[i3], pivot) < 0);
+            do
+              j2--;
+            while (compare2(keys2[j2], pivot) > 0);
+            if (i3 >= j2) break;
+            var tmp = keys2[i3];
+            keys2[i3] = keys2[j2];
+            keys2[j2] = tmp;
+            tmp = values[i3];
+            values[i3] = values[j2];
+            values[j2] = tmp;
+          }
+          sort(keys2, values, left, j2, compare2);
+          sort(keys2, values, j2 + 1, right, compare2);
+        }
+        const isInBbox2 = (bbox2, point) => {
+          return bbox2.ll.x <= point.x && point.x <= bbox2.ur.x && bbox2.ll.y <= point.y && point.y <= bbox2.ur.y;
         };
-        var index = {
-          union: union2,
-          intersection: intersection2,
-          xor,
-          difference: difference2
+        const getBboxOverlap2 = (b1, b2) => {
+          if (b2.ur.x < b1.ll.x || b1.ur.x < b2.ll.x || b2.ur.y < b1.ll.y || b1.ur.y < b2.ll.y) return null;
+          const lowerX = b1.ll.x < b2.ll.x ? b2.ll.x : b1.ll.x;
+          const upperX = b1.ur.x < b2.ur.x ? b1.ur.x : b2.ur.x;
+          const lowerY = b1.ll.y < b2.ll.y ? b2.ll.y : b1.ll.y;
+          const upperY = b1.ur.y < b2.ur.y ? b1.ur.y : b2.ur.y;
+          return {
+            ll: {
+              x: lowerX,
+              y: lowerY
+            },
+            ur: {
+              x: upperX,
+              y: upperY
+            }
+          };
         };
-        return index;
-      });
-    }
-  });
-
-  // node_modules/whatwg-fetch/fetch.js
-  var g = typeof globalThis !== "undefined" && globalThis || typeof self !== "undefined" && self || // eslint-disable-next-line no-undef
-  typeof global !== "undefined" && global || {};
-  var support = {
-    searchParams: "URLSearchParams" in g,
-    iterable: "Symbol" in g && "iterator" in Symbol,
-    blob: "FileReader" in g && "Blob" in g && function() {
-      try {
-        new Blob();
-        return true;
-      } catch (e3) {
-        return false;
-      }
-    }(),
-    formData: "FormData" in g,
-    arrayBuffer: "ArrayBuffer" in g
-  };
-  function isDataView(obj) {
-    return obj && DataView.prototype.isPrototypeOf(obj);
-  }
-  if (support.arrayBuffer) {
-    viewClasses = [
-      "[object Int8Array]",
-      "[object Uint8Array]",
-      "[object Uint8ClampedArray]",
-      "[object Int16Array]",
-      "[object Uint16Array]",
-      "[object Int32Array]",
-      "[object Uint32Array]",
-      "[object Float32Array]",
-      "[object Float64Array]"
-    ];
-    isArrayBufferView = ArrayBuffer.isView || function(obj) {
-      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
-    };
-  }
-  var viewClasses;
-  var isArrayBufferView;
-  function normalizeName(name) {
-    if (typeof name !== "string") {
-      name = String(name);
-    }
-    if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "") {
-      throw new TypeError('Invalid character in header field name: "' + name + '"');
-    }
-    return name.toLowerCase();
-  }
-  function normalizeValue(value) {
-    if (typeof value !== "string") {
-      value = String(value);
-    }
-    return value;
-  }
-  function iteratorFor(items) {
-    var iterator = {
-      next: function() {
-        var value = items.shift();
-        return { done: value === void 0, value };
-      }
-    };
-    if (support.iterable) {
-      iterator[Symbol.iterator] = function() {
-        return iterator;
-      };
-    }
-    return iterator;
-  }
-  function Headers(headers) {
-    this.map = {};
-    if (headers instanceof Headers) {
-      headers.forEach(function(value, name) {
-        this.append(name, value);
-      }, this);
-    } else if (Array.isArray(headers)) {
-      headers.forEach(function(header) {
-        if (header.length != 2) {
-          throw new TypeError("Headers constructor: expected name/value pair to be length 2, found" + header.length);
+        let epsilon$1 = Number.EPSILON;
+        if (epsilon$1 === void 0) epsilon$1 = Math.pow(2, -52);
+        const EPSILON_SQ = epsilon$1 * epsilon$1;
+        const cmp = (a2, b2) => {
+          if (-epsilon$1 < a2 && a2 < epsilon$1) {
+            if (-epsilon$1 < b2 && b2 < epsilon$1) {
+              return 0;
+            }
+          }
+          const ab = a2 - b2;
+          if (ab * ab < EPSILON_SQ * a2 * b2) {
+            return 0;
+          }
+          return a2 < b2 ? -1 : 1;
+        };
+        class PtRounder {
+          constructor() {
+            this.reset();
+          }
+          reset() {
+            this.xRounder = new CoordRounder();
+            this.yRounder = new CoordRounder();
+          }
+          round(x2, y2) {
+            return {
+              x: this.xRounder.round(x2),
+              y: this.yRounder.round(y2)
+            };
+          }
         }
-        this.append(header[0], header[1]);
-      }, this);
-    } else if (headers) {
-      Object.getOwnPropertyNames(headers).forEach(function(name) {
-        this.append(name, headers[name]);
-      }, this);
-    }
-  }
-  Headers.prototype.append = function(name, value) {
-    name = normalizeName(name);
-    value = normalizeValue(value);
-    var oldValue = this.map[name];
-    this.map[name] = oldValue ? oldValue + ", " + value : value;
-  };
-  Headers.prototype["delete"] = function(name) {
-    delete this.map[normalizeName(name)];
-  };
-  Headers.prototype.get = function(name) {
-    name = normalizeName(name);
-    return this.has(name) ? this.map[name] : null;
-  };
-  Headers.prototype.has = function(name) {
-    return this.map.hasOwnProperty(normalizeName(name));
-  };
-  Headers.prototype.set = function(name, value) {
-    this.map[normalizeName(name)] = normalizeValue(value);
-  };
-  Headers.prototype.forEach = function(callback, thisArg) {
-    for (var name in this.map) {
-      if (this.map.hasOwnProperty(name)) {
-        callback.call(thisArg, this.map[name], name, this);
-      }
-    }
-  };
-  Headers.prototype.keys = function() {
-    var items = [];
-    this.forEach(function(value, name) {
-      items.push(name);
-    });
-    return iteratorFor(items);
-  };
-  Headers.prototype.values = function() {
-    var items = [];
-    this.forEach(function(value) {
-      items.push(value);
-    });
-    return iteratorFor(items);
-  };
-  Headers.prototype.entries = function() {
-    var items = [];
-    this.forEach(function(value, name) {
-      items.push([name, value]);
-    });
-    return iteratorFor(items);
-  };
-  if (support.iterable) {
-    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
-  }
-  function consumed(body) {
-    if (body._noBody) return;
-    if (body.bodyUsed) {
-      return Promise.reject(new TypeError("Already read"));
-    }
-    body.bodyUsed = true;
-  }
-  function fileReaderReady(reader) {
-    return new Promise(function(resolve, reject) {
-      reader.onload = function() {
-        resolve(reader.result);
-      };
-      reader.onerror = function() {
-        reject(reader.error);
-      };
-    });
-  }
-  function readBlobAsArrayBuffer(blob) {
-    var reader = new FileReader();
-    var promise = fileReaderReady(reader);
-    reader.readAsArrayBuffer(blob);
-    return promise;
-  }
-  function readBlobAsText(blob) {
-    var reader = new FileReader();
-    var promise = fileReaderReady(reader);
-    var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);
-    var encoding = match ? match[1] : "utf-8";
-    reader.readAsText(blob, encoding);
-    return promise;
-  }
-  function readArrayBufferAsText(buf) {
-    var view = new Uint8Array(buf);
-    var chars = new Array(view.length);
-    for (var i3 = 0; i3 < view.length; i3++) {
-      chars[i3] = String.fromCharCode(view[i3]);
-    }
-    return chars.join("");
-  }
-  function bufferClone(buf) {
-    if (buf.slice) {
-      return buf.slice(0);
-    } else {
-      var view = new Uint8Array(buf.byteLength);
-      view.set(new Uint8Array(buf));
-      return view.buffer;
-    }
-  }
-  function Body() {
-    this.bodyUsed = false;
-    this._initBody = function(body) {
-      this.bodyUsed = this.bodyUsed;
-      this._bodyInit = body;
-      if (!body) {
-        this._noBody = true;
-        this._bodyText = "";
-      } else if (typeof body === "string") {
-        this._bodyText = body;
-      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
-        this._bodyBlob = body;
-      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
-        this._bodyFormData = body;
-      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
-        this._bodyText = body.toString();
-      } else if (support.arrayBuffer && support.blob && isDataView(body)) {
-        this._bodyArrayBuffer = bufferClone(body.buffer);
-        this._bodyInit = new Blob([this._bodyArrayBuffer]);
-      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
-        this._bodyArrayBuffer = bufferClone(body);
-      } else {
-        this._bodyText = body = Object.prototype.toString.call(body);
-      }
-      if (!this.headers.get("content-type")) {
-        if (typeof body === "string") {
-          this.headers.set("content-type", "text/plain;charset=UTF-8");
-        } else if (this._bodyBlob && this._bodyBlob.type) {
-          this.headers.set("content-type", this._bodyBlob.type);
-        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
-          this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
-        }
-      }
-    };
-    if (support.blob) {
-      this.blob = function() {
-        var rejected = consumed(this);
-        if (rejected) {
-          return rejected;
-        }
-        if (this._bodyBlob) {
-          return Promise.resolve(this._bodyBlob);
-        } else if (this._bodyArrayBuffer) {
-          return Promise.resolve(new Blob([this._bodyArrayBuffer]));
-        } else if (this._bodyFormData) {
-          throw new Error("could not read FormData body as blob");
-        } else {
-          return Promise.resolve(new Blob([this._bodyText]));
-        }
-      };
-    }
-    this.arrayBuffer = function() {
-      if (this._bodyArrayBuffer) {
-        var isConsumed = consumed(this);
-        if (isConsumed) {
-          return isConsumed;
-        } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {
-          return Promise.resolve(
-            this._bodyArrayBuffer.buffer.slice(
-              this._bodyArrayBuffer.byteOffset,
-              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength
-            )
-          );
-        } else {
-          return Promise.resolve(this._bodyArrayBuffer);
-        }
-      } else if (support.blob) {
-        return this.blob().then(readBlobAsArrayBuffer);
-      } else {
-        throw new Error("could not read as ArrayBuffer");
-      }
-    };
-    this.text = function() {
-      var rejected = consumed(this);
-      if (rejected) {
-        return rejected;
-      }
-      if (this._bodyBlob) {
-        return readBlobAsText(this._bodyBlob);
-      } else if (this._bodyArrayBuffer) {
-        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
-      } else if (this._bodyFormData) {
-        throw new Error("could not read FormData body as text");
-      } else {
-        return Promise.resolve(this._bodyText);
-      }
-    };
-    if (support.formData) {
-      this.formData = function() {
-        return this.text().then(decode);
-      };
-    }
-    this.json = function() {
-      return this.text().then(JSON.parse);
-    };
-    return this;
-  }
-  var methods = ["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"];
-  function normalizeMethod(method) {
-    var upcased = method.toUpperCase();
-    return methods.indexOf(upcased) > -1 ? upcased : method;
-  }
-  function Request(input, options2) {
-    if (!(this instanceof Request)) {
-      throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
-    }
-    options2 = options2 || {};
-    var body = options2.body;
-    if (input instanceof Request) {
-      if (input.bodyUsed) {
-        throw new TypeError("Already read");
-      }
-      this.url = input.url;
-      this.credentials = input.credentials;
-      if (!options2.headers) {
-        this.headers = new Headers(input.headers);
-      }
-      this.method = input.method;
-      this.mode = input.mode;
-      this.signal = input.signal;
-      if (!body && input._bodyInit != null) {
-        body = input._bodyInit;
-        input.bodyUsed = true;
-      }
-    } else {
-      this.url = String(input);
-    }
-    this.credentials = options2.credentials || this.credentials || "same-origin";
-    if (options2.headers || !this.headers) {
-      this.headers = new Headers(options2.headers);
-    }
-    this.method = normalizeMethod(options2.method || this.method || "GET");
-    this.mode = options2.mode || this.mode || null;
-    this.signal = options2.signal || this.signal || function() {
-      if ("AbortController" in g) {
-        var ctrl = new AbortController();
-        return ctrl.signal;
-      }
-    }();
-    this.referrer = null;
-    if ((this.method === "GET" || this.method === "HEAD") && body) {
-      throw new TypeError("Body not allowed for GET or HEAD requests");
-    }
-    this._initBody(body);
-    if (this.method === "GET" || this.method === "HEAD") {
-      if (options2.cache === "no-store" || options2.cache === "no-cache") {
-        var reParamSearch = /([?&])_=[^&]*/;
-        if (reParamSearch.test(this.url)) {
-          this.url = this.url.replace(reParamSearch, "$1_=" + (/* @__PURE__ */ new Date()).getTime());
-        } else {
-          var reQueryString = /\?/;
-          this.url += (reQueryString.test(this.url) ? "&" : "?") + "_=" + (/* @__PURE__ */ new Date()).getTime();
-        }
-      }
-    }
-  }
-  Request.prototype.clone = function() {
-    return new Request(this, { body: this._bodyInit });
-  };
-  function decode(body) {
-    var form = new FormData();
-    body.trim().split("&").forEach(function(bytes) {
-      if (bytes) {
-        var split = bytes.split("=");
-        var name = split.shift().replace(/\+/g, " ");
-        var value = split.join("=").replace(/\+/g, " ");
-        form.append(decodeURIComponent(name), decodeURIComponent(value));
-      }
-    });
-    return form;
-  }
-  function parseHeaders(rawHeaders) {
-    var headers = new Headers();
-    var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " ");
-    preProcessedHeaders.split("\r").map(function(header) {
-      return header.indexOf("\n") === 0 ? header.substr(1, header.length) : header;
-    }).forEach(function(line) {
-      var parts = line.split(":");
-      var key = parts.shift().trim();
-      if (key) {
-        var value = parts.join(":").trim();
-        try {
-          headers.append(key, value);
-        } catch (error) {
-          console.warn("Response " + error.message);
-        }
-      }
-    });
-    return headers;
-  }
-  Body.call(Request.prototype);
-  function Response(bodyInit, options2) {
-    if (!(this instanceof Response)) {
-      throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
-    }
-    if (!options2) {
-      options2 = {};
-    }
-    this.type = "default";
-    this.status = options2.status === void 0 ? 200 : options2.status;
-    if (this.status < 200 || this.status > 599) {
-      throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");
-    }
-    this.ok = this.status >= 200 && this.status < 300;
-    this.statusText = options2.statusText === void 0 ? "" : "" + options2.statusText;
-    this.headers = new Headers(options2.headers);
-    this.url = options2.url || "";
-    this._initBody(bodyInit);
-  }
-  Body.call(Response.prototype);
-  Response.prototype.clone = function() {
-    return new Response(this._bodyInit, {
-      status: this.status,
-      statusText: this.statusText,
-      headers: new Headers(this.headers),
-      url: this.url
-    });
-  };
-  Response.error = function() {
-    var response = new Response(null, { status: 200, statusText: "" });
-    response.ok = false;
-    response.status = 0;
-    response.type = "error";
-    return response;
-  };
-  var redirectStatuses = [301, 302, 303, 307, 308];
-  Response.redirect = function(url, status) {
-    if (redirectStatuses.indexOf(status) === -1) {
-      throw new RangeError("Invalid status code");
-    }
-    return new Response(null, { status, headers: { location: url } });
-  };
-  var DOMException2 = g.DOMException;
-  try {
-    new DOMException2();
-  } catch (err) {
-    DOMException2 = function(message, name) {
-      this.message = message;
-      this.name = name;
-      var error = Error(message);
-      this.stack = error.stack;
-    };
-    DOMException2.prototype = Object.create(Error.prototype);
-    DOMException2.prototype.constructor = DOMException2;
-  }
-  function fetch2(input, init2) {
-    return new Promise(function(resolve, reject) {
-      var request3 = new Request(input, init2);
-      if (request3.signal && request3.signal.aborted) {
-        return reject(new DOMException2("Aborted", "AbortError"));
-      }
-      var xhr = new XMLHttpRequest();
-      function abortXhr() {
-        xhr.abort();
-      }
-      xhr.onload = function() {
-        var options2 = {
-          statusText: xhr.statusText,
-          headers: parseHeaders(xhr.getAllResponseHeaders() || "")
-        };
-        if (request3.url.indexOf("file://") === 0 && (xhr.status < 200 || xhr.status > 599)) {
-          options2.status = 200;
-        } else {
-          options2.status = xhr.status;
-        }
-        options2.url = "responseURL" in xhr ? xhr.responseURL : options2.headers.get("X-Request-URL");
-        var body = "response" in xhr ? xhr.response : xhr.responseText;
-        setTimeout(function() {
-          resolve(new Response(body, options2));
-        }, 0);
-      };
-      xhr.onerror = function() {
-        setTimeout(function() {
-          reject(new TypeError("Network request failed"));
-        }, 0);
-      };
-      xhr.ontimeout = function() {
-        setTimeout(function() {
-          reject(new TypeError("Network request timed out"));
-        }, 0);
-      };
-      xhr.onabort = function() {
-        setTimeout(function() {
-          reject(new DOMException2("Aborted", "AbortError"));
-        }, 0);
-      };
-      function fixUrl(url) {
-        try {
-          return url === "" && g.location.href ? g.location.href : url;
-        } catch (e3) {
-          return url;
-        }
-      }
-      xhr.open(request3.method, fixUrl(request3.url), true);
-      if (request3.credentials === "include") {
-        xhr.withCredentials = true;
-      } else if (request3.credentials === "omit") {
-        xhr.withCredentials = false;
-      }
-      if ("responseType" in xhr) {
-        if (support.blob) {
-          xhr.responseType = "blob";
-        } else if (support.arrayBuffer) {
-          xhr.responseType = "arraybuffer";
-        }
-      }
-      if (init2 && typeof init2.headers === "object" && !(init2.headers instanceof Headers || g.Headers && init2.headers instanceof g.Headers)) {
-        var names = [];
-        Object.getOwnPropertyNames(init2.headers).forEach(function(name) {
-          names.push(normalizeName(name));
-          xhr.setRequestHeader(name, normalizeValue(init2.headers[name]));
-        });
-        request3.headers.forEach(function(value, name) {
-          if (names.indexOf(name) === -1) {
-            xhr.setRequestHeader(name, value);
-          }
-        });
-      } else {
-        request3.headers.forEach(function(value, name) {
-          xhr.setRequestHeader(name, value);
-        });
-      }
-      if (request3.signal) {
-        request3.signal.addEventListener("abort", abortXhr);
-        xhr.onreadystatechange = function() {
-          if (xhr.readyState === 4) {
-            request3.signal.removeEventListener("abort", abortXhr);
+        class CoordRounder {
+          constructor() {
+            this.tree = new Tree();
+            this.round(0);
           }
-        };
-      }
-      xhr.send(typeof request3._bodyInit === "undefined" ? null : request3._bodyInit);
-    });
-  }
-  fetch2.polyfill = true;
-  if (!g.fetch) {
-    g.fetch = fetch2;
-    g.Headers = Headers;
-    g.Request = Request;
-    g.Response = Response;
-  }
-
-  // node_modules/abortcontroller-polyfill/dist/polyfill-patch-fetch.js
-  (function(factory) {
-    typeof define === "function" && define.amd ? define(factory) : factory();
-  })(function() {
-    "use strict";
-    function _classCallCheck(instance, Constructor) {
-      if (!(instance instanceof Constructor)) {
-        throw new TypeError("Cannot call a class as a function");
-      }
-    }
-    function _defineProperties(target, props) {
-      for (var i3 = 0; i3 < props.length; i3++) {
-        var descriptor = props[i3];
-        descriptor.enumerable = descriptor.enumerable || false;
-        descriptor.configurable = true;
-        if ("value" in descriptor) descriptor.writable = true;
-        Object.defineProperty(target, descriptor.key, descriptor);
-      }
-    }
-    function _createClass(Constructor, protoProps, staticProps) {
-      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
-      if (staticProps) _defineProperties(Constructor, staticProps);
-      Object.defineProperty(Constructor, "prototype", {
-        writable: false
-      });
-      return Constructor;
-    }
-    function _inherits(subClass, superClass) {
-      if (typeof superClass !== "function" && superClass !== null) {
-        throw new TypeError("Super expression must either be null or a function");
-      }
-      subClass.prototype = Object.create(superClass && superClass.prototype, {
-        constructor: {
-          value: subClass,
-          writable: true,
-          configurable: true
-        }
-      });
-      Object.defineProperty(subClass, "prototype", {
-        writable: false
-      });
-      if (superClass) _setPrototypeOf(subClass, superClass);
-    }
-    function _getPrototypeOf(o2) {
-      _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o3) {
-        return o3.__proto__ || Object.getPrototypeOf(o3);
-      };
-      return _getPrototypeOf(o2);
-    }
-    function _setPrototypeOf(o2, p2) {
-      _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o3, p3) {
-        o3.__proto__ = p3;
-        return o3;
-      };
-      return _setPrototypeOf(o2, p2);
-    }
-    function _isNativeReflectConstruct() {
-      if (typeof Reflect === "undefined" || !Reflect.construct) return false;
-      if (Reflect.construct.sham) return false;
-      if (typeof Proxy === "function") return true;
-      try {
-        Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
-        }));
-        return true;
-      } catch (e3) {
-        return false;
-      }
-    }
-    function _assertThisInitialized(self2) {
-      if (self2 === void 0) {
-        throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
-      }
-      return self2;
-    }
-    function _possibleConstructorReturn(self2, call) {
-      if (call && (typeof call === "object" || typeof call === "function")) {
-        return call;
-      } else if (call !== void 0) {
-        throw new TypeError("Derived constructors may only return object or undefined");
-      }
-      return _assertThisInitialized(self2);
-    }
-    function _createSuper(Derived) {
-      var hasNativeReflectConstruct = _isNativeReflectConstruct();
-      return function _createSuperInternal() {
-        var Super = _getPrototypeOf(Derived), result;
-        if (hasNativeReflectConstruct) {
-          var NewTarget = _getPrototypeOf(this).constructor;
-          result = Reflect.construct(Super, arguments, NewTarget);
-        } else {
-          result = Super.apply(this, arguments);
-        }
-        return _possibleConstructorReturn(this, result);
-      };
-    }
-    function _superPropBase(object, property) {
-      while (!Object.prototype.hasOwnProperty.call(object, property)) {
-        object = _getPrototypeOf(object);
-        if (object === null) break;
-      }
-      return object;
-    }
-    function _get() {
-      if (typeof Reflect !== "undefined" && Reflect.get) {
-        _get = Reflect.get.bind();
-      } else {
-        _get = function _get2(target, property, receiver) {
-          var base = _superPropBase(target, property);
-          if (!base) return;
-          var desc = Object.getOwnPropertyDescriptor(base, property);
-          if (desc.get) {
-            return desc.get.call(arguments.length < 3 ? target : receiver);
-          }
-          return desc.value;
-        };
-      }
-      return _get.apply(this, arguments);
-    }
-    var Emitter = /* @__PURE__ */ function() {
-      function Emitter2() {
-        _classCallCheck(this, Emitter2);
-        Object.defineProperty(this, "listeners", {
-          value: {},
-          writable: true,
-          configurable: true
-        });
-      }
-      _createClass(Emitter2, [{
-        key: "addEventListener",
-        value: function addEventListener(type2, callback, options2) {
-          if (!(type2 in this.listeners)) {
-            this.listeners[type2] = [];
+          // Note: this can rounds input values backwards or forwards.
+          //       You might ask, why not restrict this to just rounding
+          //       forwards? Wouldn't that allow left endpoints to always
+          //       remain left endpoints during splitting (never change to
+          //       right). No - it wouldn't, because we snap intersections
+          //       to endpoints (to establish independence from the segment
+          //       angle for t-intersections).
+          round(coord2) {
+            const node = this.tree.add(coord2);
+            const prevNode = this.tree.prev(node);
+            if (prevNode !== null && cmp(node.key, prevNode.key) === 0) {
+              this.tree.remove(coord2);
+              return prevNode.key;
+            }
+            const nextNode = this.tree.next(node);
+            if (nextNode !== null && cmp(node.key, nextNode.key) === 0) {
+              this.tree.remove(coord2);
+              return nextNode.key;
+            }
+            return coord2;
           }
-          this.listeners[type2].push({
-            callback,
-            options: options2
-          });
         }
-      }, {
-        key: "removeEventListener",
-        value: function removeEventListener(type2, callback) {
-          if (!(type2 in this.listeners)) {
-            return;
+        const rounder = new PtRounder();
+        const epsilon3 = 11102230246251565e-32;
+        const splitter = 134217729;
+        const resulterrbound = (3 + 8 * epsilon3) * epsilon3;
+        function sum(elen, e3, flen, f2, h2) {
+          let Q2, Qnew, hh, bvirt;
+          let enow = e3[0];
+          let fnow = f2[0];
+          let eindex = 0;
+          let findex = 0;
+          if (fnow > enow === fnow > -enow) {
+            Q2 = enow;
+            enow = e3[++eindex];
+          } else {
+            Q2 = fnow;
+            fnow = f2[++findex];
           }
-          var stack = this.listeners[type2];
-          for (var i3 = 0, l2 = stack.length; i3 < l2; i3++) {
-            if (stack[i3].callback === callback) {
-              stack.splice(i3, 1);
-              return;
+          let hindex = 0;
+          if (eindex < elen && findex < flen) {
+            if (fnow > enow === fnow > -enow) {
+              Qnew = enow + Q2;
+              hh = Q2 - (Qnew - enow);
+              enow = e3[++eindex];
+            } else {
+              Qnew = fnow + Q2;
+              hh = Q2 - (Qnew - fnow);
+              fnow = f2[++findex];
+            }
+            Q2 = Qnew;
+            if (hh !== 0) {
+              h2[hindex++] = hh;
+            }
+            while (eindex < elen && findex < flen) {
+              if (fnow > enow === fnow > -enow) {
+                Qnew = Q2 + enow;
+                bvirt = Qnew - Q2;
+                hh = Q2 - (Qnew - bvirt) + (enow - bvirt);
+                enow = e3[++eindex];
+              } else {
+                Qnew = Q2 + fnow;
+                bvirt = Qnew - Q2;
+                hh = Q2 - (Qnew - bvirt) + (fnow - bvirt);
+                fnow = f2[++findex];
+              }
+              Q2 = Qnew;
+              if (hh !== 0) {
+                h2[hindex++] = hh;
+              }
             }
           }
-        }
-      }, {
-        key: "dispatchEvent",
-        value: function dispatchEvent2(event) {
-          if (!(event.type in this.listeners)) {
-            return;
-          }
-          var stack = this.listeners[event.type];
-          var stackToCall = stack.slice();
-          for (var i3 = 0, l2 = stackToCall.length; i3 < l2; i3++) {
-            var listener = stackToCall[i3];
-            try {
-              listener.callback.call(this, event);
-            } catch (e3) {
-              Promise.resolve().then(function() {
-                throw e3;
-              });
+          while (eindex < elen) {
+            Qnew = Q2 + enow;
+            bvirt = Qnew - Q2;
+            hh = Q2 - (Qnew - bvirt) + (enow - bvirt);
+            enow = e3[++eindex];
+            Q2 = Qnew;
+            if (hh !== 0) {
+              h2[hindex++] = hh;
             }
-            if (listener.options && listener.options.once) {
-              this.removeEventListener(event.type, listener.callback);
+          }
+          while (findex < flen) {
+            Qnew = Q2 + fnow;
+            bvirt = Qnew - Q2;
+            hh = Q2 - (Qnew - bvirt) + (fnow - bvirt);
+            fnow = f2[++findex];
+            Q2 = Qnew;
+            if (hh !== 0) {
+              h2[hindex++] = hh;
             }
           }
-          return !event.defaultPrevented;
-        }
-      }]);
-      return Emitter2;
-    }();
-    var AbortSignal = /* @__PURE__ */ function(_Emitter) {
-      _inherits(AbortSignal2, _Emitter);
-      var _super = _createSuper(AbortSignal2);
-      function AbortSignal2() {
-        var _this;
-        _classCallCheck(this, AbortSignal2);
-        _this = _super.call(this);
-        if (!_this.listeners) {
-          Emitter.call(_assertThisInitialized(_this));
+          if (Q2 !== 0 || hindex === 0) {
+            h2[hindex++] = Q2;
+          }
+          return hindex;
         }
-        Object.defineProperty(_assertThisInitialized(_this), "aborted", {
-          value: false,
-          writable: true,
-          configurable: true
-        });
-        Object.defineProperty(_assertThisInitialized(_this), "onabort", {
-          value: null,
-          writable: true,
-          configurable: true
-        });
-        Object.defineProperty(_assertThisInitialized(_this), "reason", {
-          value: void 0,
-          writable: true,
-          configurable: true
-        });
-        return _this;
-      }
-      _createClass(AbortSignal2, [{
-        key: "toString",
-        value: function toString2() {
-          return "[object AbortSignal]";
+        function estimate(elen, e3) {
+          let Q2 = e3[0];
+          for (let i3 = 1; i3 < elen; i3++) Q2 += e3[i3];
+          return Q2;
         }
-      }, {
-        key: "dispatchEvent",
-        value: function dispatchEvent2(event) {
-          if (event.type === "abort") {
-            this.aborted = true;
-            if (typeof this.onabort === "function") {
-              this.onabort.call(this, event);
-            }
-          }
-          _get(_getPrototypeOf(AbortSignal2.prototype), "dispatchEvent", this).call(this, event);
+        function vec(n3) {
+          return new Float64Array(n3);
         }
-      }]);
-      return AbortSignal2;
-    }(Emitter);
-    var AbortController2 = /* @__PURE__ */ function() {
-      function AbortController3() {
-        _classCallCheck(this, AbortController3);
-        Object.defineProperty(this, "signal", {
-          value: new AbortSignal(),
-          writable: true,
-          configurable: true
-        });
-      }
-      _createClass(AbortController3, [{
-        key: "abort",
-        value: function abort(reason) {
-          var event;
-          try {
-            event = new Event("abort");
-          } catch (e3) {
-            if (typeof document !== "undefined") {
-              if (!document.createEvent) {
-                event = document.createEventObject();
-                event.type = "abort";
-              } else {
-                event = document.createEvent("Event");
-                event.initEvent("abort", false, false);
-              }
-            } else {
-              event = {
-                type: "abort",
-                bubbles: false,
-                cancelable: false
-              };
-            }
+        const ccwerrboundA = (3 + 16 * epsilon3) * epsilon3;
+        const ccwerrboundB = (2 + 12 * epsilon3) * epsilon3;
+        const ccwerrboundC = (9 + 64 * epsilon3) * epsilon3 * epsilon3;
+        const B2 = vec(4);
+        const C1 = vec(8);
+        const C2 = vec(12);
+        const D2 = vec(16);
+        const u2 = vec(4);
+        function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {
+          let acxtail, acytail, bcxtail, bcytail;
+          let bvirt, c2, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;
+          const acx = ax - cx;
+          const bcx = bx - cx;
+          const acy = ay - cy;
+          const bcy = by - cy;
+          s1 = acx * bcy;
+          c2 = splitter * acx;
+          ahi = c2 - (c2 - acx);
+          alo = acx - ahi;
+          c2 = splitter * bcy;
+          bhi = c2 - (c2 - bcy);
+          blo = bcy - bhi;
+          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
+          t1 = acy * bcx;
+          c2 = splitter * acy;
+          ahi = c2 - (c2 - acy);
+          alo = acy - ahi;
+          c2 = splitter * bcx;
+          bhi = c2 - (c2 - bcx);
+          blo = bcx - bhi;
+          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
+          _i = s0 - t0;
+          bvirt = s0 - _i;
+          B2[0] = s0 - (_i + bvirt) + (bvirt - t0);
+          _j = s1 + _i;
+          bvirt = _j - s1;
+          _0 = s1 - (_j - bvirt) + (_i - bvirt);
+          _i = _0 - t1;
+          bvirt = _0 - _i;
+          B2[1] = _0 - (_i + bvirt) + (bvirt - t1);
+          u3 = _j + _i;
+          bvirt = u3 - _j;
+          B2[2] = _j - (u3 - bvirt) + (_i - bvirt);
+          B2[3] = u3;
+          let det = estimate(4, B2);
+          let errbound = ccwerrboundB * detsum;
+          if (det >= errbound || -det >= errbound) {
+            return det;
           }
-          var signalReason = reason;
-          if (signalReason === void 0) {
-            if (typeof document === "undefined") {
-              signalReason = new Error("This operation was aborted");
-              signalReason.name = "AbortError";
-            } else {
-              try {
-                signalReason = new DOMException("signal is aborted without reason");
-              } catch (err) {
-                signalReason = new Error("This operation was aborted");
-                signalReason.name = "AbortError";
-              }
-            }
+          bvirt = ax - acx;
+          acxtail = ax - (acx + bvirt) + (bvirt - cx);
+          bvirt = bx - bcx;
+          bcxtail = bx - (bcx + bvirt) + (bvirt - cx);
+          bvirt = ay - acy;
+          acytail = ay - (acy + bvirt) + (bvirt - cy);
+          bvirt = by - bcy;
+          bcytail = by - (bcy + bvirt) + (bvirt - cy);
+          if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {
+            return det;
           }
-          this.signal.reason = signalReason;
-          this.signal.dispatchEvent(event);
+          errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);
+          det += acx * bcytail + bcy * acxtail - (acy * bcxtail + bcx * acytail);
+          if (det >= errbound || -det >= errbound) return det;
+          s1 = acxtail * bcy;
+          c2 = splitter * acxtail;
+          ahi = c2 - (c2 - acxtail);
+          alo = acxtail - ahi;
+          c2 = splitter * bcy;
+          bhi = c2 - (c2 - bcy);
+          blo = bcy - bhi;
+          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
+          t1 = acytail * bcx;
+          c2 = splitter * acytail;
+          ahi = c2 - (c2 - acytail);
+          alo = acytail - ahi;
+          c2 = splitter * bcx;
+          bhi = c2 - (c2 - bcx);
+          blo = bcx - bhi;
+          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
+          _i = s0 - t0;
+          bvirt = s0 - _i;
+          u2[0] = s0 - (_i + bvirt) + (bvirt - t0);
+          _j = s1 + _i;
+          bvirt = _j - s1;
+          _0 = s1 - (_j - bvirt) + (_i - bvirt);
+          _i = _0 - t1;
+          bvirt = _0 - _i;
+          u2[1] = _0 - (_i + bvirt) + (bvirt - t1);
+          u3 = _j + _i;
+          bvirt = u3 - _j;
+          u2[2] = _j - (u3 - bvirt) + (_i - bvirt);
+          u2[3] = u3;
+          const C1len = sum(4, B2, 4, u2, C1);
+          s1 = acx * bcytail;
+          c2 = splitter * acx;
+          ahi = c2 - (c2 - acx);
+          alo = acx - ahi;
+          c2 = splitter * bcytail;
+          bhi = c2 - (c2 - bcytail);
+          blo = bcytail - bhi;
+          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
+          t1 = acy * bcxtail;
+          c2 = splitter * acy;
+          ahi = c2 - (c2 - acy);
+          alo = acy - ahi;
+          c2 = splitter * bcxtail;
+          bhi = c2 - (c2 - bcxtail);
+          blo = bcxtail - bhi;
+          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
+          _i = s0 - t0;
+          bvirt = s0 - _i;
+          u2[0] = s0 - (_i + bvirt) + (bvirt - t0);
+          _j = s1 + _i;
+          bvirt = _j - s1;
+          _0 = s1 - (_j - bvirt) + (_i - bvirt);
+          _i = _0 - t1;
+          bvirt = _0 - _i;
+          u2[1] = _0 - (_i + bvirt) + (bvirt - t1);
+          u3 = _j + _i;
+          bvirt = u3 - _j;
+          u2[2] = _j - (u3 - bvirt) + (_i - bvirt);
+          u2[3] = u3;
+          const C2len = sum(C1len, C1, 4, u2, C2);
+          s1 = acxtail * bcytail;
+          c2 = splitter * acxtail;
+          ahi = c2 - (c2 - acxtail);
+          alo = acxtail - ahi;
+          c2 = splitter * bcytail;
+          bhi = c2 - (c2 - bcytail);
+          blo = bcytail - bhi;
+          s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);
+          t1 = acytail * bcxtail;
+          c2 = splitter * acytail;
+          ahi = c2 - (c2 - acytail);
+          alo = acytail - ahi;
+          c2 = splitter * bcxtail;
+          bhi = c2 - (c2 - bcxtail);
+          blo = bcxtail - bhi;
+          t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);
+          _i = s0 - t0;
+          bvirt = s0 - _i;
+          u2[0] = s0 - (_i + bvirt) + (bvirt - t0);
+          _j = s1 + _i;
+          bvirt = _j - s1;
+          _0 = s1 - (_j - bvirt) + (_i - bvirt);
+          _i = _0 - t1;
+          bvirt = _0 - _i;
+          u2[1] = _0 - (_i + bvirt) + (bvirt - t1);
+          u3 = _j + _i;
+          bvirt = u3 - _j;
+          u2[2] = _j - (u3 - bvirt) + (_i - bvirt);
+          u2[3] = u3;
+          const Dlen = sum(C2len, C2, 4, u2, D2);
+          return D2[Dlen - 1];
         }
-      }, {
-        key: "toString",
-        value: function toString2() {
-          return "[object AbortController]";
+        function orient2d(ax, ay, bx, by, cx, cy) {
+          const detleft = (ay - cy) * (bx - cx);
+          const detright = (ax - cx) * (by - cy);
+          const det = detleft - detright;
+          const detsum = Math.abs(detleft + detright);
+          if (Math.abs(det) >= ccwerrboundA * detsum) return det;
+          return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);
         }
-      }]);
-      return AbortController3;
-    }();
-    if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
-      AbortController2.prototype[Symbol.toStringTag] = "AbortController";
-      AbortSignal.prototype[Symbol.toStringTag] = "AbortSignal";
-    }
-    function polyfillNeeded(self2) {
-      if (self2.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
-        console.log("__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill");
-        return true;
-      }
-      return typeof self2.Request === "function" && !self2.Request.prototype.hasOwnProperty("signal") || !self2.AbortController;
-    }
-    function abortableFetchDecorator(patchTargets) {
-      if ("function" === typeof patchTargets) {
-        patchTargets = {
-          fetch: patchTargets
+        const crossProduct2 = (a2, b2) => a2.x * b2.y - a2.y * b2.x;
+        const dotProduct2 = (a2, b2) => a2.x * b2.x + a2.y * b2.y;
+        const compareVectorAngles = (basePt, endPt1, endPt2) => {
+          const res = orient2d(basePt.x, basePt.y, endPt1.x, endPt1.y, endPt2.x, endPt2.y);
+          if (res > 0) return -1;
+          if (res < 0) return 1;
+          return 0;
         };
-      }
-      var _patchTargets = patchTargets, fetch3 = _patchTargets.fetch, _patchTargets$Request = _patchTargets.Request, NativeRequest = _patchTargets$Request === void 0 ? fetch3.Request : _patchTargets$Request, NativeAbortController = _patchTargets.AbortController, _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL, __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
-      if (!polyfillNeeded({
-        fetch: fetch3,
-        Request: NativeRequest,
-        AbortController: NativeAbortController,
-        __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
-      })) {
-        return {
-          fetch: fetch3,
-          Request: Request2
+        const length2 = (v2) => Math.sqrt(dotProduct2(v2, v2));
+        const sineOfAngle2 = (pShared, pBase, pAngle) => {
+          const vBase = {
+            x: pBase.x - pShared.x,
+            y: pBase.y - pShared.y
+          };
+          const vAngle = {
+            x: pAngle.x - pShared.x,
+            y: pAngle.y - pShared.y
+          };
+          return crossProduct2(vAngle, vBase) / length2(vAngle) / length2(vBase);
         };
-      }
-      var Request2 = NativeRequest;
-      if (Request2 && !Request2.prototype.hasOwnProperty("signal") || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
-        Request2 = function Request3(input, init2) {
-          var signal;
-          if (init2 && init2.signal) {
-            signal = init2.signal;
-            delete init2.signal;
+        const cosineOfAngle2 = (pShared, pBase, pAngle) => {
+          const vBase = {
+            x: pBase.x - pShared.x,
+            y: pBase.y - pShared.y
+          };
+          const vAngle = {
+            x: pAngle.x - pShared.x,
+            y: pAngle.y - pShared.y
+          };
+          return dotProduct2(vAngle, vBase) / length2(vAngle) / length2(vBase);
+        };
+        const horizontalIntersection2 = (pt2, v2, y2) => {
+          if (v2.y === 0) return null;
+          return {
+            x: pt2.x + v2.x / v2.y * (y2 - pt2.y),
+            y: y2
+          };
+        };
+        const verticalIntersection2 = (pt2, v2, x2) => {
+          if (v2.x === 0) return null;
+          return {
+            x: x2,
+            y: pt2.y + v2.y / v2.x * (x2 - pt2.x)
+          };
+        };
+        const intersection$1 = (pt1, v1, pt2, v2) => {
+          if (v1.x === 0) return verticalIntersection2(pt2, v2, pt1.x);
+          if (v2.x === 0) return verticalIntersection2(pt1, v1, pt2.x);
+          if (v1.y === 0) return horizontalIntersection2(pt2, v2, pt1.y);
+          if (v2.y === 0) return horizontalIntersection2(pt1, v1, pt2.y);
+          const kross = crossProduct2(v1, v2);
+          if (kross == 0) return null;
+          const ve2 = {
+            x: pt2.x - pt1.x,
+            y: pt2.y - pt1.y
+          };
+          const d1 = crossProduct2(ve2, v1) / kross;
+          const d2 = crossProduct2(ve2, v2) / kross;
+          const x12 = pt1.x + d2 * v1.x, x2 = pt2.x + d1 * v2.x;
+          const y12 = pt1.y + d2 * v1.y, y2 = pt2.y + d1 * v2.y;
+          const x3 = (x12 + x2) / 2;
+          const y3 = (y12 + y2) / 2;
+          return {
+            x: x3,
+            y: y3
+          };
+        };
+        class SweepEvent2 {
+          // for ordering sweep events in the sweep event queue
+          static compare(a2, b2) {
+            const ptCmp = SweepEvent2.comparePoints(a2.point, b2.point);
+            if (ptCmp !== 0) return ptCmp;
+            if (a2.point !== b2.point) a2.link(b2);
+            if (a2.isLeft !== b2.isLeft) return a2.isLeft ? 1 : -1;
+            return Segment2.compare(a2.segment, b2.segment);
           }
-          var request3 = new NativeRequest(input, init2);
-          if (signal) {
-            Object.defineProperty(request3, "signal", {
-              writable: false,
-              enumerable: false,
-              configurable: true,
-              value: signal
-            });
+          // for ordering points in sweep line order
+          static comparePoints(aPt, bPt) {
+            if (aPt.x < bPt.x) return -1;
+            if (aPt.x > bPt.x) return 1;
+            if (aPt.y < bPt.y) return -1;
+            if (aPt.y > bPt.y) return 1;
+            return 0;
           }
-          return request3;
-        };
-        Request2.prototype = NativeRequest.prototype;
-      }
-      var realFetch = fetch3;
-      var abortableFetch = function abortableFetch2(input, init2) {
-        var signal = Request2 && Request2.prototype.isPrototypeOf(input) ? input.signal : init2 ? init2.signal : void 0;
-        if (signal) {
-          var abortError;
-          try {
-            abortError = new DOMException("Aborted", "AbortError");
-          } catch (err) {
-            abortError = new Error("Aborted");
-            abortError.name = "AbortError";
+          // Warning: 'point' input will be modified and re-used (for performance)
+          constructor(point, isLeft) {
+            if (point.events === void 0) point.events = [this];
+            else point.events.push(this);
+            this.point = point;
+            this.isLeft = isLeft;
           }
-          if (signal.aborted) {
-            return Promise.reject(abortError);
+          link(other2) {
+            if (other2.point === this.point) {
+              throw new Error("Tried to link already linked events");
+            }
+            const otherEvents = other2.point.events;
+            for (let i3 = 0, iMax = otherEvents.length; i3 < iMax; i3++) {
+              const evt = otherEvents[i3];
+              this.point.events.push(evt);
+              evt.point = this.point;
+            }
+            this.checkForConsuming();
           }
-          var cancellation = new Promise(function(_2, reject) {
-            signal.addEventListener("abort", function() {
-              return reject(abortError);
-            }, {
-              once: true
-            });
-          });
-          if (init2 && init2.signal) {
-            delete init2.signal;
+          /* Do a pass over our linked events and check to see if any pair
+           * of segments match, and should be consumed. */
+          checkForConsuming() {
+            const numEvents = this.point.events.length;
+            for (let i3 = 0; i3 < numEvents; i3++) {
+              const evt1 = this.point.events[i3];
+              if (evt1.segment.consumedBy !== void 0) continue;
+              for (let j2 = i3 + 1; j2 < numEvents; j2++) {
+                const evt2 = this.point.events[j2];
+                if (evt2.consumedBy !== void 0) continue;
+                if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;
+                evt1.segment.consume(evt2.segment);
+              }
+            }
+          }
+          getAvailableLinkedEvents() {
+            const events = [];
+            for (let i3 = 0, iMax = this.point.events.length; i3 < iMax; i3++) {
+              const evt = this.point.events[i3];
+              if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {
+                events.push(evt);
+              }
+            }
+            return events;
+          }
+          /**
+           * Returns a comparator function for sorting linked events that will
+           * favor the event that will give us the smallest left-side angle.
+           * All ring construction starts as low as possible heading to the right,
+           * so by always turning left as sharp as possible we'll get polygons
+           * without uncessary loops & holes.
+           *
+           * The comparator function has a compute cache such that it avoids
+           * re-computing already-computed values.
+           */
+          getLeftmostComparator(baseEvent) {
+            const cache = /* @__PURE__ */ new Map();
+            const fillCache = (linkedEvent) => {
+              const nextEvent = linkedEvent.otherSE;
+              cache.set(linkedEvent, {
+                sine: sineOfAngle2(this.point, baseEvent.point, nextEvent.point),
+                cosine: cosineOfAngle2(this.point, baseEvent.point, nextEvent.point)
+              });
+            };
+            return (a2, b2) => {
+              if (!cache.has(a2)) fillCache(a2);
+              if (!cache.has(b2)) fillCache(b2);
+              const {
+                sine: asine,
+                cosine: acosine
+              } = cache.get(a2);
+              const {
+                sine: bsine,
+                cosine: bcosine
+              } = cache.get(b2);
+              if (asine >= 0 && bsine >= 0) {
+                if (acosine < bcosine) return 1;
+                if (acosine > bcosine) return -1;
+                return 0;
+              }
+              if (asine < 0 && bsine < 0) {
+                if (acosine < bcosine) return -1;
+                if (acosine > bcosine) return 1;
+                return 0;
+              }
+              if (bsine < asine) return -1;
+              if (bsine > asine) return 1;
+              return 0;
+            };
           }
-          return Promise.race([cancellation, realFetch(input, init2)]);
         }
-        return realFetch(input, init2);
-      };
-      return {
-        fetch: abortableFetch,
-        Request: Request2
-      };
-    }
-    (function(self2) {
-      if (!polyfillNeeded(self2)) {
-        return;
-      }
-      if (!self2.fetch) {
-        console.warn("fetch() is not available, cannot install abortcontroller-polyfill");
-        return;
-      }
-      var _abortableFetch = abortableFetchDecorator(self2), fetch3 = _abortableFetch.fetch, Request2 = _abortableFetch.Request;
-      self2.fetch = fetch3;
-      self2.Request = Request2;
-      Object.defineProperty(self2, "AbortController", {
-        writable: true,
-        enumerable: false,
-        configurable: true,
-        value: AbortController2
-      });
-      Object.defineProperty(self2, "AbortSignal", {
-        writable: true,
-        enumerable: false,
-        configurable: true,
-        value: AbortSignal
-      });
-    })(typeof self !== "undefined" ? self : global);
-  });
-
-  // modules/index.js
-  var modules_exports = {};
-  __export(modules_exports, {
-    LANGUAGE_SUFFIX_REGEX: () => LANGUAGE_SUFFIX_REGEX,
-    LocationManager: () => LocationManager,
-    QAItem: () => QAItem,
-    actionAddEntity: () => actionAddEntity,
-    actionAddMember: () => actionAddMember,
-    actionAddMidpoint: () => actionAddMidpoint,
-    actionAddVertex: () => actionAddVertex,
-    actionChangeMember: () => actionChangeMember,
-    actionChangePreset: () => actionChangePreset,
-    actionChangeTags: () => actionChangeTags,
-    actionCircularize: () => actionCircularize,
-    actionConnect: () => actionConnect,
-    actionCopyEntities: () => actionCopyEntities,
-    actionDeleteMember: () => actionDeleteMember,
-    actionDeleteMultiple: () => actionDeleteMultiple,
-    actionDeleteNode: () => actionDeleteNode,
-    actionDeleteRelation: () => actionDeleteRelation,
-    actionDeleteWay: () => actionDeleteWay,
-    actionDiscardTags: () => actionDiscardTags,
-    actionDisconnect: () => actionDisconnect,
-    actionExtract: () => actionExtract,
-    actionJoin: () => actionJoin,
-    actionMerge: () => actionMerge,
-    actionMergeNodes: () => actionMergeNodes,
-    actionMergePolygon: () => actionMergePolygon,
-    actionMergeRemoteChanges: () => actionMergeRemoteChanges,
-    actionMove: () => actionMove,
-    actionMoveMember: () => actionMoveMember,
-    actionMoveNode: () => actionMoveNode,
-    actionNoop: () => actionNoop,
-    actionOrthogonalize: () => actionOrthogonalize,
-    actionReflect: () => actionReflect,
-    actionRestrictTurn: () => actionRestrictTurn,
-    actionReverse: () => actionReverse,
-    actionRevert: () => actionRevert,
-    actionRotate: () => actionRotate,
-    actionScale: () => actionScale,
-    actionSplit: () => actionSplit,
-    actionStraightenNodes: () => actionStraightenNodes,
-    actionStraightenWay: () => actionStraightenWay,
-    actionUnrestrictTurn: () => actionUnrestrictTurn,
-    actionUpgradeTags: () => actionUpgradeTags,
-    behaviorAddWay: () => behaviorAddWay,
-    behaviorBreathe: () => behaviorBreathe,
-    behaviorDrag: () => behaviorDrag,
-    behaviorDraw: () => behaviorDraw,
-    behaviorDrawWay: () => behaviorDrawWay,
-    behaviorEdit: () => behaviorEdit,
-    behaviorHash: () => behaviorHash,
-    behaviorHover: () => behaviorHover,
-    behaviorLasso: () => behaviorLasso,
-    behaviorOperation: () => behaviorOperation,
-    behaviorPaste: () => behaviorPaste,
-    behaviorSelect: () => behaviorSelect,
-    coreContext: () => coreContext,
-    coreDifference: () => coreDifference,
-    coreFileFetcher: () => coreFileFetcher,
-    coreGraph: () => coreGraph,
-    coreHistory: () => coreHistory,
-    coreLocalizer: () => coreLocalizer,
-    coreTree: () => coreTree,
-    coreUploader: () => coreUploader,
-    coreValidator: () => coreValidator,
-    d3: () => d3,
-    debug: () => debug,
-    dmsCoordinatePair: () => dmsCoordinatePair,
-    dmsMatcher: () => dmsMatcher,
-    fileFetcher: () => _mainFileFetcher,
-    geoAngle: () => geoAngle,
-    geoChooseEdge: () => geoChooseEdge,
-    geoEdgeEqual: () => geoEdgeEqual,
-    geoExtent: () => geoExtent,
-    geoGetSmallestSurroundingRectangle: () => geoGetSmallestSurroundingRectangle,
-    geoHasLineIntersections: () => geoHasLineIntersections,
-    geoHasSelfIntersections: () => geoHasSelfIntersections,
-    geoLatToMeters: () => geoLatToMeters,
-    geoLineIntersection: () => geoLineIntersection,
-    geoLonToMeters: () => geoLonToMeters,
-    geoMetersToLat: () => geoMetersToLat,
-    geoMetersToLon: () => geoMetersToLon,
-    geoMetersToOffset: () => geoMetersToOffset,
-    geoOffsetToMeters: () => geoOffsetToMeters,
-    geoOrthoCalcScore: () => geoOrthoCalcScore,
-    geoOrthoCanOrthogonalize: () => geoOrthoCanOrthogonalize,
-    geoOrthoMaxOffsetAngle: () => geoOrthoMaxOffsetAngle,
-    geoOrthoNormalizedDotProduct: () => geoOrthoNormalizedDotProduct,
-    geoPathHasIntersections: () => geoPathHasIntersections,
-    geoPathIntersections: () => geoPathIntersections,
-    geoPathLength: () => geoPathLength,
-    geoPointInPolygon: () => geoPointInPolygon,
-    geoPolygonContainsPolygon: () => geoPolygonContainsPolygon,
-    geoPolygonIntersectsPolygon: () => geoPolygonIntersectsPolygon,
-    geoRawMercator: () => geoRawMercator,
-    geoRotate: () => geoRotate,
-    geoScaleToZoom: () => geoScaleToZoom,
-    geoSphericalClosestNode: () => geoSphericalClosestNode,
-    geoSphericalDistance: () => geoSphericalDistance,
-    geoVecAdd: () => geoVecAdd,
-    geoVecAngle: () => geoVecAngle,
-    geoVecCross: () => geoVecCross,
-    geoVecDot: () => geoVecDot,
-    geoVecEqual: () => geoVecEqual,
-    geoVecFloor: () => geoVecFloor,
-    geoVecInterp: () => geoVecInterp,
-    geoVecLength: () => geoVecLength,
-    geoVecLengthSquare: () => geoVecLengthSquare,
-    geoVecNormalize: () => geoVecNormalize,
-    geoVecNormalizedDot: () => geoVecNormalizedDot,
-    geoVecProject: () => geoVecProject,
-    geoVecScale: () => geoVecScale,
-    geoVecSubtract: () => geoVecSubtract,
-    geoViewportEdge: () => geoViewportEdge,
-    geoZoomToScale: () => geoZoomToScale,
-    likelyRawNumberFormat: () => likelyRawNumberFormat,
-    localizer: () => _mainLocalizer,
-    locationManager: () => _sharedLocationManager,
-    modeAddArea: () => modeAddArea,
-    modeAddLine: () => modeAddLine,
-    modeAddNote: () => modeAddNote,
-    modeAddPoint: () => modeAddPoint,
-    modeBrowse: () => modeBrowse,
-    modeDragNode: () => modeDragNode,
-    modeDragNote: () => modeDragNote,
-    modeDrawArea: () => modeDrawArea,
-    modeDrawLine: () => modeDrawLine,
-    modeMove: () => modeMove,
-    modeRotate: () => modeRotate,
-    modeSave: () => modeSave,
-    modeSelect: () => modeSelect,
-    modeSelectData: () => modeSelectData,
-    modeSelectError: () => modeSelectError,
-    modeSelectNote: () => modeSelectNote,
-    operationCircularize: () => operationCircularize,
-    operationContinue: () => operationContinue,
-    operationCopy: () => operationCopy,
-    operationDelete: () => operationDelete,
-    operationDisconnect: () => operationDisconnect,
-    operationDowngrade: () => operationDowngrade,
-    operationExtract: () => operationExtract,
-    operationMerge: () => operationMerge,
-    operationMove: () => operationMove,
-    operationOrthogonalize: () => operationOrthogonalize,
-    operationPaste: () => operationPaste,
-    operationReflectLong: () => operationReflectLong,
-    operationReflectShort: () => operationReflectShort,
-    operationReverse: () => operationReverse,
-    operationRotate: () => operationRotate,
-    operationSplit: () => operationSplit,
-    operationStraighten: () => operationStraighten,
-    osmAreaKeys: () => osmAreaKeys,
-    osmChangeset: () => osmChangeset,
-    osmEntity: () => osmEntity,
-    osmFlowingWaterwayTagValues: () => osmFlowingWaterwayTagValues,
-    osmInferRestriction: () => osmInferRestriction,
-    osmIntersection: () => osmIntersection,
-    osmIsInterestingTag: () => osmIsInterestingTag,
-    osmJoinWays: () => osmJoinWays,
-    osmLanes: () => osmLanes,
-    osmLifecyclePrefixes: () => osmLifecyclePrefixes,
-    osmNode: () => osmNode,
-    osmNodeGeometriesForTags: () => osmNodeGeometriesForTags,
-    osmNote: () => osmNote,
-    osmOneWayTags: () => osmOneWayTags,
-    osmPavedTags: () => osmPavedTags,
-    osmPointTags: () => osmPointTags,
-    osmRailwayTrackTagValues: () => osmRailwayTrackTagValues,
-    osmRelation: () => osmRelation,
-    osmRemoveLifecyclePrefix: () => osmRemoveLifecyclePrefix,
-    osmRoutableHighwayTagValues: () => osmRoutableHighwayTagValues,
-    osmSetAreaKeys: () => osmSetAreaKeys,
-    osmSetPointTags: () => osmSetPointTags,
-    osmSetVertexTags: () => osmSetVertexTags,
-    osmTagSuggestingArea: () => osmTagSuggestingArea,
-    osmTurn: () => osmTurn,
-    osmVertexTags: () => osmVertexTags,
-    osmWay: () => osmWay,
-    prefs: () => corePreferences,
-    presetCategory: () => presetCategory,
-    presetCollection: () => presetCollection,
-    presetField: () => presetField,
-    presetIndex: () => presetIndex,
-    presetManager: () => _mainPresetIndex,
-    presetPreset: () => presetPreset,
-    rendererBackground: () => rendererBackground,
-    rendererBackgroundSource: () => rendererBackgroundSource,
-    rendererFeatures: () => rendererFeatures,
-    rendererMap: () => rendererMap,
-    rendererPhotos: () => rendererPhotos,
-    rendererTileLayer: () => rendererTileLayer,
-    serviceKartaview: () => kartaview_default,
-    serviceKeepRight: () => keepRight_default,
-    serviceMapRules: () => maprules_default,
-    serviceMapilio: () => mapilio_default,
-    serviceMapillary: () => mapillary_default,
-    serviceNominatim: () => nominatim_default,
-    serviceNsi: () => nsi_default,
-    serviceOsm: () => osm_default,
-    serviceOsmWikibase: () => osm_wikibase_default,
-    serviceOsmose: () => osmose_default,
-    servicePanoramax: () => panoramax_default,
-    serviceStreetside: () => streetside_default,
-    serviceTaginfo: () => taginfo_default,
-    serviceVectorTile: () => vector_tile_default,
-    serviceVegbilder: () => vegbilder_default,
-    serviceWikidata: () => wikidata_default,
-    serviceWikipedia: () => wikipedia_default,
-    services: () => services,
-    svgAreas: () => svgAreas,
-    svgData: () => svgData,
-    svgDebug: () => svgDebug,
-    svgDefs: () => svgDefs,
-    svgGeolocate: () => svgGeolocate,
-    svgIcon: () => svgIcon,
-    svgKartaviewImages: () => svgKartaviewImages,
-    svgKeepRight: () => svgKeepRight,
-    svgLabels: () => svgLabels,
-    svgLayers: () => svgLayers,
-    svgLines: () => svgLines,
-    svgMapilioImages: () => svgMapilioImages,
-    svgMapillaryImages: () => svgMapillaryImages,
-    svgMapillarySigns: () => svgMapillarySigns,
-    svgMarkerSegments: () => svgMarkerSegments,
-    svgMidpoints: () => svgMidpoints,
-    svgNotes: () => svgNotes,
-    svgOsm: () => svgOsm,
-    svgPanoramaxImages: () => svgPanoramaxImages,
-    svgPassiveVertex: () => svgPassiveVertex,
-    svgPath: () => svgPath,
-    svgPointTransform: () => svgPointTransform,
-    svgPoints: () => svgPoints,
-    svgRelationMemberTags: () => svgRelationMemberTags,
-    svgSegmentWay: () => svgSegmentWay,
-    svgStreetside: () => svgStreetside,
-    svgTagClasses: () => svgTagClasses,
-    svgTagPattern: () => svgTagPattern,
-    svgTouch: () => svgTouch,
-    svgTurns: () => svgTurns,
-    svgVegbilder: () => svgVegbilder,
-    svgVertices: () => svgVertices,
-    t: () => _t,
-    uiAccount: () => uiAccount,
-    uiAttribution: () => uiAttribution,
-    uiChangesetEditor: () => uiChangesetEditor,
-    uiCmd: () => uiCmd,
-    uiCombobox: () => uiCombobox,
-    uiCommit: () => uiCommit,
-    uiCommitWarnings: () => uiCommitWarnings,
-    uiConfirm: () => uiConfirm,
-    uiConflicts: () => uiConflicts,
-    uiContributors: () => uiContributors,
-    uiCurtain: () => uiCurtain,
-    uiDataEditor: () => uiDataEditor,
-    uiDataHeader: () => uiDataHeader,
-    uiDisclosure: () => uiDisclosure,
-    uiEditMenu: () => uiEditMenu,
-    uiEntityEditor: () => uiEntityEditor,
-    uiFeatureInfo: () => uiFeatureInfo,
-    uiFeatureList: () => uiFeatureList,
-    uiField: () => uiField,
-    uiFieldAccess: () => uiFieldAccess,
-    uiFieldAddress: () => uiFieldAddress,
-    uiFieldCheck: () => uiFieldCheck,
-    uiFieldColour: () => uiFieldText,
-    uiFieldCombo: () => uiFieldCombo,
-    uiFieldDefaultCheck: () => uiFieldCheck,
-    uiFieldDirectionalCombo: () => uiFieldDirectionalCombo,
-    uiFieldEmail: () => uiFieldText,
-    uiFieldHelp: () => uiFieldHelp,
-    uiFieldIdentifier: () => uiFieldText,
-    uiFieldLanes: () => uiFieldLanes,
-    uiFieldLocalized: () => uiFieldLocalized,
-    uiFieldManyCombo: () => uiFieldCombo,
-    uiFieldMultiCombo: () => uiFieldCombo,
-    uiFieldNetworkCombo: () => uiFieldCombo,
-    uiFieldNumber: () => uiFieldText,
-    uiFieldOnewayCheck: () => uiFieldCheck,
-    uiFieldRadio: () => uiFieldRadio,
-    uiFieldRestrictions: () => uiFieldRestrictions,
-    uiFieldRoadheight: () => uiFieldRoadheight,
-    uiFieldRoadspeed: () => uiFieldRoadspeed,
-    uiFieldSemiCombo: () => uiFieldCombo,
-    uiFieldStructureRadio: () => uiFieldRadio,
-    uiFieldTel: () => uiFieldText,
-    uiFieldText: () => uiFieldText,
-    uiFieldTextarea: () => uiFieldTextarea,
-    uiFieldTypeCombo: () => uiFieldCombo,
-    uiFieldUrl: () => uiFieldText,
-    uiFieldWikidata: () => uiFieldWikidata,
-    uiFieldWikipedia: () => uiFieldWikipedia,
-    uiFields: () => uiFields,
-    uiFlash: () => uiFlash,
-    uiFormFields: () => uiFormFields,
-    uiFullScreen: () => uiFullScreen,
-    uiGeolocate: () => uiGeolocate,
-    uiInfo: () => uiInfo,
-    uiInfoPanels: () => uiInfoPanels,
-    uiInit: () => uiInit,
-    uiInspector: () => uiInspector,
-    uiIntro: () => uiIntro,
-    uiIssuesInfo: () => uiIssuesInfo,
-    uiKeepRightDetails: () => uiKeepRightDetails,
-    uiKeepRightEditor: () => uiKeepRightEditor,
-    uiKeepRightHeader: () => uiKeepRightHeader,
-    uiLasso: () => uiLasso,
-    uiLengthIndicator: () => uiLengthIndicator,
-    uiLoading: () => uiLoading,
-    uiMapInMap: () => uiMapInMap,
-    uiModal: () => uiModal,
-    uiNoteComments: () => uiNoteComments,
-    uiNoteEditor: () => uiNoteEditor,
-    uiNoteHeader: () => uiNoteHeader,
-    uiNoteReport: () => uiNoteReport,
-    uiNotice: () => uiNotice,
-    uiPaneBackground: () => uiPaneBackground,
-    uiPaneHelp: () => uiPaneHelp,
-    uiPaneIssues: () => uiPaneIssues,
-    uiPaneMapData: () => uiPaneMapData,
-    uiPanePreferences: () => uiPanePreferences,
-    uiPanelBackground: () => uiPanelBackground,
-    uiPanelHistory: () => uiPanelHistory,
-    uiPanelLocation: () => uiPanelLocation,
-    uiPanelMeasurement: () => uiPanelMeasurement,
-    uiPopover: () => uiPopover,
-    uiPresetIcon: () => uiPresetIcon,
-    uiPresetList: () => uiPresetList,
-    uiRestore: () => uiRestore,
-    uiScale: () => uiScale,
-    uiSectionBackgroundDisplayOptions: () => uiSectionBackgroundDisplayOptions,
-    uiSectionBackgroundList: () => uiSectionBackgroundList,
-    uiSectionBackgroundOffset: () => uiSectionBackgroundOffset,
-    uiSectionChanges: () => uiSectionChanges,
-    uiSectionDataLayers: () => uiSectionDataLayers,
-    uiSectionEntityIssues: () => uiSectionEntityIssues,
-    uiSectionFeatureType: () => uiSectionFeatureType,
-    uiSectionMapFeatures: () => uiSectionMapFeatures,
-    uiSectionMapStyleOptions: () => uiSectionMapStyleOptions,
-    uiSectionOverlayList: () => uiSectionOverlayList,
-    uiSectionPhotoOverlays: () => uiSectionPhotoOverlays,
-    uiSectionPresetFields: () => uiSectionPresetFields,
-    uiSectionPrivacy: () => uiSectionPrivacy,
-    uiSectionRawMemberEditor: () => uiSectionRawMemberEditor,
-    uiSectionRawMembershipEditor: () => uiSectionRawMembershipEditor,
-    uiSectionRawTagEditor: () => uiSectionRawTagEditor,
-    uiSectionSelectionList: () => uiSectionSelectionList,
-    uiSectionValidationIssues: () => uiSectionValidationIssues,
-    uiSectionValidationOptions: () => uiSectionValidationOptions,
-    uiSectionValidationRules: () => uiSectionValidationRules,
-    uiSectionValidationStatus: () => uiSectionValidationStatus,
-    uiSettingsCustomBackground: () => uiSettingsCustomBackground,
-    uiSettingsCustomData: () => uiSettingsCustomData,
-    uiSidebar: () => uiSidebar,
-    uiSourceSwitch: () => uiSourceSwitch,
-    uiSpinner: () => uiSpinner,
-    uiSplash: () => uiSplash,
-    uiStatus: () => uiStatus,
-    uiSuccess: () => uiSuccess,
-    uiTagReference: () => uiTagReference,
-    uiToggle: () => uiToggle,
-    uiTooltip: () => uiTooltip,
-    uiVersion: () => uiVersion,
-    uiViewOnKeepRight: () => uiViewOnKeepRight,
-    uiViewOnOSM: () => uiViewOnOSM,
-    uiZoom: () => uiZoom,
-    utilAesDecrypt: () => utilAesDecrypt,
-    utilAesEncrypt: () => utilAesEncrypt,
-    utilArrayChunk: () => utilArrayChunk,
-    utilArrayDifference: () => utilArrayDifference,
-    utilArrayFlatten: () => utilArrayFlatten,
-    utilArrayGroupBy: () => utilArrayGroupBy,
-    utilArrayIdentical: () => utilArrayIdentical,
-    utilArrayIntersection: () => utilArrayIntersection,
-    utilArrayUnion: () => utilArrayUnion,
-    utilArrayUniq: () => utilArrayUniq,
-    utilArrayUniqBy: () => utilArrayUniqBy,
-    utilAsyncMap: () => utilAsyncMap,
-    utilCleanOsmString: () => utilCleanOsmString,
-    utilCleanTags: () => utilCleanTags,
-    utilCombinedTags: () => utilCombinedTags,
-    utilCompareIDs: () => utilCompareIDs,
-    utilDeepMemberSelector: () => utilDeepMemberSelector,
-    utilDetect: () => utilDetect,
-    utilDisplayLabel: () => utilDisplayLabel,
-    utilDisplayName: () => utilDisplayName,
-    utilDisplayNameForPath: () => utilDisplayNameForPath,
-    utilDisplayType: () => utilDisplayType,
-    utilEditDistance: () => utilEditDistance,
-    utilEntityAndDeepMemberIDs: () => utilEntityAndDeepMemberIDs,
-    utilEntityOrDeepMemberSelector: () => utilEntityOrDeepMemberSelector,
-    utilEntityOrMemberSelector: () => utilEntityOrMemberSelector,
-    utilEntityRoot: () => utilEntityRoot,
-    utilEntitySelector: () => utilEntitySelector,
-    utilFastMouse: () => utilFastMouse,
-    utilFunctor: () => utilFunctor,
-    utilGetAllNodes: () => utilGetAllNodes,
-    utilGetSetValue: () => utilGetSetValue,
-    utilHashcode: () => utilHashcode,
-    utilHighlightEntities: () => utilHighlightEntities,
-    utilKeybinding: () => utilKeybinding,
-    utilNoAuto: () => utilNoAuto,
-    utilObjectOmit: () => utilObjectOmit,
-    utilOldestID: () => utilOldestID,
-    utilPrefixCSSProperty: () => utilPrefixCSSProperty,
-    utilPrefixDOMProperty: () => utilPrefixDOMProperty,
-    utilQsString: () => utilQsString,
-    utilRebind: () => utilRebind,
-    utilSafeClassName: () => utilSafeClassName,
-    utilSessionMutex: () => utilSessionMutex,
-    utilSetTransform: () => utilSetTransform,
-    utilStringQs: () => utilStringQs,
-    utilTagDiff: () => utilTagDiff,
-    utilTagText: () => utilTagText,
-    utilTiler: () => utilTiler,
-    utilTotalExtent: () => utilTotalExtent,
-    utilTriggerEvent: () => utilTriggerEvent,
-    utilUnicodeCharsCount: () => utilUnicodeCharsCount,
-    utilUnicodeCharsTruncated: () => utilUnicodeCharsTruncated,
-    utilUniqueDomId: () => utilUniqueDomId,
-    utilWrap: () => utilWrap,
-    validationAlmostJunction: () => validationAlmostJunction,
-    validationCloseNodes: () => validationCloseNodes,
-    validationCrossingWays: () => validationCrossingWays,
-    validationDisconnectedWay: () => validationDisconnectedWay,
-    validationFormatting: () => validationFormatting,
-    validationHelpRequest: () => validationHelpRequest,
-    validationImpossibleOneway: () => validationImpossibleOneway,
-    validationIncompatibleSource: () => validationIncompatibleSource,
-    validationMaprules: () => validationMaprules,
-    validationMismatchedGeometry: () => validationMismatchedGeometry,
-    validationMissingRole: () => validationMissingRole,
-    validationMissingTag: () => validationMissingTag,
-    validationMutuallyExclusiveTags: () => validationMutuallyExclusiveTags,
-    validationOutdatedTags: () => validationOutdatedTags,
-    validationPrivateData: () => validationPrivateData,
-    validationSuspiciousName: () => validationSuspiciousName,
-    validationUnsquareWay: () => validationUnsquareWay
-  });
-
-  // modules/actions/add_entity.js
-  function actionAddEntity(way) {
-    return function(graph) {
-      return graph.replace(way);
-    };
-  }
-
-  // modules/actions/reverse.js
-  function actionReverse(entityID, options2) {
-    var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
-    var numeric = /^([+\-]?)(?=[\d.])/;
-    var directionKey = /direction$/;
-    var turn_lanes = /^turn:lanes:?/;
-    var keyReplacements = [
-      [/:right$/, ":left"],
-      [/:left$/, ":right"],
-      [/:forward$/, ":backward"],
-      [/:backward$/, ":forward"],
-      [/:right:/, ":left:"],
-      [/:left:/, ":right:"],
-      [/:forward:/, ":backward:"],
-      [/:backward:/, ":forward:"]
-    ];
-    var valueReplacements = {
-      left: "right",
-      right: "left",
-      up: "down",
-      down: "up",
-      forward: "backward",
-      backward: "forward",
-      forwards: "backward",
-      backwards: "forward"
-    };
-    const valueReplacementsExceptions = {
-      "side": [
-        { highway: "cyclist_waiting_aid" }
-      ]
-    };
-    var roleReplacements = {
-      forward: "backward",
-      backward: "forward",
-      forwards: "backward",
-      backwards: "forward"
-    };
-    var onewayReplacements = {
-      yes: "-1",
-      "1": "-1",
-      "-1": "yes"
-    };
-    var compassReplacements = {
-      N: "S",
-      NNE: "SSW",
-      NE: "SW",
-      ENE: "WSW",
-      E: "W",
-      ESE: "WNW",
-      SE: "NW",
-      SSE: "NNW",
-      S: "N",
-      SSW: "NNE",
-      SW: "NE",
-      WSW: "ENE",
-      W: "E",
-      WNW: "ESE",
-      NW: "SE",
-      NNW: "SSE"
-    };
-    function reverseKey(key) {
-      for (var i3 = 0; i3 < keyReplacements.length; ++i3) {
-        var replacement = keyReplacements[i3];
-        if (replacement[0].test(key)) {
-          return key.replace(replacement[0], replacement[1]);
-        }
-      }
-      return key;
-    }
-    function reverseValue(key, value, includeAbsolute, allTags) {
-      if (ignoreKey.test(key)) return value;
-      if (turn_lanes.test(key)) {
-        return value;
-      } else if (key === "incline" && numeric.test(value)) {
-        return value.replace(numeric, function(_2, sign2) {
-          return sign2 === "-" ? "" : "-";
-        });
-      } else if (options2 && options2.reverseOneway && key === "oneway") {
-        return onewayReplacements[value] || value;
-      } else if (includeAbsolute && directionKey.test(key)) {
-        return value.split(";").map((value2) => {
-          if (compassReplacements[value2]) return compassReplacements[value2];
-          var degrees3 = Number(value2);
-          if (isFinite(degrees3)) {
-            if (degrees3 < 180) {
-              degrees3 += 180;
-            } else {
-              degrees3 -= 180;
-            }
-            return degrees3.toString();
-          } else {
-            return valueReplacements[value2] || value2;
-          }
-        }).join(";");
-      }
-      if (valueReplacementsExceptions[key] && valueReplacementsExceptions[key].some(
-        (exceptionTags) => Object.keys(exceptionTags).every((k2) => {
-          const v2 = exceptionTags[k2];
-          return allTags[k2] && (v2 === "*" || allTags[k2] === v2);
-        })
-      )) {
-        return value;
-      }
-      return valueReplacements[value] || value;
-    }
-    function reverseNodeTags(graph, nodeIDs) {
-      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
-        var node = graph.hasEntity(nodeIDs[i3]);
-        if (!node || !Object.keys(node.tags).length) continue;
-        var tags = {};
-        for (var key in node.tags) {
-          tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID, node.tags);
-        }
-        graph = graph.replace(node.update({ tags }));
-      }
-      return graph;
-    }
-    function reverseWay(graph, way) {
-      var nodes = way.nodes.slice().reverse();
-      var tags = {};
-      var role;
-      for (var key in way.tags) {
-        tags[reverseKey(key)] = reverseValue(key, way.tags[key], false, way.tags);
-      }
-      graph.parentRelations(way).forEach(function(relation) {
-        relation.members.forEach(function(member, index) {
-          if (member.id === way.id && (role = roleReplacements[member.role])) {
-            relation = relation.updateMember({ role }, index);
-            graph = graph.replace(relation);
-          }
-        });
-      });
-      return reverseNodeTags(graph, nodes).replace(way.update({ nodes, tags }));
-    }
-    var action = function(graph) {
-      var entity = graph.entity(entityID);
-      if (entity.type === "way") {
-        return reverseWay(graph, entity);
-      }
-      return reverseNodeTags(graph, [entityID]);
-    };
-    action.disabled = function(graph) {
-      var entity = graph.hasEntity(entityID);
-      if (!entity || entity.type === "way") return false;
-      for (var key in entity.tags) {
-        var value = entity.tags[key];
-        if (reverseKey(key) !== key || reverseValue(key, value, true, entity.tags) !== value) {
-          return false;
-        }
-      }
-      return "nondirectional_node";
-    };
-    action.entityID = function() {
-      return entityID;
-    };
-    return action;
-  }
-
-  // node_modules/d3-array/src/ascending.js
-  function ascending(a2, b2) {
-    return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
-  }
-
-  // node_modules/d3-array/src/descending.js
-  function descending(a2, b2) {
-    return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
-  }
-
-  // node_modules/d3-array/src/bisector.js
-  function bisector(f2) {
-    let compare1, compare2, delta;
-    if (f2.length !== 2) {
-      compare1 = ascending;
-      compare2 = (d2, x2) => ascending(f2(d2), x2);
-      delta = (d2, x2) => f2(d2) - x2;
-    } else {
-      compare1 = f2 === ascending || f2 === descending ? f2 : zero;
-      compare2 = f2;
-      delta = f2;
-    }
-    function left(a2, x2, lo = 0, hi = a2.length) {
-      if (lo < hi) {
-        if (compare1(x2, x2) !== 0) return hi;
-        do {
-          const mid = lo + hi >>> 1;
-          if (compare2(a2[mid], x2) < 0) lo = mid + 1;
-          else hi = mid;
-        } while (lo < hi);
-      }
-      return lo;
-    }
-    function right(a2, x2, lo = 0, hi = a2.length) {
-      if (lo < hi) {
-        if (compare1(x2, x2) !== 0) return hi;
-        do {
-          const mid = lo + hi >>> 1;
-          if (compare2(a2[mid], x2) <= 0) lo = mid + 1;
-          else hi = mid;
-        } while (lo < hi);
-      }
-      return lo;
-    }
-    function center(a2, x2, lo = 0, hi = a2.length) {
-      const i3 = left(a2, x2, lo, hi - 1);
-      return i3 > lo && delta(a2[i3 - 1], x2) > -delta(a2[i3], x2) ? i3 - 1 : i3;
-    }
-    return { left, center, right };
-  }
-  function zero() {
-    return 0;
-  }
-
-  // node_modules/d3-array/src/number.js
-  function number(x2) {
-    return x2 === null ? NaN : +x2;
-  }
-  function* numbers(values, valueof) {
-    if (valueof === void 0) {
-      for (let value of values) {
-        if (value != null && (value = +value) >= value) {
-          yield value;
-        }
-      }
-    } else {
-      let index = -1;
-      for (let value of values) {
-        if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
-          yield value;
-        }
-      }
-    }
-  }
-
-  // node_modules/d3-array/src/bisect.js
-  var ascendingBisect = bisector(ascending);
-  var bisectRight = ascendingBisect.right;
-  var bisectLeft = ascendingBisect.left;
-  var bisectCenter = bisector(number).center;
-  var bisect_default = bisectRight;
-
-  // node_modules/d3-array/src/fsum.js
-  var Adder = class {
-    constructor() {
-      this._partials = new Float64Array(32);
-      this._n = 0;
-    }
-    add(x2) {
-      const p2 = this._partials;
-      let i3 = 0;
-      for (let j2 = 0; j2 < this._n && j2 < 32; j2++) {
-        const y2 = p2[j2], hi = x2 + y2, lo = Math.abs(x2) < Math.abs(y2) ? x2 - (hi - y2) : y2 - (hi - x2);
-        if (lo) p2[i3++] = lo;
-        x2 = hi;
-      }
-      p2[i3] = x2;
-      this._n = i3 + 1;
-      return this;
-    }
-    valueOf() {
-      const p2 = this._partials;
-      let n3 = this._n, x2, y2, lo, hi = 0;
-      if (n3 > 0) {
-        hi = p2[--n3];
-        while (n3 > 0) {
-          x2 = hi;
-          y2 = p2[--n3];
-          hi = x2 + y2;
-          lo = y2 - (hi - x2);
-          if (lo) break;
-        }
-        if (n3 > 0 && (lo < 0 && p2[n3 - 1] < 0 || lo > 0 && p2[n3 - 1] > 0)) {
-          y2 = lo * 2;
-          x2 = hi + y2;
-          if (y2 == x2 - hi) hi = x2;
-        }
-      }
-      return hi;
-    }
-  };
-
-  // node_modules/d3-array/src/sort.js
-  function compareDefined(compare2 = ascending) {
-    if (compare2 === ascending) return ascendingDefined;
-    if (typeof compare2 !== "function") throw new TypeError("compare is not a function");
-    return (a2, b2) => {
-      const x2 = compare2(a2, b2);
-      if (x2 || x2 === 0) return x2;
-      return (compare2(b2, b2) === 0) - (compare2(a2, a2) === 0);
-    };
-  }
-  function ascendingDefined(a2, b2) {
-    return (a2 == null || !(a2 >= a2)) - (b2 == null || !(b2 >= b2)) || (a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
-  }
-
-  // node_modules/d3-array/src/ticks.js
-  var e10 = Math.sqrt(50);
-  var e5 = Math.sqrt(10);
-  var e2 = Math.sqrt(2);
-  function ticks(start2, stop, count) {
-    var reverse, i3 = -1, n3, ticks2, step;
-    stop = +stop, start2 = +start2, count = +count;
-    if (start2 === stop && count > 0) return [start2];
-    if (reverse = stop < start2) n3 = start2, start2 = stop, stop = n3;
-    if ((step = tickIncrement(start2, stop, count)) === 0 || !isFinite(step)) return [];
-    if (step > 0) {
-      let r0 = Math.round(start2 / step), r1 = Math.round(stop / step);
-      if (r0 * step < start2) ++r0;
-      if (r1 * step > stop) --r1;
-      ticks2 = new Array(n3 = r1 - r0 + 1);
-      while (++i3 < n3) ticks2[i3] = (r0 + i3) * step;
-    } else {
-      step = -step;
-      let r0 = Math.round(start2 * step), r1 = Math.round(stop * step);
-      if (r0 / step < start2) ++r0;
-      if (r1 / step > stop) --r1;
-      ticks2 = new Array(n3 = r1 - r0 + 1);
-      while (++i3 < n3) ticks2[i3] = (r0 + i3) / step;
-    }
-    if (reverse) ticks2.reverse();
-    return ticks2;
-  }
-  function tickIncrement(start2, stop, count) {
-    var step = (stop - start2) / Math.max(0, count), power = Math.floor(Math.log(step) / Math.LN10), error = step / Math.pow(10, power);
-    return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
-  }
-  function tickStep(start2, stop, count) {
-    var step0 = Math.abs(stop - start2) / Math.max(0, count), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error = step0 / step1;
-    if (error >= e10) step1 *= 10;
-    else if (error >= e5) step1 *= 5;
-    else if (error >= e2) step1 *= 2;
-    return stop < start2 ? -step1 : step1;
-  }
-
-  // node_modules/d3-array/src/max.js
-  function max(values, valueof) {
-    let max3;
-    if (valueof === void 0) {
-      for (const value of values) {
-        if (value != null && (max3 < value || max3 === void 0 && value >= value)) {
-          max3 = value;
-        }
-      }
-    } else {
-      let index = -1;
-      for (let value of values) {
-        if ((value = valueof(value, ++index, values)) != null && (max3 < value || max3 === void 0 && value >= value)) {
-          max3 = value;
-        }
-      }
-    }
-    return max3;
-  }
-
-  // node_modules/d3-array/src/min.js
-  function min(values, valueof) {
-    let min3;
-    if (valueof === void 0) {
-      for (const value of values) {
-        if (value != null && (min3 > value || min3 === void 0 && value >= value)) {
-          min3 = value;
-        }
-      }
-    } else {
-      let index = -1;
-      for (let value of values) {
-        if ((value = valueof(value, ++index, values)) != null && (min3 > value || min3 === void 0 && value >= value)) {
-          min3 = value;
-        }
-      }
-    }
-    return min3;
-  }
-
-  // node_modules/d3-array/src/quickselect.js
-  function quickselect(array2, k2, left = 0, right = array2.length - 1, compare2) {
-    compare2 = compare2 === void 0 ? ascendingDefined : compareDefined(compare2);
-    while (right > left) {
-      if (right - left > 600) {
-        const n3 = right - left + 1;
-        const m2 = k2 - left + 1;
-        const z2 = Math.log(n3);
-        const s2 = 0.5 * Math.exp(2 * z2 / 3);
-        const sd = 0.5 * Math.sqrt(z2 * s2 * (n3 - s2) / n3) * (m2 - n3 / 2 < 0 ? -1 : 1);
-        const newLeft = Math.max(left, Math.floor(k2 - m2 * s2 / n3 + sd));
-        const newRight = Math.min(right, Math.floor(k2 + (n3 - m2) * s2 / n3 + sd));
-        quickselect(array2, k2, newLeft, newRight, compare2);
-      }
-      const t2 = array2[k2];
-      let i3 = left;
-      let j2 = right;
-      swap(array2, left, k2);
-      if (compare2(array2[right], t2) > 0) swap(array2, left, right);
-      while (i3 < j2) {
-        swap(array2, i3, j2), ++i3, --j2;
-        while (compare2(array2[i3], t2) < 0) ++i3;
-        while (compare2(array2[j2], t2) > 0) --j2;
-      }
-      if (compare2(array2[left], t2) === 0) swap(array2, left, j2);
-      else ++j2, swap(array2, j2, right);
-      if (j2 <= k2) left = j2 + 1;
-      if (k2 <= j2) right = j2 - 1;
-    }
-    return array2;
-  }
-  function swap(array2, i3, j2) {
-    const t2 = array2[i3];
-    array2[i3] = array2[j2];
-    array2[j2] = t2;
-  }
-
-  // node_modules/d3-array/src/quantile.js
-  function quantile(values, p2, valueof) {
-    values = Float64Array.from(numbers(values, valueof));
-    if (!(n3 = values.length)) return;
-    if ((p2 = +p2) <= 0 || n3 < 2) return min(values);
-    if (p2 >= 1) return max(values);
-    var n3, i3 = (n3 - 1) * p2, i0 = Math.floor(i3), value0 = max(quickselect(values, i0).subarray(0, i0 + 1)), value1 = min(values.subarray(i0 + 1));
-    return value0 + (value1 - value0) * (i3 - i0);
-  }
-
-  // node_modules/d3-array/src/median.js
-  function median(values, valueof) {
-    return quantile(values, 0.5, valueof);
-  }
-
-  // node_modules/d3-array/src/merge.js
-  function* flatten(arrays) {
-    for (const array2 of arrays) {
-      yield* array2;
-    }
-  }
-  function merge(arrays) {
-    return Array.from(flatten(arrays));
-  }
-
-  // node_modules/d3-array/src/pairs.js
-  function pairs(values, pairof = pair) {
-    const pairs2 = [];
-    let previous;
-    let first = false;
-    for (const value of values) {
-      if (first) pairs2.push(pairof(previous, value));
-      previous = value;
-      first = true;
-    }
-    return pairs2;
-  }
-  function pair(a2, b2) {
-    return [a2, b2];
-  }
-
-  // node_modules/d3-array/src/range.js
-  function range(start2, stop, step) {
-    start2 = +start2, stop = +stop, step = (n3 = arguments.length) < 2 ? (stop = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
-    var i3 = -1, n3 = Math.max(0, Math.ceil((stop - start2) / step)) | 0, range3 = new Array(n3);
-    while (++i3 < n3) {
-      range3[i3] = start2 + i3 * step;
-    }
-    return range3;
-  }
-
-  // node_modules/d3-geo/src/math.js
-  var epsilon = 1e-6;
-  var epsilon2 = 1e-12;
-  var pi = Math.PI;
-  var halfPi = pi / 2;
-  var quarterPi = pi / 4;
-  var tau = pi * 2;
-  var degrees = 180 / pi;
-  var radians = pi / 180;
-  var abs = Math.abs;
-  var atan = Math.atan;
-  var atan2 = Math.atan2;
-  var cos = Math.cos;
-  var exp = Math.exp;
-  var log = Math.log;
-  var sin = Math.sin;
-  var sign = Math.sign || function(x2) {
-    return x2 > 0 ? 1 : x2 < 0 ? -1 : 0;
-  };
-  var sqrt = Math.sqrt;
-  var tan = Math.tan;
-  function acos(x2) {
-    return x2 > 1 ? 0 : x2 < -1 ? pi : Math.acos(x2);
-  }
-  function asin(x2) {
-    return x2 > 1 ? halfPi : x2 < -1 ? -halfPi : Math.asin(x2);
-  }
-
-  // node_modules/d3-geo/src/noop.js
-  function noop() {
-  }
-
-  // node_modules/d3-geo/src/stream.js
-  function streamGeometry(geometry, stream) {
-    if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
-      streamGeometryType[geometry.type](geometry, stream);
-    }
-  }
-  var streamObjectType = {
-    Feature: function(object, stream) {
-      streamGeometry(object.geometry, stream);
-    },
-    FeatureCollection: function(object, stream) {
-      var features = object.features, i3 = -1, n3 = features.length;
-      while (++i3 < n3) streamGeometry(features[i3].geometry, stream);
-    }
-  };
-  var streamGeometryType = {
-    Sphere: function(object, stream) {
-      stream.sphere();
-    },
-    Point: function(object, stream) {
-      object = object.coordinates;
-      stream.point(object[0], object[1], object[2]);
-    },
-    MultiPoint: function(object, stream) {
-      var coordinates = object.coordinates, i3 = -1, n3 = coordinates.length;
-      while (++i3 < n3) object = coordinates[i3], stream.point(object[0], object[1], object[2]);
-    },
-    LineString: function(object, stream) {
-      streamLine(object.coordinates, stream, 0);
-    },
-    MultiLineString: function(object, stream) {
-      var coordinates = object.coordinates, i3 = -1, n3 = coordinates.length;
-      while (++i3 < n3) streamLine(coordinates[i3], stream, 0);
-    },
-    Polygon: function(object, stream) {
-      streamPolygon(object.coordinates, stream);
-    },
-    MultiPolygon: function(object, stream) {
-      var coordinates = object.coordinates, i3 = -1, n3 = coordinates.length;
-      while (++i3 < n3) streamPolygon(coordinates[i3], stream);
-    },
-    GeometryCollection: function(object, stream) {
-      var geometries = object.geometries, i3 = -1, n3 = geometries.length;
-      while (++i3 < n3) streamGeometry(geometries[i3], stream);
-    }
-  };
-  function streamLine(coordinates, stream, closed) {
-    var i3 = -1, n3 = coordinates.length - closed, coordinate;
-    stream.lineStart();
-    while (++i3 < n3) coordinate = coordinates[i3], stream.point(coordinate[0], coordinate[1], coordinate[2]);
-    stream.lineEnd();
-  }
-  function streamPolygon(coordinates, stream) {
-    var i3 = -1, n3 = coordinates.length;
-    stream.polygonStart();
-    while (++i3 < n3) streamLine(coordinates[i3], stream, 1);
-    stream.polygonEnd();
-  }
-  function stream_default(object, stream) {
-    if (object && streamObjectType.hasOwnProperty(object.type)) {
-      streamObjectType[object.type](object, stream);
-    } else {
-      streamGeometry(object, stream);
-    }
-  }
-
-  // node_modules/d3-geo/src/area.js
-  var areaRingSum = new Adder();
-  var areaSum = new Adder();
-  var lambda00;
-  var phi00;
-  var lambda0;
-  var cosPhi0;
-  var sinPhi0;
-  var areaStream = {
-    point: noop,
-    lineStart: noop,
-    lineEnd: noop,
-    polygonStart: function() {
-      areaRingSum = new Adder();
-      areaStream.lineStart = areaRingStart;
-      areaStream.lineEnd = areaRingEnd;
-    },
-    polygonEnd: function() {
-      var areaRing = +areaRingSum;
-      areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);
-      this.lineStart = this.lineEnd = this.point = noop;
-    },
-    sphere: function() {
-      areaSum.add(tau);
-    }
-  };
-  function areaRingStart() {
-    areaStream.point = areaPointFirst;
-  }
-  function areaRingEnd() {
-    areaPoint(lambda00, phi00);
-  }
-  function areaPointFirst(lambda, phi) {
-    areaStream.point = areaPoint;
-    lambda00 = lambda, phi00 = phi;
-    lambda *= radians, phi *= radians;
-    lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);
-  }
-  function areaPoint(lambda, phi) {
-    lambda *= radians, phi *= radians;
-    phi = phi / 2 + quarterPi;
-    var dLambda = lambda - lambda0, sdLambda = dLambda >= 0 ? 1 : -1, adLambda = sdLambda * dLambda, cosPhi = cos(phi), sinPhi = sin(phi), k2 = sinPhi0 * sinPhi, u2 = cosPhi0 * cosPhi + k2 * cos(adLambda), v2 = k2 * sdLambda * sin(adLambda);
-    areaRingSum.add(atan2(v2, u2));
-    lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
-  }
-  function area_default(object) {
-    areaSum = new Adder();
-    stream_default(object, areaStream);
-    return areaSum * 2;
-  }
-
-  // node_modules/d3-geo/src/cartesian.js
-  function spherical(cartesian2) {
-    return [atan2(cartesian2[1], cartesian2[0]), asin(cartesian2[2])];
-  }
-  function cartesian(spherical2) {
-    var lambda = spherical2[0], phi = spherical2[1], cosPhi = cos(phi);
-    return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];
-  }
-  function cartesianDot(a2, b2) {
-    return a2[0] * b2[0] + a2[1] * b2[1] + a2[2] * b2[2];
-  }
-  function cartesianCross(a2, b2) {
-    return [a2[1] * b2[2] - a2[2] * b2[1], a2[2] * b2[0] - a2[0] * b2[2], a2[0] * b2[1] - a2[1] * b2[0]];
-  }
-  function cartesianAddInPlace(a2, b2) {
-    a2[0] += b2[0], a2[1] += b2[1], a2[2] += b2[2];
-  }
-  function cartesianScale(vector, k2) {
-    return [vector[0] * k2, vector[1] * k2, vector[2] * k2];
-  }
-  function cartesianNormalizeInPlace(d2) {
-    var l2 = sqrt(d2[0] * d2[0] + d2[1] * d2[1] + d2[2] * d2[2]);
-    d2[0] /= l2, d2[1] /= l2, d2[2] /= l2;
-  }
-
-  // node_modules/d3-geo/src/bounds.js
-  var lambda02;
-  var phi0;
-  var lambda1;
-  var phi1;
-  var lambda2;
-  var lambda002;
-  var phi002;
-  var p0;
-  var deltaSum;
-  var ranges;
-  var range2;
-  var boundsStream = {
-    point: boundsPoint,
-    lineStart: boundsLineStart,
-    lineEnd: boundsLineEnd,
-    polygonStart: function() {
-      boundsStream.point = boundsRingPoint;
-      boundsStream.lineStart = boundsRingStart;
-      boundsStream.lineEnd = boundsRingEnd;
-      deltaSum = new Adder();
-      areaStream.polygonStart();
-    },
-    polygonEnd: function() {
-      areaStream.polygonEnd();
-      boundsStream.point = boundsPoint;
-      boundsStream.lineStart = boundsLineStart;
-      boundsStream.lineEnd = boundsLineEnd;
-      if (areaRingSum < 0) lambda02 = -(lambda1 = 180), phi0 = -(phi1 = 90);
-      else if (deltaSum > epsilon) phi1 = 90;
-      else if (deltaSum < -epsilon) phi0 = -90;
-      range2[0] = lambda02, range2[1] = lambda1;
-    },
-    sphere: function() {
-      lambda02 = -(lambda1 = 180), phi0 = -(phi1 = 90);
-    }
-  };
-  function boundsPoint(lambda, phi) {
-    ranges.push(range2 = [lambda02 = lambda, lambda1 = lambda]);
-    if (phi < phi0) phi0 = phi;
-    if (phi > phi1) phi1 = phi;
-  }
-  function linePoint(lambda, phi) {
-    var p2 = cartesian([lambda * radians, phi * radians]);
-    if (p0) {
-      var normal = cartesianCross(p0, p2), equatorial = [normal[1], -normal[0], 0], inflection = cartesianCross(equatorial, normal);
-      cartesianNormalizeInPlace(inflection);
-      inflection = spherical(inflection);
-      var delta = lambda - lambda2, sign2 = delta > 0 ? 1 : -1, lambdai = inflection[0] * degrees * sign2, phii, antimeridian = abs(delta) > 180;
-      if (antimeridian ^ (sign2 * lambda2 < lambdai && lambdai < sign2 * lambda)) {
-        phii = inflection[1] * degrees;
-        if (phii > phi1) phi1 = phii;
-      } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign2 * lambda2 < lambdai && lambdai < sign2 * lambda)) {
-        phii = -inflection[1] * degrees;
-        if (phii < phi0) phi0 = phii;
-      } else {
-        if (phi < phi0) phi0 = phi;
-        if (phi > phi1) phi1 = phi;
-      }
-      if (antimeridian) {
-        if (lambda < lambda2) {
-          if (angle(lambda02, lambda) > angle(lambda02, lambda1)) lambda1 = lambda;
-        } else {
-          if (angle(lambda, lambda1) > angle(lambda02, lambda1)) lambda02 = lambda;
-        }
-      } else {
-        if (lambda1 >= lambda02) {
-          if (lambda < lambda02) lambda02 = lambda;
-          if (lambda > lambda1) lambda1 = lambda;
-        } else {
-          if (lambda > lambda2) {
-            if (angle(lambda02, lambda) > angle(lambda02, lambda1)) lambda1 = lambda;
-          } else {
-            if (angle(lambda, lambda1) > angle(lambda02, lambda1)) lambda02 = lambda;
-          }
-        }
-      }
-    } else {
-      ranges.push(range2 = [lambda02 = lambda, lambda1 = lambda]);
-    }
-    if (phi < phi0) phi0 = phi;
-    if (phi > phi1) phi1 = phi;
-    p0 = p2, lambda2 = lambda;
-  }
-  function boundsLineStart() {
-    boundsStream.point = linePoint;
-  }
-  function boundsLineEnd() {
-    range2[0] = lambda02, range2[1] = lambda1;
-    boundsStream.point = boundsPoint;
-    p0 = null;
-  }
-  function boundsRingPoint(lambda, phi) {
-    if (p0) {
-      var delta = lambda - lambda2;
-      deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
-    } else {
-      lambda002 = lambda, phi002 = phi;
-    }
-    areaStream.point(lambda, phi);
-    linePoint(lambda, phi);
-  }
-  function boundsRingStart() {
-    areaStream.lineStart();
-  }
-  function boundsRingEnd() {
-    boundsRingPoint(lambda002, phi002);
-    areaStream.lineEnd();
-    if (abs(deltaSum) > epsilon) lambda02 = -(lambda1 = 180);
-    range2[0] = lambda02, range2[1] = lambda1;
-    p0 = null;
-  }
-  function angle(lambda04, lambda12) {
-    return (lambda12 -= lambda04) < 0 ? lambda12 + 360 : lambda12;
-  }
-  function rangeCompare(a2, b2) {
-    return a2[0] - b2[0];
-  }
-  function rangeContains(range3, x2) {
-    return range3[0] <= range3[1] ? range3[0] <= x2 && x2 <= range3[1] : x2 < range3[0] || range3[1] < x2;
-  }
-  function bounds_default(feature3) {
-    var i3, n3, a2, b2, merged, deltaMax, delta;
-    phi1 = lambda1 = -(lambda02 = phi0 = Infinity);
-    ranges = [];
-    stream_default(feature3, boundsStream);
-    if (n3 = ranges.length) {
-      ranges.sort(rangeCompare);
-      for (i3 = 1, a2 = ranges[0], merged = [a2]; i3 < n3; ++i3) {
-        b2 = ranges[i3];
-        if (rangeContains(a2, b2[0]) || rangeContains(a2, b2[1])) {
-          if (angle(a2[0], b2[1]) > angle(a2[0], a2[1])) a2[1] = b2[1];
-          if (angle(b2[0], a2[1]) > angle(a2[0], a2[1])) a2[0] = b2[0];
-        } else {
-          merged.push(a2 = b2);
-        }
-      }
-      for (deltaMax = -Infinity, n3 = merged.length - 1, i3 = 0, a2 = merged[n3]; i3 <= n3; a2 = b2, ++i3) {
-        b2 = merged[i3];
-        if ((delta = angle(a2[1], b2[0])) > deltaMax) deltaMax = delta, lambda02 = b2[0], lambda1 = a2[1];
-      }
-    }
-    ranges = range2 = null;
-    return lambda02 === Infinity || phi0 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda02, phi0], [lambda1, phi1]];
-  }
-
-  // node_modules/d3-geo/src/compose.js
-  function compose_default(a2, b2) {
-    function compose(x2, y2) {
-      return x2 = a2(x2, y2), b2(x2[0], x2[1]);
-    }
-    if (a2.invert && b2.invert) compose.invert = function(x2, y2) {
-      return x2 = b2.invert(x2, y2), x2 && a2.invert(x2[0], x2[1]);
-    };
-    return compose;
-  }
-
-  // node_modules/d3-geo/src/rotation.js
-  function rotationIdentity(lambda, phi) {
-    return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];
-  }
-  rotationIdentity.invert = rotationIdentity;
-  function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
-    return (deltaLambda %= tau) ? deltaPhi || deltaGamma ? compose_default(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) : rotationLambda(deltaLambda) : deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) : rotationIdentity;
-  }
-  function forwardRotationLambda(deltaLambda) {
-    return function(lambda, phi) {
-      return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];
-    };
-  }
-  function rotationLambda(deltaLambda) {
-    var rotation = forwardRotationLambda(deltaLambda);
-    rotation.invert = forwardRotationLambda(-deltaLambda);
-    return rotation;
-  }
-  function rotationPhiGamma(deltaPhi, deltaGamma) {
-    var cosDeltaPhi = cos(deltaPhi), sinDeltaPhi = sin(deltaPhi), cosDeltaGamma = cos(deltaGamma), sinDeltaGamma = sin(deltaGamma);
-    function rotation(lambda, phi) {
-      var cosPhi = cos(phi), x2 = cos(lambda) * cosPhi, y2 = sin(lambda) * cosPhi, z2 = sin(phi), k2 = z2 * cosDeltaPhi + x2 * sinDeltaPhi;
-      return [
-        atan2(y2 * cosDeltaGamma - k2 * sinDeltaGamma, x2 * cosDeltaPhi - z2 * sinDeltaPhi),
-        asin(k2 * cosDeltaGamma + y2 * sinDeltaGamma)
-      ];
-    }
-    rotation.invert = function(lambda, phi) {
-      var cosPhi = cos(phi), x2 = cos(lambda) * cosPhi, y2 = sin(lambda) * cosPhi, z2 = sin(phi), k2 = z2 * cosDeltaGamma - y2 * sinDeltaGamma;
-      return [
-        atan2(y2 * cosDeltaGamma + z2 * sinDeltaGamma, x2 * cosDeltaPhi + k2 * sinDeltaPhi),
-        asin(k2 * cosDeltaPhi - x2 * sinDeltaPhi)
-      ];
-    };
-    return rotation;
-  }
-  function rotation_default(rotate) {
-    rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
-    function forward(coordinates) {
-      coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
-      return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;
-    }
-    forward.invert = function(coordinates) {
-      coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
-      return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;
-    };
-    return forward;
-  }
-
-  // node_modules/d3-geo/src/circle.js
-  function circleStream(stream, radius, delta, direction, t0, t1) {
-    if (!delta) return;
-    var cosRadius = cos(radius), sinRadius = sin(radius), step = direction * delta;
-    if (t0 == null) {
-      t0 = radius + direction * tau;
-      t1 = radius - step / 2;
-    } else {
-      t0 = circleRadius(cosRadius, t0);
-      t1 = circleRadius(cosRadius, t1);
-      if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;
-    }
-    for (var point, t2 = t0; direction > 0 ? t2 > t1 : t2 < t1; t2 -= step) {
-      point = spherical([cosRadius, -sinRadius * cos(t2), -sinRadius * sin(t2)]);
-      stream.point(point[0], point[1]);
-    }
-  }
-  function circleRadius(cosRadius, point) {
-    point = cartesian(point), point[0] -= cosRadius;
-    cartesianNormalizeInPlace(point);
-    var radius = acos(-point[1]);
-    return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;
-  }
-
-  // node_modules/d3-geo/src/clip/buffer.js
-  function buffer_default() {
-    var lines = [], line;
-    return {
-      point: function(x2, y2, m2) {
-        line.push([x2, y2, m2]);
-      },
-      lineStart: function() {
-        lines.push(line = []);
-      },
-      lineEnd: noop,
-      rejoin: function() {
-        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
-      },
-      result: function() {
-        var result = lines;
-        lines = [];
-        line = null;
-        return result;
-      }
-    };
-  }
-
-  // node_modules/d3-geo/src/pointEqual.js
-  function pointEqual_default(a2, b2) {
-    return abs(a2[0] - b2[0]) < epsilon && abs(a2[1] - b2[1]) < epsilon;
-  }
-
-  // node_modules/d3-geo/src/clip/rejoin.js
-  function Intersection(point, points, other, entry) {
-    this.x = point;
-    this.z = points;
-    this.o = other;
-    this.e = entry;
-    this.v = false;
-    this.n = this.p = null;
-  }
-  function rejoin_default(segments, compareIntersection2, startInside, interpolate, stream) {
-    var subject = [], clip = [], i3, n3;
-    segments.forEach(function(segment) {
-      if ((n4 = segment.length - 1) <= 0) return;
-      var n4, p02 = segment[0], p1 = segment[n4], x2;
-      if (pointEqual_default(p02, p1)) {
-        if (!p02[2] && !p1[2]) {
-          stream.lineStart();
-          for (i3 = 0; i3 < n4; ++i3) stream.point((p02 = segment[i3])[0], p02[1]);
-          stream.lineEnd();
-          return;
-        }
-        p1[0] += 2 * epsilon;
-      }
-      subject.push(x2 = new Intersection(p02, segment, null, true));
-      clip.push(x2.o = new Intersection(p02, null, x2, false));
-      subject.push(x2 = new Intersection(p1, segment, null, false));
-      clip.push(x2.o = new Intersection(p1, null, x2, true));
-    });
-    if (!subject.length) return;
-    clip.sort(compareIntersection2);
-    link(subject);
-    link(clip);
-    for (i3 = 0, n3 = clip.length; i3 < n3; ++i3) {
-      clip[i3].e = startInside = !startInside;
-    }
-    var start2 = subject[0], points, point;
-    while (1) {
-      var current = start2, isSubject = true;
-      while (current.v) if ((current = current.n) === start2) return;
-      points = current.z;
-      stream.lineStart();
-      do {
-        current.v = current.o.v = true;
-        if (current.e) {
-          if (isSubject) {
-            for (i3 = 0, n3 = points.length; i3 < n3; ++i3) stream.point((point = points[i3])[0], point[1]);
-          } else {
-            interpolate(current.x, current.n.x, 1, stream);
-          }
-          current = current.n;
-        } else {
-          if (isSubject) {
-            points = current.p.z;
-            for (i3 = points.length - 1; i3 >= 0; --i3) stream.point((point = points[i3])[0], point[1]);
-          } else {
-            interpolate(current.x, current.p.x, -1, stream);
-          }
-          current = current.p;
-        }
-        current = current.o;
-        points = current.z;
-        isSubject = !isSubject;
-      } while (!current.v);
-      stream.lineEnd();
-    }
-  }
-  function link(array2) {
-    if (!(n3 = array2.length)) return;
-    var n3, i3 = 0, a2 = array2[0], b2;
-    while (++i3 < n3) {
-      a2.n = b2 = array2[i3];
-      b2.p = a2;
-      a2 = b2;
-    }
-    a2.n = b2 = array2[0];
-    b2.p = a2;
-  }
-
-  // node_modules/d3-geo/src/polygonContains.js
-  function longitude(point) {
-    return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);
-  }
-  function polygonContains_default(polygon2, point) {
-    var lambda = longitude(point), phi = point[1], sinPhi = sin(phi), normal = [sin(lambda), -cos(lambda), 0], angle2 = 0, winding = 0;
-    var sum = new Adder();
-    if (sinPhi === 1) phi = halfPi + epsilon;
-    else if (sinPhi === -1) phi = -halfPi - epsilon;
-    for (var i3 = 0, n3 = polygon2.length; i3 < n3; ++i3) {
-      if (!(m2 = (ring = polygon2[i3]).length)) continue;
-      var ring, m2, point0 = ring[m2 - 1], lambda04 = longitude(point0), phi02 = point0[1] / 2 + quarterPi, sinPhi03 = sin(phi02), cosPhi03 = cos(phi02);
-      for (var j2 = 0; j2 < m2; ++j2, lambda04 = lambda12, sinPhi03 = sinPhi1, cosPhi03 = cosPhi1, point0 = point1) {
-        var point1 = ring[j2], lambda12 = longitude(point1), phi12 = point1[1] / 2 + quarterPi, sinPhi1 = sin(phi12), cosPhi1 = cos(phi12), delta = lambda12 - lambda04, sign2 = delta >= 0 ? 1 : -1, absDelta = sign2 * delta, antimeridian = absDelta > pi, k2 = sinPhi03 * sinPhi1;
-        sum.add(atan2(k2 * sign2 * sin(absDelta), cosPhi03 * cosPhi1 + k2 * cos(absDelta)));
-        angle2 += antimeridian ? delta + sign2 * tau : delta;
-        if (antimeridian ^ lambda04 >= lambda ^ lambda12 >= lambda) {
-          var arc = cartesianCross(cartesian(point0), cartesian(point1));
-          cartesianNormalizeInPlace(arc);
-          var intersection2 = cartesianCross(normal, arc);
-          cartesianNormalizeInPlace(intersection2);
-          var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection2[2]);
-          if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
-            winding += antimeridian ^ delta >= 0 ? 1 : -1;
+        let segmentId2 = 0;
+        class Segment2 {
+          /* This compare() function is for ordering segments in the sweep
+           * line tree, and does so according to the following criteria:
+           *
+           * Consider the vertical line that lies an infinestimal step to the
+           * right of the right-more of the two left endpoints of the input
+           * segments. Imagine slowly moving a point up from negative infinity
+           * in the increasing y direction. Which of the two segments will that
+           * point intersect first? That segment comes 'before' the other one.
+           *
+           * If neither segment would be intersected by such a line, (if one
+           * or more of the segments are vertical) then the line to be considered
+           * is directly on the right-more of the two left inputs.
+           */
+          static compare(a2, b2) {
+            const alx = a2.leftSE.point.x;
+            const blx = b2.leftSE.point.x;
+            const arx = a2.rightSE.point.x;
+            const brx = b2.rightSE.point.x;
+            if (brx < alx) return 1;
+            if (arx < blx) return -1;
+            const aly = a2.leftSE.point.y;
+            const bly = b2.leftSE.point.y;
+            const ary = a2.rightSE.point.y;
+            const bry = b2.rightSE.point.y;
+            if (alx < blx) {
+              if (bly < aly && bly < ary) return 1;
+              if (bly > aly && bly > ary) return -1;
+              const aCmpBLeft = a2.comparePoint(b2.leftSE.point);
+              if (aCmpBLeft < 0) return 1;
+              if (aCmpBLeft > 0) return -1;
+              const bCmpARight = b2.comparePoint(a2.rightSE.point);
+              if (bCmpARight !== 0) return bCmpARight;
+              return -1;
+            }
+            if (alx > blx) {
+              if (aly < bly && aly < bry) return -1;
+              if (aly > bly && aly > bry) return 1;
+              const bCmpALeft = b2.comparePoint(a2.leftSE.point);
+              if (bCmpALeft !== 0) return bCmpALeft;
+              const aCmpBRight = a2.comparePoint(b2.rightSE.point);
+              if (aCmpBRight < 0) return 1;
+              if (aCmpBRight > 0) return -1;
+              return 1;
+            }
+            if (aly < bly) return -1;
+            if (aly > bly) return 1;
+            if (arx < brx) {
+              const bCmpARight = b2.comparePoint(a2.rightSE.point);
+              if (bCmpARight !== 0) return bCmpARight;
+            }
+            if (arx > brx) {
+              const aCmpBRight = a2.comparePoint(b2.rightSE.point);
+              if (aCmpBRight < 0) return 1;
+              if (aCmpBRight > 0) return -1;
+            }
+            if (arx !== brx) {
+              const ay = ary - aly;
+              const ax = arx - alx;
+              const by = bry - bly;
+              const bx = brx - blx;
+              if (ay > ax && by < bx) return 1;
+              if (ay < ax && by > bx) return -1;
+            }
+            if (arx > brx) return 1;
+            if (arx < brx) return -1;
+            if (ary < bry) return -1;
+            if (ary > bry) return 1;
+            if (a2.id < b2.id) return -1;
+            if (a2.id > b2.id) return 1;
+            return 0;
           }
-        }
-      }
-    }
-    return (angle2 < -epsilon || angle2 < epsilon && sum < -epsilon2) ^ winding & 1;
-  }
-
-  // node_modules/d3-geo/src/clip/index.js
-  function clip_default(pointVisible, clipLine, interpolate, start2) {
-    return function(sink) {
-      var line = clipLine(sink), ringBuffer = buffer_default(), ringSink = clipLine(ringBuffer), polygonStarted = false, polygon2, segments, ring;
-      var clip = {
-        point,
-        lineStart,
-        lineEnd,
-        polygonStart: function() {
-          clip.point = pointRing;
-          clip.lineStart = ringStart;
-          clip.lineEnd = ringEnd;
-          segments = [];
-          polygon2 = [];
-        },
-        polygonEnd: function() {
-          clip.point = point;
-          clip.lineStart = lineStart;
-          clip.lineEnd = lineEnd;
-          segments = merge(segments);
-          var startInside = polygonContains_default(polygon2, start2);
-          if (segments.length) {
-            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-            rejoin_default(segments, compareIntersection, startInside, interpolate, sink);
-          } else if (startInside) {
-            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-            sink.lineStart();
-            interpolate(null, null, 1, sink);
-            sink.lineEnd();
+          /* Warning: a reference to ringWindings input will be stored,
+           *  and possibly will be later modified */
+          constructor(leftSE, rightSE, rings, windings) {
+            this.id = ++segmentId2;
+            this.leftSE = leftSE;
+            leftSE.segment = this;
+            leftSE.otherSE = rightSE;
+            this.rightSE = rightSE;
+            rightSE.segment = this;
+            rightSE.otherSE = leftSE;
+            this.rings = rings;
+            this.windings = windings;
           }
-          if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
-          segments = polygon2 = null;
-        },
-        sphere: function() {
-          sink.polygonStart();
-          sink.lineStart();
-          interpolate(null, null, 1, sink);
-          sink.lineEnd();
-          sink.polygonEnd();
-        }
-      };
-      function point(lambda, phi) {
-        if (pointVisible(lambda, phi)) sink.point(lambda, phi);
-      }
-      function pointLine(lambda, phi) {
-        line.point(lambda, phi);
-      }
-      function lineStart() {
-        clip.point = pointLine;
-        line.lineStart();
-      }
-      function lineEnd() {
-        clip.point = point;
-        line.lineEnd();
-      }
-      function pointRing(lambda, phi) {
-        ring.push([lambda, phi]);
-        ringSink.point(lambda, phi);
-      }
-      function ringStart() {
-        ringSink.lineStart();
-        ring = [];
-      }
-      function ringEnd() {
-        pointRing(ring[0][0], ring[0][1]);
-        ringSink.lineEnd();
-        var clean2 = ringSink.clean(), ringSegments = ringBuffer.result(), i3, n3 = ringSegments.length, m2, segment, point2;
-        ring.pop();
-        polygon2.push(ring);
-        ring = null;
-        if (!n3) return;
-        if (clean2 & 1) {
-          segment = ringSegments[0];
-          if ((m2 = segment.length - 1) > 0) {
-            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
-            sink.lineStart();
-            for (i3 = 0; i3 < m2; ++i3) sink.point((point2 = segment[i3])[0], point2[1]);
-            sink.lineEnd();
+          static fromRing(pt1, pt2, ring) {
+            let leftPt, rightPt, winding;
+            const cmpPts = SweepEvent2.comparePoints(pt1, pt2);
+            if (cmpPts < 0) {
+              leftPt = pt1;
+              rightPt = pt2;
+              winding = 1;
+            } else if (cmpPts > 0) {
+              leftPt = pt2;
+              rightPt = pt1;
+              winding = -1;
+            } else throw new Error("Tried to create degenerate segment at [".concat(pt1.x, ", ").concat(pt1.y, "]"));
+            const leftSE = new SweepEvent2(leftPt, true);
+            const rightSE = new SweepEvent2(rightPt, false);
+            return new Segment2(leftSE, rightSE, [ring], [winding]);
           }
-          return;
-        }
-        if (n3 > 1 && clean2 & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
-        segments.push(ringSegments.filter(validSegment));
-      }
-      return clip;
-    };
-  }
-  function validSegment(segment) {
-    return segment.length > 1;
-  }
-  function compareIntersection(a2, b2) {
-    return ((a2 = a2.x)[0] < 0 ? a2[1] - halfPi - epsilon : halfPi - a2[1]) - ((b2 = b2.x)[0] < 0 ? b2[1] - halfPi - epsilon : halfPi - b2[1]);
-  }
-
-  // node_modules/d3-geo/src/clip/antimeridian.js
-  var antimeridian_default = clip_default(
-    function() {
-      return true;
-    },
-    clipAntimeridianLine,
-    clipAntimeridianInterpolate,
-    [-pi, -halfPi]
-  );
-  function clipAntimeridianLine(stream) {
-    var lambda04 = NaN, phi02 = NaN, sign0 = NaN, clean2;
-    return {
-      lineStart: function() {
-        stream.lineStart();
-        clean2 = 1;
-      },
-      point: function(lambda12, phi12) {
-        var sign1 = lambda12 > 0 ? pi : -pi, delta = abs(lambda12 - lambda04);
-        if (abs(delta - pi) < epsilon) {
-          stream.point(lambda04, phi02 = (phi02 + phi12) / 2 > 0 ? halfPi : -halfPi);
-          stream.point(sign0, phi02);
-          stream.lineEnd();
-          stream.lineStart();
-          stream.point(sign1, phi02);
-          stream.point(lambda12, phi02);
-          clean2 = 0;
-        } else if (sign0 !== sign1 && delta >= pi) {
-          if (abs(lambda04 - sign0) < epsilon) lambda04 -= sign0 * epsilon;
-          if (abs(lambda12 - sign1) < epsilon) lambda12 -= sign1 * epsilon;
-          phi02 = clipAntimeridianIntersect(lambda04, phi02, lambda12, phi12);
-          stream.point(sign0, phi02);
-          stream.lineEnd();
-          stream.lineStart();
-          stream.point(sign1, phi02);
-          clean2 = 0;
-        }
-        stream.point(lambda04 = lambda12, phi02 = phi12);
-        sign0 = sign1;
-      },
-      lineEnd: function() {
-        stream.lineEnd();
-        lambda04 = phi02 = NaN;
-      },
-      clean: function() {
-        return 2 - clean2;
-      }
-    };
-  }
-  function clipAntimeridianIntersect(lambda04, phi02, lambda12, phi12) {
-    var cosPhi03, cosPhi1, sinLambda0Lambda1 = sin(lambda04 - lambda12);
-    return abs(sinLambda0Lambda1) > epsilon ? atan((sin(phi02) * (cosPhi1 = cos(phi12)) * sin(lambda12) - sin(phi12) * (cosPhi03 = cos(phi02)) * sin(lambda04)) / (cosPhi03 * cosPhi1 * sinLambda0Lambda1)) : (phi02 + phi12) / 2;
-  }
-  function clipAntimeridianInterpolate(from, to, direction, stream) {
-    var phi;
-    if (from == null) {
-      phi = direction * halfPi;
-      stream.point(-pi, phi);
-      stream.point(0, phi);
-      stream.point(pi, phi);
-      stream.point(pi, 0);
-      stream.point(pi, -phi);
-      stream.point(0, -phi);
-      stream.point(-pi, -phi);
-      stream.point(-pi, 0);
-      stream.point(-pi, phi);
-    } else if (abs(from[0] - to[0]) > epsilon) {
-      var lambda = from[0] < to[0] ? pi : -pi;
-      phi = direction * lambda / 2;
-      stream.point(-lambda, phi);
-      stream.point(0, phi);
-      stream.point(lambda, phi);
-    } else {
-      stream.point(to[0], to[1]);
-    }
-  }
-
-  // node_modules/d3-geo/src/clip/circle.js
-  function circle_default(radius) {
-    var cr = cos(radius), delta = 6 * radians, smallRadius = cr > 0, notHemisphere = abs(cr) > epsilon;
-    function interpolate(from, to, direction, stream) {
-      circleStream(stream, radius, delta, direction, from, to);
-    }
-    function visible(lambda, phi) {
-      return cos(lambda) * cos(phi) > cr;
-    }
-    function clipLine(stream) {
-      var point0, c0, v0, v00, clean2;
-      return {
-        lineStart: function() {
-          v00 = v0 = false;
-          clean2 = 1;
-        },
-        point: function(lambda, phi) {
-          var point1 = [lambda, phi], point2, v2 = visible(lambda, phi), c2 = smallRadius ? v2 ? 0 : code(lambda, phi) : v2 ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;
-          if (!point0 && (v00 = v0 = v2)) stream.lineStart();
-          if (v2 !== v0) {
-            point2 = intersect2(point0, point1);
-            if (!point2 || pointEqual_default(point0, point2) || pointEqual_default(point1, point2))
-              point1[2] = 1;
+          /* When a segment is split, the rightSE is replaced with a new sweep event */
+          replaceRightSE(newRightSE) {
+            this.rightSE = newRightSE;
+            this.rightSE.segment = this;
+            this.rightSE.otherSE = this.leftSE;
+            this.leftSE.otherSE = this.rightSE;
           }
-          if (v2 !== v0) {
-            clean2 = 0;
-            if (v2) {
-              stream.lineStart();
-              point2 = intersect2(point1, point0);
-              stream.point(point2[0], point2[1]);
-            } else {
-              point2 = intersect2(point0, point1);
-              stream.point(point2[0], point2[1], 2);
-              stream.lineEnd();
-            }
-            point0 = point2;
-          } else if (notHemisphere && point0 && smallRadius ^ v2) {
-            var t2;
-            if (!(c2 & c0) && (t2 = intersect2(point1, point0, true))) {
-              clean2 = 0;
-              if (smallRadius) {
-                stream.lineStart();
-                stream.point(t2[0][0], t2[0][1]);
-                stream.point(t2[1][0], t2[1][1]);
-                stream.lineEnd();
-              } else {
-                stream.point(t2[1][0], t2[1][1]);
-                stream.lineEnd();
-                stream.lineStart();
-                stream.point(t2[0][0], t2[0][1], 3);
+          bbox() {
+            const y12 = this.leftSE.point.y;
+            const y2 = this.rightSE.point.y;
+            return {
+              ll: {
+                x: this.leftSE.point.x,
+                y: y12 < y2 ? y12 : y2
+              },
+              ur: {
+                x: this.rightSE.point.x,
+                y: y12 > y2 ? y12 : y2
               }
-            }
+            };
           }
-          if (v2 && (!point0 || !pointEqual_default(point0, point1))) {
-            stream.point(point1[0], point1[1]);
+          /* A vector from the left point to the right */
+          vector() {
+            return {
+              x: this.rightSE.point.x - this.leftSE.point.x,
+              y: this.rightSE.point.y - this.leftSE.point.y
+            };
           }
-          point0 = point1, v0 = v2, c0 = c2;
-        },
-        lineEnd: function() {
-          if (v0) stream.lineEnd();
-          point0 = null;
-        },
-        // Rejoin first and last segments if there were intersections and the first
-        // and last points were visible.
-        clean: function() {
-          return clean2 | (v00 && v0) << 1;
-        }
-      };
-    }
-    function intersect2(a2, b2, two) {
-      var pa = cartesian(a2), pb = cartesian(b2);
-      var n1 = [1, 0, 0], n22 = cartesianCross(pa, pb), n2n2 = cartesianDot(n22, n22), n1n2 = n22[0], determinant = n2n2 - n1n2 * n1n2;
-      if (!determinant) return !two && a2;
-      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = cartesianCross(n1, n22), A2 = cartesianScale(n1, c1), B2 = cartesianScale(n22, c2);
-      cartesianAddInPlace(A2, B2);
-      var u2 = n1xn2, w2 = cartesianDot(A2, u2), uu = cartesianDot(u2, u2), t2 = w2 * w2 - uu * (cartesianDot(A2, A2) - 1);
-      if (t2 < 0) return;
-      var t3 = sqrt(t2), q2 = cartesianScale(u2, (-w2 - t3) / uu);
-      cartesianAddInPlace(q2, A2);
-      q2 = spherical(q2);
-      if (!two) return q2;
-      var lambda04 = a2[0], lambda12 = b2[0], phi02 = a2[1], phi12 = b2[1], z2;
-      if (lambda12 < lambda04) z2 = lambda04, lambda04 = lambda12, lambda12 = z2;
-      var delta2 = lambda12 - lambda04, polar = abs(delta2 - pi) < epsilon, meridian = polar || delta2 < epsilon;
-      if (!polar && phi12 < phi02) z2 = phi02, phi02 = phi12, phi12 = z2;
-      if (meridian ? polar ? phi02 + phi12 > 0 ^ q2[1] < (abs(q2[0] - lambda04) < epsilon ? phi02 : phi12) : phi02 <= q2[1] && q2[1] <= phi12 : delta2 > pi ^ (lambda04 <= q2[0] && q2[0] <= lambda12)) {
-        var q1 = cartesianScale(u2, (-w2 + t3) / uu);
-        cartesianAddInPlace(q1, A2);
-        return [q2, spherical(q1)];
-      }
-    }
-    function code(lambda, phi) {
-      var r2 = smallRadius ? radius : pi - radius, code2 = 0;
-      if (lambda < -r2) code2 |= 1;
-      else if (lambda > r2) code2 |= 2;
-      if (phi < -r2) code2 |= 4;
-      else if (phi > r2) code2 |= 8;
-      return code2;
-    }
-    return clip_default(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);
-  }
-
-  // node_modules/d3-geo/src/clip/line.js
-  function line_default(a2, b2, x05, y05, x12, y12) {
-    var ax = a2[0], ay = a2[1], bx = b2[0], by = b2[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r2;
-    r2 = x05 - ax;
-    if (!dx && r2 > 0) return;
-    r2 /= dx;
-    if (dx < 0) {
-      if (r2 < t0) return;
-      if (r2 < t1) t1 = r2;
-    } else if (dx > 0) {
-      if (r2 > t1) return;
-      if (r2 > t0) t0 = r2;
-    }
-    r2 = x12 - ax;
-    if (!dx && r2 < 0) return;
-    r2 /= dx;
-    if (dx < 0) {
-      if (r2 > t1) return;
-      if (r2 > t0) t0 = r2;
-    } else if (dx > 0) {
-      if (r2 < t0) return;
-      if (r2 < t1) t1 = r2;
-    }
-    r2 = y05 - ay;
-    if (!dy && r2 > 0) return;
-    r2 /= dy;
-    if (dy < 0) {
-      if (r2 < t0) return;
-      if (r2 < t1) t1 = r2;
-    } else if (dy > 0) {
-      if (r2 > t1) return;
-      if (r2 > t0) t0 = r2;
-    }
-    r2 = y12 - ay;
-    if (!dy && r2 < 0) return;
-    r2 /= dy;
-    if (dy < 0) {
-      if (r2 > t1) return;
-      if (r2 > t0) t0 = r2;
-    } else if (dy > 0) {
-      if (r2 < t0) return;
-      if (r2 < t1) t1 = r2;
-    }
-    if (t0 > 0) a2[0] = ax + t0 * dx, a2[1] = ay + t0 * dy;
-    if (t1 < 1) b2[0] = ax + t1 * dx, b2[1] = ay + t1 * dy;
-    return true;
-  }
-
-  // node_modules/d3-geo/src/clip/rectangle.js
-  var clipMax = 1e9;
-  var clipMin = -clipMax;
-  function clipRectangle(x05, y05, x12, y12) {
-    function visible(x2, y2) {
-      return x05 <= x2 && x2 <= x12 && y05 <= y2 && y2 <= y12;
-    }
-    function interpolate(from, to, direction, stream) {
-      var a2 = 0, a1 = 0;
-      if (from == null || (a2 = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoint(from, to) < 0 ^ direction > 0) {
-        do
-          stream.point(a2 === 0 || a2 === 3 ? x05 : x12, a2 > 1 ? y12 : y05);
-        while ((a2 = (a2 + direction + 4) % 4) !== a1);
-      } else {
-        stream.point(to[0], to[1]);
-      }
-    }
-    function corner(p2, direction) {
-      return abs(p2[0] - x05) < epsilon ? direction > 0 ? 0 : 3 : abs(p2[0] - x12) < epsilon ? direction > 0 ? 2 : 1 : abs(p2[1] - y05) < epsilon ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
-    }
-    function compareIntersection2(a2, b2) {
-      return comparePoint(a2.x, b2.x);
-    }
-    function comparePoint(a2, b2) {
-      var ca = corner(a2, 1), cb = corner(b2, 1);
-      return ca !== cb ? ca - cb : ca === 0 ? b2[1] - a2[1] : ca === 1 ? a2[0] - b2[0] : ca === 2 ? a2[1] - b2[1] : b2[0] - a2[0];
-    }
-    return function(stream) {
-      var activeStream = stream, bufferStream = buffer_default(), segments, polygon2, ring, x__, y__, v__, x_, y_, v_, first, clean2;
-      var clipStream = {
-        point,
-        lineStart,
-        lineEnd,
-        polygonStart,
-        polygonEnd
-      };
-      function point(x2, y2) {
-        if (visible(x2, y2)) activeStream.point(x2, y2);
-      }
-      function polygonInside() {
-        var winding = 0;
-        for (var i3 = 0, n3 = polygon2.length; i3 < n3; ++i3) {
-          for (var ring2 = polygon2[i3], j2 = 1, m2 = ring2.length, point2 = ring2[0], a0, a1, b0 = point2[0], b1 = point2[1]; j2 < m2; ++j2) {
-            a0 = b0, a1 = b1, point2 = ring2[j2], b0 = point2[0], b1 = point2[1];
-            if (a1 <= y12) {
-              if (b1 > y12 && (b0 - a0) * (y12 - a1) > (b1 - a1) * (x05 - a0)) ++winding;
-            } else {
-              if (b1 <= y12 && (b0 - a0) * (y12 - a1) < (b1 - a1) * (x05 - a0)) --winding;
+          isAnEndpoint(pt2) {
+            return pt2.x === this.leftSE.point.x && pt2.y === this.leftSE.point.y || pt2.x === this.rightSE.point.x && pt2.y === this.rightSE.point.y;
+          }
+          /* Compare this segment with a point.
+           *
+           * A point P is considered to be colinear to a segment if there
+           * exists a distance D such that if we travel along the segment
+           * from one * endpoint towards the other a distance D, we find
+           * ourselves at point P.
+           *
+           * Return value indicates:
+           *
+           *   1: point lies above the segment (to the left of vertical)
+           *   0: point is colinear to segment
+           *  -1: point lies below the segment (to the right of vertical)
+           */
+          comparePoint(point) {
+            if (this.isAnEndpoint(point)) return 0;
+            const lPt = this.leftSE.point;
+            const rPt = this.rightSE.point;
+            const v2 = this.vector();
+            if (lPt.x === rPt.x) {
+              if (point.x === lPt.x) return 0;
+              return point.x < lPt.x ? 1 : -1;
             }
+            const yDist = (point.y - lPt.y) / v2.y;
+            const xFromYDist = lPt.x + yDist * v2.x;
+            if (point.x === xFromYDist) return 0;
+            const xDist = (point.x - lPt.x) / v2.x;
+            const yFromXDist = lPt.y + xDist * v2.y;
+            if (point.y === yFromXDist) return 0;
+            return point.y < yFromXDist ? -1 : 1;
           }
-        }
-        return winding;
-      }
-      function polygonStart() {
-        activeStream = bufferStream, segments = [], polygon2 = [], clean2 = true;
-      }
-      function polygonEnd() {
-        var startInside = polygonInside(), cleanInside = clean2 && startInside, visible2 = (segments = merge(segments)).length;
-        if (cleanInside || visible2) {
-          stream.polygonStart();
-          if (cleanInside) {
-            stream.lineStart();
-            interpolate(null, null, 1, stream);
-            stream.lineEnd();
+          /**
+           * Given another segment, returns the first non-trivial intersection
+           * between the two segments (in terms of sweep line ordering), if it exists.
+           *
+           * A 'non-trivial' intersection is one that will cause one or both of the
+           * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:
+           *
+           *   * endpoint of segA with endpoint of segB --> trivial
+           *   * endpoint of segA with point along segB --> non-trivial
+           *   * endpoint of segB with point along segA --> non-trivial
+           *   * point along segA with point along segB --> non-trivial
+           *
+           * If no non-trivial intersection exists, return null
+           * Else, return null.
+           */
+          getIntersection(other2) {
+            const tBbox = this.bbox();
+            const oBbox = other2.bbox();
+            const bboxOverlap = getBboxOverlap2(tBbox, oBbox);
+            if (bboxOverlap === null) return null;
+            const tlp = this.leftSE.point;
+            const trp = this.rightSE.point;
+            const olp = other2.leftSE.point;
+            const orp = other2.rightSE.point;
+            const touchesOtherLSE = isInBbox2(tBbox, olp) && this.comparePoint(olp) === 0;
+            const touchesThisLSE = isInBbox2(oBbox, tlp) && other2.comparePoint(tlp) === 0;
+            const touchesOtherRSE = isInBbox2(tBbox, orp) && this.comparePoint(orp) === 0;
+            const touchesThisRSE = isInBbox2(oBbox, trp) && other2.comparePoint(trp) === 0;
+            if (touchesThisLSE && touchesOtherLSE) {
+              if (touchesThisRSE && !touchesOtherRSE) return trp;
+              if (!touchesThisRSE && touchesOtherRSE) return orp;
+              return null;
+            }
+            if (touchesThisLSE) {
+              if (touchesOtherRSE) {
+                if (tlp.x === orp.x && tlp.y === orp.y) return null;
+              }
+              return tlp;
+            }
+            if (touchesOtherLSE) {
+              if (touchesThisRSE) {
+                if (trp.x === olp.x && trp.y === olp.y) return null;
+              }
+              return olp;
+            }
+            if (touchesThisRSE && touchesOtherRSE) return null;
+            if (touchesThisRSE) return trp;
+            if (touchesOtherRSE) return orp;
+            const pt2 = intersection$1(tlp, this.vector(), olp, other2.vector());
+            if (pt2 === null) return null;
+            if (!isInBbox2(bboxOverlap, pt2)) return null;
+            return rounder.round(pt2.x, pt2.y);
           }
-          if (visible2) {
-            rejoin_default(segments, compareIntersection2, startInside, interpolate, stream);
+          /**
+           * Split the given segment into multiple segments on the given points.
+           *  * Each existing segment will retain its leftSE and a new rightSE will be
+           *    generated for it.
+           *  * A new segment will be generated which will adopt the original segment's
+           *    rightSE, and a new leftSE will be generated for it.
+           *  * If there are more than two points given to split on, new segments
+           *    in the middle will be generated with new leftSE and rightSE's.
+           *  * An array of the newly generated SweepEvents will be returned.
+           *
+           * Warning: input array of points is modified
+           */
+          split(point) {
+            const newEvents = [];
+            const alreadyLinked = point.events !== void 0;
+            const newLeftSE = new SweepEvent2(point, true);
+            const newRightSE = new SweepEvent2(point, false);
+            const oldRightSE = this.rightSE;
+            this.replaceRightSE(newRightSE);
+            newEvents.push(newRightSE);
+            newEvents.push(newLeftSE);
+            const newSeg = new Segment2(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice());
+            if (SweepEvent2.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {
+              newSeg.swapEvents();
+            }
+            if (SweepEvent2.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {
+              this.swapEvents();
+            }
+            if (alreadyLinked) {
+              newLeftSE.checkForConsuming();
+              newRightSE.checkForConsuming();
+            }
+            return newEvents;
           }
-          stream.polygonEnd();
-        }
-        activeStream = stream, segments = polygon2 = ring = null;
-      }
-      function lineStart() {
-        clipStream.point = linePoint2;
-        if (polygon2) polygon2.push(ring = []);
-        first = true;
-        v_ = false;
-        x_ = y_ = NaN;
-      }
-      function lineEnd() {
-        if (segments) {
-          linePoint2(x__, y__);
-          if (v__ && v_) bufferStream.rejoin();
-          segments.push(bufferStream.result());
-        }
-        clipStream.point = point;
-        if (v_) activeStream.lineEnd();
-      }
-      function linePoint2(x2, y2) {
-        var v2 = visible(x2, y2);
-        if (polygon2) ring.push([x2, y2]);
-        if (first) {
-          x__ = x2, y__ = y2, v__ = v2;
-          first = false;
-          if (v2) {
-            activeStream.lineStart();
-            activeStream.point(x2, y2);
+          /* Swap which event is left and right */
+          swapEvents() {
+            const tmpEvt = this.rightSE;
+            this.rightSE = this.leftSE;
+            this.leftSE = tmpEvt;
+            this.leftSE.isLeft = true;
+            this.rightSE.isLeft = false;
+            for (let i3 = 0, iMax = this.windings.length; i3 < iMax; i3++) {
+              this.windings[i3] *= -1;
+            }
           }
-        } else {
-          if (v2 && v_) activeStream.point(x2, y2);
-          else {
-            var a2 = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], b2 = [x2 = Math.max(clipMin, Math.min(clipMax, x2)), y2 = Math.max(clipMin, Math.min(clipMax, y2))];
-            if (line_default(a2, b2, x05, y05, x12, y12)) {
-              if (!v_) {
-                activeStream.lineStart();
-                activeStream.point(a2[0], a2[1]);
+          /* Consume another segment. We take their rings under our wing
+           * and mark them as consumed. Use for perfectly overlapping segments */
+          consume(other2) {
+            let consumer = this;
+            let consumee = other2;
+            while (consumer.consumedBy) consumer = consumer.consumedBy;
+            while (consumee.consumedBy) consumee = consumee.consumedBy;
+            const cmp2 = Segment2.compare(consumer, consumee);
+            if (cmp2 === 0) return;
+            if (cmp2 > 0) {
+              const tmp = consumer;
+              consumer = consumee;
+              consumee = tmp;
+            }
+            if (consumer.prev === consumee) {
+              const tmp = consumer;
+              consumer = consumee;
+              consumee = tmp;
+            }
+            for (let i3 = 0, iMax = consumee.rings.length; i3 < iMax; i3++) {
+              const ring = consumee.rings[i3];
+              const winding = consumee.windings[i3];
+              const index2 = consumer.rings.indexOf(ring);
+              if (index2 === -1) {
+                consumer.rings.push(ring);
+                consumer.windings.push(winding);
+              } else consumer.windings[index2] += winding;
+            }
+            consumee.rings = null;
+            consumee.windings = null;
+            consumee.consumedBy = consumer;
+            consumee.leftSE.consumedBy = consumer.leftSE;
+            consumee.rightSE.consumedBy = consumer.rightSE;
+          }
+          /* The first segment previous segment chain that is in the result */
+          prevInResult() {
+            if (this._prevInResult !== void 0) return this._prevInResult;
+            if (!this.prev) this._prevInResult = null;
+            else if (this.prev.isInResult()) this._prevInResult = this.prev;
+            else this._prevInResult = this.prev.prevInResult();
+            return this._prevInResult;
+          }
+          beforeState() {
+            if (this._beforeState !== void 0) return this._beforeState;
+            if (!this.prev) this._beforeState = {
+              rings: [],
+              windings: [],
+              multiPolys: []
+            };
+            else {
+              const seg = this.prev.consumedBy || this.prev;
+              this._beforeState = seg.afterState();
+            }
+            return this._beforeState;
+          }
+          afterState() {
+            if (this._afterState !== void 0) return this._afterState;
+            const beforeState = this.beforeState();
+            this._afterState = {
+              rings: beforeState.rings.slice(0),
+              windings: beforeState.windings.slice(0),
+              multiPolys: []
+            };
+            const ringsAfter = this._afterState.rings;
+            const windingsAfter = this._afterState.windings;
+            const mpsAfter = this._afterState.multiPolys;
+            for (let i3 = 0, iMax = this.rings.length; i3 < iMax; i3++) {
+              const ring = this.rings[i3];
+              const winding = this.windings[i3];
+              const index2 = ringsAfter.indexOf(ring);
+              if (index2 === -1) {
+                ringsAfter.push(ring);
+                windingsAfter.push(winding);
+              } else windingsAfter[index2] += winding;
+            }
+            const polysAfter = [];
+            const polysExclude = [];
+            for (let i3 = 0, iMax = ringsAfter.length; i3 < iMax; i3++) {
+              if (windingsAfter[i3] === 0) continue;
+              const ring = ringsAfter[i3];
+              const poly = ring.poly;
+              if (polysExclude.indexOf(poly) !== -1) continue;
+              if (ring.isExterior) polysAfter.push(poly);
+              else {
+                if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);
+                const index2 = polysAfter.indexOf(ring.poly);
+                if (index2 !== -1) polysAfter.splice(index2, 1);
               }
-              activeStream.point(b2[0], b2[1]);
-              if (!v2) activeStream.lineEnd();
-              clean2 = false;
-            } else if (v2) {
-              activeStream.lineStart();
-              activeStream.point(x2, y2);
-              clean2 = false;
             }
+            for (let i3 = 0, iMax = polysAfter.length; i3 < iMax; i3++) {
+              const mp = polysAfter[i3].multiPoly;
+              if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);
+            }
+            return this._afterState;
+          }
+          /* Is this segment part of the final result? */
+          isInResult() {
+            if (this.consumedBy) return false;
+            if (this._isInResult !== void 0) return this._isInResult;
+            const mpsBefore = this.beforeState().multiPolys;
+            const mpsAfter = this.afterState().multiPolys;
+            switch (operation2.type) {
+              case "union": {
+                const noBefores = mpsBefore.length === 0;
+                const noAfters = mpsAfter.length === 0;
+                this._isInResult = noBefores !== noAfters;
+                break;
+              }
+              case "intersection": {
+                let least;
+                let most;
+                if (mpsBefore.length < mpsAfter.length) {
+                  least = mpsBefore.length;
+                  most = mpsAfter.length;
+                } else {
+                  least = mpsAfter.length;
+                  most = mpsBefore.length;
+                }
+                this._isInResult = most === operation2.numMultiPolys && least < most;
+                break;
+              }
+              case "xor": {
+                const diff = Math.abs(mpsBefore.length - mpsAfter.length);
+                this._isInResult = diff % 2 === 1;
+                break;
+              }
+              case "difference": {
+                const isJustSubject = (mps) => mps.length === 1 && mps[0].isSubject;
+                this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);
+                break;
+              }
+              default:
+                throw new Error("Unrecognized operation type found ".concat(operation2.type));
+            }
+            return this._isInResult;
           }
         }
-        x_ = x2, y_ = y2, v_ = v2;
-      }
-      return clipStream;
-    };
-  }
-
-  // node_modules/d3-geo/src/length.js
-  var lengthSum;
-  var lambda03;
-  var sinPhi02;
-  var cosPhi02;
-  var lengthStream = {
-    sphere: noop,
-    point: noop,
-    lineStart: lengthLineStart,
-    lineEnd: noop,
-    polygonStart: noop,
-    polygonEnd: noop
-  };
-  function lengthLineStart() {
-    lengthStream.point = lengthPointFirst;
-    lengthStream.lineEnd = lengthLineEnd;
-  }
-  function lengthLineEnd() {
-    lengthStream.point = lengthStream.lineEnd = noop;
-  }
-  function lengthPointFirst(lambda, phi) {
-    lambda *= radians, phi *= radians;
-    lambda03 = lambda, sinPhi02 = sin(phi), cosPhi02 = cos(phi);
-    lengthStream.point = lengthPoint;
-  }
-  function lengthPoint(lambda, phi) {
-    lambda *= radians, phi *= radians;
-    var sinPhi = sin(phi), cosPhi = cos(phi), delta = abs(lambda - lambda03), cosDelta = cos(delta), sinDelta = sin(delta), x2 = cosPhi * sinDelta, y2 = cosPhi02 * sinPhi - sinPhi02 * cosPhi * cosDelta, z2 = sinPhi02 * sinPhi + cosPhi02 * cosPhi * cosDelta;
-    lengthSum.add(atan2(sqrt(x2 * x2 + y2 * y2), z2));
-    lambda03 = lambda, sinPhi02 = sinPhi, cosPhi02 = cosPhi;
-  }
-  function length_default(object) {
-    lengthSum = new Adder();
-    stream_default(object, lengthStream);
-    return +lengthSum;
-  }
-
-  // node_modules/d3-geo/src/identity.js
-  var identity_default = (x2) => x2;
-
-  // node_modules/d3-geo/src/path/area.js
-  var areaSum2 = new Adder();
-  var areaRingSum2 = new Adder();
-  var x00;
-  var y00;
-  var x0;
-  var y0;
-  var areaStream2 = {
-    point: noop,
-    lineStart: noop,
-    lineEnd: noop,
-    polygonStart: function() {
-      areaStream2.lineStart = areaRingStart2;
-      areaStream2.lineEnd = areaRingEnd2;
-    },
-    polygonEnd: function() {
-      areaStream2.lineStart = areaStream2.lineEnd = areaStream2.point = noop;
-      areaSum2.add(abs(areaRingSum2));
-      areaRingSum2 = new Adder();
-    },
-    result: function() {
-      var area = areaSum2 / 2;
-      areaSum2 = new Adder();
-      return area;
-    }
-  };
-  function areaRingStart2() {
-    areaStream2.point = areaPointFirst2;
-  }
-  function areaPointFirst2(x2, y2) {
-    areaStream2.point = areaPoint2;
-    x00 = x0 = x2, y00 = y0 = y2;
-  }
-  function areaPoint2(x2, y2) {
-    areaRingSum2.add(y0 * x2 - x0 * y2);
-    x0 = x2, y0 = y2;
-  }
-  function areaRingEnd2() {
-    areaPoint2(x00, y00);
-  }
-  var area_default2 = areaStream2;
-
-  // node_modules/d3-geo/src/path/bounds.js
-  var x02 = Infinity;
-  var y02 = x02;
-  var x1 = -x02;
-  var y1 = x1;
-  var boundsStream2 = {
-    point: boundsPoint2,
-    lineStart: noop,
-    lineEnd: noop,
-    polygonStart: noop,
-    polygonEnd: noop,
-    result: function() {
-      var bounds = [[x02, y02], [x1, y1]];
-      x1 = y1 = -(y02 = x02 = Infinity);
-      return bounds;
-    }
-  };
-  function boundsPoint2(x2, y2) {
-    if (x2 < x02) x02 = x2;
-    if (x2 > x1) x1 = x2;
-    if (y2 < y02) y02 = y2;
-    if (y2 > y1) y1 = y2;
-  }
-  var bounds_default2 = boundsStream2;
-
-  // node_modules/d3-geo/src/path/centroid.js
-  var X0 = 0;
-  var Y0 = 0;
-  var Z0 = 0;
-  var X1 = 0;
-  var Y1 = 0;
-  var Z1 = 0;
-  var X2 = 0;
-  var Y2 = 0;
-  var Z2 = 0;
-  var x002;
-  var y002;
-  var x03;
-  var y03;
-  var centroidStream = {
-    point: centroidPoint,
-    lineStart: centroidLineStart,
-    lineEnd: centroidLineEnd,
-    polygonStart: function() {
-      centroidStream.lineStart = centroidRingStart;
-      centroidStream.lineEnd = centroidRingEnd;
-    },
-    polygonEnd: function() {
-      centroidStream.point = centroidPoint;
-      centroidStream.lineStart = centroidLineStart;
-      centroidStream.lineEnd = centroidLineEnd;
-    },
-    result: function() {
-      var centroid = Z2 ? [X2 / Z2, Y2 / Z2] : Z1 ? [X1 / Z1, Y1 / Z1] : Z0 ? [X0 / Z0, Y0 / Z0] : [NaN, NaN];
-      X0 = Y0 = Z0 = X1 = Y1 = Z1 = X2 = Y2 = Z2 = 0;
-      return centroid;
-    }
-  };
-  function centroidPoint(x2, y2) {
-    X0 += x2;
-    Y0 += y2;
-    ++Z0;
-  }
-  function centroidLineStart() {
-    centroidStream.point = centroidPointFirstLine;
-  }
-  function centroidPointFirstLine(x2, y2) {
-    centroidStream.point = centroidPointLine;
-    centroidPoint(x03 = x2, y03 = y2);
-  }
-  function centroidPointLine(x2, y2) {
-    var dx = x2 - x03, dy = y2 - y03, z2 = sqrt(dx * dx + dy * dy);
-    X1 += z2 * (x03 + x2) / 2;
-    Y1 += z2 * (y03 + y2) / 2;
-    Z1 += z2;
-    centroidPoint(x03 = x2, y03 = y2);
-  }
-  function centroidLineEnd() {
-    centroidStream.point = centroidPoint;
-  }
-  function centroidRingStart() {
-    centroidStream.point = centroidPointFirstRing;
-  }
-  function centroidRingEnd() {
-    centroidPointRing(x002, y002);
-  }
-  function centroidPointFirstRing(x2, y2) {
-    centroidStream.point = centroidPointRing;
-    centroidPoint(x002 = x03 = x2, y002 = y03 = y2);
-  }
-  function centroidPointRing(x2, y2) {
-    var dx = x2 - x03, dy = y2 - y03, z2 = sqrt(dx * dx + dy * dy);
-    X1 += z2 * (x03 + x2) / 2;
-    Y1 += z2 * (y03 + y2) / 2;
-    Z1 += z2;
-    z2 = y03 * x2 - x03 * y2;
-    X2 += z2 * (x03 + x2);
-    Y2 += z2 * (y03 + y2);
-    Z2 += z2 * 3;
-    centroidPoint(x03 = x2, y03 = y2);
-  }
-  var centroid_default = centroidStream;
-
-  // node_modules/d3-geo/src/path/context.js
-  function PathContext(context) {
-    this._context = context;
-  }
-  PathContext.prototype = {
-    _radius: 4.5,
-    pointRadius: function(_2) {
-      return this._radius = _2, this;
-    },
-    polygonStart: function() {
-      this._line = 0;
-    },
-    polygonEnd: function() {
-      this._line = NaN;
-    },
-    lineStart: function() {
-      this._point = 0;
-    },
-    lineEnd: function() {
-      if (this._line === 0) this._context.closePath();
-      this._point = NaN;
-    },
-    point: function(x2, y2) {
-      switch (this._point) {
-        case 0: {
-          this._context.moveTo(x2, y2);
-          this._point = 1;
-          break;
-        }
-        case 1: {
-          this._context.lineTo(x2, y2);
-          break;
+        class RingIn2 {
+          constructor(geomRing, poly, isExterior) {
+            if (!Array.isArray(geomRing) || geomRing.length === 0) {
+              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+            }
+            this.poly = poly;
+            this.isExterior = isExterior;
+            this.segments = [];
+            if (typeof geomRing[0][0] !== "number" || typeof geomRing[0][1] !== "number") {
+              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+            }
+            const firstPoint = rounder.round(geomRing[0][0], geomRing[0][1]);
+            this.bbox = {
+              ll: {
+                x: firstPoint.x,
+                y: firstPoint.y
+              },
+              ur: {
+                x: firstPoint.x,
+                y: firstPoint.y
+              }
+            };
+            let prevPoint = firstPoint;
+            for (let i3 = 1, iMax = geomRing.length; i3 < iMax; i3++) {
+              if (typeof geomRing[i3][0] !== "number" || typeof geomRing[i3][1] !== "number") {
+                throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+              }
+              let point = rounder.round(geomRing[i3][0], geomRing[i3][1]);
+              if (point.x === prevPoint.x && point.y === prevPoint.y) continue;
+              this.segments.push(Segment2.fromRing(prevPoint, point, this));
+              if (point.x < this.bbox.ll.x) this.bbox.ll.x = point.x;
+              if (point.y < this.bbox.ll.y) this.bbox.ll.y = point.y;
+              if (point.x > this.bbox.ur.x) this.bbox.ur.x = point.x;
+              if (point.y > this.bbox.ur.y) this.bbox.ur.y = point.y;
+              prevPoint = point;
+            }
+            if (firstPoint.x !== prevPoint.x || firstPoint.y !== prevPoint.y) {
+              this.segments.push(Segment2.fromRing(prevPoint, firstPoint, this));
+            }
+          }
+          getSweepEvents() {
+            const sweepEvents = [];
+            for (let i3 = 0, iMax = this.segments.length; i3 < iMax; i3++) {
+              const segment = this.segments[i3];
+              sweepEvents.push(segment.leftSE);
+              sweepEvents.push(segment.rightSE);
+            }
+            return sweepEvents;
+          }
         }
-        default: {
-          this._context.moveTo(x2 + this._radius, y2);
-          this._context.arc(x2, y2, this._radius, 0, tau);
-          break;
+        class PolyIn2 {
+          constructor(geomPoly, multiPoly) {
+            if (!Array.isArray(geomPoly)) {
+              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+            }
+            this.exteriorRing = new RingIn2(geomPoly[0], this, true);
+            this.bbox = {
+              ll: {
+                x: this.exteriorRing.bbox.ll.x,
+                y: this.exteriorRing.bbox.ll.y
+              },
+              ur: {
+                x: this.exteriorRing.bbox.ur.x,
+                y: this.exteriorRing.bbox.ur.y
+              }
+            };
+            this.interiorRings = [];
+            for (let i3 = 1, iMax = geomPoly.length; i3 < iMax; i3++) {
+              const ring = new RingIn2(geomPoly[i3], this, false);
+              if (ring.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = ring.bbox.ll.x;
+              if (ring.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = ring.bbox.ll.y;
+              if (ring.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = ring.bbox.ur.x;
+              if (ring.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = ring.bbox.ur.y;
+              this.interiorRings.push(ring);
+            }
+            this.multiPoly = multiPoly;
+          }
+          getSweepEvents() {
+            const sweepEvents = this.exteriorRing.getSweepEvents();
+            for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
+              const ringSweepEvents = this.interiorRings[i3].getSweepEvents();
+              for (let j2 = 0, jMax = ringSweepEvents.length; j2 < jMax; j2++) {
+                sweepEvents.push(ringSweepEvents[j2]);
+              }
+            }
+            return sweepEvents;
+          }
         }
-      }
-    },
-    result: noop
-  };
-
-  // node_modules/d3-geo/src/path/measure.js
-  var lengthSum2 = new Adder();
-  var lengthRing;
-  var x003;
-  var y003;
-  var x04;
-  var y04;
-  var lengthStream2 = {
-    point: noop,
-    lineStart: function() {
-      lengthStream2.point = lengthPointFirst2;
-    },
-    lineEnd: function() {
-      if (lengthRing) lengthPoint2(x003, y003);
-      lengthStream2.point = noop;
-    },
-    polygonStart: function() {
-      lengthRing = true;
-    },
-    polygonEnd: function() {
-      lengthRing = null;
-    },
-    result: function() {
-      var length2 = +lengthSum2;
-      lengthSum2 = new Adder();
-      return length2;
-    }
-  };
-  function lengthPointFirst2(x2, y2) {
-    lengthStream2.point = lengthPoint2;
-    x003 = x04 = x2, y003 = y04 = y2;
-  }
-  function lengthPoint2(x2, y2) {
-    x04 -= x2, y04 -= y2;
-    lengthSum2.add(sqrt(x04 * x04 + y04 * y04));
-    x04 = x2, y04 = y2;
-  }
-  var measure_default = lengthStream2;
-
-  // node_modules/d3-geo/src/path/string.js
-  function PathString() {
-    this._string = [];
-  }
-  PathString.prototype = {
-    _radius: 4.5,
-    _circle: circle(4.5),
-    pointRadius: function(_2) {
-      if ((_2 = +_2) !== this._radius) this._radius = _2, this._circle = null;
-      return this;
-    },
-    polygonStart: function() {
-      this._line = 0;
-    },
-    polygonEnd: function() {
-      this._line = NaN;
-    },
-    lineStart: function() {
-      this._point = 0;
-    },
-    lineEnd: function() {
-      if (this._line === 0) this._string.push("Z");
-      this._point = NaN;
-    },
-    point: function(x2, y2) {
-      switch (this._point) {
-        case 0: {
-          this._string.push("M", x2, ",", y2);
-          this._point = 1;
-          break;
+        class MultiPolyIn2 {
+          constructor(geom, isSubject) {
+            if (!Array.isArray(geom)) {
+              throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+            }
+            try {
+              if (typeof geom[0][0][0] === "number") geom = [geom];
+            } catch (ex) {
+            }
+            this.polys = [];
+            this.bbox = {
+              ll: {
+                x: Number.POSITIVE_INFINITY,
+                y: Number.POSITIVE_INFINITY
+              },
+              ur: {
+                x: Number.NEGATIVE_INFINITY,
+                y: Number.NEGATIVE_INFINITY
+              }
+            };
+            for (let i3 = 0, iMax = geom.length; i3 < iMax; i3++) {
+              const poly = new PolyIn2(geom[i3], this);
+              if (poly.bbox.ll.x < this.bbox.ll.x) this.bbox.ll.x = poly.bbox.ll.x;
+              if (poly.bbox.ll.y < this.bbox.ll.y) this.bbox.ll.y = poly.bbox.ll.y;
+              if (poly.bbox.ur.x > this.bbox.ur.x) this.bbox.ur.x = poly.bbox.ur.x;
+              if (poly.bbox.ur.y > this.bbox.ur.y) this.bbox.ur.y = poly.bbox.ur.y;
+              this.polys.push(poly);
+            }
+            this.isSubject = isSubject;
+          }
+          getSweepEvents() {
+            const sweepEvents = [];
+            for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
+              const polySweepEvents = this.polys[i3].getSweepEvents();
+              for (let j2 = 0, jMax = polySweepEvents.length; j2 < jMax; j2++) {
+                sweepEvents.push(polySweepEvents[j2]);
+              }
+            }
+            return sweepEvents;
+          }
         }
-        case 1: {
-          this._string.push("L", x2, ",", y2);
-          break;
+        class RingOut2 {
+          /* Given the segments from the sweep line pass, compute & return a series
+           * of closed rings from all the segments marked to be part of the result */
+          static factory(allSegments) {
+            const ringsOut = [];
+            for (let i3 = 0, iMax = allSegments.length; i3 < iMax; i3++) {
+              const segment = allSegments[i3];
+              if (!segment.isInResult() || segment.ringOut) continue;
+              let prevEvent = null;
+              let event = segment.leftSE;
+              let nextEvent = segment.rightSE;
+              const events = [event];
+              const startingPoint = event.point;
+              const intersectionLEs = [];
+              while (true) {
+                prevEvent = event;
+                event = nextEvent;
+                events.push(event);
+                if (event.point === startingPoint) break;
+                while (true) {
+                  const availableLEs = event.getAvailableLinkedEvents();
+                  if (availableLEs.length === 0) {
+                    const firstPt = events[0].point;
+                    const lastPt = events[events.length - 1].point;
+                    throw new Error("Unable to complete output ring starting at [".concat(firstPt.x, ",") + " ".concat(firstPt.y, "]. Last matching segment found ends at") + " [".concat(lastPt.x, ", ").concat(lastPt.y, "]."));
+                  }
+                  if (availableLEs.length === 1) {
+                    nextEvent = availableLEs[0].otherSE;
+                    break;
+                  }
+                  let indexLE = null;
+                  for (let j2 = 0, jMax = intersectionLEs.length; j2 < jMax; j2++) {
+                    if (intersectionLEs[j2].point === event.point) {
+                      indexLE = j2;
+                      break;
+                    }
+                  }
+                  if (indexLE !== null) {
+                    const intersectionLE = intersectionLEs.splice(indexLE)[0];
+                    const ringEvents = events.splice(intersectionLE.index);
+                    ringEvents.unshift(ringEvents[0].otherSE);
+                    ringsOut.push(new RingOut2(ringEvents.reverse()));
+                    continue;
+                  }
+                  intersectionLEs.push({
+                    index: events.length,
+                    point: event.point
+                  });
+                  const comparator = event.getLeftmostComparator(prevEvent);
+                  nextEvent = availableLEs.sort(comparator)[0].otherSE;
+                  break;
+                }
+              }
+              ringsOut.push(new RingOut2(events));
+            }
+            return ringsOut;
+          }
+          constructor(events) {
+            this.events = events;
+            for (let i3 = 0, iMax = events.length; i3 < iMax; i3++) {
+              events[i3].segment.ringOut = this;
+            }
+            this.poly = null;
+          }
+          getGeom() {
+            let prevPt = this.events[0].point;
+            const points = [prevPt];
+            for (let i3 = 1, iMax = this.events.length - 1; i3 < iMax; i3++) {
+              const pt3 = this.events[i3].point;
+              const nextPt2 = this.events[i3 + 1].point;
+              if (compareVectorAngles(pt3, prevPt, nextPt2) === 0) continue;
+              points.push(pt3);
+              prevPt = pt3;
+            }
+            if (points.length === 1) return null;
+            const pt2 = points[0];
+            const nextPt = points[1];
+            if (compareVectorAngles(pt2, prevPt, nextPt) === 0) points.shift();
+            points.push(points[0]);
+            const step = this.isExteriorRing() ? 1 : -1;
+            const iStart = this.isExteriorRing() ? 0 : points.length - 1;
+            const iEnd = this.isExteriorRing() ? points.length : -1;
+            const orderedPoints = [];
+            for (let i3 = iStart; i3 != iEnd; i3 += step) orderedPoints.push([points[i3].x, points[i3].y]);
+            return orderedPoints;
+          }
+          isExteriorRing() {
+            if (this._isExteriorRing === void 0) {
+              const enclosing = this.enclosingRing();
+              this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;
+            }
+            return this._isExteriorRing;
+          }
+          enclosingRing() {
+            if (this._enclosingRing === void 0) {
+              this._enclosingRing = this._calcEnclosingRing();
+            }
+            return this._enclosingRing;
+          }
+          /* Returns the ring that encloses this one, if any */
+          _calcEnclosingRing() {
+            let leftMostEvt = this.events[0];
+            for (let i3 = 1, iMax = this.events.length; i3 < iMax; i3++) {
+              const evt = this.events[i3];
+              if (SweepEvent2.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;
+            }
+            let prevSeg = leftMostEvt.segment.prevInResult();
+            let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
+            while (true) {
+              if (!prevSeg) return null;
+              if (!prevPrevSeg) return prevSeg.ringOut;
+              if (prevPrevSeg.ringOut !== prevSeg.ringOut) {
+                if (prevPrevSeg.ringOut.enclosingRing() !== prevSeg.ringOut) {
+                  return prevSeg.ringOut;
+                } else return prevSeg.ringOut.enclosingRing();
+              }
+              prevSeg = prevPrevSeg.prevInResult();
+              prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
+            }
+          }
         }
-        default: {
-          if (this._circle == null) this._circle = circle(this._radius);
-          this._string.push("M", x2, ",", y2, this._circle);
-          break;
+        class PolyOut2 {
+          constructor(exteriorRing) {
+            this.exteriorRing = exteriorRing;
+            exteriorRing.poly = this;
+            this.interiorRings = [];
+          }
+          addInterior(ring) {
+            this.interiorRings.push(ring);
+            ring.poly = this;
+          }
+          getGeom() {
+            const geom = [this.exteriorRing.getGeom()];
+            if (geom[0] === null) return null;
+            for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
+              const ringGeom = this.interiorRings[i3].getGeom();
+              if (ringGeom === null) continue;
+              geom.push(ringGeom);
+            }
+            return geom;
+          }
         }
-      }
-    },
-    result: function() {
-      if (this._string.length) {
-        var result = this._string.join("");
-        this._string = [];
-        return result;
-      } else {
-        return null;
-      }
-    }
-  };
-  function circle(radius) {
-    return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
-  }
-
-  // node_modules/d3-geo/src/path/index.js
-  function path_default(projection2, context) {
-    var pointRadius = 4.5, projectionStream, contextStream;
-    function path(object) {
-      if (object) {
-        if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
-        stream_default(object, projectionStream(contextStream));
-      }
-      return contextStream.result();
-    }
-    path.area = function(object) {
-      stream_default(object, projectionStream(area_default2));
-      return area_default2.result();
-    };
-    path.measure = function(object) {
-      stream_default(object, projectionStream(measure_default));
-      return measure_default.result();
-    };
-    path.bounds = function(object) {
-      stream_default(object, projectionStream(bounds_default2));
-      return bounds_default2.result();
-    };
-    path.centroid = function(object) {
-      stream_default(object, projectionStream(centroid_default));
-      return centroid_default.result();
-    };
-    path.projection = function(_2) {
-      return arguments.length ? (projectionStream = _2 == null ? (projection2 = null, identity_default) : (projection2 = _2).stream, path) : projection2;
-    };
-    path.context = function(_2) {
-      if (!arguments.length) return context;
-      contextStream = _2 == null ? (context = null, new PathString()) : new PathContext(context = _2);
-      if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
-      return path;
-    };
-    path.pointRadius = function(_2) {
-      if (!arguments.length) return pointRadius;
-      pointRadius = typeof _2 === "function" ? _2 : (contextStream.pointRadius(+_2), +_2);
-      return path;
-    };
-    return path.projection(projection2).context(context);
-  }
-
-  // node_modules/d3-geo/src/transform.js
-  function transform_default(methods2) {
-    return {
-      stream: transformer(methods2)
-    };
-  }
-  function transformer(methods2) {
-    return function(stream) {
-      var s2 = new TransformStream();
-      for (var key in methods2) s2[key] = methods2[key];
-      s2.stream = stream;
-      return s2;
-    };
-  }
-  function TransformStream() {
-  }
-  TransformStream.prototype = {
-    constructor: TransformStream,
-    point: function(x2, y2) {
-      this.stream.point(x2, y2);
-    },
-    sphere: function() {
-      this.stream.sphere();
-    },
-    lineStart: function() {
-      this.stream.lineStart();
-    },
-    lineEnd: function() {
-      this.stream.lineEnd();
-    },
-    polygonStart: function() {
-      this.stream.polygonStart();
-    },
-    polygonEnd: function() {
-      this.stream.polygonEnd();
-    }
-  };
-
-  // node_modules/d3-geo/src/projection/fit.js
-  function fit(projection2, fitBounds, object) {
-    var clip = projection2.clipExtent && projection2.clipExtent();
-    projection2.scale(150).translate([0, 0]);
-    if (clip != null) projection2.clipExtent(null);
-    stream_default(object, projection2.stream(bounds_default2));
-    fitBounds(bounds_default2.result());
-    if (clip != null) projection2.clipExtent(clip);
-    return projection2;
-  }
-  function fitExtent(projection2, extent, object) {
-    return fit(projection2, function(b2) {
-      var w2 = extent[1][0] - extent[0][0], h2 = extent[1][1] - extent[0][1], k2 = Math.min(w2 / (b2[1][0] - b2[0][0]), h2 / (b2[1][1] - b2[0][1])), x2 = +extent[0][0] + (w2 - k2 * (b2[1][0] + b2[0][0])) / 2, y2 = +extent[0][1] + (h2 - k2 * (b2[1][1] + b2[0][1])) / 2;
-      projection2.scale(150 * k2).translate([x2, y2]);
-    }, object);
-  }
-  function fitSize(projection2, size, object) {
-    return fitExtent(projection2, [[0, 0], size], object);
-  }
-  function fitWidth(projection2, width, object) {
-    return fit(projection2, function(b2) {
-      var w2 = +width, k2 = w2 / (b2[1][0] - b2[0][0]), x2 = (w2 - k2 * (b2[1][0] + b2[0][0])) / 2, y2 = -k2 * b2[0][1];
-      projection2.scale(150 * k2).translate([x2, y2]);
-    }, object);
-  }
-  function fitHeight(projection2, height, object) {
-    return fit(projection2, function(b2) {
-      var h2 = +height, k2 = h2 / (b2[1][1] - b2[0][1]), x2 = -k2 * b2[0][0], y2 = (h2 - k2 * (b2[1][1] + b2[0][1])) / 2;
-      projection2.scale(150 * k2).translate([x2, y2]);
-    }, object);
-  }
-
-  // node_modules/d3-geo/src/projection/resample.js
-  var maxDepth = 16;
-  var cosMinDistance = cos(30 * radians);
-  function resample_default(project, delta2) {
-    return +delta2 ? resample(project, delta2) : resampleNone(project);
-  }
-  function resampleNone(project) {
-    return transformer({
-      point: function(x2, y2) {
-        x2 = project(x2, y2);
-        this.stream.point(x2[0], x2[1]);
-      }
-    });
-  }
-  function resample(project, delta2) {
-    function resampleLineTo(x05, y05, lambda04, a0, b0, c0, x12, y12, lambda12, a1, b1, c1, depth, stream) {
-      var dx = x12 - x05, dy = y12 - y05, d2 = dx * dx + dy * dy;
-      if (d2 > 4 * delta2 && depth--) {
-        var a2 = a0 + a1, b2 = b0 + b1, c2 = c0 + c1, m2 = sqrt(a2 * a2 + b2 * b2 + c2 * c2), phi2 = asin(c2 /= m2), lambda22 = abs(abs(c2) - 1) < epsilon || abs(lambda04 - lambda12) < epsilon ? (lambda04 + lambda12) / 2 : atan2(b2, a2), p2 = project(lambda22, phi2), x2 = p2[0], y2 = p2[1], dx2 = x2 - x05, dy2 = y2 - y05, dz = dy * dx2 - dx * dy2;
-        if (dz * dz / d2 > delta2 || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
-          resampleLineTo(x05, y05, lambda04, a0, b0, c0, x2, y2, lambda22, a2 /= m2, b2 /= m2, c2, depth, stream);
-          stream.point(x2, y2);
-          resampleLineTo(x2, y2, lambda22, a2, b2, c2, x12, y12, lambda12, a1, b1, c1, depth, stream);
+        class MultiPolyOut2 {
+          constructor(rings) {
+            this.rings = rings;
+            this.polys = this._composePolys(rings);
+          }
+          getGeom() {
+            const geom = [];
+            for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
+              const polyGeom = this.polys[i3].getGeom();
+              if (polyGeom === null) continue;
+              geom.push(polyGeom);
+            }
+            return geom;
+          }
+          _composePolys(rings) {
+            const polys = [];
+            for (let i3 = 0, iMax = rings.length; i3 < iMax; i3++) {
+              const ring = rings[i3];
+              if (ring.poly) continue;
+              if (ring.isExteriorRing()) polys.push(new PolyOut2(ring));
+              else {
+                const enclosingRing = ring.enclosingRing();
+                if (!enclosingRing.poly) polys.push(new PolyOut2(enclosingRing));
+                enclosingRing.poly.addInterior(ring);
+              }
+            }
+            return polys;
+          }
         }
-      }
-    }
-    return function(stream) {
-      var lambda003, x004, y004, a00, b00, c00, lambda04, x05, y05, a0, b0, c0;
-      var resampleStream = {
-        point,
-        lineStart,
-        lineEnd,
-        polygonStart: function() {
-          stream.polygonStart();
-          resampleStream.lineStart = ringStart;
-        },
-        polygonEnd: function() {
-          stream.polygonEnd();
-          resampleStream.lineStart = lineStart;
+        class SweepLine2 {
+          constructor(queue) {
+            let comparator = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Segment2.compare;
+            this.queue = queue;
+            this.tree = new Tree(comparator);
+            this.segments = [];
+          }
+          process(event) {
+            const segment = event.segment;
+            const newEvents = [];
+            if (event.consumedBy) {
+              if (event.isLeft) this.queue.remove(event.otherSE);
+              else this.tree.remove(segment);
+              return newEvents;
+            }
+            const node = event.isLeft ? this.tree.add(segment) : this.tree.find(segment);
+            if (!node) throw new Error("Unable to find segment #".concat(segment.id, " ") + "[".concat(segment.leftSE.point.x, ", ").concat(segment.leftSE.point.y, "] -> ") + "[".concat(segment.rightSE.point.x, ", ").concat(segment.rightSE.point.y, "] ") + "in SweepLine tree.");
+            let prevNode = node;
+            let nextNode = node;
+            let prevSeg = void 0;
+            let nextSeg = void 0;
+            while (prevSeg === void 0) {
+              prevNode = this.tree.prev(prevNode);
+              if (prevNode === null) prevSeg = null;
+              else if (prevNode.key.consumedBy === void 0) prevSeg = prevNode.key;
+            }
+            while (nextSeg === void 0) {
+              nextNode = this.tree.next(nextNode);
+              if (nextNode === null) nextSeg = null;
+              else if (nextNode.key.consumedBy === void 0) nextSeg = nextNode.key;
+            }
+            if (event.isLeft) {
+              let prevMySplitter = null;
+              if (prevSeg) {
+                const prevInter = prevSeg.getIntersection(segment);
+                if (prevInter !== null) {
+                  if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;
+                  if (!prevSeg.isAnEndpoint(prevInter)) {
+                    const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);
+                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                      newEvents.push(newEventsFromSplit[i3]);
+                    }
+                  }
+                }
+              }
+              let nextMySplitter = null;
+              if (nextSeg) {
+                const nextInter = nextSeg.getIntersection(segment);
+                if (nextInter !== null) {
+                  if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;
+                  if (!nextSeg.isAnEndpoint(nextInter)) {
+                    const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);
+                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                      newEvents.push(newEventsFromSplit[i3]);
+                    }
+                  }
+                }
+              }
+              if (prevMySplitter !== null || nextMySplitter !== null) {
+                let mySplitter = null;
+                if (prevMySplitter === null) mySplitter = nextMySplitter;
+                else if (nextMySplitter === null) mySplitter = prevMySplitter;
+                else {
+                  const cmpSplitters = SweepEvent2.comparePoints(prevMySplitter, nextMySplitter);
+                  mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;
+                }
+                this.queue.remove(segment.rightSE);
+                newEvents.push(segment.rightSE);
+                const newEventsFromSplit = segment.split(mySplitter);
+                for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                  newEvents.push(newEventsFromSplit[i3]);
+                }
+              }
+              if (newEvents.length > 0) {
+                this.tree.remove(segment);
+                newEvents.push(event);
+              } else {
+                this.segments.push(segment);
+                segment.prev = prevSeg;
+              }
+            } else {
+              if (prevSeg && nextSeg) {
+                const inter = prevSeg.getIntersection(nextSeg);
+                if (inter !== null) {
+                  if (!prevSeg.isAnEndpoint(inter)) {
+                    const newEventsFromSplit = this._splitSafely(prevSeg, inter);
+                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                      newEvents.push(newEventsFromSplit[i3]);
+                    }
+                  }
+                  if (!nextSeg.isAnEndpoint(inter)) {
+                    const newEventsFromSplit = this._splitSafely(nextSeg, inter);
+                    for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                      newEvents.push(newEventsFromSplit[i3]);
+                    }
+                  }
+                }
+              }
+              this.tree.remove(segment);
+            }
+            return newEvents;
+          }
+          /* Safely split a segment that is currently in the datastructures
+           * IE - a segment other than the one that is currently being processed. */
+          _splitSafely(seg, pt2) {
+            this.tree.remove(seg);
+            const rightSE = seg.rightSE;
+            this.queue.remove(rightSE);
+            const newEvents = seg.split(pt2);
+            newEvents.push(rightSE);
+            if (seg.consumedBy === void 0) this.tree.add(seg);
+            return newEvents;
+          }
         }
-      };
-      function point(x2, y2) {
-        x2 = project(x2, y2);
-        stream.point(x2[0], x2[1]);
-      }
-      function lineStart() {
-        x05 = NaN;
-        resampleStream.point = linePoint2;
-        stream.lineStart();
-      }
-      function linePoint2(lambda, phi) {
-        var c2 = cartesian([lambda, phi]), p2 = project(lambda, phi);
-        resampleLineTo(x05, y05, lambda04, a0, b0, c0, x05 = p2[0], y05 = p2[1], lambda04 = lambda, a0 = c2[0], b0 = c2[1], c0 = c2[2], maxDepth, stream);
-        stream.point(x05, y05);
-      }
-      function lineEnd() {
-        resampleStream.point = point;
-        stream.lineEnd();
-      }
-      function ringStart() {
-        lineStart();
-        resampleStream.point = ringPoint;
-        resampleStream.lineEnd = ringEnd;
-      }
-      function ringPoint(lambda, phi) {
-        linePoint2(lambda003 = lambda, phi), x004 = x05, y004 = y05, a00 = a0, b00 = b0, c00 = c0;
-        resampleStream.point = linePoint2;
-      }
-      function ringEnd() {
-        resampleLineTo(x05, y05, lambda04, a0, b0, c0, x004, y004, lambda003, a00, b00, c00, maxDepth, stream);
-        resampleStream.lineEnd = lineEnd;
-        lineEnd();
-      }
-      return resampleStream;
-    };
-  }
-
-  // node_modules/d3-geo/src/projection/index.js
-  var transformRadians = transformer({
-    point: function(x2, y2) {
-      this.stream.point(x2 * radians, y2 * radians);
-    }
-  });
-  function transformRotate(rotate) {
-    return transformer({
-      point: function(x2, y2) {
-        var r2 = rotate(x2, y2);
-        return this.stream.point(r2[0], r2[1]);
-      }
-    });
-  }
-  function scaleTranslate(k2, dx, dy, sx, sy) {
-    function transform2(x2, y2) {
-      x2 *= sx;
-      y2 *= sy;
-      return [dx + k2 * x2, dy - k2 * y2];
-    }
-    transform2.invert = function(x2, y2) {
-      return [(x2 - dx) / k2 * sx, (dy - y2) / k2 * sy];
-    };
-    return transform2;
-  }
-  function scaleTranslateRotate(k2, dx, dy, sx, sy, alpha) {
-    if (!alpha) return scaleTranslate(k2, dx, dy, sx, sy);
-    var cosAlpha = cos(alpha), sinAlpha = sin(alpha), a2 = cosAlpha * k2, b2 = sinAlpha * k2, ai = cosAlpha / k2, bi = sinAlpha / k2, ci = (sinAlpha * dy - cosAlpha * dx) / k2, fi = (sinAlpha * dx + cosAlpha * dy) / k2;
-    function transform2(x2, y2) {
-      x2 *= sx;
-      y2 *= sy;
-      return [a2 * x2 - b2 * y2 + dx, dy - b2 * x2 - a2 * y2];
-    }
-    transform2.invert = function(x2, y2) {
-      return [sx * (ai * x2 - bi * y2 + ci), sy * (fi - bi * x2 - ai * y2)];
-    };
-    return transform2;
-  }
-  function projection(project) {
-    return projectionMutator(function() {
-      return project;
-    })();
-  }
-  function projectionMutator(projectAt) {
-    var project, k2 = 150, x2 = 480, y2 = 250, lambda = 0, phi = 0, deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, alpha = 0, sx = 1, sy = 1, theta = null, preclip = antimeridian_default, x05 = null, y05, x12, y12, postclip = identity_default, delta2 = 0.5, projectResample, projectTransform, projectRotateTransform, cache, cacheStream;
-    function projection2(point) {
-      return projectRotateTransform(point[0] * radians, point[1] * radians);
-    }
-    function invert(point) {
-      point = projectRotateTransform.invert(point[0], point[1]);
-      return point && [point[0] * degrees, point[1] * degrees];
-    }
-    projection2.stream = function(stream) {
-      return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
-    };
-    projection2.preclip = function(_2) {
-      return arguments.length ? (preclip = _2, theta = void 0, reset()) : preclip;
-    };
-    projection2.postclip = function(_2) {
-      return arguments.length ? (postclip = _2, x05 = y05 = x12 = y12 = null, reset()) : postclip;
-    };
-    projection2.clipAngle = function(_2) {
-      return arguments.length ? (preclip = +_2 ? circle_default(theta = _2 * radians) : (theta = null, antimeridian_default), reset()) : theta * degrees;
-    };
-    projection2.clipExtent = function(_2) {
-      return arguments.length ? (postclip = _2 == null ? (x05 = y05 = x12 = y12 = null, identity_default) : clipRectangle(x05 = +_2[0][0], y05 = +_2[0][1], x12 = +_2[1][0], y12 = +_2[1][1]), reset()) : x05 == null ? null : [[x05, y05], [x12, y12]];
-    };
-    projection2.scale = function(_2) {
-      return arguments.length ? (k2 = +_2, recenter()) : k2;
-    };
-    projection2.translate = function(_2) {
-      return arguments.length ? (x2 = +_2[0], y2 = +_2[1], recenter()) : [x2, y2];
-    };
-    projection2.center = function(_2) {
-      return arguments.length ? (lambda = _2[0] % 360 * radians, phi = _2[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];
-    };
-    projection2.rotate = function(_2) {
-      return arguments.length ? (deltaLambda = _2[0] % 360 * radians, deltaPhi = _2[1] % 360 * radians, deltaGamma = _2.length > 2 ? _2[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];
-    };
-    projection2.angle = function(_2) {
-      return arguments.length ? (alpha = _2 % 360 * radians, recenter()) : alpha * degrees;
-    };
-    projection2.reflectX = function(_2) {
-      return arguments.length ? (sx = _2 ? -1 : 1, recenter()) : sx < 0;
-    };
-    projection2.reflectY = function(_2) {
-      return arguments.length ? (sy = _2 ? -1 : 1, recenter()) : sy < 0;
-    };
-    projection2.precision = function(_2) {
-      return arguments.length ? (projectResample = resample_default(projectTransform, delta2 = _2 * _2), reset()) : sqrt(delta2);
-    };
-    projection2.fitExtent = function(extent, object) {
-      return fitExtent(projection2, extent, object);
-    };
-    projection2.fitSize = function(size, object) {
-      return fitSize(projection2, size, object);
-    };
-    projection2.fitWidth = function(width, object) {
-      return fitWidth(projection2, width, object);
-    };
-    projection2.fitHeight = function(height, object) {
-      return fitHeight(projection2, height, object);
-    };
-    function recenter() {
-      var center = scaleTranslateRotate(k2, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)), transform2 = scaleTranslateRotate(k2, x2 - center[0], y2 - center[1], sx, sy, alpha);
-      rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
-      projectTransform = compose_default(project, transform2);
-      projectRotateTransform = compose_default(rotate, projectTransform);
-      projectResample = resample_default(projectTransform, delta2);
-      return reset();
-    }
-    function reset() {
-      cache = cacheStream = null;
-      return projection2;
-    }
-    return function() {
-      project = projectAt.apply(this, arguments);
-      projection2.invert = project.invert && invert;
-      return recenter();
-    };
-  }
-
-  // node_modules/d3-geo/src/projection/mercator.js
-  function mercatorRaw(lambda, phi) {
-    return [lambda, log(tan((halfPi + phi) / 2))];
-  }
-  mercatorRaw.invert = function(x2, y2) {
-    return [x2, 2 * atan(exp(y2)) - halfPi];
-  };
-  function mercator_default() {
-    return mercatorProjection(mercatorRaw).scale(961 / tau);
-  }
-  function mercatorProjection(project) {
-    var m2 = projection(project), center = m2.center, scale = m2.scale, translate = m2.translate, clipExtent = m2.clipExtent, x05 = null, y05, x12, y12;
-    m2.scale = function(_2) {
-      return arguments.length ? (scale(_2), reclip()) : scale();
-    };
-    m2.translate = function(_2) {
-      return arguments.length ? (translate(_2), reclip()) : translate();
-    };
-    m2.center = function(_2) {
-      return arguments.length ? (center(_2), reclip()) : center();
-    };
-    m2.clipExtent = function(_2) {
-      return arguments.length ? (_2 == null ? x05 = y05 = x12 = y12 = null : (x05 = +_2[0][0], y05 = +_2[0][1], x12 = +_2[1][0], y12 = +_2[1][1]), reclip()) : x05 == null ? null : [[x05, y05], [x12, y12]];
-    };
-    function reclip() {
-      var k2 = pi * scale(), t2 = m2(rotation_default(m2.rotate()).invert([0, 0]));
-      return clipExtent(x05 == null ? [[t2[0] - k2, t2[1] - k2], [t2[0] + k2, t2[1] + k2]] : project === mercatorRaw ? [[Math.max(t2[0] - k2, x05), y05], [Math.min(t2[0] + k2, x12), y12]] : [[x05, Math.max(t2[1] - k2, y05)], [x12, Math.min(t2[1] + k2, y12)]]);
-    }
-    return reclip();
-  }
-
-  // node_modules/d3-geo/src/projection/identity.js
-  function identity_default2() {
-    var k2 = 1, tx = 0, ty = 0, sx = 1, sy = 1, alpha = 0, ca, sa, x05 = null, y05, x12, y12, kx = 1, ky = 1, transform2 = transformer({
-      point: function(x2, y2) {
-        var p2 = projection2([x2, y2]);
-        this.stream.point(p2[0], p2[1]);
-      }
-    }), postclip = identity_default, cache, cacheStream;
-    function reset() {
-      kx = k2 * sx;
-      ky = k2 * sy;
-      cache = cacheStream = null;
-      return projection2;
-    }
-    function projection2(p2) {
-      var x2 = p2[0] * kx, y2 = p2[1] * ky;
-      if (alpha) {
-        var t2 = y2 * ca - x2 * sa;
-        x2 = x2 * ca + y2 * sa;
-        y2 = t2;
-      }
-      return [x2 + tx, y2 + ty];
-    }
-    projection2.invert = function(p2) {
-      var x2 = p2[0] - tx, y2 = p2[1] - ty;
-      if (alpha) {
-        var t2 = y2 * ca + x2 * sa;
-        x2 = x2 * ca - y2 * sa;
-        y2 = t2;
-      }
-      return [x2 / kx, y2 / ky];
-    };
-    projection2.stream = function(stream) {
-      return cache && cacheStream === stream ? cache : cache = transform2(postclip(cacheStream = stream));
-    };
-    projection2.postclip = function(_2) {
-      return arguments.length ? (postclip = _2, x05 = y05 = x12 = y12 = null, reset()) : postclip;
-    };
-    projection2.clipExtent = function(_2) {
-      return arguments.length ? (postclip = _2 == null ? (x05 = y05 = x12 = y12 = null, identity_default) : clipRectangle(x05 = +_2[0][0], y05 = +_2[0][1], x12 = +_2[1][0], y12 = +_2[1][1]), reset()) : x05 == null ? null : [[x05, y05], [x12, y12]];
-    };
-    projection2.scale = function(_2) {
-      return arguments.length ? (k2 = +_2, reset()) : k2;
-    };
-    projection2.translate = function(_2) {
-      return arguments.length ? (tx = +_2[0], ty = +_2[1], reset()) : [tx, ty];
-    };
-    projection2.angle = function(_2) {
-      return arguments.length ? (alpha = _2 % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;
-    };
-    projection2.reflectX = function(_2) {
-      return arguments.length ? (sx = _2 ? -1 : 1, reset()) : sx < 0;
-    };
-    projection2.reflectY = function(_2) {
-      return arguments.length ? (sy = _2 ? -1 : 1, reset()) : sy < 0;
-    };
-    projection2.fitExtent = function(extent, object) {
-      return fitExtent(projection2, extent, object);
-    };
-    projection2.fitSize = function(size, object) {
-      return fitSize(projection2, size, object);
-    };
-    projection2.fitWidth = function(width, object) {
-      return fitWidth(projection2, width, object);
-    };
-    projection2.fitHeight = function(height, object) {
-      return fitHeight(projection2, height, object);
-    };
-    return projection2;
-  }
-
-  // modules/geo/geo.js
-  var TAU = 2 * Math.PI;
-  var EQUATORIAL_RADIUS = 6378137;
-  var POLAR_RADIUS = 63567523e-1;
-  function geoLatToMeters(dLat) {
-    return dLat * (TAU * POLAR_RADIUS / 360);
-  }
-  function geoLonToMeters(dLon, atLat) {
-    return Math.abs(atLat) >= 90 ? 0 : dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
-  }
-  function geoMetersToLat(m2) {
-    return m2 / (TAU * POLAR_RADIUS / 360);
-  }
-  function geoMetersToLon(m2, atLat) {
-    return Math.abs(atLat) >= 90 ? 0 : m2 / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
-  }
-  function geoMetersToOffset(meters, tileSize) {
-    tileSize = tileSize || 256;
-    return [
-      meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
-      -meters[1] * tileSize / (TAU * POLAR_RADIUS)
-    ];
+        const POLYGON_CLIPPING_MAX_QUEUE_SIZE = typeof process !== "undefined" && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1e6;
+        const POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS = typeof process !== "undefined" && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1e6;
+        class Operation2 {
+          run(type2, geom, moreGeoms) {
+            operation2.type = type2;
+            rounder.reset();
+            const multipolys = [new MultiPolyIn2(geom, true)];
+            for (let i3 = 0, iMax = moreGeoms.length; i3 < iMax; i3++) {
+              multipolys.push(new MultiPolyIn2(moreGeoms[i3], false));
+            }
+            operation2.numMultiPolys = multipolys.length;
+            if (operation2.type === "difference") {
+              const subject = multipolys[0];
+              let i3 = 1;
+              while (i3 < multipolys.length) {
+                if (getBboxOverlap2(multipolys[i3].bbox, subject.bbox) !== null) i3++;
+                else multipolys.splice(i3, 1);
+              }
+            }
+            if (operation2.type === "intersection") {
+              for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
+                const mpA = multipolys[i3];
+                for (let j2 = i3 + 1, jMax = multipolys.length; j2 < jMax; j2++) {
+                  if (getBboxOverlap2(mpA.bbox, multipolys[j2].bbox) === null) return [];
+                }
+              }
+            }
+            const queue = new Tree(SweepEvent2.compare);
+            for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
+              const sweepEvents = multipolys[i3].getSweepEvents();
+              for (let j2 = 0, jMax = sweepEvents.length; j2 < jMax; j2++) {
+                queue.insert(sweepEvents[j2]);
+                if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {
+                  throw new Error("Infinite loop when putting segment endpoints in a priority queue (queue size too big).");
+                }
+              }
+            }
+            const sweepLine = new SweepLine2(queue);
+            let prevQueueSize = queue.size;
+            let node = queue.pop();
+            while (node) {
+              const evt = node.key;
+              if (queue.size === prevQueueSize) {
+                const seg = evt.segment;
+                throw new Error("Unable to pop() ".concat(evt.isLeft ? "left" : "right", " SweepEvent ") + "[".concat(evt.point.x, ", ").concat(evt.point.y, "] from segment #").concat(seg.id, " ") + "[".concat(seg.leftSE.point.x, ", ").concat(seg.leftSE.point.y, "] -> ") + "[".concat(seg.rightSE.point.x, ", ").concat(seg.rightSE.point.y, "] from queue."));
+              }
+              if (queue.size > POLYGON_CLIPPING_MAX_QUEUE_SIZE) {
+                throw new Error("Infinite loop when passing sweep line over endpoints (queue size too big).");
+              }
+              if (sweepLine.segments.length > POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS) {
+                throw new Error("Infinite loop when passing sweep line over endpoints (too many sweep line segments).");
+              }
+              const newEvents = sweepLine.process(evt);
+              for (let i3 = 0, iMax = newEvents.length; i3 < iMax; i3++) {
+                const evt2 = newEvents[i3];
+                if (evt2.consumedBy === void 0) queue.insert(evt2);
+              }
+              prevQueueSize = queue.size;
+              node = queue.pop();
+            }
+            rounder.reset();
+            const ringsOut = RingOut2.factory(sweepLine.segments);
+            const result = new MultiPolyOut2(ringsOut);
+            return result.getGeom();
+          }
+        }
+        const operation2 = new Operation2();
+        const union2 = function(geom) {
+          for (var _len = arguments.length, moreGeoms = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+            moreGeoms[_key - 1] = arguments[_key];
+          }
+          return operation2.run("union", geom, moreGeoms);
+        };
+        const intersection2 = function(geom) {
+          for (var _len2 = arguments.length, moreGeoms = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+            moreGeoms[_key2 - 1] = arguments[_key2];
+          }
+          return operation2.run("intersection", geom, moreGeoms);
+        };
+        const xor = function(geom) {
+          for (var _len3 = arguments.length, moreGeoms = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
+            moreGeoms[_key3 - 1] = arguments[_key3];
+          }
+          return operation2.run("xor", geom, moreGeoms);
+        };
+        const difference2 = function(subjectGeom) {
+          for (var _len4 = arguments.length, clippingGeoms = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
+            clippingGeoms[_key4 - 1] = arguments[_key4];
+          }
+          return operation2.run("difference", subjectGeom, clippingGeoms);
+        };
+        var index = {
+          union: union2,
+          intersection: intersection2,
+          xor,
+          difference: difference2
+        };
+        return index;
+      });
+    }
+  });
+
+  // node_modules/whatwg-fetch/fetch.js
+  var g = typeof globalThis !== "undefined" && globalThis || typeof self !== "undefined" && self || // eslint-disable-next-line no-undef
+  typeof global !== "undefined" && global || {};
+  var support = {
+    searchParams: "URLSearchParams" in g,
+    iterable: "Symbol" in g && "iterator" in Symbol,
+    blob: "FileReader" in g && "Blob" in g && function() {
+      try {
+        new Blob();
+        return true;
+      } catch (e3) {
+        return false;
+      }
+    }(),
+    formData: "FormData" in g,
+    arrayBuffer: "ArrayBuffer" in g
+  };
+  function isDataView(obj) {
+    return obj && DataView.prototype.isPrototypeOf(obj);
   }
-  function geoOffsetToMeters(offset, tileSize) {
-    tileSize = tileSize || 256;
-    return [
-      offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
-      -offset[1] * TAU * POLAR_RADIUS / tileSize
+  if (support.arrayBuffer) {
+    viewClasses = [
+      "[object Int8Array]",
+      "[object Uint8Array]",
+      "[object Uint8ClampedArray]",
+      "[object Int16Array]",
+      "[object Uint16Array]",
+      "[object Int32Array]",
+      "[object Uint32Array]",
+      "[object Float32Array]",
+      "[object Float64Array]"
     ];
+    isArrayBufferView = ArrayBuffer.isView || function(obj) {
+      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
+    };
   }
-  function geoSphericalDistance(a2, b2) {
-    var x2 = geoLonToMeters(a2[0] - b2[0], (a2[1] + b2[1]) / 2);
-    var y2 = geoLatToMeters(a2[1] - b2[1]);
-    return Math.sqrt(x2 * x2 + y2 * y2);
-  }
-  function geoScaleToZoom(k2, tileSize) {
-    tileSize = tileSize || 256;
-    var log2ts = Math.log(tileSize) * Math.LOG2E;
-    return Math.log(k2 * TAU) / Math.LN2 - log2ts;
-  }
-  function geoZoomToScale(z2, tileSize) {
-    tileSize = tileSize || 256;
-    return tileSize * Math.pow(2, z2) / TAU;
-  }
-  function geoSphericalClosestNode(nodes, point) {
-    var minDistance = Infinity, distance;
-    var indexOfMin;
-    for (var i3 in nodes) {
-      distance = geoSphericalDistance(nodes[i3].loc, point);
-      if (distance < minDistance) {
-        minDistance = distance;
-        indexOfMin = i3;
-      }
+  var viewClasses;
+  var isArrayBufferView;
+  function normalizeName(name) {
+    if (typeof name !== "string") {
+      name = String(name);
     }
-    if (indexOfMin !== void 0) {
-      return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
-    } else {
-      return null;
+    if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "") {
+      throw new TypeError('Invalid character in header field name: "' + name + '"');
     }
+    return name.toLowerCase();
   }
-
-  // modules/geo/extent.js
-  function geoExtent(min3, max3) {
-    if (!(this instanceof geoExtent)) {
-      return new geoExtent(min3, max3);
-    } else if (min3 instanceof geoExtent) {
-      return min3;
-    } else if (min3 && min3.length === 2 && min3[0].length === 2 && min3[1].length === 2) {
-      this[0] = min3[0];
-      this[1] = min3[1];
-    } else {
-      this[0] = min3 || [Infinity, Infinity];
-      this[1] = max3 || min3 || [-Infinity, -Infinity];
+  function normalizeValue(value) {
+    if (typeof value !== "string") {
+      value = String(value);
     }
+    return value;
   }
-  geoExtent.prototype = new Array(2);
-  Object.assign(geoExtent.prototype, {
-    equals: function(obj) {
-      return this[0][0] === obj[0][0] && this[0][1] === obj[0][1] && this[1][0] === obj[1][0] && this[1][1] === obj[1][1];
-    },
-    extend: function(obj) {
-      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
-      return geoExtent(
-        [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
-        [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
-      );
-    },
-    _extend: function(extent) {
-      this[0][0] = Math.min(extent[0][0], this[0][0]);
-      this[0][1] = Math.min(extent[0][1], this[0][1]);
-      this[1][0] = Math.max(extent[1][0], this[1][0]);
-      this[1][1] = Math.max(extent[1][1], this[1][1]);
-    },
-    area: function() {
-      return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
-    },
-    center: function() {
-      return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
-    },
-    rectangle: function() {
-      return [this[0][0], this[0][1], this[1][0], this[1][1]];
-    },
-    bbox: function() {
-      return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
-    },
-    polygon: function() {
-      return [
-        [this[0][0], this[0][1]],
-        [this[0][0], this[1][1]],
-        [this[1][0], this[1][1]],
-        [this[1][0], this[0][1]],
-        [this[0][0], this[0][1]]
-      ];
-    },
-    contains: function(obj) {
-      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
-      return obj[0][0] >= this[0][0] && obj[0][1] >= this[0][1] && obj[1][0] <= this[1][0] && obj[1][1] <= this[1][1];
-    },
-    intersects: function(obj) {
-      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
-      return obj[0][0] <= this[1][0] && obj[0][1] <= this[1][1] && obj[1][0] >= this[0][0] && obj[1][1] >= this[0][1];
-    },
-    intersection: function(obj) {
-      if (!this.intersects(obj)) return new geoExtent();
-      return new geoExtent(
-        [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
-        [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
-      );
-    },
-    percentContainedIn: function(obj) {
-      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
-      var a1 = this.intersection(obj).area();
-      var a2 = this.area();
-      if (a1 === Infinity || a2 === Infinity) {
-        return 0;
-      } else if (a1 === 0 || a2 === 0) {
-        if (obj.contains(this)) {
-          return 1;
-        }
-        return 0;
-      } else {
-        return a1 / a2;
+  function iteratorFor(items) {
+    var iterator = {
+      next: function() {
+        var value = items.shift();
+        return { done: value === void 0, value };
       }
-    },
-    padByMeters: function(meters) {
-      var dLat = geoMetersToLat(meters);
-      var dLon = geoMetersToLon(meters, this.center()[1]);
-      return geoExtent(
-        [this[0][0] - dLon, this[0][1] - dLat],
-        [this[1][0] + dLon, this[1][1] + dLat]
-      );
-    },
-    toParam: function() {
-      return this.rectangle().join(",");
-    },
-    split: function() {
-      const center = this.center();
-      return [
-        geoExtent(this[0], center),
-        geoExtent([center[0], this[0][1]], [this[1][0], center[1]]),
-        geoExtent(center, this[1]),
-        geoExtent([this[0][0], center[1]], [center[0], this[1][1]])
-      ];
-    }
-  });
-
-  // node_modules/d3-polygon/src/area.js
-  function area_default3(polygon2) {
-    var i3 = -1, n3 = polygon2.length, a2, b2 = polygon2[n3 - 1], area = 0;
-    while (++i3 < n3) {
-      a2 = b2;
-      b2 = polygon2[i3];
-      area += a2[1] * b2[0] - a2[0] * b2[1];
+    };
+    if (support.iterable) {
+      iterator[Symbol.iterator] = function() {
+        return iterator;
+      };
     }
-    return area / 2;
+    return iterator;
   }
-
-  // node_modules/d3-polygon/src/centroid.js
-  function centroid_default2(polygon2) {
-    var i3 = -1, n3 = polygon2.length, x2 = 0, y2 = 0, a2, b2 = polygon2[n3 - 1], c2, k2 = 0;
-    while (++i3 < n3) {
-      a2 = b2;
-      b2 = polygon2[i3];
-      k2 += c2 = a2[0] * b2[1] - b2[0] * a2[1];
-      x2 += (a2[0] + b2[0]) * c2;
-      y2 += (a2[1] + b2[1]) * c2;
+  function Headers(headers) {
+    this.map = {};
+    if (headers instanceof Headers) {
+      headers.forEach(function(value, name) {
+        this.append(name, value);
+      }, this);
+    } else if (Array.isArray(headers)) {
+      headers.forEach(function(header) {
+        if (header.length != 2) {
+          throw new TypeError("Headers constructor: expected name/value pair to be length 2, found" + header.length);
+        }
+        this.append(header[0], header[1]);
+      }, this);
+    } else if (headers) {
+      Object.getOwnPropertyNames(headers).forEach(function(name) {
+        this.append(name, headers[name]);
+      }, this);
     }
-    return k2 *= 3, [x2 / k2, y2 / k2];
-  }
-
-  // node_modules/d3-polygon/src/cross.js
-  function cross_default(a2, b2, c2) {
-    return (b2[0] - a2[0]) * (c2[1] - a2[1]) - (b2[1] - a2[1]) * (c2[0] - a2[0]);
-  }
-
-  // node_modules/d3-polygon/src/hull.js
-  function lexicographicOrder(a2, b2) {
-    return a2[0] - b2[0] || a2[1] - b2[1];
   }
-  function computeUpperHullIndexes(points) {
-    const n3 = points.length, indexes = [0, 1];
-    let size = 2, i3;
-    for (i3 = 2; i3 < n3; ++i3) {
-      while (size > 1 && cross_default(points[indexes[size - 2]], points[indexes[size - 1]], points[i3]) <= 0) --size;
-      indexes[size++] = i3;
+  Headers.prototype.append = function(name, value) {
+    name = normalizeName(name);
+    value = normalizeValue(value);
+    var oldValue = this.map[name];
+    this.map[name] = oldValue ? oldValue + ", " + value : value;
+  };
+  Headers.prototype["delete"] = function(name) {
+    delete this.map[normalizeName(name)];
+  };
+  Headers.prototype.get = function(name) {
+    name = normalizeName(name);
+    return this.has(name) ? this.map[name] : null;
+  };
+  Headers.prototype.has = function(name) {
+    return this.map.hasOwnProperty(normalizeName(name));
+  };
+  Headers.prototype.set = function(name, value) {
+    this.map[normalizeName(name)] = normalizeValue(value);
+  };
+  Headers.prototype.forEach = function(callback, thisArg) {
+    for (var name in this.map) {
+      if (this.map.hasOwnProperty(name)) {
+        callback.call(thisArg, this.map[name], name, this);
+      }
     }
-    return indexes.slice(0, size);
-  }
-  function hull_default(points) {
-    if ((n3 = points.length) < 3) return null;
-    var i3, n3, sortedPoints = new Array(n3), flippedPoints = new Array(n3);
-    for (i3 = 0; i3 < n3; ++i3) sortedPoints[i3] = [+points[i3][0], +points[i3][1], i3];
-    sortedPoints.sort(lexicographicOrder);
-    for (i3 = 0; i3 < n3; ++i3) flippedPoints[i3] = [sortedPoints[i3][0], -sortedPoints[i3][1]];
-    var upperIndexes = computeUpperHullIndexes(sortedPoints), lowerIndexes = computeUpperHullIndexes(flippedPoints);
-    var skipLeft = lowerIndexes[0] === upperIndexes[0], skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], hull = [];
-    for (i3 = upperIndexes.length - 1; i3 >= 0; --i3) hull.push(points[sortedPoints[upperIndexes[i3]][2]]);
-    for (i3 = +skipLeft; i3 < lowerIndexes.length - skipRight; ++i3) hull.push(points[sortedPoints[lowerIndexes[i3]][2]]);
-    return hull;
+  };
+  Headers.prototype.keys = function() {
+    var items = [];
+    this.forEach(function(value, name) {
+      items.push(name);
+    });
+    return iteratorFor(items);
+  };
+  Headers.prototype.values = function() {
+    var items = [];
+    this.forEach(function(value) {
+      items.push(value);
+    });
+    return iteratorFor(items);
+  };
+  Headers.prototype.entries = function() {
+    var items = [];
+    this.forEach(function(value, name) {
+      items.push([name, value]);
+    });
+    return iteratorFor(items);
+  };
+  if (support.iterable) {
+    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
   }
-
-  // modules/geo/vector.js
-  function geoVecEqual(a2, b2, epsilon3) {
-    if (epsilon3) {
-      return Math.abs(a2[0] - b2[0]) <= epsilon3 && Math.abs(a2[1] - b2[1]) <= epsilon3;
-    } else {
-      return a2[0] === b2[0] && a2[1] === b2[1];
+  function consumed(body) {
+    if (body._noBody) return;
+    if (body.bodyUsed) {
+      return Promise.reject(new TypeError("Already read"));
     }
+    body.bodyUsed = true;
   }
-  function geoVecAdd(a2, b2) {
-    return [a2[0] + b2[0], a2[1] + b2[1]];
-  }
-  function geoVecSubtract(a2, b2) {
-    return [a2[0] - b2[0], a2[1] - b2[1]];
-  }
-  function geoVecScale(a2, mag) {
-    return [a2[0] * mag, a2[1] * mag];
-  }
-  function geoVecFloor(a2) {
-    return [Math.floor(a2[0]), Math.floor(a2[1])];
-  }
-  function geoVecInterp(a2, b2, t2) {
-    return [
-      a2[0] + (b2[0] - a2[0]) * t2,
-      a2[1] + (b2[1] - a2[1]) * t2
-    ];
+  function fileReaderReady(reader) {
+    return new Promise(function(resolve, reject) {
+      reader.onload = function() {
+        resolve(reader.result);
+      };
+      reader.onerror = function() {
+        reject(reader.error);
+      };
+    });
   }
-  function geoVecLength(a2, b2) {
-    return Math.sqrt(geoVecLengthSquare(a2, b2));
+  function readBlobAsArrayBuffer(blob) {
+    var reader = new FileReader();
+    var promise = fileReaderReady(reader);
+    reader.readAsArrayBuffer(blob);
+    return promise;
   }
-  function geoVecLengthSquare(a2, b2) {
-    b2 = b2 || [0, 0];
-    var x2 = a2[0] - b2[0];
-    var y2 = a2[1] - b2[1];
-    return x2 * x2 + y2 * y2;
+  function readBlobAsText(blob) {
+    var reader = new FileReader();
+    var promise = fileReaderReady(reader);
+    var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);
+    var encoding = match ? match[1] : "utf-8";
+    reader.readAsText(blob, encoding);
+    return promise;
   }
-  function geoVecNormalize(a2) {
-    var length2 = Math.sqrt(a2[0] * a2[0] + a2[1] * a2[1]);
-    if (length2 !== 0) {
-      return geoVecScale(a2, 1 / length2);
+  function readArrayBufferAsText(buf) {
+    var view = new Uint8Array(buf);
+    var chars = new Array(view.length);
+    for (var i3 = 0; i3 < view.length; i3++) {
+      chars[i3] = String.fromCharCode(view[i3]);
     }
-    return [0, 0];
-  }
-  function geoVecAngle(a2, b2) {
-    return Math.atan2(b2[1] - a2[1], b2[0] - a2[0]);
-  }
-  function geoVecDot(a2, b2, origin) {
-    origin = origin || [0, 0];
-    var p2 = geoVecSubtract(a2, origin);
-    var q2 = geoVecSubtract(b2, origin);
-    return p2[0] * q2[0] + p2[1] * q2[1];
-  }
-  function geoVecNormalizedDot(a2, b2, origin) {
-    origin = origin || [0, 0];
-    var p2 = geoVecNormalize(geoVecSubtract(a2, origin));
-    var q2 = geoVecNormalize(geoVecSubtract(b2, origin));
-    return geoVecDot(p2, q2);
+    return chars.join("");
   }
-  function geoVecCross(a2, b2, origin) {
-    origin = origin || [0, 0];
-    var p2 = geoVecSubtract(a2, origin);
-    var q2 = geoVecSubtract(b2, origin);
-    return p2[0] * q2[1] - p2[1] * q2[0];
+  function bufferClone(buf) {
+    if (buf.slice) {
+      return buf.slice(0);
+    } else {
+      var view = new Uint8Array(buf.byteLength);
+      view.set(new Uint8Array(buf));
+      return view.buffer;
+    }
   }
-  function geoVecProject(a2, points) {
-    var min3 = Infinity;
-    var idx;
-    var target;
-    for (var i3 = 0; i3 < points.length - 1; i3++) {
-      var o2 = points[i3];
-      var s2 = geoVecSubtract(points[i3 + 1], o2);
-      var v2 = geoVecSubtract(a2, o2);
-      var proj = geoVecDot(v2, s2) / geoVecDot(s2, s2);
-      var p2;
-      if (proj < 0) {
-        p2 = o2;
-      } else if (proj > 1) {
-        p2 = points[i3 + 1];
+  function Body() {
+    this.bodyUsed = false;
+    this._initBody = function(body) {
+      this.bodyUsed = this.bodyUsed;
+      this._bodyInit = body;
+      if (!body) {
+        this._noBody = true;
+        this._bodyText = "";
+      } else if (typeof body === "string") {
+        this._bodyText = body;
+      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
+        this._bodyBlob = body;
+      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
+        this._bodyFormData = body;
+      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
+        this._bodyText = body.toString();
+      } else if (support.arrayBuffer && support.blob && isDataView(body)) {
+        this._bodyArrayBuffer = bufferClone(body.buffer);
+        this._bodyInit = new Blob([this._bodyArrayBuffer]);
+      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
+        this._bodyArrayBuffer = bufferClone(body);
       } else {
-        p2 = [o2[0] + proj * s2[0], o2[1] + proj * s2[1]];
+        this._bodyText = body = Object.prototype.toString.call(body);
+      }
+      if (!this.headers.get("content-type")) {
+        if (typeof body === "string") {
+          this.headers.set("content-type", "text/plain;charset=UTF-8");
+        } else if (this._bodyBlob && this._bodyBlob.type) {
+          this.headers.set("content-type", this._bodyBlob.type);
+        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
+          this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
+        }
+      }
+    };
+    if (support.blob) {
+      this.blob = function() {
+        var rejected = consumed(this);
+        if (rejected) {
+          return rejected;
+        }
+        if (this._bodyBlob) {
+          return Promise.resolve(this._bodyBlob);
+        } else if (this._bodyArrayBuffer) {
+          return Promise.resolve(new Blob([this._bodyArrayBuffer]));
+        } else if (this._bodyFormData) {
+          throw new Error("could not read FormData body as blob");
+        } else {
+          return Promise.resolve(new Blob([this._bodyText]));
+        }
+      };
+    }
+    this.arrayBuffer = function() {
+      if (this._bodyArrayBuffer) {
+        var isConsumed = consumed(this);
+        if (isConsumed) {
+          return isConsumed;
+        } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {
+          return Promise.resolve(
+            this._bodyArrayBuffer.buffer.slice(
+              this._bodyArrayBuffer.byteOffset,
+              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength
+            )
+          );
+        } else {
+          return Promise.resolve(this._bodyArrayBuffer);
+        }
+      } else if (support.blob) {
+        return this.blob().then(readBlobAsArrayBuffer);
+      } else {
+        throw new Error("could not read as ArrayBuffer");
+      }
+    };
+    this.text = function() {
+      var rejected = consumed(this);
+      if (rejected) {
+        return rejected;
+      }
+      if (this._bodyBlob) {
+        return readBlobAsText(this._bodyBlob);
+      } else if (this._bodyArrayBuffer) {
+        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
+      } else if (this._bodyFormData) {
+        throw new Error("could not read FormData body as text");
+      } else {
+        return Promise.resolve(this._bodyText);
+      }
+    };
+    if (support.formData) {
+      this.formData = function() {
+        return this.text().then(decode);
+      };
+    }
+    this.json = function() {
+      return this.text().then(JSON.parse);
+    };
+    return this;
+  }
+  var methods = ["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"];
+  function normalizeMethod(method) {
+    var upcased = method.toUpperCase();
+    return methods.indexOf(upcased) > -1 ? upcased : method;
+  }
+  function Request(input, options2) {
+    if (!(this instanceof Request)) {
+      throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
+    }
+    options2 = options2 || {};
+    var body = options2.body;
+    if (input instanceof Request) {
+      if (input.bodyUsed) {
+        throw new TypeError("Already read");
       }
-      var dist = geoVecLength(p2, a2);
-      if (dist < min3) {
-        min3 = dist;
-        idx = i3 + 1;
-        target = p2;
+      this.url = input.url;
+      this.credentials = input.credentials;
+      if (!options2.headers) {
+        this.headers = new Headers(input.headers);
+      }
+      this.method = input.method;
+      this.mode = input.mode;
+      this.signal = input.signal;
+      if (!body && input._bodyInit != null) {
+        body = input._bodyInit;
+        input.bodyUsed = true;
       }
-    }
-    if (idx !== void 0) {
-      return { index: idx, distance: min3, target };
     } else {
-      return null;
+      this.url = String(input);
+    }
+    this.credentials = options2.credentials || this.credentials || "same-origin";
+    if (options2.headers || !this.headers) {
+      this.headers = new Headers(options2.headers);
+    }
+    this.method = normalizeMethod(options2.method || this.method || "GET");
+    this.mode = options2.mode || this.mode || null;
+    this.signal = options2.signal || this.signal || function() {
+      if ("AbortController" in g) {
+        var ctrl = new AbortController();
+        return ctrl.signal;
+      }
+    }();
+    this.referrer = null;
+    if ((this.method === "GET" || this.method === "HEAD") && body) {
+      throw new TypeError("Body not allowed for GET or HEAD requests");
+    }
+    this._initBody(body);
+    if (this.method === "GET" || this.method === "HEAD") {
+      if (options2.cache === "no-store" || options2.cache === "no-cache") {
+        var reParamSearch = /([?&])_=[^&]*/;
+        if (reParamSearch.test(this.url)) {
+          this.url = this.url.replace(reParamSearch, "$1_=" + (/* @__PURE__ */ new Date()).getTime());
+        } else {
+          var reQueryString = /\?/;
+          this.url += (reQueryString.test(this.url) ? "&" : "?") + "_=" + (/* @__PURE__ */ new Date()).getTime();
+        }
+      }
     }
   }
-
-  // modules/geo/geom.js
-  function geoAngle(a2, b2, projection2) {
-    return geoVecAngle(projection2(a2.loc), projection2(b2.loc));
-  }
-  function geoEdgeEqual(a2, b2) {
-    return a2[0] === b2[0] && a2[1] === b2[1] || a2[0] === b2[1] && a2[1] === b2[0];
-  }
-  function geoRotate(points, angle2, around) {
-    return points.map(function(point) {
-      var radial = geoVecSubtract(point, around);
-      return [
-        radial[0] * Math.cos(angle2) - radial[1] * Math.sin(angle2) + around[0],
-        radial[0] * Math.sin(angle2) + radial[1] * Math.cos(angle2) + around[1]
-      ];
+  Request.prototype.clone = function() {
+    return new Request(this, { body: this._bodyInit });
+  };
+  function decode(body) {
+    var form = new FormData();
+    body.trim().split("&").forEach(function(bytes) {
+      if (bytes) {
+        var split = bytes.split("=");
+        var name = split.shift().replace(/\+/g, " ");
+        var value = split.join("=").replace(/\+/g, " ");
+        form.append(decodeURIComponent(name), decodeURIComponent(value));
+      }
     });
+    return form;
   }
-  function geoChooseEdge(nodes, point, projection2, activeID) {
-    var dist = geoVecLength;
-    var points = nodes.map(function(n3) {
-      return projection2(n3.loc);
+  function parseHeaders(rawHeaders) {
+    var headers = new Headers();
+    var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " ");
+    preProcessedHeaders.split("\r").map(function(header) {
+      return header.indexOf("\n") === 0 ? header.substr(1, header.length) : header;
+    }).forEach(function(line) {
+      var parts = line.split(":");
+      var key = parts.shift().trim();
+      if (key) {
+        var value = parts.join(":").trim();
+        try {
+          headers.append(key, value);
+        } catch (error) {
+          console.warn("Response " + error.message);
+        }
+      }
     });
-    var ids = nodes.map(function(n3) {
-      return n3.id;
+    return headers;
+  }
+  Body.call(Request.prototype);
+  function Response(bodyInit, options2) {
+    if (!(this instanceof Response)) {
+      throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
+    }
+    if (!options2) {
+      options2 = {};
+    }
+    this.type = "default";
+    this.status = options2.status === void 0 ? 200 : options2.status;
+    if (this.status < 200 || this.status > 599) {
+      throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");
+    }
+    this.ok = this.status >= 200 && this.status < 300;
+    this.statusText = options2.statusText === void 0 ? "" : "" + options2.statusText;
+    this.headers = new Headers(options2.headers);
+    this.url = options2.url || "";
+    this._initBody(bodyInit);
+  }
+  Body.call(Response.prototype);
+  Response.prototype.clone = function() {
+    return new Response(this._bodyInit, {
+      status: this.status,
+      statusText: this.statusText,
+      headers: new Headers(this.headers),
+      url: this.url
     });
-    var min3 = Infinity;
-    var idx;
-    var loc;
-    for (var i3 = 0; i3 < points.length - 1; i3++) {
-      if (ids[i3] === activeID || ids[i3 + 1] === activeID) continue;
-      var o2 = points[i3];
-      var s2 = geoVecSubtract(points[i3 + 1], o2);
-      var v2 = geoVecSubtract(point, o2);
-      var proj = geoVecDot(v2, s2) / geoVecDot(s2, s2);
-      var p2;
-      if (proj < 0) {
-        p2 = o2;
-      } else if (proj > 1) {
-        p2 = points[i3 + 1];
+  };
+  Response.error = function() {
+    var response = new Response(null, { status: 200, statusText: "" });
+    response.ok = false;
+    response.status = 0;
+    response.type = "error";
+    return response;
+  };
+  var redirectStatuses = [301, 302, 303, 307, 308];
+  Response.redirect = function(url, status) {
+    if (redirectStatuses.indexOf(status) === -1) {
+      throw new RangeError("Invalid status code");
+    }
+    return new Response(null, { status, headers: { location: url } });
+  };
+  var DOMException2 = g.DOMException;
+  try {
+    new DOMException2();
+  } catch (err) {
+    DOMException2 = function(message, name) {
+      this.message = message;
+      this.name = name;
+      var error = Error(message);
+      this.stack = error.stack;
+    };
+    DOMException2.prototype = Object.create(Error.prototype);
+    DOMException2.prototype.constructor = DOMException2;
+  }
+  function fetch2(input, init2) {
+    return new Promise(function(resolve, reject) {
+      var request3 = new Request(input, init2);
+      if (request3.signal && request3.signal.aborted) {
+        return reject(new DOMException2("Aborted", "AbortError"));
+      }
+      var xhr = new XMLHttpRequest();
+      function abortXhr() {
+        xhr.abort();
+      }
+      xhr.onload = function() {
+        var options2 = {
+          statusText: xhr.statusText,
+          headers: parseHeaders(xhr.getAllResponseHeaders() || "")
+        };
+        if (request3.url.indexOf("file://") === 0 && (xhr.status < 200 || xhr.status > 599)) {
+          options2.status = 200;
+        } else {
+          options2.status = xhr.status;
+        }
+        options2.url = "responseURL" in xhr ? xhr.responseURL : options2.headers.get("X-Request-URL");
+        var body = "response" in xhr ? xhr.response : xhr.responseText;
+        setTimeout(function() {
+          resolve(new Response(body, options2));
+        }, 0);
+      };
+      xhr.onerror = function() {
+        setTimeout(function() {
+          reject(new TypeError("Network request failed"));
+        }, 0);
+      };
+      xhr.ontimeout = function() {
+        setTimeout(function() {
+          reject(new TypeError("Network request timed out"));
+        }, 0);
+      };
+      xhr.onabort = function() {
+        setTimeout(function() {
+          reject(new DOMException2("Aborted", "AbortError"));
+        }, 0);
+      };
+      function fixUrl(url) {
+        try {
+          return url === "" && g.location.href ? g.location.href : url;
+        } catch (e3) {
+          return url;
+        }
+      }
+      xhr.open(request3.method, fixUrl(request3.url), true);
+      if (request3.credentials === "include") {
+        xhr.withCredentials = true;
+      } else if (request3.credentials === "omit") {
+        xhr.withCredentials = false;
+      }
+      if ("responseType" in xhr) {
+        if (support.blob) {
+          xhr.responseType = "blob";
+        } else if (support.arrayBuffer) {
+          xhr.responseType = "arraybuffer";
+        }
+      }
+      if (init2 && typeof init2.headers === "object" && !(init2.headers instanceof Headers || g.Headers && init2.headers instanceof g.Headers)) {
+        var names = [];
+        Object.getOwnPropertyNames(init2.headers).forEach(function(name) {
+          names.push(normalizeName(name));
+          xhr.setRequestHeader(name, normalizeValue(init2.headers[name]));
+        });
+        request3.headers.forEach(function(value, name) {
+          if (names.indexOf(name) === -1) {
+            xhr.setRequestHeader(name, value);
+          }
+        });
       } else {
-        p2 = [o2[0] + proj * s2[0], o2[1] + proj * s2[1]];
+        request3.headers.forEach(function(value, name) {
+          xhr.setRequestHeader(name, value);
+        });
       }
-      var d2 = dist(p2, point);
-      if (d2 < min3) {
-        min3 = d2;
-        idx = i3 + 1;
-        loc = projection2.invert(p2);
+      if (request3.signal) {
+        request3.signal.addEventListener("abort", abortXhr);
+        xhr.onreadystatechange = function() {
+          if (xhr.readyState === 4) {
+            request3.signal.removeEventListener("abort", abortXhr);
+          }
+        };
       }
+      xhr.send(typeof request3._bodyInit === "undefined" ? null : request3._bodyInit);
+    });
+  }
+  fetch2.polyfill = true;
+  if (!g.fetch) {
+    g.fetch = fetch2;
+    g.Headers = Headers;
+    g.Request = Request;
+    g.Response = Response;
+  }
+
+  // node_modules/abortcontroller-polyfill/dist/polyfill-patch-fetch.js
+  (function(factory) {
+    typeof define === "function" && define.amd ? define(factory) : factory();
+  })(function() {
+    "use strict";
+    function _arrayLikeToArray(r2, a2) {
+      (null == a2 || a2 > r2.length) && (a2 = r2.length);
+      for (var e3 = 0, n3 = Array(a2); e3 < a2; e3++) n3[e3] = r2[e3];
+      return n3;
     }
-    if (idx !== void 0) {
-      return { index: idx, distance: min3, loc };
-    } else {
-      return null;
+    function _assertThisInitialized(e3) {
+      if (void 0 === e3) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+      return e3;
     }
-  }
-  function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
-    var actives = [];
-    var inactives = [];
-    var j2, k2, n1, n22, segment;
-    for (j2 = 0; j2 < activeNodes.length - 1; j2++) {
-      n1 = activeNodes[j2];
-      n22 = activeNodes[j2 + 1];
-      segment = [n1.loc, n22.loc];
-      if (n1.id === activeID || n22.id === activeID) {
-        actives.push(segment);
+    function _callSuper(t2, o2, e3) {
+      return o2 = _getPrototypeOf(o2), _possibleConstructorReturn(t2, _isNativeReflectConstruct() ? Reflect.construct(o2, e3 || [], _getPrototypeOf(t2).constructor) : o2.apply(t2, e3));
+    }
+    function _classCallCheck(a2, n3) {
+      if (!(a2 instanceof n3)) throw new TypeError("Cannot call a class as a function");
+    }
+    function _defineProperties(e3, r2) {
+      for (var t2 = 0; t2 < r2.length; t2++) {
+        var o2 = r2[t2];
+        o2.enumerable = o2.enumerable || false, o2.configurable = true, "value" in o2 && (o2.writable = true), Object.defineProperty(e3, _toPropertyKey(o2.key), o2);
       }
     }
-    for (j2 = 0; j2 < inactiveNodes.length - 1; j2++) {
-      n1 = inactiveNodes[j2];
-      n22 = inactiveNodes[j2 + 1];
-      segment = [n1.loc, n22.loc];
-      inactives.push(segment);
+    function _createClass(e3, r2, t2) {
+      return r2 && _defineProperties(e3.prototype, r2), t2 && _defineProperties(e3, t2), Object.defineProperty(e3, "prototype", {
+        writable: false
+      }), e3;
+    }
+    function _createForOfIteratorHelper(r2, e3) {
+      var t2 = "undefined" != typeof Symbol && r2[Symbol.iterator] || r2["@@iterator"];
+      if (!t2) {
+        if (Array.isArray(r2) || (t2 = _unsupportedIterableToArray(r2)) || e3 && r2 && "number" == typeof r2.length) {
+          t2 && (r2 = t2);
+          var n3 = 0, F2 = function() {
+          };
+          return {
+            s: F2,
+            n: function() {
+              return n3 >= r2.length ? {
+                done: true
+              } : {
+                done: false,
+                value: r2[n3++]
+              };
+            },
+            e: function(r3) {
+              throw r3;
+            },
+            f: F2
+          };
+        }
+        throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+      }
+      var o2, a2 = true, u2 = false;
+      return {
+        s: function() {
+          t2 = t2.call(r2);
+        },
+        n: function() {
+          var r3 = t2.next();
+          return a2 = r3.done, r3;
+        },
+        e: function(r3) {
+          u2 = true, o2 = r3;
+        },
+        f: function() {
+          try {
+            a2 || null == t2.return || t2.return();
+          } finally {
+            if (u2) throw o2;
+          }
+        }
+      };
     }
-    for (j2 = 0; j2 < actives.length; j2++) {
-      for (k2 = 0; k2 < inactives.length; k2++) {
-        var p2 = actives[j2];
-        var q2 = inactives[k2];
-        var hit = geoLineIntersection(p2, q2);
-        if (hit) {
-          return true;
+    function _get() {
+      return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function(e3, t2, r2) {
+        var p2 = _superPropBase(e3, t2);
+        if (p2) {
+          var n3 = Object.getOwnPropertyDescriptor(p2, t2);
+          return n3.get ? n3.get.call(arguments.length < 3 ? e3 : r2) : n3.value;
+        }
+      }, _get.apply(null, arguments);
+    }
+    function _getPrototypeOf(t2) {
+      return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t3) {
+        return t3.__proto__ || Object.getPrototypeOf(t3);
+      }, _getPrototypeOf(t2);
+    }
+    function _inherits(t2, e3) {
+      if ("function" != typeof e3 && null !== e3) throw new TypeError("Super expression must either be null or a function");
+      t2.prototype = Object.create(e3 && e3.prototype, {
+        constructor: {
+          value: t2,
+          writable: true,
+          configurable: true
         }
+      }), Object.defineProperty(t2, "prototype", {
+        writable: false
+      }), e3 && _setPrototypeOf(t2, e3);
+    }
+    function _isNativeReflectConstruct() {
+      try {
+        var t2 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
+        }));
+      } catch (t3) {
       }
+      return (_isNativeReflectConstruct = function() {
+        return !!t2;
+      })();
     }
-    return false;
-  }
-  function geoHasSelfIntersections(nodes, activeID) {
-    var actives = [];
-    var inactives = [];
-    var j2, k2;
-    for (j2 = 0; j2 < nodes.length - 1; j2++) {
-      var n1 = nodes[j2];
-      var n22 = nodes[j2 + 1];
-      var segment = [n1.loc, n22.loc];
-      if (n1.id === activeID || n22.id === activeID) {
-        actives.push(segment);
-      } else {
-        inactives.push(segment);
+    function _possibleConstructorReturn(t2, e3) {
+      if (e3 && ("object" == typeof e3 || "function" == typeof e3)) return e3;
+      if (void 0 !== e3) throw new TypeError("Derived constructors may only return object or undefined");
+      return _assertThisInitialized(t2);
+    }
+    function _setPrototypeOf(t2, e3) {
+      return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t3, e4) {
+        return t3.__proto__ = e4, t3;
+      }, _setPrototypeOf(t2, e3);
+    }
+    function _superPropBase(t2, o2) {
+      for (; !{}.hasOwnProperty.call(t2, o2) && null !== (t2 = _getPrototypeOf(t2)); ) ;
+      return t2;
+    }
+    function _superPropGet(t2, o2, e3, r2) {
+      var p2 = _get(_getPrototypeOf(1 & r2 ? t2.prototype : t2), o2, e3);
+      return 2 & r2 && "function" == typeof p2 ? function(t3) {
+        return p2.apply(e3, t3);
+      } : p2;
+    }
+    function _toPrimitive(t2, r2) {
+      if ("object" != typeof t2 || !t2) return t2;
+      var e3 = t2[Symbol.toPrimitive];
+      if (void 0 !== e3) {
+        var i3 = e3.call(t2, r2 || "default");
+        if ("object" != typeof i3) return i3;
+        throw new TypeError("@@toPrimitive must return a primitive value.");
       }
+      return ("string" === r2 ? String : Number)(t2);
     }
-    for (j2 = 0; j2 < actives.length; j2++) {
-      for (k2 = 0; k2 < inactives.length; k2++) {
-        var p2 = actives[j2];
-        var q2 = inactives[k2];
-        if (geoVecEqual(p2[1], q2[0]) || geoVecEqual(p2[0], q2[1]) || geoVecEqual(p2[0], q2[0]) || geoVecEqual(p2[1], q2[1])) {
-          continue;
-        }
-        var hit = geoLineIntersection(p2, q2);
-        if (hit) {
-          var epsilon3 = 1e-8;
-          if (geoVecEqual(p2[1], hit, epsilon3) || geoVecEqual(p2[0], hit, epsilon3) || geoVecEqual(q2[1], hit, epsilon3) || geoVecEqual(q2[0], hit, epsilon3)) {
-            continue;
+    function _toPropertyKey(t2) {
+      var i3 = _toPrimitive(t2, "string");
+      return "symbol" == typeof i3 ? i3 : i3 + "";
+    }
+    function _unsupportedIterableToArray(r2, a2) {
+      if (r2) {
+        if ("string" == typeof r2) return _arrayLikeToArray(r2, a2);
+        var t2 = {}.toString.call(r2).slice(8, -1);
+        return "Object" === t2 && r2.constructor && (t2 = r2.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r2) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray(r2, a2) : void 0;
+      }
+    }
+    (function(self2) {
+      return {
+        NativeAbortSignal: self2.AbortSignal,
+        NativeAbortController: self2.AbortController
+      };
+    })(typeof self !== "undefined" ? self : global);
+    function createAbortEvent(reason) {
+      var event;
+      try {
+        event = new Event("abort");
+      } catch (e3) {
+        if (typeof document !== "undefined") {
+          if (!document.createEvent) {
+            event = document.createEventObject();
+            event.type = "abort";
           } else {
-            return true;
+            event = document.createEvent("Event");
+            event.initEvent("abort", false, false);
           }
+        } else {
+          event = {
+            type: "abort",
+            bubbles: false,
+            cancelable: false
+          };
         }
       }
+      event.reason = reason;
+      return event;
     }
-    return false;
-  }
-  function geoLineIntersection(a2, b2) {
-    var p2 = [a2[0][0], a2[0][1]];
-    var p22 = [a2[1][0], a2[1][1]];
-    var q2 = [b2[0][0], b2[0][1]];
-    var q22 = [b2[1][0], b2[1][1]];
-    var r2 = geoVecSubtract(p22, p2);
-    var s2 = geoVecSubtract(q22, q2);
-    var uNumerator = geoVecCross(geoVecSubtract(q2, p2), r2);
-    var denominator = geoVecCross(r2, s2);
-    if (uNumerator && denominator) {
-      var u2 = uNumerator / denominator;
-      var t2 = geoVecCross(geoVecSubtract(q2, p2), s2) / denominator;
-      if (t2 >= 0 && t2 <= 1 && u2 >= 0 && u2 <= 1) {
-        return geoVecInterp(p2, p22, t2);
+    function normalizeAbortReason(reason) {
+      if (reason === void 0) {
+        if (typeof document === "undefined") {
+          reason = new Error("This operation was aborted");
+          reason.name = "AbortError";
+        } else {
+          try {
+            reason = new DOMException("signal is aborted without reason");
+            Object.defineProperty(reason, "name", {
+              value: "AbortError"
+            });
+          } catch (err) {
+            reason = new Error("This operation was aborted");
+            reason.name = "AbortError";
+          }
+        }
       }
+      return reason;
     }
-    return null;
-  }
-  function geoPathIntersections(path1, path2) {
-    var intersections = [];
-    for (var i3 = 0; i3 < path1.length - 1; i3++) {
-      for (var j2 = 0; j2 < path2.length - 1; j2++) {
-        var a2 = [path1[i3], path1[i3 + 1]];
-        var b2 = [path2[j2], path2[j2 + 1]];
-        var hit = geoLineIntersection(a2, b2);
-        if (hit) {
-          intersections.push(hit);
+    var Emitter = /* @__PURE__ */ function() {
+      function Emitter2() {
+        _classCallCheck(this, Emitter2);
+        Object.defineProperty(this, "listeners", {
+          value: {},
+          writable: true,
+          configurable: true
+        });
+      }
+      return _createClass(Emitter2, [{
+        key: "addEventListener",
+        value: function addEventListener(type2, callback, options2) {
+          if (!(type2 in this.listeners)) {
+            this.listeners[type2] = [];
+          }
+          this.listeners[type2].push({
+            callback,
+            options: options2
+          });
+        }
+      }, {
+        key: "removeEventListener",
+        value: function removeEventListener(type2, callback) {
+          if (!(type2 in this.listeners)) {
+            return;
+          }
+          var stack = this.listeners[type2];
+          for (var i3 = 0, l2 = stack.length; i3 < l2; i3++) {
+            if (stack[i3].callback === callback) {
+              stack.splice(i3, 1);
+              return;
+            }
+          }
+        }
+      }, {
+        key: "dispatchEvent",
+        value: function dispatchEvent2(event) {
+          var _this = this;
+          if (!(event.type in this.listeners)) {
+            return;
+          }
+          var stack = this.listeners[event.type];
+          var stackToCall = stack.slice();
+          var _loop = function _loop2() {
+            var listener = stackToCall[i3];
+            try {
+              listener.callback.call(_this, event);
+            } catch (e3) {
+              Promise.resolve().then(function() {
+                throw e3;
+              });
+            }
+            if (listener.options && listener.options.once) {
+              _this.removeEventListener(event.type, listener.callback);
+            }
+          };
+          for (var i3 = 0, l2 = stackToCall.length; i3 < l2; i3++) {
+            _loop();
+          }
+          return !event.defaultPrevented;
+        }
+      }]);
+    }();
+    var AbortSignal = /* @__PURE__ */ function(_Emitter) {
+      function AbortSignal2() {
+        var _this2;
+        _classCallCheck(this, AbortSignal2);
+        _this2 = _callSuper(this, AbortSignal2);
+        if (!_this2.listeners) {
+          Emitter.call(_this2);
+        }
+        Object.defineProperty(_this2, "aborted", {
+          value: false,
+          writable: true,
+          configurable: true
+        });
+        Object.defineProperty(_this2, "onabort", {
+          value: null,
+          writable: true,
+          configurable: true
+        });
+        Object.defineProperty(_this2, "reason", {
+          value: void 0,
+          writable: true,
+          configurable: true
+        });
+        return _this2;
+      }
+      _inherits(AbortSignal2, _Emitter);
+      return _createClass(AbortSignal2, [{
+        key: "toString",
+        value: function toString2() {
+          return "[object AbortSignal]";
+        }
+      }, {
+        key: "dispatchEvent",
+        value: function dispatchEvent2(event) {
+          if (event.type === "abort") {
+            this.aborted = true;
+            if (typeof this.onabort === "function") {
+              this.onabort.call(this, event);
+            }
+          }
+          _superPropGet(AbortSignal2, "dispatchEvent", this, 3)([event]);
         }
-      }
-    }
-    return intersections;
-  }
-  function geoPathHasIntersections(path1, path2) {
-    for (var i3 = 0; i3 < path1.length - 1; i3++) {
-      for (var j2 = 0; j2 < path2.length - 1; j2++) {
-        var a2 = [path1[i3], path1[i3 + 1]];
-        var b2 = [path2[j2], path2[j2 + 1]];
-        var hit = geoLineIntersection(a2, b2);
-        if (hit) {
-          return true;
+        /**
+         * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/AbortSignal/throwIfAborted}
+         */
+      }, {
+        key: "throwIfAborted",
+        value: function throwIfAborted() {
+          var aborted = this.aborted, _this$reason = this.reason, reason = _this$reason === void 0 ? "Aborted" : _this$reason;
+          if (!aborted) return;
+          throw reason;
+        }
+        /**
+         * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/AbortSignal/timeout_static}
+         * @param {number} time The "active" time in milliseconds before the returned {@link AbortSignal} will abort.
+         *                      The value must be within range of 0 and {@link Number.MAX_SAFE_INTEGER}.
+         * @returns {AbortSignal} The signal will abort with its {@link AbortSignal.reason} property set to a `TimeoutError` {@link DOMException} on timeout,
+         *                        or an `AbortError` {@link DOMException} if the operation was user-triggered.
+         */
+      }], [{
+        key: "timeout",
+        value: function timeout2(time) {
+          var controller = new AbortController2();
+          setTimeout(function() {
+            return controller.abort(new DOMException("This signal is timeout in ".concat(time, "ms"), "TimeoutError"));
+          }, time);
+          return controller.signal;
+        }
+        /**
+         * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static}
+         * @param {Iterable<AbortSignal>} iterable An {@link Iterable} (such as an {@link Array}) of abort signals.
+         * @returns {AbortSignal} - **Already aborted**, if any of the abort signals given is already aborted.
+         *                          The returned {@link AbortSignal}'s reason will be already set to the `reason` of the first abort signal that was already aborted.
+         *                        - **Asynchronously aborted**, when any abort signal in `iterable` aborts.
+         *                          The `reason` will be set to the reason of the first abort signal that is aborted.
+         */
+      }, {
+        key: "any",
+        value: function any(iterable) {
+          var controller = new AbortController2();
+          function abort() {
+            controller.abort(this.reason);
+            clean2();
+          }
+          function clean2() {
+            var _iterator = _createForOfIteratorHelper(iterable), _step;
+            try {
+              for (_iterator.s(); !(_step = _iterator.n()).done; ) {
+                var signal2 = _step.value;
+                signal2.removeEventListener("abort", abort);
+              }
+            } catch (err) {
+              _iterator.e(err);
+            } finally {
+              _iterator.f();
+            }
+          }
+          var _iterator2 = _createForOfIteratorHelper(iterable), _step2;
+          try {
+            for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
+              var signal = _step2.value;
+              if (signal.aborted) {
+                controller.abort(signal.reason);
+                break;
+              } else signal.addEventListener("abort", abort);
+            }
+          } catch (err) {
+            _iterator2.e(err);
+          } finally {
+            _iterator2.f();
+          }
+          return controller.signal;
         }
+      }]);
+    }(Emitter);
+    var AbortController2 = /* @__PURE__ */ function() {
+      function AbortController3() {
+        _classCallCheck(this, AbortController3);
+        Object.defineProperty(this, "signal", {
+          value: new AbortSignal(),
+          writable: true,
+          configurable: true
+        });
       }
+      return _createClass(AbortController3, [{
+        key: "abort",
+        value: function abort(reason) {
+          var signalReason = normalizeAbortReason(reason);
+          var event = createAbortEvent(signalReason);
+          this.signal.reason = signalReason;
+          this.signal.dispatchEvent(event);
+        }
+      }, {
+        key: "toString",
+        value: function toString2() {
+          return "[object AbortController]";
+        }
+      }]);
+    }();
+    if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
+      AbortController2.prototype[Symbol.toStringTag] = "AbortController";
+      AbortSignal.prototype[Symbol.toStringTag] = "AbortSignal";
     }
-    return false;
-  }
-  function geoPointInPolygon(point, polygon2) {
-    var x2 = point[0];
-    var y2 = point[1];
-    var inside = false;
-    for (var i3 = 0, j2 = polygon2.length - 1; i3 < polygon2.length; j2 = i3++) {
-      var xi = polygon2[i3][0];
-      var yi = polygon2[i3][1];
-      var xj = polygon2[j2][0];
-      var yj = polygon2[j2][1];
-      var intersect2 = yi > y2 !== yj > y2 && x2 < (xj - xi) * (y2 - yi) / (yj - yi) + xi;
-      if (intersect2) inside = !inside;
-    }
-    return inside;
-  }
-  function geoPolygonContainsPolygon(outer, inner) {
-    return inner.every(function(point) {
-      return geoPointInPolygon(point, outer);
-    });
-  }
-  function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
-    function testPoints(outer2, inner2) {
-      return inner2.some(function(point) {
-        return geoPointInPolygon(point, outer2);
-      });
-    }
-    return testPoints(outer, inner) || !!checkSegments && geoPathHasIntersections(outer, inner);
-  }
-  function geoGetSmallestSurroundingRectangle(points) {
-    var hull = hull_default(points);
-    var centroid = centroid_default2(hull);
-    var minArea = Infinity;
-    var ssrExtent = [];
-    var ssrAngle = 0;
-    var c1 = hull[0];
-    for (var i3 = 0; i3 <= hull.length - 1; i3++) {
-      var c2 = i3 === hull.length - 1 ? hull[0] : hull[i3 + 1];
-      var angle2 = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
-      var poly = geoRotate(hull, -angle2, centroid);
-      var extent = poly.reduce(function(extent2, point) {
-        return extent2.extend(geoExtent(point));
-      }, geoExtent());
-      var area = extent.area();
-      if (area < minArea) {
-        minArea = area;
-        ssrExtent = extent;
-        ssrAngle = angle2;
+    function polyfillNeeded(self2) {
+      if (self2.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
+        console.log("__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill");
+        return true;
       }
-      c1 = c2;
-    }
-    return {
-      poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
-      angle: ssrAngle
-    };
-  }
-  function geoPathLength(path) {
-    var length2 = 0;
-    for (var i3 = 0; i3 < path.length - 1; i3++) {
-      length2 += geoVecLength(path[i3], path[i3 + 1]);
-    }
-    return length2;
-  }
-  function geoViewportEdge(point, dimensions) {
-    var pad2 = [80, 20, 50, 20];
-    var x2 = 0;
-    var y2 = 0;
-    if (point[0] > dimensions[0] - pad2[1]) {
-      x2 = -10;
-    }
-    if (point[0] < pad2[3]) {
-      x2 = 10;
-    }
-    if (point[1] > dimensions[1] - pad2[2]) {
-      y2 = -10;
-    }
-    if (point[1] < pad2[0]) {
-      y2 = 10;
-    }
-    if (x2 || y2) {
-      return [x2, y2];
-    } else {
-      return null;
-    }
-  }
-
-  // node_modules/d3-dispatch/src/dispatch.js
-  var noop2 = { value: () => {
-  } };
-  function dispatch() {
-    for (var i3 = 0, n3 = arguments.length, _2 = {}, t2; i3 < n3; ++i3) {
-      if (!(t2 = arguments[i3] + "") || t2 in _2 || /[\s.]/.test(t2)) throw new Error("illegal type: " + t2);
-      _2[t2] = [];
+      return typeof self2.Request === "function" && !self2.Request.prototype.hasOwnProperty("signal") || !self2.AbortController;
     }
-    return new Dispatch(_2);
-  }
-  function Dispatch(_2) {
-    this._ = _2;
-  }
-  function parseTypenames(typenames, types) {
-    return typenames.trim().split(/^|\s+/).map(function(t2) {
-      var name = "", i3 = t2.indexOf(".");
-      if (i3 >= 0) name = t2.slice(i3 + 1), t2 = t2.slice(0, i3);
-      if (t2 && !types.hasOwnProperty(t2)) throw new Error("unknown type: " + t2);
-      return { type: t2, name };
-    });
-  }
-  Dispatch.prototype = dispatch.prototype = {
-    constructor: Dispatch,
-    on: function(typename, callback) {
-      var _2 = this._, T2 = parseTypenames(typename + "", _2), t2, i3 = -1, n3 = T2.length;
-      if (arguments.length < 2) {
-        while (++i3 < n3) if ((t2 = (typename = T2[i3]).type) && (t2 = get(_2[t2], typename.name))) return t2;
-        return;
+    function abortableFetchDecorator(patchTargets) {
+      if ("function" === typeof patchTargets) {
+        patchTargets = {
+          fetch: patchTargets
+        };
       }
-      if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
-      while (++i3 < n3) {
-        if (t2 = (typename = T2[i3]).type) _2[t2] = set(_2[t2], typename.name, callback);
-        else if (callback == null) for (t2 in _2) _2[t2] = set(_2[t2], typename.name, null);
+      var _patchTargets = patchTargets, fetch3 = _patchTargets.fetch, _patchTargets$Request = _patchTargets.Request, NativeRequest = _patchTargets$Request === void 0 ? fetch3.Request : _patchTargets$Request, NativeAbortController = _patchTargets.AbortController, _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL, __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
+      if (!polyfillNeeded({
+        fetch: fetch3,
+        Request: NativeRequest,
+        AbortController: NativeAbortController,
+        __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
+      })) {
+        return {
+          fetch: fetch3,
+          Request: Request2
+        };
       }
-      return this;
-    },
-    copy: function() {
-      var copy2 = {}, _2 = this._;
-      for (var t2 in _2) copy2[t2] = _2[t2].slice();
-      return new Dispatch(copy2);
-    },
-    call: function(type2, that) {
-      if ((n3 = arguments.length - 2) > 0) for (var args = new Array(n3), i3 = 0, n3, t2; i3 < n3; ++i3) args[i3] = arguments[i3 + 2];
-      if (!this._.hasOwnProperty(type2)) throw new Error("unknown type: " + type2);
-      for (t2 = this._[type2], i3 = 0, n3 = t2.length; i3 < n3; ++i3) t2[i3].value.apply(that, args);
-    },
-    apply: function(type2, that, args) {
-      if (!this._.hasOwnProperty(type2)) throw new Error("unknown type: " + type2);
-      for (var t2 = this._[type2], i3 = 0, n3 = t2.length; i3 < n3; ++i3) t2[i3].value.apply(that, args);
-    }
-  };
-  function get(type2, name) {
-    for (var i3 = 0, n3 = type2.length, c2; i3 < n3; ++i3) {
-      if ((c2 = type2[i3]).name === name) {
-        return c2.value;
+      var Request2 = NativeRequest;
+      if (Request2 && !Request2.prototype.hasOwnProperty("signal") || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
+        Request2 = function Request3(input, init2) {
+          var signal;
+          if (init2 && init2.signal) {
+            signal = init2.signal;
+            delete init2.signal;
+          }
+          var request3 = new NativeRequest(input, init2);
+          if (signal) {
+            Object.defineProperty(request3, "signal", {
+              writable: false,
+              enumerable: false,
+              configurable: true,
+              value: signal
+            });
+          }
+          return request3;
+        };
+        Request2.prototype = NativeRequest.prototype;
       }
+      var realFetch = fetch3;
+      var abortableFetch = function abortableFetch2(input, init2) {
+        var signal = Request2 && Request2.prototype.isPrototypeOf(input) ? input.signal : init2 ? init2.signal : void 0;
+        if (signal) {
+          var abortError;
+          try {
+            abortError = new DOMException("Aborted", "AbortError");
+          } catch (err) {
+            abortError = new Error("Aborted");
+            abortError.name = "AbortError";
+          }
+          if (signal.aborted) {
+            return Promise.reject(abortError);
+          }
+          var cancellation = new Promise(function(_2, reject) {
+            signal.addEventListener("abort", function() {
+              return reject(abortError);
+            }, {
+              once: true
+            });
+          });
+          if (init2 && init2.signal) {
+            delete init2.signal;
+          }
+          return Promise.race([cancellation, realFetch(input, init2)]);
+        }
+        return realFetch(input, init2);
+      };
+      return {
+        fetch: abortableFetch,
+        Request: Request2
+      };
     }
-  }
-  function set(type2, name, callback) {
-    for (var i3 = 0, n3 = type2.length; i3 < n3; ++i3) {
-      if (type2[i3].name === name) {
-        type2[i3] = noop2, type2 = type2.slice(0, i3).concat(type2.slice(i3 + 1));
-        break;
+    (function(self2) {
+      if (!polyfillNeeded(self2)) {
+        return;
       }
-    }
-    if (callback != null) type2.push({ name, value: callback });
-    return type2;
-  }
-  var dispatch_default = dispatch;
-
-  // node_modules/d3-selection/src/namespaces.js
-  var xhtml = "http://www.w3.org/1999/xhtml";
-  var namespaces_default = {
-    svg: "http://www.w3.org/2000/svg",
-    xhtml,
-    xlink: "http://www.w3.org/1999/xlink",
-    xml: "http://www.w3.org/XML/1998/namespace",
-    xmlns: "http://www.w3.org/2000/xmlns/"
-  };
-
-  // node_modules/d3-selection/src/namespace.js
-  function namespace_default(name) {
-    var prefix = name += "", i3 = prefix.indexOf(":");
-    if (i3 >= 0 && (prefix = name.slice(0, i3)) !== "xmlns") name = name.slice(i3 + 1);
-    return namespaces_default.hasOwnProperty(prefix) ? { space: namespaces_default[prefix], local: name } : name;
-  }
-
-  // node_modules/d3-selection/src/creator.js
-  function creatorInherit(name) {
-    return function() {
-      var document2 = this.ownerDocument, uri = this.namespaceURI;
-      return uri === xhtml && document2.documentElement.namespaceURI === xhtml ? document2.createElement(name) : document2.createElementNS(uri, name);
-    };
-  }
-  function creatorFixed(fullname) {
-    return function() {
-      return this.ownerDocument.createElementNS(fullname.space, fullname.local);
-    };
-  }
-  function creator_default(name) {
-    var fullname = namespace_default(name);
-    return (fullname.local ? creatorFixed : creatorInherit)(fullname);
-  }
-
-  // node_modules/d3-selection/src/selector.js
-  function none() {
-  }
-  function selector_default(selector) {
-    return selector == null ? none : function() {
-      return this.querySelector(selector);
-    };
-  }
-
-  // node_modules/d3-selection/src/selection/select.js
-  function select_default(select) {
-    if (typeof select !== "function") select = selector_default(select);
-    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = new Array(n3), node, subnode, i3 = 0; i3 < n3; ++i3) {
-        if ((node = group[i3]) && (subnode = select.call(node, node.__data__, i3, group))) {
-          if ("__data__" in node) subnode.__data__ = node.__data__;
-          subgroup[i3] = subnode;
-        }
+      if (!self2.fetch) {
+        console.warn("fetch() is not available, cannot install abortcontroller-polyfill");
+        return;
       }
-    }
-    return new Selection(subgroups, this._parents);
-  }
-
-  // node_modules/d3-selection/src/array.js
-  function array(x2) {
-    return x2 == null ? [] : Array.isArray(x2) ? x2 : Array.from(x2);
-  }
+      var _abortableFetch = abortableFetchDecorator(self2), fetch3 = _abortableFetch.fetch, Request2 = _abortableFetch.Request;
+      self2.fetch = fetch3;
+      self2.Request = Request2;
+      Object.defineProperty(self2, "AbortController", {
+        writable: true,
+        enumerable: false,
+        configurable: true,
+        value: AbortController2
+      });
+      Object.defineProperty(self2, "AbortSignal", {
+        writable: true,
+        enumerable: false,
+        configurable: true,
+        value: AbortSignal
+      });
+    })(typeof self !== "undefined" ? self : global);
+  });
 
-  // node_modules/d3-selection/src/selectorAll.js
-  function empty() {
-    return [];
-  }
-  function selectorAll_default(selector) {
-    return selector == null ? empty : function() {
-      return this.querySelectorAll(selector);
-    };
-  }
+  // modules/index.js
+  var index_exports = {};
+  __export(index_exports, {
+    LANGUAGE_SUFFIX_REGEX: () => LANGUAGE_SUFFIX_REGEX,
+    LocationManager: () => LocationManager,
+    QAItem: () => QAItem,
+    actionAddEntity: () => actionAddEntity,
+    actionAddMember: () => actionAddMember,
+    actionAddMidpoint: () => actionAddMidpoint,
+    actionAddVertex: () => actionAddVertex,
+    actionChangeMember: () => actionChangeMember,
+    actionChangePreset: () => actionChangePreset,
+    actionChangeTags: () => actionChangeTags,
+    actionCircularize: () => actionCircularize,
+    actionConnect: () => actionConnect,
+    actionCopyEntities: () => actionCopyEntities,
+    actionDeleteMember: () => actionDeleteMember,
+    actionDeleteMultiple: () => actionDeleteMultiple,
+    actionDeleteNode: () => actionDeleteNode,
+    actionDeleteRelation: () => actionDeleteRelation,
+    actionDeleteWay: () => actionDeleteWay,
+    actionDiscardTags: () => actionDiscardTags,
+    actionDisconnect: () => actionDisconnect,
+    actionExtract: () => actionExtract,
+    actionJoin: () => actionJoin,
+    actionMerge: () => actionMerge,
+    actionMergeNodes: () => actionMergeNodes,
+    actionMergePolygon: () => actionMergePolygon,
+    actionMergeRemoteChanges: () => actionMergeRemoteChanges,
+    actionMove: () => actionMove,
+    actionMoveMember: () => actionMoveMember,
+    actionMoveNode: () => actionMoveNode,
+    actionNoop: () => actionNoop,
+    actionOrthogonalize: () => actionOrthogonalize,
+    actionReflect: () => actionReflect,
+    actionRestrictTurn: () => actionRestrictTurn,
+    actionReverse: () => actionReverse,
+    actionRevert: () => actionRevert,
+    actionRotate: () => actionRotate,
+    actionScale: () => actionScale,
+    actionSplit: () => actionSplit,
+    actionStraightenNodes: () => actionStraightenNodes,
+    actionStraightenWay: () => actionStraightenWay,
+    actionUnrestrictTurn: () => actionUnrestrictTurn,
+    actionUpgradeTags: () => actionUpgradeTags,
+    behaviorAddWay: () => behaviorAddWay,
+    behaviorBreathe: () => behaviorBreathe,
+    behaviorDrag: () => behaviorDrag,
+    behaviorDraw: () => behaviorDraw,
+    behaviorDrawWay: () => behaviorDrawWay,
+    behaviorEdit: () => behaviorEdit,
+    behaviorHash: () => behaviorHash,
+    behaviorHover: () => behaviorHover,
+    behaviorLasso: () => behaviorLasso,
+    behaviorOperation: () => behaviorOperation,
+    behaviorPaste: () => behaviorPaste,
+    behaviorSelect: () => behaviorSelect,
+    coreContext: () => coreContext,
+    coreDifference: () => coreDifference,
+    coreFileFetcher: () => coreFileFetcher,
+    coreGraph: () => coreGraph,
+    coreHistory: () => coreHistory,
+    coreLocalizer: () => coreLocalizer,
+    coreTree: () => coreTree,
+    coreUploader: () => coreUploader,
+    coreValidator: () => coreValidator,
+    d3: () => d3,
+    debug: () => debug,
+    dmsCoordinatePair: () => dmsCoordinatePair,
+    dmsMatcher: () => dmsMatcher,
+    fileFetcher: () => _mainFileFetcher,
+    geoAngle: () => geoAngle,
+    geoChooseEdge: () => geoChooseEdge,
+    geoEdgeEqual: () => geoEdgeEqual,
+    geoExtent: () => geoExtent,
+    geoGetSmallestSurroundingRectangle: () => geoGetSmallestSurroundingRectangle,
+    geoHasLineIntersections: () => geoHasLineIntersections,
+    geoHasSelfIntersections: () => geoHasSelfIntersections,
+    geoLatToMeters: () => geoLatToMeters,
+    geoLineIntersection: () => geoLineIntersection,
+    geoLonToMeters: () => geoLonToMeters,
+    geoMetersToLat: () => geoMetersToLat,
+    geoMetersToLon: () => geoMetersToLon,
+    geoMetersToOffset: () => geoMetersToOffset,
+    geoOffsetToMeters: () => geoOffsetToMeters,
+    geoOrthoCalcScore: () => geoOrthoCalcScore,
+    geoOrthoCanOrthogonalize: () => geoOrthoCanOrthogonalize,
+    geoOrthoMaxOffsetAngle: () => geoOrthoMaxOffsetAngle,
+    geoOrthoNormalizedDotProduct: () => geoOrthoNormalizedDotProduct,
+    geoPathHasIntersections: () => geoPathHasIntersections,
+    geoPathIntersections: () => geoPathIntersections,
+    geoPathLength: () => geoPathLength,
+    geoPointInPolygon: () => geoPointInPolygon,
+    geoPolygonContainsPolygon: () => geoPolygonContainsPolygon,
+    geoPolygonIntersectsPolygon: () => geoPolygonIntersectsPolygon,
+    geoRawMercator: () => geoRawMercator,
+    geoRotate: () => geoRotate,
+    geoScaleToZoom: () => geoScaleToZoom,
+    geoSphericalClosestNode: () => geoSphericalClosestNode,
+    geoSphericalDistance: () => geoSphericalDistance,
+    geoVecAdd: () => geoVecAdd,
+    geoVecAngle: () => geoVecAngle,
+    geoVecCross: () => geoVecCross,
+    geoVecDot: () => geoVecDot,
+    geoVecEqual: () => geoVecEqual,
+    geoVecFloor: () => geoVecFloor,
+    geoVecInterp: () => geoVecInterp,
+    geoVecLength: () => geoVecLength,
+    geoVecLengthSquare: () => geoVecLengthSquare,
+    geoVecNormalize: () => geoVecNormalize,
+    geoVecNormalizedDot: () => geoVecNormalizedDot,
+    geoVecProject: () => geoVecProject,
+    geoVecScale: () => geoVecScale,
+    geoVecSubtract: () => geoVecSubtract,
+    geoViewportEdge: () => geoViewportEdge,
+    geoZoomToScale: () => geoZoomToScale,
+    likelyRawNumberFormat: () => likelyRawNumberFormat,
+    localizer: () => _mainLocalizer,
+    locationManager: () => _sharedLocationManager,
+    modeAddArea: () => modeAddArea,
+    modeAddLine: () => modeAddLine,
+    modeAddNote: () => modeAddNote,
+    modeAddPoint: () => modeAddPoint,
+    modeBrowse: () => modeBrowse,
+    modeDragNode: () => modeDragNode,
+    modeDragNote: () => modeDragNote,
+    modeDrawArea: () => modeDrawArea,
+    modeDrawLine: () => modeDrawLine,
+    modeMove: () => modeMove,
+    modeRotate: () => modeRotate,
+    modeSave: () => modeSave,
+    modeSelect: () => modeSelect,
+    modeSelectData: () => modeSelectData,
+    modeSelectError: () => modeSelectError,
+    modeSelectNote: () => modeSelectNote,
+    operationCircularize: () => operationCircularize,
+    operationContinue: () => operationContinue,
+    operationCopy: () => operationCopy,
+    operationDelete: () => operationDelete,
+    operationDisconnect: () => operationDisconnect,
+    operationDowngrade: () => operationDowngrade,
+    operationExtract: () => operationExtract,
+    operationMerge: () => operationMerge,
+    operationMove: () => operationMove,
+    operationOrthogonalize: () => operationOrthogonalize,
+    operationPaste: () => operationPaste,
+    operationReflectLong: () => operationReflectLong,
+    operationReflectShort: () => operationReflectShort,
+    operationReverse: () => operationReverse,
+    operationRotate: () => operationRotate,
+    operationSplit: () => operationSplit,
+    operationStraighten: () => operationStraighten,
+    osmAreaKeys: () => osmAreaKeys,
+    osmChangeset: () => osmChangeset,
+    osmEntity: () => osmEntity,
+    osmFlowingWaterwayTagValues: () => osmFlowingWaterwayTagValues,
+    osmInferRestriction: () => osmInferRestriction,
+    osmIntersection: () => osmIntersection,
+    osmIsInterestingTag: () => osmIsInterestingTag,
+    osmJoinWays: () => osmJoinWays,
+    osmLanes: () => osmLanes,
+    osmLifecyclePrefixes: () => osmLifecyclePrefixes,
+    osmNode: () => osmNode,
+    osmNodeGeometriesForTags: () => osmNodeGeometriesForTags,
+    osmNote: () => osmNote,
+    osmOneWayTags: () => osmOneWayTags,
+    osmPavedTags: () => osmPavedTags,
+    osmPointTags: () => osmPointTags,
+    osmRailwayTrackTagValues: () => osmRailwayTrackTagValues,
+    osmRelation: () => osmRelation,
+    osmRemoveLifecyclePrefix: () => osmRemoveLifecyclePrefix,
+    osmRoutableHighwayTagValues: () => osmRoutableHighwayTagValues,
+    osmSetAreaKeys: () => osmSetAreaKeys,
+    osmSetPointTags: () => osmSetPointTags,
+    osmSetVertexTags: () => osmSetVertexTags,
+    osmTagSuggestingArea: () => osmTagSuggestingArea,
+    osmTurn: () => osmTurn,
+    osmVertexTags: () => osmVertexTags,
+    osmWay: () => osmWay,
+    prefs: () => corePreferences,
+    presetCategory: () => presetCategory,
+    presetCollection: () => presetCollection,
+    presetField: () => presetField,
+    presetIndex: () => presetIndex,
+    presetManager: () => _mainPresetIndex,
+    presetPreset: () => presetPreset,
+    rendererBackground: () => rendererBackground,
+    rendererBackgroundSource: () => rendererBackgroundSource,
+    rendererFeatures: () => rendererFeatures,
+    rendererMap: () => rendererMap,
+    rendererPhotos: () => rendererPhotos,
+    rendererTileLayer: () => rendererTileLayer,
+    serviceKartaview: () => kartaview_default,
+    serviceKeepRight: () => keepRight_default,
+    serviceMapRules: () => maprules_default,
+    serviceMapilio: () => mapilio_default,
+    serviceMapillary: () => mapillary_default,
+    serviceNominatim: () => nominatim_default,
+    serviceNsi: () => nsi_default,
+    serviceOsm: () => osm_default,
+    serviceOsmWikibase: () => osm_wikibase_default,
+    serviceOsmose: () => osmose_default,
+    servicePanoramax: () => panoramax_default,
+    serviceStreetside: () => streetside_default,
+    serviceTaginfo: () => taginfo_default,
+    serviceVectorTile: () => vector_tile_default,
+    serviceVegbilder: () => vegbilder_default,
+    serviceWikidata: () => wikidata_default,
+    serviceWikipedia: () => wikipedia_default,
+    services: () => services,
+    setDebug: () => setDebug,
+    svgAreas: () => svgAreas,
+    svgData: () => svgData,
+    svgDebug: () => svgDebug,
+    svgDefs: () => svgDefs,
+    svgGeolocate: () => svgGeolocate,
+    svgIcon: () => svgIcon,
+    svgKartaviewImages: () => svgKartaviewImages,
+    svgKeepRight: () => svgKeepRight,
+    svgLabels: () => svgLabels,
+    svgLayers: () => svgLayers,
+    svgLines: () => svgLines,
+    svgMapilioImages: () => svgMapilioImages,
+    svgMapillaryImages: () => svgMapillaryImages,
+    svgMapillarySigns: () => svgMapillarySigns,
+    svgMarkerSegments: () => svgMarkerSegments,
+    svgMidpoints: () => svgMidpoints,
+    svgNotes: () => svgNotes,
+    svgOsm: () => svgOsm,
+    svgPanoramaxImages: () => svgPanoramaxImages,
+    svgPassiveVertex: () => svgPassiveVertex,
+    svgPath: () => svgPath,
+    svgPointTransform: () => svgPointTransform,
+    svgPoints: () => svgPoints,
+    svgRelationMemberTags: () => svgRelationMemberTags,
+    svgSegmentWay: () => svgSegmentWay,
+    svgStreetside: () => svgStreetside,
+    svgTagClasses: () => svgTagClasses,
+    svgTagPattern: () => svgTagPattern,
+    svgTouch: () => svgTouch,
+    svgTurns: () => svgTurns,
+    svgVegbilder: () => svgVegbilder,
+    svgVertices: () => svgVertices,
+    t: () => _t,
+    uiAccount: () => uiAccount,
+    uiAttribution: () => uiAttribution,
+    uiChangesetEditor: () => uiChangesetEditor,
+    uiCmd: () => uiCmd,
+    uiCombobox: () => uiCombobox,
+    uiCommit: () => uiCommit,
+    uiCommitWarnings: () => uiCommitWarnings,
+    uiConfirm: () => uiConfirm,
+    uiConflicts: () => uiConflicts,
+    uiContributors: () => uiContributors,
+    uiCurtain: () => uiCurtain,
+    uiDataEditor: () => uiDataEditor,
+    uiDataHeader: () => uiDataHeader,
+    uiDisclosure: () => uiDisclosure,
+    uiEditMenu: () => uiEditMenu,
+    uiEntityEditor: () => uiEntityEditor,
+    uiFeatureInfo: () => uiFeatureInfo,
+    uiFeatureList: () => uiFeatureList,
+    uiField: () => uiField,
+    uiFieldAccess: () => uiFieldAccess,
+    uiFieldAddress: () => uiFieldAddress,
+    uiFieldCheck: () => uiFieldCheck,
+    uiFieldColour: () => uiFieldText,
+    uiFieldCombo: () => uiFieldCombo,
+    uiFieldDefaultCheck: () => uiFieldCheck,
+    uiFieldDirectionalCombo: () => uiFieldDirectionalCombo,
+    uiFieldEmail: () => uiFieldText,
+    uiFieldHelp: () => uiFieldHelp,
+    uiFieldIdentifier: () => uiFieldText,
+    uiFieldLanes: () => uiFieldLanes,
+    uiFieldLocalized: () => uiFieldLocalized,
+    uiFieldManyCombo: () => uiFieldCombo,
+    uiFieldMultiCombo: () => uiFieldCombo,
+    uiFieldNetworkCombo: () => uiFieldCombo,
+    uiFieldNumber: () => uiFieldText,
+    uiFieldOnewayCheck: () => uiFieldCheck,
+    uiFieldRadio: () => uiFieldRadio,
+    uiFieldRestrictions: () => uiFieldRestrictions,
+    uiFieldRoadheight: () => uiFieldRoadheight,
+    uiFieldRoadspeed: () => uiFieldRoadspeed,
+    uiFieldSemiCombo: () => uiFieldCombo,
+    uiFieldStructureRadio: () => uiFieldRadio,
+    uiFieldTel: () => uiFieldText,
+    uiFieldText: () => uiFieldText,
+    uiFieldTextarea: () => uiFieldTextarea,
+    uiFieldTypeCombo: () => uiFieldCombo,
+    uiFieldUrl: () => uiFieldText,
+    uiFieldWikidata: () => uiFieldWikidata,
+    uiFieldWikipedia: () => uiFieldWikipedia,
+    uiFields: () => uiFields,
+    uiFlash: () => uiFlash,
+    uiFormFields: () => uiFormFields,
+    uiFullScreen: () => uiFullScreen,
+    uiGeolocate: () => uiGeolocate,
+    uiInfo: () => uiInfo,
+    uiInfoPanels: () => uiInfoPanels,
+    uiInit: () => uiInit,
+    uiInspector: () => uiInspector,
+    uiIntro: () => uiIntro,
+    uiIssuesInfo: () => uiIssuesInfo,
+    uiKeepRightDetails: () => uiKeepRightDetails,
+    uiKeepRightEditor: () => uiKeepRightEditor,
+    uiKeepRightHeader: () => uiKeepRightHeader,
+    uiLasso: () => uiLasso,
+    uiLengthIndicator: () => uiLengthIndicator,
+    uiLoading: () => uiLoading,
+    uiMapInMap: () => uiMapInMap,
+    uiModal: () => uiModal,
+    uiNoteComments: () => uiNoteComments,
+    uiNoteEditor: () => uiNoteEditor,
+    uiNoteHeader: () => uiNoteHeader,
+    uiNoteReport: () => uiNoteReport,
+    uiNotice: () => uiNotice,
+    uiPaneBackground: () => uiPaneBackground,
+    uiPaneHelp: () => uiPaneHelp,
+    uiPaneIssues: () => uiPaneIssues,
+    uiPaneMapData: () => uiPaneMapData,
+    uiPanePreferences: () => uiPanePreferences,
+    uiPanelBackground: () => uiPanelBackground,
+    uiPanelHistory: () => uiPanelHistory,
+    uiPanelLocation: () => uiPanelLocation,
+    uiPanelMeasurement: () => uiPanelMeasurement,
+    uiPopover: () => uiPopover,
+    uiPresetIcon: () => uiPresetIcon,
+    uiPresetList: () => uiPresetList,
+    uiRestore: () => uiRestore,
+    uiScale: () => uiScale,
+    uiSectionBackgroundDisplayOptions: () => uiSectionBackgroundDisplayOptions,
+    uiSectionBackgroundList: () => uiSectionBackgroundList,
+    uiSectionBackgroundOffset: () => uiSectionBackgroundOffset,
+    uiSectionChanges: () => uiSectionChanges,
+    uiSectionDataLayers: () => uiSectionDataLayers,
+    uiSectionEntityIssues: () => uiSectionEntityIssues,
+    uiSectionFeatureType: () => uiSectionFeatureType,
+    uiSectionMapFeatures: () => uiSectionMapFeatures,
+    uiSectionMapStyleOptions: () => uiSectionMapStyleOptions,
+    uiSectionOverlayList: () => uiSectionOverlayList,
+    uiSectionPhotoOverlays: () => uiSectionPhotoOverlays,
+    uiSectionPresetFields: () => uiSectionPresetFields,
+    uiSectionPrivacy: () => uiSectionPrivacy,
+    uiSectionRawMemberEditor: () => uiSectionRawMemberEditor,
+    uiSectionRawMembershipEditor: () => uiSectionRawMembershipEditor,
+    uiSectionRawTagEditor: () => uiSectionRawTagEditor,
+    uiSectionSelectionList: () => uiSectionSelectionList,
+    uiSectionValidationIssues: () => uiSectionValidationIssues,
+    uiSectionValidationOptions: () => uiSectionValidationOptions,
+    uiSectionValidationRules: () => uiSectionValidationRules,
+    uiSectionValidationStatus: () => uiSectionValidationStatus,
+    uiSettingsCustomBackground: () => uiSettingsCustomBackground,
+    uiSettingsCustomData: () => uiSettingsCustomData,
+    uiSidebar: () => uiSidebar,
+    uiSourceSwitch: () => uiSourceSwitch,
+    uiSpinner: () => uiSpinner,
+    uiSplash: () => uiSplash,
+    uiStatus: () => uiStatus,
+    uiSuccess: () => uiSuccess,
+    uiTagReference: () => uiTagReference,
+    uiToggle: () => uiToggle,
+    uiTooltip: () => uiTooltip,
+    uiVersion: () => uiVersion,
+    uiViewOnKeepRight: () => uiViewOnKeepRight,
+    uiViewOnOSM: () => uiViewOnOSM,
+    uiZoom: () => uiZoom,
+    utilAesDecrypt: () => utilAesDecrypt,
+    utilAesEncrypt: () => utilAesEncrypt,
+    utilArrayChunk: () => utilArrayChunk,
+    utilArrayDifference: () => utilArrayDifference,
+    utilArrayFlatten: () => utilArrayFlatten,
+    utilArrayGroupBy: () => utilArrayGroupBy,
+    utilArrayIdentical: () => utilArrayIdentical,
+    utilArrayIntersection: () => utilArrayIntersection,
+    utilArrayUnion: () => utilArrayUnion,
+    utilArrayUniq: () => utilArrayUniq,
+    utilArrayUniqBy: () => utilArrayUniqBy,
+    utilAsyncMap: () => utilAsyncMap,
+    utilCleanOsmString: () => utilCleanOsmString,
+    utilCleanTags: () => utilCleanTags,
+    utilCombinedTags: () => utilCombinedTags,
+    utilCompareIDs: () => utilCompareIDs,
+    utilDeepMemberSelector: () => utilDeepMemberSelector,
+    utilDetect: () => utilDetect,
+    utilDisplayName: () => utilDisplayName,
+    utilDisplayNameForPath: () => utilDisplayNameForPath,
+    utilDisplayType: () => utilDisplayType,
+    utilEditDistance: () => utilEditDistance,
+    utilEntityAndDeepMemberIDs: () => utilEntityAndDeepMemberIDs,
+    utilEntityOrDeepMemberSelector: () => utilEntityOrDeepMemberSelector,
+    utilEntityOrMemberSelector: () => utilEntityOrMemberSelector,
+    utilEntityRoot: () => utilEntityRoot,
+    utilEntitySelector: () => utilEntitySelector,
+    utilFastMouse: () => utilFastMouse,
+    utilFunctor: () => utilFunctor,
+    utilGetAllNodes: () => utilGetAllNodes,
+    utilGetSetValue: () => utilGetSetValue,
+    utilHashcode: () => utilHashcode,
+    utilHighlightEntities: () => utilHighlightEntities,
+    utilKeybinding: () => utilKeybinding,
+    utilNoAuto: () => utilNoAuto,
+    utilObjectOmit: () => utilObjectOmit,
+    utilOldestID: () => utilOldestID,
+    utilPrefixCSSProperty: () => utilPrefixCSSProperty,
+    utilPrefixDOMProperty: () => utilPrefixDOMProperty,
+    utilQsString: () => utilQsString,
+    utilRebind: () => utilRebind,
+    utilSafeClassName: () => utilSafeClassName,
+    utilSessionMutex: () => utilSessionMutex,
+    utilSetTransform: () => utilSetTransform,
+    utilStringQs: () => utilStringQs,
+    utilTagDiff: () => utilTagDiff,
+    utilTagText: () => utilTagText,
+    utilTiler: () => utilTiler,
+    utilTotalExtent: () => utilTotalExtent,
+    utilTriggerEvent: () => utilTriggerEvent,
+    utilUnicodeCharsCount: () => utilUnicodeCharsCount,
+    utilUnicodeCharsTruncated: () => utilUnicodeCharsTruncated,
+    utilUniqueDomId: () => utilUniqueDomId,
+    utilWrap: () => utilWrap,
+    validationAlmostJunction: () => validationAlmostJunction,
+    validationCloseNodes: () => validationCloseNodes,
+    validationCrossingWays: () => validationCrossingWays,
+    validationDisconnectedWay: () => validationDisconnectedWay,
+    validationFormatting: () => validationFormatting,
+    validationHelpRequest: () => validationHelpRequest,
+    validationImpossibleOneway: () => validationImpossibleOneway,
+    validationIncompatibleSource: () => validationIncompatibleSource,
+    validationMaprules: () => validationMaprules,
+    validationMismatchedGeometry: () => validationMismatchedGeometry,
+    validationMissingRole: () => validationMissingRole,
+    validationMissingTag: () => validationMissingTag,
+    validationMutuallyExclusiveTags: () => validationMutuallyExclusiveTags,
+    validationOutdatedTags: () => validationOutdatedTags,
+    validationPrivateData: () => validationPrivateData,
+    validationSuspiciousName: () => validationSuspiciousName,
+    validationUnsquareWay: () => validationUnsquareWay
+  });
 
-  // node_modules/d3-selection/src/selection/selectAll.js
-  function arrayAll(select) {
-    return function() {
-      return array(select.apply(this, arguments));
+  // modules/actions/add_entity.js
+  function actionAddEntity(way) {
+    return function(graph) {
+      return graph.replace(way);
     };
   }
-  function selectAll_default(select) {
-    if (typeof select === "function") select = arrayAll(select);
-    else select = selectorAll_default(select);
-    for (var groups = this._groups, m2 = groups.length, subgroups = [], parents = [], j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group[i3]) {
-          subgroups.push(select.call(node, node.__data__, i3, group));
-          parents.push(node);
-        }
-      }
-    }
-    return new Selection(subgroups, parents);
-  }
 
-  // node_modules/d3-selection/src/matcher.js
-  function matcher_default(selector) {
-    return function() {
-      return this.matches(selector);
-    };
-  }
-  function childMatcher(selector) {
-    return function(node) {
-      return node.matches(selector);
+  // modules/actions/reverse.js
+  function actionReverse(entityID, options2) {
+    var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
+    var numeric = /^([+\-]?)(?=[\d.])/;
+    var directionKey = /direction$/;
+    var turn_lanes = /^turn:lanes:?/;
+    var keyReplacements = [
+      [/:right$/, ":left"],
+      [/:left$/, ":right"],
+      [/:forward$/, ":backward"],
+      [/:backward$/, ":forward"],
+      [/:right:/, ":left:"],
+      [/:left:/, ":right:"],
+      [/:forward:/, ":backward:"],
+      [/:backward:/, ":forward:"]
+    ];
+    var valueReplacements = {
+      left: "right",
+      right: "left",
+      up: "down",
+      down: "up",
+      forward: "backward",
+      backward: "forward",
+      forwards: "backward",
+      backwards: "forward"
     };
-  }
-
-  // node_modules/d3-selection/src/selection/selectChild.js
-  var find = Array.prototype.find;
-  function childFind(match) {
-    return function() {
-      return find.call(this.children, match);
+    const valueReplacementsExceptions = {
+      "side": [
+        { highway: "cyclist_waiting_aid" }
+      ]
     };
-  }
-  function childFirst() {
-    return this.firstElementChild;
-  }
-  function selectChild_default(match) {
-    return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match)));
-  }
-
-  // node_modules/d3-selection/src/selection/selectChildren.js
-  var filter = Array.prototype.filter;
-  function children() {
-    return Array.from(this.children);
-  }
-  function childrenFilter(match) {
-    return function() {
-      return filter.call(this.children, match);
+    var roleReplacements = {
+      forward: "backward",
+      backward: "forward",
+      forwards: "backward",
+      backwards: "forward"
     };
-  }
-  function selectChildren_default(match) {
-    return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match)));
-  }
-
-  // node_modules/d3-selection/src/selection/filter.js
-  function filter_default(match) {
-    if (typeof match !== "function") match = matcher_default(match);
-    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = [], node, i3 = 0; i3 < n3; ++i3) {
-        if ((node = group[i3]) && match.call(node, node.__data__, i3, group)) {
-          subgroup.push(node);
-        }
-      }
-    }
-    return new Selection(subgroups, this._parents);
-  }
-
-  // node_modules/d3-selection/src/selection/sparse.js
-  function sparse_default(update) {
-    return new Array(update.length);
-  }
-
-  // node_modules/d3-selection/src/selection/enter.js
-  function enter_default() {
-    return new Selection(this._enter || this._groups.map(sparse_default), this._parents);
-  }
-  function EnterNode(parent, datum2) {
-    this.ownerDocument = parent.ownerDocument;
-    this.namespaceURI = parent.namespaceURI;
-    this._next = null;
-    this._parent = parent;
-    this.__data__ = datum2;
-  }
-  EnterNode.prototype = {
-    constructor: EnterNode,
-    appendChild: function(child) {
-      return this._parent.insertBefore(child, this._next);
-    },
-    insertBefore: function(child, next) {
-      return this._parent.insertBefore(child, next);
-    },
-    querySelector: function(selector) {
-      return this._parent.querySelector(selector);
-    },
-    querySelectorAll: function(selector) {
-      return this._parent.querySelectorAll(selector);
-    }
-  };
-
-  // node_modules/d3-selection/src/constant.js
-  function constant_default(x2) {
-    return function() {
-      return x2;
+    var onewayReplacements = {
+      yes: "-1",
+      "1": "-1",
+      "-1": "yes"
     };
-  }
-
-  // node_modules/d3-selection/src/selection/data.js
-  function bindIndex(parent, group, enter, update, exit, data) {
-    var i3 = 0, node, groupLength = group.length, dataLength = data.length;
-    for (; i3 < dataLength; ++i3) {
-      if (node = group[i3]) {
-        node.__data__ = data[i3];
-        update[i3] = node;
-      } else {
-        enter[i3] = new EnterNode(parent, data[i3]);
-      }
-    }
-    for (; i3 < groupLength; ++i3) {
-      if (node = group[i3]) {
-        exit[i3] = node;
-      }
-    }
-  }
-  function bindKey(parent, group, enter, update, exit, data, key) {
-    var i3, node, nodeByKeyValue = /* @__PURE__ */ new Map(), groupLength = group.length, dataLength = data.length, keyValues = new Array(groupLength), keyValue;
-    for (i3 = 0; i3 < groupLength; ++i3) {
-      if (node = group[i3]) {
-        keyValues[i3] = keyValue = key.call(node, node.__data__, i3, group) + "";
-        if (nodeByKeyValue.has(keyValue)) {
-          exit[i3] = node;
-        } else {
-          nodeByKeyValue.set(keyValue, node);
-        }
-      }
-    }
-    for (i3 = 0; i3 < dataLength; ++i3) {
-      keyValue = key.call(parent, data[i3], i3, data) + "";
-      if (node = nodeByKeyValue.get(keyValue)) {
-        update[i3] = node;
-        node.__data__ = data[i3];
-        nodeByKeyValue.delete(keyValue);
-      } else {
-        enter[i3] = new EnterNode(parent, data[i3]);
-      }
-    }
-    for (i3 = 0; i3 < groupLength; ++i3) {
-      if ((node = group[i3]) && nodeByKeyValue.get(keyValues[i3]) === node) {
-        exit[i3] = node;
-      }
-    }
-  }
-  function datum(node) {
-    return node.__data__;
-  }
-  function data_default(value, key) {
-    if (!arguments.length) return Array.from(this, datum);
-    var bind = key ? bindKey : bindIndex, parents = this._parents, groups = this._groups;
-    if (typeof value !== "function") value = constant_default(value);
-    for (var m2 = groups.length, update = new Array(m2), enter = new Array(m2), exit = new Array(m2), j2 = 0; j2 < m2; ++j2) {
-      var parent = parents[j2], group = groups[j2], groupLength = group.length, data = arraylike(value.call(parent, parent && parent.__data__, j2, parents)), dataLength = data.length, enterGroup = enter[j2] = new Array(dataLength), updateGroup = update[j2] = new Array(dataLength), exitGroup = exit[j2] = new Array(groupLength);
-      bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
-      for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
-        if (previous = enterGroup[i0]) {
-          if (i0 >= i1) i1 = i0 + 1;
-          while (!(next = updateGroup[i1]) && ++i1 < dataLength) ;
-          previous._next = next || null;
+    var compassReplacements = {
+      N: "S",
+      NNE: "SSW",
+      NE: "SW",
+      ENE: "WSW",
+      E: "W",
+      ESE: "WNW",
+      SE: "NW",
+      SSE: "NNW",
+      S: "N",
+      SSW: "NNE",
+      SW: "NE",
+      WSW: "ENE",
+      W: "E",
+      WNW: "ESE",
+      NW: "SE",
+      NNW: "SSE"
+    };
+    function reverseKey(key) {
+      for (var i3 = 0; i3 < keyReplacements.length; ++i3) {
+        var replacement = keyReplacements[i3];
+        if (replacement[0].test(key)) {
+          return key.replace(replacement[0], replacement[1]);
         }
       }
+      return key;
     }
-    update = new Selection(update, parents);
-    update._enter = enter;
-    update._exit = exit;
-    return update;
-  }
-  function arraylike(data) {
-    return typeof data === "object" && "length" in data ? data : Array.from(data);
-  }
-
-  // node_modules/d3-selection/src/selection/exit.js
-  function exit_default() {
-    return new Selection(this._exit || this._groups.map(sparse_default), this._parents);
-  }
-
-  // node_modules/d3-selection/src/selection/join.js
-  function join_default(onenter, onupdate, onexit) {
-    var enter = this.enter(), update = this, exit = this.exit();
-    if (typeof onenter === "function") {
-      enter = onenter(enter);
-      if (enter) enter = enter.selection();
-    } else {
-      enter = enter.append(onenter + "");
-    }
-    if (onupdate != null) {
-      update = onupdate(update);
-      if (update) update = update.selection();
-    }
-    if (onexit == null) exit.remove();
-    else onexit(exit);
-    return enter && update ? enter.merge(update).order() : update;
-  }
-
-  // node_modules/d3-selection/src/selection/merge.js
-  function merge_default(context) {
-    var selection2 = context.selection ? context.selection() : context;
-    for (var groups0 = this._groups, groups1 = selection2._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j2 = 0; j2 < m2; ++j2) {
-      for (var group0 = groups0[j2], group1 = groups1[j2], n3 = group0.length, merge2 = merges[j2] = new Array(n3), node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group0[i3] || group1[i3]) {
-          merge2[i3] = node;
-        }
+    function reverseValue(key, value, includeAbsolute, allTags) {
+      if (ignoreKey.test(key)) return value;
+      if (turn_lanes.test(key)) {
+        return value;
+      } else if (key === "incline" && numeric.test(value)) {
+        return value.replace(numeric, function(_2, sign2) {
+          return sign2 === "-" ? "" : "-";
+        });
+      } else if (options2 && options2.reverseOneway && key === "oneway") {
+        return onewayReplacements[value] || value;
+      } else if (includeAbsolute && directionKey.test(key)) {
+        return value.split(";").map((value2) => {
+          if (compassReplacements[value2]) return compassReplacements[value2];
+          var degrees3 = Number(value2);
+          if (isFinite(degrees3)) {
+            if (degrees3 < 180) {
+              degrees3 += 180;
+            } else {
+              degrees3 -= 180;
+            }
+            return degrees3.toString();
+          } else {
+            return valueReplacements[value2] || value2;
+          }
+        }).join(";");
       }
-    }
-    for (; j2 < m0; ++j2) {
-      merges[j2] = groups0[j2];
-    }
-    return new Selection(merges, this._parents);
-  }
-
-  // node_modules/d3-selection/src/selection/order.js
-  function order_default() {
-    for (var groups = this._groups, j2 = -1, m2 = groups.length; ++j2 < m2; ) {
-      for (var group = groups[j2], i3 = group.length - 1, next = group[i3], node; --i3 >= 0; ) {
-        if (node = group[i3]) {
-          if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
-          next = node;
-        }
+      if (valueReplacementsExceptions[key] && valueReplacementsExceptions[key].some(
+        (exceptionTags) => Object.keys(exceptionTags).every((k2) => {
+          const v2 = exceptionTags[k2];
+          return allTags[k2] && (v2 === "*" || allTags[k2] === v2);
+        })
+      )) {
+        return value;
       }
+      return valueReplacements[value] || value;
     }
-    return this;
-  }
-
-  // node_modules/d3-selection/src/selection/sort.js
-  function sort_default(compare2) {
-    if (!compare2) compare2 = ascending2;
-    function compareNode(a2, b2) {
-      return a2 && b2 ? compare2(a2.__data__, b2.__data__) : !a2 - !b2;
-    }
-    for (var groups = this._groups, m2 = groups.length, sortgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, sortgroup = sortgroups[j2] = new Array(n3), node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group[i3]) {
-          sortgroup[i3] = node;
+    function reverseNodeTags(graph, nodeIDs) {
+      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
+        var node = graph.hasEntity(nodeIDs[i3]);
+        if (!node || !Object.keys(node.tags).length) continue;
+        var tags = {};
+        for (var key in node.tags) {
+          tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID, node.tags);
         }
+        graph = graph.replace(node.update({ tags }));
       }
-      sortgroup.sort(compareNode);
+      return graph;
     }
-    return new Selection(sortgroups, this._parents).order();
-  }
-  function ascending2(a2, b2) {
-    return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
-  }
-
-  // node_modules/d3-selection/src/selection/call.js
-  function call_default() {
-    var callback = arguments[0];
-    arguments[0] = this;
-    callback.apply(null, arguments);
-    return this;
-  }
-
-  // node_modules/d3-selection/src/selection/nodes.js
-  function nodes_default() {
-    return Array.from(this);
-  }
-
-  // node_modules/d3-selection/src/selection/node.js
-  function node_default() {
-    for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) {
-      for (var group = groups[j2], i3 = 0, n3 = group.length; i3 < n3; ++i3) {
-        var node = group[i3];
-        if (node) return node;
+    function reverseWay(graph, way) {
+      var nodes = way.nodes.slice().reverse();
+      var tags = {};
+      var role;
+      for (var key in way.tags) {
+        tags[reverseKey(key)] = reverseValue(key, way.tags[key], false, way.tags);
       }
+      graph.parentRelations(way).forEach(function(relation) {
+        relation.members.forEach(function(member, index) {
+          if (member.id === way.id && (role = roleReplacements[member.role])) {
+            relation = relation.updateMember({ role }, index);
+            graph = graph.replace(relation);
+          }
+        });
+      });
+      return reverseNodeTags(graph, nodes).replace(way.update({ nodes, tags }));
     }
-    return null;
-  }
-
-  // node_modules/d3-selection/src/selection/size.js
-  function size_default() {
-    let size = 0;
-    for (const node of this) ++size;
-    return size;
-  }
-
-  // node_modules/d3-selection/src/selection/empty.js
-  function empty_default() {
-    return !this.node();
-  }
-
-  // node_modules/d3-selection/src/selection/each.js
-  function each_default(callback) {
-    for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) {
-      for (var group = groups[j2], i3 = 0, n3 = group.length, node; i3 < n3; ++i3) {
-        if (node = group[i3]) callback.call(node, node.__data__, i3, group);
+    var action = function(graph) {
+      var entity = graph.entity(entityID);
+      if (entity.type === "way") {
+        return reverseWay(graph, entity);
       }
-    }
-    return this;
-  }
-
-  // node_modules/d3-selection/src/selection/attr.js
-  function attrRemove(name) {
-    return function() {
-      this.removeAttribute(name);
-    };
-  }
-  function attrRemoveNS(fullname) {
-    return function() {
-      this.removeAttributeNS(fullname.space, fullname.local);
-    };
-  }
-  function attrConstant(name, value) {
-    return function() {
-      this.setAttribute(name, value);
-    };
-  }
-  function attrConstantNS(fullname, value) {
-    return function() {
-      this.setAttributeNS(fullname.space, fullname.local, value);
+      return reverseNodeTags(graph, [entityID]);
     };
-  }
-  function attrFunction(name, value) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      if (v2 == null) this.removeAttribute(name);
-      else this.setAttribute(name, v2);
+    action.disabled = function(graph) {
+      var entity = graph.hasEntity(entityID);
+      if (!entity || entity.type === "way") return false;
+      for (var key in entity.tags) {
+        var value = entity.tags[key];
+        if (reverseKey(key) !== key || reverseValue(key, value, true, entity.tags) !== value) {
+          return false;
+        }
+      }
+      return "nondirectional_node";
     };
-  }
-  function attrFunctionNS(fullname, value) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      if (v2 == null) this.removeAttributeNS(fullname.space, fullname.local);
-      else this.setAttributeNS(fullname.space, fullname.local, v2);
+    action.entityID = function() {
+      return entityID;
     };
-  }
-  function attr_default(name, value) {
-    var fullname = namespace_default(name);
-    if (arguments.length < 2) {
-      var node = this.node();
-      return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);
-    }
-    return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value));
-  }
-
-  // node_modules/d3-selection/src/window.js
-  function window_default(node) {
-    return node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView;
+    return action;
   }
 
-  // node_modules/d3-selection/src/selection/style.js
-  function styleRemove(name) {
-    return function() {
-      this.style.removeProperty(name);
-    };
-  }
-  function styleConstant(name, value, priority) {
-    return function() {
-      this.style.setProperty(name, value, priority);
-    };
-  }
-  function styleFunction(name, value, priority) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      if (v2 == null) this.style.removeProperty(name);
-      else this.style.setProperty(name, v2, priority);
-    };
-  }
-  function style_default(name, value, priority) {
-    return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name);
-  }
-  function styleValue(node, name) {
-    return node.style.getPropertyValue(name) || window_default(node).getComputedStyle(node, null).getPropertyValue(name);
+  // node_modules/d3-array/src/ascending.js
+  function ascending(a2, b2) {
+    return a2 == null || b2 == null ? NaN : a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
   }
 
-  // node_modules/d3-selection/src/selection/property.js
-  function propertyRemove(name) {
-    return function() {
-      delete this[name];
-    };
-  }
-  function propertyConstant(name, value) {
-    return function() {
-      this[name] = value;
-    };
-  }
-  function propertyFunction(name, value) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      if (v2 == null) delete this[name];
-      else this[name] = v2;
-    };
-  }
-  function property_default(name, value) {
-    return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name];
+  // node_modules/d3-array/src/descending.js
+  function descending(a2, b2) {
+    return a2 == null || b2 == null ? NaN : b2 < a2 ? -1 : b2 > a2 ? 1 : b2 >= a2 ? 0 : NaN;
   }
 
-  // node_modules/d3-selection/src/selection/classed.js
-  function classArray(string) {
-    return string.trim().split(/^|\s+/);
-  }
-  function classList(node) {
-    return node.classList || new ClassList(node);
-  }
-  function ClassList(node) {
-    this._node = node;
-    this._names = classArray(node.getAttribute("class") || "");
-  }
-  ClassList.prototype = {
-    add: function(name) {
-      var i3 = this._names.indexOf(name);
-      if (i3 < 0) {
-        this._names.push(name);
-        this._node.setAttribute("class", this._names.join(" "));
-      }
-    },
-    remove: function(name) {
-      var i3 = this._names.indexOf(name);
-      if (i3 >= 0) {
-        this._names.splice(i3, 1);
-        this._node.setAttribute("class", this._names.join(" "));
-      }
-    },
-    contains: function(name) {
-      return this._names.indexOf(name) >= 0;
+  // node_modules/d3-array/src/bisector.js
+  function bisector(f2) {
+    let compare1, compare2, delta;
+    if (f2.length !== 2) {
+      compare1 = ascending;
+      compare2 = (d2, x2) => ascending(f2(d2), x2);
+      delta = (d2, x2) => f2(d2) - x2;
+    } else {
+      compare1 = f2 === ascending || f2 === descending ? f2 : zero;
+      compare2 = f2;
+      delta = f2;
     }
-  };
-  function classedAdd(node, names) {
-    var list2 = classList(node), i3 = -1, n3 = names.length;
-    while (++i3 < n3) list2.add(names[i3]);
-  }
-  function classedRemove(node, names) {
-    var list2 = classList(node), i3 = -1, n3 = names.length;
-    while (++i3 < n3) list2.remove(names[i3]);
-  }
-  function classedTrue(names) {
-    return function() {
-      classedAdd(this, names);
-    };
-  }
-  function classedFalse(names) {
-    return function() {
-      classedRemove(this, names);
-    };
-  }
-  function classedFunction(names, value) {
-    return function() {
-      (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
-    };
-  }
-  function classed_default(name, value) {
-    var names = classArray(name + "");
-    if (arguments.length < 2) {
-      var list2 = classList(this.node()), i3 = -1, n3 = names.length;
-      while (++i3 < n3) if (!list2.contains(names[i3])) return false;
-      return true;
+    function left(a2, x2, lo = 0, hi = a2.length) {
+      if (lo < hi) {
+        if (compare1(x2, x2) !== 0) return hi;
+        do {
+          const mid = lo + hi >>> 1;
+          if (compare2(a2[mid], x2) < 0) lo = mid + 1;
+          else hi = mid;
+        } while (lo < hi);
+      }
+      return lo;
     }
-    return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));
-  }
-
-  // node_modules/d3-selection/src/selection/text.js
-  function textRemove() {
-    this.textContent = "";
-  }
-  function textConstant(value) {
-    return function() {
-      this.textContent = value;
-    };
-  }
-  function textFunction(value) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      this.textContent = v2 == null ? "" : v2;
-    };
-  }
-  function text_default(value) {
-    return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent;
-  }
-
-  // node_modules/d3-selection/src/selection/html.js
-  function htmlRemove() {
-    this.innerHTML = "";
-  }
-  function htmlConstant(value) {
-    return function() {
-      this.innerHTML = value;
-    };
-  }
-  function htmlFunction(value) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      this.innerHTML = v2 == null ? "" : v2;
-    };
-  }
-  function html_default(value) {
-    return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML;
-  }
-
-  // node_modules/d3-selection/src/selection/raise.js
-  function raise() {
-    if (this.nextSibling) this.parentNode.appendChild(this);
-  }
-  function raise_default() {
-    return this.each(raise);
-  }
-
-  // node_modules/d3-selection/src/selection/lower.js
-  function lower() {
-    if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
-  }
-  function lower_default() {
-    return this.each(lower);
-  }
-
-  // node_modules/d3-selection/src/selection/append.js
-  function append_default(name) {
-    var create2 = typeof name === "function" ? name : creator_default(name);
-    return this.select(function() {
-      return this.appendChild(create2.apply(this, arguments));
-    });
-  }
-
-  // node_modules/d3-selection/src/selection/insert.js
-  function constantNull() {
-    return null;
-  }
-  function insert_default(name, before) {
-    var create2 = typeof name === "function" ? name : creator_default(name), select = before == null ? constantNull : typeof before === "function" ? before : selector_default(before);
-    return this.select(function() {
-      return this.insertBefore(create2.apply(this, arguments), select.apply(this, arguments) || null);
-    });
-  }
-
-  // node_modules/d3-selection/src/selection/remove.js
-  function remove() {
-    var parent = this.parentNode;
-    if (parent) parent.removeChild(this);
-  }
-  function remove_default() {
-    return this.each(remove);
-  }
-
-  // node_modules/d3-selection/src/selection/clone.js
-  function selection_cloneShallow() {
-    var clone2 = this.cloneNode(false), parent = this.parentNode;
-    return parent ? parent.insertBefore(clone2, this.nextSibling) : clone2;
-  }
-  function selection_cloneDeep() {
-    var clone2 = this.cloneNode(true), parent = this.parentNode;
-    return parent ? parent.insertBefore(clone2, this.nextSibling) : clone2;
-  }
-  function clone_default(deep) {
-    return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
-  }
-
-  // node_modules/d3-selection/src/selection/datum.js
-  function datum_default(value) {
-    return arguments.length ? this.property("__data__", value) : this.node().__data__;
-  }
-
-  // node_modules/d3-selection/src/selection/on.js
-  function contextListener(listener) {
-    return function(event) {
-      listener.call(this, event, this.__data__);
-    };
-  }
-  function parseTypenames2(typenames) {
-    return typenames.trim().split(/^|\s+/).map(function(t2) {
-      var name = "", i3 = t2.indexOf(".");
-      if (i3 >= 0) name = t2.slice(i3 + 1), t2 = t2.slice(0, i3);
-      return { type: t2, name };
-    });
-  }
-  function onRemove(typename) {
-    return function() {
-      var on = this.__on;
-      if (!on) return;
-      for (var j2 = 0, i3 = -1, m2 = on.length, o2; j2 < m2; ++j2) {
-        if (o2 = on[j2], (!typename.type || o2.type === typename.type) && o2.name === typename.name) {
-          this.removeEventListener(o2.type, o2.listener, o2.options);
-        } else {
-          on[++i3] = o2;
-        }
+    function right(a2, x2, lo = 0, hi = a2.length) {
+      if (lo < hi) {
+        if (compare1(x2, x2) !== 0) return hi;
+        do {
+          const mid = lo + hi >>> 1;
+          if (compare2(a2[mid], x2) <= 0) lo = mid + 1;
+          else hi = mid;
+        } while (lo < hi);
       }
-      if (++i3) on.length = i3;
-      else delete this.__on;
-    };
+      return lo;
+    }
+    function center(a2, x2, lo = 0, hi = a2.length) {
+      const i3 = left(a2, x2, lo, hi - 1);
+      return i3 > lo && delta(a2[i3 - 1], x2) > -delta(a2[i3], x2) ? i3 - 1 : i3;
+    }
+    return { left, center, right };
   }
-  function onAdd(typename, value, options2) {
-    return function() {
-      var on = this.__on, o2, listener = contextListener(value);
-      if (on) for (var j2 = 0, m2 = on.length; j2 < m2; ++j2) {
-        if ((o2 = on[j2]).type === typename.type && o2.name === typename.name) {
-          this.removeEventListener(o2.type, o2.listener, o2.options);
-          this.addEventListener(o2.type, o2.listener = listener, o2.options = options2);
-          o2.value = value;
-          return;
+  function zero() {
+    return 0;
+  }
+
+  // node_modules/d3-array/src/number.js
+  function number(x2) {
+    return x2 === null ? NaN : +x2;
+  }
+  function* numbers(values, valueof) {
+    if (valueof === void 0) {
+      for (let value of values) {
+        if (value != null && (value = +value) >= value) {
+          yield value;
         }
       }
-      this.addEventListener(typename.type, listener, options2);
-      o2 = { type: typename.type, name: typename.name, value, listener, options: options2 };
-      if (!on) this.__on = [o2];
-      else on.push(o2);
-    };
-  }
-  function on_default(typename, value, options2) {
-    var typenames = parseTypenames2(typename + ""), i3, n3 = typenames.length, t2;
-    if (arguments.length < 2) {
-      var on = this.node().__on;
-      if (on) for (var j2 = 0, m2 = on.length, o2; j2 < m2; ++j2) {
-        for (i3 = 0, o2 = on[j2]; i3 < n3; ++i3) {
-          if ((t2 = typenames[i3]).type === o2.type && t2.name === o2.name) {
-            return o2.value;
-          }
+    } else {
+      let index = -1;
+      for (let value of values) {
+        if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
+          yield value;
         }
       }
-      return;
     }
-    on = value ? onAdd : onRemove;
-    for (i3 = 0; i3 < n3; ++i3) this.each(on(typenames[i3], value, options2));
-    return this;
   }
 
-  // node_modules/d3-selection/src/selection/dispatch.js
-  function dispatchEvent(node, type2, params) {
-    var window2 = window_default(node), event = window2.CustomEvent;
-    if (typeof event === "function") {
-      event = new event(type2, params);
-    } else {
-      event = window2.document.createEvent("Event");
-      if (params) event.initEvent(type2, params.bubbles, params.cancelable), event.detail = params.detail;
-      else event.initEvent(type2, false, false);
+  // node_modules/d3-array/src/bisect.js
+  var ascendingBisect = bisector(ascending);
+  var bisectRight = ascendingBisect.right;
+  var bisectLeft = ascendingBisect.left;
+  var bisectCenter = bisector(number).center;
+  var bisect_default = bisectRight;
+
+  // node_modules/d3-array/src/fsum.js
+  var Adder = class {
+    constructor() {
+      this._partials = new Float64Array(32);
+      this._n = 0;
     }
-    node.dispatchEvent(event);
-  }
-  function dispatchConstant(type2, params) {
-    return function() {
-      return dispatchEvent(this, type2, params);
-    };
-  }
-  function dispatchFunction(type2, params) {
-    return function() {
-      return dispatchEvent(this, type2, params.apply(this, arguments));
+    add(x2) {
+      const p2 = this._partials;
+      let i3 = 0;
+      for (let j2 = 0; j2 < this._n && j2 < 32; j2++) {
+        const y2 = p2[j2], hi = x2 + y2, lo = Math.abs(x2) < Math.abs(y2) ? x2 - (hi - y2) : y2 - (hi - x2);
+        if (lo) p2[i3++] = lo;
+        x2 = hi;
+      }
+      p2[i3] = x2;
+      this._n = i3 + 1;
+      return this;
+    }
+    valueOf() {
+      const p2 = this._partials;
+      let n3 = this._n, x2, y2, lo, hi = 0;
+      if (n3 > 0) {
+        hi = p2[--n3];
+        while (n3 > 0) {
+          x2 = hi;
+          y2 = p2[--n3];
+          hi = x2 + y2;
+          lo = y2 - (hi - x2);
+          if (lo) break;
+        }
+        if (n3 > 0 && (lo < 0 && p2[n3 - 1] < 0 || lo > 0 && p2[n3 - 1] > 0)) {
+          y2 = lo * 2;
+          x2 = hi + y2;
+          if (y2 == x2 - hi) hi = x2;
+        }
+      }
+      return hi;
+    }
+  };
+
+  // node_modules/d3-array/src/sort.js
+  function compareDefined(compare2 = ascending) {
+    if (compare2 === ascending) return ascendingDefined;
+    if (typeof compare2 !== "function") throw new TypeError("compare is not a function");
+    return (a2, b2) => {
+      const x2 = compare2(a2, b2);
+      if (x2 || x2 === 0) return x2;
+      return (compare2(b2, b2) === 0) - (compare2(a2, a2) === 0);
     };
   }
-  function dispatch_default2(type2, params) {
-    return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type2, params));
+  function ascendingDefined(a2, b2) {
+    return (a2 == null || !(a2 >= a2)) - (b2 == null || !(b2 >= b2)) || (a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
   }
 
-  // node_modules/d3-selection/src/selection/iterator.js
-  function* iterator_default() {
-    for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) {
-      for (var group = groups[j2], i3 = 0, n3 = group.length, node; i3 < n3; ++i3) {
-        if (node = group[i3]) yield node;
-      }
+  // node_modules/d3-array/src/ticks.js
+  var e10 = Math.sqrt(50);
+  var e5 = Math.sqrt(10);
+  var e2 = Math.sqrt(2);
+  function tickSpec(start2, stop, count) {
+    const step = (stop - start2) / Math.max(0, count), power = Math.floor(Math.log10(step)), error = step / Math.pow(10, power), factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;
+    let i1, i22, inc;
+    if (power < 0) {
+      inc = Math.pow(10, -power) / factor;
+      i1 = Math.round(start2 * inc);
+      i22 = Math.round(stop * inc);
+      if (i1 / inc < start2) ++i1;
+      if (i22 / inc > stop) --i22;
+      inc = -inc;
+    } else {
+      inc = Math.pow(10, power) * factor;
+      i1 = Math.round(start2 / inc);
+      i22 = Math.round(stop / inc);
+      if (i1 * inc < start2) ++i1;
+      if (i22 * inc > stop) --i22;
     }
+    if (i22 < i1 && 0.5 <= count && count < 2) return tickSpec(start2, stop, count * 2);
+    return [i1, i22, inc];
   }
-
-  // node_modules/d3-selection/src/selection/index.js
-  var root = [null];
-  function Selection(groups, parents) {
-    this._groups = groups;
-    this._parents = parents;
+  function ticks(start2, stop, count) {
+    stop = +stop, start2 = +start2, count = +count;
+    if (!(count > 0)) return [];
+    if (start2 === stop) return [start2];
+    const reverse = stop < start2, [i1, i22, inc] = reverse ? tickSpec(stop, start2, count) : tickSpec(start2, stop, count);
+    if (!(i22 >= i1)) return [];
+    const n3 = i22 - i1 + 1, ticks2 = new Array(n3);
+    if (reverse) {
+      if (inc < 0) for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i22 - i3) / -inc;
+      else for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i22 - i3) * inc;
+    } else {
+      if (inc < 0) for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i1 + i3) / -inc;
+      else for (let i3 = 0; i3 < n3; ++i3) ticks2[i3] = (i1 + i3) * inc;
+    }
+    return ticks2;
   }
-  function selection() {
-    return new Selection([[document.documentElement]], root);
+  function tickIncrement(start2, stop, count) {
+    stop = +stop, start2 = +start2, count = +count;
+    return tickSpec(start2, stop, count)[2];
   }
-  function selection_selection() {
-    return this;
+  function tickStep(start2, stop, count) {
+    stop = +stop, start2 = +start2, count = +count;
+    const reverse = stop < start2, inc = reverse ? tickIncrement(stop, start2, count) : tickIncrement(start2, stop, count);
+    return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
   }
-  Selection.prototype = selection.prototype = {
-    constructor: Selection,
-    select: select_default,
-    selectAll: selectAll_default,
-    selectChild: selectChild_default,
-    selectChildren: selectChildren_default,
-    filter: filter_default,
-    data: data_default,
-    enter: enter_default,
-    exit: exit_default,
-    join: join_default,
-    merge: merge_default,
-    selection: selection_selection,
-    order: order_default,
-    sort: sort_default,
-    call: call_default,
-    nodes: nodes_default,
-    node: node_default,
-    size: size_default,
-    empty: empty_default,
-    each: each_default,
-    attr: attr_default,
-    style: style_default,
-    property: property_default,
-    classed: classed_default,
-    text: text_default,
-    html: html_default,
-    raise: raise_default,
-    lower: lower_default,
-    append: append_default,
-    insert: insert_default,
-    remove: remove_default,
-    clone: clone_default,
-    datum: datum_default,
-    on: on_default,
-    dispatch: dispatch_default2,
-    [Symbol.iterator]: iterator_default
-  };
-  var selection_default = selection;
 
-  // node_modules/d3-selection/src/select.js
-  function select_default2(selector) {
-    return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root);
+  // node_modules/d3-array/src/max.js
+  function max(values, valueof) {
+    let max3;
+    if (valueof === void 0) {
+      for (const value of values) {
+        if (value != null && (max3 < value || max3 === void 0 && value >= value)) {
+          max3 = value;
+        }
+      }
+    } else {
+      let index = -1;
+      for (let value of values) {
+        if ((value = valueof(value, ++index, values)) != null && (max3 < value || max3 === void 0 && value >= value)) {
+          max3 = value;
+        }
+      }
+    }
+    return max3;
   }
 
-  // node_modules/d3-selection/src/sourceEvent.js
-  function sourceEvent_default(event) {
-    let sourceEvent;
-    while (sourceEvent = event.sourceEvent) event = sourceEvent;
-    return event;
+  // node_modules/d3-array/src/min.js
+  function min(values, valueof) {
+    let min3;
+    if (valueof === void 0) {
+      for (const value of values) {
+        if (value != null && (min3 > value || min3 === void 0 && value >= value)) {
+          min3 = value;
+        }
+      }
+    } else {
+      let index = -1;
+      for (let value of values) {
+        if ((value = valueof(value, ++index, values)) != null && (min3 > value || min3 === void 0 && value >= value)) {
+          min3 = value;
+        }
+      }
+    }
+    return min3;
   }
 
-  // node_modules/d3-selection/src/pointer.js
-  function pointer_default(event, node) {
-    event = sourceEvent_default(event);
-    if (node === void 0) node = event.currentTarget;
-    if (node) {
-      var svg2 = node.ownerSVGElement || node;
-      if (svg2.createSVGPoint) {
-        var point = svg2.createSVGPoint();
-        point.x = event.clientX, point.y = event.clientY;
-        point = point.matrixTransform(node.getScreenCTM().inverse());
-        return [point.x, point.y];
+  // node_modules/d3-array/src/quickselect.js
+  function quickselect(array2, k2, left = 0, right = Infinity, compare2) {
+    k2 = Math.floor(k2);
+    left = Math.floor(Math.max(0, left));
+    right = Math.floor(Math.min(array2.length - 1, right));
+    if (!(left <= k2 && k2 <= right)) return array2;
+    compare2 = compare2 === void 0 ? ascendingDefined : compareDefined(compare2);
+    while (right > left) {
+      if (right - left > 600) {
+        const n3 = right - left + 1;
+        const m2 = k2 - left + 1;
+        const z2 = Math.log(n3);
+        const s2 = 0.5 * Math.exp(2 * z2 / 3);
+        const sd = 0.5 * Math.sqrt(z2 * s2 * (n3 - s2) / n3) * (m2 - n3 / 2 < 0 ? -1 : 1);
+        const newLeft = Math.max(left, Math.floor(k2 - m2 * s2 / n3 + sd));
+        const newRight = Math.min(right, Math.floor(k2 + (n3 - m2) * s2 / n3 + sd));
+        quickselect(array2, k2, newLeft, newRight, compare2);
       }
-      if (node.getBoundingClientRect) {
-        var rect = node.getBoundingClientRect();
-        return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
+      const t2 = array2[k2];
+      let i3 = left;
+      let j2 = right;
+      swap(array2, left, k2);
+      if (compare2(array2[right], t2) > 0) swap(array2, left, right);
+      while (i3 < j2) {
+        swap(array2, i3, j2), ++i3, --j2;
+        while (compare2(array2[i3], t2) < 0) ++i3;
+        while (compare2(array2[j2], t2) > 0) --j2;
       }
+      if (compare2(array2[left], t2) === 0) swap(array2, left, j2);
+      else ++j2, swap(array2, j2, right);
+      if (j2 <= k2) left = j2 + 1;
+      if (k2 <= j2) right = j2 - 1;
     }
-    return [event.pageX, event.pageY];
+    return array2;
   }
-
-  // node_modules/d3-selection/src/selectAll.js
-  function selectAll_default2(selector) {
-    return typeof selector === "string" ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) : new Selection([array(selector)], root);
+  function swap(array2, i3, j2) {
+    const t2 = array2[i3];
+    array2[i3] = array2[j2];
+    array2[j2] = t2;
   }
 
-  // node_modules/d3-drag/src/noevent.js
-  var nonpassive = { passive: false };
-  var nonpassivecapture = { capture: true, passive: false };
-  function nopropagation(event) {
-    event.stopImmediatePropagation();
-  }
-  function noevent_default(event) {
-    event.preventDefault();
-    event.stopImmediatePropagation();
+  // node_modules/d3-array/src/quantile.js
+  function quantile(values, p2, valueof) {
+    values = Float64Array.from(numbers(values, valueof));
+    if (!(n3 = values.length) || isNaN(p2 = +p2)) return;
+    if (p2 <= 0 || n3 < 2) return min(values);
+    if (p2 >= 1) return max(values);
+    var n3, i3 = (n3 - 1) * p2, i0 = Math.floor(i3), value0 = max(quickselect(values, i0).subarray(0, i0 + 1)), value1 = min(values.subarray(i0 + 1));
+    return value0 + (value1 - value0) * (i3 - i0);
   }
 
-  // node_modules/d3-drag/src/nodrag.js
-  function nodrag_default(view) {
-    var root3 = view.document.documentElement, selection2 = select_default2(view).on("dragstart.drag", noevent_default, nonpassivecapture);
-    if ("onselectstart" in root3) {
-      selection2.on("selectstart.drag", noevent_default, nonpassivecapture);
-    } else {
-      root3.__noselect = root3.style.MozUserSelect;
-      root3.style.MozUserSelect = "none";
-    }
+  // node_modules/d3-array/src/median.js
+  function median(values, valueof) {
+    return quantile(values, 0.5, valueof);
   }
-  function yesdrag(view, noclick) {
-    var root3 = view.document.documentElement, selection2 = select_default2(view).on("dragstart.drag", null);
-    if (noclick) {
-      selection2.on("click.drag", noevent_default, nonpassivecapture);
-      setTimeout(function() {
-        selection2.on("click.drag", null);
-      }, 0);
-    }
-    if ("onselectstart" in root3) {
-      selection2.on("selectstart.drag", null);
-    } else {
-      root3.style.MozUserSelect = root3.__noselect;
-      delete root3.__noselect;
+
+  // node_modules/d3-array/src/merge.js
+  function* flatten(arrays) {
+    for (const array2 of arrays) {
+      yield* __yieldStar(array2);
     }
   }
-
-  // node_modules/d3-drag/src/constant.js
-  var constant_default2 = (x2) => () => x2;
-
-  // node_modules/d3-drag/src/event.js
-  function DragEvent(type2, {
-    sourceEvent,
-    subject,
-    target,
-    identifier,
-    active,
-    x: x2,
-    y: y2,
-    dx,
-    dy,
-    dispatch: dispatch14
-  }) {
-    Object.defineProperties(this, {
-      type: { value: type2, enumerable: true, configurable: true },
-      sourceEvent: { value: sourceEvent, enumerable: true, configurable: true },
-      subject: { value: subject, enumerable: true, configurable: true },
-      target: { value: target, enumerable: true, configurable: true },
-      identifier: { value: identifier, enumerable: true, configurable: true },
-      active: { value: active, enumerable: true, configurable: true },
-      x: { value: x2, enumerable: true, configurable: true },
-      y: { value: y2, enumerable: true, configurable: true },
-      dx: { value: dx, enumerable: true, configurable: true },
-      dy: { value: dy, enumerable: true, configurable: true },
-      _: { value: dispatch14 }
-    });
+  function merge(arrays) {
+    return Array.from(flatten(arrays));
   }
-  DragEvent.prototype.on = function() {
-    var value = this._.on.apply(this._, arguments);
-    return value === this._ ? this : value;
-  };
 
-  // node_modules/d3-drag/src/drag.js
-  function defaultFilter(event) {
-    return !event.ctrlKey && !event.button;
-  }
-  function defaultContainer() {
-    return this.parentNode;
-  }
-  function defaultSubject(event, d2) {
-    return d2 == null ? { x: event.x, y: event.y } : d2;
+  // node_modules/d3-array/src/pairs.js
+  function pairs(values, pairof = pair) {
+    const pairs2 = [];
+    let previous;
+    let first = false;
+    for (const value of values) {
+      if (first) pairs2.push(pairof(previous, value));
+      previous = value;
+      first = true;
+    }
+    return pairs2;
   }
-  function defaultTouchable() {
-    return navigator.maxTouchPoints || "ontouchstart" in this;
+  function pair(a2, b2) {
+    return [a2, b2];
   }
-  function drag_default() {
-    var filter2 = defaultFilter, container = defaultContainer, subject = defaultSubject, touchable = defaultTouchable, gestures = {}, listeners = dispatch_default("start", "drag", "end"), active = 0, mousedownx, mousedowny, mousemoving, touchending, clickDistance2 = 0;
-    function drag(selection2) {
-      selection2.on("mousedown.drag", mousedowned).filter(touchable).on("touchstart.drag", touchstarted).on("touchmove.drag", touchmoved, nonpassive).on("touchend.drag touchcancel.drag", touchended).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
-    }
-    function mousedowned(event, d2) {
-      if (touchending || !filter2.call(this, event, d2)) return;
-      var gesture = beforestart(this, container.call(this, event, d2), event, d2, "mouse");
-      if (!gesture) return;
-      select_default2(event.view).on("mousemove.drag", mousemoved, nonpassivecapture).on("mouseup.drag", mouseupped, nonpassivecapture);
-      nodrag_default(event.view);
-      nopropagation(event);
-      mousemoving = false;
-      mousedownx = event.clientX;
-      mousedowny = event.clientY;
-      gesture("start", event);
-    }
-    function mousemoved(event) {
-      noevent_default(event);
-      if (!mousemoving) {
-        var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
-        mousemoving = dx * dx + dy * dy > clickDistance2;
-      }
-      gestures.mouse("drag", event);
-    }
-    function mouseupped(event) {
-      select_default2(event.view).on("mousemove.drag mouseup.drag", null);
-      yesdrag(event.view, mousemoving);
-      noevent_default(event);
-      gestures.mouse("end", event);
-    }
-    function touchstarted(event, d2) {
-      if (!filter2.call(this, event, d2)) return;
-      var touches = event.changedTouches, c2 = container.call(this, event, d2), n3 = touches.length, i3, gesture;
-      for (i3 = 0; i3 < n3; ++i3) {
-        if (gesture = beforestart(this, c2, event, d2, touches[i3].identifier, touches[i3])) {
-          nopropagation(event);
-          gesture("start", event, touches[i3]);
-        }
-      }
-    }
-    function touchmoved(event) {
-      var touches = event.changedTouches, n3 = touches.length, i3, gesture;
-      for (i3 = 0; i3 < n3; ++i3) {
-        if (gesture = gestures[touches[i3].identifier]) {
-          noevent_default(event);
-          gesture("drag", event, touches[i3]);
-        }
-      }
-    }
-    function touchended(event) {
-      var touches = event.changedTouches, n3 = touches.length, i3, gesture;
-      if (touchending) clearTimeout(touchending);
-      touchending = setTimeout(function() {
-        touchending = null;
-      }, 500);
-      for (i3 = 0; i3 < n3; ++i3) {
-        if (gesture = gestures[touches[i3].identifier]) {
-          nopropagation(event);
-          gesture("end", event, touches[i3]);
-        }
-      }
-    }
-    function beforestart(that, container2, event, d2, identifier, touch) {
-      var dispatch14 = listeners.copy(), p2 = pointer_default(touch || event, container2), dx, dy, s2;
-      if ((s2 = subject.call(that, new DragEvent("beforestart", {
-        sourceEvent: event,
-        target: drag,
-        identifier,
-        active,
-        x: p2[0],
-        y: p2[1],
-        dx: 0,
-        dy: 0,
-        dispatch: dispatch14
-      }), d2)) == null) return;
-      dx = s2.x - p2[0] || 0;
-      dy = s2.y - p2[1] || 0;
-      return function gesture(type2, event2, touch2) {
-        var p02 = p2, n3;
-        switch (type2) {
-          case "start":
-            gestures[identifier] = gesture, n3 = active++;
-            break;
-          case "end":
-            delete gestures[identifier], --active;
-          // falls through
-          case "drag":
-            p2 = pointer_default(touch2 || event2, container2), n3 = active;
-            break;
-        }
-        dispatch14.call(
-          type2,
-          that,
-          new DragEvent(type2, {
-            sourceEvent: event2,
-            subject: s2,
-            target: drag,
-            identifier,
-            active: n3,
-            x: p2[0] + dx,
-            y: p2[1] + dy,
-            dx: p2[0] - p02[0],
-            dy: p2[1] - p02[1],
-            dispatch: dispatch14
-          }),
-          d2
-        );
-      };
+
+  // node_modules/d3-array/src/range.js
+  function range(start2, stop, step) {
+    start2 = +start2, stop = +stop, step = (n3 = arguments.length) < 2 ? (stop = start2, start2 = 0, 1) : n3 < 3 ? 1 : +step;
+    var i3 = -1, n3 = Math.max(0, Math.ceil((stop - start2) / step)) | 0, range3 = new Array(n3);
+    while (++i3 < n3) {
+      range3[i3] = start2 + i3 * step;
     }
-    drag.filter = function(_2) {
-      return arguments.length ? (filter2 = typeof _2 === "function" ? _2 : constant_default2(!!_2), drag) : filter2;
-    };
-    drag.container = function(_2) {
-      return arguments.length ? (container = typeof _2 === "function" ? _2 : constant_default2(_2), drag) : container;
-    };
-    drag.subject = function(_2) {
-      return arguments.length ? (subject = typeof _2 === "function" ? _2 : constant_default2(_2), drag) : subject;
-    };
-    drag.touchable = function(_2) {
-      return arguments.length ? (touchable = typeof _2 === "function" ? _2 : constant_default2(!!_2), drag) : touchable;
-    };
-    drag.on = function() {
-      var value = listeners.on.apply(listeners, arguments);
-      return value === listeners ? drag : value;
-    };
-    drag.clickDistance = function(_2) {
-      return arguments.length ? (clickDistance2 = (_2 = +_2) * _2, drag) : Math.sqrt(clickDistance2);
-    };
-    return drag;
+    return range3;
   }
 
-  // node_modules/d3-color/src/define.js
-  function define_default(constructor, factory, prototype) {
-    constructor.prototype = factory.prototype = prototype;
-    prototype.constructor = constructor;
+  // node_modules/d3-geo/src/math.js
+  var epsilon = 1e-6;
+  var epsilon2 = 1e-12;
+  var pi = Math.PI;
+  var halfPi = pi / 2;
+  var quarterPi = pi / 4;
+  var tau = pi * 2;
+  var degrees = 180 / pi;
+  var radians = pi / 180;
+  var abs = Math.abs;
+  var atan = Math.atan;
+  var atan2 = Math.atan2;
+  var cos = Math.cos;
+  var exp = Math.exp;
+  var log = Math.log;
+  var sin = Math.sin;
+  var sign = Math.sign || function(x2) {
+    return x2 > 0 ? 1 : x2 < 0 ? -1 : 0;
+  };
+  var sqrt = Math.sqrt;
+  var tan = Math.tan;
+  function acos(x2) {
+    return x2 > 1 ? 0 : x2 < -1 ? pi : Math.acos(x2);
   }
-  function extend(parent, definition) {
-    var prototype = Object.create(parent.prototype);
-    for (var key in definition) prototype[key] = definition[key];
-    return prototype;
+  function asin(x2) {
+    return x2 > 1 ? halfPi : x2 < -1 ? -halfPi : Math.asin(x2);
   }
 
-  // node_modules/d3-color/src/color.js
-  function Color() {
+  // node_modules/d3-geo/src/noop.js
+  function noop() {
   }
-  var darker = 0.7;
-  var brighter = 1 / darker;
-  var reI = "\\s*([+-]?\\d+)\\s*";
-  var reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*";
-  var reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*";
-  var reHex = /^#([0-9a-f]{3,8})$/;
-  var reRgbInteger = new RegExp("^rgb\\(".concat(reI, ",").concat(reI, ",").concat(reI, "\\)$"));
-  var reRgbPercent = new RegExp("^rgb\\(".concat(reP, ",").concat(reP, ",").concat(reP, "\\)$"));
-  var reRgbaInteger = new RegExp("^rgba\\(".concat(reI, ",").concat(reI, ",").concat(reI, ",").concat(reN, "\\)$"));
-  var reRgbaPercent = new RegExp("^rgba\\(".concat(reP, ",").concat(reP, ",").concat(reP, ",").concat(reN, "\\)$"));
-  var reHslPercent = new RegExp("^hsl\\(".concat(reN, ",").concat(reP, ",").concat(reP, "\\)$"));
-  var reHslaPercent = new RegExp("^hsla\\(".concat(reN, ",").concat(reP, ",").concat(reP, ",").concat(reN, "\\)$"));
-  var named = {
-    aliceblue: 15792383,
-    antiquewhite: 16444375,
-    aqua: 65535,
-    aquamarine: 8388564,
-    azure: 15794175,
-    beige: 16119260,
-    bisque: 16770244,
-    black: 0,
-    blanchedalmond: 16772045,
-    blue: 255,
-    blueviolet: 9055202,
-    brown: 10824234,
-    burlywood: 14596231,
-    cadetblue: 6266528,
-    chartreuse: 8388352,
-    chocolate: 13789470,
-    coral: 16744272,
-    cornflowerblue: 6591981,
-    cornsilk: 16775388,
-    crimson: 14423100,
-    cyan: 65535,
-    darkblue: 139,
-    darkcyan: 35723,
-    darkgoldenrod: 12092939,
-    darkgray: 11119017,
-    darkgreen: 25600,
-    darkgrey: 11119017,
-    darkkhaki: 12433259,
-    darkmagenta: 9109643,
-    darkolivegreen: 5597999,
-    darkorange: 16747520,
-    darkorchid: 10040012,
-    darkred: 9109504,
-    darksalmon: 15308410,
-    darkseagreen: 9419919,
-    darkslateblue: 4734347,
-    darkslategray: 3100495,
-    darkslategrey: 3100495,
-    darkturquoise: 52945,
-    darkviolet: 9699539,
-    deeppink: 16716947,
-    deepskyblue: 49151,
-    dimgray: 6908265,
-    dimgrey: 6908265,
-    dodgerblue: 2003199,
-    firebrick: 11674146,
-    floralwhite: 16775920,
-    forestgreen: 2263842,
-    fuchsia: 16711935,
-    gainsboro: 14474460,
-    ghostwhite: 16316671,
-    gold: 16766720,
-    goldenrod: 14329120,
-    gray: 8421504,
-    green: 32768,
-    greenyellow: 11403055,
-    grey: 8421504,
-    honeydew: 15794160,
-    hotpink: 16738740,
-    indianred: 13458524,
-    indigo: 4915330,
-    ivory: 16777200,
-    khaki: 15787660,
-    lavender: 15132410,
-    lavenderblush: 16773365,
-    lawngreen: 8190976,
-    lemonchiffon: 16775885,
-    lightblue: 11393254,
-    lightcoral: 15761536,
-    lightcyan: 14745599,
-    lightgoldenrodyellow: 16448210,
-    lightgray: 13882323,
-    lightgreen: 9498256,
-    lightgrey: 13882323,
-    lightpink: 16758465,
-    lightsalmon: 16752762,
-    lightseagreen: 2142890,
-    lightskyblue: 8900346,
-    lightslategray: 7833753,
-    lightslategrey: 7833753,
-    lightsteelblue: 11584734,
-    lightyellow: 16777184,
-    lime: 65280,
-    limegreen: 3329330,
-    linen: 16445670,
-    magenta: 16711935,
-    maroon: 8388608,
-    mediumaquamarine: 6737322,
-    mediumblue: 205,
-    mediumorchid: 12211667,
-    mediumpurple: 9662683,
-    mediumseagreen: 3978097,
-    mediumslateblue: 8087790,
-    mediumspringgreen: 64154,
-    mediumturquoise: 4772300,
-    mediumvioletred: 13047173,
-    midnightblue: 1644912,
-    mintcream: 16121850,
-    mistyrose: 16770273,
-    moccasin: 16770229,
-    navajowhite: 16768685,
-    navy: 128,
-    oldlace: 16643558,
-    olive: 8421376,
-    olivedrab: 7048739,
-    orange: 16753920,
-    orangered: 16729344,
-    orchid: 14315734,
-    palegoldenrod: 15657130,
-    palegreen: 10025880,
-    paleturquoise: 11529966,
-    palevioletred: 14381203,
-    papayawhip: 16773077,
-    peachpuff: 16767673,
-    peru: 13468991,
-    pink: 16761035,
-    plum: 14524637,
-    powderblue: 11591910,
-    purple: 8388736,
-    rebeccapurple: 6697881,
-    red: 16711680,
-    rosybrown: 12357519,
-    royalblue: 4286945,
-    saddlebrown: 9127187,
-    salmon: 16416882,
-    sandybrown: 16032864,
-    seagreen: 3050327,
-    seashell: 16774638,
-    sienna: 10506797,
-    silver: 12632256,
-    skyblue: 8900331,
-    slateblue: 6970061,
-    slategray: 7372944,
-    slategrey: 7372944,
-    snow: 16775930,
-    springgreen: 65407,
-    steelblue: 4620980,
-    tan: 13808780,
-    teal: 32896,
-    thistle: 14204888,
-    tomato: 16737095,
-    turquoise: 4251856,
-    violet: 15631086,
-    wheat: 16113331,
-    white: 16777215,
-    whitesmoke: 16119285,
-    yellow: 16776960,
-    yellowgreen: 10145074
+
+  // node_modules/d3-geo/src/stream.js
+  function streamGeometry(geometry, stream) {
+    if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
+      streamGeometryType[geometry.type](geometry, stream);
+    }
+  }
+  var streamObjectType = {
+    Feature: function(object, stream) {
+      streamGeometry(object.geometry, stream);
+    },
+    FeatureCollection: function(object, stream) {
+      var features = object.features, i3 = -1, n3 = features.length;
+      while (++i3 < n3) streamGeometry(features[i3].geometry, stream);
+    }
   };
-  define_default(Color, color, {
-    copy(channels) {
-      return Object.assign(new this.constructor(), this, channels);
+  var streamGeometryType = {
+    Sphere: function(object, stream) {
+      stream.sphere();
     },
-    displayable() {
-      return this.rgb().displayable();
+    Point: function(object, stream) {
+      object = object.coordinates;
+      stream.point(object[0], object[1], object[2]);
     },
-    hex: color_formatHex,
-    // Deprecated! Use color.formatHex.
-    formatHex: color_formatHex,
-    formatHex8: color_formatHex8,
-    formatHsl: color_formatHsl,
-    formatRgb: color_formatRgb,
-    toString: color_formatRgb
-  });
-  function color_formatHex() {
-    return this.rgb().formatHex();
-  }
-  function color_formatHex8() {
-    return this.rgb().formatHex8();
+    MultiPoint: function(object, stream) {
+      var coordinates = object.coordinates, i3 = -1, n3 = coordinates.length;
+      while (++i3 < n3) object = coordinates[i3], stream.point(object[0], object[1], object[2]);
+    },
+    LineString: function(object, stream) {
+      streamLine(object.coordinates, stream, 0);
+    },
+    MultiLineString: function(object, stream) {
+      var coordinates = object.coordinates, i3 = -1, n3 = coordinates.length;
+      while (++i3 < n3) streamLine(coordinates[i3], stream, 0);
+    },
+    Polygon: function(object, stream) {
+      streamPolygon(object.coordinates, stream);
+    },
+    MultiPolygon: function(object, stream) {
+      var coordinates = object.coordinates, i3 = -1, n3 = coordinates.length;
+      while (++i3 < n3) streamPolygon(coordinates[i3], stream);
+    },
+    GeometryCollection: function(object, stream) {
+      var geometries = object.geometries, i3 = -1, n3 = geometries.length;
+      while (++i3 < n3) streamGeometry(geometries[i3], stream);
+    }
+  };
+  function streamLine(coordinates, stream, closed) {
+    var i3 = -1, n3 = coordinates.length - closed, coordinate;
+    stream.lineStart();
+    while (++i3 < n3) coordinate = coordinates[i3], stream.point(coordinate[0], coordinate[1], coordinate[2]);
+    stream.lineEnd();
   }
-  function color_formatHsl() {
-    return hslConvert(this).formatHsl();
+  function streamPolygon(coordinates, stream) {
+    var i3 = -1, n3 = coordinates.length;
+    stream.polygonStart();
+    while (++i3 < n3) streamLine(coordinates[i3], stream, 1);
+    stream.polygonEnd();
   }
-  function color_formatRgb() {
-    return this.rgb().formatRgb();
+  function stream_default(object, stream) {
+    if (object && streamObjectType.hasOwnProperty(object.type)) {
+      streamObjectType[object.type](object, stream);
+    } else {
+      streamGeometry(object, stream);
+    }
   }
-  function color(format2) {
-    var m2, l2;
-    format2 = (format2 + "").trim().toLowerCase();
-    return (m2 = reHex.exec(format2)) ? (l2 = m2[1].length, m2 = parseInt(m2[1], 16), l2 === 6 ? rgbn(m2) : l2 === 3 ? new Rgb(m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, (m2 & 15) << 4 | m2 & 15, 1) : l2 === 8 ? rgba(m2 >> 24 & 255, m2 >> 16 & 255, m2 >> 8 & 255, (m2 & 255) / 255) : l2 === 4 ? rgba(m2 >> 12 & 15 | m2 >> 8 & 240, m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, ((m2 & 15) << 4 | m2 & 15) / 255) : null) : (m2 = reRgbInteger.exec(format2)) ? new Rgb(m2[1], m2[2], m2[3], 1) : (m2 = reRgbPercent.exec(format2)) ? new Rgb(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, 1) : (m2 = reRgbaInteger.exec(format2)) ? rgba(m2[1], m2[2], m2[3], m2[4]) : (m2 = reRgbaPercent.exec(format2)) ? rgba(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, m2[4]) : (m2 = reHslPercent.exec(format2)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, 1) : (m2 = reHslaPercent.exec(format2)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, m2[4]) : named.hasOwnProperty(format2) ? rgbn(named[format2]) : format2 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
+
+  // node_modules/d3-geo/src/area.js
+  var areaRingSum = new Adder();
+  var areaSum = new Adder();
+  var lambda00;
+  var phi00;
+  var lambda0;
+  var cosPhi0;
+  var sinPhi0;
+  var areaStream = {
+    point: noop,
+    lineStart: noop,
+    lineEnd: noop,
+    polygonStart: function() {
+      areaRingSum = new Adder();
+      areaStream.lineStart = areaRingStart;
+      areaStream.lineEnd = areaRingEnd;
+    },
+    polygonEnd: function() {
+      var areaRing = +areaRingSum;
+      areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);
+      this.lineStart = this.lineEnd = this.point = noop;
+    },
+    sphere: function() {
+      areaSum.add(tau);
+    }
+  };
+  function areaRingStart() {
+    areaStream.point = areaPointFirst;
   }
-  function rgbn(n3) {
-    return new Rgb(n3 >> 16 & 255, n3 >> 8 & 255, n3 & 255, 1);
+  function areaRingEnd() {
+    areaPoint(lambda00, phi00);
   }
-  function rgba(r2, g3, b2, a2) {
-    if (a2 <= 0) r2 = g3 = b2 = NaN;
-    return new Rgb(r2, g3, b2, a2);
+  function areaPointFirst(lambda, phi) {
+    areaStream.point = areaPoint;
+    lambda00 = lambda, phi00 = phi;
+    lambda *= radians, phi *= radians;
+    lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);
   }
-  function rgbConvert(o2) {
-    if (!(o2 instanceof Color)) o2 = color(o2);
-    if (!o2) return new Rgb();
-    o2 = o2.rgb();
-    return new Rgb(o2.r, o2.g, o2.b, o2.opacity);
+  function areaPoint(lambda, phi) {
+    lambda *= radians, phi *= radians;
+    phi = phi / 2 + quarterPi;
+    var dLambda = lambda - lambda0, sdLambda = dLambda >= 0 ? 1 : -1, adLambda = sdLambda * dLambda, cosPhi = cos(phi), sinPhi = sin(phi), k2 = sinPhi0 * sinPhi, u2 = cosPhi0 * cosPhi + k2 * cos(adLambda), v2 = k2 * sdLambda * sin(adLambda);
+    areaRingSum.add(atan2(v2, u2));
+    lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
   }
-  function rgb(r2, g3, b2, opacity) {
-    return arguments.length === 1 ? rgbConvert(r2) : new Rgb(r2, g3, b2, opacity == null ? 1 : opacity);
+  function area_default(object) {
+    areaSum = new Adder();
+    stream_default(object, areaStream);
+    return areaSum * 2;
   }
-  function Rgb(r2, g3, b2, opacity) {
-    this.r = +r2;
-    this.g = +g3;
-    this.b = +b2;
-    this.opacity = +opacity;
+
+  // node_modules/d3-geo/src/cartesian.js
+  function spherical(cartesian2) {
+    return [atan2(cartesian2[1], cartesian2[0]), asin(cartesian2[2])];
   }
-  define_default(Rgb, rgb, extend(Color, {
-    brighter(k2) {
-      k2 = k2 == null ? brighter : Math.pow(brighter, k2);
-      return new Rgb(this.r * k2, this.g * k2, this.b * k2, this.opacity);
-    },
-    darker(k2) {
-      k2 = k2 == null ? darker : Math.pow(darker, k2);
-      return new Rgb(this.r * k2, this.g * k2, this.b * k2, this.opacity);
-    },
-    rgb() {
-      return this;
-    },
-    clamp() {
-      return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
-    },
-    displayable() {
-      return -0.5 <= this.r && this.r < 255.5 && (-0.5 <= this.g && this.g < 255.5) && (-0.5 <= this.b && this.b < 255.5) && (0 <= this.opacity && this.opacity <= 1);
-    },
-    hex: rgb_formatHex,
-    // Deprecated! Use color.formatHex.
-    formatHex: rgb_formatHex,
-    formatHex8: rgb_formatHex8,
-    formatRgb: rgb_formatRgb,
-    toString: rgb_formatRgb
-  }));
-  function rgb_formatHex() {
-    return "#".concat(hex(this.r)).concat(hex(this.g)).concat(hex(this.b));
+  function cartesian(spherical2) {
+    var lambda = spherical2[0], phi = spherical2[1], cosPhi = cos(phi);
+    return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];
   }
-  function rgb_formatHex8() {
-    return "#".concat(hex(this.r)).concat(hex(this.g)).concat(hex(this.b)).concat(hex((isNaN(this.opacity) ? 1 : this.opacity) * 255));
+  function cartesianDot(a2, b2) {
+    return a2[0] * b2[0] + a2[1] * b2[1] + a2[2] * b2[2];
   }
-  function rgb_formatRgb() {
-    const a2 = clampa(this.opacity);
-    return "".concat(a2 === 1 ? "rgb(" : "rgba(").concat(clampi(this.r), ", ").concat(clampi(this.g), ", ").concat(clampi(this.b)).concat(a2 === 1 ? ")" : ", ".concat(a2, ")"));
+  function cartesianCross(a2, b2) {
+    return [a2[1] * b2[2] - a2[2] * b2[1], a2[2] * b2[0] - a2[0] * b2[2], a2[0] * b2[1] - a2[1] * b2[0]];
   }
-  function clampa(opacity) {
-    return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
+  function cartesianAddInPlace(a2, b2) {
+    a2[0] += b2[0], a2[1] += b2[1], a2[2] += b2[2];
   }
-  function clampi(value) {
-    return Math.max(0, Math.min(255, Math.round(value) || 0));
+  function cartesianScale(vector, k2) {
+    return [vector[0] * k2, vector[1] * k2, vector[2] * k2];
   }
-  function hex(value) {
-    value = clampi(value);
-    return (value < 16 ? "0" : "") + value.toString(16);
+  function cartesianNormalizeInPlace(d2) {
+    var l2 = sqrt(d2[0] * d2[0] + d2[1] * d2[1] + d2[2] * d2[2]);
+    d2[0] /= l2, d2[1] /= l2, d2[2] /= l2;
   }
-  function hsla(h2, s2, l2, a2) {
-    if (a2 <= 0) h2 = s2 = l2 = NaN;
-    else if (l2 <= 0 || l2 >= 1) h2 = s2 = NaN;
-    else if (s2 <= 0) h2 = NaN;
-    return new Hsl(h2, s2, l2, a2);
+
+  // node_modules/d3-geo/src/bounds.js
+  var lambda02;
+  var phi0;
+  var lambda1;
+  var phi1;
+  var lambda2;
+  var lambda002;
+  var phi002;
+  var p0;
+  var deltaSum;
+  var ranges;
+  var range2;
+  var boundsStream = {
+    point: boundsPoint,
+    lineStart: boundsLineStart,
+    lineEnd: boundsLineEnd,
+    polygonStart: function() {
+      boundsStream.point = boundsRingPoint;
+      boundsStream.lineStart = boundsRingStart;
+      boundsStream.lineEnd = boundsRingEnd;
+      deltaSum = new Adder();
+      areaStream.polygonStart();
+    },
+    polygonEnd: function() {
+      areaStream.polygonEnd();
+      boundsStream.point = boundsPoint;
+      boundsStream.lineStart = boundsLineStart;
+      boundsStream.lineEnd = boundsLineEnd;
+      if (areaRingSum < 0) lambda02 = -(lambda1 = 180), phi0 = -(phi1 = 90);
+      else if (deltaSum > epsilon) phi1 = 90;
+      else if (deltaSum < -epsilon) phi0 = -90;
+      range2[0] = lambda02, range2[1] = lambda1;
+    },
+    sphere: function() {
+      lambda02 = -(lambda1 = 180), phi0 = -(phi1 = 90);
+    }
+  };
+  function boundsPoint(lambda, phi) {
+    ranges.push(range2 = [lambda02 = lambda, lambda1 = lambda]);
+    if (phi < phi0) phi0 = phi;
+    if (phi > phi1) phi1 = phi;
   }
-  function hslConvert(o2) {
-    if (o2 instanceof Hsl) return new Hsl(o2.h, o2.s, o2.l, o2.opacity);
-    if (!(o2 instanceof Color)) o2 = color(o2);
-    if (!o2) return new Hsl();
-    if (o2 instanceof Hsl) return o2;
-    o2 = o2.rgb();
-    var r2 = o2.r / 255, g3 = o2.g / 255, b2 = o2.b / 255, min3 = Math.min(r2, g3, b2), max3 = Math.max(r2, g3, b2), h2 = NaN, s2 = max3 - min3, l2 = (max3 + min3) / 2;
-    if (s2) {
-      if (r2 === max3) h2 = (g3 - b2) / s2 + (g3 < b2) * 6;
-      else if (g3 === max3) h2 = (b2 - r2) / s2 + 2;
-      else h2 = (r2 - g3) / s2 + 4;
-      s2 /= l2 < 0.5 ? max3 + min3 : 2 - max3 - min3;
-      h2 *= 60;
+  function linePoint(lambda, phi) {
+    var p2 = cartesian([lambda * radians, phi * radians]);
+    if (p0) {
+      var normal = cartesianCross(p0, p2), equatorial = [normal[1], -normal[0], 0], inflection = cartesianCross(equatorial, normal);
+      cartesianNormalizeInPlace(inflection);
+      inflection = spherical(inflection);
+      var delta = lambda - lambda2, sign2 = delta > 0 ? 1 : -1, lambdai = inflection[0] * degrees * sign2, phii, antimeridian = abs(delta) > 180;
+      if (antimeridian ^ (sign2 * lambda2 < lambdai && lambdai < sign2 * lambda)) {
+        phii = inflection[1] * degrees;
+        if (phii > phi1) phi1 = phii;
+      } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign2 * lambda2 < lambdai && lambdai < sign2 * lambda)) {
+        phii = -inflection[1] * degrees;
+        if (phii < phi0) phi0 = phii;
+      } else {
+        if (phi < phi0) phi0 = phi;
+        if (phi > phi1) phi1 = phi;
+      }
+      if (antimeridian) {
+        if (lambda < lambda2) {
+          if (angle(lambda02, lambda) > angle(lambda02, lambda1)) lambda1 = lambda;
+        } else {
+          if (angle(lambda, lambda1) > angle(lambda02, lambda1)) lambda02 = lambda;
+        }
+      } else {
+        if (lambda1 >= lambda02) {
+          if (lambda < lambda02) lambda02 = lambda;
+          if (lambda > lambda1) lambda1 = lambda;
+        } else {
+          if (lambda > lambda2) {
+            if (angle(lambda02, lambda) > angle(lambda02, lambda1)) lambda1 = lambda;
+          } else {
+            if (angle(lambda, lambda1) > angle(lambda02, lambda1)) lambda02 = lambda;
+          }
+        }
+      }
     } else {
-      s2 = l2 > 0 && l2 < 1 ? 0 : h2;
+      ranges.push(range2 = [lambda02 = lambda, lambda1 = lambda]);
     }
-    return new Hsl(h2, s2, l2, o2.opacity);
+    if (phi < phi0) phi0 = phi;
+    if (phi > phi1) phi1 = phi;
+    p0 = p2, lambda2 = lambda;
   }
-  function hsl(h2, s2, l2, opacity) {
-    return arguments.length === 1 ? hslConvert(h2) : new Hsl(h2, s2, l2, opacity == null ? 1 : opacity);
+  function boundsLineStart() {
+    boundsStream.point = linePoint;
   }
-  function Hsl(h2, s2, l2, opacity) {
-    this.h = +h2;
-    this.s = +s2;
-    this.l = +l2;
-    this.opacity = +opacity;
+  function boundsLineEnd() {
+    range2[0] = lambda02, range2[1] = lambda1;
+    boundsStream.point = boundsPoint;
+    p0 = null;
   }
-  define_default(Hsl, hsl, extend(Color, {
-    brighter(k2) {
-      k2 = k2 == null ? brighter : Math.pow(brighter, k2);
-      return new Hsl(this.h, this.s, this.l * k2, this.opacity);
-    },
-    darker(k2) {
-      k2 = k2 == null ? darker : Math.pow(darker, k2);
-      return new Hsl(this.h, this.s, this.l * k2, this.opacity);
-    },
-    rgb() {
-      var h2 = this.h % 360 + (this.h < 0) * 360, s2 = isNaN(h2) || isNaN(this.s) ? 0 : this.s, l2 = this.l, m2 = l2 + (l2 < 0.5 ? l2 : 1 - l2) * s2, m1 = 2 * l2 - m2;
-      return new Rgb(
-        hsl2rgb(h2 >= 240 ? h2 - 240 : h2 + 120, m1, m2),
-        hsl2rgb(h2, m1, m2),
-        hsl2rgb(h2 < 120 ? h2 + 240 : h2 - 120, m1, m2),
-        this.opacity
-      );
-    },
-    clamp() {
-      return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
-    },
-    displayable() {
-      return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && (0 <= this.l && this.l <= 1) && (0 <= this.opacity && this.opacity <= 1);
-    },
-    formatHsl() {
-      const a2 = clampa(this.opacity);
-      return "".concat(a2 === 1 ? "hsl(" : "hsla(").concat(clamph(this.h), ", ").concat(clampt(this.s) * 100, "%, ").concat(clampt(this.l) * 100, "%").concat(a2 === 1 ? ")" : ", ".concat(a2, ")"));
+  function boundsRingPoint(lambda, phi) {
+    if (p0) {
+      var delta = lambda - lambda2;
+      deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
+    } else {
+      lambda002 = lambda, phi002 = phi;
     }
-  }));
-  function clamph(value) {
-    value = (value || 0) % 360;
-    return value < 0 ? value + 360 : value;
+    areaStream.point(lambda, phi);
+    linePoint(lambda, phi);
   }
-  function clampt(value) {
-    return Math.max(0, Math.min(1, value || 0));
+  function boundsRingStart() {
+    areaStream.lineStart();
   }
-  function hsl2rgb(h2, m1, m2) {
-    return (h2 < 60 ? m1 + (m2 - m1) * h2 / 60 : h2 < 180 ? m2 : h2 < 240 ? m1 + (m2 - m1) * (240 - h2) / 60 : m1) * 255;
+  function boundsRingEnd() {
+    boundsRingPoint(lambda002, phi002);
+    areaStream.lineEnd();
+    if (abs(deltaSum) > epsilon) lambda02 = -(lambda1 = 180);
+    range2[0] = lambda02, range2[1] = lambda1;
+    p0 = null;
   }
-
-  // node_modules/d3-interpolate/src/basis.js
-  function basis(t1, v0, v1, v2, v3) {
-    var t2 = t1 * t1, t3 = t2 * t1;
-    return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;
+  function angle(lambda04, lambda12) {
+    return (lambda12 -= lambda04) < 0 ? lambda12 + 360 : lambda12;
   }
-  function basis_default(values) {
-    var n3 = values.length - 1;
-    return function(t2) {
-      var i3 = t2 <= 0 ? t2 = 0 : t2 >= 1 ? (t2 = 1, n3 - 1) : Math.floor(t2 * n3), v1 = values[i3], v2 = values[i3 + 1], v0 = i3 > 0 ? values[i3 - 1] : 2 * v1 - v2, v3 = i3 < n3 - 1 ? values[i3 + 2] : 2 * v2 - v1;
-      return basis((t2 - i3 / n3) * n3, v0, v1, v2, v3);
-    };
+  function rangeCompare(a2, b2) {
+    return a2[0] - b2[0];
+  }
+  function rangeContains(range3, x2) {
+    return range3[0] <= range3[1] ? range3[0] <= x2 && x2 <= range3[1] : x2 < range3[0] || range3[1] < x2;
+  }
+  function bounds_default(feature3) {
+    var i3, n3, a2, b2, merged, deltaMax, delta;
+    phi1 = lambda1 = -(lambda02 = phi0 = Infinity);
+    ranges = [];
+    stream_default(feature3, boundsStream);
+    if (n3 = ranges.length) {
+      ranges.sort(rangeCompare);
+      for (i3 = 1, a2 = ranges[0], merged = [a2]; i3 < n3; ++i3) {
+        b2 = ranges[i3];
+        if (rangeContains(a2, b2[0]) || rangeContains(a2, b2[1])) {
+          if (angle(a2[0], b2[1]) > angle(a2[0], a2[1])) a2[1] = b2[1];
+          if (angle(b2[0], a2[1]) > angle(a2[0], a2[1])) a2[0] = b2[0];
+        } else {
+          merged.push(a2 = b2);
+        }
+      }
+      for (deltaMax = -Infinity, n3 = merged.length - 1, i3 = 0, a2 = merged[n3]; i3 <= n3; a2 = b2, ++i3) {
+        b2 = merged[i3];
+        if ((delta = angle(a2[1], b2[0])) > deltaMax) deltaMax = delta, lambda02 = b2[0], lambda1 = a2[1];
+      }
+    }
+    ranges = range2 = null;
+    return lambda02 === Infinity || phi0 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda02, phi0], [lambda1, phi1]];
   }
 
-  // node_modules/d3-interpolate/src/basisClosed.js
-  function basisClosed_default(values) {
-    var n3 = values.length;
-    return function(t2) {
-      var i3 = Math.floor(((t2 %= 1) < 0 ? ++t2 : t2) * n3), v0 = values[(i3 + n3 - 1) % n3], v1 = values[i3 % n3], v2 = values[(i3 + 1) % n3], v3 = values[(i3 + 2) % n3];
-      return basis((t2 - i3 / n3) * n3, v0, v1, v2, v3);
+  // node_modules/d3-geo/src/compose.js
+  function compose_default(a2, b2) {
+    function compose(x2, y2) {
+      return x2 = a2(x2, y2), b2(x2[0], x2[1]);
+    }
+    if (a2.invert && b2.invert) compose.invert = function(x2, y2) {
+      return x2 = b2.invert(x2, y2), x2 && a2.invert(x2[0], x2[1]);
     };
+    return compose;
   }
 
-  // node_modules/d3-interpolate/src/constant.js
-  var constant_default3 = (x2) => () => x2;
-
-  // node_modules/d3-interpolate/src/color.js
-  function linear(a2, d2) {
-    return function(t2) {
-      return a2 + t2 * d2;
-    };
+  // node_modules/d3-geo/src/rotation.js
+  function rotationIdentity(lambda, phi) {
+    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;
+    return [lambda, phi];
   }
-  function exponential(a2, b2, y2) {
-    return a2 = Math.pow(a2, y2), b2 = Math.pow(b2, y2) - a2, y2 = 1 / y2, function(t2) {
-      return Math.pow(a2 + t2 * b2, y2);
-    };
+  rotationIdentity.invert = rotationIdentity;
+  function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
+    return (deltaLambda %= tau) ? deltaPhi || deltaGamma ? compose_default(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) : rotationLambda(deltaLambda) : deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) : rotationIdentity;
   }
-  function gamma(y2) {
-    return (y2 = +y2) === 1 ? nogamma : function(a2, b2) {
-      return b2 - a2 ? exponential(a2, b2, y2) : constant_default3(isNaN(a2) ? b2 : a2);
+  function forwardRotationLambda(deltaLambda) {
+    return function(lambda, phi) {
+      lambda += deltaLambda;
+      if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;
+      return [lambda, phi];
     };
   }
-  function nogamma(a2, b2) {
-    var d2 = b2 - a2;
-    return d2 ? linear(a2, d2) : constant_default3(isNaN(a2) ? b2 : a2);
+  function rotationLambda(deltaLambda) {
+    var rotation = forwardRotationLambda(deltaLambda);
+    rotation.invert = forwardRotationLambda(-deltaLambda);
+    return rotation;
   }
-
-  // node_modules/d3-interpolate/src/rgb.js
-  var rgb_default = function rgbGamma(y2) {
-    var color2 = gamma(y2);
-    function rgb2(start2, end) {
-      var r2 = color2((start2 = rgb(start2)).r, (end = rgb(end)).r), g3 = color2(start2.g, end.g), b2 = color2(start2.b, end.b), opacity = nogamma(start2.opacity, end.opacity);
-      return function(t2) {
-        start2.r = r2(t2);
-        start2.g = g3(t2);
-        start2.b = b2(t2);
-        start2.opacity = opacity(t2);
-        return start2 + "";
-      };
+  function rotationPhiGamma(deltaPhi, deltaGamma) {
+    var cosDeltaPhi = cos(deltaPhi), sinDeltaPhi = sin(deltaPhi), cosDeltaGamma = cos(deltaGamma), sinDeltaGamma = sin(deltaGamma);
+    function rotation(lambda, phi) {
+      var cosPhi = cos(phi), x2 = cos(lambda) * cosPhi, y2 = sin(lambda) * cosPhi, z2 = sin(phi), k2 = z2 * cosDeltaPhi + x2 * sinDeltaPhi;
+      return [
+        atan2(y2 * cosDeltaGamma - k2 * sinDeltaGamma, x2 * cosDeltaPhi - z2 * sinDeltaPhi),
+        asin(k2 * cosDeltaGamma + y2 * sinDeltaGamma)
+      ];
     }
-    rgb2.gamma = rgbGamma;
-    return rgb2;
-  }(1);
-  function rgbSpline(spline) {
-    return function(colors) {
-      var n3 = colors.length, r2 = new Array(n3), g3 = new Array(n3), b2 = new Array(n3), i3, color2;
-      for (i3 = 0; i3 < n3; ++i3) {
-        color2 = rgb(colors[i3]);
-        r2[i3] = color2.r || 0;
-        g3[i3] = color2.g || 0;
-        b2[i3] = color2.b || 0;
-      }
-      r2 = spline(r2);
-      g3 = spline(g3);
-      b2 = spline(b2);
-      color2.opacity = 1;
-      return function(t2) {
-        color2.r = r2(t2);
-        color2.g = g3(t2);
-        color2.b = b2(t2);
-        return color2 + "";
-      };
+    rotation.invert = function(lambda, phi) {
+      var cosPhi = cos(phi), x2 = cos(lambda) * cosPhi, y2 = sin(lambda) * cosPhi, z2 = sin(phi), k2 = z2 * cosDeltaGamma - y2 * sinDeltaGamma;
+      return [
+        atan2(y2 * cosDeltaGamma + z2 * sinDeltaGamma, x2 * cosDeltaPhi + k2 * sinDeltaPhi),
+        asin(k2 * cosDeltaPhi - x2 * sinDeltaPhi)
+      ];
     };
+    return rotation;
   }
-  var rgbBasis = rgbSpline(basis_default);
-  var rgbBasisClosed = rgbSpline(basisClosed_default);
-
-  // node_modules/d3-interpolate/src/numberArray.js
-  function numberArray_default(a2, b2) {
-    if (!b2) b2 = [];
-    var n3 = a2 ? Math.min(b2.length, a2.length) : 0, c2 = b2.slice(), i3;
-    return function(t2) {
-      for (i3 = 0; i3 < n3; ++i3) c2[i3] = a2[i3] * (1 - t2) + b2[i3] * t2;
-      return c2;
+  function rotation_default(rotate) {
+    rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
+    function forward(coordinates) {
+      coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
+      return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;
+    }
+    forward.invert = function(coordinates) {
+      coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
+      return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;
     };
-  }
-  function isNumberArray(x2) {
-    return ArrayBuffer.isView(x2) && !(x2 instanceof DataView);
+    return forward;
   }
 
-  // node_modules/d3-interpolate/src/array.js
-  function genericArray(a2, b2) {
-    var nb = b2 ? b2.length : 0, na = a2 ? Math.min(nb, a2.length) : 0, x2 = new Array(na), c2 = new Array(nb), i3;
-    for (i3 = 0; i3 < na; ++i3) x2[i3] = value_default(a2[i3], b2[i3]);
-    for (; i3 < nb; ++i3) c2[i3] = b2[i3];
-    return function(t2) {
-      for (i3 = 0; i3 < na; ++i3) c2[i3] = x2[i3](t2);
-      return c2;
-    };
+  // node_modules/d3-geo/src/circle.js
+  function circleStream(stream, radius, delta, direction, t0, t1) {
+    if (!delta) return;
+    var cosRadius = cos(radius), sinRadius = sin(radius), step = direction * delta;
+    if (t0 == null) {
+      t0 = radius + direction * tau;
+      t1 = radius - step / 2;
+    } else {
+      t0 = circleRadius(cosRadius, t0);
+      t1 = circleRadius(cosRadius, t1);
+      if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;
+    }
+    for (var point, t2 = t0; direction > 0 ? t2 > t1 : t2 < t1; t2 -= step) {
+      point = spherical([cosRadius, -sinRadius * cos(t2), -sinRadius * sin(t2)]);
+      stream.point(point[0], point[1]);
+    }
+  }
+  function circleRadius(cosRadius, point) {
+    point = cartesian(point), point[0] -= cosRadius;
+    cartesianNormalizeInPlace(point);
+    var radius = acos(-point[1]);
+    return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;
   }
 
-  // node_modules/d3-interpolate/src/date.js
-  function date_default(a2, b2) {
-    var d2 = /* @__PURE__ */ new Date();
-    return a2 = +a2, b2 = +b2, function(t2) {
-      return d2.setTime(a2 * (1 - t2) + b2 * t2), d2;
+  // node_modules/d3-geo/src/clip/buffer.js
+  function buffer_default() {
+    var lines = [], line;
+    return {
+      point: function(x2, y2, m2) {
+        line.push([x2, y2, m2]);
+      },
+      lineStart: function() {
+        lines.push(line = []);
+      },
+      lineEnd: noop,
+      rejoin: function() {
+        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
+      },
+      result: function() {
+        var result = lines;
+        lines = [];
+        line = null;
+        return result;
+      }
     };
   }
 
-  // node_modules/d3-interpolate/src/number.js
-  function number_default(a2, b2) {
-    return a2 = +a2, b2 = +b2, function(t2) {
-      return a2 * (1 - t2) + b2 * t2;
-    };
+  // node_modules/d3-geo/src/pointEqual.js
+  function pointEqual_default(a2, b2) {
+    return abs(a2[0] - b2[0]) < epsilon && abs(a2[1] - b2[1]) < epsilon;
   }
 
-  // node_modules/d3-interpolate/src/object.js
-  function object_default(a2, b2) {
-    var i3 = {}, c2 = {}, k2;
-    if (a2 === null || typeof a2 !== "object") a2 = {};
-    if (b2 === null || typeof b2 !== "object") b2 = {};
-    for (k2 in b2) {
-      if (k2 in a2) {
-        i3[k2] = value_default(a2[k2], b2[k2]);
-      } else {
-        c2[k2] = b2[k2];
+  // node_modules/d3-geo/src/clip/rejoin.js
+  function Intersection(point, points, other2, entry) {
+    this.x = point;
+    this.z = points;
+    this.o = other2;
+    this.e = entry;
+    this.v = false;
+    this.n = this.p = null;
+  }
+  function rejoin_default(segments, compareIntersection2, startInside, interpolate, stream) {
+    var subject = [], clip = [], i3, n3;
+    segments.forEach(function(segment) {
+      if ((n4 = segment.length - 1) <= 0) return;
+      var n4, p02 = segment[0], p1 = segment[n4], x2;
+      if (pointEqual_default(p02, p1)) {
+        if (!p02[2] && !p1[2]) {
+          stream.lineStart();
+          for (i3 = 0; i3 < n4; ++i3) stream.point((p02 = segment[i3])[0], p02[1]);
+          stream.lineEnd();
+          return;
+        }
+        p1[0] += 2 * epsilon;
       }
+      subject.push(x2 = new Intersection(p02, segment, null, true));
+      clip.push(x2.o = new Intersection(p02, null, x2, false));
+      subject.push(x2 = new Intersection(p1, segment, null, false));
+      clip.push(x2.o = new Intersection(p1, null, x2, true));
+    });
+    if (!subject.length) return;
+    clip.sort(compareIntersection2);
+    link(subject);
+    link(clip);
+    for (i3 = 0, n3 = clip.length; i3 < n3; ++i3) {
+      clip[i3].e = startInside = !startInside;
     }
-    return function(t2) {
-      for (k2 in i3) c2[k2] = i3[k2](t2);
-      return c2;
-    };
+    var start2 = subject[0], points, point;
+    while (1) {
+      var current = start2, isSubject = true;
+      while (current.v) if ((current = current.n) === start2) return;
+      points = current.z;
+      stream.lineStart();
+      do {
+        current.v = current.o.v = true;
+        if (current.e) {
+          if (isSubject) {
+            for (i3 = 0, n3 = points.length; i3 < n3; ++i3) stream.point((point = points[i3])[0], point[1]);
+          } else {
+            interpolate(current.x, current.n.x, 1, stream);
+          }
+          current = current.n;
+        } else {
+          if (isSubject) {
+            points = current.p.z;
+            for (i3 = points.length - 1; i3 >= 0; --i3) stream.point((point = points[i3])[0], point[1]);
+          } else {
+            interpolate(current.x, current.p.x, -1, stream);
+          }
+          current = current.p;
+        }
+        current = current.o;
+        points = current.z;
+        isSubject = !isSubject;
+      } while (!current.v);
+      stream.lineEnd();
+    }
+  }
+  function link(array2) {
+    if (!(n3 = array2.length)) return;
+    var n3, i3 = 0, a2 = array2[0], b2;
+    while (++i3 < n3) {
+      a2.n = b2 = array2[i3];
+      b2.p = a2;
+      a2 = b2;
+    }
+    a2.n = b2 = array2[0];
+    b2.p = a2;
   }
 
-  // node_modules/d3-interpolate/src/string.js
-  var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
-  var reB = new RegExp(reA.source, "g");
-  function zero2(b2) {
-    return function() {
-      return b2;
-    };
+  // node_modules/d3-geo/src/polygonContains.js
+  function longitude(point) {
+    return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);
   }
-  function one(b2) {
-    return function(t2) {
-      return b2(t2) + "";
-    };
+  function polygonContains_default(polygon2, point) {
+    var lambda = longitude(point), phi = point[1], sinPhi = sin(phi), normal = [sin(lambda), -cos(lambda), 0], angle2 = 0, winding = 0;
+    var sum = new Adder();
+    if (sinPhi === 1) phi = halfPi + epsilon;
+    else if (sinPhi === -1) phi = -halfPi - epsilon;
+    for (var i3 = 0, n3 = polygon2.length; i3 < n3; ++i3) {
+      if (!(m2 = (ring = polygon2[i3]).length)) continue;
+      var ring, m2, point0 = ring[m2 - 1], lambda04 = longitude(point0), phi02 = point0[1] / 2 + quarterPi, sinPhi03 = sin(phi02), cosPhi03 = cos(phi02);
+      for (var j2 = 0; j2 < m2; ++j2, lambda04 = lambda12, sinPhi03 = sinPhi1, cosPhi03 = cosPhi1, point0 = point1) {
+        var point1 = ring[j2], lambda12 = longitude(point1), phi12 = point1[1] / 2 + quarterPi, sinPhi1 = sin(phi12), cosPhi1 = cos(phi12), delta = lambda12 - lambda04, sign2 = delta >= 0 ? 1 : -1, absDelta = sign2 * delta, antimeridian = absDelta > pi, k2 = sinPhi03 * sinPhi1;
+        sum.add(atan2(k2 * sign2 * sin(absDelta), cosPhi03 * cosPhi1 + k2 * cos(absDelta)));
+        angle2 += antimeridian ? delta + sign2 * tau : delta;
+        if (antimeridian ^ lambda04 >= lambda ^ lambda12 >= lambda) {
+          var arc = cartesianCross(cartesian(point0), cartesian(point1));
+          cartesianNormalizeInPlace(arc);
+          var intersection2 = cartesianCross(normal, arc);
+          cartesianNormalizeInPlace(intersection2);
+          var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection2[2]);
+          if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
+            winding += antimeridian ^ delta >= 0 ? 1 : -1;
+          }
+        }
+      }
+    }
+    return (angle2 < -epsilon || angle2 < epsilon && sum < -epsilon2) ^ winding & 1;
   }
-  function string_default(a2, b2) {
-    var bi = reA.lastIndex = reB.lastIndex = 0, am, bm, bs, i3 = -1, s2 = [], q2 = [];
-    a2 = a2 + "", b2 = b2 + "";
-    while ((am = reA.exec(a2)) && (bm = reB.exec(b2))) {
-      if ((bs = bm.index) > bi) {
-        bs = b2.slice(bi, bs);
-        if (s2[i3]) s2[i3] += bs;
-        else s2[++i3] = bs;
+
+  // node_modules/d3-geo/src/clip/index.js
+  function clip_default(pointVisible, clipLine, interpolate, start2) {
+    return function(sink) {
+      var line = clipLine(sink), ringBuffer = buffer_default(), ringSink = clipLine(ringBuffer), polygonStarted = false, polygon2, segments, ring;
+      var clip = {
+        point,
+        lineStart,
+        lineEnd,
+        polygonStart: function() {
+          clip.point = pointRing;
+          clip.lineStart = ringStart;
+          clip.lineEnd = ringEnd;
+          segments = [];
+          polygon2 = [];
+        },
+        polygonEnd: function() {
+          clip.point = point;
+          clip.lineStart = lineStart;
+          clip.lineEnd = lineEnd;
+          segments = merge(segments);
+          var startInside = polygonContains_default(polygon2, start2);
+          if (segments.length) {
+            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+            rejoin_default(segments, compareIntersection, startInside, interpolate, sink);
+          } else if (startInside) {
+            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+            sink.lineStart();
+            interpolate(null, null, 1, sink);
+            sink.lineEnd();
+          }
+          if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
+          segments = polygon2 = null;
+        },
+        sphere: function() {
+          sink.polygonStart();
+          sink.lineStart();
+          interpolate(null, null, 1, sink);
+          sink.lineEnd();
+          sink.polygonEnd();
+        }
+      };
+      function point(lambda, phi) {
+        if (pointVisible(lambda, phi)) sink.point(lambda, phi);
       }
-      if ((am = am[0]) === (bm = bm[0])) {
-        if (s2[i3]) s2[i3] += bm;
-        else s2[++i3] = bm;
-      } else {
-        s2[++i3] = null;
-        q2.push({ i: i3, x: number_default(am, bm) });
+      function pointLine(lambda, phi) {
+        line.point(lambda, phi);
+      }
+      function lineStart() {
+        clip.point = pointLine;
+        line.lineStart();
+      }
+      function lineEnd() {
+        clip.point = point;
+        line.lineEnd();
+      }
+      function pointRing(lambda, phi) {
+        ring.push([lambda, phi]);
+        ringSink.point(lambda, phi);
+      }
+      function ringStart() {
+        ringSink.lineStart();
+        ring = [];
+      }
+      function ringEnd() {
+        pointRing(ring[0][0], ring[0][1]);
+        ringSink.lineEnd();
+        var clean2 = ringSink.clean(), ringSegments = ringBuffer.result(), i3, n3 = ringSegments.length, m2, segment, point2;
+        ring.pop();
+        polygon2.push(ring);
+        ring = null;
+        if (!n3) return;
+        if (clean2 & 1) {
+          segment = ringSegments[0];
+          if ((m2 = segment.length - 1) > 0) {
+            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+            sink.lineStart();
+            for (i3 = 0; i3 < m2; ++i3) sink.point((point2 = segment[i3])[0], point2[1]);
+            sink.lineEnd();
+          }
+          return;
+        }
+        if (n3 > 1 && clean2 & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
+        segments.push(ringSegments.filter(validSegment));
       }
-      bi = reB.lastIndex;
-    }
-    if (bi < b2.length) {
-      bs = b2.slice(bi);
-      if (s2[i3]) s2[i3] += bs;
-      else s2[++i3] = bs;
-    }
-    return s2.length < 2 ? q2[0] ? one(q2[0].x) : zero2(b2) : (b2 = q2.length, function(t2) {
-      for (var i4 = 0, o2; i4 < b2; ++i4) s2[(o2 = q2[i4]).i] = o2.x(t2);
-      return s2.join("");
-    });
+      return clip;
+    };
   }
-
-  // node_modules/d3-interpolate/src/value.js
-  function value_default(a2, b2) {
-    var t2 = typeof b2, c2;
-    return b2 == null || t2 === "boolean" ? constant_default3(b2) : (t2 === "number" ? number_default : t2 === "string" ? (c2 = color(b2)) ? (b2 = c2, rgb_default) : string_default : b2 instanceof color ? rgb_default : b2 instanceof Date ? date_default : isNumberArray(b2) ? numberArray_default : Array.isArray(b2) ? genericArray : typeof b2.valueOf !== "function" && typeof b2.toString !== "function" || isNaN(b2) ? object_default : number_default)(a2, b2);
+  function validSegment(segment) {
+    return segment.length > 1;
   }
-
-  // node_modules/d3-interpolate/src/round.js
-  function round_default(a2, b2) {
-    return a2 = +a2, b2 = +b2, function(t2) {
-      return Math.round(a2 * (1 - t2) + b2 * t2);
-    };
+  function compareIntersection(a2, b2) {
+    return ((a2 = a2.x)[0] < 0 ? a2[1] - halfPi - epsilon : halfPi - a2[1]) - ((b2 = b2.x)[0] < 0 ? b2[1] - halfPi - epsilon : halfPi - b2[1]);
   }
 
-  // node_modules/d3-interpolate/src/transform/decompose.js
-  var degrees2 = 180 / Math.PI;
-  var identity = {
-    translateX: 0,
-    translateY: 0,
-    rotate: 0,
-    skewX: 0,
-    scaleX: 1,
-    scaleY: 1
-  };
-  function decompose_default(a2, b2, c2, d2, e3, f2) {
-    var scaleX, scaleY, skewX;
-    if (scaleX = Math.sqrt(a2 * a2 + b2 * b2)) a2 /= scaleX, b2 /= scaleX;
-    if (skewX = a2 * c2 + b2 * d2) c2 -= a2 * skewX, d2 -= b2 * skewX;
-    if (scaleY = Math.sqrt(c2 * c2 + d2 * d2)) c2 /= scaleY, d2 /= scaleY, skewX /= scaleY;
-    if (a2 * d2 < b2 * c2) a2 = -a2, b2 = -b2, skewX = -skewX, scaleX = -scaleX;
+  // node_modules/d3-geo/src/clip/antimeridian.js
+  var antimeridian_default = clip_default(
+    function() {
+      return true;
+    },
+    clipAntimeridianLine,
+    clipAntimeridianInterpolate,
+    [-pi, -halfPi]
+  );
+  function clipAntimeridianLine(stream) {
+    var lambda04 = NaN, phi02 = NaN, sign0 = NaN, clean2;
     return {
-      translateX: e3,
-      translateY: f2,
-      rotate: Math.atan2(b2, a2) * degrees2,
-      skewX: Math.atan(skewX) * degrees2,
-      scaleX,
-      scaleY
+      lineStart: function() {
+        stream.lineStart();
+        clean2 = 1;
+      },
+      point: function(lambda12, phi12) {
+        var sign1 = lambda12 > 0 ? pi : -pi, delta = abs(lambda12 - lambda04);
+        if (abs(delta - pi) < epsilon) {
+          stream.point(lambda04, phi02 = (phi02 + phi12) / 2 > 0 ? halfPi : -halfPi);
+          stream.point(sign0, phi02);
+          stream.lineEnd();
+          stream.lineStart();
+          stream.point(sign1, phi02);
+          stream.point(lambda12, phi02);
+          clean2 = 0;
+        } else if (sign0 !== sign1 && delta >= pi) {
+          if (abs(lambda04 - sign0) < epsilon) lambda04 -= sign0 * epsilon;
+          if (abs(lambda12 - sign1) < epsilon) lambda12 -= sign1 * epsilon;
+          phi02 = clipAntimeridianIntersect(lambda04, phi02, lambda12, phi12);
+          stream.point(sign0, phi02);
+          stream.lineEnd();
+          stream.lineStart();
+          stream.point(sign1, phi02);
+          clean2 = 0;
+        }
+        stream.point(lambda04 = lambda12, phi02 = phi12);
+        sign0 = sign1;
+      },
+      lineEnd: function() {
+        stream.lineEnd();
+        lambda04 = phi02 = NaN;
+      },
+      clean: function() {
+        return 2 - clean2;
+      }
     };
   }
-
-  // node_modules/d3-interpolate/src/transform/parse.js
-  var svgNode;
-  function parseCss(value) {
-    const m2 = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
-    return m2.isIdentity ? identity : decompose_default(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);
+  function clipAntimeridianIntersect(lambda04, phi02, lambda12, phi12) {
+    var cosPhi03, cosPhi1, sinLambda0Lambda1 = sin(lambda04 - lambda12);
+    return abs(sinLambda0Lambda1) > epsilon ? atan((sin(phi02) * (cosPhi1 = cos(phi12)) * sin(lambda12) - sin(phi12) * (cosPhi03 = cos(phi02)) * sin(lambda04)) / (cosPhi03 * cosPhi1 * sinLambda0Lambda1)) : (phi02 + phi12) / 2;
   }
-  function parseSvg(value) {
-    if (value == null) return identity;
-    if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
-    svgNode.setAttribute("transform", value);
-    if (!(value = svgNode.transform.baseVal.consolidate())) return identity;
-    value = value.matrix;
-    return decompose_default(value.a, value.b, value.c, value.d, value.e, value.f);
+  function clipAntimeridianInterpolate(from, to, direction, stream) {
+    var phi;
+    if (from == null) {
+      phi = direction * halfPi;
+      stream.point(-pi, phi);
+      stream.point(0, phi);
+      stream.point(pi, phi);
+      stream.point(pi, 0);
+      stream.point(pi, -phi);
+      stream.point(0, -phi);
+      stream.point(-pi, -phi);
+      stream.point(-pi, 0);
+      stream.point(-pi, phi);
+    } else if (abs(from[0] - to[0]) > epsilon) {
+      var lambda = from[0] < to[0] ? pi : -pi;
+      phi = direction * lambda / 2;
+      stream.point(-lambda, phi);
+      stream.point(0, phi);
+      stream.point(lambda, phi);
+    } else {
+      stream.point(to[0], to[1]);
+    }
   }
 
-  // node_modules/d3-interpolate/src/transform/index.js
-  function interpolateTransform(parse, pxComma, pxParen, degParen) {
-    function pop(s2) {
-      return s2.length ? s2.pop() + " " : "";
+  // node_modules/d3-geo/src/clip/circle.js
+  function circle_default(radius) {
+    var cr = cos(radius), delta = 2 * radians, smallRadius = cr > 0, notHemisphere = abs(cr) > epsilon;
+    function interpolate(from, to, direction, stream) {
+      circleStream(stream, radius, delta, direction, from, to);
     }
-    function translate(xa, ya, xb, yb, s2, q2) {
-      if (xa !== xb || ya !== yb) {
-        var i3 = s2.push("translate(", null, pxComma, null, pxParen);
-        q2.push({ i: i3 - 4, x: number_default(xa, xb) }, { i: i3 - 2, x: number_default(ya, yb) });
-      } else if (xb || yb) {
-        s2.push("translate(" + xb + pxComma + yb + pxParen);
-      }
+    function visible(lambda, phi) {
+      return cos(lambda) * cos(phi) > cr;
     }
-    function rotate(a2, b2, s2, q2) {
-      if (a2 !== b2) {
-        if (a2 - b2 > 180) b2 += 360;
-        else if (b2 - a2 > 180) a2 += 360;
-        q2.push({ i: s2.push(pop(s2) + "rotate(", null, degParen) - 2, x: number_default(a2, b2) });
-      } else if (b2) {
-        s2.push(pop(s2) + "rotate(" + b2 + degParen);
-      }
+    function clipLine(stream) {
+      var point0, c0, v0, v00, clean2;
+      return {
+        lineStart: function() {
+          v00 = v0 = false;
+          clean2 = 1;
+        },
+        point: function(lambda, phi) {
+          var point1 = [lambda, phi], point2, v2 = visible(lambda, phi), c2 = smallRadius ? v2 ? 0 : code(lambda, phi) : v2 ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;
+          if (!point0 && (v00 = v0 = v2)) stream.lineStart();
+          if (v2 !== v0) {
+            point2 = intersect2(point0, point1);
+            if (!point2 || pointEqual_default(point0, point2) || pointEqual_default(point1, point2))
+              point1[2] = 1;
+          }
+          if (v2 !== v0) {
+            clean2 = 0;
+            if (v2) {
+              stream.lineStart();
+              point2 = intersect2(point1, point0);
+              stream.point(point2[0], point2[1]);
+            } else {
+              point2 = intersect2(point0, point1);
+              stream.point(point2[0], point2[1], 2);
+              stream.lineEnd();
+            }
+            point0 = point2;
+          } else if (notHemisphere && point0 && smallRadius ^ v2) {
+            var t2;
+            if (!(c2 & c0) && (t2 = intersect2(point1, point0, true))) {
+              clean2 = 0;
+              if (smallRadius) {
+                stream.lineStart();
+                stream.point(t2[0][0], t2[0][1]);
+                stream.point(t2[1][0], t2[1][1]);
+                stream.lineEnd();
+              } else {
+                stream.point(t2[1][0], t2[1][1]);
+                stream.lineEnd();
+                stream.lineStart();
+                stream.point(t2[0][0], t2[0][1], 3);
+              }
+            }
+          }
+          if (v2 && (!point0 || !pointEqual_default(point0, point1))) {
+            stream.point(point1[0], point1[1]);
+          }
+          point0 = point1, v0 = v2, c0 = c2;
+        },
+        lineEnd: function() {
+          if (v0) stream.lineEnd();
+          point0 = null;
+        },
+        // Rejoin first and last segments if there were intersections and the first
+        // and last points were visible.
+        clean: function() {
+          return clean2 | (v00 && v0) << 1;
+        }
+      };
     }
-    function skewX(a2, b2, s2, q2) {
-      if (a2 !== b2) {
-        q2.push({ i: s2.push(pop(s2) + "skewX(", null, degParen) - 2, x: number_default(a2, b2) });
-      } else if (b2) {
-        s2.push(pop(s2) + "skewX(" + b2 + degParen);
+    function intersect2(a2, b2, two) {
+      var pa = cartesian(a2), pb = cartesian(b2);
+      var n1 = [1, 0, 0], n22 = cartesianCross(pa, pb), n2n2 = cartesianDot(n22, n22), n1n2 = n22[0], determinant = n2n2 - n1n2 * n1n2;
+      if (!determinant) return !two && a2;
+      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = cartesianCross(n1, n22), A2 = cartesianScale(n1, c1), B2 = cartesianScale(n22, c2);
+      cartesianAddInPlace(A2, B2);
+      var u2 = n1xn2, w2 = cartesianDot(A2, u2), uu = cartesianDot(u2, u2), t2 = w2 * w2 - uu * (cartesianDot(A2, A2) - 1);
+      if (t2 < 0) return;
+      var t3 = sqrt(t2), q2 = cartesianScale(u2, (-w2 - t3) / uu);
+      cartesianAddInPlace(q2, A2);
+      q2 = spherical(q2);
+      if (!two) return q2;
+      var lambda04 = a2[0], lambda12 = b2[0], phi02 = a2[1], phi12 = b2[1], z2;
+      if (lambda12 < lambda04) z2 = lambda04, lambda04 = lambda12, lambda12 = z2;
+      var delta2 = lambda12 - lambda04, polar = abs(delta2 - pi) < epsilon, meridian = polar || delta2 < epsilon;
+      if (!polar && phi12 < phi02) z2 = phi02, phi02 = phi12, phi12 = z2;
+      if (meridian ? polar ? phi02 + phi12 > 0 ^ q2[1] < (abs(q2[0] - lambda04) < epsilon ? phi02 : phi12) : phi02 <= q2[1] && q2[1] <= phi12 : delta2 > pi ^ (lambda04 <= q2[0] && q2[0] <= lambda12)) {
+        var q1 = cartesianScale(u2, (-w2 + t3) / uu);
+        cartesianAddInPlace(q1, A2);
+        return [q2, spherical(q1)];
       }
     }
-    function scale(xa, ya, xb, yb, s2, q2) {
-      if (xa !== xb || ya !== yb) {
-        var i3 = s2.push(pop(s2) + "scale(", null, ",", null, ")");
-        q2.push({ i: i3 - 4, x: number_default(xa, xb) }, { i: i3 - 2, x: number_default(ya, yb) });
-      } else if (xb !== 1 || yb !== 1) {
-        s2.push(pop(s2) + "scale(" + xb + "," + yb + ")");
-      }
+    function code(lambda, phi) {
+      var r2 = smallRadius ? radius : pi - radius, code2 = 0;
+      if (lambda < -r2) code2 |= 1;
+      else if (lambda > r2) code2 |= 2;
+      if (phi < -r2) code2 |= 4;
+      else if (phi > r2) code2 |= 8;
+      return code2;
     }
-    return function(a2, b2) {
-      var s2 = [], q2 = [];
-      a2 = parse(a2), b2 = parse(b2);
-      translate(a2.translateX, a2.translateY, b2.translateX, b2.translateY, s2, q2);
-      rotate(a2.rotate, b2.rotate, s2, q2);
-      skewX(a2.skewX, b2.skewX, s2, q2);
-      scale(a2.scaleX, a2.scaleY, b2.scaleX, b2.scaleY, s2, q2);
-      a2 = b2 = null;
-      return function(t2) {
-        var i3 = -1, n3 = q2.length, o2;
-        while (++i3 < n3) s2[(o2 = q2[i3]).i] = o2.x(t2);
-        return s2.join("");
-      };
-    };
+    return clip_default(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);
   }
-  var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
-  var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
 
-  // node_modules/d3-interpolate/src/zoom.js
-  var epsilon22 = 1e-12;
-  function cosh(x2) {
-    return ((x2 = Math.exp(x2)) + 1 / x2) / 2;
-  }
-  function sinh(x2) {
-    return ((x2 = Math.exp(x2)) - 1 / x2) / 2;
-  }
-  function tanh(x2) {
-    return ((x2 = Math.exp(2 * x2)) - 1) / (x2 + 1);
+  // node_modules/d3-geo/src/clip/line.js
+  function line_default(a2, b2, x05, y05, x12, y12) {
+    var ax = a2[0], ay = a2[1], bx = b2[0], by = b2[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r2;
+    r2 = x05 - ax;
+    if (!dx && r2 > 0) return;
+    r2 /= dx;
+    if (dx < 0) {
+      if (r2 < t0) return;
+      if (r2 < t1) t1 = r2;
+    } else if (dx > 0) {
+      if (r2 > t1) return;
+      if (r2 > t0) t0 = r2;
+    }
+    r2 = x12 - ax;
+    if (!dx && r2 < 0) return;
+    r2 /= dx;
+    if (dx < 0) {
+      if (r2 > t1) return;
+      if (r2 > t0) t0 = r2;
+    } else if (dx > 0) {
+      if (r2 < t0) return;
+      if (r2 < t1) t1 = r2;
+    }
+    r2 = y05 - ay;
+    if (!dy && r2 > 0) return;
+    r2 /= dy;
+    if (dy < 0) {
+      if (r2 < t0) return;
+      if (r2 < t1) t1 = r2;
+    } else if (dy > 0) {
+      if (r2 > t1) return;
+      if (r2 > t0) t0 = r2;
+    }
+    r2 = y12 - ay;
+    if (!dy && r2 < 0) return;
+    r2 /= dy;
+    if (dy < 0) {
+      if (r2 > t1) return;
+      if (r2 > t0) t0 = r2;
+    } else if (dy > 0) {
+      if (r2 < t0) return;
+      if (r2 < t1) t1 = r2;
+    }
+    if (t0 > 0) a2[0] = ax + t0 * dx, a2[1] = ay + t0 * dy;
+    if (t1 < 1) b2[0] = ax + t1 * dx, b2[1] = ay + t1 * dy;
+    return true;
   }
-  var zoom_default = function zoomRho(rho, rho2, rho4) {
-    function zoom(p02, p1) {
-      var ux0 = p02[0], uy0 = p02[1], w0 = p02[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i3, S2;
-      if (d2 < epsilon22) {
-        S2 = Math.log(w1 / w0) / rho;
-        i3 = function(t2) {
-          return [
-            ux0 + t2 * dx,
-            uy0 + t2 * dy,
-            w0 * Math.exp(rho * t2 * S2)
-          ];
-        };
+
+  // node_modules/d3-geo/src/clip/rectangle.js
+  var clipMax = 1e9;
+  var clipMin = -clipMax;
+  function clipRectangle(x05, y05, x12, y12) {
+    function visible(x2, y2) {
+      return x05 <= x2 && x2 <= x12 && y05 <= y2 && y2 <= y12;
+    }
+    function interpolate(from, to, direction, stream) {
+      var a2 = 0, a1 = 0;
+      if (from == null || (a2 = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoint(from, to) < 0 ^ direction > 0) {
+        do
+          stream.point(a2 === 0 || a2 === 3 ? x05 : x12, a2 > 1 ? y12 : y05);
+        while ((a2 = (a2 + direction + 4) % 4) !== a1);
       } else {
-        var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
-        S2 = (r1 - r0) / rho;
-        i3 = function(t2) {
-          var s2 = t2 * S2, coshr0 = cosh(r0), u2 = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s2 + r0) - sinh(r0));
-          return [
-            ux0 + u2 * dx,
-            uy0 + u2 * dy,
-            w0 * coshr0 / cosh(rho * s2 + r0)
-          ];
-        };
+        stream.point(to[0], to[1]);
       }
-      i3.duration = S2 * 1e3 * rho / Math.SQRT2;
-      return i3;
     }
-    zoom.rho = function(_2) {
-      var _1 = Math.max(1e-3, +_2), _22 = _1 * _1, _4 = _22 * _22;
-      return zoomRho(_1, _22, _4);
+    function corner(p2, direction) {
+      return abs(p2[0] - x05) < epsilon ? direction > 0 ? 0 : 3 : abs(p2[0] - x12) < epsilon ? direction > 0 ? 2 : 1 : abs(p2[1] - y05) < epsilon ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
+    }
+    function compareIntersection2(a2, b2) {
+      return comparePoint(a2.x, b2.x);
+    }
+    function comparePoint(a2, b2) {
+      var ca = corner(a2, 1), cb = corner(b2, 1);
+      return ca !== cb ? ca - cb : ca === 0 ? b2[1] - a2[1] : ca === 1 ? a2[0] - b2[0] : ca === 2 ? a2[1] - b2[1] : b2[0] - a2[0];
+    }
+    return function(stream) {
+      var activeStream = stream, bufferStream = buffer_default(), segments, polygon2, ring, x__, y__, v__, x_, y_, v_, first, clean2;
+      var clipStream = {
+        point,
+        lineStart,
+        lineEnd,
+        polygonStart,
+        polygonEnd
+      };
+      function point(x2, y2) {
+        if (visible(x2, y2)) activeStream.point(x2, y2);
+      }
+      function polygonInside() {
+        var winding = 0;
+        for (var i3 = 0, n3 = polygon2.length; i3 < n3; ++i3) {
+          for (var ring2 = polygon2[i3], j2 = 1, m2 = ring2.length, point2 = ring2[0], a0, a1, b0 = point2[0], b1 = point2[1]; j2 < m2; ++j2) {
+            a0 = b0, a1 = b1, point2 = ring2[j2], b0 = point2[0], b1 = point2[1];
+            if (a1 <= y12) {
+              if (b1 > y12 && (b0 - a0) * (y12 - a1) > (b1 - a1) * (x05 - a0)) ++winding;
+            } else {
+              if (b1 <= y12 && (b0 - a0) * (y12 - a1) < (b1 - a1) * (x05 - a0)) --winding;
+            }
+          }
+        }
+        return winding;
+      }
+      function polygonStart() {
+        activeStream = bufferStream, segments = [], polygon2 = [], clean2 = true;
+      }
+      function polygonEnd() {
+        var startInside = polygonInside(), cleanInside = clean2 && startInside, visible2 = (segments = merge(segments)).length;
+        if (cleanInside || visible2) {
+          stream.polygonStart();
+          if (cleanInside) {
+            stream.lineStart();
+            interpolate(null, null, 1, stream);
+            stream.lineEnd();
+          }
+          if (visible2) {
+            rejoin_default(segments, compareIntersection2, startInside, interpolate, stream);
+          }
+          stream.polygonEnd();
+        }
+        activeStream = stream, segments = polygon2 = ring = null;
+      }
+      function lineStart() {
+        clipStream.point = linePoint2;
+        if (polygon2) polygon2.push(ring = []);
+        first = true;
+        v_ = false;
+        x_ = y_ = NaN;
+      }
+      function lineEnd() {
+        if (segments) {
+          linePoint2(x__, y__);
+          if (v__ && v_) bufferStream.rejoin();
+          segments.push(bufferStream.result());
+        }
+        clipStream.point = point;
+        if (v_) activeStream.lineEnd();
+      }
+      function linePoint2(x2, y2) {
+        var v2 = visible(x2, y2);
+        if (polygon2) ring.push([x2, y2]);
+        if (first) {
+          x__ = x2, y__ = y2, v__ = v2;
+          first = false;
+          if (v2) {
+            activeStream.lineStart();
+            activeStream.point(x2, y2);
+          }
+        } else {
+          if (v2 && v_) activeStream.point(x2, y2);
+          else {
+            var a2 = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], b2 = [x2 = Math.max(clipMin, Math.min(clipMax, x2)), y2 = Math.max(clipMin, Math.min(clipMax, y2))];
+            if (line_default(a2, b2, x05, y05, x12, y12)) {
+              if (!v_) {
+                activeStream.lineStart();
+                activeStream.point(a2[0], a2[1]);
+              }
+              activeStream.point(b2[0], b2[1]);
+              if (!v2) activeStream.lineEnd();
+              clean2 = false;
+            } else if (v2) {
+              activeStream.lineStart();
+              activeStream.point(x2, y2);
+              clean2 = false;
+            }
+          }
+        }
+        x_ = x2, y_ = y2, v_ = v2;
+      }
+      return clipStream;
     };
-    return zoom;
-  }(Math.SQRT2, 2, 4);
-
-  // node_modules/d3-interpolate/src/quantize.js
-  function quantize_default(interpolator, n3) {
-    var samples = new Array(n3);
-    for (var i3 = 0; i3 < n3; ++i3) samples[i3] = interpolator(i3 / (n3 - 1));
-    return samples;
   }
-
-  // node_modules/d3-timer/src/timer.js
-  var frame = 0;
-  var timeout = 0;
-  var interval = 0;
-  var pokeDelay = 1e3;
-  var taskHead;
-  var taskTail;
-  var clockLast = 0;
-  var clockNow = 0;
-  var clockSkew = 0;
-  var clock = typeof performance === "object" && performance.now ? performance : Date;
-  var setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f2) {
-    setTimeout(f2, 17);
+
+  // node_modules/d3-geo/src/length.js
+  var lengthSum;
+  var lambda03;
+  var sinPhi02;
+  var cosPhi02;
+  var lengthStream = {
+    sphere: noop,
+    point: noop,
+    lineStart: lengthLineStart,
+    lineEnd: noop,
+    polygonStart: noop,
+    polygonEnd: noop
   };
-  function now() {
-    return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+  function lengthLineStart() {
+    lengthStream.point = lengthPointFirst;
+    lengthStream.lineEnd = lengthLineEnd;
   }
-  function clearNow() {
-    clockNow = 0;
+  function lengthLineEnd() {
+    lengthStream.point = lengthStream.lineEnd = noop;
   }
-  function Timer() {
-    this._call = this._time = this._next = null;
+  function lengthPointFirst(lambda, phi) {
+    lambda *= radians, phi *= radians;
+    lambda03 = lambda, sinPhi02 = sin(phi), cosPhi02 = cos(phi);
+    lengthStream.point = lengthPoint;
   }
-  Timer.prototype = timer.prototype = {
-    constructor: Timer,
-    restart: function(callback, delay, time) {
-      if (typeof callback !== "function") throw new TypeError("callback is not a function");
-      time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
-      if (!this._next && taskTail !== this) {
-        if (taskTail) taskTail._next = this;
-        else taskHead = this;
-        taskTail = this;
-      }
-      this._call = callback;
-      this._time = time;
-      sleep();
+  function lengthPoint(lambda, phi) {
+    lambda *= radians, phi *= radians;
+    var sinPhi = sin(phi), cosPhi = cos(phi), delta = abs(lambda - lambda03), cosDelta = cos(delta), sinDelta = sin(delta), x2 = cosPhi * sinDelta, y2 = cosPhi02 * sinPhi - sinPhi02 * cosPhi * cosDelta, z2 = sinPhi02 * sinPhi + cosPhi02 * cosPhi * cosDelta;
+    lengthSum.add(atan2(sqrt(x2 * x2 + y2 * y2), z2));
+    lambda03 = lambda, sinPhi02 = sinPhi, cosPhi02 = cosPhi;
+  }
+  function length_default(object) {
+    lengthSum = new Adder();
+    stream_default(object, lengthStream);
+    return +lengthSum;
+  }
+
+  // node_modules/d3-geo/src/identity.js
+  var identity_default = (x2) => x2;
+
+  // node_modules/d3-geo/src/path/area.js
+  var areaSum2 = new Adder();
+  var areaRingSum2 = new Adder();
+  var x00;
+  var y00;
+  var x0;
+  var y0;
+  var areaStream2 = {
+    point: noop,
+    lineStart: noop,
+    lineEnd: noop,
+    polygonStart: function() {
+      areaStream2.lineStart = areaRingStart2;
+      areaStream2.lineEnd = areaRingEnd2;
     },
-    stop: function() {
-      if (this._call) {
-        this._call = null;
-        this._time = Infinity;
-        sleep();
-      }
+    polygonEnd: function() {
+      areaStream2.lineStart = areaStream2.lineEnd = areaStream2.point = noop;
+      areaSum2.add(abs(areaRingSum2));
+      areaRingSum2 = new Adder();
+    },
+    result: function() {
+      var area = areaSum2 / 2;
+      areaSum2 = new Adder();
+      return area;
     }
   };
-  function timer(callback, delay, time) {
-    var t2 = new Timer();
-    t2.restart(callback, delay, time);
-    return t2;
+  function areaRingStart2() {
+    areaStream2.point = areaPointFirst2;
   }
-  function timerFlush() {
-    now();
-    ++frame;
-    var t2 = taskHead, e3;
-    while (t2) {
-      if ((e3 = clockNow - t2._time) >= 0) t2._call.call(void 0, e3);
-      t2 = t2._next;
-    }
-    --frame;
+  function areaPointFirst2(x2, y2) {
+    areaStream2.point = areaPoint2;
+    x00 = x0 = x2, y00 = y0 = y2;
   }
-  function wake() {
-    clockNow = (clockLast = clock.now()) + clockSkew;
-    frame = timeout = 0;
-    try {
-      timerFlush();
-    } finally {
-      frame = 0;
-      nap();
-      clockNow = 0;
-    }
+  function areaPoint2(x2, y2) {
+    areaRingSum2.add(y0 * x2 - x0 * y2);
+    x0 = x2, y0 = y2;
   }
-  function poke() {
-    var now3 = clock.now(), delay = now3 - clockLast;
-    if (delay > pokeDelay) clockSkew -= delay, clockLast = now3;
+  function areaRingEnd2() {
+    areaPoint2(x00, y00);
   }
-  function nap() {
-    var t0, t1 = taskHead, t2, time = Infinity;
-    while (t1) {
-      if (t1._call) {
-        if (time > t1._time) time = t1._time;
-        t0 = t1, t1 = t1._next;
-      } else {
-        t2 = t1._next, t1._next = null;
-        t1 = t0 ? t0._next = t2 : taskHead = t2;
-      }
+  var area_default2 = areaStream2;
+
+  // node_modules/d3-geo/src/path/bounds.js
+  var x02 = Infinity;
+  var y02 = x02;
+  var x1 = -x02;
+  var y1 = x1;
+  var boundsStream2 = {
+    point: boundsPoint2,
+    lineStart: noop,
+    lineEnd: noop,
+    polygonStart: noop,
+    polygonEnd: noop,
+    result: function() {
+      var bounds = [[x02, y02], [x1, y1]];
+      x1 = y1 = -(y02 = x02 = Infinity);
+      return bounds;
     }
-    taskTail = t0;
-    sleep(time);
+  };
+  function boundsPoint2(x2, y2) {
+    if (x2 < x02) x02 = x2;
+    if (x2 > x1) x1 = x2;
+    if (y2 < y02) y02 = y2;
+    if (y2 > y1) y1 = y2;
   }
-  function sleep(time) {
-    if (frame) return;
-    if (timeout) timeout = clearTimeout(timeout);
-    var delay = time - clockNow;
-    if (delay > 24) {
-      if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
-      if (interval) interval = clearInterval(interval);
-    } else {
-      if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
-      frame = 1, setFrame(wake);
+  var bounds_default2 = boundsStream2;
+
+  // node_modules/d3-geo/src/path/centroid.js
+  var X0 = 0;
+  var Y0 = 0;
+  var Z0 = 0;
+  var X1 = 0;
+  var Y1 = 0;
+  var Z1 = 0;
+  var X2 = 0;
+  var Y2 = 0;
+  var Z2 = 0;
+  var x002;
+  var y002;
+  var x03;
+  var y03;
+  var centroidStream = {
+    point: centroidPoint,
+    lineStart: centroidLineStart,
+    lineEnd: centroidLineEnd,
+    polygonStart: function() {
+      centroidStream.lineStart = centroidRingStart;
+      centroidStream.lineEnd = centroidRingEnd;
+    },
+    polygonEnd: function() {
+      centroidStream.point = centroidPoint;
+      centroidStream.lineStart = centroidLineStart;
+      centroidStream.lineEnd = centroidLineEnd;
+    },
+    result: function() {
+      var centroid = Z2 ? [X2 / Z2, Y2 / Z2] : Z1 ? [X1 / Z1, Y1 / Z1] : Z0 ? [X0 / Z0, Y0 / Z0] : [NaN, NaN];
+      X0 = Y0 = Z0 = X1 = Y1 = Z1 = X2 = Y2 = Z2 = 0;
+      return centroid;
     }
+  };
+  function centroidPoint(x2, y2) {
+    X0 += x2;
+    Y0 += y2;
+    ++Z0;
   }
-
-  // node_modules/d3-timer/src/timeout.js
-  function timeout_default(callback, delay, time) {
-    var t2 = new Timer();
-    delay = delay == null ? 0 : +delay;
-    t2.restart((elapsed) => {
-      t2.stop();
-      callback(elapsed + delay);
-    }, delay, time);
-    return t2;
+  function centroidLineStart() {
+    centroidStream.point = centroidPointFirstLine;
   }
-
-  // node_modules/d3-transition/src/transition/schedule.js
-  var emptyOn = dispatch_default("start", "end", "cancel", "interrupt");
-  var emptyTween = [];
-  var CREATED = 0;
-  var SCHEDULED = 1;
-  var STARTING = 2;
-  var STARTED = 3;
-  var RUNNING = 4;
-  var ENDING = 5;
-  var ENDED = 6;
-  function schedule_default(node, name, id2, index, group, timing) {
-    var schedules = node.__transition;
-    if (!schedules) node.__transition = {};
-    else if (id2 in schedules) return;
-    create(node, id2, {
-      name,
-      index,
-      // For context during callback.
-      group,
-      // For context during callback.
-      on: emptyOn,
-      tween: emptyTween,
-      time: timing.time,
-      delay: timing.delay,
-      duration: timing.duration,
-      ease: timing.ease,
-      timer: null,
-      state: CREATED
-    });
+  function centroidPointFirstLine(x2, y2) {
+    centroidStream.point = centroidPointLine;
+    centroidPoint(x03 = x2, y03 = y2);
   }
-  function init(node, id2) {
-    var schedule = get2(node, id2);
-    if (schedule.state > CREATED) throw new Error("too late; already scheduled");
-    return schedule;
+  function centroidPointLine(x2, y2) {
+    var dx = x2 - x03, dy = y2 - y03, z2 = sqrt(dx * dx + dy * dy);
+    X1 += z2 * (x03 + x2) / 2;
+    Y1 += z2 * (y03 + y2) / 2;
+    Z1 += z2;
+    centroidPoint(x03 = x2, y03 = y2);
   }
-  function set2(node, id2) {
-    var schedule = get2(node, id2);
-    if (schedule.state > STARTED) throw new Error("too late; already running");
-    return schedule;
+  function centroidLineEnd() {
+    centroidStream.point = centroidPoint;
   }
-  function get2(node, id2) {
-    var schedule = node.__transition;
-    if (!schedule || !(schedule = schedule[id2])) throw new Error("transition not found");
-    return schedule;
+  function centroidRingStart() {
+    centroidStream.point = centroidPointFirstRing;
   }
-  function create(node, id2, self2) {
-    var schedules = node.__transition, tween;
-    schedules[id2] = self2;
-    self2.timer = timer(schedule, 0, self2.time);
-    function schedule(elapsed) {
-      self2.state = SCHEDULED;
-      self2.timer.restart(start2, self2.delay, self2.time);
-      if (self2.delay <= elapsed) start2(elapsed - self2.delay);
-    }
-    function start2(elapsed) {
-      var i3, j2, n3, o2;
-      if (self2.state !== SCHEDULED) return stop();
-      for (i3 in schedules) {
-        o2 = schedules[i3];
-        if (o2.name !== self2.name) continue;
-        if (o2.state === STARTED) return timeout_default(start2);
-        if (o2.state === RUNNING) {
-          o2.state = ENDED;
-          o2.timer.stop();
-          o2.on.call("interrupt", node, node.__data__, o2.index, o2.group);
-          delete schedules[i3];
-        } else if (+i3 < id2) {
-          o2.state = ENDED;
-          o2.timer.stop();
-          o2.on.call("cancel", node, node.__data__, o2.index, o2.group);
-          delete schedules[i3];
+  function centroidRingEnd() {
+    centroidPointRing(x002, y002);
+  }
+  function centroidPointFirstRing(x2, y2) {
+    centroidStream.point = centroidPointRing;
+    centroidPoint(x002 = x03 = x2, y002 = y03 = y2);
+  }
+  function centroidPointRing(x2, y2) {
+    var dx = x2 - x03, dy = y2 - y03, z2 = sqrt(dx * dx + dy * dy);
+    X1 += z2 * (x03 + x2) / 2;
+    Y1 += z2 * (y03 + y2) / 2;
+    Z1 += z2;
+    z2 = y03 * x2 - x03 * y2;
+    X2 += z2 * (x03 + x2);
+    Y2 += z2 * (y03 + y2);
+    Z2 += z2 * 3;
+    centroidPoint(x03 = x2, y03 = y2);
+  }
+  var centroid_default = centroidStream;
+
+  // node_modules/d3-geo/src/path/context.js
+  function PathContext(context) {
+    this._context = context;
+  }
+  PathContext.prototype = {
+    _radius: 4.5,
+    pointRadius: function(_2) {
+      return this._radius = _2, this;
+    },
+    polygonStart: function() {
+      this._line = 0;
+    },
+    polygonEnd: function() {
+      this._line = NaN;
+    },
+    lineStart: function() {
+      this._point = 0;
+    },
+    lineEnd: function() {
+      if (this._line === 0) this._context.closePath();
+      this._point = NaN;
+    },
+    point: function(x2, y2) {
+      switch (this._point) {
+        case 0: {
+          this._context.moveTo(x2, y2);
+          this._point = 1;
+          break;
         }
-      }
-      timeout_default(function() {
-        if (self2.state === STARTED) {
-          self2.state = RUNNING;
-          self2.timer.restart(tick, self2.delay, self2.time);
-          tick(elapsed);
+        case 1: {
+          this._context.lineTo(x2, y2);
+          break;
         }
-      });
-      self2.state = STARTING;
-      self2.on.call("start", node, node.__data__, self2.index, self2.group);
-      if (self2.state !== STARTING) return;
-      self2.state = STARTED;
-      tween = new Array(n3 = self2.tween.length);
-      for (i3 = 0, j2 = -1; i3 < n3; ++i3) {
-        if (o2 = self2.tween[i3].value.call(node, node.__data__, self2.index, self2.group)) {
-          tween[++j2] = o2;
+        default: {
+          this._context.moveTo(x2 + this._radius, y2);
+          this._context.arc(x2, y2, this._radius, 0, tau);
+          break;
         }
       }
-      tween.length = j2 + 1;
-    }
-    function tick(elapsed) {
-      var t2 = elapsed < self2.duration ? self2.ease.call(null, elapsed / self2.duration) : (self2.timer.restart(stop), self2.state = ENDING, 1), i3 = -1, n3 = tween.length;
-      while (++i3 < n3) {
-        tween[i3].call(node, t2);
-      }
-      if (self2.state === ENDING) {
-        self2.on.call("end", node, node.__data__, self2.index, self2.group);
-        stop();
-      }
-    }
-    function stop() {
-      self2.state = ENDED;
-      self2.timer.stop();
-      delete schedules[id2];
-      for (var i3 in schedules) return;
-      delete node.__transition;
-    }
-  }
+    },
+    result: noop
+  };
 
-  // node_modules/d3-transition/src/interrupt.js
-  function interrupt_default(node, name) {
-    var schedules = node.__transition, schedule, active, empty2 = true, i3;
-    if (!schedules) return;
-    name = name == null ? null : name + "";
-    for (i3 in schedules) {
-      if ((schedule = schedules[i3]).name !== name) {
-        empty2 = false;
-        continue;
-      }
-      active = schedule.state > STARTING && schedule.state < ENDING;
-      schedule.state = ENDED;
-      schedule.timer.stop();
-      schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
-      delete schedules[i3];
+  // node_modules/d3-geo/src/path/measure.js
+  var lengthSum2 = new Adder();
+  var lengthRing;
+  var x003;
+  var y003;
+  var x04;
+  var y04;
+  var lengthStream2 = {
+    point: noop,
+    lineStart: function() {
+      lengthStream2.point = lengthPointFirst2;
+    },
+    lineEnd: function() {
+      if (lengthRing) lengthPoint2(x003, y003);
+      lengthStream2.point = noop;
+    },
+    polygonStart: function() {
+      lengthRing = true;
+    },
+    polygonEnd: function() {
+      lengthRing = null;
+    },
+    result: function() {
+      var length2 = +lengthSum2;
+      lengthSum2 = new Adder();
+      return length2;
     }
-    if (empty2) delete node.__transition;
+  };
+  function lengthPointFirst2(x2, y2) {
+    lengthStream2.point = lengthPoint2;
+    x003 = x04 = x2, y003 = y04 = y2;
   }
-
-  // node_modules/d3-transition/src/selection/interrupt.js
-  function interrupt_default2(name) {
-    return this.each(function() {
-      interrupt_default(this, name);
-    });
+  function lengthPoint2(x2, y2) {
+    x04 -= x2, y04 -= y2;
+    lengthSum2.add(sqrt(x04 * x04 + y04 * y04));
+    x04 = x2, y04 = y2;
   }
+  var measure_default = lengthStream2;
 
-  // node_modules/d3-transition/src/transition/tween.js
-  function tweenRemove(id2, name) {
-    var tween0, tween1;
-    return function() {
-      var schedule = set2(this, id2), tween = schedule.tween;
-      if (tween !== tween0) {
-        tween1 = tween0 = tween;
-        for (var i3 = 0, n3 = tween1.length; i3 < n3; ++i3) {
-          if (tween1[i3].name === name) {
-            tween1 = tween1.slice();
-            tween1.splice(i3, 1);
-            break;
-          }
+  // node_modules/d3-geo/src/path/string.js
+  var cacheDigits;
+  var cacheAppend;
+  var cacheRadius;
+  var cacheCircle;
+  var _a, _b, _c, _d;
+  var PathString = class {
+    constructor(digits) {
+      this._append = digits == null ? append : appendRound(digits);
+      this._radius = 4.5;
+      this._ = "";
+    }
+    pointRadius(_2) {
+      this._radius = +_2;
+      return this;
+    }
+    polygonStart() {
+      this._line = 0;
+    }
+    polygonEnd() {
+      this._line = NaN;
+    }
+    lineStart() {
+      this._point = 0;
+    }
+    lineEnd() {
+      if (this._line === 0) this._ += "Z";
+      this._point = NaN;
+    }
+    point(x2, y2) {
+      switch (this._point) {
+        case 0: {
+          this._append(_a || (_a = __template(["M", ",", ""])), x2, y2);
+          this._point = 1;
+          break;
         }
-      }
-      schedule.tween = tween1;
-    };
-  }
-  function tweenFunction(id2, name, value) {
-    var tween0, tween1;
-    if (typeof value !== "function") throw new Error();
-    return function() {
-      var schedule = set2(this, id2), tween = schedule.tween;
-      if (tween !== tween0) {
-        tween1 = (tween0 = tween).slice();
-        for (var t2 = { name, value }, i3 = 0, n3 = tween1.length; i3 < n3; ++i3) {
-          if (tween1[i3].name === name) {
-            tween1[i3] = t2;
-            break;
-          }
+        case 1: {
+          this._append(_b || (_b = __template(["L", ",", ""])), x2, y2);
+          break;
+        }
+        default: {
+          this._append(_c || (_c = __template(["M", ",", ""])), x2, y2);
+          if (this._radius !== cacheRadius || this._append !== cacheAppend) {
+            const r2 = this._radius;
+            const s2 = this._;
+            this._ = "";
+            this._append(_d || (_d = __template(["m0,", "a", ",", " 0 1,1 0,", "a", ",", " 0 1,1 0,", "z"])), r2, r2, r2, -2 * r2, r2, r2, 2 * r2);
+            cacheRadius = r2;
+            cacheAppend = this._append;
+            cacheCircle = this._;
+            this._ = s2;
+          }
+          this._ += cacheCircle;
+          break;
         }
-        if (i3 === n3) tween1.push(t2);
       }
-      schedule.tween = tween1;
-    };
-  }
-  function tween_default(name, value) {
-    var id2 = this._id;
-    name += "";
-    if (arguments.length < 2) {
-      var tween = get2(this.node(), id2).tween;
-      for (var i3 = 0, n3 = tween.length, t2; i3 < n3; ++i3) {
-        if ((t2 = tween[i3]).name === name) {
-          return t2.value;
+    }
+    result() {
+      const result = this._;
+      this._ = "";
+      return result.length ? result : null;
+    }
+  };
+  function append(strings) {
+    let i3 = 1;
+    this._ += strings[0];
+    for (const j2 = strings.length; i3 < j2; ++i3) {
+      this._ += arguments[i3] + strings[i3];
+    }
+  }
+  function appendRound(digits) {
+    const d2 = Math.floor(digits);
+    if (!(d2 >= 0)) throw new RangeError("invalid digits: ".concat(digits));
+    if (d2 > 15) return append;
+    if (d2 !== cacheDigits) {
+      const k2 = 10 ** d2;
+      cacheDigits = d2;
+      cacheAppend = function append2(strings) {
+        let i3 = 1;
+        this._ += strings[0];
+        for (const j2 = strings.length; i3 < j2; ++i3) {
+          this._ += Math.round(arguments[i3] * k2) / k2 + strings[i3];
         }
-      }
-      return null;
+      };
     }
-    return this.each((value == null ? tweenRemove : tweenFunction)(id2, name, value));
-  }
-  function tweenValue(transition2, name, value) {
-    var id2 = transition2._id;
-    transition2.each(function() {
-      var schedule = set2(this, id2);
-      (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
-    });
-    return function(node) {
-      return get2(node, id2).value[name];
-    };
-  }
-
-  // node_modules/d3-transition/src/transition/interpolate.js
-  function interpolate_default(a2, b2) {
-    var c2;
-    return (typeof b2 === "number" ? number_default : b2 instanceof color ? rgb_default : (c2 = color(b2)) ? (b2 = c2, rgb_default) : string_default)(a2, b2);
+    return cacheAppend;
   }
 
-  // node_modules/d3-transition/src/transition/attr.js
-  function attrRemove2(name) {
-    return function() {
-      this.removeAttribute(name);
+  // node_modules/d3-geo/src/path/index.js
+  function path_default(projection2, context) {
+    let digits = 3, pointRadius = 4.5, projectionStream, contextStream;
+    function path(object) {
+      if (object) {
+        if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
+        stream_default(object, projectionStream(contextStream));
+      }
+      return contextStream.result();
+    }
+    path.area = function(object) {
+      stream_default(object, projectionStream(area_default2));
+      return area_default2.result();
     };
-  }
-  function attrRemoveNS2(fullname) {
-    return function() {
-      this.removeAttributeNS(fullname.space, fullname.local);
+    path.measure = function(object) {
+      stream_default(object, projectionStream(measure_default));
+      return measure_default.result();
     };
-  }
-  function attrConstant2(name, interpolate, value1) {
-    var string00, string1 = value1 + "", interpolate0;
-    return function() {
-      var string0 = this.getAttribute(name);
-      return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);
+    path.bounds = function(object) {
+      stream_default(object, projectionStream(bounds_default2));
+      return bounds_default2.result();
     };
-  }
-  function attrConstantNS2(fullname, interpolate, value1) {
-    var string00, string1 = value1 + "", interpolate0;
-    return function() {
-      var string0 = this.getAttributeNS(fullname.space, fullname.local);
-      return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);
+    path.centroid = function(object) {
+      stream_default(object, projectionStream(centroid_default));
+      return centroid_default.result();
     };
-  }
-  function attrFunction2(name, interpolate, value) {
-    var string00, string10, interpolate0;
-    return function() {
-      var string0, value1 = value(this), string1;
-      if (value1 == null) return void this.removeAttribute(name);
-      string0 = this.getAttribute(name);
-      string1 = value1 + "";
-      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
+    path.projection = function(_2) {
+      if (!arguments.length) return projection2;
+      projectionStream = _2 == null ? (projection2 = null, identity_default) : (projection2 = _2).stream;
+      return path;
     };
-  }
-  function attrFunctionNS2(fullname, interpolate, value) {
-    var string00, string10, interpolate0;
-    return function() {
-      var string0, value1 = value(this), string1;
-      if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
-      string0 = this.getAttributeNS(fullname.space, fullname.local);
-      string1 = value1 + "";
-      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
+    path.context = function(_2) {
+      if (!arguments.length) return context;
+      contextStream = _2 == null ? (context = null, new PathString(digits)) : new PathContext(context = _2);
+      if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
+      return path;
     };
-  }
-  function attr_default2(name, value) {
-    var fullname = namespace_default(name), i3 = fullname === "transform" ? interpolateTransformSvg : interpolate_default;
-    return this.attrTween(name, typeof value === "function" ? (fullname.local ? attrFunctionNS2 : attrFunction2)(fullname, i3, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attrRemoveNS2 : attrRemove2)(fullname) : (fullname.local ? attrConstantNS2 : attrConstant2)(fullname, i3, value));
-  }
-
-  // node_modules/d3-transition/src/transition/attrTween.js
-  function attrInterpolate(name, i3) {
-    return function(t2) {
-      this.setAttribute(name, i3.call(this, t2));
+    path.pointRadius = function(_2) {
+      if (!arguments.length) return pointRadius;
+      pointRadius = typeof _2 === "function" ? _2 : (contextStream.pointRadius(+_2), +_2);
+      return path;
     };
-  }
-  function attrInterpolateNS(fullname, i3) {
-    return function(t2) {
-      this.setAttributeNS(fullname.space, fullname.local, i3.call(this, t2));
+    path.digits = function(_2) {
+      if (!arguments.length) return digits;
+      if (_2 == null) digits = null;
+      else {
+        const d2 = Math.floor(_2);
+        if (!(d2 >= 0)) throw new RangeError("invalid digits: ".concat(_2));
+        digits = d2;
+      }
+      if (context === null) contextStream = new PathString(digits);
+      return path;
     };
-  }
-  function attrTweenNS(fullname, value) {
-    var t0, i0;
-    function tween() {
-      var i3 = value.apply(this, arguments);
-      if (i3 !== i0) t0 = (i0 = i3) && attrInterpolateNS(fullname, i3);
-      return t0;
-    }
-    tween._value = value;
-    return tween;
-  }
-  function attrTween(name, value) {
-    var t0, i0;
-    function tween() {
-      var i3 = value.apply(this, arguments);
-      if (i3 !== i0) t0 = (i0 = i3) && attrInterpolate(name, i3);
-      return t0;
-    }
-    tween._value = value;
-    return tween;
-  }
-  function attrTween_default(name, value) {
-    var key = "attr." + name;
-    if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-    if (value == null) return this.tween(key, null);
-    if (typeof value !== "function") throw new Error();
-    var fullname = namespace_default(name);
-    return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
+    return path.projection(projection2).digits(digits).context(context);
   }
 
-  // node_modules/d3-transition/src/transition/delay.js
-  function delayFunction(id2, value) {
-    return function() {
-      init(this, id2).delay = +value.apply(this, arguments);
+  // node_modules/d3-geo/src/transform.js
+  function transform_default(methods2) {
+    return {
+      stream: transformer(methods2)
     };
   }
-  function delayConstant(id2, value) {
-    return value = +value, function() {
-      init(this, id2).delay = value;
+  function transformer(methods2) {
+    return function(stream) {
+      var s2 = new TransformStream();
+      for (var key in methods2) s2[key] = methods2[key];
+      s2.stream = stream;
+      return s2;
     };
   }
-  function delay_default(value) {
-    var id2 = this._id;
-    return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id2, value)) : get2(this.node(), id2).delay;
+  function TransformStream() {
   }
+  TransformStream.prototype = {
+    constructor: TransformStream,
+    point: function(x2, y2) {
+      this.stream.point(x2, y2);
+    },
+    sphere: function() {
+      this.stream.sphere();
+    },
+    lineStart: function() {
+      this.stream.lineStart();
+    },
+    lineEnd: function() {
+      this.stream.lineEnd();
+    },
+    polygonStart: function() {
+      this.stream.polygonStart();
+    },
+    polygonEnd: function() {
+      this.stream.polygonEnd();
+    }
+  };
 
-  // node_modules/d3-transition/src/transition/duration.js
-  function durationFunction(id2, value) {
-    return function() {
-      set2(this, id2).duration = +value.apply(this, arguments);
-    };
+  // node_modules/d3-geo/src/projection/fit.js
+  function fit(projection2, fitBounds, object) {
+    var clip = projection2.clipExtent && projection2.clipExtent();
+    projection2.scale(150).translate([0, 0]);
+    if (clip != null) projection2.clipExtent(null);
+    stream_default(object, projection2.stream(bounds_default2));
+    fitBounds(bounds_default2.result());
+    if (clip != null) projection2.clipExtent(clip);
+    return projection2;
   }
-  function durationConstant(id2, value) {
-    return value = +value, function() {
-      set2(this, id2).duration = value;
-    };
+  function fitExtent(projection2, extent, object) {
+    return fit(projection2, function(b2) {
+      var w2 = extent[1][0] - extent[0][0], h2 = extent[1][1] - extent[0][1], k2 = Math.min(w2 / (b2[1][0] - b2[0][0]), h2 / (b2[1][1] - b2[0][1])), x2 = +extent[0][0] + (w2 - k2 * (b2[1][0] + b2[0][0])) / 2, y2 = +extent[0][1] + (h2 - k2 * (b2[1][1] + b2[0][1])) / 2;
+      projection2.scale(150 * k2).translate([x2, y2]);
+    }, object);
   }
-  function duration_default(value) {
-    var id2 = this._id;
-    return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id2, value)) : get2(this.node(), id2).duration;
+  function fitSize(projection2, size, object) {
+    return fitExtent(projection2, [[0, 0], size], object);
   }
-
-  // node_modules/d3-transition/src/transition/ease.js
-  function easeConstant(id2, value) {
-    if (typeof value !== "function") throw new Error();
-    return function() {
-      set2(this, id2).ease = value;
-    };
+  function fitWidth(projection2, width, object) {
+    return fit(projection2, function(b2) {
+      var w2 = +width, k2 = w2 / (b2[1][0] - b2[0][0]), x2 = (w2 - k2 * (b2[1][0] + b2[0][0])) / 2, y2 = -k2 * b2[0][1];
+      projection2.scale(150 * k2).translate([x2, y2]);
+    }, object);
   }
-  function ease_default(value) {
-    var id2 = this._id;
-    return arguments.length ? this.each(easeConstant(id2, value)) : get2(this.node(), id2).ease;
+  function fitHeight(projection2, height, object) {
+    return fit(projection2, function(b2) {
+      var h2 = +height, k2 = h2 / (b2[1][1] - b2[0][1]), x2 = -k2 * b2[0][0], y2 = (h2 - k2 * (b2[1][1] + b2[0][1])) / 2;
+      projection2.scale(150 * k2).translate([x2, y2]);
+    }, object);
   }
 
-  // node_modules/d3-transition/src/transition/easeVarying.js
-  function easeVarying(id2, value) {
-    return function() {
-      var v2 = value.apply(this, arguments);
-      if (typeof v2 !== "function") throw new Error();
-      set2(this, id2).ease = v2;
-    };
+  // node_modules/d3-geo/src/projection/resample.js
+  var maxDepth = 16;
+  var cosMinDistance = cos(30 * radians);
+  function resample_default(project, delta2) {
+    return +delta2 ? resample(project, delta2) : resampleNone(project);
   }
-  function easeVarying_default(value) {
-    if (typeof value !== "function") throw new Error();
-    return this.each(easeVarying(this._id, value));
+  function resampleNone(project) {
+    return transformer({
+      point: function(x2, y2) {
+        x2 = project(x2, y2);
+        this.stream.point(x2[0], x2[1]);
+      }
+    });
   }
-
-  // node_modules/d3-transition/src/transition/filter.js
-  function filter_default2(match) {
-    if (typeof match !== "function") match = matcher_default(match);
-    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = [], node, i3 = 0; i3 < n3; ++i3) {
-        if ((node = group[i3]) && match.call(node, node.__data__, i3, group)) {
-          subgroup.push(node);
+  function resample(project, delta2) {
+    function resampleLineTo(x05, y05, lambda04, a0, b0, c0, x12, y12, lambda12, a1, b1, c1, depth, stream) {
+      var dx = x12 - x05, dy = y12 - y05, d2 = dx * dx + dy * dy;
+      if (d2 > 4 * delta2 && depth--) {
+        var a2 = a0 + a1, b2 = b0 + b1, c2 = c0 + c1, m2 = sqrt(a2 * a2 + b2 * b2 + c2 * c2), phi2 = asin(c2 /= m2), lambda22 = abs(abs(c2) - 1) < epsilon || abs(lambda04 - lambda12) < epsilon ? (lambda04 + lambda12) / 2 : atan2(b2, a2), p2 = project(lambda22, phi2), x2 = p2[0], y2 = p2[1], dx2 = x2 - x05, dy2 = y2 - y05, dz = dy * dx2 - dx * dy2;
+        if (dz * dz / d2 > delta2 || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
+          resampleLineTo(x05, y05, lambda04, a0, b0, c0, x2, y2, lambda22, a2 /= m2, b2 /= m2, c2, depth, stream);
+          stream.point(x2, y2);
+          resampleLineTo(x2, y2, lambda22, a2, b2, c2, x12, y12, lambda12, a1, b1, c1, depth, stream);
         }
       }
     }
-    return new Transition(subgroups, this._parents, this._name, this._id);
-  }
-
-  // node_modules/d3-transition/src/transition/merge.js
-  function merge_default2(transition2) {
-    if (transition2._id !== this._id) throw new Error();
-    for (var groups0 = this._groups, groups1 = transition2._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j2 = 0; j2 < m2; ++j2) {
-      for (var group0 = groups0[j2], group1 = groups1[j2], n3 = group0.length, merge2 = merges[j2] = new Array(n3), node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group0[i3] || group1[i3]) {
-          merge2[i3] = node;
+    return function(stream) {
+      var lambda003, x004, y004, a00, b00, c00, lambda04, x05, y05, a0, b0, c0;
+      var resampleStream = {
+        point,
+        lineStart,
+        lineEnd,
+        polygonStart: function() {
+          stream.polygonStart();
+          resampleStream.lineStart = ringStart;
+        },
+        polygonEnd: function() {
+          stream.polygonEnd();
+          resampleStream.lineStart = lineStart;
         }
+      };
+      function point(x2, y2) {
+        x2 = project(x2, y2);
+        stream.point(x2[0], x2[1]);
       }
-    }
-    for (; j2 < m0; ++j2) {
-      merges[j2] = groups0[j2];
-    }
-    return new Transition(merges, this._parents, this._name, this._id);
+      function lineStart() {
+        x05 = NaN;
+        resampleStream.point = linePoint2;
+        stream.lineStart();
+      }
+      function linePoint2(lambda, phi) {
+        var c2 = cartesian([lambda, phi]), p2 = project(lambda, phi);
+        resampleLineTo(x05, y05, lambda04, a0, b0, c0, x05 = p2[0], y05 = p2[1], lambda04 = lambda, a0 = c2[0], b0 = c2[1], c0 = c2[2], maxDepth, stream);
+        stream.point(x05, y05);
+      }
+      function lineEnd() {
+        resampleStream.point = point;
+        stream.lineEnd();
+      }
+      function ringStart() {
+        lineStart();
+        resampleStream.point = ringPoint;
+        resampleStream.lineEnd = ringEnd;
+      }
+      function ringPoint(lambda, phi) {
+        linePoint2(lambda003 = lambda, phi), x004 = x05, y004 = y05, a00 = a0, b00 = b0, c00 = c0;
+        resampleStream.point = linePoint2;
+      }
+      function ringEnd() {
+        resampleLineTo(x05, y05, lambda04, a0, b0, c0, x004, y004, lambda003, a00, b00, c00, maxDepth, stream);
+        resampleStream.lineEnd = lineEnd;
+        lineEnd();
+      }
+      return resampleStream;
+    };
   }
 
-  // node_modules/d3-transition/src/transition/on.js
-  function start(name) {
-    return (name + "").trim().split(/^|\s+/).every(function(t2) {
-      var i3 = t2.indexOf(".");
-      if (i3 >= 0) t2 = t2.slice(0, i3);
-      return !t2 || t2 === "start";
+  // node_modules/d3-geo/src/projection/index.js
+  var transformRadians = transformer({
+    point: function(x2, y2) {
+      this.stream.point(x2 * radians, y2 * radians);
+    }
+  });
+  function transformRotate(rotate) {
+    return transformer({
+      point: function(x2, y2) {
+        var r2 = rotate(x2, y2);
+        return this.stream.point(r2[0], r2[1]);
+      }
     });
   }
-  function onFunction(id2, name, listener) {
-    var on0, on1, sit = start(name) ? init : set2;
-    return function() {
-      var schedule = sit(this, id2), on = schedule.on;
-      if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
-      schedule.on = on1;
+  function scaleTranslate(k2, dx, dy, sx, sy) {
+    function transform2(x2, y2) {
+      x2 *= sx;
+      y2 *= sy;
+      return [dx + k2 * x2, dy - k2 * y2];
+    }
+    transform2.invert = function(x2, y2) {
+      return [(x2 - dx) / k2 * sx, (dy - y2) / k2 * sy];
     };
+    return transform2;
   }
-  function on_default2(name, listener) {
-    var id2 = this._id;
-    return arguments.length < 2 ? get2(this.node(), id2).on.on(name) : this.each(onFunction(id2, name, listener));
-  }
-
-  // node_modules/d3-transition/src/transition/remove.js
-  function removeFunction(id2) {
-    return function() {
-      var parent = this.parentNode;
-      for (var i3 in this.__transition) if (+i3 !== id2) return;
-      if (parent) parent.removeChild(this);
+  function scaleTranslateRotate(k2, dx, dy, sx, sy, alpha) {
+    if (!alpha) return scaleTranslate(k2, dx, dy, sx, sy);
+    var cosAlpha = cos(alpha), sinAlpha = sin(alpha), a2 = cosAlpha * k2, b2 = sinAlpha * k2, ai = cosAlpha / k2, bi = sinAlpha / k2, ci = (sinAlpha * dy - cosAlpha * dx) / k2, fi = (sinAlpha * dx + cosAlpha * dy) / k2;
+    function transform2(x2, y2) {
+      x2 *= sx;
+      y2 *= sy;
+      return [a2 * x2 - b2 * y2 + dx, dy - b2 * x2 - a2 * y2];
+    }
+    transform2.invert = function(x2, y2) {
+      return [sx * (ai * x2 - bi * y2 + ci), sy * (fi - bi * x2 - ai * y2)];
     };
+    return transform2;
   }
-  function remove_default2() {
-    return this.on("end.remove", removeFunction(this._id));
+  function projection(project) {
+    return projectionMutator(function() {
+      return project;
+    })();
   }
-
-  // node_modules/d3-transition/src/transition/select.js
-  function select_default3(select) {
-    var name = this._name, id2 = this._id;
-    if (typeof select !== "function") select = selector_default(select);
-    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = new Array(n3), node, subnode, i3 = 0; i3 < n3; ++i3) {
-        if ((node = group[i3]) && (subnode = select.call(node, node.__data__, i3, group))) {
-          if ("__data__" in node) subnode.__data__ = node.__data__;
-          subgroup[i3] = subnode;
-          schedule_default(subgroup[i3], name, id2, i3, subgroup, get2(node, id2));
-        }
-      }
+  function projectionMutator(projectAt) {
+    var project, k2 = 150, x2 = 480, y2 = 250, lambda = 0, phi = 0, deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, alpha = 0, sx = 1, sy = 1, theta = null, preclip = antimeridian_default, x05 = null, y05, x12, y12, postclip = identity_default, delta2 = 0.5, projectResample, projectTransform, projectRotateTransform, cache, cacheStream;
+    function projection2(point) {
+      return projectRotateTransform(point[0] * radians, point[1] * radians);
     }
-    return new Transition(subgroups, this._parents, name, id2);
-  }
-
-  // node_modules/d3-transition/src/transition/selectAll.js
-  function selectAll_default3(select) {
-    var name = this._name, id2 = this._id;
-    if (typeof select !== "function") select = selectorAll_default(select);
-    for (var groups = this._groups, m2 = groups.length, subgroups = [], parents = [], j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group[i3]) {
-          for (var children2 = select.call(node, node.__data__, i3, group), child, inherit2 = get2(node, id2), k2 = 0, l2 = children2.length; k2 < l2; ++k2) {
-            if (child = children2[k2]) {
-              schedule_default(child, name, id2, k2, children2, inherit2);
-            }
-          }
-          subgroups.push(children2);
-          parents.push(node);
-        }
-      }
+    function invert(point) {
+      point = projectRotateTransform.invert(point[0], point[1]);
+      return point && [point[0] * degrees, point[1] * degrees];
     }
-    return new Transition(subgroups, parents, name, id2);
-  }
-
-  // node_modules/d3-transition/src/transition/selection.js
-  var Selection2 = selection_default.prototype.constructor;
-  function selection_default2() {
-    return new Selection2(this._groups, this._parents);
-  }
-
-  // node_modules/d3-transition/src/transition/style.js
-  function styleNull(name, interpolate) {
-    var string00, string10, interpolate0;
-    return function() {
-      var string0 = styleValue(this, name), string1 = (this.style.removeProperty(name), styleValue(this, name));
-      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate(string00 = string0, string10 = string1);
+    projection2.stream = function(stream) {
+      return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
     };
-  }
-  function styleRemove2(name) {
-    return function() {
-      this.style.removeProperty(name);
+    projection2.preclip = function(_2) {
+      return arguments.length ? (preclip = _2, theta = void 0, reset()) : preclip;
     };
-  }
-  function styleConstant2(name, interpolate, value1) {
-    var string00, string1 = value1 + "", interpolate0;
-    return function() {
-      var string0 = styleValue(this, name);
-      return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);
+    projection2.postclip = function(_2) {
+      return arguments.length ? (postclip = _2, x05 = y05 = x12 = y12 = null, reset()) : postclip;
     };
-  }
-  function styleFunction2(name, interpolate, value) {
-    var string00, string10, interpolate0;
+    projection2.clipAngle = function(_2) {
+      return arguments.length ? (preclip = +_2 ? circle_default(theta = _2 * radians) : (theta = null, antimeridian_default), reset()) : theta * degrees;
+    };
+    projection2.clipExtent = function(_2) {
+      return arguments.length ? (postclip = _2 == null ? (x05 = y05 = x12 = y12 = null, identity_default) : clipRectangle(x05 = +_2[0][0], y05 = +_2[0][1], x12 = +_2[1][0], y12 = +_2[1][1]), reset()) : x05 == null ? null : [[x05, y05], [x12, y12]];
+    };
+    projection2.scale = function(_2) {
+      return arguments.length ? (k2 = +_2, recenter()) : k2;
+    };
+    projection2.translate = function(_2) {
+      return arguments.length ? (x2 = +_2[0], y2 = +_2[1], recenter()) : [x2, y2];
+    };
+    projection2.center = function(_2) {
+      return arguments.length ? (lambda = _2[0] % 360 * radians, phi = _2[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];
+    };
+    projection2.rotate = function(_2) {
+      return arguments.length ? (deltaLambda = _2[0] % 360 * radians, deltaPhi = _2[1] % 360 * radians, deltaGamma = _2.length > 2 ? _2[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];
+    };
+    projection2.angle = function(_2) {
+      return arguments.length ? (alpha = _2 % 360 * radians, recenter()) : alpha * degrees;
+    };
+    projection2.reflectX = function(_2) {
+      return arguments.length ? (sx = _2 ? -1 : 1, recenter()) : sx < 0;
+    };
+    projection2.reflectY = function(_2) {
+      return arguments.length ? (sy = _2 ? -1 : 1, recenter()) : sy < 0;
+    };
+    projection2.precision = function(_2) {
+      return arguments.length ? (projectResample = resample_default(projectTransform, delta2 = _2 * _2), reset()) : sqrt(delta2);
+    };
+    projection2.fitExtent = function(extent, object) {
+      return fitExtent(projection2, extent, object);
+    };
+    projection2.fitSize = function(size, object) {
+      return fitSize(projection2, size, object);
+    };
+    projection2.fitWidth = function(width, object) {
+      return fitWidth(projection2, width, object);
+    };
+    projection2.fitHeight = function(height, object) {
+      return fitHeight(projection2, height, object);
+    };
+    function recenter() {
+      var center = scaleTranslateRotate(k2, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)), transform2 = scaleTranslateRotate(k2, x2 - center[0], y2 - center[1], sx, sy, alpha);
+      rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
+      projectTransform = compose_default(project, transform2);
+      projectRotateTransform = compose_default(rotate, projectTransform);
+      projectResample = resample_default(projectTransform, delta2);
+      return reset();
+    }
+    function reset() {
+      cache = cacheStream = null;
+      return projection2;
+    }
     return function() {
-      var string0 = styleValue(this, name), value1 = value(this), string1 = value1 + "";
-      if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
-      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
+      project = projectAt.apply(this, arguments);
+      projection2.invert = project.invert && invert;
+      return recenter();
     };
   }
-  function styleMaybeRemove(id2, name) {
-    var on0, on1, listener0, key = "style." + name, event = "end." + key, remove2;
-    return function() {
-      var schedule = set2(this, id2), on = schedule.on, listener = schedule.value[key] == null ? remove2 || (remove2 = styleRemove2(name)) : void 0;
-      if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
-      schedule.on = on1;
-    };
+
+  // node_modules/d3-geo/src/projection/mercator.js
+  function mercatorRaw(lambda, phi) {
+    return [lambda, log(tan((halfPi + phi) / 2))];
   }
-  function style_default2(name, value, priority) {
-    var i3 = (name += "") === "transform" ? interpolateTransformCss : interpolate_default;
-    return value == null ? this.styleTween(name, styleNull(name, i3)).on("end.style." + name, styleRemove2(name)) : typeof value === "function" ? this.styleTween(name, styleFunction2(name, i3, tweenValue(this, "style." + name, value))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, styleConstant2(name, i3, value), priority).on("end.style." + name, null);
+  mercatorRaw.invert = function(x2, y2) {
+    return [x2, 2 * atan(exp(y2)) - halfPi];
+  };
+  function mercator_default() {
+    return mercatorProjection(mercatorRaw).scale(961 / tau);
   }
-
-  // node_modules/d3-transition/src/transition/styleTween.js
-  function styleInterpolate(name, i3, priority) {
-    return function(t2) {
-      this.style.setProperty(name, i3.call(this, t2), priority);
+  function mercatorProjection(project) {
+    var m2 = projection(project), center = m2.center, scale = m2.scale, translate = m2.translate, clipExtent = m2.clipExtent, x05 = null, y05, x12, y12;
+    m2.scale = function(_2) {
+      return arguments.length ? (scale(_2), reclip()) : scale();
     };
-  }
-  function styleTween(name, value, priority) {
-    var t2, i0;
-    function tween() {
-      var i3 = value.apply(this, arguments);
-      if (i3 !== i0) t2 = (i0 = i3) && styleInterpolate(name, i3, priority);
-      return t2;
+    m2.translate = function(_2) {
+      return arguments.length ? (translate(_2), reclip()) : translate();
+    };
+    m2.center = function(_2) {
+      return arguments.length ? (center(_2), reclip()) : center();
+    };
+    m2.clipExtent = function(_2) {
+      return arguments.length ? (_2 == null ? x05 = y05 = x12 = y12 = null : (x05 = +_2[0][0], y05 = +_2[0][1], x12 = +_2[1][0], y12 = +_2[1][1]), reclip()) : x05 == null ? null : [[x05, y05], [x12, y12]];
+    };
+    function reclip() {
+      var k2 = pi * scale(), t2 = m2(rotation_default(m2.rotate()).invert([0, 0]));
+      return clipExtent(x05 == null ? [[t2[0] - k2, t2[1] - k2], [t2[0] + k2, t2[1] + k2]] : project === mercatorRaw ? [[Math.max(t2[0] - k2, x05), y05], [Math.min(t2[0] + k2, x12), y12]] : [[x05, Math.max(t2[1] - k2, y05)], [x12, Math.min(t2[1] + k2, y12)]]);
     }
-    tween._value = value;
-    return tween;
-  }
-  function styleTween_default(name, value, priority) {
-    var key = "style." + (name += "");
-    if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-    if (value == null) return this.tween(key, null);
-    if (typeof value !== "function") throw new Error();
-    return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
+    return reclip();
   }
 
-  // node_modules/d3-transition/src/transition/text.js
-  function textConstant2(value) {
-    return function() {
-      this.textContent = value;
+  // node_modules/d3-geo/src/projection/identity.js
+  function identity_default2() {
+    var k2 = 1, tx = 0, ty = 0, sx = 1, sy = 1, alpha = 0, ca, sa, x05 = null, y05, x12, y12, kx = 1, ky = 1, transform2 = transformer({
+      point: function(x2, y2) {
+        var p2 = projection2([x2, y2]);
+        this.stream.point(p2[0], p2[1]);
+      }
+    }), postclip = identity_default, cache, cacheStream;
+    function reset() {
+      kx = k2 * sx;
+      ky = k2 * sy;
+      cache = cacheStream = null;
+      return projection2;
+    }
+    function projection2(p2) {
+      var x2 = p2[0] * kx, y2 = p2[1] * ky;
+      if (alpha) {
+        var t2 = y2 * ca - x2 * sa;
+        x2 = x2 * ca + y2 * sa;
+        y2 = t2;
+      }
+      return [x2 + tx, y2 + ty];
+    }
+    projection2.invert = function(p2) {
+      var x2 = p2[0] - tx, y2 = p2[1] - ty;
+      if (alpha) {
+        var t2 = y2 * ca + x2 * sa;
+        x2 = x2 * ca - y2 * sa;
+        y2 = t2;
+      }
+      return [x2 / kx, y2 / ky];
     };
-  }
-  function textFunction2(value) {
-    return function() {
-      var value1 = value(this);
-      this.textContent = value1 == null ? "" : value1;
+    projection2.stream = function(stream) {
+      return cache && cacheStream === stream ? cache : cache = transform2(postclip(cacheStream = stream));
     };
-  }
-  function text_default2(value) {
-    return this.tween("text", typeof value === "function" ? textFunction2(tweenValue(this, "text", value)) : textConstant2(value == null ? "" : value + ""));
+    projection2.postclip = function(_2) {
+      return arguments.length ? (postclip = _2, x05 = y05 = x12 = y12 = null, reset()) : postclip;
+    };
+    projection2.clipExtent = function(_2) {
+      return arguments.length ? (postclip = _2 == null ? (x05 = y05 = x12 = y12 = null, identity_default) : clipRectangle(x05 = +_2[0][0], y05 = +_2[0][1], x12 = +_2[1][0], y12 = +_2[1][1]), reset()) : x05 == null ? null : [[x05, y05], [x12, y12]];
+    };
+    projection2.scale = function(_2) {
+      return arguments.length ? (k2 = +_2, reset()) : k2;
+    };
+    projection2.translate = function(_2) {
+      return arguments.length ? (tx = +_2[0], ty = +_2[1], reset()) : [tx, ty];
+    };
+    projection2.angle = function(_2) {
+      return arguments.length ? (alpha = _2 % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;
+    };
+    projection2.reflectX = function(_2) {
+      return arguments.length ? (sx = _2 ? -1 : 1, reset()) : sx < 0;
+    };
+    projection2.reflectY = function(_2) {
+      return arguments.length ? (sy = _2 ? -1 : 1, reset()) : sy < 0;
+    };
+    projection2.fitExtent = function(extent, object) {
+      return fitExtent(projection2, extent, object);
+    };
+    projection2.fitSize = function(size, object) {
+      return fitSize(projection2, size, object);
+    };
+    projection2.fitWidth = function(width, object) {
+      return fitWidth(projection2, width, object);
+    };
+    projection2.fitHeight = function(height, object) {
+      return fitHeight(projection2, height, object);
+    };
+    return projection2;
   }
 
-  // node_modules/d3-transition/src/transition/textTween.js
-  function textInterpolate(i3) {
-    return function(t2) {
-      this.textContent = i3.call(this, t2);
-    };
+  // modules/geo/geo.js
+  var TAU = 2 * Math.PI;
+  var EQUATORIAL_RADIUS = 6378137;
+  var POLAR_RADIUS = 63567523e-1;
+  function geoLatToMeters(dLat) {
+    return dLat * (TAU * POLAR_RADIUS / 360);
   }
-  function textTween(value) {
-    var t0, i0;
-    function tween() {
-      var i3 = value.apply(this, arguments);
-      if (i3 !== i0) t0 = (i0 = i3) && textInterpolate(i3);
-      return t0;
-    }
-    tween._value = value;
-    return tween;
+  function geoLonToMeters(dLon, atLat) {
+    return Math.abs(atLat) >= 90 ? 0 : dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
   }
-  function textTween_default(value) {
-    var key = "text";
-    if (arguments.length < 1) return (key = this.tween(key)) && key._value;
-    if (value == null) return this.tween(key, null);
-    if (typeof value !== "function") throw new Error();
-    return this.tween(key, textTween(value));
+  function geoMetersToLat(m2) {
+    return m2 / (TAU * POLAR_RADIUS / 360);
   }
-
-  // node_modules/d3-transition/src/transition/transition.js
-  function transition_default() {
-    var name = this._name, id0 = this._id, id1 = newId();
-    for (var groups = this._groups, m2 = groups.length, j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group[i3]) {
-          var inherit2 = get2(node, id0);
-          schedule_default(node, name, id1, i3, group, {
-            time: inherit2.time + inherit2.delay + inherit2.duration,
-            delay: 0,
-            duration: inherit2.duration,
-            ease: inherit2.ease
-          });
-        }
-      }
-    }
-    return new Transition(groups, this._parents, name, id1);
+  function geoMetersToLon(m2, atLat) {
+    return Math.abs(atLat) >= 90 ? 0 : m2 / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
   }
-
-  // node_modules/d3-transition/src/transition/end.js
-  function end_default() {
-    var on0, on1, that = this, id2 = that._id, size = that.size();
-    return new Promise(function(resolve, reject) {
-      var cancel = { value: reject }, end = { value: function() {
-        if (--size === 0) resolve();
-      } };
-      that.each(function() {
-        var schedule = set2(this, id2), on = schedule.on;
-        if (on !== on0) {
-          on1 = (on0 = on).copy();
-          on1._.cancel.push(cancel);
-          on1._.interrupt.push(cancel);
-          on1._.end.push(end);
-        }
-        schedule.on = on1;
-      });
-      if (size === 0) resolve();
-    });
+  function geoMetersToOffset(meters, tileSize) {
+    tileSize = tileSize || 256;
+    return [
+      meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
+      -meters[1] * tileSize / (TAU * POLAR_RADIUS)
+    ];
   }
-
-  // node_modules/d3-transition/src/transition/index.js
-  var id = 0;
-  function Transition(groups, parents, name, id2) {
-    this._groups = groups;
-    this._parents = parents;
-    this._name = name;
-    this._id = id2;
+  function geoOffsetToMeters(offset, tileSize) {
+    tileSize = tileSize || 256;
+    return [
+      offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
+      -offset[1] * TAU * POLAR_RADIUS / tileSize
+    ];
   }
-  function transition(name) {
-    return selection_default().transition(name);
+  function geoSphericalDistance(a2, b2) {
+    var x2 = geoLonToMeters(a2[0] - b2[0], (a2[1] + b2[1]) / 2);
+    var y2 = geoLatToMeters(a2[1] - b2[1]);
+    return Math.sqrt(x2 * x2 + y2 * y2);
   }
-  function newId() {
-    return ++id;
+  function geoScaleToZoom(k2, tileSize) {
+    tileSize = tileSize || 256;
+    var log2ts = Math.log(tileSize) * Math.LOG2E;
+    return Math.log(k2 * TAU) / Math.LN2 - log2ts;
   }
-  var selection_prototype = selection_default.prototype;
-  Transition.prototype = transition.prototype = {
-    constructor: Transition,
-    select: select_default3,
-    selectAll: selectAll_default3,
-    selectChild: selection_prototype.selectChild,
-    selectChildren: selection_prototype.selectChildren,
-    filter: filter_default2,
-    merge: merge_default2,
-    selection: selection_default2,
-    transition: transition_default,
-    call: selection_prototype.call,
-    nodes: selection_prototype.nodes,
-    node: selection_prototype.node,
-    size: selection_prototype.size,
-    empty: selection_prototype.empty,
-    each: selection_prototype.each,
-    on: on_default2,
-    attr: attr_default2,
-    attrTween: attrTween_default,
-    style: style_default2,
-    styleTween: styleTween_default,
-    text: text_default2,
-    textTween: textTween_default,
-    remove: remove_default2,
-    tween: tween_default,
-    delay: delay_default,
-    duration: duration_default,
-    ease: ease_default,
-    easeVarying: easeVarying_default,
-    end: end_default,
-    [Symbol.iterator]: selection_prototype[Symbol.iterator]
-  };
-
-  // node_modules/d3-ease/src/linear.js
-  var linear2 = (t2) => +t2;
-
-  // node_modules/d3-ease/src/cubic.js
-  function cubicInOut(t2) {
-    return ((t2 *= 2) <= 1 ? t2 * t2 * t2 : (t2 -= 2) * t2 * t2 + 2) / 2;
+  function geoZoomToScale(z2, tileSize) {
+    tileSize = tileSize || 256;
+    return tileSize * Math.pow(2, z2) / TAU;
   }
-
-  // node_modules/d3-transition/src/selection/transition.js
-  var defaultTiming = {
-    time: null,
-    // Set on use.
-    delay: 0,
-    duration: 250,
-    ease: cubicInOut
-  };
-  function inherit(node, id2) {
-    var timing;
-    while (!(timing = node.__transition) || !(timing = timing[id2])) {
-      if (!(node = node.parentNode)) {
-        throw new Error("transition ".concat(id2, " not found"));
+  function geoSphericalClosestNode(nodes, point) {
+    var minDistance = Infinity, distance;
+    var indexOfMin;
+    for (var i3 in nodes) {
+      distance = geoSphericalDistance(nodes[i3].loc, point);
+      if (distance < minDistance) {
+        minDistance = distance;
+        indexOfMin = i3;
       }
     }
-    return timing;
-  }
-  function transition_default2(name) {
-    var id2, timing;
-    if (name instanceof Transition) {
-      id2 = name._id, name = name._name;
+    if (indexOfMin !== void 0) {
+      return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
     } else {
-      id2 = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
-    }
-    for (var groups = this._groups, m2 = groups.length, j2 = 0; j2 < m2; ++j2) {
-      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
-        if (node = group[i3]) {
-          schedule_default(node, name, id2, i3, group, timing || inherit(node, id2));
-        }
-      }
+      return null;
     }
-    return new Transition(groups, this._parents, name, id2);
-  }
-
-  // node_modules/d3-transition/src/selection/index.js
-  selection_default.prototype.interrupt = interrupt_default2;
-  selection_default.prototype.transition = transition_default2;
-
-  // node_modules/d3-zoom/src/constant.js
-  var constant_default4 = (x2) => () => x2;
-
-  // node_modules/d3-zoom/src/event.js
-  function ZoomEvent(type2, {
-    sourceEvent,
-    target,
-    transform: transform2,
-    dispatch: dispatch14
-  }) {
-    Object.defineProperties(this, {
-      type: { value: type2, enumerable: true, configurable: true },
-      sourceEvent: { value: sourceEvent, enumerable: true, configurable: true },
-      target: { value: target, enumerable: true, configurable: true },
-      transform: { value: transform2, enumerable: true, configurable: true },
-      _: { value: dispatch14 }
-    });
   }
 
-  // node_modules/d3-zoom/src/transform.js
-  function Transform(k2, x2, y2) {
-    this.k = k2;
-    this.x = x2;
-    this.y = y2;
+  // modules/geo/extent.js
+  function geoExtent(min3, max3) {
+    if (!(this instanceof geoExtent)) {
+      return new geoExtent(min3, max3);
+    } else if (min3 instanceof geoExtent) {
+      return min3;
+    } else if (min3 && min3.length === 2 && min3[0].length === 2 && min3[1].length === 2) {
+      this[0] = min3[0];
+      this[1] = min3[1];
+    } else {
+      this[0] = min3 || [Infinity, Infinity];
+      this[1] = max3 || min3 || [-Infinity, -Infinity];
+    }
   }
-  Transform.prototype = {
-    constructor: Transform,
-    scale: function(k2) {
-      return k2 === 1 ? this : new Transform(this.k * k2, this.x, this.y);
+  geoExtent.prototype = new Array(2);
+  Object.assign(geoExtent.prototype, {
+    equals: function(obj) {
+      return this[0][0] === obj[0][0] && this[0][1] === obj[0][1] && this[1][0] === obj[1][0] && this[1][1] === obj[1][1];
     },
-    translate: function(x2, y2) {
-      return x2 === 0 & y2 === 0 ? this : new Transform(this.k, this.x + this.k * x2, this.y + this.k * y2);
+    extend: function(obj) {
+      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
+      return geoExtent(
+        [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
+        [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
+      );
     },
-    apply: function(point) {
-      return [point[0] * this.k + this.x, point[1] * this.k + this.y];
+    _extend: function(extent) {
+      this[0][0] = Math.min(extent[0][0], this[0][0]);
+      this[0][1] = Math.min(extent[0][1], this[0][1]);
+      this[1][0] = Math.max(extent[1][0], this[1][0]);
+      this[1][1] = Math.max(extent[1][1], this[1][1]);
     },
-    applyX: function(x2) {
-      return x2 * this.k + this.x;
+    area: function() {
+      return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
     },
-    applyY: function(y2) {
-      return y2 * this.k + this.y;
+    center: function() {
+      return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
     },
-    invert: function(location) {
-      return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
+    rectangle: function() {
+      return [this[0][0], this[0][1], this[1][0], this[1][1]];
     },
-    invertX: function(x2) {
-      return (x2 - this.x) / this.k;
+    bbox: function() {
+      return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
     },
-    invertY: function(y2) {
-      return (y2 - this.y) / this.k;
+    polygon: function() {
+      return [
+        [this[0][0], this[0][1]],
+        [this[0][0], this[1][1]],
+        [this[1][0], this[1][1]],
+        [this[1][0], this[0][1]],
+        [this[0][0], this[0][1]]
+      ];
     },
-    rescaleX: function(x2) {
-      return x2.copy().domain(x2.range().map(this.invertX, this).map(x2.invert, x2));
+    contains: function(obj) {
+      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
+      return obj[0][0] >= this[0][0] && obj[0][1] >= this[0][1] && obj[1][0] <= this[1][0] && obj[1][1] <= this[1][1];
     },
-    rescaleY: function(y2) {
-      return y2.copy().domain(y2.range().map(this.invertY, this).map(y2.invert, y2));
+    intersects: function(obj) {
+      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
+      return obj[0][0] <= this[1][0] && obj[0][1] <= this[1][1] && obj[1][0] >= this[0][0] && obj[1][1] >= this[0][1];
     },
-    toString: function() {
-      return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
+    intersection: function(obj) {
+      if (!this.intersects(obj)) return new geoExtent();
+      return new geoExtent(
+        [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
+        [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
+      );
+    },
+    percentContainedIn: function(obj) {
+      if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
+      var a1 = this.intersection(obj).area();
+      var a2 = this.area();
+      if (a1 === Infinity || a2 === Infinity) {
+        return 0;
+      } else if (a1 === 0 || a2 === 0) {
+        if (obj.contains(this)) {
+          return 1;
+        }
+        return 0;
+      } else {
+        return a1 / a2;
+      }
+    },
+    padByMeters: function(meters) {
+      var dLat = geoMetersToLat(meters);
+      var dLon = geoMetersToLon(meters, this.center()[1]);
+      return geoExtent(
+        [this[0][0] - dLon, this[0][1] - dLat],
+        [this[1][0] + dLon, this[1][1] + dLat]
+      );
+    },
+    toParam: function() {
+      return this.rectangle().join(",");
+    },
+    split: function() {
+      const center = this.center();
+      return [
+        geoExtent(this[0], center),
+        geoExtent([center[0], this[0][1]], [this[1][0], center[1]]),
+        geoExtent(center, this[1]),
+        geoExtent([this[0][0], center[1]], [center[0], this[1][1]])
+      ];
+    }
+  });
+
+  // node_modules/d3-polygon/src/area.js
+  function area_default3(polygon2) {
+    var i3 = -1, n3 = polygon2.length, a2, b2 = polygon2[n3 - 1], area = 0;
+    while (++i3 < n3) {
+      a2 = b2;
+      b2 = polygon2[i3];
+      area += a2[1] * b2[0] - a2[0] * b2[1];
+    }
+    return area / 2;
+  }
+
+  // node_modules/d3-polygon/src/centroid.js
+  function centroid_default2(polygon2) {
+    var i3 = -1, n3 = polygon2.length, x2 = 0, y2 = 0, a2, b2 = polygon2[n3 - 1], c2, k2 = 0;
+    while (++i3 < n3) {
+      a2 = b2;
+      b2 = polygon2[i3];
+      k2 += c2 = a2[0] * b2[1] - b2[0] * a2[1];
+      x2 += (a2[0] + b2[0]) * c2;
+      y2 += (a2[1] + b2[1]) * c2;
+    }
+    return k2 *= 3, [x2 / k2, y2 / k2];
+  }
+
+  // node_modules/d3-polygon/src/cross.js
+  function cross_default(a2, b2, c2) {
+    return (b2[0] - a2[0]) * (c2[1] - a2[1]) - (b2[1] - a2[1]) * (c2[0] - a2[0]);
+  }
+
+  // node_modules/d3-polygon/src/hull.js
+  function lexicographicOrder(a2, b2) {
+    return a2[0] - b2[0] || a2[1] - b2[1];
+  }
+  function computeUpperHullIndexes(points) {
+    const n3 = points.length, indexes = [0, 1];
+    let size = 2, i3;
+    for (i3 = 2; i3 < n3; ++i3) {
+      while (size > 1 && cross_default(points[indexes[size - 2]], points[indexes[size - 1]], points[i3]) <= 0) --size;
+      indexes[size++] = i3;
     }
-  };
-  var identity2 = new Transform(1, 0, 0);
-  transform.prototype = Transform.prototype;
-  function transform(node) {
-    while (!node.__zoom) if (!(node = node.parentNode)) return identity2;
-    return node.__zoom;
+    return indexes.slice(0, size);
+  }
+  function hull_default(points) {
+    if ((n3 = points.length) < 3) return null;
+    var i3, n3, sortedPoints = new Array(n3), flippedPoints = new Array(n3);
+    for (i3 = 0; i3 < n3; ++i3) sortedPoints[i3] = [+points[i3][0], +points[i3][1], i3];
+    sortedPoints.sort(lexicographicOrder);
+    for (i3 = 0; i3 < n3; ++i3) flippedPoints[i3] = [sortedPoints[i3][0], -sortedPoints[i3][1]];
+    var upperIndexes = computeUpperHullIndexes(sortedPoints), lowerIndexes = computeUpperHullIndexes(flippedPoints);
+    var skipLeft = lowerIndexes[0] === upperIndexes[0], skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], hull = [];
+    for (i3 = upperIndexes.length - 1; i3 >= 0; --i3) hull.push(points[sortedPoints[upperIndexes[i3]][2]]);
+    for (i3 = +skipLeft; i3 < lowerIndexes.length - skipRight; ++i3) hull.push(points[sortedPoints[lowerIndexes[i3]][2]]);
+    return hull;
   }
 
-  // node_modules/d3-zoom/src/noevent.js
-  function nopropagation2(event) {
-    event.stopImmediatePropagation();
+  // modules/geo/vector.js
+  function geoVecEqual(a2, b2, epsilon3) {
+    if (epsilon3) {
+      return Math.abs(a2[0] - b2[0]) <= epsilon3 && Math.abs(a2[1] - b2[1]) <= epsilon3;
+    } else {
+      return a2[0] === b2[0] && a2[1] === b2[1];
+    }
   }
-  function noevent_default2(event) {
-    event.preventDefault();
-    event.stopImmediatePropagation();
+  function geoVecAdd(a2, b2) {
+    return [a2[0] + b2[0], a2[1] + b2[1]];
   }
-
-  // node_modules/d3-zoom/src/zoom.js
-  function defaultFilter2(event) {
-    return (!event.ctrlKey || event.type === "wheel") && !event.button;
+  function geoVecSubtract(a2, b2) {
+    return [a2[0] - b2[0], a2[1] - b2[1]];
   }
-  function defaultExtent() {
-    var e3 = this;
-    if (e3 instanceof SVGElement) {
-      e3 = e3.ownerSVGElement || e3;
-      if (e3.hasAttribute("viewBox")) {
-        e3 = e3.viewBox.baseVal;
-        return [[e3.x, e3.y], [e3.x + e3.width, e3.y + e3.height]];
-      }
-      return [[0, 0], [e3.width.baseVal.value, e3.height.baseVal.value]];
-    }
-    return [[0, 0], [e3.clientWidth, e3.clientHeight]];
+  function geoVecScale(a2, mag) {
+    return [a2[0] * mag, a2[1] * mag];
   }
-  function defaultTransform() {
-    return this.__zoom || identity2;
+  function geoVecFloor(a2) {
+    return [Math.floor(a2[0]), Math.floor(a2[1])];
   }
-  function defaultWheelDelta(event) {
-    return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 2e-3) * (event.ctrlKey ? 10 : 1);
+  function geoVecInterp(a2, b2, t2) {
+    return [
+      a2[0] + (b2[0] - a2[0]) * t2,
+      a2[1] + (b2[1] - a2[1]) * t2
+    ];
   }
-  function defaultTouchable2() {
-    return navigator.maxTouchPoints || "ontouchstart" in this;
+  function geoVecLength(a2, b2) {
+    return Math.sqrt(geoVecLengthSquare(a2, b2));
   }
-  function defaultConstrain(transform2, extent, translateExtent) {
-    var dx0 = transform2.invertX(extent[0][0]) - translateExtent[0][0], dx1 = transform2.invertX(extent[1][0]) - translateExtent[1][0], dy0 = transform2.invertY(extent[0][1]) - translateExtent[0][1], dy1 = transform2.invertY(extent[1][1]) - translateExtent[1][1];
-    return transform2.translate(
-      dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
-      dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
-    );
+  function geoVecLengthSquare(a2, b2) {
+    b2 = b2 || [0, 0];
+    var x2 = a2[0] - b2[0];
+    var y2 = a2[1] - b2[1];
+    return x2 * x2 + y2 * y2;
   }
-  function zoom_default2() {
-    var filter2 = defaultFilter2, extent = defaultExtent, constrain = defaultConstrain, wheelDelta = defaultWheelDelta, touchable = defaultTouchable2, scaleExtent = [0, Infinity], translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], duration = 250, interpolate = zoom_default, listeners = dispatch_default("start", "zoom", "end"), touchstarting, touchfirst, touchending, touchDelay = 500, wheelDelay = 150, clickDistance2 = 0, tapDistance = 10;
-    function zoom(selection2) {
-      selection2.property("__zoom", defaultTransform).on("wheel.zoom", wheeled, { passive: false }).on("mousedown.zoom", mousedowned).on("dblclick.zoom", dblclicked).filter(touchable).on("touchstart.zoom", touchstarted).on("touchmove.zoom", touchmoved).on("touchend.zoom touchcancel.zoom", touchended).style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
+  function geoVecNormalize(a2) {
+    var length2 = Math.sqrt(a2[0] * a2[0] + a2[1] * a2[1]);
+    if (length2 !== 0) {
+      return geoVecScale(a2, 1 / length2);
     }
-    zoom.transform = function(collection, transform2, point, event) {
-      var selection2 = collection.selection ? collection.selection() : collection;
-      selection2.property("__zoom", defaultTransform);
-      if (collection !== selection2) {
-        schedule(collection, transform2, point, event);
+    return [0, 0];
+  }
+  function geoVecAngle(a2, b2) {
+    return Math.atan2(b2[1] - a2[1], b2[0] - a2[0]);
+  }
+  function geoVecDot(a2, b2, origin) {
+    origin = origin || [0, 0];
+    var p2 = geoVecSubtract(a2, origin);
+    var q2 = geoVecSubtract(b2, origin);
+    return p2[0] * q2[0] + p2[1] * q2[1];
+  }
+  function geoVecNormalizedDot(a2, b2, origin) {
+    origin = origin || [0, 0];
+    var p2 = geoVecNormalize(geoVecSubtract(a2, origin));
+    var q2 = geoVecNormalize(geoVecSubtract(b2, origin));
+    return geoVecDot(p2, q2);
+  }
+  function geoVecCross(a2, b2, origin) {
+    origin = origin || [0, 0];
+    var p2 = geoVecSubtract(a2, origin);
+    var q2 = geoVecSubtract(b2, origin);
+    return p2[0] * q2[1] - p2[1] * q2[0];
+  }
+  function geoVecProject(a2, points) {
+    var min3 = Infinity;
+    var idx;
+    var target;
+    for (var i3 = 0; i3 < points.length - 1; i3++) {
+      var o2 = points[i3];
+      var s2 = geoVecSubtract(points[i3 + 1], o2);
+      var v2 = geoVecSubtract(a2, o2);
+      var proj = geoVecDot(v2, s2) / geoVecDot(s2, s2);
+      var p2;
+      if (proj < 0) {
+        p2 = o2;
+      } else if (proj > 1) {
+        p2 = points[i3 + 1];
       } else {
-        selection2.interrupt().each(function() {
-          gesture(this, arguments).event(event).start().zoom(null, typeof transform2 === "function" ? transform2.apply(this, arguments) : transform2).end();
-        });
-      }
-    };
-    zoom.scaleBy = function(selection2, k2, p2, event) {
-      zoom.scaleTo(selection2, function() {
-        var k0 = this.__zoom.k, k1 = typeof k2 === "function" ? k2.apply(this, arguments) : k2;
-        return k0 * k1;
-      }, p2, event);
-    };
-    zoom.scaleTo = function(selection2, k2, p2, event) {
-      zoom.transform(selection2, function() {
-        var e3 = extent.apply(this, arguments), t0 = this.__zoom, p02 = p2 == null ? centroid(e3) : typeof p2 === "function" ? p2.apply(this, arguments) : p2, p1 = t0.invert(p02), k1 = typeof k2 === "function" ? k2.apply(this, arguments) : k2;
-        return constrain(translate(scale(t0, k1), p02, p1), e3, translateExtent);
-      }, p2, event);
-    };
-    zoom.translateBy = function(selection2, x2, y2, event) {
-      zoom.transform(selection2, function() {
-        return constrain(this.__zoom.translate(
-          typeof x2 === "function" ? x2.apply(this, arguments) : x2,
-          typeof y2 === "function" ? y2.apply(this, arguments) : y2
-        ), extent.apply(this, arguments), translateExtent);
-      }, null, event);
-    };
-    zoom.translateTo = function(selection2, x2, y2, p2, event) {
-      zoom.transform(selection2, function() {
-        var e3 = extent.apply(this, arguments), t2 = this.__zoom, p02 = p2 == null ? centroid(e3) : typeof p2 === "function" ? p2.apply(this, arguments) : p2;
-        return constrain(identity2.translate(p02[0], p02[1]).scale(t2.k).translate(
-          typeof x2 === "function" ? -x2.apply(this, arguments) : -x2,
-          typeof y2 === "function" ? -y2.apply(this, arguments) : -y2
-        ), e3, translateExtent);
-      }, p2, event);
-    };
-    function scale(transform2, k2) {
-      k2 = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k2));
-      return k2 === transform2.k ? transform2 : new Transform(k2, transform2.x, transform2.y);
-    }
-    function translate(transform2, p02, p1) {
-      var x2 = p02[0] - p1[0] * transform2.k, y2 = p02[1] - p1[1] * transform2.k;
-      return x2 === transform2.x && y2 === transform2.y ? transform2 : new Transform(transform2.k, x2, y2);
-    }
-    function centroid(extent2) {
-      return [(+extent2[0][0] + +extent2[1][0]) / 2, (+extent2[0][1] + +extent2[1][1]) / 2];
-    }
-    function schedule(transition2, transform2, point, event) {
-      transition2.on("start.zoom", function() {
-        gesture(this, arguments).event(event).start();
-      }).on("interrupt.zoom end.zoom", function() {
-        gesture(this, arguments).event(event).end();
-      }).tween("zoom", function() {
-        var that = this, args = arguments, g3 = gesture(that, args).event(event), e3 = extent.apply(that, args), p2 = point == null ? centroid(e3) : typeof point === "function" ? point.apply(that, args) : point, w2 = Math.max(e3[1][0] - e3[0][0], e3[1][1] - e3[0][1]), a2 = that.__zoom, b2 = typeof transform2 === "function" ? transform2.apply(that, args) : transform2, i3 = interpolate(a2.invert(p2).concat(w2 / a2.k), b2.invert(p2).concat(w2 / b2.k));
-        return function(t2) {
-          if (t2 === 1) t2 = b2;
-          else {
-            var l2 = i3(t2), k2 = w2 / l2[2];
-            t2 = new Transform(k2, p2[0] - l2[0] * k2, p2[1] - l2[1] * k2);
-          }
-          g3.zoom(null, t2);
-        };
-      });
-    }
-    function gesture(that, args, clean2) {
-      return !clean2 && that.__zooming || new Gesture(that, args);
-    }
-    function Gesture(that, args) {
-      this.that = that;
-      this.args = args;
-      this.active = 0;
-      this.sourceEvent = null;
-      this.extent = extent.apply(that, args);
-      this.taps = 0;
-    }
-    Gesture.prototype = {
-      event: function(event) {
-        if (event) this.sourceEvent = event;
-        return this;
-      },
-      start: function() {
-        if (++this.active === 1) {
-          this.that.__zooming = this;
-          this.emit("start");
-        }
-        return this;
-      },
-      zoom: function(key, transform2) {
-        if (this.mouse && key !== "mouse") this.mouse[1] = transform2.invert(this.mouse[0]);
-        if (this.touch0 && key !== "touch") this.touch0[1] = transform2.invert(this.touch0[0]);
-        if (this.touch1 && key !== "touch") this.touch1[1] = transform2.invert(this.touch1[0]);
-        this.that.__zoom = transform2;
-        this.emit("zoom");
-        return this;
-      },
-      end: function() {
-        if (--this.active === 0) {
-          delete this.that.__zooming;
-          this.emit("end");
-        }
-        return this;
-      },
-      emit: function(type2) {
-        var d2 = select_default2(this.that).datum();
-        listeners.call(
-          type2,
-          this.that,
-          new ZoomEvent(type2, {
-            sourceEvent: this.sourceEvent,
-            target: zoom,
-            type: type2,
-            transform: this.that.__zoom,
-            dispatch: listeners
-          }),
-          d2
-        );
-      }
-    };
-    function wheeled(event, ...args) {
-      if (!filter2.apply(this, arguments)) return;
-      var g3 = gesture(this, args).event(event), t2 = this.__zoom, k2 = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t2.k * Math.pow(2, wheelDelta.apply(this, arguments)))), p2 = pointer_default(event);
-      if (g3.wheel) {
-        if (g3.mouse[0][0] !== p2[0] || g3.mouse[0][1] !== p2[1]) {
-          g3.mouse[1] = t2.invert(g3.mouse[0] = p2);
-        }
-        clearTimeout(g3.wheel);
-      } else if (t2.k === k2) return;
-      else {
-        g3.mouse = [p2, t2.invert(p2)];
-        interrupt_default(this);
-        g3.start();
-      }
-      noevent_default2(event);
-      g3.wheel = setTimeout(wheelidled, wheelDelay);
-      g3.zoom("mouse", constrain(translate(scale(t2, k2), g3.mouse[0], g3.mouse[1]), g3.extent, translateExtent));
-      function wheelidled() {
-        g3.wheel = null;
-        g3.end();
-      }
-    }
-    function mousedowned(event, ...args) {
-      if (touchending || !filter2.apply(this, arguments)) return;
-      var currentTarget = event.currentTarget, g3 = gesture(this, args, true).event(event), v2 = select_default2(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), p2 = pointer_default(event, currentTarget), x05 = event.clientX, y05 = event.clientY;
-      nodrag_default(event.view);
-      nopropagation2(event);
-      g3.mouse = [p2, this.__zoom.invert(p2)];
-      interrupt_default(this);
-      g3.start();
-      function mousemoved(event2) {
-        noevent_default2(event2);
-        if (!g3.moved) {
-          var dx = event2.clientX - x05, dy = event2.clientY - y05;
-          g3.moved = dx * dx + dy * dy > clickDistance2;
-        }
-        g3.event(event2).zoom("mouse", constrain(translate(g3.that.__zoom, g3.mouse[0] = pointer_default(event2, currentTarget), g3.mouse[1]), g3.extent, translateExtent));
+        p2 = [o2[0] + proj * s2[0], o2[1] + proj * s2[1]];
       }
-      function mouseupped(event2) {
-        v2.on("mousemove.zoom mouseup.zoom", null);
-        yesdrag(event2.view, g3.moved);
-        noevent_default2(event2);
-        g3.event(event2).end();
+      var dist = geoVecLength(p2, a2);
+      if (dist < min3) {
+        min3 = dist;
+        idx = i3 + 1;
+        target = p2;
       }
     }
-    function dblclicked(event, ...args) {
-      if (!filter2.apply(this, arguments)) return;
-      var t0 = this.__zoom, p02 = pointer_default(event.changedTouches ? event.changedTouches[0] : event, this), p1 = t0.invert(p02), k1 = t0.k * (event.shiftKey ? 0.5 : 2), t1 = constrain(translate(scale(t0, k1), p02, p1), extent.apply(this, args), translateExtent);
-      noevent_default2(event);
-      if (duration > 0) select_default2(this).transition().duration(duration).call(schedule, t1, p02, event);
-      else select_default2(this).call(zoom.transform, t1, p02, event);
+    if (idx !== void 0) {
+      return { index: idx, distance: min3, target };
+    } else {
+      return null;
     }
-    function touchstarted(event, ...args) {
-      if (!filter2.apply(this, arguments)) return;
-      var touches = event.touches, n3 = touches.length, g3 = gesture(this, args, event.changedTouches.length === n3).event(event), started, i3, t2, p2;
-      nopropagation2(event);
-      for (i3 = 0; i3 < n3; ++i3) {
-        t2 = touches[i3], p2 = pointer_default(t2, this);
-        p2 = [p2, this.__zoom.invert(p2), t2.identifier];
-        if (!g3.touch0) g3.touch0 = p2, started = true, g3.taps = 1 + !!touchstarting;
-        else if (!g3.touch1 && g3.touch0[2] !== p2[2]) g3.touch1 = p2, g3.taps = 0;
+  }
+
+  // modules/geo/geom.js
+  function geoAngle(a2, b2, projection2) {
+    return geoVecAngle(projection2(a2.loc), projection2(b2.loc));
+  }
+  function geoEdgeEqual(a2, b2) {
+    return a2[0] === b2[0] && a2[1] === b2[1] || a2[0] === b2[1] && a2[1] === b2[0];
+  }
+  function geoRotate(points, angle2, around) {
+    return points.map(function(point) {
+      var radial = geoVecSubtract(point, around);
+      return [
+        radial[0] * Math.cos(angle2) - radial[1] * Math.sin(angle2) + around[0],
+        radial[0] * Math.sin(angle2) + radial[1] * Math.cos(angle2) + around[1]
+      ];
+    });
+  }
+  function geoChooseEdge(nodes, point, projection2, activeID) {
+    var dist = geoVecLength;
+    var points = nodes.map(function(n3) {
+      return projection2(n3.loc);
+    });
+    var ids = nodes.map(function(n3) {
+      return n3.id;
+    });
+    var min3 = Infinity;
+    var idx;
+    var loc;
+    for (var i3 = 0; i3 < points.length - 1; i3++) {
+      if (ids[i3] === activeID || ids[i3 + 1] === activeID) continue;
+      var o2 = points[i3];
+      var s2 = geoVecSubtract(points[i3 + 1], o2);
+      var v2 = geoVecSubtract(point, o2);
+      var proj = geoVecDot(v2, s2) / geoVecDot(s2, s2);
+      var p2;
+      if (proj < 0) {
+        p2 = o2;
+      } else if (proj > 1) {
+        p2 = points[i3 + 1];
+      } else {
+        p2 = [o2[0] + proj * s2[0], o2[1] + proj * s2[1]];
       }
-      if (touchstarting) touchstarting = clearTimeout(touchstarting);
-      if (started) {
-        if (g3.taps < 2) touchfirst = p2[0], touchstarting = setTimeout(function() {
-          touchstarting = null;
-        }, touchDelay);
-        interrupt_default(this);
-        g3.start();
+      var d2 = dist(p2, point);
+      if (d2 < min3) {
+        min3 = d2;
+        idx = i3 + 1;
+        loc = projection2.invert(p2);
       }
     }
-    function touchmoved(event, ...args) {
-      if (!this.__zooming) return;
-      var g3 = gesture(this, args).event(event), touches = event.changedTouches, n3 = touches.length, i3, t2, p2, l2;
-      noevent_default2(event);
-      for (i3 = 0; i3 < n3; ++i3) {
-        t2 = touches[i3], p2 = pointer_default(t2, this);
-        if (g3.touch0 && g3.touch0[2] === t2.identifier) g3.touch0[0] = p2;
-        else if (g3.touch1 && g3.touch1[2] === t2.identifier) g3.touch1[0] = p2;
-      }
-      t2 = g3.that.__zoom;
-      if (g3.touch1) {
-        var p02 = g3.touch0[0], l0 = g3.touch0[1], p1 = g3.touch1[0], l1 = g3.touch1[1], dp = (dp = p1[0] - p02[0]) * dp + (dp = p1[1] - p02[1]) * dp, dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
-        t2 = scale(t2, Math.sqrt(dp / dl));
-        p2 = [(p02[0] + p1[0]) / 2, (p02[1] + p1[1]) / 2];
-        l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
-      } else if (g3.touch0) p2 = g3.touch0[0], l2 = g3.touch0[1];
-      else return;
-      g3.zoom("touch", constrain(translate(t2, p2, l2), g3.extent, translateExtent));
+    if (idx !== void 0) {
+      return { index: idx, distance: min3, loc };
+    } else {
+      return null;
     }
-    function touchended(event, ...args) {
-      if (!this.__zooming) return;
-      var g3 = gesture(this, args).event(event), touches = event.changedTouches, n3 = touches.length, i3, t2;
-      nopropagation2(event);
-      if (touchending) clearTimeout(touchending);
-      touchending = setTimeout(function() {
-        touchending = null;
-      }, touchDelay);
-      for (i3 = 0; i3 < n3; ++i3) {
-        t2 = touches[i3];
-        if (g3.touch0 && g3.touch0[2] === t2.identifier) delete g3.touch0;
-        else if (g3.touch1 && g3.touch1[2] === t2.identifier) delete g3.touch1;
-      }
-      if (g3.touch1 && !g3.touch0) g3.touch0 = g3.touch1, delete g3.touch1;
-      if (g3.touch0) g3.touch0[1] = this.__zoom.invert(g3.touch0[0]);
-      else {
-        g3.end();
-        if (g3.taps === 2) {
-          t2 = pointer_default(t2, this);
-          if (Math.hypot(touchfirst[0] - t2[0], touchfirst[1] - t2[1]) < tapDistance) {
-            var p2 = select_default2(this).on("dblclick.zoom");
-            if (p2) p2.apply(this, arguments);
-          }
-        }
+  }
+  function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
+    var actives = [];
+    var inactives = [];
+    var j2, k2, n1, n22, segment;
+    for (j2 = 0; j2 < activeNodes.length - 1; j2++) {
+      n1 = activeNodes[j2];
+      n22 = activeNodes[j2 + 1];
+      segment = [n1.loc, n22.loc];
+      if (n1.id === activeID || n22.id === activeID) {
+        actives.push(segment);
       }
     }
-    zoom.wheelDelta = function(_2) {
-      return arguments.length ? (wheelDelta = typeof _2 === "function" ? _2 : constant_default4(+_2), zoom) : wheelDelta;
-    };
-    zoom.filter = function(_2) {
-      return arguments.length ? (filter2 = typeof _2 === "function" ? _2 : constant_default4(!!_2), zoom) : filter2;
-    };
-    zoom.touchable = function(_2) {
-      return arguments.length ? (touchable = typeof _2 === "function" ? _2 : constant_default4(!!_2), zoom) : touchable;
-    };
-    zoom.extent = function(_2) {
-      return arguments.length ? (extent = typeof _2 === "function" ? _2 : constant_default4([[+_2[0][0], +_2[0][1]], [+_2[1][0], +_2[1][1]]]), zoom) : extent;
-    };
-    zoom.scaleExtent = function(_2) {
-      return arguments.length ? (scaleExtent[0] = +_2[0], scaleExtent[1] = +_2[1], zoom) : [scaleExtent[0], scaleExtent[1]];
-    };
-    zoom.translateExtent = function(_2) {
-      return arguments.length ? (translateExtent[0][0] = +_2[0][0], translateExtent[1][0] = +_2[1][0], translateExtent[0][1] = +_2[0][1], translateExtent[1][1] = +_2[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
-    };
-    zoom.constrain = function(_2) {
-      return arguments.length ? (constrain = _2, zoom) : constrain;
-    };
-    zoom.duration = function(_2) {
-      return arguments.length ? (duration = +_2, zoom) : duration;
-    };
-    zoom.interpolate = function(_2) {
-      return arguments.length ? (interpolate = _2, zoom) : interpolate;
-    };
-    zoom.on = function() {
-      var value = listeners.on.apply(listeners, arguments);
-      return value === listeners ? zoom : value;
-    };
-    zoom.clickDistance = function(_2) {
-      return arguments.length ? (clickDistance2 = (_2 = +_2) * _2, zoom) : Math.sqrt(clickDistance2);
-    };
-    zoom.tapDistance = function(_2) {
-      return arguments.length ? (tapDistance = +_2, zoom) : tapDistance;
-    };
-    return zoom;
-  }
-
-  // modules/geo/raw_mercator.js
-  function geoRawMercator() {
-    var project = mercatorRaw;
-    var k2 = 512 / Math.PI;
-    var x2 = 0;
-    var y2 = 0;
-    var clipExtent = [[0, 0], [0, 0]];
-    function projection2(point) {
-      point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
-      return [point[0] * k2 + x2, y2 - point[1] * k2];
+    for (j2 = 0; j2 < inactiveNodes.length - 1; j2++) {
+      n1 = inactiveNodes[j2];
+      n22 = inactiveNodes[j2 + 1];
+      segment = [n1.loc, n22.loc];
+      inactives.push(segment);
     }
-    projection2.invert = function(point) {
-      point = project.invert((point[0] - x2) / k2, (y2 - point[1]) / k2);
-      return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
-    };
-    projection2.scale = function(_2) {
-      if (!arguments.length) return k2;
-      k2 = +_2;
-      return projection2;
-    };
-    projection2.translate = function(_2) {
-      if (!arguments.length) return [x2, y2];
-      x2 = +_2[0];
-      y2 = +_2[1];
-      return projection2;
-    };
-    projection2.clipExtent = function(_2) {
-      if (!arguments.length) return clipExtent;
-      clipExtent = _2;
-      return projection2;
-    };
-    projection2.transform = function(obj) {
-      if (!arguments.length) return identity2.translate(x2, y2).scale(k2);
-      x2 = +obj.x;
-      y2 = +obj.y;
-      k2 = +obj.k;
-      return projection2;
-    };
-    projection2.stream = transform_default({
-      point: function(x3, y3) {
-        var vec = projection2([x3, y3]);
-        this.stream.point(vec[0], vec[1]);
+    for (j2 = 0; j2 < actives.length; j2++) {
+      for (k2 = 0; k2 < inactives.length; k2++) {
+        var p2 = actives[j2];
+        var q2 = inactives[k2];
+        var hit = geoLineIntersection(p2, q2);
+        if (hit) {
+          return true;
+        }
       }
-    }).stream;
-    return projection2;
+    }
+    return false;
   }
-
-  // modules/geo/ortho.js
-  function geoOrthoNormalizedDotProduct(a2, b2, origin) {
-    if (geoVecEqual(origin, a2) || geoVecEqual(origin, b2)) {
-      return 1;
+  function geoHasSelfIntersections(nodes, activeID) {
+    var actives = [];
+    var inactives = [];
+    var j2, k2;
+    for (j2 = 0; j2 < nodes.length - 1; j2++) {
+      var n1 = nodes[j2];
+      var n22 = nodes[j2 + 1];
+      var segment = [n1.loc, n22.loc];
+      if (n1.id === activeID || n22.id === activeID) {
+        actives.push(segment);
+      } else {
+        inactives.push(segment);
+      }
     }
-    return geoVecNormalizedDot(a2, b2, origin);
+    for (j2 = 0; j2 < actives.length; j2++) {
+      for (k2 = 0; k2 < inactives.length; k2++) {
+        var p2 = actives[j2];
+        var q2 = inactives[k2];
+        if (geoVecEqual(p2[1], q2[0]) || geoVecEqual(p2[0], q2[1]) || geoVecEqual(p2[0], q2[0]) || geoVecEqual(p2[1], q2[1])) {
+          continue;
+        }
+        var hit = geoLineIntersection(p2, q2);
+        if (hit) {
+          var epsilon3 = 1e-8;
+          if (geoVecEqual(p2[1], hit, epsilon3) || geoVecEqual(p2[0], hit, epsilon3) || geoVecEqual(q2[1], hit, epsilon3) || geoVecEqual(q2[0], hit, epsilon3)) {
+            continue;
+          } else {
+            return true;
+          }
+        }
+      }
+    }
+    return false;
   }
-  function geoOrthoFilterDotProduct(dotp, epsilon3, lowerThreshold, upperThreshold, allowStraightAngles) {
-    var val = Math.abs(dotp);
-    if (val < epsilon3) {
-      return 0;
-    } else if (allowStraightAngles && Math.abs(val - 1) < epsilon3) {
-      return 0;
-    } else if (val < lowerThreshold || val > upperThreshold) {
-      return dotp;
-    } else {
-      return null;
+  function geoLineIntersection(a2, b2) {
+    var p2 = [a2[0][0], a2[0][1]];
+    var p22 = [a2[1][0], a2[1][1]];
+    var q2 = [b2[0][0], b2[0][1]];
+    var q22 = [b2[1][0], b2[1][1]];
+    var r2 = geoVecSubtract(p22, p2);
+    var s2 = geoVecSubtract(q22, q2);
+    var uNumerator = geoVecCross(geoVecSubtract(q2, p2), r2);
+    var denominator = geoVecCross(r2, s2);
+    if (uNumerator && denominator) {
+      var u2 = uNumerator / denominator;
+      var t2 = geoVecCross(geoVecSubtract(q2, p2), s2) / denominator;
+      if (t2 >= 0 && t2 <= 1 && u2 >= 0 && u2 <= 1) {
+        return geoVecInterp(p2, p22, t2);
+      }
     }
+    return null;
   }
-  function geoOrthoCalcScore(points, isClosed, epsilon3, threshold) {
-    var score = 0;
-    var first = isClosed ? 0 : 1;
-    var last = isClosed ? points.length : points.length - 1;
-    var coords = points.map(function(p2) {
-      return p2.coord;
-    });
-    var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
-    var upperThreshold = Math.cos(threshold * Math.PI / 180);
-    for (var i3 = first; i3 < last; i3++) {
-      var a2 = coords[(i3 - 1 + coords.length) % coords.length];
-      var origin = coords[i3];
-      var b2 = coords[(i3 + 1) % coords.length];
-      var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a2, b2, origin), epsilon3, lowerThreshold, upperThreshold);
-      if (dotp === null) continue;
-      score = score + 2 * Math.min(Math.abs(dotp - 1), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
+  function geoPathIntersections(path1, path2) {
+    var intersections = [];
+    for (var i3 = 0; i3 < path1.length - 1; i3++) {
+      for (var j2 = 0; j2 < path2.length - 1; j2++) {
+        var a2 = [path1[i3], path1[i3 + 1]];
+        var b2 = [path2[j2], path2[j2 + 1]];
+        var hit = geoLineIntersection(a2, b2);
+        if (hit) {
+          intersections.push(hit);
+        }
+      }
     }
-    return score;
+    return intersections;
   }
-  function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
-    var max3 = -Infinity;
-    var first = isClosed ? 0 : 1;
-    var last = isClosed ? coords.length : coords.length - 1;
-    for (var i3 = first; i3 < last; i3++) {
-      var a2 = coords[(i3 - 1 + coords.length) % coords.length];
-      var origin = coords[i3];
-      var b2 = coords[(i3 + 1) % coords.length];
-      var normalizedDotP = geoOrthoNormalizedDotProduct(a2, b2, origin);
-      var angle2 = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
-      if (angle2 > 45) angle2 = 90 - angle2;
-      if (angle2 >= lessThan) continue;
-      if (angle2 > max3) max3 = angle2;
+  function geoPathHasIntersections(path1, path2) {
+    for (var i3 = 0; i3 < path1.length - 1; i3++) {
+      for (var j2 = 0; j2 < path2.length - 1; j2++) {
+        var a2 = [path1[i3], path1[i3 + 1]];
+        var b2 = [path2[j2], path2[j2 + 1]];
+        var hit = geoLineIntersection(a2, b2);
+        if (hit) {
+          return true;
+        }
+      }
     }
-    if (max3 === -Infinity) return null;
-    return max3;
+    return false;
   }
-  function geoOrthoCanOrthogonalize(coords, isClosed, epsilon3, threshold, allowStraightAngles) {
-    var score = null;
-    var first = isClosed ? 0 : 1;
-    var last = isClosed ? coords.length : coords.length - 1;
-    var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
-    var upperThreshold = Math.cos(threshold * Math.PI / 180);
-    for (var i3 = first; i3 < last; i3++) {
-      var a2 = coords[(i3 - 1 + coords.length) % coords.length];
-      var origin = coords[i3];
-      var b2 = coords[(i3 + 1) % coords.length];
-      var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a2, b2, origin), epsilon3, lowerThreshold, upperThreshold, allowStraightAngles);
-      if (dotp === null) continue;
-      if (Math.abs(dotp) > 0) return 1;
-      score = 0;
+  function geoPointInPolygon(point, polygon2) {
+    var x2 = point[0];
+    var y2 = point[1];
+    var inside = false;
+    for (var i3 = 0, j2 = polygon2.length - 1; i3 < polygon2.length; j2 = i3++) {
+      var xi = polygon2[i3][0];
+      var yi = polygon2[i3][1];
+      var xj = polygon2[j2][0];
+      var yj = polygon2[j2][1];
+      var intersect2 = yi > y2 !== yj > y2 && x2 < (xj - xi) * (y2 - yi) / (yj - yi) + xi;
+      if (intersect2) inside = !inside;
     }
-    return score;
+    return inside;
   }
-
-  // modules/osm/tags.js
-  function osmIsInterestingTag(key) {
-    return key !== "attribution" && key !== "created_by" && key !== "source" && key !== "odbl" && key.indexOf("source:") !== 0 && key.indexOf("source_ref") !== 0 && // purposely exclude colon
-    key.indexOf("tiger:") !== 0;
+  function geoPolygonContainsPolygon(outer, inner) {
+    return inner.every(function(point) {
+      return geoPointInPolygon(point, outer);
+    });
   }
-  var osmLifecyclePrefixes = {
-    // nonexistent, might be built
-    proposed: true,
-    planned: true,
-    // under maintenance or between groundbreaking and opening
-    construction: true,
-    // existent but not functional
-    disused: true,
-    // dilapidated to nonexistent
-    abandoned: true,
-    was: true,
-    // nonexistent, still may appear in imagery
-    dismantled: true,
-    razed: true,
-    demolished: true,
-    destroyed: true,
-    removed: true,
-    obliterated: true,
-    // existent occasionally, e.g. stormwater drainage basin
-    intermittent: true
-  };
-  function osmRemoveLifecyclePrefix(key) {
-    const keySegments = key.split(":");
-    if (keySegments.length === 1) return key;
-    if (keySegments[0] in osmLifecyclePrefixes) {
-      return key.slice(keySegments[0].length + 1);
+  function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
+    function testPoints(outer2, inner2) {
+      return inner2.some(function(point) {
+        return geoPointInPolygon(point, outer2);
+      });
     }
-    return key;
+    return testPoints(outer, inner) || !!checkSegments && geoPathHasIntersections(outer, inner);
   }
-  var osmAreaKeys = {};
-  function osmSetAreaKeys(value) {
-    osmAreaKeys = value;
+  function geoGetSmallestSurroundingRectangle(points) {
+    var hull = hull_default(points);
+    var centroid = centroid_default2(hull);
+    var minArea = Infinity;
+    var ssrExtent = [];
+    var ssrAngle = 0;
+    var c1 = hull[0];
+    for (var i3 = 0; i3 <= hull.length - 1; i3++) {
+      var c2 = i3 === hull.length - 1 ? hull[0] : hull[i3 + 1];
+      var angle2 = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
+      var poly = geoRotate(hull, -angle2, centroid);
+      var extent = poly.reduce(function(extent2, point) {
+        return extent2.extend(geoExtent(point));
+      }, geoExtent());
+      var area = extent.area();
+      if (area < minArea) {
+        minArea = area;
+        ssrExtent = extent;
+        ssrAngle = angle2;
+      }
+      c1 = c2;
+    }
+    return {
+      poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
+      angle: ssrAngle
+    };
   }
-  var osmAreaKeysExceptions = {
-    highway: {
-      elevator: true,
-      rest_area: true,
-      services: true
-    },
-    public_transport: {
-      platform: true
-    },
-    railway: {
-      platform: true,
-      roundhouse: true,
-      station: true,
-      traverser: true,
-      turntable: true,
-      wash: true,
-      ventilation_shaft: true
-    },
-    waterway: {
-      dam: true
-    },
-    amenity: {
-      bicycle_parking: true
+  function geoPathLength(path) {
+    var length2 = 0;
+    for (var i3 = 0; i3 < path.length - 1; i3++) {
+      length2 += geoVecLength(path[i3], path[i3 + 1]);
     }
-  };
-  function osmTagSuggestingArea(tags) {
-    if (tags.area === "yes") return { area: "yes" };
-    if (tags.area === "no") return null;
-    var returnTags = {};
-    for (var realKey in tags) {
-      const key = osmRemoveLifecyclePrefix(realKey);
-      if (key in osmAreaKeys && !(tags[realKey] in osmAreaKeys[key])) {
-        returnTags[realKey] = tags[realKey];
-        return returnTags;
-      }
-      if (key in osmAreaKeysExceptions && tags[realKey] in osmAreaKeysExceptions[key]) {
-        returnTags[realKey] = tags[realKey];
-        return returnTags;
-      }
+    return length2;
+  }
+  function geoViewportEdge(point, dimensions) {
+    var pad2 = [80, 20, 50, 20];
+    var x2 = 0;
+    var y2 = 0;
+    if (point[0] > dimensions[0] - pad2[1]) {
+      x2 = -10;
+    }
+    if (point[0] < pad2[3]) {
+      x2 = 10;
+    }
+    if (point[1] > dimensions[1] - pad2[2]) {
+      y2 = -10;
+    }
+    if (point[1] < pad2[0]) {
+      y2 = 10;
+    }
+    if (x2 || y2) {
+      return [x2, y2];
+    } else {
+      return null;
     }
-    return null;
   }
-  var osmLineTags = {};
-  function osmSetLineTags(value) {
-    osmLineTags = value;
+
+  // node_modules/d3-dispatch/src/dispatch.js
+  var noop2 = { value: () => {
+  } };
+  function dispatch() {
+    for (var i3 = 0, n3 = arguments.length, _2 = {}, t2; i3 < n3; ++i3) {
+      if (!(t2 = arguments[i3] + "") || t2 in _2 || /[\s.]/.test(t2)) throw new Error("illegal type: " + t2);
+      _2[t2] = [];
+    }
+    return new Dispatch(_2);
   }
-  var osmPointTags = {};
-  function osmSetPointTags(value) {
-    osmPointTags = value;
+  function Dispatch(_2) {
+    this._ = _2;
   }
-  var osmVertexTags = {};
-  function osmSetVertexTags(value) {
-    osmVertexTags = value;
+  function parseTypenames(typenames, types) {
+    return typenames.trim().split(/^|\s+/).map(function(t2) {
+      var name = "", i3 = t2.indexOf(".");
+      if (i3 >= 0) name = t2.slice(i3 + 1), t2 = t2.slice(0, i3);
+      if (t2 && !types.hasOwnProperty(t2)) throw new Error("unknown type: " + t2);
+      return { type: t2, name };
+    });
   }
-  function osmNodeGeometriesForTags(nodeTags) {
-    var geometries = {};
-    for (var key in nodeTags) {
-      if (osmPointTags[key] && (osmPointTags[key]["*"] || osmPointTags[key][nodeTags[key]])) {
-        geometries.point = true;
+  Dispatch.prototype = dispatch.prototype = {
+    constructor: Dispatch,
+    on: function(typename, callback) {
+      var _2 = this._, T2 = parseTypenames(typename + "", _2), t2, i3 = -1, n3 = T2.length;
+      if (arguments.length < 2) {
+        while (++i3 < n3) if ((t2 = (typename = T2[i3]).type) && (t2 = get(_2[t2], typename.name))) return t2;
+        return;
       }
-      if (osmVertexTags[key] && (osmVertexTags[key]["*"] || osmVertexTags[key][nodeTags[key]])) {
-        geometries.vertex = true;
+      if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+      while (++i3 < n3) {
+        if (t2 = (typename = T2[i3]).type) _2[t2] = set(_2[t2], typename.name, callback);
+        else if (callback == null) for (t2 in _2) _2[t2] = set(_2[t2], typename.name, null);
       }
-      if (geometries.point && geometries.vertex) break;
-    }
-    return geometries;
-  }
-  var osmOneWayTags = {
-    "aerialway": {
-      "chair_lift": true,
-      "drag_lift": true,
-      "j-bar": true,
-      "magic_carpet": true,
-      "mixed_lift": true,
-      "platter": true,
-      "rope_tow": true,
-      "t-bar": true,
-      "zip_line": true
-    },
-    "conveying": {
-      "forward": true,
-      "backward": true,
-      "reversible": true
-    },
-    "highway": {
-      "motorway": true
-    },
-    "junction": {
-      "circular": true,
-      "roundabout": true
-    },
-    "man_made": {
-      "goods_conveyor": true,
-      "piste:halfpipe": true
-    },
-    "piste:type": {
-      "downhill": true,
-      "sled": true,
-      "yes": true
-    },
-    "seamark:type": {
-      "two-way_route": true,
-      "recommended_traffic_lane": true,
-      "separation_lane": true,
-      "separation_roundabout": true
-    },
-    "waterway": {
-      "canal": true,
-      "ditch": true,
-      "drain": true,
-      "fish_pass": true,
-      "flowline": true,
-      "pressurised": true,
-      "river": true,
-      "spillway": true,
-      "stream": true,
-      "tidal_channel": true
-    }
-  };
-  var osmPavedTags = {
-    "surface": {
-      "paved": true,
-      "asphalt": true,
-      "concrete": true,
-      "chipseal": true,
-      "concrete:lanes": true,
-      "concrete:plates": true
-    },
-    "tracktype": {
-      "grade1": true
-    }
-  };
-  var osmSemipavedTags = {
-    "surface": {
-      "cobblestone": true,
-      "cobblestone:flattened": true,
-      "unhewn_cobblestone": true,
-      "sett": true,
-      "paving_stones": true,
-      "metal": true,
-      "wood": true
-    }
-  };
-  var osmRightSideIsInsideTags = {
-    "natural": {
-      "cliff": true,
-      "coastline": "coastline"
+      return this;
     },
-    "barrier": {
-      "retaining_wall": true,
-      "kerb": true,
-      "guard_rail": true,
-      "city_wall": true
+    copy: function() {
+      var copy2 = {}, _2 = this._;
+      for (var t2 in _2) copy2[t2] = _2[t2].slice();
+      return new Dispatch(copy2);
     },
-    "man_made": {
-      "embankment": true,
-      "quay": true
+    call: function(type2, that) {
+      if ((n3 = arguments.length - 2) > 0) for (var args = new Array(n3), i3 = 0, n3, t2; i3 < n3; ++i3) args[i3] = arguments[i3 + 2];
+      if (!this._.hasOwnProperty(type2)) throw new Error("unknown type: " + type2);
+      for (t2 = this._[type2], i3 = 0, n3 = t2.length; i3 < n3; ++i3) t2[i3].value.apply(that, args);
     },
-    "waterway": {
-      "weir": true
+    apply: function(type2, that, args) {
+      if (!this._.hasOwnProperty(type2)) throw new Error("unknown type: " + type2);
+      for (var t2 = this._[type2], i3 = 0, n3 = t2.length; i3 < n3; ++i3) t2[i3].value.apply(that, args);
     }
   };
-  var osmRoutableHighwayTagValues = {
-    motorway: true,
-    trunk: true,
-    primary: true,
-    secondary: true,
-    tertiary: true,
-    residential: true,
-    motorway_link: true,
-    trunk_link: true,
-    primary_link: true,
-    secondary_link: true,
-    tertiary_link: true,
-    unclassified: true,
-    road: true,
-    service: true,
-    track: true,
-    living_street: true,
-    bus_guideway: true,
-    busway: true,
-    path: true,
-    footway: true,
-    cycleway: true,
-    bridleway: true,
-    pedestrian: true,
-    corridor: true,
-    steps: true,
-    ladder: true
-  };
-  var osmPathHighwayTagValues = {
-    path: true,
-    footway: true,
-    cycleway: true,
-    bridleway: true,
-    pedestrian: true,
-    corridor: true,
-    steps: true,
-    ladder: true
-  };
-  var osmRailwayTrackTagValues = {
-    rail: true,
-    light_rail: true,
-    tram: true,
-    subway: true,
-    monorail: true,
-    funicular: true,
-    miniature: true,
-    narrow_gauge: true,
-    disused: true,
-    preserved: true
-  };
-  var osmFlowingWaterwayTagValues = {
-    canal: true,
-    ditch: true,
-    drain: true,
-    fish_pass: true,
-    flowline: true,
-    river: true,
-    stream: true,
-    tidal_channel: true
-  };
-  var allowUpperCaseTagValues = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery|cai_scale|traffic_sign/;
-  function isColourValid(value) {
-    if (!value.match(/^(#([0-9a-fA-F]{3}){1,2}|\w+)$/)) {
-      return false;
-    }
-    if (!CSS.supports("color", value) || ["unset", "inherit", "initial", "revert"].includes(value)) {
-      return false;
+  function get(type2, name) {
+    for (var i3 = 0, n3 = type2.length, c2; i3 < n3; ++i3) {
+      if ((c2 = type2[i3]).name === name) {
+        return c2.value;
+      }
     }
-    return true;
   }
-  var osmMutuallyExclusiveTagPairs = [
-    ["noname", "name"],
-    ["noref", "ref"],
-    ["nohousenumber", "addr:housenumber"],
-    ["noaddress", "addr:housenumber"],
-    ["noaddress", "addr:housename"],
-    ["noaddress", "addr:unit"],
-    ["addr:nostreet", "addr:street"]
-  ];
-
-  // modules/util/array.js
-  function utilArrayIdentical(a2, b2) {
-    if (a2 === b2) return true;
-    var i3 = a2.length;
-    if (i3 !== b2.length) return false;
-    while (i3--) {
-      if (a2[i3] !== b2[i3]) return false;
+  function set(type2, name, callback) {
+    for (var i3 = 0, n3 = type2.length; i3 < n3; ++i3) {
+      if (type2[i3].name === name) {
+        type2[i3] = noop2, type2 = type2.slice(0, i3).concat(type2.slice(i3 + 1));
+        break;
+      }
     }
-    return true;
-  }
-  function utilArrayDifference(a2, b2) {
-    var other = new Set(b2);
-    return Array.from(new Set(a2)).filter(function(v2) {
-      return !other.has(v2);
-    });
+    if (callback != null) type2.push({ name, value: callback });
+    return type2;
   }
-  function utilArrayIntersection(a2, b2) {
-    var other = new Set(b2);
-    return Array.from(new Set(a2)).filter(function(v2) {
-      return other.has(v2);
-    });
+  var dispatch_default = dispatch;
+
+  // node_modules/d3-selection/src/namespaces.js
+  var xhtml = "http://www.w3.org/1999/xhtml";
+  var namespaces_default = {
+    svg: "http://www.w3.org/2000/svg",
+    xhtml,
+    xlink: "http://www.w3.org/1999/xlink",
+    xml: "http://www.w3.org/XML/1998/namespace",
+    xmlns: "http://www.w3.org/2000/xmlns/"
+  };
+
+  // node_modules/d3-selection/src/namespace.js
+  function namespace_default(name) {
+    var prefix = name += "", i3 = prefix.indexOf(":");
+    if (i3 >= 0 && (prefix = name.slice(0, i3)) !== "xmlns") name = name.slice(i3 + 1);
+    return namespaces_default.hasOwnProperty(prefix) ? { space: namespaces_default[prefix], local: name } : name;
   }
-  function utilArrayUnion(a2, b2) {
-    var result = new Set(a2);
-    b2.forEach(function(v2) {
-      result.add(v2);
-    });
-    return Array.from(result);
+
+  // node_modules/d3-selection/src/creator.js
+  function creatorInherit(name) {
+    return function() {
+      var document2 = this.ownerDocument, uri = this.namespaceURI;
+      return uri === xhtml && document2.documentElement.namespaceURI === xhtml ? document2.createElement(name) : document2.createElementNS(uri, name);
+    };
   }
-  function utilArrayUniq(a2) {
-    return Array.from(new Set(a2));
+  function creatorFixed(fullname) {
+    return function() {
+      return this.ownerDocument.createElementNS(fullname.space, fullname.local);
+    };
   }
-  function utilArrayChunk(a2, chunkSize) {
-    if (!chunkSize || chunkSize < 0) return [a2.slice()];
-    var result = new Array(Math.ceil(a2.length / chunkSize));
-    return Array.from(result, function(item, i3) {
-      return a2.slice(i3 * chunkSize, i3 * chunkSize + chunkSize);
-    });
+  function creator_default(name) {
+    var fullname = namespace_default(name);
+    return (fullname.local ? creatorFixed : creatorInherit)(fullname);
   }
-  function utilArrayFlatten(a2) {
-    return a2.reduce(function(acc, val) {
-      return acc.concat(val);
-    }, []);
+
+  // node_modules/d3-selection/src/selector.js
+  function none() {
   }
-  function utilArrayGroupBy(a2, key) {
-    return a2.reduce(function(acc, item) {
-      var group = typeof key === "function" ? key(item) : item[key];
-      (acc[group] = acc[group] || []).push(item);
-      return acc;
-    }, {});
+  function selector_default(selector) {
+    return selector == null ? none : function() {
+      return this.querySelector(selector);
+    };
   }
-  function utilArrayUniqBy(a2, key) {
-    var seen = /* @__PURE__ */ new Set();
-    return a2.reduce(function(acc, item) {
-      var val = typeof key === "function" ? key(item) : item[key];
-      if (val && !seen.has(val)) {
-        seen.add(val);
-        acc.push(item);
+
+  // node_modules/d3-selection/src/selection/select.js
+  function select_default(select) {
+    if (typeof select !== "function") select = selector_default(select);
+    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = new Array(n3), node, subnode, i3 = 0; i3 < n3; ++i3) {
+        if ((node = group[i3]) && (subnode = select.call(node, node.__data__, i3, group))) {
+          if ("__data__" in node) subnode.__data__ = node.__data__;
+          subgroup[i3] = subnode;
+        }
       }
-      return acc;
-    }, []);
+    }
+    return new Selection(subgroups, this._parents);
   }
 
-  // modules/util/util.js
-  var import_diacritics = __toESM(require_diacritics());
+  // node_modules/d3-selection/src/array.js
+  function array(x2) {
+    return x2 == null ? [] : Array.isArray(x2) ? x2 : Array.from(x2);
+  }
 
-  // modules/util/svg_paths_rtl_fix.js
-  var import_alif_toolkit = __toESM(require_lib());
-  var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u07BF\u08A0–\u08BF]/;
-  function fixRTLTextForSvg(inputText) {
-    var ret = "", rtlBuffer = [];
-    var arabicRegex = /[\u0600-\u06FF]/g;
-    var arabicDiacritics = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06ED]/g;
-    var arabicMath = /[\u0660-\u066C\u06F0-\u06F9]+/g;
-    var thaanaVowel = /[\u07A6-\u07B0]/;
-    var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
-    if (arabicRegex.test(inputText)) {
-      inputText = (0, import_alif_toolkit.WordShaper)(inputText);
-    }
-    for (var n3 = 0; n3 < inputText.length; n3++) {
-      var c2 = inputText[n3];
-      if (arabicMath.test(c2)) {
-        ret += rtlBuffer.reverse().join("");
-        rtlBuffer = [c2];
-      } else {
-        if (rtlBuffer.length && arabicMath.test(rtlBuffer[rtlBuffer.length - 1])) {
-          ret += rtlBuffer.reverse().join("");
-          rtlBuffer = [];
-        }
-        if ((thaanaVowel.test(c2) || hebrewSign.test(c2) || arabicDiacritics.test(c2)) && rtlBuffer.length) {
-          rtlBuffer[rtlBuffer.length - 1] += c2;
-        } else if (rtlRegex.test(c2) || c2.charCodeAt(0) >= 64336 && c2.charCodeAt(0) <= 65023 || c2.charCodeAt(0) >= 65136 && c2.charCodeAt(0) <= 65279) {
-          rtlBuffer.push(c2);
-        } else if (c2 === " " && rtlBuffer.length) {
-          rtlBuffer = [rtlBuffer.reverse().join("") + " "];
-        } else {
-          ret += rtlBuffer.reverse().join("") + c2;
-          rtlBuffer = [];
+  // node_modules/d3-selection/src/selectorAll.js
+  function empty() {
+    return [];
+  }
+  function selectorAll_default(selector) {
+    return selector == null ? empty : function() {
+      return this.querySelectorAll(selector);
+    };
+  }
+
+  // node_modules/d3-selection/src/selection/selectAll.js
+  function arrayAll(select) {
+    return function() {
+      return array(select.apply(this, arguments));
+    };
+  }
+  function selectAll_default(select) {
+    if (typeof select === "function") select = arrayAll(select);
+    else select = selectorAll_default(select);
+    for (var groups = this._groups, m2 = groups.length, subgroups = [], parents = [], j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group[i3]) {
+          subgroups.push(select.call(node, node.__data__, i3, group));
+          parents.push(node);
         }
       }
     }
-    ret += rtlBuffer.reverse().join("");
-    return ret;
+    return new Selection(subgroups, parents);
   }
 
-  // modules/core/preferences.js
-  var _storage;
-  try {
-    _storage = localStorage;
-  } catch {
+  // node_modules/d3-selection/src/matcher.js
+  function matcher_default(selector) {
+    return function() {
+      return this.matches(selector);
+    };
   }
-  _storage = _storage || /* @__PURE__ */ (() => {
-    let s2 = {};
-    return {
-      getItem: (k2) => s2[k2],
-      setItem: (k2, v2) => s2[k2] = v2,
-      removeItem: (k2) => delete s2[k2]
+  function childMatcher(selector) {
+    return function(node) {
+      return node.matches(selector);
     };
-  })();
-  var _listeners = {};
-  function corePreferences(k2, v2) {
-    try {
-      if (v2 === void 0) return _storage.getItem(k2);
-      else if (v2 === null) _storage.removeItem(k2);
-      else _storage.setItem(k2, v2);
-      if (_listeners[k2]) {
-        _listeners[k2].forEach((handler) => handler(v2));
-      }
-      return true;
-    } catch {
-      if (typeof console !== "undefined") {
-        console.error("localStorage quota exceeded");
-      }
-      return false;
-    }
   }
-  corePreferences.onChange = function(k2, handler) {
-    _listeners[k2] = _listeners[k2] || [];
-    _listeners[k2].push(handler);
-  };
 
-  // modules/core/file_fetcher.js
-  var import_vparse = __toESM(require_vparse());
+  // node_modules/d3-selection/src/selection/selectChild.js
+  var find = Array.prototype.find;
+  function childFind(match) {
+    return function() {
+      return find.call(this.children, match);
+    };
+  }
+  function childFirst() {
+    return this.firstElementChild;
+  }
+  function selectChild_default(match) {
+    return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match)));
+  }
 
-  // config/id.js
-  var presetsCdnUrl = "https://cdn.jsdelivr.net/npm/@openstreetmap/id-tagging-schema@{presets_version}/";
-  var ociCdnUrl = "https://cdn.jsdelivr.net/npm/osm-community-index@{version}/";
-  var wmfSitematrixCdnUrl = "https://cdn.jsdelivr.net/npm/wmf-sitematrix@{version}/";
-  var nsiCdnUrl = "https://cdn.jsdelivr.net/npm/name-suggestion-index@{version}/";
-  var defaultOsmApiConnections = {
-    live: {
-      url: "https://www.openstreetmap.org",
-      apiUrl: "https://api.openstreetmap.org",
-      client_id: "0tmNTmd0Jo1dQp4AUmMBLtGiD9YpMuXzHefitcuVStc"
-    },
-    dev: {
-      url: "https://api06.dev.openstreetmap.org",
-      client_id: "Ee1wWJ6UlpERbF6BfTNOpwn0R8k_06mvMXdDUkeHMgw"
+  // node_modules/d3-selection/src/selection/selectChildren.js
+  var filter = Array.prototype.filter;
+  function children() {
+    return Array.from(this.children);
+  }
+  function childrenFilter(match) {
+    return function() {
+      return filter.call(this.children, match);
+    };
+  }
+  function selectChildren_default(match) {
+    return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match)));
+  }
+
+  // node_modules/d3-selection/src/selection/filter.js
+  function filter_default(match) {
+    if (typeof match !== "function") match = matcher_default(match);
+    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = [], node, i3 = 0; i3 < n3; ++i3) {
+        if ((node = group[i3]) && match.call(node, node.__data__, i3, group)) {
+          subgroup.push(node);
+        }
+      }
     }
-  };
-  var osmApiConnections = [];
-  if (false) {
-    osmApiConnections.push({
-      url: null,
-      apiUrl: null,
-      client_id: null
-    });
-  } else if (false) {
-    osmApiConnections.push(defaultOsmApiConnections[null]);
-  } else {
-    osmApiConnections.push(defaultOsmApiConnections.live);
-    osmApiConnections.push(defaultOsmApiConnections.dev);
+    return new Selection(subgroups, this._parents);
   }
-  var taginfoApiUrl = "https://taginfo.openstreetmap.org/api/4/";
-  var nominatimApiUrl = "https://nominatim.openstreetmap.org/";
-  var showDonationMessage = true;
 
-  // package.json
-  var package_default = {
-    name: "iD",
-    version: "2.30.2",
-    description: "A friendly editor for OpenStreetMap",
-    main: "dist/iD.min.js",
-    repository: "github:openstreetmap/iD",
-    homepage: "https://github.com/openstreetmap/iD",
-    bugs: "https://github.com/openstreetmap/iD/issues",
-    keywords: [
-      "editor",
-      "openstreetmap"
-    ],
-    license: "ISC",
-    scripts: {
-      all: "run-s clean build dist",
-      build: "run-s build:css build:data build:js",
-      "build:css": "node scripts/build_css.js",
-      "build:data": "shx mkdir -p dist/data && node scripts/build_data.js",
-      "build:stats": "node config/esbuild.config.mjs --stats && esbuild-visualizer --metadata dist/esbuild.json --exclude *.png --filename docs/statistics.html && shx rm dist/esbuild.json",
-      "build:js": "node config/esbuild.config.mjs",
-      "build:js:watch": "node config/esbuild.config.mjs --watch",
-      clean: "shx rm -f dist/esbuild.json dist/*.js dist/*.map dist/*.css dist/img/*.svg",
-      dist: "run-p dist:**",
-      "dist:mapillary": "shx mkdir -p dist/mapillary-js && shx cp -R node_modules/mapillary-js/dist/* dist/mapillary-js/",
-      "dist:pannellum": "shx mkdir -p dist/pannellum && shx cp -R node_modules/pannellum/build/* dist/pannellum/",
-      "dist:min": "node config/esbuild.config.min.mjs",
-      "dist:svg:iD": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "iD-%s" --symbol-sprite dist/img/iD-sprite.svg "svg/iD-sprite/**/*.svg"',
-      "dist:svg:community": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "community-%s" --symbol-sprite dist/img/community-sprite.svg node_modules/osm-community-index/dist/img/*.svg',
-      "dist:svg:fa": "svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/fa-sprite.svg svg/fontawesome/*.svg",
-      "dist:svg:maki": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "maki-%s" --symbol-sprite dist/img/maki-sprite.svg node_modules/@mapbox/maki/icons/*.svg',
-      "dist:svg:mapillary:signs": "svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-sprite.svg node_modules/@rapideditor/mapillary_sprite_source/package_signs/*.svg",
-      "dist:svg:mapillary:objects": "svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-object-sprite.svg node_modules/@rapideditor/mapillary_sprite_source/package_objects/*.svg",
-      "dist:svg:roentgen": 'svg-sprite --shape-id-generator "roentgen-%s" --shape-dim-width 16 --shape-dim-height 16 --symbol --symbol-dest . --symbol-sprite dist/img/roentgen-sprite.svg svg/roentgen/*.svg',
-      "dist:svg:temaki": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "temaki-%s" --symbol-sprite dist/img/temaki-sprite.svg node_modules/@rapideditor/temaki/icons/*.svg',
-      imagery: "node scripts/update_imagery.js",
-      lint: "eslint config scripts test/spec modules",
-      "lint:fix": "eslint scripts test/spec modules --fix",
-      start: "run-s start:watch",
-      "start:single-build": "run-p build:js start:server",
-      "start:watch": "run-p build:js:watch start:server",
-      "start:server": "node scripts/server.js",
-      test: "npm-run-all -s lint build test:spec",
-      "test:spec": "karma start config/karma.conf.js",
-      translations: "node scripts/update_locales.js"
-    },
-    dependencies: {
-      "@mapbox/geojson-area": "^0.2.2",
-      "@mapbox/sexagesimal": "1.2.0",
-      "@mapbox/vector-tile": "^2.0.3",
-      "@rapideditor/country-coder": "~5.3.0",
-      "@rapideditor/location-conflation": "~1.4.0",
-      "@tmcw/togeojson": "^5.8.1",
-      "@turf/bbox": "^7.1.0",
-      "@turf/bbox-clip": "^7.1.0",
-      "abortcontroller-polyfill": "^1.7.5",
-      "aes-js": "^3.1.2",
-      "alif-toolkit": "^1.3.0",
-      "core-js-bundle": "^3.38.0",
-      diacritics: "1.3.0",
-      exifr: "^7.1.3",
-      "fast-deep-equal": "~3.1.1",
-      "fast-json-stable-stringify": "2.1.0",
-      "lodash-es": "~4.17.15",
-      marked: "~14.0.0",
-      "node-diff3": "~3.1.0",
-      "osm-auth": "~2.5.0",
-      pannellum: "2.5.6",
-      pbf: "^4.0.1",
-      "polygon-clipping": "~0.15.7",
-      rbush: "4.0.0",
-      "whatwg-fetch": "^3.6.20",
-      "which-polygon": "2.2.1"
+  // node_modules/d3-selection/src/selection/sparse.js
+  function sparse_default(update) {
+    return new Array(update.length);
+  }
+
+  // node_modules/d3-selection/src/selection/enter.js
+  function enter_default() {
+    return new Selection(this._enter || this._groups.map(sparse_default), this._parents);
+  }
+  function EnterNode(parent, datum2) {
+    this.ownerDocument = parent.ownerDocument;
+    this.namespaceURI = parent.namespaceURI;
+    this._next = null;
+    this._parent = parent;
+    this.__data__ = datum2;
+  }
+  EnterNode.prototype = {
+    constructor: EnterNode,
+    appendChild: function(child) {
+      return this._parent.insertBefore(child, this._next);
     },
-    devDependencies: {
-      "@fortawesome/fontawesome-svg-core": "~6.6.0",
-      "@fortawesome/free-brands-svg-icons": "~6.6.0",
-      "@fortawesome/free-regular-svg-icons": "~6.6.0",
-      "@fortawesome/free-solid-svg-icons": "~6.6.0",
-      "@mapbox/maki": "^8.0.1",
-      "@openstreetmap/id-tagging-schema": "^6.8.1",
-      "@rapideditor/mapillary_sprite_source": "^1.8.0",
-      "@rapideditor/temaki": "^5.9.0",
-      "@transifex/api": "^7.1.2",
-      autoprefixer: "^10.4.20",
-      browserslist: "^4.23.3",
-      "browserslist-to-esbuild": "^2.1.1",
-      chai: "^4.5.0",
-      chalk: "^4.1.2",
-      "cldr-core": "^45.0.0",
-      "cldr-localenames-full": "^45.0.0",
-      "concat-files": "^0.1.1",
-      d3: "~7.9.0",
-      dotenv: "^16.4.5",
-      "editor-layer-index": "github:osmlab/editor-layer-index#gh-pages",
-      esbuild: "^0.23.1",
-      "esbuild-visualizer": "^0.6.0",
-      eslint: "^9.9.0",
-      "fetch-mock": "^9.11.0",
-      gaze: "^1.1.3",
-      glob: "^10.4.5",
-      happen: "^0.3.2",
-      "js-yaml": "^4.0.0",
-      "json-stringify-pretty-compact": "^3.0.0",
-      karma: "^6.4.4",
-      "karma-chrome-launcher": "^3.2.0",
-      "karma-coverage": "2.1.1",
-      "karma-mocha": "^2.0.1",
-      "karma-remap-istanbul": "^0.6.0",
-      "mapillary-js": "4.1.2",
-      minimist: "^1.2.8",
-      mocha: "^10.7.3",
-      "name-suggestion-index": "~6.0",
-      "npm-run-all": "^4.0.0",
-      "osm-community-index": "~5.8.0",
-      postcss: "^8.4.41",
-      "postcss-selector-prepend": "^0.5.0",
-      shelljs: "^0.8.0",
-      shx: "^0.3.0",
-      sinon: "^11.1.2",
-      "sinon-chai": "^3.7.0",
-      smash: "0.0",
-      "static-server": "^2.2.1",
-      "svg-sprite": "2.0.4",
-      vparse: "~1.1.0"
+    insertBefore: function(child, next) {
+      return this._parent.insertBefore(child, next);
     },
-    engines: {
-      node: ">=18"
+    querySelector: function(selector) {
+      return this._parent.querySelector(selector);
     },
-    browserslist: [
-      "> 0.3%, last 6 major versions, not dead, Firefox ESR, maintained node versions"
-    ]
+    querySelectorAll: function(selector) {
+      return this._parent.querySelectorAll(selector);
+    }
   };
 
-  // modules/core/file_fetcher.js
-  var _mainFileFetcher = coreFileFetcher();
-  function coreFileFetcher() {
-    const ociVersion = package_default.dependencies["osm-community-index"] || package_default.devDependencies["osm-community-index"];
-    const v2 = (0, import_vparse.default)(ociVersion);
-    const ociVersionMinor = "".concat(v2.major, ".").concat(v2.minor);
-    const presetsVersion = package_default.devDependencies["@openstreetmap/id-tagging-schema"];
-    let _this = {};
-    let _inflight4 = {};
-    let _fileMap = {
-      "address_formats": "data/address_formats.min.json",
-      "imagery": "data/imagery.min.json",
-      "intro_graph": "data/intro_graph.min.json",
-      "keepRight": "data/keepRight.min.json",
-      "languages": "data/languages.min.json",
-      "locales": "locales/index.min.json",
-      "phone_formats": "data/phone_formats.min.json",
-      "qa_data": "data/qa_data.min.json",
-      "shortcuts": "data/shortcuts.min.json",
-      "territory_languages": "data/territory_languages.min.json",
-      "oci_defaults": ociCdnUrl.replace("{version}", ociVersionMinor) + "dist/defaults.min.json",
-      "oci_features": ociCdnUrl.replace("{version}", ociVersionMinor) + "dist/featureCollection.min.json",
-      "oci_resources": ociCdnUrl.replace("{version}", ociVersionMinor) + "dist/resources.min.json",
-      "presets_package": presetsCdnUrl.replace("{presets_version}", presetsVersion) + "package.json",
-      "deprecated": presetsCdnUrl + "dist/deprecated.min.json",
-      "discarded": presetsCdnUrl + "dist/discarded.min.json",
-      "preset_categories": presetsCdnUrl + "dist/preset_categories.min.json",
-      "preset_defaults": presetsCdnUrl + "dist/preset_defaults.min.json",
-      "preset_fields": presetsCdnUrl + "dist/fields.min.json",
-      "preset_presets": presetsCdnUrl + "dist/presets.min.json",
-      "wmf_sitematrix": wmfSitematrixCdnUrl.replace("{version}", "0.1") + "wikipedia.min.json"
+  // node_modules/d3-selection/src/constant.js
+  function constant_default(x2) {
+    return function() {
+      return x2;
     };
-    let _cachedData = {};
-    _this.cache = () => _cachedData;
-    _this.get = (which) => {
-      if (_cachedData[which]) {
-        return Promise.resolve(_cachedData[which]);
+  }
+
+  // node_modules/d3-selection/src/selection/data.js
+  function bindIndex(parent, group, enter, update, exit, data) {
+    var i3 = 0, node, groupLength = group.length, dataLength = data.length;
+    for (; i3 < dataLength; ++i3) {
+      if (node = group[i3]) {
+        node.__data__ = data[i3];
+        update[i3] = node;
+      } else {
+        enter[i3] = new EnterNode(parent, data[i3]);
       }
-      const file = _fileMap[which];
-      const url = file && _this.asset(file);
-      if (!url) {
-        return Promise.reject('Unknown data file for "'.concat(which, '"'));
+    }
+    for (; i3 < groupLength; ++i3) {
+      if (node = group[i3]) {
+        exit[i3] = node;
       }
-      if (url.includes("{presets_version}")) {
-        return _this.get("presets_package").then((result) => {
-          const presetsVersion2 = result.version;
-          return getUrl(url.replace("{presets_version}", presetsVersion2), which);
-        });
-      } else {
-        return getUrl(url, which);
+    }
+  }
+  function bindKey(parent, group, enter, update, exit, data, key) {
+    var i3, node, nodeByKeyValue = /* @__PURE__ */ new Map(), groupLength = group.length, dataLength = data.length, keyValues = new Array(groupLength), keyValue;
+    for (i3 = 0; i3 < groupLength; ++i3) {
+      if (node = group[i3]) {
+        keyValues[i3] = keyValue = key.call(node, node.__data__, i3, group) + "";
+        if (nodeByKeyValue.has(keyValue)) {
+          exit[i3] = node;
+        } else {
+          nodeByKeyValue.set(keyValue, node);
+        }
       }
-    };
-    function getUrl(url, which) {
-      let prom = _inflight4[url];
-      if (!prom) {
-        _inflight4[url] = prom = fetch(url).then((response) => {
-          if (!response.ok || !response.json) {
-            throw new Error(response.status + " " + response.statusText);
-          }
-          if (response.status === 204 || response.status === 205) return;
-          return response.json();
-        }).then((result) => {
-          delete _inflight4[url];
-          if (!result) {
-            throw new Error('No data loaded for "'.concat(which, '"'));
-          }
-          _cachedData[which] = result;
-          return result;
-        }).catch((err) => {
-          delete _inflight4[url];
-          throw err;
-        });
+    }
+    for (i3 = 0; i3 < dataLength; ++i3) {
+      keyValue = key.call(parent, data[i3], i3, data) + "";
+      if (node = nodeByKeyValue.get(keyValue)) {
+        update[i3] = node;
+        node.__data__ = data[i3];
+        nodeByKeyValue.delete(keyValue);
+      } else {
+        enter[i3] = new EnterNode(parent, data[i3]);
       }
-      return prom;
     }
-    _this.fileMap = function(val) {
-      if (!arguments.length) return _fileMap;
-      _fileMap = val;
-      return _this;
-    };
-    let _assetPath = "";
-    _this.assetPath = function(val) {
-      if (!arguments.length) return _assetPath;
-      _assetPath = val;
-      return _this;
-    };
-    let _assetMap = {};
-    _this.assetMap = function(val) {
-      if (!arguments.length) return _assetMap;
-      _assetMap = val;
-      return _this;
-    };
-    _this.asset = (val) => {
-      if (/^http(s)?:\/\//i.test(val)) return val;
-      const filename = _assetPath + val;
-      return _assetMap[filename] || filename;
-    };
-    return _this;
+    for (i3 = 0; i3 < groupLength; ++i3) {
+      if ((node = group[i3]) && nodeByKeyValue.get(keyValues[i3]) === node) {
+        exit[i3] = node;
+      }
+    }
+  }
+  function datum(node) {
+    return node.__data__;
+  }
+  function data_default(value, key) {
+    if (!arguments.length) return Array.from(this, datum);
+    var bind = key ? bindKey : bindIndex, parents = this._parents, groups = this._groups;
+    if (typeof value !== "function") value = constant_default(value);
+    for (var m2 = groups.length, update = new Array(m2), enter = new Array(m2), exit = new Array(m2), j2 = 0; j2 < m2; ++j2) {
+      var parent = parents[j2], group = groups[j2], groupLength = group.length, data = arraylike(value.call(parent, parent && parent.__data__, j2, parents)), dataLength = data.length, enterGroup = enter[j2] = new Array(dataLength), updateGroup = update[j2] = new Array(dataLength), exitGroup = exit[j2] = new Array(groupLength);
+      bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+      for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+        if (previous = enterGroup[i0]) {
+          if (i0 >= i1) i1 = i0 + 1;
+          while (!(next = updateGroup[i1]) && ++i1 < dataLength) ;
+          previous._next = next || null;
+        }
+      }
+    }
+    update = new Selection(update, parents);
+    update._enter = enter;
+    update._exit = exit;
+    return update;
+  }
+  function arraylike(data) {
+    return typeof data === "object" && "length" in data ? data : Array.from(data);
   }
 
-  // node_modules/@rapideditor/country-coder/dist/country-coder.mjs
-  var import_which_polygon = __toESM(require_which_polygon(), 1);
-  var borders_default = { type: "FeatureCollection", features: [
-    { type: "Feature", properties: { wikidata: "Q21", nameEn: "England", aliases: ["GB-ENG"], country: "GB", groups: ["Q23666", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-6.03913, 51.13217], [-7.74976, 48.64773], [1.17405, 50.74239], [2.18458, 51.52087], [2.56575, 51.85301], [0.792, 57.56437], [-2.30613, 55.62698], [-2.17058, 55.45916], [-2.6095, 55.28488], [-2.63532, 55.19452], [-3.02906, 55.04606], [-3.09361, 54.94924], [-3.38407, 54.94278], [-4.1819, 54.57861], [-3.5082, 53.54318], [-3.08228, 53.25526], [-3.03675, 53.25092], [-2.92329, 53.19383], [-2.92022, 53.17685], [-2.98598, 53.15589], [-2.90649, 53.10964], [-2.87469, 53.12337], [-2.89131, 53.09374], [-2.83133, 52.99184], [-2.7251, 52.98389], [-2.72221, 52.92969], [-2.80549, 52.89428], [-2.85897, 52.94487], [-2.92401, 52.93836], [-2.97243, 52.9651], [-3.13576, 52.895], [-3.15744, 52.84947], [-3.16105, 52.79599], [-3.08734, 52.77504], [-3.01001, 52.76636], [-2.95581, 52.71794], [-3.01724, 52.72083], [-3.04398, 52.65435], [-3.13648, 52.58208], [-3.12926, 52.5286], [-3.09746, 52.53077], [-3.08662, 52.54811], [-3.00929, 52.57774], [-2.99701, 52.551], [-3.03603, 52.49969], [-3.13359, 52.49174], [-3.22971, 52.45344], [-3.22754, 52.42526], [-3.04687, 52.34504], [-2.95364, 52.3501], [-2.99701, 52.323], [-3.00785, 52.2753], [-3.09289, 52.20546], [-3.12638, 52.08114], [-2.97111, 51.90456], [-2.8818, 51.93196], [-2.78742, 51.88833], [-2.74277, 51.84367], [-2.66234, 51.83555], [-2.66336, 51.59504], [-3.20563, 51.31615], [-6.03913, 51.13217]]]] } },
-    { type: "Feature", properties: { wikidata: "Q22", nameEn: "Scotland", aliases: ["GB-SCT"], country: "GB", groups: ["Q23666", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[0.792, 57.56437], [-0.3751, 61.32236], [-14.78497, 57.60709], [-6.82333, 55.83103], [-4.69044, 54.3629], [-3.38407, 54.94278], [-3.09361, 54.94924], [-3.02906, 55.04606], [-2.63532, 55.19452], [-2.6095, 55.28488], [-2.17058, 55.45916], [-2.30613, 55.62698], [0.792, 57.56437]]]] } },
-    { type: "Feature", properties: { wikidata: "Q25", nameEn: "Wales", aliases: ["GB-WLS"], country: "GB", groups: ["Q23666", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-3.5082, 53.54318], [-5.37267, 53.63269], [-6.03913, 51.13217], [-3.20563, 51.31615], [-2.66336, 51.59504], [-2.66234, 51.83555], [-2.74277, 51.84367], [-2.78742, 51.88833], [-2.8818, 51.93196], [-2.97111, 51.90456], [-3.12638, 52.08114], [-3.09289, 52.20546], [-3.00785, 52.2753], [-2.99701, 52.323], [-2.95364, 52.3501], [-3.04687, 52.34504], [-3.22754, 52.42526], [-3.22971, 52.45344], [-3.13359, 52.49174], [-3.03603, 52.49969], [-2.99701, 52.551], [-3.00929, 52.57774], [-3.08662, 52.54811], [-3.09746, 52.53077], [-3.12926, 52.5286], [-3.13648, 52.58208], [-3.04398, 52.65435], [-3.01724, 52.72083], [-2.95581, 52.71794], [-3.01001, 52.76636], [-3.08734, 52.77504], [-3.16105, 52.79599], [-3.15744, 52.84947], [-3.13576, 52.895], [-2.97243, 52.9651], [-2.92401, 52.93836], [-2.85897, 52.94487], [-2.80549, 52.89428], [-2.72221, 52.92969], [-2.7251, 52.98389], [-2.83133, 52.99184], [-2.89131, 53.09374], [-2.87469, 53.12337], [-2.90649, 53.10964], [-2.98598, 53.15589], [-2.92022, 53.17685], [-2.92329, 53.19383], [-3.03675, 53.25092], [-3.08228, 53.25526], [-3.5082, 53.54318]]]] } },
-    { type: "Feature", properties: { wikidata: "Q26", nameEn: "Northern Ireland", aliases: ["GB-NIR"], country: "GB", groups: ["Q22890", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-6.34755, 55.49206], [-7.2471, 55.06933], [-7.34464, 55.04688], [-7.4033, 55.00391], [-7.40004, 54.94498], [-7.44404, 54.9403], [-7.4473, 54.87003], [-7.47626, 54.83084], [-7.54508, 54.79401], [-7.54671, 54.74606], [-7.64449, 54.75265], [-7.75041, 54.7103], [-7.83352, 54.73854], [-7.93293, 54.66603], [-7.70315, 54.62077], [-7.8596, 54.53671], [-7.99812, 54.54427], [-8.04538, 54.48941], [-8.179, 54.46763], [-8.04555, 54.36292], [-7.87101, 54.29299], [-7.8596, 54.21779], [-7.81397, 54.20159], [-7.69501, 54.20731], [-7.55812, 54.12239], [-7.4799, 54.12239], [-7.44567, 54.1539], [-7.32834, 54.11475], [-7.30553, 54.11869], [-7.34005, 54.14698], [-7.29157, 54.17191], [-7.28017, 54.16714], [-7.29687, 54.1354], [-7.29493, 54.12013], [-7.26316, 54.13863], [-7.25012, 54.20063], [-7.14908, 54.22732], [-7.19145, 54.31296], [-7.02034, 54.4212], [-6.87775, 54.34682], [-6.85179, 54.29176], [-6.81583, 54.22791], [-6.74575, 54.18788], [-6.70175, 54.20218], [-6.6382, 54.17071], [-6.66264, 54.0666], [-6.62842, 54.03503], [-6.47849, 54.06947], [-6.36605, 54.07234], [-6.36279, 54.11248], [-6.32694, 54.09337], [-6.29003, 54.11278], [-6.26218, 54.09785], [-5.83481, 53.87749], [-4.69044, 54.3629], [-6.34755, 55.49206]]]] } },
-    { type: "Feature", properties: { wikidata: "Q35", nameEn: "Denmark", country: "DK", groups: ["EU", "154", "150", "UN"], callingCodes: ["45"] }, geometry: { type: "MultiPolygon", coordinates: [[[[12.16597, 56.60205], [10.40861, 58.38489], [7.28637, 57.35913], [8.02459, 55.09613], [8.45719, 55.06747], [8.55769, 54.91837], [8.63979, 54.91069], [8.76387, 54.8948], [8.81178, 54.90518], [8.92795, 54.90452], [9.04629, 54.87249], [9.14275, 54.87421], [9.20571, 54.85841], [9.24631, 54.84726], [9.23445, 54.83432], [9.2474, 54.8112], [9.32771, 54.80602], [9.33849, 54.80233], [9.36496, 54.81749], [9.38532, 54.83968], [9.41213, 54.84254], [9.43155, 54.82586], [9.4659, 54.83131], [9.58937, 54.88785], [9.62734, 54.88057], [9.61187, 54.85548], [9.73563, 54.8247], [9.89314, 54.84171], [10.16755, 54.73883], [10.31111, 54.65968], [11.00303, 54.63689], [11.90309, 54.38543], [12.85844, 54.82438], [13.93395, 54.84044], [15.36991, 54.73263], [15.79951, 55.54655], [14.89259, 55.5623], [14.28399, 55.1553], [12.84405, 55.13257], [12.60345, 55.42675], [12.88472, 55.63369], [12.6372, 55.91371], [12.65312, 56.04345], [12.07466, 56.29488], [12.16597, 56.60205]]]] } },
-    { type: "Feature", properties: { wikidata: "Q55", nameEn: "Netherlands", country: "NL", groups: ["EU", "155", "150", "UN"], callingCodes: ["31"] }, geometry: { type: "MultiPolygon", coordinates: [[[[5.45168, 54.20039], [2.56575, 51.85301], [3.36263, 51.37112], [3.38696, 51.33436], [3.35847, 51.31572], [3.38289, 51.27331], [3.41704, 51.25933], [3.43488, 51.24135], [3.52698, 51.2458], [3.51502, 51.28697], [3.58939, 51.30064], [3.78999, 51.25766], [3.78783, 51.2151], [3.90125, 51.20371], [3.97889, 51.22537], [4.01957, 51.24504], [4.05165, 51.24171], [4.16721, 51.29348], [4.24024, 51.35371], [4.21923, 51.37443], [4.33265, 51.37687], [4.34086, 51.35738], [4.39292, 51.35547], [4.43777, 51.36989], [4.38064, 51.41965], [4.39747, 51.43316], [4.38122, 51.44905], [4.47736, 51.4778], [4.5388, 51.48184], [4.54675, 51.47265], [4.52846, 51.45002], [4.53521, 51.4243], [4.57489, 51.4324], [4.65442, 51.42352], [4.72935, 51.48424], [4.74578, 51.48937], [4.77321, 51.50529], [4.78803, 51.50284], [4.84139, 51.4799], [4.82409, 51.44736], [4.82946, 51.4213], [4.78314, 51.43319], [4.76577, 51.43046], [4.77229, 51.41337], [4.78941, 51.41102], [4.84988, 51.41502], [4.90016, 51.41404], [4.92152, 51.39487], [5.00393, 51.44406], [5.0106, 51.47167], [5.03281, 51.48679], [5.04774, 51.47022], [5.07891, 51.4715], [5.10456, 51.43163], [5.07102, 51.39469], [5.13105, 51.34791], [5.13377, 51.31592], [5.16222, 51.31035], [5.2002, 51.32243], [5.24244, 51.30495], [5.22542, 51.26888], [5.23814, 51.26064], [5.26461, 51.26693], [5.29716, 51.26104], [5.33886, 51.26314], [5.347, 51.27502], [5.41672, 51.26248], [5.4407, 51.28169], [5.46519, 51.2849], [5.48476, 51.30053], [5.515, 51.29462], [5.5569, 51.26544], [5.5603, 51.22249], [5.65145, 51.19788], [5.65528, 51.18736], [5.70344, 51.1829], [5.74617, 51.18928], [5.77735, 51.17845], [5.77697, 51.1522], [5.82564, 51.16753], [5.85508, 51.14445], [5.80798, 51.11661], [5.8109, 51.10861], [5.83226, 51.10585], [5.82921, 51.09328], [5.79903, 51.09371], [5.79835, 51.05834], [5.77258, 51.06196], [5.75961, 51.03113], [5.77688, 51.02483], [5.76242, 50.99703], [5.71864, 50.96092], [5.72875, 50.95428], [5.74752, 50.96202], [5.75927, 50.95601], [5.74644, 50.94723], [5.72545, 50.92312], [5.72644, 50.91167], [5.71626, 50.90796], [5.69858, 50.91046], [5.67886, 50.88142], [5.64504, 50.87107], [5.64009, 50.84742], [5.65259, 50.82309], [5.70118, 50.80764], [5.68995, 50.79641], [5.70107, 50.7827], [5.68091, 50.75804], [5.69469, 50.75529], [5.72216, 50.76398], [5.73904, 50.75674], [5.74356, 50.7691], [5.76533, 50.78159], [5.77513, 50.78308], [5.80673, 50.7558], [5.84548, 50.76542], [5.84888, 50.75448], [5.88734, 50.77092], [5.89129, 50.75125], [5.89132, 50.75124], [5.95942, 50.7622], [5.97545, 50.75441], [6.01976, 50.75398], [6.02624, 50.77453], [5.97497, 50.79992], [5.98404, 50.80988], [6.00462, 50.80065], [6.02328, 50.81694], [6.01921, 50.84435], [6.05623, 50.8572], [6.05702, 50.85179], [6.07431, 50.84674], [6.07693, 50.86025], [6.08805, 50.87223], [6.07486, 50.89307], [6.09297, 50.92066], [6.01615, 50.93367], [6.02697, 50.98303], [5.95282, 50.98728], [5.90296, 50.97356], [5.90493, 51.00198], [5.87849, 51.01969], [5.86735, 51.05182], [5.9134, 51.06736], [5.9541, 51.03496], [5.98292, 51.07469], [6.16706, 51.15677], [6.17384, 51.19589], [6.07889, 51.17038], [6.07889, 51.24432], [6.16977, 51.33169], [6.22674, 51.36135], [6.22641, 51.39948], [6.20654, 51.40049], [6.21724, 51.48568], [6.18017, 51.54096], [6.09055, 51.60564], [6.11759, 51.65609], [6.02767, 51.6742], [6.04091, 51.71821], [5.95003, 51.7493], [5.98665, 51.76944], [5.94568, 51.82786], [5.99848, 51.83195], [6.06705, 51.86136], [6.10337, 51.84829], [6.16902, 51.84094], [6.11551, 51.89769], [6.15349, 51.90439], [6.21443, 51.86801], [6.29872, 51.86801], [6.30593, 51.84998], [6.40704, 51.82771], [6.38815, 51.87257], [6.47179, 51.85395], [6.50231, 51.86313], [6.58556, 51.89386], [6.68386, 51.91861], [6.72319, 51.89518], [6.82357, 51.96711], [6.83035, 51.9905], [6.68128, 52.05052], [6.76117, 52.11895], [6.83984, 52.11728], [6.97189, 52.20329], [6.9897, 52.2271], [7.03729, 52.22695], [7.06365, 52.23789], [7.02703, 52.27941], [7.07044, 52.37805], [7.03417, 52.40237], [6.99041, 52.47235], [6.94293, 52.43597], [6.69507, 52.488], [6.71641, 52.62905], [6.77307, 52.65375], [7.04557, 52.63318], [7.07253, 52.81083], [7.21694, 53.00742], [7.17898, 53.13817], [7.22681, 53.18165], [7.21679, 53.20058], [7.19052, 53.31866], [7.00198, 53.32672], [6.91025, 53.44221], [5.45168, 54.20039]], [[4.93295, 51.44945], [4.95244, 51.45207], [4.9524, 51.45014], [4.93909, 51.44632], [4.93295, 51.44945]], [[4.91493, 51.4353], [4.91935, 51.43634], [4.92227, 51.44252], [4.91811, 51.44621], [4.92287, 51.44741], [4.92811, 51.4437], [4.92566, 51.44273], [4.92815, 51.43856], [4.92879, 51.44161], [4.93544, 51.44634], [4.94025, 51.44193], [4.93416, 51.44185], [4.93471, 51.43861], [4.94265, 51.44003], [4.93986, 51.43064], [4.92952, 51.42984], [4.92652, 51.43329], [4.91493, 51.4353]]]] } },
-    { type: "Feature", properties: { wikidata: "Q782", nameEn: "Hawaii", aliases: ["US-HI"], country: "US", groups: ["Q35657", "061", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-177.8563, 29.18961], [-179.49839, 27.86265], [-151.6784, 9.55515], [-154.05867, 45.51124], [-177.5224, 27.7635], [-177.8563, 29.18961]]]] } },
-    { type: "Feature", properties: { wikidata: "Q797", nameEn: "Alaska", aliases: ["US-AK"], country: "US", groups: ["Q35657", "021", "003", "019", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169.34848, 52.47228], [180, 51.0171], [179.84401, 55.10087], [169.34848, 52.47228]]], [[[-168.95635, 65.98512], [-169.03888, 65.48473], [-172.76104, 63.77445], [-179.55295, 57.62081], [-179.55295, 50.81807], [-133.92876, 54.62289], [-130.61931, 54.70835], [-130.64499, 54.76912], [-130.44184, 54.85377], [-130.27203, 54.97174], [-130.18765, 55.07744], [-130.08035, 55.21556], [-129.97513, 55.28029], [-130.15373, 55.74895], [-130.00857, 55.91344], [-130.00093, 56.00325], [-130.10173, 56.12178], [-130.33965, 56.10849], [-130.77769, 56.36185], [-131.8271, 56.62247], [-133.38523, 58.42773], [-133.84645, 58.73543], [-134.27175, 58.8634], [-134.48059, 59.13231], [-134.55699, 59.1297], [-134.7047, 59.2458], [-135.00267, 59.28745], [-135.03069, 59.56208], [-135.48007, 59.79937], [-136.31566, 59.59083], [-136.22381, 59.55526], [-136.33727, 59.44466], [-136.47323, 59.46617], [-136.52365, 59.16752], [-136.82619, 59.16198], [-137.4925, 58.89415], [-137.60623, 59.24465], [-138.62145, 59.76431], [-138.71149, 59.90728], [-139.05365, 59.99655], [-139.20603, 60.08896], [-139.05831, 60.35205], [-139.68991, 60.33693], [-139.98024, 60.18027], [-140.45648, 60.30919], [-140.5227, 60.22077], [-141.00116, 60.30648], [-140.97446, 84.39275], [-168.25765, 71.99091], [-168.95635, 65.98512]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3492", nameEn: "Sumatra", aliases: ["ID-SM"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[109.82788, 2.86812], [110.90339, 7.52694], [105.01437, 3.24936], [104.56723, 1.44271], [104.34728, 1.33529], [104.12282, 1.27714], [104.03085, 1.26954], [103.74084, 1.12902], [103.66049, 1.18825], [103.56591, 1.19719], [103.03657, 1.30383], [96.11174, 6.69841], [74.28481, -3.17525], [102.92489, -8.17146], [106.32259, -5.50116], [106.38511, -5.16715], [109.17017, -4.07401], [109.3962, -2.07276], [108.50935, -2.01066], [107.94791, 1.06924], [109.82788, 2.86812]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3757", nameEn: "Java", aliases: ["ID-JW"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[109.17017, -4.07401], [106.38511, -5.16715], [106.32259, -5.50116], [102.92489, -8.17146], [116.22542, -10.49172], [114.39575, -8.2889], [114.42235, -8.09762], [114.92859, -7.49253], [116.33992, -7.56171], [116.58433, -5.30385], [109.17017, -4.07401]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3795", nameEn: "Kalimantan", aliases: ["ID-KA"], country: "ID", groups: ["Q36117", "035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[120.02464, 2.83703], [118.06469, 4.16638], [117.67641, 4.16535], [117.47313, 4.18857], [117.25801, 4.35108], [115.90217, 4.37708], [115.58276, 3.93499], [115.53713, 3.14776], [115.11343, 2.82879], [115.1721, 2.49671], [114.80706, 2.21665], [114.80706, 1.92351], [114.57892, 1.5], [114.03788, 1.44787], [113.64677, 1.23933], [113.01448, 1.42832], [113.021, 1.57819], [112.48648, 1.56516], [112.2127, 1.44135], [112.15679, 1.17004], [111.94553, 1.12016], [111.82846, 0.99349], [111.55434, 0.97864], [111.22979, 1.08326], [110.62374, 0.873], [110.49182, 0.88088], [110.35354, 0.98869], [109.66397, 1.60425], [109.66397, 1.79972], [109.57923, 1.80624], [109.53794, 1.91771], [109.62558, 1.99182], [109.82788, 2.86812], [107.94791, 1.06924], [108.50935, -2.01066], [109.3962, -2.07276], [109.17017, -4.07401], [116.58433, -5.30385], [120.02464, 2.83703]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3803", nameEn: "Lesser Sunda Islands", aliases: ["ID-NU"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[116.96967, -8.01483], [114.92859, -7.49253], [114.42235, -8.09762], [114.39575, -8.2889], [116.22542, -10.49172], [122.14954, -11.52517], [125.68138, -9.85176], [125.09025, -9.46406], [124.97892, -9.19281], [125.04044, -9.17093], [125.09434, -9.19669], [125.18907, -9.16434], [125.18632, -9.03142], [125.11764, -8.96359], [124.97742, -9.08128], [124.94011, -8.85617], [124.46701, -9.13002], [124.45971, -9.30263], [124.38554, -9.3582], [124.35258, -9.43002], [124.3535, -9.48493], [124.28115, -9.50453], [124.28115, -9.42189], [124.21247, -9.36904], [124.14517, -9.42324], [124.10539, -9.41206], [124.04286, -9.34243], [124.04628, -9.22671], [124.33472, -9.11416], [124.92337, -8.75859], [125.87688, -7.49892], [116.96967, -8.01483]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3812", nameEn: "Sulawesi", aliases: ["ID-SL"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[128.34321, 3.90322], [126.69413, 6.02692], [119.56457, 0.90759], [116.58433, -5.30385], [116.33992, -7.56171], [116.96967, -8.01483], [125.87688, -7.49892], [123.78965, -0.86805], [128.34321, 3.90322]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3827", nameEn: "Maluku Islands", aliases: ["ID-ML"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[129.63187, 2.21409], [128.34321, 3.90322], [123.78965, -0.86805], [125.87688, -7.49892], [125.58506, -7.95311], [125.87691, -8.31789], [127.42116, -8.22471], [127.55165, -9.05052], [135.49042, -9.2276], [135.35517, -5.01442], [132.8312, -4.70282], [130.8468, -2.61103], [128.40647, -2.30349], [129.71519, -0.24692], [129.63187, 2.21409]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3845", nameEn: "Western New Guinea", aliases: ["ID-PP"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[135.49042, -9.2276], [141.01842, -9.35091], [141.01763, -6.90181], [140.90448, -6.85033], [140.85295, -6.72996], [140.99813, -6.3233], [141.02352, 0.08993], [129.63187, 2.21409], [129.71519, -0.24692], [128.40647, -2.30349], [130.8468, -2.61103], [132.8312, -4.70282], [135.35517, -5.01442], [135.49042, -9.2276]]]] } },
-    { type: "Feature", properties: { wikidata: "Q5765", nameEn: "Balearic Islands", aliases: ["ES-IB"], country: "ES", groups: ["EU", "039", "150", "UN"], callingCodes: ["34 971"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.27707, 35.35051], [5.10072, 39.89531], [3.75438, 42.33445], [-2.27707, 35.35051]]]] } },
-    { type: "Feature", properties: { wikidata: "Q5823", nameEn: "Ceuta", aliases: ["ES-CE"], country: "ES", groups: ["EA", "EU", "015", "002", "UN"], level: "subterritory", callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-5.38491, 35.92591], [-5.37338, 35.88417], [-5.35844, 35.87375], [-5.34379, 35.8711], [-5.21179, 35.90091], [-5.38491, 35.92591]]]] } },
-    { type: "Feature", properties: { wikidata: "Q5831", nameEn: "Melilla", aliases: ["ES-ML"], country: "ES", groups: ["EA", "EU", "015", "002", "UN"], level: "subterritory", callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.91909, 35.33927], [-2.96038, 35.31609], [-2.96648, 35.30475], [-2.96978, 35.29459], [-2.97035, 35.28852], [-2.96507, 35.28801], [-2.96826, 35.28296], [-2.96516, 35.27967], [-2.95431, 35.2728], [-2.95065, 35.26576], [-2.93893, 35.26737], [-2.92272, 35.27509], [-2.91909, 35.33927]]]] } },
-    { type: "Feature", properties: { wikidata: "Q7835", nameEn: "Crimea", country: "RU", groups: ["151", "150", "UN"], level: "subterritory", callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.5, 44], [36.4883, 45.0488], [36.475, 45.2411], [36.5049, 45.3136], [36.6545, 45.3417], [36.6645, 45.4514], [35.0498, 45.7683], [34.9601, 45.7563], [34.7991, 45.8101], [34.8015, 45.9005], [34.7548, 45.907], [34.6668, 45.9714], [34.6086, 45.9935], [34.5589, 45.9935], [34.5201, 45.951], [34.4873, 45.9427], [34.4415, 45.9599], [34.4122, 46.0025], [34.3391, 46.0611], [34.2511, 46.0532], [34.181, 46.068], [34.1293, 46.1049], [34.0731, 46.1177], [34.0527, 46.1084], [33.9155, 46.1594], [33.8523, 46.1986], [33.7972, 46.2048], [33.7405, 46.1855], [33.646, 46.2303], [33.6152, 46.2261], [33.6385, 46.1415], [33.6147, 46.1356], [33.5732, 46.1032], [33.5909, 46.0601], [33.5597, 46.0307], [31.5, 45.5], [33.5, 44]]]] } },
-    { type: "Feature", properties: { wikidata: "Q12837", nameEn: "Iberia", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q14056", nameEn: "Jan Mayen", aliases: ["NO-22"], country: "NO", groups: ["SJ", "154", "150", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-9.18243, 72.23144], [-10.71459, 70.09565], [-5.93364, 70.76368], [-9.18243, 72.23144]]]] } },
-    { type: "Feature", properties: { wikidata: "Q19188", nameEn: "Mainland China", country: "CN", groups: ["030", "142", "UN"], callingCodes: ["86"] }, geometry: { type: "MultiPolygon", coordinates: [[[[125.6131, 53.07229], [125.17522, 53.20225], [124.46078, 53.21881], [123.86158, 53.49391], [123.26989, 53.54843], [122.85966, 53.47395], [122.35063, 53.49565], [121.39213, 53.31888], [120.85633, 53.28499], [120.0451, 52.7359], [120.04049, 52.58773], [120.46454, 52.63811], [120.71673, 52.54099], [120.61346, 52.32447], [120.77337, 52.20805], [120.65907, 51.93544], [120.10963, 51.671], [119.13553, 50.37412], [119.38598, 50.35162], [119.27996, 50.13348], [119.11003, 50.00276], [118.61623, 49.93809], [117.82343, 49.52696], [117.48208, 49.62324], [117.27597, 49.62544], [116.71193, 49.83813], [116.03781, 48.87014], [116.06565, 48.81716], [115.78876, 48.51781], [115.811, 48.25699], [115.52082, 48.15367], [115.57128, 47.91988], [115.94296, 47.67741], [116.21879, 47.88505], [116.4465, 47.83662], [116.67405, 47.89039], [116.9723, 47.87285], [117.37875, 47.63627], [117.50181, 47.77216], [117.80196, 48.01661], [118.03676, 48.00982], [118.11009, 48.04], [118.22677, 48.03853], [118.29654, 48.00246], [118.55766, 47.99277], [118.7564, 47.76947], [119.12343, 47.66458], [119.13995, 47.53997], [119.35892, 47.48104], [119.31964, 47.42617], [119.54918, 47.29505], [119.56019, 47.24874], [119.62403, 47.24575], [119.71209, 47.19192], [119.85518, 46.92196], [119.91242, 46.90091], [119.89261, 46.66423], [119.80455, 46.67631], [119.77373, 46.62947], [119.68127, 46.59015], [119.65265, 46.62342], [119.42827, 46.63783], [119.32827, 46.61433], [119.24978, 46.64761], [119.10448, 46.65516], [119.00541, 46.74273], [118.92616, 46.72765], [118.89974, 46.77139], [118.8337, 46.77742], [118.78747, 46.68689], [118.30534, 46.73519], [117.69554, 46.50991], [117.60748, 46.59771], [117.41782, 46.57862], [117.36609, 46.36335], [116.83166, 46.38637], [116.75551, 46.33083], [116.58612, 46.30211], [116.26678, 45.96479], [116.24012, 45.8778], [116.27366, 45.78637], [116.16989, 45.68603], [115.60329, 45.44717], [114.94546, 45.37377], [114.74612, 45.43585], [114.54801, 45.38337], [114.5166, 45.27189], [113.70918, 44.72891], [112.74662, 44.86297], [112.4164, 45.06858], [111.98695, 45.09074], [111.76275, 44.98032], [111.40498, 44.3461], [111.96289, 43.81596], [111.93776, 43.68709], [111.79758, 43.6637], [111.59087, 43.51207], [111.0149, 43.3289], [110.4327, 42.78293], [110.08401, 42.6411], [109.89402, 42.63111], [109.452, 42.44842], [109.00679, 42.45302], [108.84489, 42.40246], [107.57258, 42.40898], [107.49681, 42.46221], [107.29755, 42.41395], [107.24774, 42.36107], [106.76517, 42.28741], [105.0123, 41.63188], [104.51667, 41.66113], [104.52258, 41.8706], [103.92804, 41.78246], [102.72403, 42.14675], [102.07645, 42.22519], [101.80515, 42.50074], [100.84979, 42.67087], [100.33297, 42.68231], [99.50671, 42.56535], [97.1777, 42.7964], [96.37926, 42.72055], [96.35658, 42.90363], [95.89543, 43.2528], [95.52594, 43.99353], [95.32891, 44.02407], [95.39772, 44.2805], [95.01191, 44.25274], [94.71959, 44.35284], [94.10003, 44.71016], [93.51161, 44.95964], [91.64048, 45.07408], [90.89169, 45.19667], [90.65114, 45.49314], [90.70907, 45.73437], [91.03026, 46.04194], [90.99672, 46.14207], [90.89639, 46.30711], [91.07696, 46.57315], [91.0147, 46.58171], [91.03649, 46.72916], [90.84035, 46.99525], [90.76108, 46.99399], [90.48542, 47.30438], [90.48854, 47.41826], [90.33598, 47.68303], [90.10871, 47.7375], [90.06512, 47.88177], [89.76624, 47.82745], [89.55453, 48.0423], [89.0711, 47.98528], [88.93186, 48.10263], [88.8011, 48.11302], [88.58316, 48.21893], [88.58939, 48.34531], [87.96361, 48.58478], [88.0788, 48.71436], [87.73822, 48.89582], [87.88171, 48.95853], [87.81333, 49.17354], [87.48983, 49.13794], [87.478, 49.07403], [87.28386, 49.11626], [86.87238, 49.12432], [86.73568, 48.99918], [86.75343, 48.70331], [86.38069, 48.46064], [85.73581, 48.3939], [85.5169, 48.05493], [85.61067, 47.49753], [85.69696, 47.2898], [85.54294, 47.06171], [85.22443, 47.04816], [84.93995, 46.87399], [84.73077, 47.01394], [83.92184, 46.98912], [83.04622, 47.19053], [82.21792, 45.56619], [82.58474, 45.40027], [82.51374, 45.1755], [81.73278, 45.3504], [80.11169, 45.03352], [79.8987, 44.89957], [80.38384, 44.63073], [80.40229, 44.23319], [80.40031, 44.10986], [80.75156, 43.44948], [80.69718, 43.32589], [80.77771, 43.30065], [80.78817, 43.14235], [80.62913, 43.141], [80.3735, 43.01557], [80.58999, 42.9011], [80.38169, 42.83142], [80.26886, 42.8366], [80.16892, 42.61137], [80.26841, 42.23797], [80.17807, 42.21166], [80.17842, 42.03211], [79.92977, 42.04113], [78.3732, 41.39603], [78.15757, 41.38565], [78.12873, 41.23091], [77.81287, 41.14307], [77.76206, 41.01574], [77.52723, 41.00227], [77.3693, 41.0375], [77.28004, 41.0033], [76.99302, 41.0696], [76.75681, 40.95354], [76.5261, 40.46114], [76.33659, 40.3482], [75.96168, 40.38064], [75.91361, 40.2948], [75.69663, 40.28642], [75.5854, 40.66874], [75.22834, 40.45382], [75.08243, 40.43945], [74.82013, 40.52197], [74.78168, 40.44886], [74.85996, 40.32857], [74.69875, 40.34668], [74.35063, 40.09742], [74.25533, 40.13191], [73.97049, 40.04378], [73.83006, 39.76136], [73.9051, 39.75073], [73.92354, 39.69565], [73.94683, 39.60733], [73.87018, 39.47879], [73.59831, 39.46425], [73.59241, 39.40843], [73.5004, 39.38402], [73.55396, 39.3543], [73.54572, 39.27567], [73.60638, 39.24534], [73.75823, 39.023], [73.81728, 39.04007], [73.82964, 38.91517], [73.7445, 38.93867], [73.7033, 38.84782], [73.80656, 38.66449], [73.79806, 38.61106], [73.97933, 38.52945], [74.17022, 38.65504], [74.51217, 38.47034], [74.69619, 38.42947], [74.69894, 38.22155], [74.80331, 38.19889], [74.82665, 38.07359], [74.9063, 38.03033], [74.92416, 37.83428], [75.00935, 37.77486], [74.8912, 37.67576], [74.94338, 37.55501], [75.06011, 37.52779], [75.15899, 37.41443], [75.09719, 37.37297], [75.12328, 37.31839], [74.88887, 37.23275], [74.80605, 37.21565], [74.49981, 37.24518], [74.56453, 37.03023], [75.13839, 37.02622], [75.40481, 36.95382], [75.45562, 36.71971], [75.72737, 36.7529], [75.92391, 36.56986], [76.0324, 36.41198], [76.00906, 36.17511], [75.93028, 36.13136], [76.15325, 35.9264], [76.14913, 35.82848], [76.33453, 35.84296], [76.50961, 35.8908], [76.77323, 35.66062], [76.84539, 35.67356], [76.96624, 35.5932], [77.44277, 35.46132], [77.70232, 35.46244], [77.80532, 35.52058], [78.11664, 35.48022], [78.03466, 35.3785], [78.00033, 35.23954], [78.22692, 34.88771], [78.18435, 34.7998], [78.27781, 34.61484], [78.54964, 34.57283], [78.56475, 34.50835], [78.74465, 34.45174], [79.05364, 34.32482], [78.99802, 34.3027], [78.91769, 34.15452], [78.66225, 34.08858], [78.65657, 34.03195], [78.73367, 34.01121], [78.77349, 33.73871], [78.67599, 33.66445], [78.73636, 33.56521], [79.15252, 33.17156], [79.14016, 33.02545], [79.46562, 32.69668], [79.26768, 32.53277], [79.13174, 32.47766], [79.0979, 32.38051], [78.99322, 32.37948], [78.96713, 32.33655], [78.7831, 32.46873], [78.73916, 32.69438], [78.38897, 32.53938], [78.4645, 32.45367], [78.49609, 32.2762], [78.68754, 32.10256], [78.74404, 32.00384], [78.78036, 31.99478], [78.69933, 31.78723], [78.84516, 31.60631], [78.71032, 31.50197], [78.77898, 31.31209], [78.89344, 31.30481], [79.01931, 31.42817], [79.14016, 31.43403], [79.30694, 31.17357], [79.59884, 30.93943], [79.93255, 30.88288], [80.20721, 30.58541], [80.54504, 30.44936], [80.83343, 30.32023], [81.03953, 30.20059], [81.12842, 30.01395], [81.24362, 30.0126], [81.29032, 30.08806], [81.2623, 30.14596], [81.33355, 30.15303], [81.39928, 30.21862], [81.41018, 30.42153], [81.5459, 30.37688], [81.62033, 30.44703], [81.99082, 30.33423], [82.10135, 30.35439], [82.10757, 30.23745], [82.19475, 30.16884], [82.16984, 30.0692], [82.38622, 30.02608], [82.5341, 29.9735], [82.73024, 29.81695], [83.07116, 29.61957], [83.28131, 29.56813], [83.44787, 29.30513], [83.63156, 29.16249], [83.82303, 29.30513], [83.97559, 29.33091], [84.18107, 29.23451], [84.24801, 29.02783], [84.2231, 28.89571], [84.47528, 28.74023], [84.62317, 28.73887], [84.85511, 28.58041], [85.06059, 28.68562], [85.19135, 28.62825], [85.18668, 28.54076], [85.10729, 28.34092], [85.38127, 28.28336], [85.4233, 28.32996], [85.59765, 28.30529], [85.60854, 28.25045], [85.69105, 28.38475], [85.71907, 28.38064], [85.74864, 28.23126], [85.84672, 28.18187], [85.90743, 28.05144], [85.97813, 27.99023], [85.94946, 27.9401], [86.06309, 27.90021], [86.12069, 27.93047], [86.08333, 28.02121], [86.088, 28.09264], [86.18607, 28.17364], [86.22966, 27.9786], [86.42736, 27.91122], [86.51609, 27.96623], [86.56265, 28.09569], [86.74181, 28.10638], [86.75582, 28.04182], [87.03757, 27.94835], [87.11696, 27.84104], [87.56996, 27.84517], [87.72718, 27.80938], [87.82681, 27.95248], [88.13378, 27.88015], [88.1278, 27.95417], [88.25332, 27.9478], [88.54858, 28.06057], [88.63235, 28.12356], [88.83559, 28.01936], [88.88091, 27.85192], [88.77517, 27.45415], [88.82981, 27.38814], [88.91901, 27.32483], [88.93678, 27.33777], [88.96947, 27.30319], [89.00216, 27.32532], [88.95355, 27.4106], [88.97213, 27.51671], [89.0582, 27.60985], [89.12825, 27.62502], [89.59525, 28.16433], [89.79762, 28.23979], [90.13387, 28.19178], [90.58842, 28.02838], [90.69894, 28.07784], [91.20019, 27.98715], [91.25779, 28.07509], [91.46327, 28.0064], [91.48973, 27.93903], [91.5629, 27.84823], [91.6469, 27.76358], [91.84722, 27.76325], [91.87057, 27.7195], [92.27432, 27.89077], [92.32101, 27.79363], [92.42538, 27.80092], [92.7275, 27.98662], [92.73025, 28.05814], [92.65472, 28.07632], [92.67486, 28.15018], [92.93075, 28.25671], [93.14635, 28.37035], [93.18069, 28.50319], [93.44621, 28.67189], [93.72797, 28.68821], [94.35897, 29.01965], [94.2752, 29.11687], [94.69318, 29.31739], [94.81353, 29.17804], [95.0978, 29.14446], [95.11291, 29.09527], [95.2214, 29.10727], [95.26122, 29.07727], [95.3038, 29.13847], [95.41091, 29.13007], [95.50842, 29.13487], [95.72086, 29.20797], [95.75149, 29.32063], [95.84899, 29.31464], [96.05361, 29.38167], [96.31316, 29.18643], [96.18682, 29.11087], [96.20467, 29.02325], [96.3626, 29.10607], [96.61391, 28.72742], [96.40929, 28.51526], [96.48895, 28.42955], [96.6455, 28.61657], [96.85561, 28.4875], [96.88445, 28.39452], [96.98882, 28.32564], [97.1289, 28.3619], [97.34547, 28.21385], [97.41729, 28.29783], [97.47085, 28.2688], [97.50518, 28.49716], [97.56835, 28.55628], [97.70705, 28.5056], [97.79632, 28.33168], [97.90069, 28.3776], [98.15337, 28.12114], [98.13964, 27.9478], [98.32641, 27.51385], [98.42529, 27.55404], [98.43353, 27.67086], [98.69582, 27.56499], [98.7333, 26.85615], [98.77547, 26.61994], [98.72741, 26.36183], [98.67797, 26.24487], [98.7329, 26.17218], [98.66884, 26.09165], [98.63128, 26.15492], [98.57085, 26.11547], [98.60763, 26.01512], [98.70818, 25.86241], [98.63128, 25.79937], [98.54064, 25.85129], [98.40606, 25.61129], [98.31268, 25.55307], [98.25774, 25.6051], [98.16848, 25.62739], [98.18084, 25.56298], [98.12591, 25.50722], [98.14925, 25.41547], [97.92541, 25.20815], [97.83614, 25.2715], [97.77023, 25.11492], [97.72216, 25.08508], [97.72903, 24.91332], [97.79949, 24.85655], [97.76481, 24.8289], [97.73127, 24.83015], [97.70181, 24.84557], [97.64354, 24.79171], [97.56648, 24.76475], [97.56383, 24.75535], [97.5542, 24.74943], [97.54675, 24.74202], [97.56525, 24.72838], [97.56286, 24.54535], [97.52757, 24.43748], [97.60029, 24.4401], [97.66998, 24.45288], [97.7098, 24.35658], [97.65624, 24.33781], [97.66723, 24.30027], [97.71941, 24.29652], [97.76799, 24.26365], [97.72998, 24.2302], [97.72799, 24.18883], [97.75305, 24.16902], [97.72903, 24.12606], [97.62363, 24.00506], [97.5247, 23.94032], [97.64667, 23.84574], [97.72302, 23.89288], [97.79456, 23.94836], [97.79416, 23.95663], [97.84328, 23.97603], [97.86545, 23.97723], [97.88811, 23.97446], [97.8955, 23.97758], [97.89676, 23.97931], [97.89683, 23.98389], [97.88814, 23.98605], [97.88414, 23.99405], [97.88616, 24.00463], [97.90998, 24.02094], [97.93951, 24.01953], [97.98691, 24.03897], [97.99583, 24.04932], [98.04709, 24.07616], [98.05302, 24.07408], [98.05671, 24.07961], [98.0607, 24.07812], [98.06703, 24.08028], [98.07806, 24.07988], [98.20666, 24.11406], [98.54476, 24.13119], [98.59256, 24.08371], [98.85319, 24.13042], [98.87998, 24.15624], [98.89632, 24.10612], [98.67797, 23.9644], [98.68209, 23.80492], [98.79607, 23.77947], [98.82933, 23.72921], [98.81775, 23.694], [98.88396, 23.59555], [98.80294, 23.5345], [98.82877, 23.47908], [98.87683, 23.48995], [98.92104, 23.36946], [98.87573, 23.33038], [98.93958, 23.31414], [98.92515, 23.29535], [98.88597, 23.18656], [99.05975, 23.16382], [99.04601, 23.12215], [99.25741, 23.09025], [99.34127, 23.13099], [99.52214, 23.08218], [99.54218, 22.90014], [99.43537, 22.94086], [99.45654, 22.85726], [99.31243, 22.73893], [99.38247, 22.57544], [99.37972, 22.50188], [99.28771, 22.4105], [99.17318, 22.18025], [99.19176, 22.16983], [99.1552, 22.15874], [99.33166, 22.09656], [99.47585, 22.13345], [99.85351, 22.04183], [99.96612, 22.05965], [99.99084, 21.97053], [99.94003, 21.82782], [99.98654, 21.71064], [100.04956, 21.66843], [100.12679, 21.70539], [100.17486, 21.65306], [100.10757, 21.59945], [100.12542, 21.50365], [100.1625, 21.48704], [100.18447, 21.51898], [100.25863, 21.47043], [100.35201, 21.53176], [100.42892, 21.54325], [100.4811, 21.46148], [100.57861, 21.45637], [100.72143, 21.51898], [100.87265, 21.67396], [101.11744, 21.77659], [101.15156, 21.56129], [101.2124, 21.56422], [101.19349, 21.41959], [101.26912, 21.36482], [101.2229, 21.23271], [101.29326, 21.17254], [101.54563, 21.25668], [101.6068, 21.23329], [101.59491, 21.18621], [101.60886, 21.17947], [101.66977, 21.20004], [101.70548, 21.14911], [101.7622, 21.14813], [101.79266, 21.19025], [101.76745, 21.21571], [101.83887, 21.20983], [101.84412, 21.25291], [101.74014, 21.30967], [101.74224, 21.48276], [101.7727, 21.51794], [101.7475, 21.5873], [101.80001, 21.57461], [101.83257, 21.61562], [101.74555, 21.72852], [101.7791, 21.83019], [101.62566, 21.96574], [101.57525, 22.13026], [101.60675, 22.13513], [101.53638, 22.24794], [101.56789, 22.28876], [101.61306, 22.27515], [101.68973, 22.46843], [101.7685, 22.50337], [101.86828, 22.38397], [101.90714, 22.38688], [101.91344, 22.44417], [101.98487, 22.42766], [102.03633, 22.46164], [102.1245, 22.43372], [102.14099, 22.40092], [102.16621, 22.43336], [102.26428, 22.41321], [102.25339, 22.4607], [102.41061, 22.64184], [102.38415, 22.67919], [102.42618, 22.69212], [102.46665, 22.77108], [102.51802, 22.77969], [102.57095, 22.7036], [102.60675, 22.73376], [102.8636, 22.60735], [102.9321, 22.48659], [103.0722, 22.44775], [103.07843, 22.50097], [103.17961, 22.55705], [103.15782, 22.59873], [103.18895, 22.64471], [103.28079, 22.68063], [103.32282, 22.8127], [103.43179, 22.75816], [103.43646, 22.70648], [103.52675, 22.59155], [103.57812, 22.65764], [103.56255, 22.69499], [103.64506, 22.79979], [103.87904, 22.56683], [103.93286, 22.52703], [103.94513, 22.52553], [103.95191, 22.5134], [103.96352, 22.50584], [103.96783, 22.51173], [103.97384, 22.50634], [103.99247, 22.51958], [104.01088, 22.51823], [104.03734, 22.72945], [104.11384, 22.80363], [104.27084, 22.8457], [104.25683, 22.76534], [104.35593, 22.69353], [104.47225, 22.75813], [104.58122, 22.85571], [104.60457, 22.81841], [104.65283, 22.83419], [104.72755, 22.81984], [104.77114, 22.90017], [104.84942, 22.93631], [104.86765, 22.95178], [104.8334, 23.01484], [104.79478, 23.12934], [104.87382, 23.12854], [104.87992, 23.17141], [104.91435, 23.18666], [104.9486, 23.17235], [104.96532, 23.20463], [104.98712, 23.19176], [105.07002, 23.26248], [105.11672, 23.25247], [105.17276, 23.28679], [105.22569, 23.27249], [105.32376, 23.39684], [105.40782, 23.28107], [105.42805, 23.30824], [105.49966, 23.20669], [105.56037, 23.16806], [105.57594, 23.075], [105.72382, 23.06641], [105.8726, 22.92756], [105.90119, 22.94168], [105.99568, 22.94178], [106.00179, 22.99049], [106.19705, 22.98475], [106.27022, 22.87722], [106.34961, 22.86718], [106.49749, 22.91164], [106.51306, 22.94891], [106.55976, 22.92311], [106.60179, 22.92884], [106.6516, 22.86862], [106.6734, 22.89587], [106.71387, 22.88296], [106.71128, 22.85982], [106.78422, 22.81532], [106.81271, 22.8226], [106.83685, 22.8098], [106.82404, 22.7881], [106.76293, 22.73491], [106.72321, 22.63606], [106.71698, 22.58432], [106.65316, 22.5757], [106.61269, 22.60301], [106.58395, 22.474], [106.55665, 22.46498], [106.57221, 22.37], [106.55976, 22.34841], [106.6516, 22.33977], [106.69986, 22.22309], [106.67495, 22.1885], [106.6983, 22.15102], [106.70142, 22.02409], [106.68274, 21.99811], [106.69276, 21.96013], [106.72551, 21.97923], [106.74345, 22.00965], [106.81038, 21.97934], [106.9178, 21.97357], [106.92714, 21.93459], [106.97228, 21.92592], [106.99252, 21.95191], [107.05634, 21.92303], [107.06101, 21.88982], [107.00964, 21.85948], [107.02615, 21.81981], [107.10771, 21.79879], [107.20734, 21.71493], [107.24625, 21.7077], [107.29296, 21.74674], [107.35834, 21.6672], [107.35989, 21.60063], [107.38636, 21.59774], [107.41593, 21.64839], [107.47197, 21.6672], [107.49532, 21.62958], [107.49065, 21.59774], [107.54047, 21.5934], [107.56537, 21.61945], [107.66967, 21.60787], [107.80355, 21.66141], [107.86114, 21.65128], [107.90006, 21.5905], [107.92652, 21.58906], [107.95232, 21.5388], [107.96774, 21.53601], [107.97074, 21.54072], [107.97383, 21.53961], [107.97932, 21.54503], [108.02926, 21.54997], [108.0569, 21.53604], [108.10003, 21.47338], [108.00365, 17.98159], [111.60491, 13.57105], [118.41371, 24.06775], [118.11703, 24.39734], [118.28244, 24.51231], [118.35291, 24.51645], [118.42453, 24.54644], [118.6333, 24.46259], [119.42295, 25.0886], [119.98511, 25.37624], [119.78816, 26.2348], [120.0693, 26.3959], [120.5128, 26.536], [121.03532, 26.8787], [123.5458, 31.01942], [122.29378, 31.76513], [122.80525, 33.30571], [123.85601, 37.49093], [123.90497, 38.79949], [124.17532, 39.8232], [124.23201, 39.9248], [124.35029, 39.95639], [124.37089, 40.03004], [124.3322, 40.05573], [124.38556, 40.11047], [124.40719, 40.13655], [124.86913, 40.45387], [125.71172, 40.85223], [125.76869, 40.87908], [126.00335, 40.92835], [126.242, 41.15454], [126.53189, 41.35206], [126.60631, 41.65565], [126.90729, 41.79955], [127.17841, 41.59714], [127.29712, 41.49473], [127.92943, 41.44291], [128.02633, 41.42103], [128.03311, 41.39232], [128.12967, 41.37931], [128.18546, 41.41279], [128.20061, 41.40895], [128.30716, 41.60322], [128.15119, 41.74568], [128.04487, 42.01769], [128.94007, 42.03537], [128.96068, 42.06657], [129.15178, 42.17224], [129.22285, 42.26491], [129.22423, 42.3553], [129.28541, 42.41574], [129.42882, 42.44702], [129.54701, 42.37254], [129.60482, 42.44461], [129.72541, 42.43739], [129.75294, 42.59409], [129.77183, 42.69435], [129.7835, 42.76521], [129.80719, 42.79218], [129.83277, 42.86746], [129.85261, 42.96494], [129.8865, 43.00395], [129.95082, 43.01051], [129.96409, 42.97306], [130.12957, 42.98361], [130.09764, 42.91425], [130.26095, 42.9027], [130.23068, 42.80125], [130.2385, 42.71127], [130.41826, 42.6011], [130.44361, 42.54849], [130.50123, 42.61636], [130.55143, 42.52158], [130.62107, 42.58413], [130.56576, 42.68925], [130.40213, 42.70788], [130.44361, 42.76205], [130.66524, 42.84753], [131.02438, 42.86518], [131.02668, 42.91246], [131.135, 42.94114], [131.10274, 43.04734], [131.20414, 43.13654], [131.19031, 43.21385], [131.30324, 43.39498], [131.29402, 43.46695], [131.19492, 43.53047], [131.21105, 43.82383], [131.26176, 43.94011], [131.23583, 43.96085], [131.25484, 44.03131], [131.30365, 44.04262], [131.1108, 44.70266], [130.95639, 44.85154], [131.48415, 44.99513], [131.68466, 45.12374], [131.66852, 45.2196], [131.76532, 45.22609], [131.86903, 45.33636], [131.99417, 45.2567], [132.83978, 45.05916], [132.96373, 45.0212], [133.12293, 45.1332], [133.09279, 45.25693], [133.19419, 45.51913], [133.41083, 45.57723], [133.48457, 45.86203], [133.60442, 45.90053], [133.67569, 45.9759], [133.72695, 46.05576], [133.68047, 46.14697], [133.88097, 46.25066], [133.91496, 46.4274], [133.84104, 46.46681], [134.03538, 46.75668], [134.20016, 47.33458], [134.50898, 47.4812], [134.7671, 47.72051], [134.55508, 47.98651], [134.67098, 48.1564], [134.75328, 48.36763], [134.49516, 48.42884], [132.66989, 47.96491], [132.57309, 47.71741], [131.90448, 47.68011], [131.2635, 47.73325], [131.09871, 47.6852], [130.95985, 47.6957], [130.90915, 47.90623], [130.65103, 48.10052], [130.84462, 48.30942], [130.52147, 48.61745], [130.66946, 48.88251], [130.43232, 48.90844], [130.2355, 48.86741], [129.85416, 49.11067], [129.67598, 49.29596], [129.50685, 49.42398], [129.40398, 49.44194], [129.35317, 49.3481], [129.23232, 49.40353], [129.11153, 49.36813], [128.72896, 49.58676], [127.83476, 49.5748], [127.53516, 49.84306], [127.49299, 50.01251], [127.60515, 50.23503], [127.37384, 50.28393], [127.36009, 50.43787], [127.28765, 50.46585], [127.36335, 50.58306], [127.28165, 50.72075], [127.14586, 50.91152], [126.93135, 51.0841], [126.90369, 51.3238], [126.68349, 51.70607], [126.44606, 51.98254], [126.558, 52.13738], [125.6131, 53.07229]], [[113.56865, 22.20973], [113.57123, 22.20416], [113.60504, 22.20464], [113.63011, 22.10782], [113.57191, 22.07696], [113.54839, 22.10909], [113.54942, 22.14519], [113.54093, 22.15497], [113.52659, 22.18271], [113.53552, 22.20607], [113.53301, 22.21235], [113.53591, 22.21369], [113.54093, 22.21314], [113.54333, 22.21688], [113.5508, 22.21672], [113.56865, 22.20973]], [[114.50148, 22.15017], [113.92195, 22.13873], [113.83338, 22.1826], [113.81621, 22.2163], [113.86771, 22.42972], [114.03113, 22.5065], [114.05438, 22.5026], [114.05729, 22.51104], [114.06272, 22.51617], [114.07267, 22.51855], [114.07817, 22.52997], [114.08606, 22.53276], [114.09048, 22.53716], [114.09692, 22.53435], [114.1034, 22.5352], [114.11181, 22.52878], [114.11656, 22.53415], [114.12665, 22.54003], [114.13823, 22.54319], [114.1482, 22.54091], [114.15123, 22.55163], [114.1597, 22.56041], [114.17247, 22.55944], [114.18338, 22.55444], [114.20655, 22.55706], [114.22185, 22.55343], [114.22888, 22.5436], [114.25154, 22.55977], [114.44998, 22.55977], [114.50148, 22.15017]]]] } },
-    { type: "Feature", properties: { wikidata: "Q22890", nameEn: "Ireland", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q23666", nameEn: "Great Britain", country: "GB", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q23681", nameEn: "Northern Cyprus", groups: ["Q644636", "145", "142"], driveSide: "left", callingCodes: ["90 392"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.67678, 35.03866], [33.67742, 35.05963], [33.68474, 35.06602], [33.69095, 35.06237], [33.70861, 35.07644], [33.7161, 35.07279], [33.70209, 35.04882], [33.71482, 35.03722], [33.73824, 35.05321], [33.76106, 35.04253], [33.78581, 35.05104], [33.82067, 35.07826], [33.84168, 35.06823], [33.8541, 35.07201], [33.87479, 35.08881], [33.87097, 35.09389], [33.87622, 35.10457], [33.87224, 35.12293], [33.88561, 35.12449], [33.88943, 35.12007], [33.88737, 35.11408], [33.89853, 35.11377], [33.91789, 35.08688], [33.91299, 35.07579], [33.90247, 35.07686], [33.89485, 35.06873], [33.88367, 35.07877], [33.85261, 35.0574], [33.8355, 35.05777], [33.82051, 35.0667], [33.8012, 35.04786], [33.81524, 35.04192], [33.83055, 35.02865], [33.82875, 35.01685], [33.84045, 35.00616], [33.85216, 35.00579], [33.85891, 35.001], [33.85621, 34.98956], [33.83505, 34.98108], [33.84811, 34.97075], [33.86432, 34.97592], [33.90075, 34.96623], [33.98684, 34.76642], [35.48515, 34.70851], [35.51152, 36.10954], [32.82353, 35.70297], [32.46489, 35.48584], [32.60361, 35.16647], [32.64864, 35.19967], [32.70947, 35.18328], [32.70779, 35.14127], [32.85733, 35.07742], [32.86406, 35.1043], [32.94471, 35.09422], [33.01192, 35.15639], [33.08249, 35.17319], [33.11105, 35.15639], [33.15138, 35.19504], [33.27068, 35.16815], [33.3072, 35.16816], [33.31955, 35.18096], [33.35056, 35.18328], [33.34964, 35.17803], [33.35596, 35.17942], [33.35612, 35.17402], [33.36569, 35.17479], [33.3717, 35.1788], [33.37248, 35.18698], [33.38575, 35.2018], [33.4076, 35.20062], [33.41675, 35.16325], [33.46813, 35.10564], [33.48136, 35.0636], [33.47825, 35.04103], [33.45178, 35.02078], [33.45256, 35.00288], [33.47666, 35.00701], [33.48915, 35.06594], [33.53975, 35.08151], [33.57478, 35.06049], [33.567, 35.04803], [33.59658, 35.03635], [33.61215, 35.0527], [33.63765, 35.03869], [33.67678, 35.03866]]]] } },
-    { type: "Feature", properties: { wikidata: "Q25231", nameEn: "Svalbard", aliases: ["NO-21"], country: "NO", groups: ["SJ", "154", "150", "UN"], level: "subterritory", callingCodes: ["47 79"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-7.49892, 77.24208], [32.07813, 72.01005], [36.85549, 84.09565], [-7.49892, 77.24208]]]] } },
-    { type: "Feature", properties: { wikidata: "Q25263", nameEn: "Azores", aliases: ["PT-20"], country: "PT", groups: ["Q3320166", "Q2914565", "Q105472", "EU", "039", "150", "UN"], callingCodes: ["351"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-23.12984, 40.26428], [-36.43765, 41.39418], [-22.54767, 33.34416], [-23.12984, 40.26428]]]] } },
-    { type: "Feature", properties: { wikidata: "Q25359", nameEn: "Navassa Island", aliases: ["UM-76"], country: "US", groups: ["UM", "Q1352230", "029", "003", "419", "019", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-74.7289, 18.71009], [-75.71816, 18.46438], [-74.76465, 18.06252], [-74.7289, 18.71009]]]] } },
-    { type: "Feature", properties: { wikidata: "Q25396", nameEn: "Bonaire", aliases: ["BQ-BO", "NL-BQ1"], country: "NL", groups: ["Q1451600", "BQ", "029", "003", "419", "019", "UN"], level: "subterritory", callingCodes: ["599 7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-67.89186, 12.4116], [-68.90012, 12.62309], [-68.33524, 11.78151], [-68.01417, 11.77722], [-67.89186, 12.4116]]]] } },
-    { type: "Feature", properties: { wikidata: "Q25528", nameEn: "Saba", aliases: ["BQ-SA", "NL-BQ2"], country: "NL", groups: ["Q1451600", "BQ", "029", "003", "419", "019", "UN"], level: "subterritory", callingCodes: ["599 4"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.07669, 17.79659], [-63.81314, 17.95045], [-63.22932, 17.32592], [-63.07669, 17.79659]]]] } },
-    { type: "Feature", properties: { wikidata: "Q26180", nameEn: "Sint Eustatius", aliases: ["BQ-SE", "NL-BQ3"], country: "NL", groups: ["Q1451600", "BQ", "029", "003", "419", "019", "UN"], level: "subterritory", callingCodes: ["599 3"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.07669, 17.79659], [-63.34999, 16.94218], [-62.76692, 17.64353], [-63.07669, 17.79659]]]] } },
-    { type: "Feature", properties: { wikidata: "Q26253", nameEn: "Madeira", aliases: ["PT-30"], country: "PT", groups: ["Q3320166", "Q2914565", "Q105472", "EU", "039", "150", "UN"], callingCodes: ["351"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-19.30302, 33.65304], [-16.04789, 29.65076], [-11.68307, 33.12333], [-19.30302, 33.65304]]]] } },
-    { type: "Feature", properties: { wikidata: "Q26927", nameEn: "Lakshadweep", aliases: ["IN-LD"], country: "IN", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["91"] }, geometry: { type: "MultiPolygon", coordinates: [[[[67.64074, 11.57295], [76.59015, 5.591], [72.67494, 13.58102], [67.64074, 11.57295]]]] } },
-    { type: "Feature", properties: { wikidata: "Q27329", nameEn: "Asian Russia", country: "RU", groups: ["142", "UN"], callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-179.99933, 64.74703], [-172.76104, 63.77445], [-169.03888, 65.48473], [-168.95635, 65.98512], [-168.25765, 71.99091], [-179.9843, 71.90735], [-179.99933, 64.74703]]], [[[59.99809, 51.98263], [60.19925, 51.99173], [60.48915, 52.15175], [60.72581, 52.15538], [60.78201, 52.22067], [61.05417, 52.35096], [60.98021, 52.50068], [60.84709, 52.52228], [60.84118, 52.63912], [60.71693, 52.66245], [60.71989, 52.75923], [61.05842, 52.92217], [61.23462, 53.03227], [62.0422, 52.96105], [62.12799, 52.99133], [62.14574, 53.09626], [61.19024, 53.30536], [61.14291, 53.41481], [61.29082, 53.50992], [61.37957, 53.45887], [61.57185, 53.50112], [61.55706, 53.57144], [60.90626, 53.62937], [61.22574, 53.80268], [61.14283, 53.90063], [60.99796, 53.93699], [61.26863, 53.92797], [61.3706, 54.08464], [61.47603, 54.08048], [61.56941, 53.95703], [61.65318, 54.02445], [62.03913, 53.94768], [62.00966, 54.04134], [62.38535, 54.03961], [62.45931, 53.90737], [62.56876, 53.94047], [62.58651, 54.05871], [63.80604, 54.27079], [63.91224, 54.20013], [64.02715, 54.22679], [63.97686, 54.29763], [64.97216, 54.4212], [65.11033, 54.33028], [65.24663, 54.35721], [65.20174, 54.55216], [68.21308, 54.98645], [68.26661, 55.09226], [68.19206, 55.18823], [68.90865, 55.38148], [69.34224, 55.36344], [69.74917, 55.35545], [70.19179, 55.1476], [70.76493, 55.3027], [70.96009, 55.10558], [71.08288, 54.71253], [71.24185, 54.64965], [71.08706, 54.33376], [71.10379, 54.13326], [71.96141, 54.17736], [72.17477, 54.36303], [72.43415, 53.92685], [72.71026, 54.1161], [73.37963, 53.96132], [73.74778, 54.07194], [73.68921, 53.86522], [73.25412, 53.61532], [73.39218, 53.44623], [75.07405, 53.80831], [75.43398, 53.98652], [75.3668, 54.07439], [76.91052, 54.4677], [76.82266, 54.1798], [76.44076, 54.16017], [76.54243, 53.99329], [77.90383, 53.29807], [79.11255, 52.01171], [80.08138, 50.77658], [80.4127, 50.95581], [80.44819, 51.20855], [80.80318, 51.28262], [81.16999, 51.15662], [81.06091, 50.94833], [81.41248, 50.97524], [81.46581, 50.77658], [81.94999, 50.79307], [82.55443, 50.75412], [83.14607, 51.00796], [83.8442, 50.87375], [84.29385, 50.27257], [84.99198, 50.06793], [85.24047, 49.60239], [86.18709, 49.50259], [86.63674, 49.80136], [86.79056, 49.74787], [86.61307, 49.60239], [86.82606, 49.51796], [87.03071, 49.25142], [87.31465, 49.23603], [87.28386, 49.11626], [87.478, 49.07403], [87.48983, 49.13794], [87.81333, 49.17354], [87.98977, 49.18147], [88.15543, 49.30314], [88.17223, 49.46934], [88.42449, 49.48821], [88.82499, 49.44808], [89.70687, 49.72535], [89.59711, 49.90851], [91.86048, 50.73734], [92.07173, 50.69585], [92.44714, 50.78762], [93.01109, 50.79001], [92.99595, 50.63183], [94.30823, 50.57498], [94.39258, 50.22193], [94.49477, 50.17832], [94.6121, 50.04239], [94.97166, 50.04725], [95.02465, 49.96941], [95.74757, 49.97915], [95.80056, 50.04239], [96.97388, 49.88413], [97.24639, 49.74737], [97.56811, 49.84265], [97.56432, 49.92801], [97.76871, 49.99861], [97.85197, 49.91339], [98.29481, 50.33561], [98.31373, 50.4996], [98.06393, 50.61262], [97.9693, 50.78044], [98.01472, 50.86652], [97.83305, 51.00248], [98.05257, 51.46696], [98.22053, 51.46579], [98.33222, 51.71832], [98.74142, 51.8637], [98.87768, 52.14563], [99.27888, 51.96876], [99.75578, 51.90108], [99.89203, 51.74903], [100.61116, 51.73028], [101.39085, 51.45753], [101.5044, 51.50467], [102.14032, 51.35566], [102.32194, 50.67982], [102.71178, 50.38873], [103.70343, 50.13952], [105.32528, 50.4648], [106.05562, 50.40582], [106.07865, 50.33474], [106.47156, 50.31909], [106.49628, 50.32436], [106.51122, 50.34408], [106.58373, 50.34044], [106.80326, 50.30177], [107.00007, 50.1977], [107.1174, 50.04239], [107.36407, 49.97612], [107.96116, 49.93191], [107.95387, 49.66659], [108.27937, 49.53167], [108.53969, 49.32325], [109.18017, 49.34709], [109.51325, 49.22859], [110.24373, 49.16676], [110.39891, 49.25083], [110.64493, 49.1816], [113.02647, 49.60772], [113.20216, 49.83356], [114.325, 50.28098], [114.9703, 50.19254], [115.26068, 49.97367], [115.73602, 49.87688], [116.22402, 50.04477], [116.62502, 49.92919], [116.71193, 49.83813], [117.27597, 49.62544], [117.48208, 49.62324], [117.82343, 49.52696], [118.61623, 49.93809], [119.11003, 50.00276], [119.27996, 50.13348], [119.38598, 50.35162], [119.13553, 50.37412], [120.10963, 51.671], [120.65907, 51.93544], [120.77337, 52.20805], [120.61346, 52.32447], [120.71673, 52.54099], [120.46454, 52.63811], [120.04049, 52.58773], [120.0451, 52.7359], [120.85633, 53.28499], [121.39213, 53.31888], [122.35063, 53.49565], [122.85966, 53.47395], [123.26989, 53.54843], [123.86158, 53.49391], [124.46078, 53.21881], [125.17522, 53.20225], [125.6131, 53.07229], [126.558, 52.13738], [126.44606, 51.98254], [126.68349, 51.70607], [126.90369, 51.3238], [126.93135, 51.0841], [127.14586, 50.91152], [127.28165, 50.72075], [127.36335, 50.58306], [127.28765, 50.46585], [127.36009, 50.43787], [127.37384, 50.28393], [127.60515, 50.23503], [127.49299, 50.01251], [127.53516, 49.84306], [127.83476, 49.5748], [128.72896, 49.58676], [129.11153, 49.36813], [129.23232, 49.40353], [129.35317, 49.3481], [129.40398, 49.44194], [129.50685, 49.42398], [129.67598, 49.29596], [129.85416, 49.11067], [130.2355, 48.86741], [130.43232, 48.90844], [130.66946, 48.88251], [130.52147, 48.61745], [130.84462, 48.30942], [130.65103, 48.10052], [130.90915, 47.90623], [130.95985, 47.6957], [131.09871, 47.6852], [131.2635, 47.73325], [131.90448, 47.68011], [132.57309, 47.71741], [132.66989, 47.96491], [134.49516, 48.42884], [134.75328, 48.36763], [134.67098, 48.1564], [134.55508, 47.98651], [134.7671, 47.72051], [134.50898, 47.4812], [134.20016, 47.33458], [134.03538, 46.75668], [133.84104, 46.46681], [133.91496, 46.4274], [133.88097, 46.25066], [133.68047, 46.14697], [133.72695, 46.05576], [133.67569, 45.9759], [133.60442, 45.90053], [133.48457, 45.86203], [133.41083, 45.57723], [133.19419, 45.51913], [133.09279, 45.25693], [133.12293, 45.1332], [132.96373, 45.0212], [132.83978, 45.05916], [131.99417, 45.2567], [131.86903, 45.33636], [131.76532, 45.22609], [131.66852, 45.2196], [131.68466, 45.12374], [131.48415, 44.99513], [130.95639, 44.85154], [131.1108, 44.70266], [131.30365, 44.04262], [131.25484, 44.03131], [131.23583, 43.96085], [131.26176, 43.94011], [131.21105, 43.82383], [131.19492, 43.53047], [131.29402, 43.46695], [131.30324, 43.39498], [131.19031, 43.21385], [131.20414, 43.13654], [131.10274, 43.04734], [131.135, 42.94114], [131.02668, 42.91246], [131.02438, 42.86518], [130.66524, 42.84753], [130.44361, 42.76205], [130.40213, 42.70788], [130.56576, 42.68925], [130.62107, 42.58413], [130.55143, 42.52158], [130.56835, 42.43281], [130.60805, 42.4317], [130.64181, 42.41422], [130.66367, 42.38024], [130.65022, 42.32281], [131.95041, 41.5445], [140.9182, 45.92937], [145.82343, 44.571], [145.23667, 43.76813], [153.94307, 38.42848], [180, 62.52334], [180, 71.53642], [155.31937, 81.93282], [76.13964, 83.37843], [64.18965, 69.94255], [66.1708, 67.61252], [61.98014, 65.72191], [60.74386, 64.95767], [59.63945, 64.78384], [59.80579, 64.13948], [59.24834, 63.01859], [59.61398, 62.44915], [59.36223, 61.3882], [59.50685, 60.91162], [58.3853, 59.487], [59.15636, 59.14682], [59.40376, 58.45822], [58.71104, 58.07475], [58.81412, 57.71602], [58.13789, 57.68097], [58.07604, 57.08308], [57.28024, 56.87898], [57.51527, 56.08729], [59.28419, 56.15739], [59.49035, 55.60486], [58.81825, 55.03378], [57.25137, 55.26262], [57.14829, 54.84204], [57.95234, 54.39672], [59.95217, 54.85853], [59.70487, 54.14846], [58.94336, 53.953], [58.79644, 52.43392], [59.22409, 52.28437], [59.25033, 52.46803], [60.17516, 52.39457], [60.17253, 52.25814], [59.91279, 52.06924], [59.99809, 51.98263]]]] } },
-    { type: "Feature", properties: { wikidata: "Q34366", nameEn: "Tasmania", aliases: ["AU-TAS"], country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[123.64533, -39.13605], [159.69067, -56.28945], [159.74028, -39.1978], [123.64533, -39.13605]]]] } },
-    { type: "Feature", properties: { wikidata: "Q34497", nameEn: "Saint Helena", aliases: ["SH-HL"], country: "GB", groups: ["SH", "BOTS", "011", "202", "002", "UN"], level: "subterritory", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["290"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.3824, -13.9131], [-6.17428, -19.07236], [-3.29308, -15.22647], [-8.3824, -13.9131]]]] } },
-    { type: "Feature", properties: { wikidata: "Q35657", nameEn: "US States", country: "US", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q36117", nameEn: "Borneo", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q36678", nameEn: "West Bank", country: "PS", groups: ["145", "142"], callingCodes: ["970"] }, geometry: { type: "MultiPolygon", coordinates: [[[[35.47672, 31.49578], [35.55941, 31.76535], [35.52758, 31.9131], [35.54375, 31.96587], [35.52012, 32.04076], [35.57111, 32.21877], [35.55807, 32.38674], [35.42078, 32.41562], [35.41048, 32.43706], [35.41598, 32.45593], [35.42034, 32.46009], [35.40224, 32.50136], [35.35212, 32.52047], [35.30685, 32.51024], [35.29306, 32.50947], [35.25049, 32.52453], [35.2244, 32.55289], [35.15937, 32.50466], [35.10882, 32.4757], [35.10024, 32.47856], [35.09236, 32.47614], [35.08564, 32.46948], [35.07059, 32.4585], [35.05423, 32.41754], [35.05311, 32.4024], [35.0421, 32.38242], [35.05142, 32.3667], [35.04243, 32.35008], [35.01772, 32.33863], [35.01119, 32.28684], [35.02939, 32.2671], [35.01841, 32.23981], [34.98885, 32.20758], [34.95703, 32.19522], [34.96009, 32.17503], [34.99039, 32.14626], [34.98507, 32.12606], [34.99437, 32.10962], [34.9863, 32.09551], [35.00261, 32.027], [34.98682, 31.96935], [35.00124, 31.93264], [35.03489, 31.92448], [35.03978, 31.89276], [35.03489, 31.85919], [34.99712, 31.85569], [34.9724, 31.83352], [35.01978, 31.82944], [35.05617, 31.85685], [35.07677, 31.85627], [35.14174, 31.81325], [35.18603, 31.80901], [35.18169, 31.82542], [35.19461, 31.82687], [35.21469, 31.81835], [35.216, 31.83894], [35.21128, 31.863], [35.20381, 31.86716], [35.20673, 31.88151], [35.20791, 31.8821], [35.20945, 31.8815], [35.21016, 31.88237], [35.21276, 31.88153], [35.2136, 31.88241], [35.22014, 31.88264], [35.22294, 31.87889], [35.22567, 31.86745], [35.22817, 31.8638], [35.2249, 31.85433], [35.2304, 31.84222], [35.24816, 31.8458], [35.25753, 31.8387], [35.251, 31.83085], [35.26404, 31.82567], [35.25573, 31.81362], [35.26058, 31.79064], [35.25225, 31.7678], [35.26319, 31.74846], [35.25182, 31.73945], [35.24981, 31.72543], [35.2438, 31.7201], [35.24315, 31.71244], [35.23972, 31.70896], [35.22392, 31.71899], [35.21937, 31.71578], [35.20538, 31.72388], [35.18023, 31.72067], [35.16478, 31.73242], [35.15474, 31.73352], [35.15119, 31.73634], [35.13931, 31.73012], [35.12933, 31.7325], [35.11895, 31.71454], [35.10782, 31.71594], [35.08226, 31.69107], [35.00879, 31.65426], [34.95249, 31.59813], [34.9415, 31.55601], [34.94356, 31.50743], [34.93258, 31.47816], [34.89756, 31.43891], [34.87833, 31.39321], [34.88932, 31.37093], [34.92571, 31.34337], [35.02459, 31.35979], [35.13033, 31.3551], [35.22921, 31.37445], [35.39675, 31.49572], [35.47672, 31.49578]]]] } },
-    { type: "Feature", properties: { wikidata: "Q37362", nameEn: "Akrotiri and Dhekelia", aliases: ["SBA"], country: "GB" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q38095", nameEn: "Gal\xE1pagos Islands", aliases: ["EC-W"], country: "EC", groups: ["005", "419", "019", "UN"], callingCodes: ["593"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-93.12365, 2.64343], [-92.46744, -2.52874], [-87.07749, -0.8849], [-93.12365, 2.64343]]]] } },
-    { type: "Feature", properties: { wikidata: "Q39760", nameEn: "Gaza Strip", country: "PS", groups: ["145", "142"], callingCodes: ["970"] }, geometry: { type: "MultiPolygon", coordinates: [[[[34.052, 31.46619], [34.21853, 31.32363], [34.23572, 31.2966], [34.24012, 31.29591], [34.26742, 31.21998], [34.29417, 31.24194], [34.36523, 31.28963], [34.37381, 31.30598], [34.36505, 31.36404], [34.40077, 31.40926], [34.48892, 31.48365], [34.56797, 31.54197], [34.48681, 31.59711], [34.29262, 31.70393], [34.052, 31.46619]]]] } },
-    { type: "Feature", properties: { wikidata: "Q40888", nameEn: "Andaman and Nicobar Islands", aliases: ["IN-AN"], country: "IN", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["91"] }, geometry: { type: "MultiPolygon", coordinates: [[[[94.42132, 5.96581], [94.6371, 13.81803], [86.7822, 13.41052], [94.42132, 5.96581]]]] } },
-    { type: "Feature", properties: { wikidata: "Q41684", nameEn: "Stewart Island", country: "NZ", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[166.59185, -47.61313], [169.70504, -47.56021], [167.52103, -46.41337], [166.59185, -47.61313]]]] } },
-    { type: "Feature", properties: { wikidata: "Q43296", nameEn: "Wake Island", aliases: ["WK", "WAK", "WKUM", "872", "UM-79"], country: "US", groups: ["UM", "Q1352230", "057", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[167.34779, 18.97692], [166.67967, 20.14834], [165.82549, 18.97692], [167.34779, 18.97692]]]] } },
-    { type: "Feature", properties: { wikidata: "Q46275", nameEn: "New Zealand Subantarctic Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[164.30551, -47.88072], [161.96603, -56.07661], [179.49541, -50.04657], [179.49541, -47.2902], [169.91032, -47.66283], [164.30551, -47.88072]]]] } },
-    { type: "Feature", properties: { wikidata: "Q46395", nameEn: "British Overseas Territories", aliases: ["BOTS", "UKOTS"], country: "GB", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q46772", nameEn: "Kerguelen Islands", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[61.9216, -49.39746], [70.67507, -51.14192], [74.25129, -45.45074], [61.9216, -49.39746]]]] } },
-    { type: "Feature", properties: { wikidata: "Q46879", nameEn: "Baker Island", aliases: ["UM-81"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-175.33482, -1.40631], [-175.31323, 0.5442], [-177.91421, 0.39582], [-175.33482, -1.40631]]]] } },
-    { type: "Feature", properties: { wikidata: "Q47863", nameEn: "Midway Atoll", aliases: ["MI", "MID", "MIUM", "488", "UM-71"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-176.29741, 29.09786], [-177.77531, 29.29793], [-177.5224, 27.7635], [-176.29741, 29.09786]]]] } },
-    { type: "Feature", properties: { wikidata: "Q62218", nameEn: "Jarvis Island", aliases: ["UM-86"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-160.42921, -1.4364], [-159.12443, 0.19975], [-160.38779, 0.30331], [-160.42921, -1.4364]]]] } },
-    { type: "Feature", properties: { wikidata: "Q105472", nameEn: "Macaronesia", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q114935", nameEn: "Kermadec Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-174.40891, -29.09438], [-180, -24.21376], [-179.96512, -35.00791], [-174.40891, -29.09438]]]] } },
-    { type: "Feature", properties: { wikidata: "Q115459", nameEn: "Chatham Islands", aliases: ["NZ-CIT"], country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-179.93224, -45.18423], [-172.47015, -45.17912], [-176.30998, -41.38382], [-179.93224, -45.18423]]]] } },
-    { type: "Feature", properties: { wikidata: "Q118863", nameEn: "North Island", country: "NZ", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[179.49541, -47.2902], [179.49541, -36.79303], [174.17679, -32.62487], [170.27492, -36.38133], [174.58663, -40.80446], [174.46634, -41.55028], [179.49541, -47.2902]]]] } },
-    { type: "Feature", properties: { wikidata: "Q120755", nameEn: "South Island", country: "NZ", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169.70504, -47.56021], [179.49541, -47.2902], [174.46634, -41.55028], [174.58663, -40.80446], [170.27492, -36.38133], [166.56976, -39.94841], [164.8365, -46.0205], [167.52103, -46.41337], [169.70504, -47.56021]]]] } },
-    { type: "Feature", properties: { wikidata: "Q123076", nameEn: "Palmyra Atoll", aliases: ["UM-95"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-161.06795, 5.2462], [-161.0731, 7.1291], [-163.24478, 5.24198], [-161.06795, 5.2462]]]] } },
-    { type: "Feature", properties: { wikidata: "Q130574", nameEn: "Chafarinas Islands", country: "ES", groups: ["EU", "Q191011", "015", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.40316, 35.16893], [-2.43262, 35.20652], [-2.45965, 35.16527], [-2.40316, 35.16893]]]] } },
-    { type: "Feature", properties: { wikidata: "Q130895", nameEn: "Kingman Reef", aliases: ["UM-89"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-161.0731, 7.1291], [-163.16627, 7.15036], [-163.24478, 5.24198], [-161.0731, 7.1291]]]] } },
-    { type: "Feature", properties: { wikidata: "Q131008", nameEn: "Johnston Atoll", aliases: ["JT", "JTN", "JTUM", "396", "UM-67"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-170.65691, 16.57199], [-168.87689, 16.01159], [-169.2329, 17.4933], [-170.65691, 16.57199]]]] } },
-    { type: "Feature", properties: { wikidata: "Q131305", nameEn: "Howland Island", aliases: ["UM-84"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-177.91421, 0.39582], [-175.31323, 0.5442], [-176.74464, 2.28109], [-177.91421, 0.39582]]]] } },
-    { type: "Feature", properties: { wikidata: "Q133888", nameEn: "Ashmore and Cartier Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[123.7463, -11.1783], [120.6877, -13.59408], [125.29076, -12.33139], [123.7463, -11.1783]]]] } },
-    { type: "Feature", properties: { wikidata: "Q153732", nameEn: "Mariana Islands", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q172216", nameEn: "Coral Sea Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[159.77159, -28.41151], [156.73836, -14.50464], [145.2855, -9.62524], [147.69992, -17.5933], [152.93188, -20.92631], [154.02855, -24.43238], [159.77159, -28.41151]]]] } },
-    { type: "Feature", properties: { wikidata: "Q179313", nameEn: "Alderney", country: "GB", groups: ["GG", "830", "Q185086", "154", "150", "UN"], level: "subterritory", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01481"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.36485, 49.48223], [-2.09454, 49.46288], [-2.02963, 49.91866], [-2.49556, 49.79012], [-2.36485, 49.48223]]]] } },
-    { type: "Feature", properties: { wikidata: "Q185086", nameEn: "Crown Dependencies", country: "GB", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q190571", nameEn: "Scattered Islands", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[53.53458, -16.36909], [54.96649, -16.28353], [54.61476, -15.02273], [53.53458, -16.36909]]], [[[38.55969, -20.75596], [40.68027, -23.38889], [43.52893, -15.62903], [38.55969, -20.75596]]], [[[47.03092, -11.05648], [47.11593, -12.08552], [47.96702, -11.46447], [47.03092, -11.05648]]]] } },
-    { type: "Feature", properties: { wikidata: "Q191011", nameEn: "Plazas de soberan\xEDa", country: "ES" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q191146", nameEn: "Pe\xF1\xF3n de V\xE9lez de la Gomera", country: "ES", groups: ["EU", "Q191011", "015", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-4.30191, 35.17419], [-4.30112, 35.17058], [-4.29436, 35.17149], [-4.30191, 35.17419]]]] } },
-    { type: "Feature", properties: { wikidata: "Q201698", nameEn: "Crozet Islands", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[55.03425, -43.65017], [46.31615, -46.28749], [54.5587, -47.93013], [55.03425, -43.65017]]]] } },
-    { type: "Feature", properties: { wikidata: "Q578170", nameEn: "Contiguous United States", aliases: ["CONUS"], country: "US", groups: ["Q35657", "021", "003", "019", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-97.13927, 25.96583], [-96.92418, 25.97377], [-80.57035, 24.0565], [-78.91214, 27.76553], [-61.98255, 37.34815], [-67.16117, 44.20069], [-66.93432, 44.82597], [-66.96824, 44.83078], [-66.98249, 44.87071], [-66.96824, 44.90965], [-67.0216, 44.95333], [-67.11316, 45.11176], [-67.15965, 45.16179], [-67.19603, 45.16771], [-67.20349, 45.1722], [-67.22751, 45.16344], [-67.27039, 45.1934], [-67.29748, 45.18173], [-67.29754, 45.14865], [-67.34927, 45.122], [-67.48201, 45.27351], [-67.42394, 45.37969], [-67.50578, 45.48971], [-67.42144, 45.50584], [-67.43815, 45.59162], [-67.6049, 45.60725], [-67.80705, 45.69528], [-67.80653, 45.80022], [-67.75654, 45.82324], [-67.80961, 45.87531], [-67.75196, 45.91814], [-67.78111, 45.9392], [-67.78578, 47.06473], [-67.87993, 47.10377], [-67.94843, 47.1925], [-68.23244, 47.35712], [-68.37458, 47.35851], [-68.38332, 47.28723], [-68.57914, 47.28431], [-68.60575, 47.24659], [-68.70125, 47.24399], [-68.89222, 47.1807], [-69.05039, 47.2456], [-69.05073, 47.30076], [-69.05148, 47.42012], [-69.22119, 47.46461], [-69.99966, 46.69543], [-70.05812, 46.41768], [-70.18547, 46.35357], [-70.29078, 46.18832], [-70.23855, 46.1453], [-70.31025, 45.96424], [-70.24694, 45.95138], [-70.25976, 45.89675], [-70.41523, 45.79497], [-70.38934, 45.73215], [-70.54019, 45.67291], [-70.68516, 45.56964], [-70.72651, 45.49771], [-70.62518, 45.42286], [-70.65383, 45.37592], [-70.78372, 45.43269], [-70.82638, 45.39828], [-70.80236, 45.37444], [-70.84816, 45.22698], [-70.89864, 45.2398], [-70.91169, 45.29849], [-70.95193, 45.33895], [-71.0107, 45.34819], [-71.01866, 45.31573], [-71.08364, 45.30623], [-71.14568, 45.24128], [-71.19723, 45.25438], [-71.22338, 45.25184], [-71.29371, 45.29996], [-71.37133, 45.24624], [-71.44252, 45.2361], [-71.40364, 45.21382], [-71.42778, 45.12624], [-71.48735, 45.07784], [-71.50067, 45.01357], [-73.35025, 45.00942], [-74.32699, 44.99029], [-74.66689, 45.00646], [-74.8447, 45.00606], [-74.99101, 44.98051], [-75.01363, 44.95608], [-75.2193, 44.87821], [-75.41441, 44.76614], [-75.76813, 44.51537], [-75.8217, 44.43176], [-75.95947, 44.34463], [-76.00018, 44.34896], [-76.16285, 44.28262], [-76.1664, 44.23051], [-76.244, 44.19643], [-76.31222, 44.19894], [-76.35324, 44.13493], [-76.43859, 44.09393], [-76.79706, 43.63099], [-79.25796, 43.54052], [-79.06921, 43.26183], [-79.05512, 43.25375], [-79.05544, 43.21224], [-79.05002, 43.20133], [-79.05384, 43.17418], [-79.04652, 43.16396], [-79.0427, 43.13934], [-79.06881, 43.12029], [-79.05671, 43.10937], [-79.07486, 43.07845], [-79.01055, 43.06659], [-78.99941, 43.05612], [-79.02424, 43.01983], [-79.02074, 42.98444], [-78.98126, 42.97], [-78.96312, 42.95509], [-78.93224, 42.95229], [-78.90905, 42.93022], [-78.90712, 42.89733], [-78.93684, 42.82887], [-82.67862, 41.67615], [-83.11184, 41.95671], [-83.14962, 42.04089], [-83.12724, 42.2376], [-83.09837, 42.28877], [-83.07837, 42.30978], [-83.02253, 42.33045], [-82.82964, 42.37355], [-82.64242, 42.55594], [-82.58873, 42.54984], [-82.57583, 42.5718], [-82.51858, 42.611], [-82.51063, 42.66025], [-82.46613, 42.76615], [-82.4826, 42.8068], [-82.45331, 42.93139], [-82.4253, 42.95423], [-82.4146, 42.97626], [-82.42469, 42.992], [-82.48419, 45.30225], [-83.59589, 45.82131], [-83.43746, 45.99749], [-83.57017, 46.105], [-83.83329, 46.12169], [-83.90453, 46.05922], [-83.95399, 46.05634], [-84.1096, 46.23987], [-84.09756, 46.25512], [-84.11615, 46.2681], [-84.11254, 46.32329], [-84.13451, 46.39218], [-84.11196, 46.50248], [-84.12885, 46.53068], [-84.17723, 46.52753], [-84.1945, 46.54061], [-84.2264, 46.53337], [-84.26351, 46.49508], [-84.29893, 46.49127], [-84.34174, 46.50683], [-84.42101, 46.49853], [-84.4481, 46.48972], [-84.47607, 46.45225], [-84.55635, 46.45974], [-84.85871, 46.88881], [-88.37033, 48.30586], [-89.48837, 48.01412], [-89.57972, 48.00023], [-89.77248, 48.02607], [-89.89974, 47.98109], [-90.07418, 48.11043], [-90.56312, 48.09488], [-90.56444, 48.12184], [-90.75045, 48.09143], [-90.87588, 48.2484], [-91.08016, 48.18096], [-91.25025, 48.08522], [-91.43248, 48.04912], [-91.45829, 48.07454], [-91.58025, 48.04339], [-91.55649, 48.10611], [-91.70451, 48.11805], [-91.71231, 48.19875], [-91.86125, 48.21278], [-91.98929, 48.25409], [-92.05339, 48.35958], [-92.14732, 48.36578], [-92.202, 48.35252], [-92.26662, 48.35651], [-92.30939, 48.31251], [-92.27167, 48.25046], [-92.37185, 48.22259], [-92.48147, 48.36609], [-92.45588, 48.40624], [-92.50712, 48.44921], [-92.65606, 48.43471], [-92.71323, 48.46081], [-92.69927, 48.49573], [-92.62747, 48.50278], [-92.6342, 48.54133], [-92.7287, 48.54005], [-92.94973, 48.60866], [-93.25391, 48.64266], [-93.33946, 48.62787], [-93.3712, 48.60599], [-93.39758, 48.60364], [-93.40693, 48.60948], [-93.44472, 48.59147], [-93.47022, 48.54357], [-93.66382, 48.51845], [-93.79267, 48.51631], [-93.80939, 48.52439], [-93.80676, 48.58232], [-93.83288, 48.62745], [-93.85769, 48.63284], [-94.23215, 48.65202], [-94.25104, 48.65729], [-94.25172, 48.68404], [-94.27153, 48.70232], [-94.4174, 48.71049], [-94.44258, 48.69223], [-94.53826, 48.70216], [-94.54885, 48.71543], [-94.58903, 48.71803], [-94.69335, 48.77883], [-94.69669, 48.80918], [-94.70486, 48.82365], [-94.70087, 48.8339], [-94.687, 48.84077], [-94.75017, 49.09931], [-94.77355, 49.11998], [-94.82487, 49.29483], [-94.8159, 49.32299], [-94.85381, 49.32492], [-94.95681, 49.37035], [-94.99532, 49.36579], [-95.01419, 49.35647], [-95.05825, 49.35311], [-95.12903, 49.37056], [-95.15357, 49.384], [-95.15355, 48.9996], [-123.32163, 49.00419], [-123.0093, 48.83186], [-123.0093, 48.76586], [-123.26565, 48.6959], [-123.15614, 48.35395], [-123.50039, 48.21223], [-125.03842, 48.53282], [-133.98258, 38.06389], [-118.48109, 32.5991], [-117.1243, 32.53427], [-115.88053, 32.63624], [-114.71871, 32.71894], [-114.76736, 32.64094], [-114.80584, 32.62028], [-114.81141, 32.55543], [-114.79524, 32.55731], [-114.82011, 32.49609], [-111.07523, 31.33232], [-108.20979, 31.33316], [-108.20899, 31.78534], [-106.529, 31.784], [-106.52266, 31.77509], [-106.51251, 31.76922], [-106.50962, 31.76155], [-106.50111, 31.75714], [-106.48815, 31.74769], [-106.47298, 31.75054], [-106.46726, 31.75998], [-106.45244, 31.76523], [-106.43419, 31.75478], [-106.41773, 31.75196], [-106.38003, 31.73151], [-106.3718, 31.71165], [-106.34864, 31.69663], [-106.33419, 31.66303], [-106.30305, 31.62154], [-106.28084, 31.56173], [-106.24612, 31.54193], [-106.23711, 31.51262], [-106.20346, 31.46305], [-106.09025, 31.40569], [-106.00363, 31.39181], [-104.77674, 30.4236], [-104.5171, 29.64671], [-104.3969, 29.57105], [-104.39363, 29.55396], [-104.37752, 29.54255], [-103.15787, 28.93865], [-102.60596, 29.8192], [-101.47277, 29.7744], [-101.05686, 29.44738], [-101.01128, 29.36947], [-100.96725, 29.3477], [-100.94579, 29.34523], [-100.94056, 29.33371], [-100.87982, 29.296], [-100.79696, 29.24688], [-100.67294, 29.09744], [-100.63689, 28.90812], [-100.59809, 28.88197], [-100.52313, 28.75598], [-100.5075, 28.74066], [-100.51222, 28.70679], [-100.50029, 28.66117], [-99.55409, 27.61314], [-99.51478, 27.55836], [-99.52955, 27.49747], [-99.50208, 27.50021], [-99.48045, 27.49016], [-99.482, 27.47128], [-99.49744, 27.43746], [-99.53573, 27.30926], [-99.08477, 26.39849], [-99.03053, 26.41249], [-99.00546, 26.3925], [-98.35126, 26.15129], [-98.30491, 26.10475], [-98.27075, 26.09457], [-98.24603, 26.07191], [-97.97017, 26.05232], [-97.95155, 26.0625], [-97.66511, 26.01708], [-97.52025, 25.88518], [-97.49828, 25.89877], [-97.45669, 25.86874], [-97.42511, 25.83969], [-97.37332, 25.83854], [-97.35946, 25.92189], [-97.13927, 25.96583]]]] } },
-    { type: "Feature", properties: { wikidata: "Q620634", nameEn: "Bir Tawil", groups: ["015", "002"], level: "territory" }, geometry: { type: "MultiPolygon", coordinates: [[[[33.17563, 22.00405], [33.57251, 21.72406], [33.99686, 21.76784], [34.0765, 22.00501], [33.17563, 22.00405]]]] } },
-    { type: "Feature", properties: { wikidata: "Q639185", nameEn: "Peros Banhos", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[72.12587, -4.02588], [70.1848, -6.37445], [72.09518, -5.61768], [72.12587, -4.02588]]]] } },
-    { type: "Feature", properties: { wikidata: "Q644636", nameEn: "Cyprus", level: "sharedLandform" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q851132", nameEn: "New Zealand Outlying Islands", country: "NZ", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q875134", nameEn: "European Russia", country: "RU", groups: ["151", "150", "UN"], callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[18.57853, 55.25302], [19.64312, 54.45423], [19.8038, 54.44203], [20.63871, 54.3706], [21.41123, 54.32395], [22.79705, 54.36264], [22.7253, 54.41732], [22.70208, 54.45312], [22.67788, 54.532], [22.71293, 54.56454], [22.68021, 54.58486], [22.7522, 54.63525], [22.74225, 54.64339], [22.75467, 54.6483], [22.73397, 54.66604], [22.73631, 54.72952], [22.87317, 54.79492], [22.85083, 54.88711], [22.76422, 54.92521], [22.68723, 54.9811], [22.65451, 54.97037], [22.60075, 55.01863], [22.58907, 55.07085], [22.47688, 55.04408], [22.31562, 55.0655], [22.14267, 55.05345], [22.11697, 55.02131], [22.06087, 55.02935], [22.02582, 55.05078], [22.03984, 55.07888], [21.99543, 55.08691], [21.96505, 55.07353], [21.85521, 55.09493], [21.64954, 55.1791], [21.55605, 55.20311], [21.51095, 55.18507], [21.46766, 55.21115], [21.38446, 55.29348], [21.35465, 55.28427], [21.26425, 55.24456], [20.95181, 55.27994], [20.60454, 55.40986], [18.57853, 55.25302]]], [[[26.32936, 60.00121], [26.90044, 59.63819], [27.85643, 59.58538], [28.04187, 59.47017], [28.19061, 59.39962], [28.21137, 59.38058], [28.20537, 59.36491], [28.19284, 59.35791], [28.14215, 59.28934], [28.00689, 59.28351], [27.90911, 59.24353], [27.87978, 59.18097], [27.80482, 59.1116], [27.74429, 58.98351], [27.36366, 58.78381], [27.55489, 58.39525], [27.48541, 58.22615], [27.62393, 58.09462], [27.67282, 57.92627], [27.81841, 57.89244], [27.78526, 57.83963], [27.56689, 57.83356], [27.50171, 57.78842], [27.52615, 57.72843], [27.3746, 57.66834], [27.40393, 57.62125], [27.31919, 57.57672], [27.34698, 57.52242], [27.56832, 57.53728], [27.52453, 57.42826], [27.86101, 57.29402], [27.66511, 56.83921], [27.86101, 56.88204], [28.04768, 56.59004], [28.13526, 56.57989], [28.10069, 56.524], [28.19057, 56.44637], [28.16599, 56.37806], [28.23716, 56.27588], [28.15217, 56.16964], [28.30571, 56.06035], [28.36888, 56.05805], [28.37987, 56.11399], [28.43068, 56.09407], [28.5529, 56.11705], [28.68337, 56.10173], [28.63668, 56.07262], [28.73418, 55.97131], [29.08299, 56.03427], [29.21717, 55.98971], [29.44692, 55.95978], [29.3604, 55.75862], [29.51283, 55.70294], [29.61446, 55.77716], [29.80672, 55.79569], [29.97975, 55.87281], [30.12136, 55.8358], [30.27776, 55.86819], [30.30987, 55.83592], [30.48257, 55.81066], [30.51346, 55.78982], [30.51037, 55.76568], [30.63344, 55.73079], [30.67464, 55.64176], [30.72957, 55.66268], [30.7845, 55.58514], [30.86003, 55.63169], [30.93419, 55.6185], [30.95204, 55.50667], [30.90123, 55.46621], [30.93144, 55.3914], [30.8257, 55.3313], [30.81946, 55.27931], [30.87944, 55.28223], [30.97369, 55.17134], [31.02071, 55.06167], [31.00972, 55.02783], [30.94243, 55.03964], [30.9081, 55.02232], [30.95754, 54.98609], [30.93144, 54.9585], [30.81759, 54.94064], [30.8264, 54.90062], [30.75165, 54.80699], [30.95479, 54.74346], [30.97127, 54.71967], [31.0262, 54.70698], [30.98226, 54.68872], [30.99187, 54.67046], [31.19339, 54.66947], [31.21399, 54.63113], [31.08543, 54.50361], [31.22945, 54.46585], [31.3177, 54.34067], [31.30791, 54.25315], [31.57002, 54.14535], [31.89599, 54.0837], [31.88744, 54.03653], [31.85019, 53.91801], [31.77028, 53.80015], [31.89137, 53.78099], [32.12621, 53.81586], [32.36663, 53.7166], [32.45717, 53.74039], [32.50112, 53.68594], [32.40499, 53.6656], [32.47777, 53.5548], [32.74968, 53.45597], [32.73257, 53.33494], [32.51725, 53.28431], [32.40773, 53.18856], [32.15368, 53.07594], [31.82373, 53.10042], [31.787, 53.18033], [31.62496, 53.22886], [31.56316, 53.19432], [31.40523, 53.21406], [31.36403, 53.13504], [31.3915, 53.09712], [31.33519, 53.08805], [31.32283, 53.04101], [31.24147, 53.031], [31.35667, 52.97854], [31.592, 52.79011], [31.57277, 52.71613], [31.50406, 52.69707], [31.63869, 52.55361], [31.56316, 52.51518], [31.61397, 52.48843], [31.62084, 52.33849], [31.57971, 52.32146], [31.70735, 52.26711], [31.6895, 52.1973], [31.77877, 52.18636], [31.7822, 52.11406], [31.81722, 52.09955], [31.85018, 52.11305], [31.96141, 52.08015], [31.92159, 52.05144], [32.08813, 52.03319], [32.23331, 52.08085], [32.2777, 52.10266], [32.34044, 52.1434], [32.33083, 52.23685], [32.38988, 52.24946], [32.3528, 52.32842], [32.54781, 52.32423], [32.69475, 52.25535], [32.85405, 52.27888], [32.89937, 52.2461], [33.18913, 52.3754], [33.51323, 52.35779], [33.48027, 52.31499], [33.55718, 52.30324], [33.78789, 52.37204], [34.05239, 52.20132], [34.11199, 52.14087], [34.09413, 52.00835], [34.41136, 51.82793], [34.42922, 51.72852], [34.07765, 51.67065], [34.17599, 51.63253], [34.30562, 51.5205], [34.22048, 51.4187], [34.33446, 51.363], [34.23009, 51.26429], [34.31661, 51.23936], [34.38802, 51.2746], [34.6613, 51.25053], [34.6874, 51.18], [34.82472, 51.17483], [34.97304, 51.2342], [35.14058, 51.23162], [35.12685, 51.16191], [35.20375, 51.04723], [35.31774, 51.08434], [35.40837, 51.04119], [35.32598, 50.94524], [35.39307, 50.92145], [35.41367, 50.80227], [35.47704, 50.77274], [35.48116, 50.66405], [35.39464, 50.64751], [35.47463, 50.49247], [35.58003, 50.45117], [35.61711, 50.35707], [35.73659, 50.35489], [35.80388, 50.41356], [35.8926, 50.43829], [36.06893, 50.45205], [36.20763, 50.3943], [36.30101, 50.29088], [36.47817, 50.31457], [36.58371, 50.28563], [36.56655, 50.2413], [36.64571, 50.218], [36.69377, 50.26982], [36.91762, 50.34963], [37.08468, 50.34935], [37.48204, 50.46079], [37.47243, 50.36277], [37.62486, 50.29966], [37.62879, 50.24481], [37.61113, 50.21976], [37.75807, 50.07896], [37.79515, 50.08425], [37.90776, 50.04194], [38.02999, 49.94482], [38.02999, 49.90592], [38.21675, 49.98104], [38.18517, 50.08161], [38.32524, 50.08866], [38.35408, 50.00664], [38.65688, 49.97176], [38.68677, 50.00904], [38.73311, 49.90238], [38.90477, 49.86787], [38.9391, 49.79524], [39.1808, 49.88911], [39.27968, 49.75976], [39.44496, 49.76067], [39.59142, 49.73758], [39.65047, 49.61761], [39.84548, 49.56064], [40.13249, 49.61672], [40.16683, 49.56865], [40.03636, 49.52321], [40.03087, 49.45452], [40.1141, 49.38798], [40.14912, 49.37681], [40.18331, 49.34996], [40.22176, 49.25683], [40.01988, 49.1761], [39.93437, 49.05709], [39.6836, 49.05121], [39.6683, 48.99454], [39.71353, 48.98959], [39.72649, 48.9754], [39.74874, 48.98675], [39.78368, 48.91596], [39.98967, 48.86901], [40.03636, 48.91957], [40.08168, 48.87443], [39.97182, 48.79398], [39.79466, 48.83739], [39.73104, 48.7325], [39.71765, 48.68673], [39.67226, 48.59368], [39.79764, 48.58668], [39.84548, 48.57821], [39.86196, 48.46633], [39.88794, 48.44226], [39.94847, 48.35055], [39.84136, 48.33321], [39.84273, 48.30947], [39.90041, 48.3049], [39.91465, 48.26743], [39.95248, 48.29972], [39.9693, 48.29904], [39.97325, 48.31399], [39.99241, 48.31768], [40.00752, 48.22445], [39.94847, 48.22811], [39.83724, 48.06501], [39.88256, 48.04482], [39.77544, 48.04206], [39.82213, 47.96396], [39.73935, 47.82876], [38.87979, 47.87719], [38.79628, 47.81109], [38.76379, 47.69346], [38.35062, 47.61631], [38.28679, 47.53552], [38.28954, 47.39255], [38.22225, 47.30788], [38.33074, 47.30508], [38.32112, 47.2585], [38.23049, 47.2324], [38.22955, 47.12069], [38.3384, 46.98085], [38.12112, 46.86078], [37.62608, 46.82615], [35.23066, 45.79231], [35.04991, 45.76827], [36.6645, 45.4514], [36.6545, 45.3417], [36.5049, 45.3136], [36.475, 45.2411], [36.4883, 45.0488], [33.5943, 44.03313], [39.81147, 43.06294], [40.0078, 43.38551], [40.00853, 43.40578], [40.01552, 43.42025], [40.01007, 43.42411], [40.03312, 43.44262], [40.04445, 43.47776], [40.10657, 43.57344], [40.65957, 43.56212], [41.64935, 43.22331], [42.40563, 43.23226], [42.66667, 43.13917], [42.75889, 43.19651], [43.03322, 43.08883], [43.0419, 43.02413], [43.81453, 42.74297], [43.73119, 42.62043], [43.95517, 42.55396], [44.54202, 42.75699], [44.70002, 42.74679], [44.80941, 42.61277], [44.88754, 42.74934], [45.15318, 42.70598], [45.36501, 42.55268], [45.78692, 42.48358], [45.61676, 42.20768], [46.42738, 41.91323], [46.5332, 41.87389], [46.58924, 41.80547], [46.75269, 41.8623], [46.8134, 41.76252], [47.00955, 41.63583], [46.99554, 41.59743], [47.03757, 41.55434], [47.10762, 41.59044], [47.34579, 41.27884], [47.49004, 41.26366], [47.54504, 41.20275], [47.62288, 41.22969], [47.75831, 41.19455], [47.87973, 41.21798], [48.07587, 41.49957], [48.22064, 41.51472], [48.2878, 41.56221], [48.40277, 41.60441], [48.42301, 41.65444], [48.55078, 41.77917], [48.5867, 41.84306], [48.80971, 41.95365], [49.2134, 44.84989], [49.88945, 46.04554], [49.32259, 46.26944], [49.16518, 46.38542], [48.54988, 46.56267], [48.51142, 46.69268], [49.01136, 46.72716], [48.52326, 47.4102], [48.45173, 47.40818], [48.15348, 47.74545], [47.64973, 47.76559], [47.41689, 47.83687], [47.38731, 47.68176], [47.12107, 47.83687], [47.11516, 48.27188], [46.49011, 48.43019], [46.78392, 48.95352], [47.00857, 49.04921], [47.04658, 49.19834], [46.78398, 49.34026], [46.9078, 49.86707], [47.18319, 49.93721], [47.34589, 50.09308], [47.30448, 50.30894], [47.58551, 50.47867], [48.10044, 50.09242], [48.24519, 49.86099], [48.42564, 49.82283], [48.68352, 49.89546], [48.90782, 50.02281], [48.57946, 50.63278], [48.86936, 50.61589], [49.12673, 50.78639], [49.41959, 50.85927], [49.39001, 51.09396], [49.76866, 51.11067], [49.97277, 51.2405], [50.26859, 51.28677], [50.59695, 51.61859], [51.26254, 51.68466], [51.301, 51.48799], [51.77431, 51.49536], [51.8246, 51.67916], [52.36119, 51.74161], [52.54329, 51.48444], [53.46165, 51.49445], [53.69299, 51.23466], [54.12248, 51.11542], [54.46331, 50.85554], [54.41894, 50.61214], [54.55797, 50.52006], [54.71476, 50.61214], [54.56685, 51.01958], [54.72067, 51.03261], [55.67774, 50.54508], [56.11398, 50.7471], [56.17906, 50.93204], [57.17302, 51.11253], [57.44221, 50.88354], [57.74986, 50.93017], [57.75578, 51.13852], [58.3208, 51.15151], [58.87974, 50.70852], [59.48928, 50.64216], [59.51886, 50.49937], [59.81172, 50.54451], [60.01288, 50.8163], [60.17262, 50.83312], [60.31914, 50.67705], [60.81833, 50.6629], [61.4431, 50.80679], [61.56889, 51.23679], [61.6813, 51.25716], [61.55114, 51.32746], [61.50677, 51.40687], [60.95655, 51.48615], [60.92401, 51.61124], [60.5424, 51.61675], [60.36787, 51.66815], [60.50986, 51.7964], [60.09867, 51.87135], [59.99809, 51.98263], [59.91279, 52.06924], [60.17253, 52.25814], [60.17516, 52.39457], [59.25033, 52.46803], [59.22409, 52.28437], [58.79644, 52.43392], [58.94336, 53.953], [59.70487, 54.14846], [59.95217, 54.85853], [57.95234, 54.39672], [57.14829, 54.84204], [57.25137, 55.26262], [58.81825, 55.03378], [59.49035, 55.60486], [59.28419, 56.15739], [57.51527, 56.08729], [57.28024, 56.87898], [58.07604, 57.08308], [58.13789, 57.68097], [58.81412, 57.71602], [58.71104, 58.07475], [59.40376, 58.45822], [59.15636, 59.14682], [58.3853, 59.487], [59.50685, 60.91162], [59.36223, 61.3882], [59.61398, 62.44915], [59.24834, 63.01859], [59.80579, 64.13948], [59.63945, 64.78384], [60.74386, 64.95767], [61.98014, 65.72191], [66.1708, 67.61252], [64.18965, 69.94255], [76.13964, 83.37843], [36.85549, 84.09565], [32.07813, 72.01005], [31.59909, 70.16571], [30.84095, 69.80584], [30.95011, 69.54699], [30.52662, 69.54699], [30.16363, 69.65244], [29.97205, 69.41623], [29.27631, 69.2811], [29.26623, 69.13794], [29.0444, 69.0119], [28.91738, 69.04774], [28.45957, 68.91417], [28.78224, 68.86696], [28.43941, 68.53366], [28.62982, 68.19816], [29.34179, 68.06655], [29.66955, 67.79872], [30.02041, 67.67523], [29.91155, 67.51507], [28.9839, 66.94139], [29.91155, 66.13863], [30.16363, 65.66935], [29.97205, 65.70256], [29.74013, 65.64025], [29.84096, 65.56945], [29.68972, 65.31803], [29.61914, 65.23791], [29.8813, 65.22101], [29.84096, 65.1109], [29.61914, 65.05993], [29.68972, 64.80789], [30.05271, 64.79072], [30.12329, 64.64862], [30.01238, 64.57513], [30.06279, 64.35782], [30.4762, 64.25728], [30.55687, 64.09036], [30.25437, 63.83364], [29.98213, 63.75795], [30.49637, 63.46666], [31.23244, 63.22239], [31.29294, 63.09035], [31.58535, 62.91642], [31.38369, 62.66284], [31.10136, 62.43042], [29.01829, 61.17448], [28.82816, 61.1233], [28.47974, 60.93365], [27.77352, 60.52722], [27.71177, 60.3893], [27.44953, 60.22766], [26.32936, 60.00121]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1083368", nameEn: "Mainland Finland", country: "FI", groups: ["EU", "154", "150", "UN"], callingCodes: ["358"] }, geometry: { type: "MultiPolygon", coordinates: [[[[29.12697, 69.69193], [28.36883, 69.81658], [28.32849, 69.88605], [27.97558, 69.99671], [27.95542, 70.0965], [27.57226, 70.06215], [27.05802, 69.92069], [26.64461, 69.96565], [26.40261, 69.91377], [25.96904, 69.68397], [25.69679, 69.27039], [25.75729, 68.99383], [25.61613, 68.89602], [25.42455, 68.90328], [25.12206, 68.78684], [25.10189, 68.63307], [24.93048, 68.61102], [24.90023, 68.55579], [24.74898, 68.65143], [24.18432, 68.73936], [24.02299, 68.81601], [23.781, 68.84514], [23.68017, 68.70276], [23.13064, 68.64684], [22.53321, 68.74393], [22.38367, 68.71561], [22.27276, 68.89514], [21.63833, 69.27485], [21.27827, 69.31281], [21.00732, 69.22755], [20.98641, 69.18809], [21.11099, 69.10291], [21.05775, 69.0356], [20.72171, 69.11874], [20.55258, 69.06069], [20.78802, 69.03087], [20.91658, 68.96764], [20.85104, 68.93142], [20.90649, 68.89696], [21.03001, 68.88969], [22.00429, 68.50692], [22.73028, 68.40881], [23.10336, 68.26551], [23.15377, 68.14759], [23.26469, 68.15134], [23.40081, 68.05545], [23.65793, 67.9497], [23.45627, 67.85297], [23.54701, 67.59306], [23.39577, 67.46974], [23.75372, 67.43688], [23.75372, 67.29914], [23.54701, 67.25435], [23.58735, 67.20752], [23.56214, 67.17038], [23.98563, 66.84149], [23.98059, 66.79585], [23.89488, 66.772], [23.85959, 66.56434], [23.63776, 66.43568], [23.67591, 66.3862], [23.64982, 66.30603], [23.71339, 66.21299], [23.90497, 66.15802], [24.15791, 65.85385], [24.14798, 65.83466], [24.15107, 65.81427], [24.14112, 65.39731], [20.15877, 63.06556], [19.23413, 60.61414], [20.96741, 60.71528], [21.15143, 60.54555], [21.08159, 60.20167], [21.02509, 60.12142], [21.35468, 59.67511], [20.5104, 59.15546], [26.32936, 60.00121], [27.44953, 60.22766], [27.71177, 60.3893], [27.77352, 60.52722], [28.47974, 60.93365], [28.82816, 61.1233], [29.01829, 61.17448], [31.10136, 62.43042], [31.38369, 62.66284], [31.58535, 62.91642], [31.29294, 63.09035], [31.23244, 63.22239], [30.49637, 63.46666], [29.98213, 63.75795], [30.25437, 63.83364], [30.55687, 64.09036], [30.4762, 64.25728], [30.06279, 64.35782], [30.01238, 64.57513], [30.12329, 64.64862], [30.05271, 64.79072], [29.68972, 64.80789], [29.61914, 65.05993], [29.84096, 65.1109], [29.8813, 65.22101], [29.61914, 65.23791], [29.68972, 65.31803], [29.84096, 65.56945], [29.74013, 65.64025], [29.97205, 65.70256], [30.16363, 65.66935], [29.91155, 66.13863], [28.9839, 66.94139], [29.91155, 67.51507], [30.02041, 67.67523], [29.66955, 67.79872], [29.34179, 68.06655], [28.62982, 68.19816], [28.43941, 68.53366], [28.78224, 68.86696], [28.45957, 68.91417], [28.91738, 69.04774], [28.81248, 69.11997], [28.8629, 69.22395], [29.31664, 69.47994], [29.12697, 69.69193]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1184963", nameEn: "Alhucemas Islands", country: "ES", groups: ["EU", "Q191011", "015", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-3.90602, 35.21494], [-3.88372, 35.20767], [-3.89343, 35.22728], [-3.90602, 35.21494]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1298289", nameEn: "Egmont Islands", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[70.1848, -6.37445], [70.67958, -8.2663], [72.17991, -6.68509], [70.1848, -6.37445]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1352230", nameEn: "US Territories", country: "US", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q1451600", nameEn: "Overseas Countries and Territories of the EU", aliases: ["OCT"], level: "subunion" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q1544253", nameEn: "Great Chagos Bank", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[70.1848, -6.37445], [72.17991, -6.68509], [73.20573, -5.20727], [70.1848, -6.37445]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1585511", nameEn: "Salomon Atoll", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[72.09518, -5.61768], [73.20573, -5.20727], [72.12587, -4.02588], [72.09518, -5.61768]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1681727", nameEn: "Saint-Paul and Amsterdam", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[76.31747, -42.16264], [80.15867, -36.04977], [71.22311, -38.75287], [76.31747, -42.16264]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1901211", nameEn: "East Malaysia", country: "MY", groups: ["Q36117", "035", "142", "UN"], driveSide: "left", callingCodes: ["60"] }, geometry: { type: "MultiPolygon", coordinates: [[[[110.90339, 7.52694], [109.82788, 2.86812], [109.62558, 1.99182], [109.53794, 1.91771], [109.57923, 1.80624], [109.66397, 1.79972], [109.66397, 1.60425], [110.35354, 0.98869], [110.49182, 0.88088], [110.62374, 0.873], [111.22979, 1.08326], [111.55434, 0.97864], [111.82846, 0.99349], [111.94553, 1.12016], [112.15679, 1.17004], [112.2127, 1.44135], [112.48648, 1.56516], [113.021, 1.57819], [113.01448, 1.42832], [113.64677, 1.23933], [114.03788, 1.44787], [114.57892, 1.5], [114.80706, 1.92351], [114.80706, 2.21665], [115.1721, 2.49671], [115.11343, 2.82879], [115.53713, 3.14776], [115.58276, 3.93499], [115.90217, 4.37708], [117.25801, 4.35108], [117.47313, 4.18857], [117.67641, 4.16535], [118.06469, 4.16638], [118.93936, 4.09009], [119.52945, 5.35672], [117.98544, 6.27477], [117.93857, 6.89845], [117.17735, 7.52841], [116.79524, 7.43869], [115.02521, 5.35005], [115.16236, 5.01011], [115.15092, 4.87604], [115.20737, 4.8256], [115.27819, 4.63661], [115.2851, 4.42295], [115.36346, 4.33563], [115.31275, 4.30806], [115.09978, 4.39123], [115.07737, 4.53418], [115.04064, 4.63706], [115.02278, 4.74137], [115.02955, 4.82087], [115.05038, 4.90275], [114.99417, 4.88201], [114.96982, 4.81146], [114.88841, 4.81905], [114.8266, 4.75062], [114.77303, 4.72871], [114.83189, 4.42387], [114.88039, 4.4257], [114.78539, 4.12205], [114.64211, 4.00694], [114.49922, 4.13108], [114.4416, 4.27588], [114.32176, 4.2552], [114.32176, 4.34942], [114.26876, 4.49878], [114.15813, 4.57], [114.07448, 4.58441], [114.10166, 4.76112], [110.90339, 7.52694]]]] } },
-    { type: "Feature", properties: { wikidata: "Q1973345", nameEn: "Peninsular Malaysia", country: "MY", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["60"] }, geometry: { type: "MultiPolygon", coordinates: [[[[102.46318, 7.22462], [102.09086, 6.23546], [102.08127, 6.22679], [102.07732, 6.193], [102.09182, 6.14161], [102.01835, 6.05407], [101.99209, 6.04075], [101.97114, 6.01992], [101.9714, 6.00575], [101.94712, 5.98421], [101.92819, 5.85511], [101.91776, 5.84269], [101.89188, 5.8386], [101.80144, 5.74505], [101.75074, 5.79091], [101.69773, 5.75881], [101.58019, 5.93534], [101.25524, 5.78633], [101.25755, 5.71065], [101.14062, 5.61613], [100.98815, 5.79464], [101.02708, 5.91013], [101.087, 5.9193], [101.12388, 6.11411], [101.06165, 6.14161], [101.12618, 6.19431], [101.10313, 6.25617], [100.85884, 6.24929], [100.81045, 6.45086], [100.74822, 6.46231], [100.74361, 6.50811], [100.66986, 6.45086], [100.43027, 6.52389], [100.42351, 6.51762], [100.41791, 6.5189], [100.41152, 6.52299], [100.35413, 6.54932], [100.31929, 6.65413], [100.32607, 6.65933], [100.32671, 6.66526], [100.31884, 6.66423], [100.31618, 6.66781], [100.30828, 6.66462], [100.29651, 6.68439], [100.19511, 6.72559], [100.12, 6.42105], [100.0756, 6.4045], [99.91873, 6.50233], [99.50117, 6.44501], [99.31854, 5.99868], [99.75778, 3.86466], [103.03657, 1.30383], [103.56591, 1.19719], [103.62738, 1.35255], [103.67468, 1.43166], [103.7219, 1.46108], [103.74161, 1.4502], [103.76395, 1.45183], [103.81181, 1.47953], [103.86383, 1.46288], [103.89565, 1.42841], [103.93384, 1.42926], [104.00131, 1.42405], [104.02277, 1.4438], [104.04622, 1.44691], [104.07348, 1.43322], [104.08871, 1.42015], [104.09162, 1.39694], [104.08072, 1.35998], [104.12282, 1.27714], [104.34728, 1.33529], [104.56723, 1.44271], [105.01437, 3.24936], [102.46318, 7.22462]]]] } },
-    { type: "Feature", properties: { wikidata: "Q2093907", nameEn: "Three Kings Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[174.17679, -32.62487], [170.93268, -32.97889], [171.97383, -34.64644], [174.17679, -32.62487]]]] } },
-    { type: "Feature", properties: { wikidata: "Q2298216", nameEn: "Solander Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[167.39068, -46.49187], [166.5534, -46.39484], [166.84561, -46.84889], [167.39068, -46.49187]]]] } },
-    { type: "Feature", properties: { wikidata: "Q2872203", nameEn: "Mainland Australia", country: "AU", groups: ["053", "009", "UN"], level: "subcountryGroup", driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[88.16419, -23.49578], [123.64533, -39.13605], [159.74028, -39.1978], [159.76765, -29.76946], [154.02855, -24.43238], [152.93188, -20.92631], [147.69992, -17.5933], [145.2855, -9.62524], [143.87386, -9.02382], [143.29772, -9.33993], [142.48658, -9.36754], [142.19246, -9.15378], [141.88934, -9.36111], [141.01842, -9.35091], [135.49042, -9.2276], [127.55165, -9.05052], [125.29076, -12.33139], [88.16419, -23.49578]]]] } },
-    { type: "Feature", properties: { wikidata: "Q2914565", nameEn: "Autonomous Regions of Portugal", country: "PT", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q2915956", nameEn: "Mainland Portugal", country: "PT", groups: ["Q12837", "EU", "039", "150", "UN"], level: "subcountryGroup", callingCodes: ["351"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-10.39881, 36.12218], [-7.37282, 36.96896], [-7.39769, 37.16868], [-7.41133, 37.20314], [-7.41854, 37.23813], [-7.43227, 37.25152], [-7.43974, 37.38913], [-7.46878, 37.47127], [-7.51759, 37.56119], [-7.41981, 37.75729], [-7.33441, 37.81193], [-7.27314, 37.90145], [-7.24544, 37.98884], [-7.12648, 38.00296], [-7.10366, 38.04404], [-7.05966, 38.01966], [-7.00375, 38.01914], [-6.93418, 38.21454], [-7.09389, 38.17227], [-7.15581, 38.27597], [-7.32529, 38.44336], [-7.265, 38.61674], [-7.26174, 38.72107], [-7.03848, 38.87221], [-7.051, 38.907], [-6.95211, 39.0243], [-6.97004, 39.07619], [-7.04011, 39.11919], [-7.10692, 39.10275], [-7.14929, 39.11287], [-7.12811, 39.17101], [-7.23566, 39.20132], [-7.23403, 39.27579], [-7.3149, 39.34857], [-7.2927, 39.45847], [-7.49477, 39.58794], [-7.54121, 39.66717], [-7.33507, 39.64569], [-7.24707, 39.66576], [-7.01613, 39.66877], [-6.97492, 39.81488], [-6.91463, 39.86618], [-6.86737, 40.01986], [-6.94233, 40.10716], [-7.00589, 40.12087], [-7.02544, 40.18564], [-7.00426, 40.23169], [-6.86085, 40.26776], [-6.86085, 40.2976], [-6.80218, 40.33239], [-6.78426, 40.36468], [-6.84618, 40.42177], [-6.84944, 40.46394], [-6.7973, 40.51723], [-6.80218, 40.55067], [-6.84292, 40.56801], [-6.79567, 40.65955], [-6.82826, 40.74603], [-6.82337, 40.84472], [-6.79892, 40.84842], [-6.80707, 40.88047], [-6.84292, 40.89771], [-6.8527, 40.93958], [-6.9357, 41.02888], [-6.913, 41.03922], [-6.88843, 41.03027], [-6.84781, 41.02692], [-6.80942, 41.03629], [-6.79241, 41.05397], [-6.75655, 41.10187], [-6.77319, 41.13049], [-6.69711, 41.1858], [-6.68286, 41.21641], [-6.65046, 41.24725], [-6.55937, 41.24417], [-6.38551, 41.35274], [-6.38553, 41.38655], [-6.3306, 41.37677], [-6.26777, 41.48796], [-6.19128, 41.57638], [-6.29863, 41.66432], [-6.44204, 41.68258], [-6.49907, 41.65823], [-6.54633, 41.68623], [-6.56426, 41.74219], [-6.51374, 41.8758], [-6.56752, 41.88429], [-6.5447, 41.94371], [-6.58544, 41.96674], [-6.61967, 41.94008], [-6.75004, 41.94129], [-6.76959, 41.98734], [-6.81196, 41.99097], [-6.82174, 41.94493], [-6.94396, 41.94403], [-6.95537, 41.96553], [-6.98144, 41.9728], [-7.01078, 41.94977], [-7.07596, 41.94977], [-7.08574, 41.97401], [-7.14115, 41.98855], [-7.18549, 41.97515], [-7.18677, 41.88793], [-7.32366, 41.8406], [-7.37092, 41.85031], [-7.42864, 41.80589], [-7.42854, 41.83262], [-7.44759, 41.84451], [-7.45566, 41.86488], [-7.49803, 41.87095], [-7.52737, 41.83939], [-7.62188, 41.83089], [-7.58603, 41.87944], [-7.65774, 41.88308], [-7.69848, 41.90977], [-7.84188, 41.88065], [-7.88055, 41.84571], [-7.88751, 41.92553], [-7.90707, 41.92432], [-7.92336, 41.8758], [-7.9804, 41.87337], [-8.01136, 41.83453], [-8.0961, 41.81024], [-8.16455, 41.81753], [-8.16944, 41.87944], [-8.19551, 41.87459], [-8.2185, 41.91237], [-8.16232, 41.9828], [-8.08796, 42.01398], [-8.08847, 42.05767], [-8.11729, 42.08537], [-8.18178, 42.06436], [-8.19406, 42.12141], [-8.18947, 42.13853], [-8.1986, 42.15402], [-8.22406, 42.1328], [-8.24681, 42.13993], [-8.2732, 42.12396], [-8.29809, 42.106], [-8.32161, 42.10218], [-8.33912, 42.08358], [-8.36353, 42.09065], [-8.38323, 42.07683], [-8.40143, 42.08052], [-8.42512, 42.07199], [-8.44123, 42.08218], [-8.48185, 42.0811], [-8.52837, 42.07658], [-8.5252, 42.06264], [-8.54563, 42.0537], [-8.58086, 42.05147], [-8.59493, 42.05708], [-8.63791, 42.04691], [-8.64626, 42.03668], [-8.65832, 42.02972], [-8.6681, 41.99703], [-8.69071, 41.98862], [-8.7478, 41.96282], [-8.74606, 41.9469], [-8.75712, 41.92833], [-8.81794, 41.90375], [-8.87157, 41.86488], [-11.19304, 41.83075], [-10.39881, 36.12218]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3311985", nameEn: "Guernsey", country: "GB", groups: ["GG", "830", "Q185086", "154", "150", "UN"], level: "subterritory", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01481"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.49556, 49.79012], [-3.28154, 49.57329], [-2.65349, 49.15373], [-2.36485, 49.48223], [-2.49556, 49.79012]]]] } },
-    { type: "Feature", properties: { wikidata: "Q3320166", nameEn: "Outermost Regions of the EU", aliases: ["OMR"], level: "subunion" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q3336843", nameEn: "Countries of the United Kingdom", aliases: ["GB-UKM"], country: "GB", level: "subcountryGroup" }, geometry: null },
-    { type: "Feature", properties: { wikidata: "Q6736667", nameEn: "Mainland India", country: "IN", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["91"] }, geometry: { type: "MultiPolygon", coordinates: [[[[89.08044, 21.41871], [89.07114, 22.15335], [88.9367, 22.58527], [88.94614, 22.66941], [88.9151, 22.75228], [88.96713, 22.83346], [88.87063, 22.95235], [88.88327, 23.03885], [88.86377, 23.08759], [88.99148, 23.21134], [88.71133, 23.2492], [88.79254, 23.46028], [88.79351, 23.50535], [88.74841, 23.47361], [88.56507, 23.64044], [88.58087, 23.87105], [88.66189, 23.87607], [88.73743, 23.91751], [88.6976, 24.14703], [88.74841, 24.1959], [88.68801, 24.31464], [88.50934, 24.32474], [88.12296, 24.51301], [88.08786, 24.63232], [88.00683, 24.66477], [88.15515, 24.85806], [88.14004, 24.93529], [88.21832, 24.96642], [88.27325, 24.88796], [88.33917, 24.86803], [88.46277, 25.07468], [88.44766, 25.20149], [88.94067, 25.18534], [89.00463, 25.26583], [89.01105, 25.30303], [88.85278, 25.34679], [88.81296, 25.51546], [88.677, 25.46959], [88.4559, 25.59227], [88.45103, 25.66245], [88.242, 25.80811], [88.13138, 25.78773], [88.08804, 25.91334], [88.16581, 26.0238], [88.1844, 26.14417], [88.34757, 26.22216], [88.35153, 26.29123], [88.51649, 26.35923], [88.48749, 26.45855], [88.36938, 26.48683], [88.35153, 26.45241], [88.33093, 26.48929], [88.41196, 26.63837], [88.4298, 26.54489], [88.62144, 26.46783], [88.69485, 26.38353], [88.67837, 26.26291], [88.78961, 26.31093], [88.85004, 26.23211], [89.05328, 26.2469], [88.91321, 26.37984], [88.92357, 26.40711], [88.95612, 26.4564], [89.08899, 26.38845], [89.15869, 26.13708], [89.35953, 26.0077], [89.53515, 26.00382], [89.57101, 25.9682], [89.63968, 26.22595], [89.70201, 26.15138], [89.73581, 26.15818], [89.77865, 26.08387], [89.77728, 26.04254], [89.86592, 25.93115], [89.80585, 25.82489], [89.84388, 25.70042], [89.86129, 25.61714], [89.81208, 25.37244], [89.84086, 25.31854], [89.83371, 25.29548], [89.87629, 25.28337], [89.90478, 25.31038], [90.1155, 25.22686], [90.40034, 25.1534], [90.65042, 25.17788], [90.87427, 25.15799], [91.25517, 25.20677], [91.63648, 25.12846], [92.0316, 25.1834], [92.33957, 25.07593], [92.39147, 25.01471], [92.49887, 24.88796], [92.38626, 24.86055], [92.25854, 24.9191], [92.15796, 24.54435], [92.11662, 24.38997], [91.96603, 24.3799], [91.89258, 24.14674], [91.82596, 24.22345], [91.76004, 24.23848], [91.73257, 24.14703], [91.65292, 24.22095], [91.63782, 24.1132], [91.55542, 24.08687], [91.37414, 24.10693], [91.35741, 23.99072], [91.29587, 24.0041], [91.22308, 23.89616], [91.25192, 23.83463], [91.15579, 23.6599], [91.28293, 23.37538], [91.36453, 23.06612], [91.40848, 23.07117], [91.4035, 23.27522], [91.46615, 23.2328], [91.54993, 23.01051], [91.61571, 22.93929], [91.7324, 23.00043], [91.81634, 23.08001], [91.76417, 23.26619], [91.84789, 23.42235], [91.95642, 23.47361], [91.95093, 23.73284], [92.04706, 23.64229], [92.15417, 23.73409], [92.26541, 23.70392], [92.38214, 23.28705], [92.37665, 22.9435], [92.5181, 22.71441], [92.60029, 22.1522], [92.56616, 22.13554], [92.60949, 21.97638], [92.67532, 22.03547], [92.70416, 22.16017], [92.86208, 22.05456], [92.89504, 21.95143], [92.93899, 22.02656], [92.99804, 21.98964], [92.99255, 22.05965], [93.04885, 22.20595], [93.15734, 22.18687], [93.14224, 22.24535], [93.19991, 22.25425], [93.18206, 22.43716], [93.13537, 22.45873], [93.11477, 22.54374], [93.134, 22.59573], [93.09417, 22.69459], [93.134, 22.92498], [93.12988, 23.05772], [93.2878, 23.00464], [93.38478, 23.13698], [93.36862, 23.35426], [93.38781, 23.36139], [93.39981, 23.38828], [93.38805, 23.4728], [93.43475, 23.68299], [93.3908, 23.7622], [93.3908, 23.92925], [93.36059, 23.93176], [93.32351, 24.04468], [93.34735, 24.10151], [93.41415, 24.07854], [93.46633, 23.97067], [93.50616, 23.94432], [93.62871, 24.00922], [93.75952, 24.0003], [93.80279, 23.92549], [93.92089, 23.95812], [94.14081, 23.83333], [94.30215, 24.23752], [94.32362, 24.27692], [94.45279, 24.56656], [94.50729, 24.59281], [94.5526, 24.70764], [94.60204, 24.70889], [94.73937, 25.00545], [94.74212, 25.13606], [94.57458, 25.20318], [94.68032, 25.47003], [94.80117, 25.49359], [95.18556, 26.07338], [95.11428, 26.1019], [95.12801, 26.38397], [95.05798, 26.45408], [95.23513, 26.68499], [95.30339, 26.65372], [95.437, 26.7083], [95.81603, 27.01335], [95.93002, 27.04149], [96.04949, 27.19428], [96.15591, 27.24572], [96.40779, 27.29818], [96.55761, 27.29928], [96.73888, 27.36638], [96.88445, 27.25046], [96.85287, 27.2065], [96.89132, 27.17474], [97.14675, 27.09041], [97.17422, 27.14052], [96.91431, 27.45752], [96.90112, 27.62149], [97.29919, 27.92233], [97.35824, 27.87256], [97.38845, 28.01329], [97.35412, 28.06663], [97.31292, 28.06784], [97.34547, 28.21385], [97.1289, 28.3619], [96.98882, 28.32564], [96.88445, 28.39452], [96.85561, 28.4875], [96.6455, 28.61657], [96.48895, 28.42955], [96.40929, 28.51526], [96.61391, 28.72742], [96.3626, 29.10607], [96.20467, 29.02325], [96.18682, 29.11087], [96.31316, 29.18643], [96.05361, 29.38167], [95.84899, 29.31464], [95.75149, 29.32063], [95.72086, 29.20797], [95.50842, 29.13487], [95.41091, 29.13007], [95.3038, 29.13847], [95.26122, 29.07727], [95.2214, 29.10727], [95.11291, 29.09527], [95.0978, 29.14446], [94.81353, 29.17804], [94.69318, 29.31739], [94.2752, 29.11687], [94.35897, 29.01965], [93.72797, 28.68821], [93.44621, 28.67189], [93.18069, 28.50319], [93.14635, 28.37035], [92.93075, 28.25671], [92.67486, 28.15018], [92.65472, 28.07632], [92.73025, 28.05814], [92.7275, 27.98662], [92.42538, 27.80092], [92.32101, 27.79363], [92.27432, 27.89077], [91.87057, 27.7195], [91.84722, 27.76325], [91.6469, 27.76358], [91.55819, 27.6144], [91.65007, 27.48287], [92.01132, 27.47352], [92.12019, 27.27829], [92.04702, 27.26861], [92.03457, 27.07334], [92.11863, 26.893], [92.05523, 26.8692], [91.83181, 26.87318], [91.50067, 26.79223], [90.67715, 26.77215], [90.48504, 26.8594], [90.39271, 26.90704], [90.30402, 26.85098], [90.04535, 26.72422], [89.86124, 26.73307], [89.63369, 26.74402], [89.42349, 26.83727], [89.3901, 26.84225], [89.38319, 26.85963], [89.37913, 26.86224], [89.1926, 26.81329], [89.12825, 26.81661], [89.09554, 26.89089], [88.95807, 26.92668], [88.92301, 26.99286], [88.8714, 26.97488], [88.86984, 27.10937], [88.74219, 27.144], [88.91901, 27.32483], [88.82981, 27.38814], [88.77517, 27.45415], [88.88091, 27.85192], [88.83559, 28.01936], [88.63235, 28.12356], [88.54858, 28.06057], [88.25332, 27.9478], [88.1278, 27.95417], [88.13378, 27.88015], [88.1973, 27.85067], [88.19107, 27.79285], [88.04008, 27.49223], [88.07277, 27.43007], [88.01646, 27.21612], [88.01587, 27.21388], [87.9887, 27.11045], [88.11719, 26.98758], [88.13422, 26.98705], [88.12302, 26.95324], [88.19107, 26.75516], [88.1659, 26.68177], [88.16452, 26.64111], [88.09963, 26.54195], [88.09414, 26.43732], [88.00895, 26.36029], [87.90115, 26.44923], [87.89085, 26.48565], [87.84193, 26.43663], [87.7918, 26.46737], [87.76004, 26.40711], [87.67893, 26.43501], [87.66803, 26.40294], [87.59175, 26.38342], [87.55274, 26.40596], [87.51571, 26.43106], [87.46566, 26.44058], [87.37314, 26.40815], [87.34568, 26.34787], [87.26568, 26.37294], [87.26587, 26.40592], [87.24682, 26.4143], [87.18863, 26.40558], [87.14751, 26.40542], [87.09147, 26.45039], [87.0707, 26.58571], [87.04691, 26.58685], [87.01559, 26.53228], [86.95912, 26.52076], [86.94543, 26.52076], [86.82898, 26.43919], [86.76797, 26.45892], [86.74025, 26.42386], [86.69124, 26.45169], [86.62686, 26.46891], [86.61313, 26.48658], [86.57073, 26.49825], [86.54258, 26.53819], [86.49726, 26.54218], [86.31564, 26.61925], [86.26235, 26.61886], [86.22513, 26.58863], [86.13596, 26.60651], [86.02729, 26.66756], [85.8492, 26.56667], [85.85126, 26.60866], [85.83126, 26.61134], [85.76907, 26.63076], [85.72315, 26.67471], [85.73483, 26.79613], [85.66239, 26.84822], [85.61621, 26.86721], [85.59461, 26.85161], [85.5757, 26.85955], [85.56471, 26.84133], [85.47752, 26.79292], [85.34302, 26.74954], [85.21159, 26.75933], [85.18046, 26.80519], [85.19291, 26.86909], [85.15883, 26.86966], [85.02635, 26.85381], [85.05592, 26.88991], [85.00536, 26.89523], [84.97186, 26.9149], [84.96687, 26.95599], [84.85754, 26.98984], [84.82913, 27.01989], [84.793, 26.9968], [84.64496, 27.04669], [84.69166, 27.21294], [84.62161, 27.33885], [84.29315, 27.39], [84.25735, 27.44941], [84.21376, 27.45218], [84.10791, 27.52399], [84.02229, 27.43836], [83.93306, 27.44939], [83.86182, 27.4241], [83.85595, 27.35797], [83.61288, 27.47013], [83.39495, 27.4798], [83.38872, 27.39276], [83.35136, 27.33885], [83.29999, 27.32778], [83.2673, 27.36235], [83.27197, 27.38309], [83.19413, 27.45632], [82.94938, 27.46036], [82.93261, 27.50328], [82.74119, 27.49838], [82.70378, 27.72122], [82.46405, 27.6716], [82.06554, 27.92222], [81.97214, 27.93322], [81.91223, 27.84995], [81.47867, 28.08303], [81.48179, 28.12148], [81.38683, 28.17638], [81.32923, 28.13521], [81.19847, 28.36284], [81.03471, 28.40054], [80.55142, 28.69182], [80.50575, 28.6706], [80.52443, 28.54897], [80.44504, 28.63098], [80.37188, 28.63371], [80.12125, 28.82346], [80.06957, 28.82763], [80.05743, 28.91479], [80.18085, 29.13649], [80.23178, 29.11626], [80.26602, 29.13938], [80.24112, 29.21414], [80.28626, 29.20327], [80.31428, 29.30784], [80.24322, 29.44299], [80.37939, 29.57098], [80.41858, 29.63581], [80.38428, 29.68513], [80.36803, 29.73865], [80.41554, 29.79451], [80.43458, 29.80466], [80.48997, 29.79566], [80.56247, 29.86661], [80.57179, 29.91422], [80.60226, 29.95732], [80.67076, 29.95732], [80.8778, 30.13384], [80.86673, 30.17321], [80.91143, 30.22173], [80.92547, 30.17193], [81.03953, 30.20059], [80.83343, 30.32023], [80.54504, 30.44936], [80.20721, 30.58541], [79.93255, 30.88288], [79.59884, 30.93943], [79.30694, 31.17357], [79.14016, 31.43403], [79.01931, 31.42817], [78.89344, 31.30481], [78.77898, 31.31209], [78.71032, 31.50197], [78.84516, 31.60631], [78.69933, 31.78723], [78.78036, 31.99478], [78.74404, 32.00384], [78.68754, 32.10256], [78.49609, 32.2762], [78.4645, 32.45367], [78.38897, 32.53938], [78.73916, 32.69438], [78.7831, 32.46873], [78.96713, 32.33655], [78.99322, 32.37948], [79.0979, 32.38051], [79.13174, 32.47766], [79.26768, 32.53277], [79.46562, 32.69668], [79.14016, 33.02545], [79.15252, 33.17156], [78.73636, 33.56521], [78.67599, 33.66445], [78.77349, 33.73871], [78.73367, 34.01121], [78.65657, 34.03195], [78.66225, 34.08858], [78.91769, 34.15452], [78.99802, 34.3027], [79.05364, 34.32482], [78.74465, 34.45174], [78.56475, 34.50835], [78.54964, 34.57283], [78.27781, 34.61484], [78.18435, 34.7998], [78.22692, 34.88771], [78.00033, 35.23954], [78.03466, 35.3785], [78.11664, 35.48022], [77.80532, 35.52058], [77.70232, 35.46244], [77.44277, 35.46132], [76.96624, 35.5932], [76.84539, 35.67356], [76.77323, 35.66062], [76.75475, 35.52617], [76.85088, 35.39754], [76.93465, 35.39866], [77.11796, 35.05419], [76.99251, 34.93349], [76.87193, 34.96906], [76.74514, 34.92488], [76.74377, 34.84039], [76.67648, 34.76371], [76.47186, 34.78965], [76.15463, 34.6429], [76.04614, 34.67566], [75.75438, 34.51827], [75.38009, 34.55021], [75.01479, 34.64629], [74.6663, 34.703], [74.58083, 34.77386], [74.31239, 34.79626], [74.12897, 34.70073], [73.96423, 34.68244], [73.93401, 34.63386], [73.93951, 34.57169], [73.89419, 34.54568], [73.88732, 34.48911], [73.74999, 34.3781], [73.74862, 34.34183], [73.8475, 34.32935], [73.90517, 34.35317], [73.98208, 34.2522], [73.90677, 34.10504], [73.88732, 34.05105], [73.91341, 34.01235], [74.21554, 34.03853], [74.25262, 34.01577], [74.26086, 33.92237], [74.14001, 33.83002], [74.05898, 33.82089], [74.00891, 33.75437], [73.96423, 33.73071], [73.98968, 33.66155], [73.97367, 33.64061], [74.03576, 33.56718], [74.10115, 33.56392], [74.18121, 33.4745], [74.17983, 33.3679], [74.08782, 33.26232], [74.01366, 33.25199], [74.02144, 33.18908], [74.15374, 33.13477], [74.17571, 33.07495], [74.31854, 33.02891], [74.34875, 32.97823], [74.31227, 32.92795], [74.41467, 32.90563], [74.45312, 32.77755], [74.6289, 32.75561], [74.64675, 32.82604], [74.7113, 32.84219], [74.65345, 32.71225], [74.69542, 32.66792], [74.64424, 32.60985], [74.65251, 32.56416], [74.67431, 32.56676], [74.68362, 32.49298], [74.84725, 32.49075], [74.97634, 32.45367], [75.03265, 32.49538], [75.28259, 32.36556], [75.38046, 32.26836], [75.25649, 32.10187], [75.00793, 32.03786], [74.9269, 32.0658], [74.86236, 32.04485], [74.79919, 31.95983], [74.58907, 31.87824], [74.47771, 31.72227], [74.57498, 31.60382], [74.61517, 31.55698], [74.59319, 31.50197], [74.64713, 31.45605], [74.59773, 31.4136], [74.53223, 31.30321], [74.51629, 31.13829], [74.56023, 31.08303], [74.60281, 31.10419], [74.60006, 31.13711], [74.6852, 31.12771], [74.67971, 31.05479], [74.5616, 31.04153], [73.88993, 30.36305], [73.95736, 30.28466], [73.97225, 30.19829], [73.80299, 30.06969], [73.58665, 30.01848], [73.3962, 29.94707], [73.28094, 29.56646], [73.05886, 29.1878], [73.01337, 29.16422], [72.94272, 29.02487], [72.40402, 28.78283], [72.29495, 28.66367], [72.20329, 28.3869], [71.9244, 28.11555], [71.89921, 27.96035], [70.79054, 27.68423], [70.60927, 28.02178], [70.37307, 28.01208], [70.12502, 27.8057], [70.03136, 27.56627], [69.58519, 27.18109], [69.50904, 26.74892], [69.88555, 26.56836], [70.05584, 26.60398], [70.17532, 26.55362], [70.17532, 26.24118], [70.08193, 26.08094], [70.0985, 25.93238], [70.2687, 25.71156], [70.37444, 25.67443], [70.53649, 25.68928], [70.60378, 25.71898], [70.67382, 25.68186], [70.66695, 25.39314], [70.89148, 25.15064], [70.94002, 24.92843], [71.09405, 24.69017], [70.97594, 24.60904], [71.00341, 24.46038], [71.12838, 24.42662], [71.04461, 24.34657], [70.94985, 24.3791], [70.85784, 24.30903], [70.88393, 24.27398], [70.71502, 24.23517], [70.57906, 24.27774], [70.5667, 24.43787], [70.11712, 24.30915], [70.03428, 24.172], [69.73335, 24.17007], [69.59579, 24.29777], [69.29778, 24.28712], [69.19341, 24.25646], [69.07806, 24.29777], [68.97781, 24.26021], [68.90914, 24.33156], [68.7416, 24.31904], [68.74643, 23.97027], [68.39339, 23.96838], [68.20763, 23.85849], [68.11329, 23.53945], [76.59015, 5.591], [79.50447, 8.91876], [79.42124, 9.80115], [80.48418, 10.20786], [89.08044, 21.41871]]]] } },
-    { type: "Feature", properties: { wikidata: "Q9143535", nameEn: "Akrotiri", country: "GB", groups: ["Q644636", "Q37362", "BOTS", "145", "142", "UN"], level: "subterritory", driveSide: "left", callingCodes: ["357"] }, geometry: { type: "MultiPolygon", coordinates: [[[[32.86014, 34.70585], [32.82717, 34.70622], [32.79433, 34.67883], [32.76136, 34.68318], [32.75515, 34.64985], [32.74412, 34.43926], [33.26744, 34.49942], [33.0138, 34.64424], [32.96968, 34.64046], [32.96718, 34.63446], [32.95891, 34.62919], [32.95323, 34.64075], [32.95471, 34.64528], [32.94976, 34.65204], [32.94796, 34.6587], [32.95325, 34.66462], [32.97079, 34.66112], [32.97736, 34.65277], [32.99014, 34.65518], [32.98668, 34.67268], [32.99135, 34.68061], [32.95539, 34.68471], [32.94683, 34.67907], [32.94379, 34.67111], [32.93693, 34.67027], [32.93449, 34.66241], [32.92807, 34.66736], [32.93043, 34.67091], [32.91398, 34.67343], [32.9068, 34.66102], [32.86167, 34.68734], [32.86014, 34.70585]]]] } },
-    { type: "Feature", properties: { wikidata: "Q9206745", nameEn: "Dhekelia", country: "GB", groups: ["Q644636", "Q37362", "BOTS", "145", "142", "UN"], level: "subterritory", driveSide: "left", callingCodes: ["357"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.70575, 34.97947], [33.83531, 34.73974], [33.98684, 34.76642], [33.90075, 34.96623], [33.86432, 34.97592], [33.84811, 34.97075], [33.83505, 34.98108], [33.85621, 34.98956], [33.85891, 35.001], [33.85216, 35.00579], [33.84045, 35.00616], [33.82875, 35.01685], [33.83055, 35.02865], [33.81524, 35.04192], [33.8012, 35.04786], [33.82051, 35.0667], [33.8355, 35.05777], [33.85261, 35.0574], [33.88367, 35.07877], [33.89485, 35.06873], [33.90247, 35.07686], [33.91299, 35.07579], [33.91789, 35.08688], [33.89853, 35.11377], [33.88737, 35.11408], [33.88943, 35.12007], [33.88561, 35.12449], [33.87224, 35.12293], [33.87622, 35.10457], [33.87097, 35.09389], [33.87479, 35.08881], [33.8541, 35.07201], [33.84168, 35.06823], [33.82067, 35.07826], [33.78581, 35.05104], [33.76106, 35.04253], [33.73824, 35.05321], [33.71482, 35.03722], [33.70209, 35.04882], [33.7161, 35.07279], [33.70861, 35.07644], [33.69095, 35.06237], [33.68474, 35.06602], [33.67742, 35.05963], [33.67678, 35.03866], [33.69938, 35.03123], [33.69731, 35.01754], [33.71514, 35.00294], [33.70639, 34.99303], [33.70575, 34.97947]], [[33.77312, 34.9976], [33.77553, 34.99518], [33.78516, 34.99582], [33.79191, 34.98914], [33.78917, 34.98854], [33.78571, 34.98951], [33.78318, 34.98699], [33.78149, 34.98854], [33.77843, 34.988], [33.7778, 34.98981], [33.76738, 34.99188], [33.76605, 34.99543], [33.75682, 34.99916], [33.75994, 35.00113], [33.77312, 34.9976]], [[33.74144, 35.01053], [33.7343, 35.01178], [33.73781, 35.02181], [33.74265, 35.02329], [33.74983, 35.02274], [33.7492, 35.01319], [33.74144, 35.01053]]]] } },
-    { type: "Feature", properties: { wikidata: "Q16390686", nameEn: "Peninsular Spain", country: "ES", groups: ["Q12837", "EU", "039", "150", "UN"], callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[3.75438, 42.33445], [3.17156, 42.43545], [3.11379, 42.43646], [3.10027, 42.42621], [3.08167, 42.42748], [3.03734, 42.47363], [2.96518, 42.46692], [2.94283, 42.48174], [2.92107, 42.4573], [2.88413, 42.45938], [2.86983, 42.46843], [2.85675, 42.45444], [2.84335, 42.45724], [2.77464, 42.41046], [2.75497, 42.42578], [2.72056, 42.42298], [2.65311, 42.38771], [2.6747, 42.33974], [2.57934, 42.35808], [2.55516, 42.35351], [2.54382, 42.33406], [2.48457, 42.33933], [2.43508, 42.37568], [2.43299, 42.39423], [2.38504, 42.39977], [2.25551, 42.43757], [2.20578, 42.41633], [2.16599, 42.42314], [2.12789, 42.41291], [2.11621, 42.38393], [2.06241, 42.35906], [2.00488, 42.35399], [1.96482, 42.37787], [1.9574, 42.42401], [1.94084, 42.43039], [1.94061, 42.43333], [1.94292, 42.44316], [1.93663, 42.45439], [1.88853, 42.4501], [1.83037, 42.48395], [1.76335, 42.48863], [1.72515, 42.50338], [1.70571, 42.48867], [1.66826, 42.50779], [1.65674, 42.47125], [1.58933, 42.46275], [1.57953, 42.44957], [1.55937, 42.45808], [1.55073, 42.43299], [1.5127, 42.42959], [1.44529, 42.43724], [1.43838, 42.47848], [1.41648, 42.48315], [1.46661, 42.50949], [1.44759, 42.54431], [1.41245, 42.53539], [1.4234, 42.55959], [1.44529, 42.56722], [1.42512, 42.58292], [1.44197, 42.60217], [1.35562, 42.71944], [1.15928, 42.71407], [1.0804, 42.78569], [0.98292, 42.78754], [0.96166, 42.80629], [0.93089, 42.79154], [0.711, 42.86372], [0.66121, 42.84021], [0.65421, 42.75872], [0.67873, 42.69458], [0.40214, 42.69779], [0.36251, 42.72282], [0.29407, 42.67431], [0.25336, 42.7174], [0.17569, 42.73424], [-0.02468, 42.68513], [-0.10519, 42.72761], [-0.16141, 42.79535], [-0.17939, 42.78974], [-0.3122, 42.84788], [-0.38833, 42.80132], [-0.41319, 42.80776], [-0.44334, 42.79939], [-0.50863, 42.82713], [-0.55497, 42.77846], [-0.67637, 42.88303], [-0.69837, 42.87945], [-0.72608, 42.89318], [-0.73422, 42.91228], [-0.72037, 42.92541], [-0.75478, 42.96916], [-0.81652, 42.95166], [-0.97133, 42.96239], [-1.00963, 42.99279], [-1.10333, 43.0059], [-1.22881, 43.05534], [-1.25244, 43.04164], [-1.30531, 43.06859], [-1.30052, 43.09581], [-1.27118, 43.11961], [-1.32209, 43.1127], [-1.34419, 43.09665], [-1.35272, 43.02658], [-1.44067, 43.047], [-1.47555, 43.08372], [-1.41562, 43.12815], [-1.3758, 43.24511], [-1.40942, 43.27272], [-1.45289, 43.27049], [-1.50992, 43.29481], [-1.55963, 43.28828], [-1.57674, 43.25269], [-1.61341, 43.25269], [-1.63052, 43.28591], [-1.62481, 43.30726], [-1.69407, 43.31378], [-1.73074, 43.29481], [-1.7397, 43.32979], [-1.75079, 43.3317], [-1.75334, 43.34107], [-1.77068, 43.34396], [-1.78714, 43.35476], [-1.78332, 43.36399], [-1.79319, 43.37497], [-1.77289, 43.38957], [-1.81005, 43.59738], [-10.14298, 44.17365], [-11.19304, 41.83075], [-8.87157, 41.86488], [-8.81794, 41.90375], [-8.75712, 41.92833], [-8.74606, 41.9469], [-8.7478, 41.96282], [-8.69071, 41.98862], [-8.6681, 41.99703], [-8.65832, 42.02972], [-8.64626, 42.03668], [-8.63791, 42.04691], [-8.59493, 42.05708], [-8.58086, 42.05147], [-8.54563, 42.0537], [-8.5252, 42.06264], [-8.52837, 42.07658], [-8.48185, 42.0811], [-8.44123, 42.08218], [-8.42512, 42.07199], [-8.40143, 42.08052], [-8.38323, 42.07683], [-8.36353, 42.09065], [-8.33912, 42.08358], [-8.32161, 42.10218], [-8.29809, 42.106], [-8.2732, 42.12396], [-8.24681, 42.13993], [-8.22406, 42.1328], [-8.1986, 42.15402], [-8.18947, 42.13853], [-8.19406, 42.12141], [-8.18178, 42.06436], [-8.11729, 42.08537], [-8.08847, 42.05767], [-8.08796, 42.01398], [-8.16232, 41.9828], [-8.2185, 41.91237], [-8.19551, 41.87459], [-8.16944, 41.87944], [-8.16455, 41.81753], [-8.0961, 41.81024], [-8.01136, 41.83453], [-7.9804, 41.87337], [-7.92336, 41.8758], [-7.90707, 41.92432], [-7.88751, 41.92553], [-7.88055, 41.84571], [-7.84188, 41.88065], [-7.69848, 41.90977], [-7.65774, 41.88308], [-7.58603, 41.87944], [-7.62188, 41.83089], [-7.52737, 41.83939], [-7.49803, 41.87095], [-7.45566, 41.86488], [-7.44759, 41.84451], [-7.42854, 41.83262], [-7.42864, 41.80589], [-7.37092, 41.85031], [-7.32366, 41.8406], [-7.18677, 41.88793], [-7.18549, 41.97515], [-7.14115, 41.98855], [-7.08574, 41.97401], [-7.07596, 41.94977], [-7.01078, 41.94977], [-6.98144, 41.9728], [-6.95537, 41.96553], [-6.94396, 41.94403], [-6.82174, 41.94493], [-6.81196, 41.99097], [-6.76959, 41.98734], [-6.75004, 41.94129], [-6.61967, 41.94008], [-6.58544, 41.96674], [-6.5447, 41.94371], [-6.56752, 41.88429], [-6.51374, 41.8758], [-6.56426, 41.74219], [-6.54633, 41.68623], [-6.49907, 41.65823], [-6.44204, 41.68258], [-6.29863, 41.66432], [-6.19128, 41.57638], [-6.26777, 41.48796], [-6.3306, 41.37677], [-6.38553, 41.38655], [-6.38551, 41.35274], [-6.55937, 41.24417], [-6.65046, 41.24725], [-6.68286, 41.21641], [-6.69711, 41.1858], [-6.77319, 41.13049], [-6.75655, 41.10187], [-6.79241, 41.05397], [-6.80942, 41.03629], [-6.84781, 41.02692], [-6.88843, 41.03027], [-6.913, 41.03922], [-6.9357, 41.02888], [-6.8527, 40.93958], [-6.84292, 40.89771], [-6.80707, 40.88047], [-6.79892, 40.84842], [-6.82337, 40.84472], [-6.82826, 40.74603], [-6.79567, 40.65955], [-6.84292, 40.56801], [-6.80218, 40.55067], [-6.7973, 40.51723], [-6.84944, 40.46394], [-6.84618, 40.42177], [-6.78426, 40.36468], [-6.80218, 40.33239], [-6.86085, 40.2976], [-6.86085, 40.26776], [-7.00426, 40.23169], [-7.02544, 40.18564], [-7.00589, 40.12087], [-6.94233, 40.10716], [-6.86737, 40.01986], [-6.91463, 39.86618], [-6.97492, 39.81488], [-7.01613, 39.66877], [-7.24707, 39.66576], [-7.33507, 39.64569], [-7.54121, 39.66717], [-7.49477, 39.58794], [-7.2927, 39.45847], [-7.3149, 39.34857], [-7.23403, 39.27579], [-7.23566, 39.20132], [-7.12811, 39.17101], [-7.14929, 39.11287], [-7.10692, 39.10275], [-7.04011, 39.11919], [-6.97004, 39.07619], [-6.95211, 39.0243], [-7.051, 38.907], [-7.03848, 38.87221], [-7.26174, 38.72107], [-7.265, 38.61674], [-7.32529, 38.44336], [-7.15581, 38.27597], [-7.09389, 38.17227], [-6.93418, 38.21454], [-7.00375, 38.01914], [-7.05966, 38.01966], [-7.10366, 38.04404], [-7.12648, 38.00296], [-7.24544, 37.98884], [-7.27314, 37.90145], [-7.33441, 37.81193], [-7.41981, 37.75729], [-7.51759, 37.56119], [-7.46878, 37.47127], [-7.43974, 37.38913], [-7.43227, 37.25152], [-7.41854, 37.23813], [-7.41133, 37.20314], [-7.39769, 37.16868], [-7.37282, 36.96896], [-7.2725, 35.73269], [-5.10878, 36.05227], [-2.27707, 35.35051], [3.75438, 42.33445]], [[-5.27801, 36.14942], [-5.34064, 36.03744], [-5.40526, 36.15488], [-5.34536, 36.15501], [-5.33822, 36.15272], [-5.27801, 36.14942]]], [[[1.99838, 42.44682], [2.01564, 42.45171], [1.99216, 42.46208], [1.98579, 42.47486], [1.99766, 42.4858], [1.98916, 42.49351], [1.98022, 42.49569], [1.97697, 42.48568], [1.97227, 42.48487], [1.97003, 42.48081], [1.96215, 42.47854], [1.95606, 42.45785], [1.96125, 42.45364], [1.98378, 42.44697], [1.99838, 42.44682]]]] } },
-    { type: "Feature", properties: { wikidata: "Q98059339", nameEn: "Mainland Norway", country: "NO", groups: ["154", "150", "UN"], callingCodes: ["47"] }, geometry: { type: "MultiPolygon", coordinates: [[[[10.40861, 58.38489], [10.64958, 58.89391], [11.08911, 58.98745], [11.15367, 59.07862], [11.34459, 59.11672], [11.4601, 58.99022], [11.45199, 58.89604], [11.65732, 58.90177], [11.8213, 59.24985], [11.69297, 59.59442], [11.92112, 59.69531], [11.87121, 59.86039], [12.15641, 59.8926], [12.36317, 59.99259], [12.52003, 60.13846], [12.59133, 60.50559], [12.2277, 61.02442], [12.69115, 61.06584], [12.86939, 61.35427], [12.57707, 61.56547], [12.40595, 61.57226], [12.14746, 61.7147], [12.29187, 62.25699], [12.07085, 62.6297], [12.19919, 63.00104], [11.98529, 63.27487], [12.19919, 63.47935], [12.14928, 63.59373], [12.74105, 64.02171], [13.23411, 64.09087], [13.98222, 64.00953], [14.16051, 64.18725], [14.11117, 64.46674], [13.64276, 64.58402], [14.50926, 65.31786], [14.53778, 66.12399], [15.05113, 66.15572], [15.49318, 66.28509], [15.37197, 66.48217], [16.35589, 67.06419], [16.39154, 67.21653], [16.09922, 67.4364], [16.12774, 67.52106], [16.38441, 67.52923], [16.7409, 67.91037], [17.30416, 68.11591], [17.90787, 67.96537], [18.13836, 68.20874], [18.1241, 68.53721], [18.39503, 68.58672], [18.63032, 68.50849], [18.97255, 68.52416], [19.93508, 68.35911], [20.22027, 68.48759], [19.95647, 68.55546], [20.22027, 68.67246], [20.33435, 68.80174], [20.28444, 68.93283], [20.0695, 69.04469], [20.55258, 69.06069], [20.72171, 69.11874], [21.05775, 69.0356], [21.11099, 69.10291], [20.98641, 69.18809], [21.00732, 69.22755], [21.27827, 69.31281], [21.63833, 69.27485], [22.27276, 68.89514], [22.38367, 68.71561], [22.53321, 68.74393], [23.13064, 68.64684], [23.68017, 68.70276], [23.781, 68.84514], [24.02299, 68.81601], [24.18432, 68.73936], [24.74898, 68.65143], [24.90023, 68.55579], [24.93048, 68.61102], [25.10189, 68.63307], [25.12206, 68.78684], [25.42455, 68.90328], [25.61613, 68.89602], [25.75729, 68.99383], [25.69679, 69.27039], [25.96904, 69.68397], [26.40261, 69.91377], [26.64461, 69.96565], [27.05802, 69.92069], [27.57226, 70.06215], [27.95542, 70.0965], [27.97558, 69.99671], [28.32849, 69.88605], [28.36883, 69.81658], [29.12697, 69.69193], [29.31664, 69.47994], [28.8629, 69.22395], [28.81248, 69.11997], [28.91738, 69.04774], [29.0444, 69.0119], [29.26623, 69.13794], [29.27631, 69.2811], [29.97205, 69.41623], [30.16363, 69.65244], [30.52662, 69.54699], [30.95011, 69.54699], [30.84095, 69.80584], [31.59909, 70.16571], [32.07813, 72.01005], [-11.60274, 67.73467], [7.28637, 57.35913], [10.40861, 58.38489]]]] } },
-    { type: "Feature", properties: { wikidata: "Q98543636", nameEn: "Mainland Ecuador", country: "EC", groups: ["005", "419", "019", "UN"], callingCodes: ["593"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-84.52388, -3.36941], [-80.30602, -3.39149], [-80.20647, -3.431], [-80.24123, -3.46124], [-80.24586, -3.48677], [-80.23651, -3.48652], [-80.22629, -3.501], [-80.20535, -3.51667], [-80.21642, -3.5888], [-80.19848, -3.59249], [-80.18741, -3.63994], [-80.19926, -3.68894], [-80.13232, -3.90317], [-80.46386, -4.01342], [-80.4822, -4.05477], [-80.45023, -4.20938], [-80.32114, -4.21323], [-80.46386, -4.41516], [-80.39256, -4.48269], [-80.13945, -4.29786], [-79.79722, -4.47558], [-79.59402, -4.46848], [-79.26248, -4.95167], [-79.1162, -4.97774], [-79.01659, -5.01481], [-78.85149, -4.66795], [-78.68394, -4.60754], [-78.34362, -3.38633], [-78.24589, -3.39907], [-78.22642, -3.51113], [-78.14324, -3.47653], [-78.19369, -3.36431], [-77.94147, -3.05454], [-76.6324, -2.58397], [-76.05203, -2.12179], [-75.57429, -1.55961], [-75.3872, -0.9374], [-75.22862, -0.95588], [-75.22862, -0.60048], [-75.53615, -0.19213], [-75.60169, -0.18708], [-75.61997, -0.10012], [-75.40192, -0.17196], [-75.25764, -0.11943], [-75.82927, 0.09578], [-76.23441, 0.42294], [-76.41215, 0.38228], [-76.4094, 0.24015], [-76.89177, 0.24736], [-77.52001, 0.40782], [-77.49984, 0.64476], [-77.67815, 0.73863], [-77.66416, 0.81604], [-77.68613, 0.83029], [-77.7148, 0.85003], [-77.85677, 0.80197], [-78.42749, 1.15389], [-78.87137, 1.47457], [-82.12561, 4.00341], [-84.52388, -3.36941]]]] } },
-    { type: "Feature", properties: { m49: "001", wikidata: "Q2", nameEn: "World", aliases: ["Earth", "Planet"], level: "world" }, geometry: null },
-    { type: "Feature", properties: { m49: "002", wikidata: "Q15", nameEn: "Africa", level: "region" }, geometry: null },
-    { type: "Feature", properties: { m49: "003", wikidata: "Q49", nameEn: "North America", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "005", wikidata: "Q18", nameEn: "South America", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "009", wikidata: "Q538", nameEn: "Oceania", level: "region" }, geometry: null },
-    { type: "Feature", properties: { m49: "011", wikidata: "Q4412", nameEn: "Western Africa", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "013", wikidata: "Q27611", nameEn: "Central America", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "014", wikidata: "Q27407", nameEn: "Eastern Africa", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "015", wikidata: "Q27381", nameEn: "Northern Africa", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "017", wikidata: "Q27433", nameEn: "Middle Africa", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "018", wikidata: "Q27394", nameEn: "Southern Africa", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "019", wikidata: "Q828", nameEn: "Americas", level: "region" }, geometry: null },
-    { type: "Feature", properties: { m49: "021", wikidata: "Q2017699", nameEn: "Northern America", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "029", wikidata: "Q664609", nameEn: "Caribbean", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { m49: "030", wikidata: "Q27231", nameEn: "Eastern Asia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "034", wikidata: "Q771405", nameEn: "Southern Asia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "035", wikidata: "Q11708", nameEn: "South-eastern Asia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "039", wikidata: "Q27449", nameEn: "Southern Europe", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "053", wikidata: "Q45256", nameEn: "Australia and New Zealand", aliases: ["Australasia"], level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "054", wikidata: "Q37394", nameEn: "Melanesia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "057", wikidata: "Q3359409", nameEn: "Micronesia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "061", wikidata: "Q35942", nameEn: "Polynesia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "142", wikidata: "Q48", nameEn: "Asia", level: "region" }, geometry: null },
-    { type: "Feature", properties: { m49: "143", wikidata: "Q27275", nameEn: "Central Asia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "145", wikidata: "Q27293", nameEn: "Western Asia", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "150", wikidata: "Q46", nameEn: "Europe", level: "region" }, geometry: null },
-    { type: "Feature", properties: { m49: "151", wikidata: "Q27468", nameEn: "Eastern Europe", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "154", wikidata: "Q27479", nameEn: "Northern Europe", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "155", wikidata: "Q27496", nameEn: "Western Europe", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "202", wikidata: "Q132959", nameEn: "Sub-Saharan Africa", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "419", wikidata: "Q72829598", nameEn: "Latin America and the Caribbean", level: "subregion" }, geometry: null },
-    { type: "Feature", properties: { m49: "830", wikidata: "Q42314", nameEn: "Channel Islands", level: "intermediateRegion" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "AC", iso1A3: "ASC", wikidata: "Q46197", nameEn: "Ascension Island", aliases: ["SH-AC"], country: "GB", groups: ["SH", "BOTS", "011", "202", "002", "UN"], isoStatus: "excRes", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["247"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-14.82771, -8.70814], [-13.33271, -8.07391], [-14.91926, -6.63386], [-14.82771, -8.70814]]]] } },
-    { type: "Feature", properties: { iso1A2: "AD", iso1A3: "AND", iso1N3: "020", wikidata: "Q228", nameEn: "Andorra", groups: ["Q12837", "039", "150", "UN"], callingCodes: ["376"] }, geometry: { type: "MultiPolygon", coordinates: [[[[1.72515, 42.50338], [1.73683, 42.55492], [1.7858, 42.57698], [1.72588, 42.59098], [1.73452, 42.61515], [1.68267, 42.62533], [1.6625, 42.61982], [1.63485, 42.62957], [1.60085, 42.62703], [1.55418, 42.65669], [1.50867, 42.64483], [1.48043, 42.65203], [1.46718, 42.63296], [1.47986, 42.61346], [1.44197, 42.60217], [1.42512, 42.58292], [1.44529, 42.56722], [1.4234, 42.55959], [1.41245, 42.53539], [1.44759, 42.54431], [1.46661, 42.50949], [1.41648, 42.48315], [1.43838, 42.47848], [1.44529, 42.43724], [1.5127, 42.42959], [1.55073, 42.43299], [1.55937, 42.45808], [1.57953, 42.44957], [1.58933, 42.46275], [1.65674, 42.47125], [1.66826, 42.50779], [1.70571, 42.48867], [1.72515, 42.50338]]]] } },
-    { type: "Feature", properties: { iso1A2: "AE", iso1A3: "ARE", iso1N3: "784", wikidata: "Q878", nameEn: "United Arab Emirates", groups: ["145", "142", "UN"], callingCodes: ["971"] }, geometry: { type: "MultiPolygon", coordinates: [[[[56.26534, 25.62825], [56.25341, 25.61443], [56.26636, 25.60643], [56.25365, 25.60211], [56.20473, 25.61119], [56.18363, 25.65508], [56.14826, 25.66351], [56.13579, 25.73524], [56.17416, 25.77239], [56.13963, 25.82765], [56.19334, 25.9795], [56.15498, 26.06828], [56.08666, 26.05038], [55.81777, 26.18798], [55.14145, 25.62624], [53.97892, 24.64436], [52.82259, 25.51697], [52.35509, 25.00368], [52.02277, 24.75635], [51.83108, 24.71675], [51.58834, 24.66608], [51.41644, 24.39615], [51.58871, 24.27256], [51.59617, 24.12041], [52.56622, 22.94341], [55.13599, 22.63334], [55.2137, 22.71065], [55.22634, 23.10378], [55.57358, 23.669], [55.48677, 23.94946], [55.73301, 24.05994], [55.8308, 24.01633], [56.01799, 24.07426], [55.95472, 24.2172], [55.83367, 24.20193], [55.77658, 24.23476], [55.76558, 24.23227], [55.75257, 24.23466], [55.75382, 24.2466], [55.75939, 24.26114], [55.76781, 24.26209], [55.79145, 24.27914], [55.80747, 24.31069], [55.83395, 24.32776], [55.83271, 24.41521], [55.76461, 24.5287], [55.83271, 24.68567], [55.83408, 24.77858], [55.81348, 24.80102], [55.81116, 24.9116], [55.85094, 24.96858], [55.90849, 24.96771], [55.96316, 25.00857], [56.05715, 24.95727], [56.05106, 24.87461], [55.97467, 24.89639], [55.97836, 24.87673], [56.03535, 24.81161], [56.06128, 24.74457], [56.13684, 24.73699], [56.20062, 24.78565], [56.20568, 24.85063], [56.30269, 24.88334], [56.34873, 24.93205], [56.3227, 24.97284], [56.86325, 25.03856], [56.82555, 25.7713], [56.26534, 25.62825]], [[56.26062, 25.33108], [56.3005, 25.31815], [56.3111, 25.30107], [56.35172, 25.30681], [56.34438, 25.26653], [56.27628, 25.23404], [56.24341, 25.22867], [56.20872, 25.24104], [56.20838, 25.25668], [56.24465, 25.27505], [56.25008, 25.28843], [56.23362, 25.31253], [56.26062, 25.33108]]], [[[56.28423, 25.26344], [56.29379, 25.2754], [56.28102, 25.28486], [56.2716, 25.27916], [56.27086, 25.26128], [56.28423, 25.26344]]]] } },
-    { type: "Feature", properties: { iso1A2: "AF", iso1A3: "AFG", iso1N3: "004", wikidata: "Q889", nameEn: "Afghanistan", groups: ["034", "142", "UN"], callingCodes: ["93"] }, geometry: { type: "MultiPolygon", coordinates: [[[[70.61526, 38.34774], [70.60407, 38.28046], [70.54673, 38.24541], [70.4898, 38.12546], [70.17206, 37.93276], [70.1863, 37.84296], [70.27694, 37.81258], [70.28243, 37.66706], [70.15015, 37.52519], [69.95971, 37.5659], [69.93362, 37.61378], [69.84435, 37.60616], [69.80041, 37.5746], [69.51888, 37.5844], [69.44954, 37.4869], [69.36645, 37.40462], [69.45022, 37.23315], [69.39529, 37.16752], [69.25152, 37.09426], [69.03274, 37.25174], [68.96407, 37.32603], [68.88168, 37.33368], [68.91189, 37.26704], [68.80889, 37.32494], [68.81438, 37.23862], [68.6798, 37.27906], [68.61851, 37.19815], [68.41888, 37.13906], [68.41201, 37.10402], [68.29253, 37.10621], [68.27605, 37.00977], [68.18542, 37.02074], [68.02194, 36.91923], [67.87917, 37.0591], [67.7803, 37.08978], [67.78329, 37.1834], [67.51868, 37.26102], [67.2581, 37.17216], [67.2224, 37.24545], [67.13039, 37.27168], [67.08232, 37.35469], [66.95598, 37.40162], [66.64699, 37.32958], [66.55743, 37.35409], [66.30993, 37.32409], [65.72274, 37.55438], [65.64137, 37.45061], [65.64263, 37.34388], [65.51778, 37.23881], [64.97945, 37.21913], [64.61141, 36.6351], [64.62514, 36.44311], [64.57295, 36.34362], [64.43288, 36.24401], [64.05385, 36.10433], [63.98519, 36.03773], [63.56496, 35.95106], [63.53475, 35.90881], [63.29579, 35.85985], [63.12276, 35.86208], [63.10318, 35.81782], [63.23262, 35.67487], [63.10079, 35.63024], [63.12276, 35.53196], [63.0898, 35.43131], [62.90853, 35.37086], [62.74098, 35.25432], [62.62288, 35.22067], [62.48006, 35.28796], [62.29878, 35.13312], [62.29191, 35.25964], [62.15871, 35.33278], [62.05709, 35.43803], [61.97743, 35.4604], [61.77693, 35.41341], [61.58742, 35.43803], [61.27371, 35.61482], [61.18187, 35.30249], [61.0991, 35.27845], [61.12831, 35.09938], [61.06926, 34.82139], [61.00197, 34.70631], [60.99922, 34.63064], [60.72316, 34.52857], [60.91321, 34.30411], [60.66502, 34.31539], [60.50209, 34.13992], [60.5838, 33.80793], [60.5485, 33.73422], [60.57762, 33.59772], [60.69573, 33.56054], [60.91133, 33.55596], [60.88908, 33.50219], [60.56485, 33.12944], [60.86191, 32.22565], [60.84541, 31.49561], [61.70929, 31.37391], [61.80569, 31.16167], [61.80957, 31.12576], [61.83257, 31.0452], [61.8335, 30.97669], [61.78268, 30.92724], [61.80829, 30.84224], [60.87231, 29.86514], [62.47751, 29.40782], [63.5876, 29.50456], [64.12966, 29.39157], [64.19796, 29.50407], [64.62116, 29.58903], [65.04005, 29.53957], [66.24175, 29.85181], [66.36042, 29.9583], [66.23609, 30.06321], [66.34869, 30.404], [66.28413, 30.57001], [66.39194, 30.9408], [66.42645, 30.95309], [66.58175, 30.97532], [66.68166, 31.07597], [66.72561, 31.20526], [66.83273, 31.26867], [67.04147, 31.31561], [67.03323, 31.24519], [67.29964, 31.19586], [67.78854, 31.33203], [67.7748, 31.4188], [67.62374, 31.40473], [67.58323, 31.52772], [67.72056, 31.52304], [67.86887, 31.63536], [68.00071, 31.6564], [68.1655, 31.82691], [68.25614, 31.80357], [68.27605, 31.75863], [68.44222, 31.76446], [68.57475, 31.83158], [68.6956, 31.75687], [68.79997, 31.61665], [68.91078, 31.59687], [68.95995, 31.64822], [69.00939, 31.62249], [69.11514, 31.70782], [69.20577, 31.85957], [69.3225, 31.93186], [69.27032, 32.14141], [69.27932, 32.29119], [69.23599, 32.45946], [69.2868, 32.53938], [69.38155, 32.56601], [69.44747, 32.6678], [69.43649, 32.7302], [69.38018, 32.76601], [69.47082, 32.85834], [69.5436, 32.8768], [69.49854, 32.88843], [69.49004, 33.01509], [69.57656, 33.09911], [69.71526, 33.09911], [69.79766, 33.13247], [69.85259, 33.09451], [70.02563, 33.14282], [70.07369, 33.22557], [70.13686, 33.21064], [70.32775, 33.34496], [70.17062, 33.53535], [70.20141, 33.64387], [70.14785, 33.6553], [70.14236, 33.71701], [70.00503, 33.73528], [69.85671, 33.93719], [69.87307, 33.9689], [69.90203, 34.04194], [70.54336, 33.9463], [70.88119, 33.97933], [71.07345, 34.06242], [71.06933, 34.10564], [71.09307, 34.11961], [71.09453, 34.13524], [71.13078, 34.16503], [71.12815, 34.26619], [71.17662, 34.36769], [71.02401, 34.44835], [71.0089, 34.54568], [71.11602, 34.63047], [71.08718, 34.69034], [71.28356, 34.80882], [71.29472, 34.87728], [71.50329, 34.97328], [71.49917, 35.00478], [71.55273, 35.02615], [71.52938, 35.09023], [71.67495, 35.21262], [71.5541, 35.28776], [71.54294, 35.31037], [71.65435, 35.4479], [71.49917, 35.6267], [71.55273, 35.71483], [71.37969, 35.95865], [71.19505, 36.04134], [71.60491, 36.39429], [71.80267, 36.49924], [72.18135, 36.71838], [72.6323, 36.84601], [73.82685, 36.91421], [74.04856, 36.82648], [74.43389, 37.00977], [74.53739, 36.96224], [74.56453, 37.03023], [74.49981, 37.24518], [74.80605, 37.21565], [74.88887, 37.23275], [74.8294, 37.3435], [74.68383, 37.3948], [74.56161, 37.37734], [74.41055, 37.3948], [74.23339, 37.41116], [74.20308, 37.34208], [73.8564, 37.26158], [73.82552, 37.22659], [73.64974, 37.23643], [73.61129, 37.27469], [73.76647, 37.33913], [73.77197, 37.4417], [73.29633, 37.46495], [73.06884, 37.31729], [72.79693, 37.22222], [72.66381, 37.02014], [72.54095, 37.00007], [72.31676, 36.98115], [71.83229, 36.68084], [71.67083, 36.67346], [71.57195, 36.74943], [71.51502, 36.89128], [71.48481, 36.93218], [71.46923, 36.99925], [71.45578, 37.03094], [71.43097, 37.05855], [71.44127, 37.11856], [71.4494, 37.18137], [71.4555, 37.21418], [71.47386, 37.2269], [71.48339, 37.23937], [71.4824, 37.24921], [71.48536, 37.26017], [71.50674, 37.31502], [71.49821, 37.31975], [71.4862, 37.33405], [71.47685, 37.40281], [71.49612, 37.4279], [71.5256, 37.47971], [71.50616, 37.50733], [71.49693, 37.53527], [71.5065, 37.60912], [71.51972, 37.61945], [71.54186, 37.69691], [71.55234, 37.73209], [71.53053, 37.76534], [71.54324, 37.77104], [71.55752, 37.78677], [71.59255, 37.79956], [71.58843, 37.92425], [71.51565, 37.95349], [71.32871, 37.88564], [71.296, 37.93403], [71.2809, 37.91995], [71.24969, 37.93031], [71.27278, 37.96496], [71.27622, 37.99946], [71.28922, 38.01272], [71.29878, 38.04429], [71.36444, 38.15358], [71.37803, 38.25641], [71.33869, 38.27335], [71.33114, 38.30339], [71.21291, 38.32797], [71.1451, 38.40106], [71.10957, 38.40671], [71.10592, 38.42077], [71.09542, 38.42517], [71.0556, 38.40176], [71.03545, 38.44779], [70.98693, 38.48862], [70.92728, 38.43021], [70.88719, 38.46826], [70.84376, 38.44688], [70.82538, 38.45394], [70.81697, 38.44507], [70.80521, 38.44447], [70.79766, 38.44944], [70.78702, 38.45031], [70.78581, 38.45502], [70.77132, 38.45548], [70.75455, 38.4252], [70.72485, 38.4131], [70.69807, 38.41861], [70.67438, 38.40597], [70.6761, 38.39144], [70.69189, 38.37031], [70.64966, 38.34999], [70.61526, 38.34774]]]] } },
-    { type: "Feature", properties: { iso1A2: "AG", iso1A3: "ATG", iso1N3: "028", wikidata: "Q781", nameEn: "Antigua and Barbuda", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 268"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.66959, 18.6782], [-62.58307, 16.68909], [-62.1023, 16.97277], [-61.23098, 16.62484], [-61.66959, 18.6782]]]] } },
-    { type: "Feature", properties: { iso1A2: "AI", iso1A3: "AIA", iso1N3: "660", wikidata: "Q25228", nameEn: "Anguilla", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 264"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.79029, 19.11219], [-63.35989, 18.06012], [-62.62718, 18.26185], [-63.79029, 19.11219]]]] } },
-    { type: "Feature", properties: { iso1A2: "AL", iso1A3: "ALB", iso1N3: "008", wikidata: "Q222", nameEn: "Albania", groups: ["039", "150", "UN"], callingCodes: ["355"] }, geometry: { type: "MultiPolygon", coordinates: [[[[20.07761, 42.55582], [20.01834, 42.54622], [20.00842, 42.5109], [19.9324, 42.51699], [19.82333, 42.46581], [19.76549, 42.50237], [19.74731, 42.57422], [19.77375, 42.58517], [19.73244, 42.66299], [19.65972, 42.62774], [19.4836, 42.40831], [19.42352, 42.36546], [19.42, 42.33019], [19.28623, 42.17745], [19.40687, 42.10024], [19.37548, 42.06835], [19.36867, 42.02564], [19.37691, 41.96977], [19.34601, 41.95675], [19.33812, 41.90669], [19.37451, 41.8842], [19.37597, 41.84849], [19.26406, 41.74971], [19.0384, 40.35325], [19.95905, 39.82857], [19.97622, 39.78684], [19.92466, 39.69533], [19.98042, 39.6504], [20.00957, 39.69227], [20.05189, 39.69112], [20.12956, 39.65805], [20.15988, 39.652], [20.22376, 39.64532], [20.22707, 39.67459], [20.27412, 39.69884], [20.31961, 39.72799], [20.29152, 39.80421], [20.30804, 39.81563], [20.38572, 39.78516], [20.41475, 39.81437], [20.41546, 39.82832], [20.31135, 39.99438], [20.37911, 39.99058], [20.42373, 40.06777], [20.48487, 40.06271], [20.51297, 40.08168], [20.55593, 40.06524], [20.61081, 40.07866], [20.62566, 40.0897], [20.67162, 40.09433], [20.71789, 40.27739], [20.78234, 40.35803], [20.7906, 40.42726], [20.83688, 40.47882], [20.94925, 40.46625], [20.96908, 40.51526], [21.03932, 40.56299], [21.05833, 40.66586], [20.98134, 40.76046], [20.95752, 40.76982], [20.98396, 40.79109], [20.97887, 40.85475], [20.97693, 40.90103], [20.94305, 40.92399], [20.83671, 40.92752], [20.81567, 40.89662], [20.73504, 40.9081], [20.71634, 40.91781], [20.65558, 41.08009], [20.63454, 41.0889], [20.59832, 41.09066], [20.58546, 41.11179], [20.59715, 41.13644], [20.51068, 41.2323], [20.49432, 41.33679], [20.52119, 41.34381], [20.55976, 41.4087], [20.51301, 41.442], [20.49039, 41.49277], [20.45331, 41.51436], [20.45809, 41.5549], [20.52103, 41.56473], [20.55508, 41.58113], [20.51769, 41.65975], [20.52937, 41.69292], [20.51301, 41.72433], [20.53405, 41.78099], [20.57144, 41.7897], [20.55976, 41.87068], [20.59524, 41.8818], [20.57946, 41.91593], [20.63069, 41.94913], [20.59434, 42.03879], [20.55633, 42.08173], [20.56955, 42.12097], [20.48857, 42.25444], [20.3819, 42.3029], [20.34479, 42.32656], [20.24399, 42.32168], [20.21797, 42.41237], [20.17127, 42.50469], [20.07761, 42.55582]]]] } },
-    { type: "Feature", properties: { iso1A2: "AM", iso1A3: "ARM", iso1N3: "051", wikidata: "Q399", nameEn: "Armenia", groups: ["145", "142", "UN"], callingCodes: ["374"] }, geometry: { type: "MultiPolygon", coordinates: [[[[45.0133, 41.29747], [44.93493, 41.25685], [44.81437, 41.30371], [44.80053, 41.25949], [44.81749, 41.23488], [44.84358, 41.23088], [44.89911, 41.21366], [44.87887, 41.20195], [44.82084, 41.21513], [44.72814, 41.20338], [44.61462, 41.24018], [44.59322, 41.1933], [44.46791, 41.18204], [44.34417, 41.2382], [44.34337, 41.20312], [44.32139, 41.2079], [44.18148, 41.24644], [44.16591, 41.19141], [43.84835, 41.16329], [43.74717, 41.1117], [43.67712, 41.13398], [43.4717, 41.12611], [43.44984, 41.0988], [43.47319, 41.02251], [43.58683, 40.98961], [43.67712, 40.93084], [43.67712, 40.84846], [43.74872, 40.7365], [43.7425, 40.66805], [43.63664, 40.54159], [43.54791, 40.47413], [43.60862, 40.43267], [43.59928, 40.34019], [43.71136, 40.16673], [43.65221, 40.14889], [43.65688, 40.11199], [43.92307, 40.01787], [44.1057, 40.03555], [44.1778, 40.02845], [44.26973, 40.04866], [44.46635, 39.97733], [44.61845, 39.8281], [44.75779, 39.7148], [44.88354, 39.74432], [44.92869, 39.72157], [45.06604, 39.79277], [45.18554, 39.67846], [45.17464, 39.58614], [45.21784, 39.58074], [45.23535, 39.61373], [45.30385, 39.61373], [45.29606, 39.57654], [45.46992, 39.49888], [45.70547, 39.60174], [45.80804, 39.56716], [45.83, 39.46487], [45.79225, 39.3695], [45.99774, 39.28931], [46.02303, 39.09978], [46.06973, 39.0744], [46.14785, 38.84206], [46.20601, 38.85262], [46.34059, 38.92076], [46.53497, 38.86548], [46.51805, 38.94982], [46.54296, 39.07078], [46.44022, 39.19636], [46.52584, 39.18912], [46.54141, 39.15895], [46.58032, 39.21204], [46.63481, 39.23013], [46.56476, 39.24942], [46.50093, 39.33736], [46.43244, 39.35181], [46.37795, 39.42039], [46.4013, 39.45405], [46.53051, 39.47809], [46.51027, 39.52373], [46.57721, 39.54414], [46.57098, 39.56694], [46.52117, 39.58734], [46.42465, 39.57534], [46.40286, 39.63651], [46.18493, 39.60533], [45.96543, 39.78859], [45.82533, 39.82925], [45.7833, 39.9475], [45.60895, 39.97733], [45.59806, 40.0131], [45.78642, 40.03218], [45.83779, 39.98925], [45.97944, 40.181], [45.95609, 40.27846], [45.65098, 40.37696], [45.42994, 40.53804], [45.45484, 40.57707], [45.35366, 40.65979], [45.4206, 40.7424], [45.55914, 40.78366], [45.60584, 40.87436], [45.40814, 40.97904], [45.44083, 41.01663], [45.39725, 41.02603], [45.35677, 40.99784], [45.28859, 41.03757], [45.26162, 41.0228], [45.25897, 41.0027], [45.1994, 41.04518], [45.16493, 41.05068], [45.1634, 41.08082], [45.1313, 41.09369], [45.12923, 41.06059], [45.06784, 41.05379], [45.08028, 41.10917], [45.19942, 41.13299], [45.1969, 41.168], [45.11811, 41.19967], [45.05201, 41.19211], [45.02932, 41.2101], [45.05497, 41.2464], [45.0133, 41.29747]], [[45.21324, 40.9817], [45.21219, 40.99001], [45.20518, 40.99348], [45.19312, 40.98998], [45.18382, 41.0066], [45.20625, 41.01484], [45.23487, 41.00226], [45.23095, 40.97828], [45.21324, 40.9817]], [[45.00864, 41.03411], [44.9903, 41.05657], [44.96031, 41.06345], [44.95383, 41.07553], [44.97169, 41.09176], [45.00864, 41.09407], [45.03406, 41.07931], [45.04517, 41.06653], [45.03792, 41.03938], [45.00864, 41.03411]]], [[[45.50279, 40.58424], [45.56071, 40.64765], [45.51825, 40.67382], [45.47927, 40.65023], [45.50279, 40.58424]]]] } },
-    { type: "Feature", properties: { iso1A2: "AO", iso1A3: "AGO", iso1N3: "024", wikidata: "Q916", nameEn: "Angola", groups: ["017", "202", "002", "UN"], callingCodes: ["244"] }, geometry: { type: "MultiPolygon", coordinates: [[[[16.55507, -5.85631], [13.04371, -5.87078], [12.42245, -6.07585], [11.95767, -5.94705], [12.20376, -5.76338], [12.26557, -5.74031], [12.52318, -5.74353], [12.52301, -5.17481], [12.53599, -5.1618], [12.53586, -5.14658], [12.51589, -5.1332], [12.49815, -5.14058], [12.46297, -5.09408], [12.60251, -5.01715], [12.63465, -4.94632], [12.70868, -4.95505], [12.8733, -4.74346], [13.11195, -4.67745], [13.09648, -4.63739], [12.91489, -4.47907], [12.87096, -4.40315], [12.76844, -4.38709], [12.64835, -4.55937], [12.40964, -4.60609], [12.32324, -4.78415], [12.25587, -4.79437], [12.20901, -4.75642], [12.16068, -4.90089], [12.00924, -5.02627], [11.50888, -5.33417], [10.5065, -17.25284], [11.75063, -17.25013], [12.07076, -17.15165], [12.52111, -17.24495], [12.97145, -16.98567], [13.36212, -16.98048], [13.95896, -17.43141], [14.28743, -17.38814], [18.39229, -17.38927], [18.84226, -17.80375], [21.14283, -17.94318], [21.42741, -18.02787], [23.47474, -17.62877], [23.20038, -17.47563], [22.17217, -16.50269], [22.00323, -16.18028], [21.97988, -13.00148], [24.03339, -12.99091], [23.90937, -12.844], [24.06672, -12.29058], [23.98804, -12.13149], [24.02603, -11.15368], [24.00027, -10.89356], [23.86868, -11.02856], [23.45631, -10.946], [23.16602, -11.10577], [22.54205, -11.05784], [22.25951, -11.24911], [22.17954, -10.85884], [22.32604, -10.76291], [22.19039, -9.94628], [21.84856, -9.59871], [21.79824, -7.29628], [20.56263, -7.28566], [20.61689, -6.90876], [20.31846, -6.91953], [20.30218, -6.98955], [19.5469, -7.00195], [19.33698, -7.99743], [18.33635, -8.00126], [17.5828, -8.13784], [16.96282, -7.21787], [16.55507, -5.85631]]]] } },
-    { type: "Feature", properties: { iso1A2: "AQ", iso1A3: "ATA", iso1N3: "010", wikidata: "Q51", nameEn: "Antarctica", level: "region", callingCodes: ["672"] }, geometry: { type: "MultiPolygon", coordinates: [[[[180, -60], [-180, -60], [-180, -90], [180, -90], [180, -60]]]] } },
-    { type: "Feature", properties: { iso1A2: "AR", iso1A3: "ARG", iso1N3: "032", wikidata: "Q414", nameEn: "Argentina", aliases: ["RA"], groups: ["005", "419", "019", "UN"], callingCodes: ["54"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-72.31343, -50.58411], [-72.33873, -51.59954], [-71.99889, -51.98018], [-69.97824, -52.00845], [-68.41683, -52.33516], [-68.60702, -52.65781], [-68.60733, -54.9125], [-68.01394, -54.8753], [-67.46182, -54.92205], [-67.11046, -54.94199], [-66.07313, -55.19618], [-63.67376, -55.11859], [-54.78916, -36.21945], [-57.83001, -34.69099], [-58.34425, -34.15035], [-58.44442, -33.84033], [-58.40475, -33.11777], [-58.1224, -32.98842], [-58.22362, -32.52416], [-58.10036, -32.25338], [-58.20252, -31.86966], [-58.00076, -31.65016], [-58.0023, -31.53084], [-58.07569, -31.44916], [-57.98127, -31.3872], [-57.9908, -31.34924], [-57.86729, -31.06352], [-57.89476, -30.95994], [-57.8024, -30.77193], [-57.89115, -30.49572], [-57.64859, -30.35095], [-57.61478, -30.25165], [-57.65132, -30.19229], [-57.09386, -29.74211], [-56.81251, -29.48154], [-56.62789, -29.18073], [-56.57295, -29.11357], [-56.54171, -29.11447], [-56.05265, -28.62651], [-56.00458, -28.60421], [-56.01729, -28.51223], [-55.65418, -28.18304], [-55.6262, -28.17124], [-55.33303, -27.94661], [-55.16872, -27.86224], [-55.1349, -27.89759], [-54.90805, -27.73149], [-54.90159, -27.63132], [-54.67657, -27.57214], [-54.50416, -27.48232], [-54.41888, -27.40882], [-54.19268, -27.30751], [-54.19062, -27.27639], [-54.15978, -27.2889], [-53.80144, -27.09844], [-53.73372, -26.6131], [-53.68269, -26.33359], [-53.64505, -26.28089], [-53.64186, -26.25976], [-53.64632, -26.24798], [-53.63881, -26.25075], [-53.63739, -26.2496], [-53.65237, -26.23289], [-53.65018, -26.19501], [-53.73968, -26.10012], [-53.73391, -26.07006], [-53.7264, -26.0664], [-53.73086, -26.05842], [-53.73511, -26.04211], [-53.83691, -25.94849], [-53.90831, -25.55513], [-54.52926, -25.62846], [-54.5502, -25.58915], [-54.59398, -25.59224], [-54.62063, -25.91213], [-54.60664, -25.9691], [-54.67359, -25.98607], [-54.69333, -26.37705], [-54.70732, -26.45099], [-54.80868, -26.55669], [-55.00584, -26.78754], [-55.06351, -26.80195], [-55.16948, -26.96068], [-55.25243, -26.93808], [-55.39611, -26.97679], [-55.62322, -27.1941], [-55.59094, -27.32444], [-55.74475, -27.44485], [-55.89195, -27.3467], [-56.18313, -27.29851], [-56.85337, -27.5165], [-58.04205, -27.2387], [-58.59549, -27.29973], [-58.65321, -27.14028], [-58.3198, -26.83443], [-58.1188, -26.16704], [-57.87176, -25.93604], [-57.57431, -25.47269], [-57.80821, -25.13863], [-58.25492, -24.92528], [-58.33055, -24.97099], [-59.33886, -24.49935], [-59.45482, -24.34787], [-60.03367, -24.00701], [-60.28163, -24.04436], [-60.99754, -23.80934], [-61.0782, -23.62932], [-61.9756, -23.0507], [-62.22768, -22.55807], [-62.51761, -22.37684], [-62.64455, -22.25091], [-62.8078, -22.12534], [-62.81124, -21.9987], [-63.66482, -21.99918], [-63.68113, -22.0544], [-63.70963, -21.99934], [-63.93287, -21.99934], [-64.22918, -22.55807], [-64.31489, -22.88824], [-64.35108, -22.73282], [-64.4176, -22.67692], [-64.58888, -22.25035], [-64.67174, -22.18957], [-64.90014, -22.12136], [-64.99524, -22.08255], [-65.47435, -22.08908], [-65.57743, -22.07675], [-65.58694, -22.09794], [-65.61166, -22.09504], [-65.7467, -22.10105], [-65.9261, -21.93335], [-66.04832, -21.9187], [-66.03836, -21.84829], [-66.24077, -21.77837], [-66.29714, -22.08741], [-66.7298, -22.23644], [-67.18382, -22.81525], [-66.99632, -22.99839], [-67.33563, -24.04237], [-68.24825, -24.42596], [-68.56909, -24.69831], [-68.38372, -25.08636], [-68.57622, -25.32505], [-68.38372, -26.15353], [-68.56909, -26.28146], [-68.59048, -26.49861], [-68.27677, -26.90626], [-68.43363, -27.08414], [-68.77586, -27.16029], [-69.22504, -27.95042], [-69.66709, -28.44055], [-69.80969, -29.07185], [-69.99507, -29.28351], [-69.8596, -30.26131], [-70.14479, -30.36595], [-70.55832, -31.51559], [-69.88099, -33.34489], [-69.87386, -34.13344], [-70.49416, -35.24145], [-70.38008, -36.02375], [-70.95047, -36.4321], [-71.24279, -37.20264], [-70.89532, -38.6923], [-71.37826, -38.91474], [-71.92726, -40.72714], [-71.74901, -42.11711], [-72.15541, -42.15941], [-72.14828, -42.85321], [-71.64206, -43.64774], [-71.81318, -44.38097], [-71.16436, -44.46244], [-71.26418, -44.75684], [-72.06985, -44.81756], [-71.35687, -45.22075], [-71.75614, -45.61611], [-71.68577, -46.55385], [-71.94152, -47.13595], [-72.50478, -47.80586], [-72.27662, -48.28727], [-72.54042, -48.52392], [-72.56894, -48.81116], [-73.09655, -49.14342], [-73.45156, -49.79461], [-73.55259, -49.92488], [-73.15765, -50.78337], [-72.31343, -50.58411]]]] } },
-    { type: "Feature", properties: { iso1A2: "AS", iso1A3: "ASM", iso1N3: "016", wikidata: "Q16641", nameEn: "American Samoa", aliases: ["US-AS"], country: "US", groups: ["Q1352230", "061", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 684"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-171.39864, -10.21587], [-170.99605, -15.1275], [-166.32598, -15.26169], [-171.39864, -10.21587]]]] } },
-    { type: "Feature", properties: { iso1A2: "AT", iso1A3: "AUT", iso1N3: "040", wikidata: "Q40", nameEn: "Austria", groups: ["EU", "155", "150", "UN"], callingCodes: ["43"] }, geometry: { type: "MultiPolygon", coordinates: [[[[15.34823, 48.98444], [15.28305, 48.98831], [15.26177, 48.95766], [15.16358, 48.94278], [15.15534, 48.99056], [14.99878, 49.01444], [14.97612, 48.96983], [14.98917, 48.90082], [14.95072, 48.79101], [14.98032, 48.77959], [14.9782, 48.7766], [14.98112, 48.77524], [14.9758, 48.76857], [14.95641, 48.75915], [14.94773, 48.76268], [14.81545, 48.7874], [14.80821, 48.77711], [14.80584, 48.73489], [14.72756, 48.69502], [14.71794, 48.59794], [14.66762, 48.58215], [14.60808, 48.62881], [14.56139, 48.60429], [14.4587, 48.64695], [14.43076, 48.58855], [14.33909, 48.55852], [14.20691, 48.5898], [14.09104, 48.5943], [14.01482, 48.63788], [14.06151, 48.66873], [13.84023, 48.76988], [13.82266, 48.75544], [13.81863, 48.73257], [13.79337, 48.71375], [13.81791, 48.69832], [13.81283, 48.68426], [13.81901, 48.6761], [13.82609, 48.62345], [13.80038, 48.59487], [13.80519, 48.58026], [13.76921, 48.55324], [13.7513, 48.5624], [13.74816, 48.53058], [13.72802, 48.51208], [13.66113, 48.53558], [13.65186, 48.55092], [13.62508, 48.55501], [13.59705, 48.57013], [13.57535, 48.55912], [13.51291, 48.59023], [13.50131, 48.58091], [13.50663, 48.57506], [13.46967, 48.55157], [13.45214, 48.56472], [13.43695, 48.55776], [13.45727, 48.51092], [13.42527, 48.45711], [13.43929, 48.43386], [13.40709, 48.37292], [13.30897, 48.31575], [13.26039, 48.29422], [13.18093, 48.29577], [13.126, 48.27867], [13.0851, 48.27711], [13.02083, 48.25689], [12.95306, 48.20629], [12.87126, 48.20318], [12.84475, 48.16556], [12.836, 48.1647], [12.8362, 48.15876], [12.82673, 48.15245], [12.80676, 48.14979], [12.78595, 48.12445], [12.7617, 48.12796], [12.74973, 48.10885], [12.76141, 48.07373], [12.8549, 48.01122], [12.87476, 47.96195], [12.91683, 47.95647], [12.9211, 47.95135], [12.91985, 47.94069], [12.92668, 47.93879], [12.93419, 47.94063], [12.93642, 47.94436], [12.93886, 47.94046], [12.94163, 47.92927], [13.00588, 47.84374], [12.98543, 47.82896], [12.96311, 47.79957], [12.93202, 47.77302], [12.94371, 47.76281], [12.9353, 47.74788], [12.91711, 47.74026], [12.90274, 47.72513], [12.91333, 47.7178], [12.92969, 47.71094], [12.98578, 47.7078], [13.01382, 47.72116], [13.07692, 47.68814], [13.09562, 47.63304], [13.06407, 47.60075], [13.06641, 47.58577], [13.04537, 47.58183], [13.05355, 47.56291], [13.03252, 47.53373], [13.04537, 47.49426], [12.9998, 47.46267], [12.98344, 47.48716], [12.9624, 47.47452], [12.85256, 47.52741], [12.84672, 47.54556], [12.80699, 47.54477], [12.77427, 47.58025], [12.82101, 47.61493], [12.76492, 47.64485], [12.77777, 47.66689], [12.7357, 47.6787], [12.6071, 47.6741], [12.57438, 47.63238], [12.53816, 47.63553], [12.50076, 47.62293], [12.44117, 47.6741], [12.43883, 47.6977], [12.37222, 47.68433], [12.336, 47.69534], [12.27991, 47.68827], [12.26004, 47.67725], [12.24017, 47.69534], [12.26238, 47.73544], [12.2542, 47.7433], [12.22571, 47.71776], [12.18303, 47.70065], [12.16217, 47.70105], [12.16769, 47.68167], [12.18347, 47.66663], [12.18507, 47.65984], [12.19895, 47.64085], [12.20801, 47.61082], [12.20398, 47.60667], [12.18568, 47.6049], [12.17737, 47.60121], [12.18145, 47.61019], [12.17824, 47.61506], [12.13734, 47.60639], [12.05788, 47.61742], [12.02282, 47.61033], [12.0088, 47.62451], [11.85572, 47.60166], [11.84052, 47.58354], [11.63934, 47.59202], [11.60681, 47.57881], [11.58811, 47.55515], [11.58578, 47.52281], [11.52618, 47.50939], [11.4362, 47.51413], [11.38128, 47.47465], [11.4175, 47.44621], [11.33804, 47.44937], [11.29597, 47.42566], [11.27844, 47.39956], [11.22002, 47.3964], [11.25157, 47.43277], [11.20482, 47.43198], [11.12536, 47.41222], [11.11835, 47.39719], [10.97111, 47.39561], [10.97111, 47.41617], [10.98513, 47.42882], [10.92437, 47.46991], [10.93839, 47.48018], [10.90918, 47.48571], [10.87061, 47.4786], [10.86945, 47.5015], [10.91268, 47.51334], [10.88814, 47.53701], [10.77596, 47.51729], [10.7596, 47.53228], [10.6965, 47.54253], [10.68832, 47.55752], [10.63456, 47.5591], [10.60337, 47.56755], [10.56912, 47.53584], [10.48849, 47.54057], [10.47329, 47.58552], [10.43473, 47.58394], [10.44992, 47.5524], [10.4324, 47.50111], [10.44291, 47.48453], [10.46278, 47.47901], [10.47446, 47.43318], [10.4359, 47.41183], [10.4324, 47.38494], [10.39851, 47.37623], [10.33424, 47.30813], [10.23257, 47.27088], [10.17531, 47.27167], [10.17648, 47.29149], [10.2147, 47.31014], [10.19998, 47.32832], [10.23757, 47.37609], [10.22774, 47.38904], [10.2127, 47.38019], [10.17648, 47.38889], [10.16362, 47.36674], [10.11805, 47.37228], [10.09819, 47.35724], [10.06897, 47.40709], [10.1052, 47.4316], [10.09001, 47.46005], [10.07131, 47.45531], [10.03859, 47.48927], [10.00003, 47.48216], [9.96029, 47.53899], [9.92407, 47.53111], [9.87733, 47.54688], [9.87499, 47.52953], [9.8189, 47.54688], [9.82591, 47.58158], [9.80254, 47.59419], [9.76748, 47.5934], [9.72736, 47.53457], [9.55125, 47.53629], [9.56312, 47.49495], [9.58208, 47.48344], [9.59482, 47.46305], [9.60205, 47.46165], [9.60484, 47.46358], [9.60841, 47.47178], [9.62158, 47.45858], [9.62475, 47.45685], [9.6423, 47.45599], [9.65728, 47.45383], [9.65863, 47.44847], [9.64483, 47.43842], [9.6446, 47.43233], [9.65043, 47.41937], [9.65136, 47.40504], [9.6629, 47.39591], [9.67334, 47.39191], [9.67445, 47.38429], [9.6711, 47.37824], [9.66243, 47.37136], [9.65427, 47.36824], [9.62476, 47.36639], [9.59978, 47.34671], [9.58513, 47.31334], [9.55857, 47.29919], [9.54773, 47.2809], [9.53116, 47.27029], [9.56766, 47.24281], [9.55176, 47.22585], [9.56981, 47.21926], [9.58264, 47.20673], [9.56539, 47.17124], [9.62623, 47.14685], [9.63395, 47.08443], [9.61216, 47.07732], [9.60717, 47.06091], [9.87935, 47.01337], [9.88266, 46.93343], [9.98058, 46.91434], [10.10715, 46.84296], [10.22675, 46.86942], [10.24128, 46.93147], [10.30031, 46.92093], [10.36933, 47.00212], [10.48376, 46.93891], [10.47197, 46.85698], [10.54783, 46.84505], [10.66405, 46.87614], [10.75753, 46.82258], [10.72974, 46.78972], [11.00764, 46.76896], [11.10618, 46.92966], [11.33355, 46.99862], [11.50739, 47.00644], [11.74789, 46.98484], [12.19254, 47.09331], [12.21781, 47.03996], [12.11675, 47.01241], [12.2006, 46.88854], [12.27591, 46.88651], [12.38708, 46.71529], [12.59992, 46.6595], [12.94445, 46.60401], [13.27627, 46.56059], [13.64088, 46.53438], [13.7148, 46.5222], [13.89837, 46.52331], [14.00422, 46.48474], [14.04002, 46.49117], [14.12097, 46.47724], [14.15989, 46.43327], [14.28326, 46.44315], [14.314, 46.43327], [14.42608, 46.44614], [14.45877, 46.41717], [14.52176, 46.42617], [14.56463, 46.37208], [14.5942, 46.43434], [14.66892, 46.44936], [14.72185, 46.49974], [14.81836, 46.51046], [14.83549, 46.56614], [14.86419, 46.59411], [14.87129, 46.61], [14.92283, 46.60848], [14.96002, 46.63459], [14.98024, 46.6009], [15.01451, 46.641], [15.14215, 46.66131], [15.23711, 46.63994], [15.41235, 46.65556], [15.45514, 46.63697], [15.46906, 46.61321], [15.54431, 46.6312], [15.55333, 46.64988], [15.54533, 46.66985], [15.59826, 46.68908], [15.62317, 46.67947], [15.63255, 46.68069], [15.6365, 46.6894], [15.6543, 46.69228], [15.6543, 46.70616], [15.67411, 46.70735], [15.69523, 46.69823], [15.72279, 46.69548], [15.73823, 46.70011], [15.76771, 46.69863], [15.78518, 46.70712], [15.8162, 46.71897], [15.87691, 46.7211], [15.94864, 46.68769], [15.98512, 46.68463], [15.99988, 46.67947], [16.04036, 46.6549], [16.04347, 46.68694], [16.02808, 46.71094], [15.99769, 46.7266], [15.98432, 46.74991], [15.99126, 46.78199], [15.99054, 46.82772], [16.05786, 46.83927], [16.10983, 46.867], [16.19904, 46.94134], [16.22403, 46.939], [16.27594, 46.9643], [16.28202, 47.00159], [16.51369, 47.00084], [16.43936, 47.03548], [16.52176, 47.05747], [16.46134, 47.09395], [16.52863, 47.13974], [16.44932, 47.14418], [16.46442, 47.16845], [16.4523, 47.18812], [16.42801, 47.18422], [16.41739, 47.20649], [16.43663, 47.21127], [16.44142, 47.25079], [16.47782, 47.25918], [16.45104, 47.41181], [16.49908, 47.39416], [16.52414, 47.41007], [16.57152, 47.40868], [16.6718, 47.46139], [16.64821, 47.50155], [16.71059, 47.52692], [16.64193, 47.63114], [16.58699, 47.61772], [16.4222, 47.66537], [16.55129, 47.72268], [16.53514, 47.73837], [16.54779, 47.75074], [16.61183, 47.76171], [16.65679, 47.74197], [16.72089, 47.73469], [16.7511, 47.67878], [16.82938, 47.68432], [16.86509, 47.72268], [16.87538, 47.68895], [17.08893, 47.70928], [17.05048, 47.79377], [17.07039, 47.81129], [17.00997, 47.86245], [17.08275, 47.87719], [17.11022, 47.92461], [17.09786, 47.97336], [17.16001, 48.00636], [17.07039, 48.0317], [17.09168, 48.09366], [17.05735, 48.14179], [17.02919, 48.13996], [16.97701, 48.17385], [16.89461, 48.31332], [16.90903, 48.32519], [16.84243, 48.35258], [16.83317, 48.38138], [16.83588, 48.3844], [16.8497, 48.38321], [16.85204, 48.44968], [16.94611, 48.53614], [16.93955, 48.60371], [16.90354, 48.71541], [16.79779, 48.70998], [16.71883, 48.73806], [16.68518, 48.7281], [16.67008, 48.77699], [16.46134, 48.80865], [16.40915, 48.74576], [16.37345, 48.729], [16.06034, 48.75436], [15.84404, 48.86921], [15.78087, 48.87644], [15.75341, 48.8516], [15.6921, 48.85973], [15.61622, 48.89541], [15.51357, 48.91549], [15.48027, 48.94481], [15.34823, 48.98444]]]] } },
-    { type: "Feature", properties: { iso1A2: "AU", iso1A3: "AUS", iso1N3: "036", wikidata: "Q408", nameEn: "Australia" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "AW", iso1A3: "ABW", iso1N3: "533", wikidata: "Q21203", nameEn: "Aruba", aliases: ["NL-AW"], country: "NL", groups: ["Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["297"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-70.00823, 12.98375], [-70.35625, 12.58277], [-69.60231, 12.17], [-70.00823, 12.98375]]]] } },
-    { type: "Feature", properties: { iso1A2: "AX", iso1A3: "ALA", iso1N3: "248", wikidata: "Q5689", nameEn: "\xC5land Islands", country: "FI", groups: ["EU", "154", "150", "UN"], callingCodes: ["358 18", "358 457"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.08191, 60.19152], [20.5104, 59.15546], [21.35468, 59.67511], [21.02509, 60.12142], [21.08159, 60.20167], [21.15143, 60.54555], [20.96741, 60.71528], [19.23413, 60.61414], [19.08191, 60.19152]]]] } },
-    { type: "Feature", properties: { iso1A2: "AZ", iso1A3: "AZE", iso1N3: "031", wikidata: "Q227", nameEn: "Azerbaijan", groups: ["145", "142", "UN"], callingCodes: ["994"] }, geometry: { type: "MultiPolygon", coordinates: [[[[46.42738, 41.91323], [46.3984, 41.84399], [46.30863, 41.79133], [46.23962, 41.75811], [46.20538, 41.77205], [46.17891, 41.72094], [46.19759, 41.62327], [46.24429, 41.59883], [46.26531, 41.63339], [46.28182, 41.60089], [46.3253, 41.60912], [46.34039, 41.5947], [46.34126, 41.57454], [46.29794, 41.5724], [46.33925, 41.4963], [46.40307, 41.48464], [46.4669, 41.43331], [46.63658, 41.37727], [46.72375, 41.28609], [46.66148, 41.20533], [46.63969, 41.09515], [46.55096, 41.1104], [46.48558, 41.0576], [46.456, 41.09984], [46.37661, 41.10805], [46.27698, 41.19011], [46.13221, 41.19479], [45.95786, 41.17956], [45.80842, 41.2229], [45.69946, 41.29545], [45.75705, 41.35157], [45.71035, 41.36208], [45.68389, 41.3539], [45.45973, 41.45898], [45.4006, 41.42402], [45.31352, 41.47168], [45.26285, 41.46433], [45.1797, 41.42231], [45.09867, 41.34065], [45.0133, 41.29747], [45.05497, 41.2464], [45.02932, 41.2101], [45.05201, 41.19211], [45.11811, 41.19967], [45.1969, 41.168], [45.19942, 41.13299], [45.08028, 41.10917], [45.06784, 41.05379], [45.12923, 41.06059], [45.1313, 41.09369], [45.1634, 41.08082], [45.16493, 41.05068], [45.1994, 41.04518], [45.25897, 41.0027], [45.26162, 41.0228], [45.28859, 41.03757], [45.35677, 40.99784], [45.39725, 41.02603], [45.44083, 41.01663], [45.40814, 40.97904], [45.60584, 40.87436], [45.55914, 40.78366], [45.4206, 40.7424], [45.35366, 40.65979], [45.45484, 40.57707], [45.42994, 40.53804], [45.65098, 40.37696], [45.95609, 40.27846], [45.97944, 40.181], [45.83779, 39.98925], [45.78642, 40.03218], [45.59806, 40.0131], [45.60895, 39.97733], [45.7833, 39.9475], [45.82533, 39.82925], [45.96543, 39.78859], [46.18493, 39.60533], [46.40286, 39.63651], [46.42465, 39.57534], [46.52117, 39.58734], [46.57098, 39.56694], [46.57721, 39.54414], [46.51027, 39.52373], [46.53051, 39.47809], [46.4013, 39.45405], [46.37795, 39.42039], [46.43244, 39.35181], [46.50093, 39.33736], [46.56476, 39.24942], [46.63481, 39.23013], [46.58032, 39.21204], [46.54141, 39.15895], [46.52584, 39.18912], [46.44022, 39.19636], [46.54296, 39.07078], [46.51805, 38.94982], [46.53497, 38.86548], [46.75752, 39.03231], [46.83822, 39.13143], [46.92539, 39.16644], [46.95341, 39.13505], [47.05771, 39.20143], [47.05927, 39.24846], [47.31301, 39.37492], [47.38978, 39.45999], [47.50099, 39.49615], [47.84774, 39.66285], [47.98977, 39.70999], [48.34264, 39.42935], [48.37385, 39.37584], [48.15984, 39.30028], [48.12404, 39.25208], [48.15361, 39.19419], [48.31239, 39.09278], [48.33884, 39.03022], [48.28437, 38.97186], [48.08627, 38.94434], [48.07734, 38.91616], [48.01409, 38.90333], [48.02581, 38.82705], [48.24773, 38.71883], [48.3146, 38.59958], [48.45084, 38.61013], [48.58793, 38.45076], [48.62217, 38.40198], [48.70001, 38.40564], [48.78979, 38.45026], [48.81072, 38.44853], [48.84969, 38.45015], [48.88288, 38.43975], [52.39847, 39.43556], [48.80971, 41.95365], [48.5867, 41.84306], [48.55078, 41.77917], [48.42301, 41.65444], [48.40277, 41.60441], [48.2878, 41.56221], [48.22064, 41.51472], [48.07587, 41.49957], [47.87973, 41.21798], [47.75831, 41.19455], [47.62288, 41.22969], [47.54504, 41.20275], [47.49004, 41.26366], [47.34579, 41.27884], [47.10762, 41.59044], [47.03757, 41.55434], [46.99554, 41.59743], [47.00955, 41.63583], [46.8134, 41.76252], [46.75269, 41.8623], [46.58924, 41.80547], [46.5332, 41.87389], [46.42738, 41.91323]], [[45.50279, 40.58424], [45.47927, 40.65023], [45.51825, 40.67382], [45.56071, 40.64765], [45.50279, 40.58424]]], [[[45.00864, 41.03411], [45.03792, 41.03938], [45.04517, 41.06653], [45.03406, 41.07931], [45.00864, 41.09407], [44.97169, 41.09176], [44.95383, 41.07553], [44.96031, 41.06345], [44.9903, 41.05657], [45.00864, 41.03411]]], [[[45.21324, 40.9817], [45.23095, 40.97828], [45.23487, 41.00226], [45.20625, 41.01484], [45.18382, 41.0066], [45.19312, 40.98998], [45.20518, 40.99348], [45.21219, 40.99001], [45.21324, 40.9817]]], [[[45.46992, 39.49888], [45.29606, 39.57654], [45.30385, 39.61373], [45.23535, 39.61373], [45.21784, 39.58074], [45.17464, 39.58614], [45.18554, 39.67846], [45.06604, 39.79277], [44.92869, 39.72157], [44.88354, 39.74432], [44.75779, 39.7148], [44.80977, 39.65768], [44.81043, 39.62677], [44.88916, 39.59653], [44.96746, 39.42998], [45.05932, 39.36435], [45.08751, 39.35052], [45.16168, 39.21952], [45.30489, 39.18333], [45.40148, 39.09007], [45.40452, 39.07224], [45.44811, 39.04927], [45.44966, 38.99243], [45.6131, 38.964], [45.6155, 38.94304], [45.65172, 38.95199], [45.83883, 38.90768], [45.90266, 38.87739], [45.94624, 38.89072], [46.00228, 38.87376], [46.06766, 38.87861], [46.14785, 38.84206], [46.06973, 39.0744], [46.02303, 39.09978], [45.99774, 39.28931], [45.79225, 39.3695], [45.83, 39.46487], [45.80804, 39.56716], [45.70547, 39.60174], [45.46992, 39.49888]]]] } },
-    { type: "Feature", properties: { iso1A2: "BA", iso1A3: "BIH", iso1N3: "070", wikidata: "Q225", nameEn: "Bosnia and Herzegovina", groups: ["039", "150", "UN"], callingCodes: ["387"] }, geometry: { type: "MultiPolygon", coordinates: [[[[17.84826, 45.04489], [17.66571, 45.13408], [17.59104, 45.10816], [17.51469, 45.10791], [17.47589, 45.12656], [17.45615, 45.12523], [17.4498, 45.16119], [17.41229, 45.13335], [17.33573, 45.14521], [17.32092, 45.16246], [17.26815, 45.18444], [17.25131, 45.14957], [17.24325, 45.146], [17.18438, 45.14764], [17.0415, 45.20759], [16.9385, 45.22742], [16.92405, 45.27607], [16.83804, 45.18951], [16.81137, 45.18434], [16.78219, 45.19002], [16.74845, 45.20393], [16.64962, 45.20714], [16.60194, 45.23042], [16.56559, 45.22307], [16.5501, 45.2212], [16.52982, 45.22713], [16.49155, 45.21153], [16.4634, 45.14522], [16.40023, 45.1147], [16.38309, 45.05955], [16.38219, 45.05139], [16.3749, 45.05206], [16.35863, 45.03529], [16.35404, 45.00241], [16.29036, 44.99732], [16.12153, 45.09616], [15.98412, 45.23088], [15.83512, 45.22459], [15.76371, 45.16508], [15.78842, 45.11519], [15.74585, 45.0638], [15.78568, 44.97401], [15.74723, 44.96818], [15.76096, 44.87045], [15.79472, 44.8455], [15.72584, 44.82334], [15.8255, 44.71501], [15.89348, 44.74964], [16.05828, 44.61538], [16.00884, 44.58605], [16.03012, 44.55572], [16.10566, 44.52586], [16.16814, 44.40679], [16.12969, 44.38275], [16.21346, 44.35231], [16.18688, 44.27012], [16.36864, 44.08263], [16.43662, 44.07523], [16.43629, 44.02826], [16.50528, 44.0244], [16.55472, 43.95326], [16.70922, 43.84887], [16.75316, 43.77157], [16.80736, 43.76011], [17.00585, 43.58037], [17.15828, 43.49376], [17.24411, 43.49376], [17.29699, 43.44542], [17.25579, 43.40353], [17.286, 43.33065], [17.46986, 43.16559], [17.64268, 43.08595], [17.70879, 42.97223], [17.5392, 42.92787], [17.6444, 42.88641], [17.68151, 42.92725], [17.7948, 42.89556], [17.80854, 42.9182], [17.88201, 42.83668], [18.24318, 42.6112], [18.36197, 42.61423], [18.43735, 42.55921], [18.49778, 42.58409], [18.53751, 42.57376], [18.55504, 42.58409], [18.52232, 42.62279], [18.57373, 42.64429], [18.54841, 42.68328], [18.54603, 42.69171], [18.55221, 42.69045], [18.56789, 42.72074], [18.47324, 42.74992], [18.45921, 42.81682], [18.47633, 42.85829], [18.4935, 42.86433], [18.49661, 42.89306], [18.49076, 42.95553], [18.52232, 43.01451], [18.66254, 43.03928], [18.64735, 43.14766], [18.66605, 43.2056], [18.71747, 43.2286], [18.6976, 43.25243], [18.76538, 43.29838], [18.85342, 43.32426], [18.84794, 43.33735], [18.83912, 43.34795], [18.90911, 43.36383], [18.95819, 43.32899], [18.95001, 43.29327], [19.00844, 43.24988], [19.04233, 43.30008], [19.08206, 43.29668], [19.08673, 43.31453], [19.04071, 43.397], [19.01078, 43.43854], [18.96053, 43.45042], [18.95469, 43.49367], [18.91379, 43.50299], [19.01078, 43.55806], [19.04934, 43.50384], [19.13933, 43.5282], [19.15685, 43.53943], [19.22807, 43.5264], [19.24774, 43.53061], [19.2553, 43.5938], [19.33426, 43.58833], [19.36653, 43.60921], [19.41941, 43.54056], [19.42696, 43.57987], [19.50455, 43.58385], [19.5176, 43.71403], [19.3986, 43.79668], [19.23465, 43.98764], [19.24363, 44.01502], [19.38439, 43.96611], [19.52515, 43.95573], [19.56498, 43.99922], [19.61836, 44.01464], [19.61991, 44.05254], [19.57467, 44.04716], [19.55999, 44.06894], [19.51167, 44.08158], [19.47321, 44.1193], [19.48386, 44.14332], [19.47338, 44.15034], [19.43905, 44.13088], [19.40927, 44.16722], [19.3588, 44.18353], [19.34773, 44.23244], [19.32464, 44.27185], [19.26945, 44.26957], [19.23306, 44.26097], [19.20508, 44.2917], [19.18328, 44.28383], [19.16741, 44.28648], [19.13332, 44.31492], [19.13556, 44.338], [19.11547, 44.34218], [19.1083, 44.3558], [19.11865, 44.36712], [19.10298, 44.36924], [19.10365, 44.37795], [19.10704, 44.38249], [19.10749, 44.39421], [19.11785, 44.40313], [19.14681, 44.41463], [19.14837, 44.45253], [19.12278, 44.50132], [19.13369, 44.52521], [19.16699, 44.52197], [19.26388, 44.65412], [19.32543, 44.74058], [19.36722, 44.88164], [19.18183, 44.92055], [19.01994, 44.85493], [18.8704, 44.85097], [18.76347, 44.90669], [18.76369, 44.93707], [18.80661, 44.93561], [18.78357, 44.97741], [18.65723, 45.07544], [18.47939, 45.05871], [18.41896, 45.11083], [18.32077, 45.1021], [18.24387, 45.13699], [18.1624, 45.07654], [18.03121, 45.12632], [18.01594, 45.15163], [17.99479, 45.14958], [17.97834, 45.13831], [17.97336, 45.12245], [17.93706, 45.08016], [17.87148, 45.04645], [17.84826, 45.04489]]]] } },
-    { type: "Feature", properties: { iso1A2: "BB", iso1A3: "BRB", iso1N3: "052", wikidata: "Q244", nameEn: "Barbados", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", callingCodes: ["1 246"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-58.56442, 13.24471], [-59.80731, 13.87556], [-59.82929, 12.70644], [-58.56442, 13.24471]]]] } },
-    { type: "Feature", properties: { iso1A2: "BD", iso1A3: "BGD", iso1N3: "050", wikidata: "Q902", nameEn: "Bangladesh", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["880"] }, geometry: { type: "MultiPolygon", coordinates: [[[[89.15869, 26.13708], [89.08899, 26.38845], [88.95612, 26.4564], [88.92357, 26.40711], [88.91321, 26.37984], [89.05328, 26.2469], [88.85004, 26.23211], [88.78961, 26.31093], [88.67837, 26.26291], [88.69485, 26.38353], [88.62144, 26.46783], [88.4298, 26.54489], [88.41196, 26.63837], [88.33093, 26.48929], [88.35153, 26.45241], [88.36938, 26.48683], [88.48749, 26.45855], [88.51649, 26.35923], [88.35153, 26.29123], [88.34757, 26.22216], [88.1844, 26.14417], [88.16581, 26.0238], [88.08804, 25.91334], [88.13138, 25.78773], [88.242, 25.80811], [88.45103, 25.66245], [88.4559, 25.59227], [88.677, 25.46959], [88.81296, 25.51546], [88.85278, 25.34679], [89.01105, 25.30303], [89.00463, 25.26583], [88.94067, 25.18534], [88.44766, 25.20149], [88.46277, 25.07468], [88.33917, 24.86803], [88.27325, 24.88796], [88.21832, 24.96642], [88.14004, 24.93529], [88.15515, 24.85806], [88.00683, 24.66477], [88.08786, 24.63232], [88.12296, 24.51301], [88.50934, 24.32474], [88.68801, 24.31464], [88.74841, 24.1959], [88.6976, 24.14703], [88.73743, 23.91751], [88.66189, 23.87607], [88.58087, 23.87105], [88.56507, 23.64044], [88.74841, 23.47361], [88.79351, 23.50535], [88.79254, 23.46028], [88.71133, 23.2492], [88.99148, 23.21134], [88.86377, 23.08759], [88.88327, 23.03885], [88.87063, 22.95235], [88.96713, 22.83346], [88.9151, 22.75228], [88.94614, 22.66941], [88.9367, 22.58527], [89.07114, 22.15335], [89.08044, 21.41871], [92.47409, 20.38654], [92.26071, 21.05697], [92.17752, 21.17445], [92.20087, 21.337], [92.37939, 21.47764], [92.43158, 21.37025], [92.55105, 21.3856], [92.60187, 21.24615], [92.68152, 21.28454], [92.59775, 21.6092], [92.62187, 21.87037], [92.60949, 21.97638], [92.56616, 22.13554], [92.60029, 22.1522], [92.5181, 22.71441], [92.37665, 22.9435], [92.38214, 23.28705], [92.26541, 23.70392], [92.15417, 23.73409], [92.04706, 23.64229], [91.95093, 23.73284], [91.95642, 23.47361], [91.84789, 23.42235], [91.76417, 23.26619], [91.81634, 23.08001], [91.7324, 23.00043], [91.61571, 22.93929], [91.54993, 23.01051], [91.46615, 23.2328], [91.4035, 23.27522], [91.40848, 23.07117], [91.36453, 23.06612], [91.28293, 23.37538], [91.15579, 23.6599], [91.25192, 23.83463], [91.22308, 23.89616], [91.29587, 24.0041], [91.35741, 23.99072], [91.37414, 24.10693], [91.55542, 24.08687], [91.63782, 24.1132], [91.65292, 24.22095], [91.73257, 24.14703], [91.76004, 24.23848], [91.82596, 24.22345], [91.89258, 24.14674], [91.96603, 24.3799], [92.11662, 24.38997], [92.15796, 24.54435], [92.25854, 24.9191], [92.38626, 24.86055], [92.49887, 24.88796], [92.39147, 25.01471], [92.33957, 25.07593], [92.0316, 25.1834], [91.63648, 25.12846], [91.25517, 25.20677], [90.87427, 25.15799], [90.65042, 25.17788], [90.40034, 25.1534], [90.1155, 25.22686], [89.90478, 25.31038], [89.87629, 25.28337], [89.83371, 25.29548], [89.84086, 25.31854], [89.81208, 25.37244], [89.86129, 25.61714], [89.84388, 25.70042], [89.80585, 25.82489], [89.86592, 25.93115], [89.77728, 26.04254], [89.77865, 26.08387], [89.73581, 26.15818], [89.70201, 26.15138], [89.63968, 26.22595], [89.57101, 25.9682], [89.53515, 26.00382], [89.35953, 26.0077], [89.15869, 26.13708]]]] } },
-    { type: "Feature", properties: { iso1A2: "BE", iso1A3: "BEL", iso1N3: "056", wikidata: "Q31", nameEn: "Belgium", groups: ["EU", "155", "150", "UN"], callingCodes: ["32"] }, geometry: { type: "MultiPolygon", coordinates: [[[[4.93295, 51.44945], [4.93909, 51.44632], [4.9524, 51.45014], [4.95244, 51.45207], [4.93295, 51.44945]]], [[[4.91493, 51.4353], [4.92652, 51.43329], [4.92952, 51.42984], [4.93986, 51.43064], [4.94265, 51.44003], [4.93471, 51.43861], [4.93416, 51.44185], [4.94025, 51.44193], [4.93544, 51.44634], [4.92879, 51.44161], [4.92815, 51.43856], [4.92566, 51.44273], [4.92811, 51.4437], [4.92287, 51.44741], [4.91811, 51.44621], [4.92227, 51.44252], [4.91935, 51.43634], [4.91493, 51.4353]]], [[[4.82946, 51.4213], [4.82409, 51.44736], [4.84139, 51.4799], [4.78803, 51.50284], [4.77321, 51.50529], [4.74578, 51.48937], [4.72935, 51.48424], [4.65442, 51.42352], [4.57489, 51.4324], [4.53521, 51.4243], [4.52846, 51.45002], [4.54675, 51.47265], [4.5388, 51.48184], [4.47736, 51.4778], [4.38122, 51.44905], [4.39747, 51.43316], [4.38064, 51.41965], [4.43777, 51.36989], [4.39292, 51.35547], [4.34086, 51.35738], [4.33265, 51.37687], [4.21923, 51.37443], [4.24024, 51.35371], [4.16721, 51.29348], [4.05165, 51.24171], [4.01957, 51.24504], [3.97889, 51.22537], [3.90125, 51.20371], [3.78783, 51.2151], [3.78999, 51.25766], [3.58939, 51.30064], [3.51502, 51.28697], [3.52698, 51.2458], [3.43488, 51.24135], [3.41704, 51.25933], [3.38289, 51.27331], [3.35847, 51.31572], [3.38696, 51.33436], [3.36263, 51.37112], [2.56575, 51.85301], [2.18458, 51.52087], [2.55904, 51.07014], [2.57551, 51.00326], [2.63074, 50.94746], [2.59093, 50.91751], [2.63331, 50.81457], [2.71165, 50.81295], [2.81056, 50.71773], [2.8483, 50.72276], [2.86985, 50.7033], [2.87937, 50.70298], [2.88504, 50.70656], [2.90069, 50.69263], [2.91036, 50.6939], [2.90873, 50.702], [2.95019, 50.75138], [2.96778, 50.75242], [3.00537, 50.76588], [3.04314, 50.77674], [3.09163, 50.77717], [3.10614, 50.78303], [3.11206, 50.79416], [3.11987, 50.79188], [3.1257, 50.78603], [3.15017, 50.79031], [3.16476, 50.76843], [3.18339, 50.74981], [3.18811, 50.74025], [3.20064, 50.73547], [3.19017, 50.72569], [3.20845, 50.71662], [3.22042, 50.71019], [3.24593, 50.71389], [3.26063, 50.70086], [3.26141, 50.69151], [3.2536, 50.68977], [3.264, 50.67668], [3.23951, 50.6585], [3.2729, 50.60718], [3.28575, 50.52724], [3.37693, 50.49538], [3.44629, 50.51009], [3.47385, 50.53397], [3.51564, 50.5256], [3.49509, 50.48885], [3.5683, 50.50192], [3.58361, 50.49049], [3.61014, 50.49568], [3.64426, 50.46275], [3.66153, 50.45165], [3.67494, 50.40239], [3.67262, 50.38663], [3.65709, 50.36873], [3.66976, 50.34563], [3.71009, 50.30305], [3.70987, 50.3191], [3.73911, 50.34809], [3.84314, 50.35219], [3.90781, 50.32814], [3.96771, 50.34989], [4.0268, 50.35793], [4.0689, 50.3254], [4.10237, 50.31247], [4.10957, 50.30234], [4.11954, 50.30425], [4.13665, 50.25609], [4.16808, 50.25786], [4.15524, 50.2833], [4.17347, 50.28838], [4.17861, 50.27443], [4.20651, 50.27333], [4.21945, 50.25539], [4.15524, 50.21103], [4.16014, 50.19239], [4.13561, 50.13078], [4.20147, 50.13535], [4.23101, 50.06945], [4.16294, 50.04719], [4.13508, 50.01976], [4.14239, 49.98034], [4.20532, 49.95803], [4.31963, 49.97043], [4.35051, 49.95315], [4.43488, 49.94122], [4.51098, 49.94659], [4.5414, 49.96911], [4.68695, 49.99685], [4.70064, 50.09384], [4.75237, 50.11314], [4.82438, 50.16878], [4.83279, 50.15331], [4.88602, 50.15182], [4.8382, 50.06738], [4.78827, 49.95609], [4.88529, 49.9236], [4.85134, 49.86457], [4.86965, 49.82271], [4.85464, 49.78995], [4.96714, 49.79872], [5.09249, 49.76193], [5.14545, 49.70287], [5.26232, 49.69456], [5.31465, 49.66846], [5.33039, 49.6555], [5.30214, 49.63055], [5.3137, 49.61225], [5.33851, 49.61599], [5.34837, 49.62889], [5.3974, 49.61596], [5.43713, 49.5707], [5.46734, 49.52648], [5.46541, 49.49825], [5.55001, 49.52729], [5.60909, 49.51228], [5.64505, 49.55146], [5.75649, 49.54321], [5.7577, 49.55915], [5.77435, 49.56298], [5.79195, 49.55228], [5.81838, 49.54777], [5.84143, 49.5533], [5.84692, 49.55663], [5.8424, 49.56082], [5.87256, 49.57539], [5.86986, 49.58756], [5.84971, 49.58674], [5.84826, 49.5969], [5.8762, 49.60898], [5.87609, 49.62047], [5.88393, 49.62802], [5.88552, 49.63507], [5.90599, 49.63853], [5.90164, 49.6511], [5.9069, 49.66377], [5.86175, 49.67862], [5.86527, 49.69291], [5.88677, 49.70951], [5.86503, 49.72739], [5.84193, 49.72161], [5.82562, 49.72395], [5.83149, 49.74729], [5.82245, 49.75048], [5.78871, 49.7962], [5.75409, 49.79239], [5.74953, 49.81428], [5.74364, 49.82058], [5.74844, 49.82435], [5.7404, 49.83452], [5.74076, 49.83823], [5.74975, 49.83933], [5.74953, 49.84709], [5.75884, 49.84811], [5.74567, 49.85368], [5.75861, 49.85631], [5.75269, 49.8711], [5.78415, 49.87922], [5.73621, 49.89796], [5.77314, 49.93646], [5.77291, 49.96056], [5.80833, 49.96451], [5.81163, 49.97142], [5.83467, 49.97823], [5.83968, 49.9892], [5.82331, 49.99662], [5.81866, 50.01286], [5.8551, 50.02683], [5.86904, 50.04614], [5.85474, 50.06342], [5.8857, 50.07824], [5.89488, 50.11476], [5.95929, 50.13295], [5.96453, 50.17259], [6.02488, 50.18283], [6.03093, 50.16362], [6.06406, 50.15344], [6.08577, 50.17246], [6.12028, 50.16374], [6.1137, 50.13668], [6.1379, 50.12964], [6.15298, 50.14126], [6.14132, 50.14971], [6.14588, 50.17106], [6.18739, 50.1822], [6.18364, 50.20815], [6.16853, 50.2234], [6.208, 50.25179], [6.28797, 50.27458], [6.29949, 50.30887], [6.32488, 50.32333], [6.35701, 50.31139], [6.40641, 50.32425], [6.40785, 50.33557], [6.3688, 50.35898], [6.34406, 50.37994], [6.36852, 50.40776], [6.37219, 50.45397], [6.34005, 50.46083], [6.3465, 50.48833], [6.30809, 50.50058], [6.26637, 50.50272], [6.22335, 50.49578], [6.20599, 50.52089], [6.19193, 50.5212], [6.18716, 50.52653], [6.19579, 50.5313], [6.19735, 50.53576], [6.17802, 50.54179], [6.17739, 50.55875], [6.20281, 50.56952], [6.22581, 50.5907], [6.24005, 50.58732], [6.24888, 50.59869], [6.2476, 50.60392], [6.26957, 50.62444], [6.17852, 50.6245], [6.11707, 50.72231], [6.04428, 50.72861], [6.0406, 50.71848], [6.0326, 50.72647], [6.03889, 50.74618], [6.01976, 50.75398], [5.97545, 50.75441], [5.95942, 50.7622], [5.89132, 50.75124], [5.89129, 50.75125], [5.88734, 50.77092], [5.84888, 50.75448], [5.84548, 50.76542], [5.80673, 50.7558], [5.77513, 50.78308], [5.76533, 50.78159], [5.74356, 50.7691], [5.73904, 50.75674], [5.72216, 50.76398], [5.69469, 50.75529], [5.68091, 50.75804], [5.70107, 50.7827], [5.68995, 50.79641], [5.70118, 50.80764], [5.65259, 50.82309], [5.64009, 50.84742], [5.64504, 50.87107], [5.67886, 50.88142], [5.69858, 50.91046], [5.71626, 50.90796], [5.72644, 50.91167], [5.72545, 50.92312], [5.74644, 50.94723], [5.75927, 50.95601], [5.74752, 50.96202], [5.72875, 50.95428], [5.71864, 50.96092], [5.76242, 50.99703], [5.77688, 51.02483], [5.75961, 51.03113], [5.77258, 51.06196], [5.79835, 51.05834], [5.79903, 51.09371], [5.82921, 51.09328], [5.83226, 51.10585], [5.8109, 51.10861], [5.80798, 51.11661], [5.85508, 51.14445], [5.82564, 51.16753], [5.77697, 51.1522], [5.77735, 51.17845], [5.74617, 51.18928], [5.70344, 51.1829], [5.65528, 51.18736], [5.65145, 51.19788], [5.5603, 51.22249], [5.5569, 51.26544], [5.515, 51.29462], [5.48476, 51.30053], [5.46519, 51.2849], [5.4407, 51.28169], [5.41672, 51.26248], [5.347, 51.27502], [5.33886, 51.26314], [5.29716, 51.26104], [5.26461, 51.26693], [5.23814, 51.26064], [5.22542, 51.26888], [5.24244, 51.30495], [5.2002, 51.32243], [5.16222, 51.31035], [5.13377, 51.31592], [5.13105, 51.34791], [5.07102, 51.39469], [5.10456, 51.43163], [5.07891, 51.4715], [5.04774, 51.47022], [5.03281, 51.48679], [5.0106, 51.47167], [5.00393, 51.44406], [4.92152, 51.39487], [4.90016, 51.41404], [4.84988, 51.41502], [4.78941, 51.41102], [4.77229, 51.41337], [4.76577, 51.43046], [4.78314, 51.43319], [4.82946, 51.4213]]]] } },
-    { type: "Feature", properties: { iso1A2: "BF", iso1A3: "BFA", iso1N3: "854", wikidata: "Q965", nameEn: "Burkina Faso", groups: ["011", "202", "002", "UN"], callingCodes: ["226"] }, geometry: { type: "MultiPolygon", coordinates: [[[[0.23859, 15.00135], [0.06588, 14.96961], [-0.24673, 15.07805], [-0.72004, 15.08655], [-1.05875, 14.7921], [-1.32166, 14.72774], [-1.68083, 14.50023], [-1.97945, 14.47709], [-1.9992, 14.19011], [-2.10223, 14.14878], [-2.47587, 14.29671], [-2.66175, 14.14713], [-2.84667, 14.05532], [-2.90831, 13.81174], [-2.88189, 13.64921], [-3.26407, 13.70699], [-3.28396, 13.5422], [-3.23599, 13.29035], [-3.43507, 13.27272], [-3.4313, 13.1588], [-3.54454, 13.1781], [-3.7911, 13.36665], [-3.96282, 13.38164], [-3.90558, 13.44375], [-3.96501, 13.49778], [-4.34477, 13.12927], [-4.21819, 12.95722], [-4.238, 12.71467], [-4.47356, 12.71252], [-4.41412, 12.31922], [-4.57703, 12.19875], [-4.54841, 12.1385], [-4.62546, 12.13204], [-4.62987, 12.06531], [-4.70692, 12.06746], [-4.72893, 12.01579], [-5.07897, 11.97918], [-5.26389, 11.84778], [-5.40258, 11.8327], [-5.26389, 11.75728], [-5.29251, 11.61715], [-5.22867, 11.60421], [-5.20665, 11.43811], [-5.25509, 11.36905], [-5.25949, 11.24816], [-5.32553, 11.21578], [-5.32994, 11.13371], [-5.49284, 11.07538], [-5.41579, 10.84628], [-5.47083, 10.75329], [-5.46643, 10.56074], [-5.51058, 10.43177], [-5.39602, 10.2929], [-5.12465, 10.29788], [-4.96453, 9.99923], [-4.96621, 9.89132], [-4.6426, 9.70696], [-4.31392, 9.60062], [-4.25999, 9.76012], [-3.69703, 9.94279], [-3.31779, 9.91125], [-3.27228, 9.84981], [-3.19306, 9.93781], [-3.16609, 9.85147], [-3.00765, 9.74019], [-2.93012, 9.57403], [-2.76494, 9.40778], [-2.68802, 9.49343], [-2.76534, 9.56589], [-2.74174, 9.83172], [-2.83108, 10.40252], [-2.94232, 10.64281], [-2.83373, 11.0067], [-0.67143, 10.99811], [-0.61937, 10.91305], [-0.44298, 11.04292], [-0.42391, 11.11661], [-0.38219, 11.12596], [-0.35955, 11.07801], [-0.28566, 11.12713], [-0.27374, 11.17157], [-0.13493, 11.14075], [0.50388, 11.01011], [0.48852, 10.98561], [0.50521, 10.98035], [0.4958, 10.93269], [0.66104, 10.99964], [0.91245, 10.99597], [0.9813, 11.08876], [1.03409, 11.04719], [1.42823, 11.46822], [2.00988, 11.42227], [2.29983, 11.68254], [2.39723, 11.89473], [2.05785, 12.35539], [2.26349, 12.41915], [0.99167, 13.10727], [0.99253, 13.37515], [1.18873, 13.31771], [1.21217, 13.37853], [1.24516, 13.33968], [1.28509, 13.35488], [1.24429, 13.39373], [1.20088, 13.38951], [1.02813, 13.46635], [0.99514, 13.5668], [0.77637, 13.64442], [0.77377, 13.6866], [0.61924, 13.68491], [0.38051, 14.05575], [0.16936, 14.51654], [0.23859, 15.00135]]]] } },
-    { type: "Feature", properties: { iso1A2: "BG", iso1A3: "BGR", iso1N3: "100", wikidata: "Q219", nameEn: "Bulgaria", groups: ["EU", "151", "150", "UN"], callingCodes: ["359"] }, geometry: { type: "MultiPolygon", coordinates: [[[[23.05288, 43.79494], [22.85314, 43.84452], [22.83753, 43.88055], [22.87873, 43.9844], [23.01674, 44.01946], [23.04988, 44.07694], [22.67173, 44.21564], [22.61711, 44.16938], [22.61688, 44.06534], [22.41449, 44.00514], [22.35558, 43.81281], [22.41043, 43.69566], [22.47582, 43.6558], [22.53397, 43.47225], [22.82036, 43.33665], [22.89727, 43.22417], [23.00806, 43.19279], [22.98104, 43.11199], [22.89521, 43.03625], [22.78397, 42.98253], [22.74826, 42.88701], [22.54302, 42.87774], [22.43309, 42.82057], [22.4997, 42.74144], [22.43983, 42.56851], [22.55669, 42.50144], [22.51961, 42.3991], [22.47498, 42.3915], [22.45919, 42.33822], [22.34773, 42.31725], [22.38136, 42.30339], [22.47251, 42.20393], [22.50289, 42.19527], [22.51224, 42.15457], [22.67701, 42.06614], [22.86749, 42.02275], [22.90254, 41.87587], [22.96682, 41.77137], [23.01239, 41.76527], [23.03342, 41.71034], [22.95513, 41.63265], [22.96331, 41.35782], [22.93334, 41.34104], [23.1833, 41.31755], [23.21953, 41.33773], [23.22771, 41.37106], [23.31301, 41.40525], [23.33639, 41.36317], [23.40416, 41.39999], [23.52453, 41.40262], [23.63203, 41.37632], [23.67644, 41.41139], [23.76525, 41.40175], [23.80148, 41.43943], [23.89613, 41.45257], [23.91483, 41.47971], [23.96975, 41.44118], [24.06908, 41.46132], [24.06323, 41.53222], [24.10063, 41.54796], [24.18126, 41.51735], [24.27124, 41.57682], [24.30513, 41.51297], [24.52599, 41.56808], [24.61129, 41.42278], [24.71529, 41.41928], [24.8041, 41.34913], [24.82514, 41.4035], [24.86136, 41.39298], [24.90928, 41.40876], [24.942, 41.38685], [25.11611, 41.34212], [25.28322, 41.23411], [25.48187, 41.28506], [25.52394, 41.2798], [25.55082, 41.31667], [25.61042, 41.30614], [25.66183, 41.31316], [25.70507, 41.29209], [25.8266, 41.34563], [25.87919, 41.30526], [26.12926, 41.35878], [26.16548, 41.42278], [26.20288, 41.43943], [26.14796, 41.47533], [26.176, 41.50072], [26.17951, 41.55409], [26.14328, 41.55496], [26.15146, 41.60828], [26.07083, 41.64584], [26.06148, 41.70345], [26.16841, 41.74858], [26.21325, 41.73223], [26.22888, 41.74139], [26.2654, 41.71544], [26.30255, 41.70925], [26.35957, 41.71149], [26.32952, 41.73637], [26.33589, 41.76802], [26.36952, 41.82265], [26.53968, 41.82653], [26.57961, 41.90024], [26.56051, 41.92995], [26.62996, 41.97644], [26.79143, 41.97386], [26.95638, 42.00741], [27.03277, 42.0809], [27.08486, 42.08735], [27.19251, 42.06028], [27.22376, 42.10152], [27.27411, 42.10409], [27.45478, 41.96591], [27.52379, 41.93756], [27.55191, 41.90928], [27.69949, 41.97515], [27.81235, 41.94803], [27.83492, 41.99709], [27.91479, 41.97902], [28.02971, 41.98066], [28.32297, 41.98371], [29.24336, 43.70874], [28.23293, 43.76], [27.99558, 43.84193], [27.92008, 44.00761], [27.73468, 43.95326], [27.64542, 44.04958], [27.60834, 44.01206], [27.39757, 44.0141], [27.26845, 44.12602], [26.95141, 44.13555], [26.62712, 44.05698], [26.38764, 44.04356], [26.10115, 43.96908], [26.05584, 43.90925], [25.94911, 43.85745], [25.72792, 43.69263], [25.39528, 43.61866], [25.17144, 43.70261], [25.10718, 43.6831], [24.96682, 43.72693], [24.73542, 43.68523], [24.62281, 43.74082], [24.50264, 43.76314], [24.35364, 43.70211], [24.18149, 43.68218], [23.73978, 43.80627], [23.61687, 43.79289], [23.4507, 43.84936], [23.26772, 43.84843], [23.05288, 43.79494]]]] } },
-    { type: "Feature", properties: { iso1A2: "BH", iso1A3: "BHR", iso1N3: "048", wikidata: "Q398", nameEn: "Bahrain", groups: ["145", "142", "UN"], callingCodes: ["973"] }, geometry: { type: "MultiPolygon", coordinates: [[[[50.93865, 26.30758], [50.71771, 26.73086], [50.38162, 26.53976], [50.26923, 26.08243], [50.302, 25.87592], [50.57069, 25.57887], [50.80824, 25.54641], [50.7801, 25.595], [50.86149, 25.6965], [50.81266, 25.88946], [50.93865, 26.30758]]]] } },
-    { type: "Feature", properties: { iso1A2: "BI", iso1A3: "BDI", iso1N3: "108", wikidata: "Q967", nameEn: "Burundi", groups: ["014", "202", "002", "UN"], callingCodes: ["257"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.54501, -2.41404], [30.42933, -2.31064], [30.14034, -2.43626], [29.95911, -2.33348], [29.88237, -2.75105], [29.36805, -2.82933], [29.32234, -2.6483], [29.0562, -2.58632], [29.04081, -2.7416], [29.00167, -2.78523], [29.00404, -2.81978], [29.0505, -2.81774], [29.09119, -2.87871], [29.09797, -2.91935], [29.16037, -2.95457], [29.17258, -2.99385], [29.25633, -3.05471], [29.21463, -3.3514], [29.23708, -3.75856], [29.43673, -4.44845], [29.63827, -4.44681], [29.75109, -4.45836], [29.77289, -4.41733], [29.82885, -4.36153], [29.88172, -4.35743], [30.03323, -4.26631], [30.22042, -4.01738], [30.45915, -3.56532], [30.84165, -3.25152], [30.83823, -2.97837], [30.6675, -2.98987], [30.57926, -2.89791], [30.4987, -2.9573], [30.40662, -2.86151], [30.52747, -2.65841], [30.41789, -2.66266], [30.54501, -2.41404]]]] } },
-    { type: "Feature", properties: { iso1A2: "BJ", iso1A3: "BEN", iso1N3: "204", wikidata: "Q962", nameEn: "Benin", aliases: ["DY"], groups: ["011", "202", "002", "UN"], callingCodes: ["229"] }, geometry: { type: "MultiPolygon", coordinates: [[[[3.59375, 11.70269], [3.48187, 11.86092], [3.31613, 11.88495], [3.25352, 12.01467], [2.83978, 12.40585], [2.6593, 12.30631], [2.37783, 12.24804], [2.39657, 12.10952], [2.45824, 11.98672], [2.39723, 11.89473], [2.29983, 11.68254], [2.00988, 11.42227], [1.42823, 11.46822], [1.03409, 11.04719], [0.9813, 11.08876], [0.91245, 10.99597], [0.8804, 10.803], [0.80358, 10.71459], [0.77666, 10.37665], [1.35507, 9.99525], [1.36624, 9.5951], [1.33675, 9.54765], [1.41746, 9.3226], [1.5649, 9.16941], [1.61838, 9.0527], [1.64249, 6.99562], [1.55877, 6.99737], [1.61812, 6.74843], [1.58105, 6.68619], [1.76906, 6.43189], [1.79826, 6.28221], [1.62913, 6.24075], [1.67336, 6.02702], [2.74181, 6.13349], [2.70566, 6.38038], [2.70464, 6.50831], [2.74334, 6.57291], [2.7325, 6.64057], [2.78204, 6.70514], [2.78823, 6.76356], [2.73405, 6.78508], [2.74024, 6.92802], [2.71702, 6.95722], [2.76965, 7.13543], [2.74489, 7.42565], [2.79442, 7.43486], [2.78668, 7.5116], [2.73405, 7.5423], [2.73095, 7.7755], [2.67523, 7.87825], [2.77907, 9.06924], [3.08017, 9.10006], [3.14147, 9.28375], [3.13928, 9.47167], [3.25093, 9.61632], [3.34726, 9.70696], [3.32099, 9.78032], [3.35383, 9.83641], [3.54429, 9.87739], [3.66908, 10.18136], [3.57275, 10.27185], [3.6844, 10.46351], [3.78292, 10.40538], [3.84243, 10.59316], [3.71505, 11.13015], [3.49175, 11.29765], [3.59375, 11.70269]]]] } },
-    { type: "Feature", properties: { iso1A2: "BL", iso1A3: "BLM", iso1N3: "652", wikidata: "Q25362", nameEn: "Saint-Barth\xE9lemy", country: "FR", groups: ["EU", "Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["590"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.62718, 18.26185], [-63.1055, 17.86651], [-62.34423, 17.49165], [-62.62718, 18.26185]]]] } },
-    { type: "Feature", properties: { iso1A2: "BM", iso1A3: "BMU", iso1N3: "060", wikidata: "Q23635", nameEn: "Bermuda", country: "GB", groups: ["BOTS", "021", "003", "019", "UN"], driveSide: "left", callingCodes: ["1 441"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.20987, 32.6953], [-65.31453, 32.68437], [-65.63955, 31.43417], [-63.20987, 32.6953]]]] } },
-    { type: "Feature", properties: { iso1A2: "BN", iso1A3: "BRN", iso1N3: "096", wikidata: "Q921", nameEn: "Brunei", groups: ["Q36117", "035", "142", "UN"], driveSide: "left", callingCodes: ["673"] }, geometry: { type: "MultiPolygon", coordinates: [[[[115.16236, 5.01011], [115.02521, 5.35005], [114.10166, 4.76112], [114.07448, 4.58441], [114.15813, 4.57], [114.26876, 4.49878], [114.32176, 4.34942], [114.32176, 4.2552], [114.4416, 4.27588], [114.49922, 4.13108], [114.64211, 4.00694], [114.78539, 4.12205], [114.88039, 4.4257], [114.83189, 4.42387], [114.77303, 4.72871], [114.8266, 4.75062], [114.88841, 4.81905], [114.96982, 4.81146], [114.99417, 4.88201], [115.05038, 4.90275], [115.02955, 4.82087], [115.02278, 4.74137], [115.04064, 4.63706], [115.07737, 4.53418], [115.09978, 4.39123], [115.31275, 4.30806], [115.36346, 4.33563], [115.2851, 4.42295], [115.27819, 4.63661], [115.20737, 4.8256], [115.15092, 4.87604], [115.16236, 5.01011]]]] } },
-    { type: "Feature", properties: { iso1A2: "BO", iso1A3: "BOL", iso1N3: "068", wikidata: "Q750", nameEn: "Bolivia", groups: ["005", "419", "019", "UN"], callingCodes: ["591"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.90248, -12.52544], [-64.22539, -12.45267], [-64.30708, -12.46398], [-64.99778, -11.98604], [-65.30027, -11.48749], [-65.28141, -10.86289], [-65.35402, -10.78685], [-65.37923, -10.35141], [-65.29019, -9.86253], [-65.40615, -9.63894], [-65.56244, -9.84266], [-65.68343, -9.75323], [-67.17784, -10.34016], [-68.71533, -11.14749], [-68.7651, -11.0496], [-68.75179, -11.03688], [-68.75265, -11.02383], [-68.74802, -11.00891], [-69.42792, -10.93451], [-69.47839, -10.95254], [-69.57156, -10.94555], [-68.98115, -11.8979], [-68.65044, -12.50689], [-68.85615, -12.87769], [-68.8864, -13.40792], [-69.05265, -13.68546], [-68.88135, -14.18639], [-69.36254, -14.94634], [-69.14856, -15.23478], [-69.40336, -15.61358], [-69.20291, -16.16668], [-69.09986, -16.22693], [-68.96238, -16.194], [-68.79464, -16.33272], [-68.98358, -16.42165], [-69.04027, -16.57214], [-69.00853, -16.66769], [-69.16896, -16.72233], [-69.62883, -17.28142], [-69.46863, -17.37466], [-69.46897, -17.4988], [-69.46623, -17.60518], [-69.34126, -17.72753], [-69.28671, -17.94844], [-69.07496, -18.03715], [-69.14807, -18.16893], [-69.07432, -18.28259], [-68.94987, -18.93302], [-68.87082, -19.06003], [-68.80602, -19.08355], [-68.61989, -19.27584], [-68.41218, -19.40499], [-68.66761, -19.72118], [-68.54611, -19.84651], [-68.57132, -20.03134], [-68.74273, -20.08817], [-68.7276, -20.46178], [-68.44023, -20.62701], [-68.55383, -20.7355], [-68.53957, -20.91542], [-68.40403, -20.94562], [-68.18816, -21.28614], [-67.85114, -22.87076], [-67.54284, -22.89771], [-67.18382, -22.81525], [-66.7298, -22.23644], [-66.29714, -22.08741], [-66.24077, -21.77837], [-66.03836, -21.84829], [-66.04832, -21.9187], [-65.9261, -21.93335], [-65.7467, -22.10105], [-65.61166, -22.09504], [-65.58694, -22.09794], [-65.57743, -22.07675], [-65.47435, -22.08908], [-64.99524, -22.08255], [-64.90014, -22.12136], [-64.67174, -22.18957], [-64.58888, -22.25035], [-64.4176, -22.67692], [-64.35108, -22.73282], [-64.31489, -22.88824], [-64.22918, -22.55807], [-63.93287, -21.99934], [-63.70963, -21.99934], [-63.68113, -22.0544], [-63.66482, -21.99918], [-62.81124, -21.9987], [-62.8078, -22.12534], [-62.64455, -22.25091], [-62.2757, -21.06657], [-62.26883, -20.55311], [-61.93912, -20.10053], [-61.73723, -19.63958], [-60.00638, -19.2981], [-59.06965, -19.29148], [-58.23216, -19.80058], [-58.16225, -20.16193], [-57.8496, -19.98346], [-58.14215, -19.76276], [-57.78463, -19.03259], [-57.71113, -19.03161], [-57.69134, -19.00544], [-57.71995, -18.97546], [-57.71995, -18.89573], [-57.76764, -18.90087], [-57.56807, -18.25655], [-57.48237, -18.24219], [-57.69877, -17.8431], [-57.73949, -17.56095], [-57.90082, -17.44555], [-57.99661, -17.5273], [-58.32935, -17.28195], [-58.5058, -16.80958], [-58.30918, -16.3699], [-58.32431, -16.25861], [-58.41506, -16.32636], [-60.16069, -16.26479], [-60.23797, -15.50267], [-60.58224, -15.09887], [-60.23968, -15.09515], [-60.27887, -14.63021], [-60.46037, -14.22496], [-60.48053, -13.77981], [-61.05527, -13.50054], [-61.81151, -13.49564], [-63.76259, -12.42952], [-63.90248, -12.52544]]]] } },
-    { type: "Feature", properties: { iso1A2: "BQ", iso1A3: "BES", iso1N3: "535", wikidata: "Q27561", nameEn: "Caribbean Netherlands", country: "NL" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "BR", iso1A3: "BRA", iso1N3: "076", wikidata: "Q155", nameEn: "Brazil", groups: ["005", "419", "019", "UN"], callingCodes: ["55"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-59.69361, 4.34069], [-59.78878, 4.45637], [-60.15953, 4.53456], [-60.04189, 4.69801], [-59.98129, 5.07097], [-60.20944, 5.28754], [-60.32352, 5.21299], [-60.73204, 5.20931], [-60.5802, 4.94312], [-60.86539, 4.70512], [-60.98303, 4.54167], [-61.15703, 4.49839], [-61.31457, 4.54167], [-61.29675, 4.44216], [-61.48569, 4.43149], [-61.54629, 4.2822], [-62.13094, 4.08309], [-62.44822, 4.18621], [-62.57656, 4.04754], [-62.74411, 4.03331], [-62.7655, 3.73099], [-62.98296, 3.59935], [-63.21111, 3.96219], [-63.4464, 3.9693], [-63.42233, 3.89995], [-63.50611, 3.83592], [-63.67099, 4.01731], [-63.70218, 3.91417], [-63.86082, 3.94796], [-63.99183, 3.90172], [-64.14512, 4.12932], [-64.57648, 4.12576], [-64.72977, 4.28931], [-64.84028, 4.24665], [-64.48379, 3.7879], [-64.02908, 2.79797], [-64.0257, 2.48156], [-63.39114, 2.4317], [-63.39827, 2.16098], [-64.06135, 1.94722], [-64.08274, 1.64792], [-64.34654, 1.35569], [-64.38932, 1.5125], [-65.11657, 1.12046], [-65.57288, 0.62856], [-65.50158, 0.92086], [-65.6727, 1.01353], [-66.28507, 0.74585], [-66.85795, 1.22998], [-67.08222, 1.17441], [-67.15784, 1.80439], [-67.299, 1.87494], [-67.40488, 2.22258], [-67.9292, 1.82455], [-68.18632, 2.00091], [-68.26699, 1.83463], [-68.18128, 1.72881], [-69.38621, 1.70865], [-69.53746, 1.76408], [-69.83491, 1.69353], [-69.82987, 1.07864], [-69.26017, 1.06856], [-69.14422, 0.84172], [-69.20976, 0.57958], [-69.47696, 0.71065], [-70.04162, 0.55437], [-70.03658, -0.19681], [-69.603, -0.51947], [-69.59796, -0.75136], [-69.4215, -1.01853], [-69.43395, -1.42219], [-69.94708, -4.2431], [-70.00888, -4.37833], [-70.11305, -4.27281], [-70.19582, -4.3607], [-70.33236, -4.15214], [-70.77601, -4.15717], [-70.96814, -4.36915], [-71.87003, -4.51661], [-72.64391, -5.0391], [-72.83973, -5.14765], [-73.24579, -6.05764], [-73.12983, -6.43852], [-73.73986, -6.87919], [-73.77011, -7.28944], [-73.96938, -7.58465], [-73.65485, -7.77897], [-73.76576, -7.89884], [-72.92886, -9.04074], [-73.21498, -9.40904], [-72.72216, -9.41397], [-72.31883, -9.5184], [-72.14742, -9.98049], [-71.23394, -9.9668], [-70.53373, -9.42628], [-70.58453, -9.58303], [-70.55429, -9.76692], [-70.62487, -9.80666], [-70.64134, -11.0108], [-70.51395, -10.92249], [-70.38791, -11.07096], [-69.90896, -10.92744], [-69.57835, -10.94051], [-69.57156, -10.94555], [-69.47839, -10.95254], [-69.42792, -10.93451], [-68.74802, -11.00891], [-68.75265, -11.02383], [-68.75179, -11.03688], [-68.7651, -11.0496], [-68.71533, -11.14749], [-67.17784, -10.34016], [-65.68343, -9.75323], [-65.56244, -9.84266], [-65.40615, -9.63894], [-65.29019, -9.86253], [-65.37923, -10.35141], [-65.35402, -10.78685], [-65.28141, -10.86289], [-65.30027, -11.48749], [-64.99778, -11.98604], [-64.30708, -12.46398], [-64.22539, -12.45267], [-63.90248, -12.52544], [-63.76259, -12.42952], [-61.81151, -13.49564], [-61.05527, -13.50054], [-60.48053, -13.77981], [-60.46037, -14.22496], [-60.27887, -14.63021], [-60.23968, -15.09515], [-60.58224, -15.09887], [-60.23797, -15.50267], [-60.16069, -16.26479], [-58.41506, -16.32636], [-58.32431, -16.25861], [-58.30918, -16.3699], [-58.5058, -16.80958], [-58.32935, -17.28195], [-57.99661, -17.5273], [-57.90082, -17.44555], [-57.73949, -17.56095], [-57.69877, -17.8431], [-57.48237, -18.24219], [-57.56807, -18.25655], [-57.76764, -18.90087], [-57.71995, -18.89573], [-57.71995, -18.97546], [-57.69134, -19.00544], [-57.71113, -19.03161], [-57.78463, -19.03259], [-58.14215, -19.76276], [-57.8496, -19.98346], [-58.16225, -20.16193], [-57.84536, -20.93155], [-57.93492, -21.65505], [-57.88239, -21.6868], [-57.94642, -21.73799], [-57.98625, -22.09157], [-56.6508, -22.28387], [-56.5212, -22.11556], [-56.45893, -22.08072], [-56.23206, -22.25347], [-55.8331, -22.29008], [-55.74941, -22.46436], [-55.741, -22.52018], [-55.72366, -22.5519], [-55.6986, -22.56268], [-55.68742, -22.58407], [-55.62493, -22.62765], [-55.63849, -22.95122], [-55.5446, -23.22811], [-55.52288, -23.2595], [-55.5555, -23.28237], [-55.43585, -23.87157], [-55.44117, -23.9185], [-55.41784, -23.9657], [-55.12292, -23.99669], [-55.0518, -23.98666], [-55.02691, -23.97317], [-54.6238, -23.83078], [-54.32807, -24.01865], [-54.28207, -24.07305], [-54.4423, -25.13381], [-54.62033, -25.46026], [-54.60196, -25.48397], [-54.59509, -25.53696], [-54.59398, -25.59224], [-54.5502, -25.58915], [-54.52926, -25.62846], [-53.90831, -25.55513], [-53.83691, -25.94849], [-53.73511, -26.04211], [-53.73086, -26.05842], [-53.7264, -26.0664], [-53.73391, -26.07006], [-53.73968, -26.10012], [-53.65018, -26.19501], [-53.65237, -26.23289], [-53.63739, -26.2496], [-53.63881, -26.25075], [-53.64632, -26.24798], [-53.64186, -26.25976], [-53.64505, -26.28089], [-53.68269, -26.33359], [-53.73372, -26.6131], [-53.80144, -27.09844], [-54.15978, -27.2889], [-54.19062, -27.27639], [-54.19268, -27.30751], [-54.41888, -27.40882], [-54.50416, -27.48232], [-54.67657, -27.57214], [-54.90159, -27.63132], [-54.90805, -27.73149], [-55.1349, -27.89759], [-55.16872, -27.86224], [-55.33303, -27.94661], [-55.6262, -28.17124], [-55.65418, -28.18304], [-56.01729, -28.51223], [-56.00458, -28.60421], [-56.05265, -28.62651], [-56.54171, -29.11447], [-56.57295, -29.11357], [-56.62789, -29.18073], [-56.81251, -29.48154], [-57.09386, -29.74211], [-57.65132, -30.19229], [-57.22502, -30.26121], [-56.90236, -30.02578], [-56.49267, -30.39471], [-56.4795, -30.3899], [-56.4619, -30.38457], [-55.87388, -31.05053], [-55.58866, -30.84117], [-55.5634, -30.8686], [-55.55373, -30.8732], [-55.55218, -30.88193], [-55.54572, -30.89051], [-55.53431, -30.89714], [-55.53276, -30.90218], [-55.52712, -30.89997], [-55.51862, -30.89828], [-55.50841, -30.9027], [-55.50821, -30.91349], [-54.17384, -31.86168], [-53.76024, -32.0751], [-53.39572, -32.58596], [-53.37671, -32.57005], [-53.1111, -32.71147], [-53.53459, -33.16843], [-53.52794, -33.68908], [-53.44031, -33.69344], [-53.39593, -33.75169], [-53.37138, -33.74313], [-52.83257, -34.01481], [-28.34015, -20.99094], [-28.99601, 1.86593], [-51.35485, 4.8383], [-51.63798, 4.51394], [-51.61983, 4.14596], [-51.79599, 3.89336], [-51.82312, 3.85825], [-51.85573, 3.83427], [-52.31787, 3.17896], [-52.6906, 2.37298], [-52.96539, 2.1881], [-53.78743, 2.34412], [-54.16286, 2.10779], [-54.6084, 2.32856], [-55.01919, 2.564], [-55.71493, 2.40342], [-55.96292, 2.53188], [-56.13054, 2.27723], [-55.92159, 2.05236], [-55.89863, 1.89861], [-55.99278, 1.83137], [-56.47045, 1.95135], [-56.7659, 1.89509], [-57.07092, 1.95304], [-57.09109, 2.01854], [-57.23981, 1.95808], [-57.35073, 1.98327], [-57.55743, 1.69605], [-57.77281, 1.73344], [-57.97336, 1.64566], [-58.01873, 1.51966], [-58.33887, 1.58014], [-58.4858, 1.48399], [-58.53571, 1.29154], [-58.84229, 1.17749], [-58.92072, 1.31293], [-59.25583, 1.40559], [-59.74066, 1.87596], [-59.7264, 2.27497], [-59.91177, 2.36759], [-59.99733, 2.92312], [-59.79769, 3.37162], [-59.86899, 3.57089], [-59.51963, 3.91951], [-59.73353, 4.20399], [-59.69361, 4.34069]]]] } },
-    { type: "Feature", properties: { iso1A2: "BS", iso1A3: "BHS", iso1N3: "044", wikidata: "Q778", nameEn: "The Bahamas", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 242"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-72.98446, 20.4801], [-71.70065, 25.7637], [-78.91214, 27.76553], [-80.65727, 23.71953], [-72.98446, 20.4801]]]] } },
-    { type: "Feature", properties: { iso1A2: "BT", iso1A3: "BTN", iso1N3: "064", wikidata: "Q917", nameEn: "Bhutan", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["975"] }, geometry: { type: "MultiPolygon", coordinates: [[[[91.6469, 27.76358], [91.5629, 27.84823], [91.48973, 27.93903], [91.46327, 28.0064], [91.25779, 28.07509], [91.20019, 27.98715], [90.69894, 28.07784], [90.58842, 28.02838], [90.13387, 28.19178], [89.79762, 28.23979], [89.59525, 28.16433], [89.12825, 27.62502], [89.0582, 27.60985], [88.97213, 27.51671], [88.95355, 27.4106], [89.00216, 27.32532], [88.96947, 27.30319], [88.93678, 27.33777], [88.91901, 27.32483], [88.74219, 27.144], [88.86984, 27.10937], [88.8714, 26.97488], [88.92301, 26.99286], [88.95807, 26.92668], [89.09554, 26.89089], [89.12825, 26.81661], [89.1926, 26.81329], [89.37913, 26.86224], [89.38319, 26.85963], [89.3901, 26.84225], [89.42349, 26.83727], [89.63369, 26.74402], [89.86124, 26.73307], [90.04535, 26.72422], [90.30402, 26.85098], [90.39271, 26.90704], [90.48504, 26.8594], [90.67715, 26.77215], [91.50067, 26.79223], [91.83181, 26.87318], [92.05523, 26.8692], [92.11863, 26.893], [92.03457, 27.07334], [92.04702, 27.26861], [92.12019, 27.27829], [92.01132, 27.47352], [91.65007, 27.48287], [91.55819, 27.6144], [91.6469, 27.76358]]]] } },
-    { type: "Feature", properties: { iso1A2: "BV", iso1A3: "BVT", iso1N3: "074", wikidata: "Q23408", nameEn: "Bouvet Island", country: "NO", groups: ["005", "419", "019", "UN"] }, geometry: { type: "MultiPolygon", coordinates: [[[[4.54042, -54.0949], [2.28941, -54.13089], [3.35353, -55.17558], [4.54042, -54.0949]]]] } },
-    { type: "Feature", properties: { iso1A2: "BW", iso1A3: "BWA", iso1N3: "072", wikidata: "Q963", nameEn: "Botswana", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["267"] }, geometry: { type: "MultiPolygon", coordinates: [[[[25.26433, -17.79571], [25.16882, -17.78253], [25.05895, -17.84452], [24.95586, -17.79674], [24.73364, -17.89338], [24.71887, -17.9218], [24.6303, -17.9863], [24.57485, -18.07151], [24.40577, -17.95726], [24.19416, -18.01919], [23.61088, -18.4881], [23.29618, -17.99855], [23.0996, -18.00075], [21.45556, -18.31795], [20.99904, -18.31743], [20.99751, -22.00026], [19.99912, -21.99991], [19.99817, -24.76768], [20.02809, -24.78725], [20.03678, -24.81004], [20.29826, -24.94869], [20.64795, -25.47827], [20.86081, -26.14892], [20.61754, -26.4692], [20.63275, -26.78181], [20.68596, -26.9039], [20.87031, -26.80047], [21.13353, -26.86661], [21.37869, -26.82083], [21.69322, -26.86152], [21.7854, -26.79199], [21.77114, -26.69015], [21.83291, -26.65959], [21.90703, -26.66808], [22.06192, -26.61882], [22.21206, -26.3773], [22.41921, -26.23078], [22.56365, -26.19668], [22.70808, -25.99186], [22.86012, -25.50572], [23.03497, -25.29971], [23.47588, -25.29971], [23.9244, -25.64286], [24.18287, -25.62916], [24.36531, -25.773], [24.44703, -25.73021], [24.67319, -25.81749], [24.8946, -25.80723], [25.01718, -25.72507], [25.12266, -25.75931], [25.33076, -25.76616], [25.58543, -25.6343], [25.6643, -25.4491], [25.69661, -25.29284], [25.72702, -25.25503], [25.88571, -24.87802], [25.84295, -24.78661], [25.8515, -24.75727], [26.39409, -24.63468], [26.46346, -24.60358], [26.51667, -24.47219], [26.84165, -24.24885], [26.99749, -23.65486], [27.33768, -23.40917], [27.52393, -23.37952], [27.6066, -23.21894], [27.74154, -23.2137], [27.93539, -23.04941], [27.93729, -22.96194], [28.04752, -22.90243], [28.04562, -22.8394], [28.34874, -22.5694], [28.63287, -22.55887], [28.91889, -22.44299], [29.0151, -22.22907], [29.10881, -22.21202], [29.15268, -22.21399], [29.18974, -22.18599], [29.21955, -22.17771], [29.37703, -22.19581], [29.3533, -22.18363], [29.24648, -22.05967], [29.1974, -22.07472], [29.14501, -22.07275], [29.08495, -22.04867], [29.04108, -22.00563], [29.02191, -21.95665], [29.02191, -21.90647], [29.04023, -21.85864], [29.07763, -21.81877], [28.58114, -21.63455], [28.49942, -21.66634], [28.29416, -21.59037], [28.01669, -21.57624], [27.91407, -21.31621], [27.69171, -21.08409], [27.72972, -20.51735], [27.69361, -20.48531], [27.28865, -20.49873], [27.29831, -20.28935], [27.21278, -20.08244], [26.72246, -19.92707], [26.17227, -19.53709], [25.96226, -19.08152], [25.99837, -19.02943], [25.94326, -18.90362], [25.82353, -18.82808], [25.79217, -18.6355], [25.68859, -18.56165], [25.53465, -18.39041], [25.39972, -18.12691], [25.31799, -18.07091], [25.23909, -17.90832], [25.26433, -17.79571]]]] } },
-    { type: "Feature", properties: { iso1A2: "BY", iso1A3: "BLR", iso1N3: "112", wikidata: "Q184", nameEn: "Belarus", groups: ["151", "150", "UN"], callingCodes: ["375"] }, geometry: { type: "MultiPolygon", coordinates: [[[[28.15217, 56.16964], [27.97865, 56.11849], [27.63065, 55.89687], [27.61683, 55.78558], [27.3541, 55.8089], [27.27804, 55.78299], [27.1559, 55.85032], [26.97153, 55.8102], [26.87448, 55.7172], [26.76872, 55.67658], [26.71802, 55.70645], [26.64888, 55.70515], [26.63231, 55.67968], [26.63167, 55.57887], [26.55094, 55.5093], [26.5522, 55.40277], [26.44937, 55.34832], [26.5709, 55.32572], [26.6714, 55.33902], [26.80929, 55.31642], [26.83266, 55.30444], [26.835, 55.28182], [26.73017, 55.24226], [26.72983, 55.21788], [26.68075, 55.19787], [26.69243, 55.16718], [26.54753, 55.14181], [26.51481, 55.16051], [26.46249, 55.12814], [26.35121, 55.1525], [26.30628, 55.12536], [26.23202, 55.10439], [26.26941, 55.08032], [26.20397, 54.99729], [26.13386, 54.98924], [26.05907, 54.94631], [25.99129, 54.95705], [25.89462, 54.93438], [25.74122, 54.80108], [25.75977, 54.57252], [25.68045, 54.5321], [25.64813, 54.48704], [25.62203, 54.4656], [25.63371, 54.42075], [25.5376, 54.33158], [25.55425, 54.31591], [25.68513, 54.31727], [25.78553, 54.23327], [25.78563, 54.15747], [25.71084, 54.16704], [25.64875, 54.1259], [25.54724, 54.14925], [25.51452, 54.17799], [25.56823, 54.25212], [25.509, 54.30267], [25.35559, 54.26544], [25.22705, 54.26271], [25.19199, 54.219], [25.0728, 54.13419], [24.991, 54.14241], [24.96894, 54.17589], [24.77131, 54.11091], [24.85311, 54.02862], [24.74279, 53.96663], [24.69185, 53.96543], [24.69652, 54.01901], [24.62275, 54.00217], [24.44411, 53.90076], [24.34128, 53.90076], [24.19638, 53.96405], [23.98837, 53.92554], [23.95098, 53.9613], [23.81309, 53.94205], [23.80543, 53.89558], [23.71726, 53.93379], [23.61677, 53.92691], [23.51284, 53.95052], [23.62004, 53.60942], [23.81995, 53.24131], [23.85657, 53.22923], [23.91393, 53.16469], [23.87548, 53.0831], [23.92184, 53.02079], [23.94689, 52.95919], [23.91805, 52.94016], [23.93763, 52.71332], [23.73615, 52.6149], [23.58296, 52.59868], [23.45112, 52.53774], [23.34141, 52.44845], [23.18196, 52.28812], [23.20071, 52.22848], [23.47859, 52.18215], [23.54314, 52.12148], [23.61, 52.11264], [23.64066, 52.07626], [23.68733, 51.9906], [23.61523, 51.92066], [23.62691, 51.78208], [23.53198, 51.74298], [23.57053, 51.55938], [23.56236, 51.53673], [23.62751, 51.50512], [23.6736, 51.50255], [23.60906, 51.62122], [23.7766, 51.66809], [23.91118, 51.63316], [23.8741, 51.59734], [23.99907, 51.58369], [24.13075, 51.66979], [24.3163, 51.75063], [24.29021, 51.80841], [24.37123, 51.88222], [24.98784, 51.91273], [25.20228, 51.97143], [25.46163, 51.92205], [25.73673, 51.91973], [25.80574, 51.94556], [25.83217, 51.92587], [26.00408, 51.92967], [26.19084, 51.86781], [26.39367, 51.87315], [26.46962, 51.80501], [26.69759, 51.82284], [26.80043, 51.75777], [26.9489, 51.73788], [26.99422, 51.76933], [27.20602, 51.77291], [27.20948, 51.66713], [27.26613, 51.65957], [27.24828, 51.60161], [27.47212, 51.61184], [27.51058, 51.5854], [27.55727, 51.63486], [27.71932, 51.60672], [27.67125, 51.50854], [27.76052, 51.47604], [27.85253, 51.62293], [27.91844, 51.61952], [27.95827, 51.56065], [28.10658, 51.57857], [28.23452, 51.66988], [28.37592, 51.54505], [28.47051, 51.59734], [28.64429, 51.5664], [28.69161, 51.44695], [28.73143, 51.46236], [28.75615, 51.41442], [28.78224, 51.45294], [28.76027, 51.48802], [28.81795, 51.55552], [28.95528, 51.59222], [28.99098, 51.56833], [29.1187, 51.65872], [29.16402, 51.64679], [29.20659, 51.56918], [29.25603, 51.57089], [29.25191, 51.49828], [29.32881, 51.37843], [29.42357, 51.4187], [29.49773, 51.39814], [29.54372, 51.48372], [29.7408, 51.53417], [29.77376, 51.4461], [30.17888, 51.51025], [30.34642, 51.42555], [30.36153, 51.33984], [30.56203, 51.25655], [30.64992, 51.35014], [30.51946, 51.59649], [30.68804, 51.82806], [30.76443, 51.89739], [30.90897, 52.00699], [30.95589, 52.07775], [31.13332, 52.1004], [31.25142, 52.04131], [31.38326, 52.12991], [31.7822, 52.11406], [31.77877, 52.18636], [31.6895, 52.1973], [31.70735, 52.26711], [31.57971, 52.32146], [31.62084, 52.33849], [31.61397, 52.48843], [31.56316, 52.51518], [31.63869, 52.55361], [31.50406, 52.69707], [31.57277, 52.71613], [31.592, 52.79011], [31.35667, 52.97854], [31.24147, 53.031], [31.32283, 53.04101], [31.33519, 53.08805], [31.3915, 53.09712], [31.36403, 53.13504], [31.40523, 53.21406], [31.56316, 53.19432], [31.62496, 53.22886], [31.787, 53.18033], [31.82373, 53.10042], [32.15368, 53.07594], [32.40773, 53.18856], [32.51725, 53.28431], [32.73257, 53.33494], [32.74968, 53.45597], [32.47777, 53.5548], [32.40499, 53.6656], [32.50112, 53.68594], [32.45717, 53.74039], [32.36663, 53.7166], [32.12621, 53.81586], [31.89137, 53.78099], [31.77028, 53.80015], [31.85019, 53.91801], [31.88744, 54.03653], [31.89599, 54.0837], [31.57002, 54.14535], [31.30791, 54.25315], [31.3177, 54.34067], [31.22945, 54.46585], [31.08543, 54.50361], [31.21399, 54.63113], [31.19339, 54.66947], [30.99187, 54.67046], [30.98226, 54.68872], [31.0262, 54.70698], [30.97127, 54.71967], [30.95479, 54.74346], [30.75165, 54.80699], [30.8264, 54.90062], [30.81759, 54.94064], [30.93144, 54.9585], [30.95754, 54.98609], [30.9081, 55.02232], [30.94243, 55.03964], [31.00972, 55.02783], [31.02071, 55.06167], [30.97369, 55.17134], [30.87944, 55.28223], [30.81946, 55.27931], [30.8257, 55.3313], [30.93144, 55.3914], [30.90123, 55.46621], [30.95204, 55.50667], [30.93419, 55.6185], [30.86003, 55.63169], [30.7845, 55.58514], [30.72957, 55.66268], [30.67464, 55.64176], [30.63344, 55.73079], [30.51037, 55.76568], [30.51346, 55.78982], [30.48257, 55.81066], [30.30987, 55.83592], [30.27776, 55.86819], [30.12136, 55.8358], [29.97975, 55.87281], [29.80672, 55.79569], [29.61446, 55.77716], [29.51283, 55.70294], [29.3604, 55.75862], [29.44692, 55.95978], [29.21717, 55.98971], [29.08299, 56.03427], [28.73418, 55.97131], [28.63668, 56.07262], [28.68337, 56.10173], [28.5529, 56.11705], [28.43068, 56.09407], [28.37987, 56.11399], [28.36888, 56.05805], [28.30571, 56.06035], [28.15217, 56.16964]]]] } },
-    { type: "Feature", properties: { iso1A2: "BZ", iso1A3: "BLZ", iso1N3: "084", wikidata: "Q242", nameEn: "Belize", groups: ["013", "003", "419", "019", "UN"], roadSpeedUnit: "mph", callingCodes: ["501"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-88.3268, 18.49048], [-88.48242, 18.49164], [-88.71505, 18.0707], [-88.8716, 17.89535], [-89.03839, 18.0067], [-89.15105, 17.95104], [-89.14985, 17.81563], [-89.15025, 17.04813], [-89.22683, 15.88619], [-89.17418, 15.90898], [-89.02415, 15.9063], [-88.95358, 15.88698], [-88.40779, 16.09624], [-86.92368, 17.61462], [-87.84815, 18.18511], [-87.85693, 18.18266], [-87.86657, 18.19971], [-87.87604, 18.18313], [-87.90671, 18.15213], [-88.03165, 18.16657], [-88.03238, 18.41778], [-88.26593, 18.47617], [-88.29909, 18.47591], [-88.3268, 18.49048]]]] } },
-    { type: "Feature", properties: { iso1A2: "CA", iso1A3: "CAN", iso1N3: "124", wikidata: "Q16", nameEn: "Canada", groups: ["021", "003", "019", "UN"], callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-67.20349, 45.1722], [-67.19603, 45.16771], [-67.15965, 45.16179], [-67.11316, 45.11176], [-67.0216, 44.95333], [-66.96824, 44.90965], [-66.98249, 44.87071], [-66.96824, 44.83078], [-66.93432, 44.82597], [-67.16117, 44.20069], [-61.98255, 37.34815], [-56.27503, 47.39728], [-53.12387, 41.40385], [-46.37635, 57.3249], [-77.52957, 77.23408], [-68.21821, 80.48551], [-49.33696, 84.57952], [-140.97446, 84.39275], [-141.00116, 60.30648], [-140.5227, 60.22077], [-140.45648, 60.30919], [-139.98024, 60.18027], [-139.68991, 60.33693], [-139.05831, 60.35205], [-139.20603, 60.08896], [-139.05365, 59.99655], [-138.71149, 59.90728], [-138.62145, 59.76431], [-137.60623, 59.24465], [-137.4925, 58.89415], [-136.82619, 59.16198], [-136.52365, 59.16752], [-136.47323, 59.46617], [-136.33727, 59.44466], [-136.22381, 59.55526], [-136.31566, 59.59083], [-135.48007, 59.79937], [-135.03069, 59.56208], [-135.00267, 59.28745], [-134.7047, 59.2458], [-134.55699, 59.1297], [-134.48059, 59.13231], [-134.27175, 58.8634], [-133.84645, 58.73543], [-133.38523, 58.42773], [-131.8271, 56.62247], [-130.77769, 56.36185], [-130.33965, 56.10849], [-130.10173, 56.12178], [-130.00093, 56.00325], [-130.00857, 55.91344], [-130.15373, 55.74895], [-129.97513, 55.28029], [-130.08035, 55.21556], [-130.18765, 55.07744], [-130.27203, 54.97174], [-130.44184, 54.85377], [-130.64499, 54.76912], [-130.61931, 54.70835], [-133.92876, 54.62289], [-133.36909, 48.51151], [-125.03842, 48.53282], [-123.50039, 48.21223], [-123.15614, 48.35395], [-123.26565, 48.6959], [-123.0093, 48.76586], [-123.0093, 48.83186], [-123.32163, 49.00419], [-95.15355, 48.9996], [-95.15357, 49.384], [-95.12903, 49.37056], [-95.05825, 49.35311], [-95.01419, 49.35647], [-94.99532, 49.36579], [-94.95681, 49.37035], [-94.85381, 49.32492], [-94.8159, 49.32299], [-94.82487, 49.29483], [-94.77355, 49.11998], [-94.75017, 49.09931], [-94.687, 48.84077], [-94.70087, 48.8339], [-94.70486, 48.82365], [-94.69669, 48.80918], [-94.69335, 48.77883], [-94.58903, 48.71803], [-94.54885, 48.71543], [-94.53826, 48.70216], [-94.44258, 48.69223], [-94.4174, 48.71049], [-94.27153, 48.70232], [-94.25172, 48.68404], [-94.25104, 48.65729], [-94.23215, 48.65202], [-93.85769, 48.63284], [-93.83288, 48.62745], [-93.80676, 48.58232], [-93.80939, 48.52439], [-93.79267, 48.51631], [-93.66382, 48.51845], [-93.47022, 48.54357], [-93.44472, 48.59147], [-93.40693, 48.60948], [-93.39758, 48.60364], [-93.3712, 48.60599], [-93.33946, 48.62787], [-93.25391, 48.64266], [-92.94973, 48.60866], [-92.7287, 48.54005], [-92.6342, 48.54133], [-92.62747, 48.50278], [-92.69927, 48.49573], [-92.71323, 48.46081], [-92.65606, 48.43471], [-92.50712, 48.44921], [-92.45588, 48.40624], [-92.48147, 48.36609], [-92.37185, 48.22259], [-92.27167, 48.25046], [-92.30939, 48.31251], [-92.26662, 48.35651], [-92.202, 48.35252], [-92.14732, 48.36578], [-92.05339, 48.35958], [-91.98929, 48.25409], [-91.86125, 48.21278], [-91.71231, 48.19875], [-91.70451, 48.11805], [-91.55649, 48.10611], [-91.58025, 48.04339], [-91.45829, 48.07454], [-91.43248, 48.04912], [-91.25025, 48.08522], [-91.08016, 48.18096], [-90.87588, 48.2484], [-90.75045, 48.09143], [-90.56444, 48.12184], [-90.56312, 48.09488], [-90.07418, 48.11043], [-89.89974, 47.98109], [-89.77248, 48.02607], [-89.57972, 48.00023], [-89.48837, 48.01412], [-88.37033, 48.30586], [-84.85871, 46.88881], [-84.55635, 46.45974], [-84.47607, 46.45225], [-84.4481, 46.48972], [-84.42101, 46.49853], [-84.34174, 46.50683], [-84.29893, 46.49127], [-84.26351, 46.49508], [-84.2264, 46.53337], [-84.1945, 46.54061], [-84.17723, 46.52753], [-84.12885, 46.53068], [-84.11196, 46.50248], [-84.13451, 46.39218], [-84.11254, 46.32329], [-84.11615, 46.2681], [-84.09756, 46.25512], [-84.1096, 46.23987], [-83.95399, 46.05634], [-83.90453, 46.05922], [-83.83329, 46.12169], [-83.57017, 46.105], [-83.43746, 45.99749], [-83.59589, 45.82131], [-82.48419, 45.30225], [-82.42469, 42.992], [-82.4146, 42.97626], [-82.4253, 42.95423], [-82.45331, 42.93139], [-82.4826, 42.8068], [-82.46613, 42.76615], [-82.51063, 42.66025], [-82.51858, 42.611], [-82.57583, 42.5718], [-82.58873, 42.54984], [-82.64242, 42.55594], [-82.82964, 42.37355], [-83.02253, 42.33045], [-83.07837, 42.30978], [-83.09837, 42.28877], [-83.12724, 42.2376], [-83.14962, 42.04089], [-83.11184, 41.95671], [-82.67862, 41.67615], [-78.93684, 42.82887], [-78.90712, 42.89733], [-78.90905, 42.93022], [-78.93224, 42.95229], [-78.96312, 42.95509], [-78.98126, 42.97], [-79.02074, 42.98444], [-79.02424, 43.01983], [-78.99941, 43.05612], [-79.01055, 43.06659], [-79.07486, 43.07845], [-79.05671, 43.10937], [-79.06881, 43.12029], [-79.0427, 43.13934], [-79.04652, 43.16396], [-79.05384, 43.17418], [-79.05002, 43.20133], [-79.05544, 43.21224], [-79.05512, 43.25375], [-79.06921, 43.26183], [-79.25796, 43.54052], [-76.79706, 43.63099], [-76.43859, 44.09393], [-76.35324, 44.13493], [-76.31222, 44.19894], [-76.244, 44.19643], [-76.1664, 44.23051], [-76.16285, 44.28262], [-76.00018, 44.34896], [-75.95947, 44.34463], [-75.8217, 44.43176], [-75.76813, 44.51537], [-75.41441, 44.76614], [-75.2193, 44.87821], [-75.01363, 44.95608], [-74.99101, 44.98051], [-74.8447, 45.00606], [-74.66689, 45.00646], [-74.32699, 44.99029], [-73.35025, 45.00942], [-71.50067, 45.01357], [-71.48735, 45.07784], [-71.42778, 45.12624], [-71.40364, 45.21382], [-71.44252, 45.2361], [-71.37133, 45.24624], [-71.29371, 45.29996], [-71.22338, 45.25184], [-71.19723, 45.25438], [-71.14568, 45.24128], [-71.08364, 45.30623], [-71.01866, 45.31573], [-71.0107, 45.34819], [-70.95193, 45.33895], [-70.91169, 45.29849], [-70.89864, 45.2398], [-70.84816, 45.22698], [-70.80236, 45.37444], [-70.82638, 45.39828], [-70.78372, 45.43269], [-70.65383, 45.37592], [-70.62518, 45.42286], [-70.72651, 45.49771], [-70.68516, 45.56964], [-70.54019, 45.67291], [-70.38934, 45.73215], [-70.41523, 45.79497], [-70.25976, 45.89675], [-70.24694, 45.95138], [-70.31025, 45.96424], [-70.23855, 46.1453], [-70.29078, 46.18832], [-70.18547, 46.35357], [-70.05812, 46.41768], [-69.99966, 46.69543], [-69.22119, 47.46461], [-69.05148, 47.42012], [-69.05073, 47.30076], [-69.05039, 47.2456], [-68.89222, 47.1807], [-68.70125, 47.24399], [-68.60575, 47.24659], [-68.57914, 47.28431], [-68.38332, 47.28723], [-68.37458, 47.35851], [-68.23244, 47.35712], [-67.94843, 47.1925], [-67.87993, 47.10377], [-67.78578, 47.06473], [-67.78111, 45.9392], [-67.75196, 45.91814], [-67.80961, 45.87531], [-67.75654, 45.82324], [-67.80653, 45.80022], [-67.80705, 45.69528], [-67.6049, 45.60725], [-67.43815, 45.59162], [-67.42144, 45.50584], [-67.50578, 45.48971], [-67.42394, 45.37969], [-67.48201, 45.27351], [-67.34927, 45.122], [-67.29754, 45.14865], [-67.29748, 45.18173], [-67.27039, 45.1934], [-67.22751, 45.16344], [-67.20349, 45.1722]]]] } },
-    { type: "Feature", properties: { iso1A2: "CC", iso1A3: "CCK", iso1N3: "166", wikidata: "Q36004", nameEn: "Cocos (Keeling) Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[96.61846, -10.82438], [96.02343, -12.68334], [97.93979, -12.33309], [96.61846, -10.82438]]]] } },
-    { type: "Feature", properties: { iso1A2: "CD", iso1A3: "COD", iso1N3: "180", wikidata: "Q974", nameEn: "Democratic Republic of the Congo", aliases: ["ZR"], groups: ["017", "202", "002", "UN"], callingCodes: ["243"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.44012, 5.07349], [27.09575, 5.22305], [26.93064, 5.13535], [26.85579, 5.03887], [26.74572, 5.10685], [26.48595, 5.04984], [26.13371, 5.25594], [25.86073, 5.19455], [25.53271, 5.37431], [25.34558, 5.29101], [25.31256, 5.03668], [24.71816, 4.90509], [24.46719, 5.0915], [23.38847, 4.60013], [22.94817, 4.82392], [22.89094, 4.79321], [22.84691, 4.69887], [22.78526, 4.71423], [22.6928, 4.47285], [22.60915, 4.48821], [22.5431, 4.22041], [22.45504, 4.13039], [22.27682, 4.11347], [22.10721, 4.20723], [21.6405, 4.317], [21.55904, 4.25553], [21.25744, 4.33676], [21.21341, 4.29285], [21.11214, 4.33895], [21.08793, 4.39603], [20.90383, 4.44877], [20.60184, 4.42394], [18.62755, 3.47564], [18.63857, 3.19342], [18.10683, 2.26876], [18.08034, 1.58553], [17.85887, 1.04327], [17.86989, 0.58873], [17.95255, 0.48128], [17.93877, 0.32424], [17.81204, 0.23884], [17.66051, -0.26535], [17.72112, -0.52707], [17.32438, -0.99265], [16.97999, -1.12762], [16.70724, -1.45815], [16.50336, -1.8795], [16.16173, -2.16586], [16.22785, -2.59528], [16.1755, -3.25014], [16.21407, -3.2969], [15.89448, -3.9513], [15.53081, -4.042], [15.48121, -4.22062], [15.41785, -4.28381], [15.32693, -4.27282], [15.25411, -4.31121], [15.1978, -4.32388], [14.83101, -4.80838], [14.67948, -4.92093], [14.5059, -4.84956], [14.41499, -4.8825], [14.37366, -4.56125], [14.47284, -4.42941], [14.3957, -4.36623], [14.40672, -4.28381], [13.9108, -4.50906], [13.81162, -4.41842], [13.71794, -4.44864], [13.70417, -4.72601], [13.50305, -4.77818], [13.41764, -4.89897], [13.11182, -4.5942], [13.09648, -4.63739], [13.11195, -4.67745], [12.8733, -4.74346], [12.70868, -4.95505], [12.63465, -4.94632], [12.60251, -5.01715], [12.46297, -5.09408], [12.49815, -5.14058], [12.51589, -5.1332], [12.53586, -5.14658], [12.53599, -5.1618], [12.52301, -5.17481], [12.52318, -5.74353], [12.26557, -5.74031], [12.20376, -5.76338], [11.95767, -5.94705], [12.42245, -6.07585], [13.04371, -5.87078], [16.55507, -5.85631], [16.96282, -7.21787], [17.5828, -8.13784], [18.33635, -8.00126], [19.33698, -7.99743], [19.5469, -7.00195], [20.30218, -6.98955], [20.31846, -6.91953], [20.61689, -6.90876], [20.56263, -7.28566], [21.79824, -7.29628], [21.84856, -9.59871], [22.19039, -9.94628], [22.32604, -10.76291], [22.17954, -10.85884], [22.25951, -11.24911], [22.54205, -11.05784], [23.16602, -11.10577], [23.45631, -10.946], [23.86868, -11.02856], [24.00027, -10.89356], [24.34528, -11.06816], [24.42612, -11.44975], [25.34069, -11.19707], [25.33058, -11.65767], [26.01777, -11.91488], [26.88687, -12.01868], [27.04351, -11.61312], [27.22541, -11.60323], [27.21025, -11.76157], [27.59932, -12.22123], [28.33199, -12.41375], [29.01918, -13.41353], [29.60531, -13.21685], [29.65078, -13.41844], [29.81551, -13.44683], [29.8139, -12.14898], [29.48404, -12.23604], [29.4992, -12.43843], [29.18592, -12.37921], [28.48357, -11.87532], [28.37241, -11.57848], [28.65032, -10.65133], [28.62795, -9.92942], [28.68532, -9.78], [28.56208, -9.49122], [28.51627, -9.44726], [28.52636, -9.35379], [28.36562, -9.30091], [28.38526, -9.23393], [28.9711, -8.66935], [28.88917, -8.4831], [30.79243, -8.27382], [30.2567, -7.14121], [29.52552, -6.2731], [29.43673, -4.44845], [29.23708, -3.75856], [29.21463, -3.3514], [29.25633, -3.05471], [29.17258, -2.99385], [29.16037, -2.95457], [29.09797, -2.91935], [29.09119, -2.87871], [29.0505, -2.81774], [29.00404, -2.81978], [29.00167, -2.78523], [29.04081, -2.7416], [29.00357, -2.70596], [28.94346, -2.69124], [28.89793, -2.66111], [28.90226, -2.62385], [28.89288, -2.55848], [28.87943, -2.55165], [28.86193, -2.53185], [28.86209, -2.5231], [28.87497, -2.50887], [28.88846, -2.50493], [28.89342, -2.49017], [28.89132, -2.47557], [28.86846, -2.44866], [28.86826, -2.41888], [28.89601, -2.37321], [28.95642, -2.37321], [29.00051, -2.29001], [29.105, -2.27043], [29.17562, -2.12278], [29.11847, -1.90576], [29.24458, -1.69663], [29.24323, -1.66826], [29.36322, -1.50887], [29.45038, -1.5054], [29.53062, -1.40499], [29.59061, -1.39016], [29.58388, -0.89821], [29.63006, -0.8997], [29.62708, -0.71055], [29.67176, -0.55714], [29.67474, -0.47969], [29.65091, -0.46777], [29.72687, -0.08051], [29.7224, 0.07291], [29.77454, 0.16675], [29.81922, 0.16824], [29.87284, 0.39166], [29.97413, 0.52124], [29.95477, 0.64486], [29.98307, 0.84295], [30.1484, 0.89805], [30.22139, 0.99635], [30.24671, 1.14974], [30.48503, 1.21675], [31.30127, 2.11006], [31.28042, 2.17853], [31.20148, 2.2217], [31.1985, 2.29462], [31.12104, 2.27676], [31.07934, 2.30207], [31.06593, 2.35862], [30.96911, 2.41071], [30.91102, 2.33332], [30.83059, 2.42559], [30.74271, 2.43601], [30.75612, 2.5863], [30.8857, 2.83923], [30.8574, 2.9508], [30.77101, 3.04897], [30.84251, 3.26908], [30.93486, 3.40737], [30.94081, 3.50847], [30.85153, 3.48867], [30.85997, 3.5743], [30.80713, 3.60506], [30.78512, 3.67097], [30.56277, 3.62703], [30.57378, 3.74567], [30.55396, 3.84451], [30.47691, 3.83353], [30.27658, 3.95653], [30.22374, 3.93896], [30.1621, 4.10586], [30.06964, 4.13221], [29.79666, 4.37809], [29.82087, 4.56246], [29.49726, 4.7007], [29.43341, 4.50101], [29.22207, 4.34297], [29.03054, 4.48784], [28.8126, 4.48784], [28.6651, 4.42638], [28.20719, 4.35614], [27.79551, 4.59976], [27.76469, 4.79284], [27.65462, 4.89375], [27.56656, 4.89375], [27.44012, 5.07349]]]] } },
-    { type: "Feature", properties: { iso1A2: "CF", iso1A3: "CAF", iso1N3: "140", wikidata: "Q929", nameEn: "Central African Republic", groups: ["017", "202", "002", "UN"], callingCodes: ["236"] }, geometry: { type: "MultiPolygon", coordinates: [[[[22.87758, 10.91915], [22.45889, 11.00246], [21.72139, 10.64136], [21.71479, 10.29932], [21.63553, 10.217], [21.52766, 10.2105], [21.34934, 9.95907], [21.26348, 9.97642], [20.82979, 9.44696], [20.36748, 9.11019], [19.06421, 9.00367], [18.86388, 8.87971], [19.11044, 8.68172], [18.79783, 8.25929], [18.67455, 8.22226], [18.62612, 8.14163], [18.64153, 8.08714], [18.6085, 8.05009], [18.02731, 8.01085], [17.93926, 7.95853], [17.67288, 7.98905], [16.8143, 7.53971], [16.6668, 7.67281], [16.658, 7.75353], [16.59415, 7.76444], [16.58315, 7.88657], [16.41583, 7.77971], [16.40703, 7.68809], [15.79942, 7.44149], [15.73118, 7.52006], [15.49743, 7.52179], [15.23397, 7.25135], [15.04717, 6.77085], [14.96311, 6.75693], [14.79966, 6.39043], [14.80122, 6.34866], [14.74206, 6.26356], [14.56149, 6.18928], [14.43073, 6.08867], [14.42917, 6.00508], [14.49455, 5.91683], [14.60974, 5.91838], [14.62375, 5.70466], [14.58951, 5.59777], [14.62531, 5.51411], [14.52724, 5.28319], [14.57083, 5.23979], [14.65489, 5.21343], [14.73383, 4.6135], [15.00825, 4.41458], [15.08609, 4.30282], [15.10644, 4.1362], [15.17482, 4.05131], [15.07686, 4.01805], [15.73522, 3.24348], [15.77725, 3.26835], [16.05449, 3.02306], [16.08252, 2.45708], [16.19357, 2.21537], [16.50126, 2.84739], [16.46701, 2.92512], [16.57598, 3.47999], [16.68283, 3.54257], [17.01746, 3.55136], [17.35649, 3.63045], [17.46876, 3.70515], [17.60966, 3.63705], [17.83421, 3.61068], [17.85842, 3.53378], [18.05656, 3.56893], [18.14902, 3.54476], [18.17323, 3.47665], [18.24148, 3.50302], [18.2723, 3.57992], [18.39558, 3.58212], [18.49245, 3.63924], [18.58711, 3.49423], [18.62755, 3.47564], [20.60184, 4.42394], [20.90383, 4.44877], [21.08793, 4.39603], [21.11214, 4.33895], [21.21341, 4.29285], [21.25744, 4.33676], [21.55904, 4.25553], [21.6405, 4.317], [22.10721, 4.20723], [22.27682, 4.11347], [22.45504, 4.13039], [22.5431, 4.22041], [22.60915, 4.48821], [22.6928, 4.47285], [22.78526, 4.71423], [22.84691, 4.69887], [22.89094, 4.79321], [22.94817, 4.82392], [23.38847, 4.60013], [24.46719, 5.0915], [24.71816, 4.90509], [25.31256, 5.03668], [25.34558, 5.29101], [25.53271, 5.37431], [25.86073, 5.19455], [26.13371, 5.25594], [26.48595, 5.04984], [26.74572, 5.10685], [26.85579, 5.03887], [26.93064, 5.13535], [27.09575, 5.22305], [27.44012, 5.07349], [27.26886, 5.25876], [27.23017, 5.37167], [27.28621, 5.56382], [27.22705, 5.62889], [27.22705, 5.71254], [26.51721, 6.09655], [26.58259, 6.1987], [26.32729, 6.36272], [26.38022, 6.63493], [25.90076, 7.09549], [25.37461, 7.33024], [25.35281, 7.42595], [25.20337, 7.50312], [25.20649, 7.61115], [25.29214, 7.66675], [25.25319, 7.8487], [24.98855, 7.96588], [24.85156, 8.16933], [24.35965, 8.26177], [24.13238, 8.36959], [24.25691, 8.69288], [23.51905, 8.71749], [23.59065, 8.99743], [23.44744, 8.99128], [23.4848, 9.16959], [23.56263, 9.19418], [23.64358, 9.28637], [23.64981, 9.44303], [23.62179, 9.53823], [23.69155, 9.67566], [23.67164, 9.86923], [23.3128, 10.45214], [23.02221, 10.69235], [22.87758, 10.91915]]]] } },
-    { type: "Feature", properties: { iso1A2: "CG", iso1A3: "COG", iso1N3: "178", wikidata: "Q971", nameEn: "Republic of the Congo", groups: ["017", "202", "002", "UN"], callingCodes: ["242"] }, geometry: { type: "MultiPolygon", coordinates: [[[[18.62755, 3.47564], [18.58711, 3.49423], [18.49245, 3.63924], [18.39558, 3.58212], [18.2723, 3.57992], [18.24148, 3.50302], [18.17323, 3.47665], [18.14902, 3.54476], [18.05656, 3.56893], [17.85842, 3.53378], [17.83421, 3.61068], [17.60966, 3.63705], [17.46876, 3.70515], [17.35649, 3.63045], [17.01746, 3.55136], [16.68283, 3.54257], [16.57598, 3.47999], [16.46701, 2.92512], [16.50126, 2.84739], [16.19357, 2.21537], [16.15568, 2.18955], [16.08563, 2.19733], [16.05294, 1.9811], [16.14634, 1.70259], [16.02647, 1.65591], [16.02959, 1.76483], [15.48942, 1.98265], [15.34776, 1.91264], [15.22634, 2.03243], [15.00996, 1.98887], [14.61145, 2.17866], [13.29457, 2.16106], [13.13461, 1.57238], [13.25447, 1.32339], [13.15519, 1.23368], [13.89582, 1.4261], [14.25186, 1.39842], [14.48179, 0.9152], [14.26066, 0.57255], [14.10909, 0.58563], [13.88648, 0.26652], [13.90632, -0.2287], [14.06862, -0.20826], [14.2165, -0.38261], [14.41887, -0.44799], [14.52569, -0.57818], [14.41838, -1.89412], [14.25932, -1.97624], [14.23518, -2.15671], [14.16202, -2.23916], [14.23829, -2.33715], [14.10442, -2.49268], [13.85846, -2.46935], [13.92073, -2.35581], [13.75884, -2.09293], [13.47977, -2.43224], [13.02759, -2.33098], [12.82172, -1.91091], [12.61312, -1.8129], [12.44656, -1.92025], [12.47925, -2.32626], [12.04895, -2.41704], [11.96866, -2.33559], [11.74605, -2.39936], [11.57637, -2.33379], [11.64487, -2.61865], [11.5359, -2.85654], [11.64798, -2.81146], [11.80365, -3.00424], [11.70558, -3.0773], [11.70227, -3.17465], [11.96554, -3.30267], [11.8318, -3.5812], [11.92719, -3.62768], [11.87083, -3.71571], [11.68608, -3.68942], [11.57949, -3.52798], [11.48764, -3.51089], [11.22301, -3.69888], [11.12647, -3.94169], [10.75913, -4.39519], [11.50888, -5.33417], [12.00924, -5.02627], [12.16068, -4.90089], [12.20901, -4.75642], [12.25587, -4.79437], [12.32324, -4.78415], [12.40964, -4.60609], [12.64835, -4.55937], [12.76844, -4.38709], [12.87096, -4.40315], [12.91489, -4.47907], [13.09648, -4.63739], [13.11182, -4.5942], [13.41764, -4.89897], [13.50305, -4.77818], [13.70417, -4.72601], [13.71794, -4.44864], [13.81162, -4.41842], [13.9108, -4.50906], [14.40672, -4.28381], [14.3957, -4.36623], [14.47284, -4.42941], [14.37366, -4.56125], [14.41499, -4.8825], [14.5059, -4.84956], [14.67948, -4.92093], [14.83101, -4.80838], [15.1978, -4.32388], [15.25411, -4.31121], [15.32693, -4.27282], [15.41785, -4.28381], [15.48121, -4.22062], [15.53081, -4.042], [15.89448, -3.9513], [16.21407, -3.2969], [16.1755, -3.25014], [16.22785, -2.59528], [16.16173, -2.16586], [16.50336, -1.8795], [16.70724, -1.45815], [16.97999, -1.12762], [17.32438, -0.99265], [17.72112, -0.52707], [17.66051, -0.26535], [17.81204, 0.23884], [17.93877, 0.32424], [17.95255, 0.48128], [17.86989, 0.58873], [17.85887, 1.04327], [18.08034, 1.58553], [18.10683, 2.26876], [18.63857, 3.19342], [18.62755, 3.47564]]]] } },
-    { type: "Feature", geometry: { type: "MultiPolygon", coordinates: [[[[8.72809, 47.69282], [8.72617, 47.69651], [8.73671, 47.7169], [8.70543, 47.73121], [8.74251, 47.75168], [8.71778, 47.76571], [8.68985, 47.75686], [8.68022, 47.78599], [8.65292, 47.80066], [8.64425, 47.76398], [8.62408, 47.7626], [8.61657, 47.79998], [8.56415, 47.80633], [8.56814, 47.78001], [8.48868, 47.77215], [8.45771, 47.7493], [8.44807, 47.72426], [8.40569, 47.69855], [8.4211, 47.68407], [8.40473, 47.67499], [8.41346, 47.66676], [8.42264, 47.66667], [8.44711, 47.65379], [8.4667, 47.65747], [8.46605, 47.64103], [8.49656, 47.64709], [8.5322, 47.64687], [8.52801, 47.66059], [8.56141, 47.67088], [8.57683, 47.66158], [8.6052, 47.67258], [8.61113, 47.66332], [8.62884, 47.65098], [8.62049, 47.63757], [8.60412, 47.63735], [8.61471, 47.64514], [8.60701, 47.65271], [8.59545, 47.64298], [8.60348, 47.61204], [8.57586, 47.59537], [8.55756, 47.62394], [8.51686, 47.63476], [8.50747, 47.61897], [8.45578, 47.60121], [8.46637, 47.58389], [8.48949, 47.588], [8.49431, 47.58107], [8.43235, 47.56617], [8.39477, 47.57826], [8.38273, 47.56608], [8.35512, 47.57014], [8.32735, 47.57133], [8.30277, 47.58607], [8.29524, 47.5919], [8.29722, 47.60603], [8.2824, 47.61225], [8.26313, 47.6103], [8.25863, 47.61571], [8.23809, 47.61204], [8.22577, 47.60385], [8.22011, 47.6181], [8.20617, 47.62141], [8.19378, 47.61636], [8.1652, 47.5945], [8.14947, 47.59558], [8.13823, 47.59147], [8.13662, 47.58432], [8.11543, 47.5841], [8.10395, 47.57918], [8.10002, 47.56504], [8.08557, 47.55768], [8.06663, 47.56374], [8.04383, 47.55443], [8.02136, 47.55096], [8.00113, 47.55616], [7.97581, 47.55493], [7.95682, 47.55789], [7.94494, 47.54511], [7.91251, 47.55031], [7.90673, 47.57674], [7.88664, 47.58854], [7.84412, 47.5841], [7.81901, 47.58798], [7.79486, 47.55691], [7.75261, 47.54599], [7.71961, 47.54219], [7.69642, 47.53297], [7.68101, 47.53232], [7.6656, 47.53752], [7.66174, 47.54554], [7.65083, 47.54662], [7.63338, 47.56256], [7.67655, 47.56435], [7.68904, 47.57133], [7.67115, 47.5871], [7.68486, 47.59601], [7.69385, 47.60099], [7.68229, 47.59905], [7.67395, 47.59212], [7.64599, 47.59695], [7.64213, 47.5944], [7.64309, 47.59151], [7.61929, 47.57683], [7.60459, 47.57869], [7.60523, 47.58519], [7.58945, 47.59017], [7.58386, 47.57536], [7.56684, 47.57785], [7.56548, 47.57617], [7.55689, 47.57232], [7.55652, 47.56779], [7.53634, 47.55553], [7.52831, 47.55347], [7.51723, 47.54578], [7.50873, 47.54546], [7.49691, 47.53821], [7.50588, 47.52856], [7.51904, 47.53515], [7.53199, 47.5284], [7.5229, 47.51644], [7.49804, 47.51798], [7.51076, 47.49651], [7.47534, 47.47932], [7.43356, 47.49712], [7.42923, 47.48628], [7.4583, 47.47216], [7.4462, 47.46264], [7.43088, 47.45846], [7.40308, 47.43638], [7.35603, 47.43432], [7.33526, 47.44186], [7.24669, 47.4205], [7.17026, 47.44312], [7.19583, 47.49455], [7.16249, 47.49025], [7.12781, 47.50371], [7.07425, 47.48863], [7.0231, 47.50522], [6.98425, 47.49432], [7.0024, 47.45264], [6.93953, 47.43388], [6.93744, 47.40714], [6.88542, 47.37262], [6.87959, 47.35335], [7.03125, 47.36996], [7.0564, 47.35134], [7.05305, 47.33304], [6.94316, 47.28747], [6.95108, 47.26428], [6.9508, 47.24338], [6.8489, 47.15933], [6.76788, 47.1208], [6.68823, 47.06616], [6.71531, 47.0494], [6.43341, 46.92703], [6.46456, 46.88865], [6.43216, 46.80336], [6.45209, 46.77502], [6.38351, 46.73171], [6.27135, 46.68251], [6.11084, 46.57649], [6.1567, 46.54402], [6.07269, 46.46244], [6.08427, 46.44305], [6.06407, 46.41676], [6.09926, 46.40768], [6.15016, 46.3778], [6.15985, 46.37721], [6.16987, 46.36759], [6.15738, 46.3491], [6.13876, 46.33844], [6.1198, 46.31157], [6.11697, 46.29547], [6.1013, 46.28512], [6.11926, 46.2634], [6.12446, 46.25059], [6.10071, 46.23772], [6.08563, 46.24651], [6.07072, 46.24085], [6.0633, 46.24583], [6.05029, 46.23518], [6.04602, 46.23127], [6.03342, 46.2383], [6.02461, 46.23313], [5.97542, 46.21525], [5.96515, 46.19638], [5.99573, 46.18587], [5.98846, 46.17046], [5.98188, 46.17392], [5.97508, 46.15863], [5.9641, 46.14412], [5.95781, 46.12925], [5.97893, 46.13303], [5.9871, 46.14499], [6.01791, 46.14228], [6.03614, 46.13712], [6.04564, 46.14031], [6.05203, 46.15191], [6.07491, 46.14879], [6.09199, 46.15191], [6.09926, 46.14373], [6.13397, 46.1406], [6.15305, 46.15194], [6.18116, 46.16187], [6.18871, 46.16644], [6.18707, 46.17999], [6.19552, 46.18401], [6.19807, 46.18369], [6.20539, 46.19163], [6.21114, 46.1927], [6.21273, 46.19409], [6.21603, 46.19507], [6.21844, 46.19837], [6.22222, 46.19888], [6.22175, 46.20045], [6.23544, 46.20714], [6.23913, 46.20511], [6.24821, 46.20531], [6.26007, 46.21165], [6.27694, 46.21566], [6.29663, 46.22688], [6.31041, 46.24417], [6.29474, 46.26221], [6.26749, 46.24745], [6.24952, 46.26255], [6.23775, 46.27822], [6.25137, 46.29014], [6.24826, 46.30175], [6.21981, 46.31304], [6.25432, 46.3632], [6.53358, 46.45431], [6.82312, 46.42661], [6.8024, 46.39171], [6.77152, 46.34784], [6.86052, 46.28512], [6.78968, 46.14058], [6.89321, 46.12548], [6.87868, 46.03855], [6.93862, 46.06502], [7.00946, 45.9944], [7.04151, 45.92435], [7.10685, 45.85653], [7.56343, 45.97421], [7.85949, 45.91485], [7.9049, 45.99945], [7.98881, 45.99867], [8.02906, 46.10331], [8.11383, 46.11577], [8.16866, 46.17817], [8.08814, 46.26692], [8.31162, 46.38044], [8.30648, 46.41587], [8.42464, 46.46367], [8.46317, 46.43712], [8.45032, 46.26869], [8.62242, 46.12112], [8.75697, 46.10395], [8.80778, 46.10085], [8.85617, 46.0748], [8.79414, 46.00913], [8.78585, 45.98973], [8.79362, 45.99207], [8.8319, 45.9879], [8.85121, 45.97239], [8.86688, 45.96135], [8.88904, 45.95465], [8.93649, 45.86775], [8.94372, 45.86587], [8.93504, 45.86245], [8.91129, 45.8388], [8.94737, 45.84285], [8.9621, 45.83707], [8.99663, 45.83466], [9.00324, 45.82055], [9.0298, 45.82127], [9.03279, 45.82865], [9.03793, 45.83548], [9.03505, 45.83976], [9.04059, 45.8464], [9.04546, 45.84968], [9.06642, 45.8761], [9.09065, 45.89906], [8.99257, 45.9698], [9.01618, 46.04928], [9.24503, 46.23616], [9.29226, 46.32717], [9.25502, 46.43743], [9.28136, 46.49685], [9.36128, 46.5081], [9.40487, 46.46621], [9.45936, 46.50873], [9.46117, 46.37481], [9.57015, 46.2958], [9.71273, 46.29266], [9.73086, 46.35071], [9.95249, 46.38045], [10.07055, 46.21668], [10.14439, 46.22992], [10.17862, 46.25626], [10.10506, 46.3372], [10.165, 46.41051], [10.03715, 46.44479], [10.10307, 46.61003], [10.23674, 46.63484], [10.25309, 46.57432], [10.46136, 46.53164], [10.49375, 46.62049], [10.44686, 46.64162], [10.40475, 46.63671], [10.38659, 46.67847], [10.47197, 46.85698], [10.48376, 46.93891], [10.36933, 47.00212], [10.30031, 46.92093], [10.24128, 46.93147], [10.22675, 46.86942], [10.10715, 46.84296], [9.98058, 46.91434], [9.88266, 46.93343], [9.87935, 47.01337], [9.60717, 47.06091], [9.55721, 47.04762], [9.54041, 47.06495], [9.47548, 47.05257], [9.47139, 47.06402], [9.51362, 47.08505], [9.52089, 47.10019], [9.51044, 47.13727], [9.48774, 47.17402], [9.4891, 47.19346], [9.50318, 47.22153], [9.52406, 47.24959], [9.53116, 47.27029], [9.54773, 47.2809], [9.55857, 47.29919], [9.58513, 47.31334], [9.59978, 47.34671], [9.62476, 47.36639], [9.65427, 47.36824], [9.66243, 47.37136], [9.6711, 47.37824], [9.67445, 47.38429], [9.67334, 47.39191], [9.6629, 47.39591], [9.65136, 47.40504], [9.65043, 47.41937], [9.6446, 47.43233], [9.64483, 47.43842], [9.65863, 47.44847], [9.65728, 47.45383], [9.6423, 47.45599], [9.62475, 47.45685], [9.62158, 47.45858], [9.60841, 47.47178], [9.60484, 47.46358], [9.60205, 47.46165], [9.59482, 47.46305], [9.58208, 47.48344], [9.56312, 47.49495], [9.55125, 47.53629], [9.25619, 47.65939], [9.18203, 47.65598], [9.17593, 47.65399], [9.1755, 47.65584], [9.1705, 47.65513], [9.15181, 47.66904], [9.13845, 47.66389], [9.09891, 47.67801], [9.02093, 47.6868], [8.94093, 47.65596], [8.89946, 47.64769], [8.87625, 47.65441], [8.87383, 47.67045], [8.85065, 47.68209], [8.86989, 47.70504], [8.82002, 47.71458], [8.80663, 47.73821], [8.77309, 47.72059], [8.76965, 47.7075], [8.79966, 47.70222], [8.79511, 47.67462], [8.75856, 47.68969], [8.72809, 47.69282]], [[8.95861, 45.96485], [8.96668, 45.98436], [8.97741, 45.98317], [8.97604, 45.96151], [8.95861, 45.96485]], [[8.70847, 47.68904], [8.68985, 47.69552], [8.66837, 47.68437], [8.65769, 47.68928], [8.67508, 47.6979], [8.66416, 47.71367], [8.70237, 47.71453], [8.71773, 47.69088], [8.70847, 47.68904]]]] }, properties: { iso1A2: "CH", iso1A3: "CHE", iso1N3: "756", wikidata: "Q39", nameEn: "Switzerland", groups: ["155", "150", "UN"], callingCodes: ["41"] } },
-    { type: "Feature", properties: { iso1A2: "CI", iso1A3: "CIV", iso1N3: "384", wikidata: "Q1008", nameEn: "C\xF4te d'Ivoire", groups: ["011", "202", "002", "UN"], callingCodes: ["225"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-7.52774, 3.7105], [-3.34019, 4.17519], [-3.10675, 5.08515], [-3.11073, 5.12675], [-3.063, 5.13665], [-2.96554, 5.10397], [-2.95261, 5.12477], [-2.75502, 5.10657], [-2.73074, 5.1364], [-2.77625, 5.34621], [-2.72737, 5.34789], [-2.76614, 5.60963], [-2.85378, 5.65156], [-2.93132, 5.62137], [-2.96671, 5.6415], [-2.95323, 5.71865], [-3.01896, 5.71697], [-3.25999, 6.62521], [-3.21954, 6.74407], [-3.23327, 6.81744], [-2.95438, 7.23737], [-2.97822, 7.27165], [-2.92339, 7.60847], [-2.79467, 7.86002], [-2.78395, 7.94974], [-2.74819, 7.92613], [-2.67787, 8.02055], [-2.61232, 8.02645], [-2.62901, 8.11495], [-2.49037, 8.20872], [-2.58243, 8.7789], [-2.66357, 9.01771], [-2.77799, 9.04949], [-2.69814, 9.22717], [-2.68802, 9.49343], [-2.76494, 9.40778], [-2.93012, 9.57403], [-3.00765, 9.74019], [-3.16609, 9.85147], [-3.19306, 9.93781], [-3.27228, 9.84981], [-3.31779, 9.91125], [-3.69703, 9.94279], [-4.25999, 9.76012], [-4.31392, 9.60062], [-4.6426, 9.70696], [-4.96621, 9.89132], [-4.96453, 9.99923], [-5.12465, 10.29788], [-5.39602, 10.2929], [-5.51058, 10.43177], [-5.65135, 10.46767], [-5.78124, 10.43952], [-5.99478, 10.19694], [-6.18851, 10.24244], [-6.1731, 10.46983], [-6.24795, 10.74248], [-6.325, 10.68624], [-6.40646, 10.69922], [-6.42847, 10.5694], [-6.52974, 10.59104], [-6.63541, 10.66893], [-6.68164, 10.35074], [-6.93921, 10.35291], [-7.01186, 10.25111], [-6.97444, 10.21644], [-7.00966, 10.15794], [-7.0603, 10.14711], [-7.13331, 10.24877], [-7.3707, 10.24677], [-7.44555, 10.44602], [-7.52261, 10.4655], [-7.54462, 10.40921], [-7.63048, 10.46334], [-7.92107, 10.15577], [-7.97971, 10.17117], [-8.01225, 10.1021], [-8.11921, 10.04577], [-8.15652, 9.94288], [-8.09434, 9.86936], [-8.14657, 9.55062], [-8.03463, 9.39604], [-7.85056, 9.41812], [-7.90777, 9.20456], [-7.73862, 9.08422], [-7.92518, 8.99332], [-7.95503, 8.81146], [-7.69882, 8.66148], [-7.65653, 8.36873], [-7.92518, 8.50652], [-8.22991, 8.48438], [-8.2411, 8.24196], [-8.062, 8.16071], [-7.98675, 8.20134], [-7.99919, 8.11023], [-7.94695, 8.00925], [-8.06449, 8.04989], [-8.13414, 7.87991], [-8.09931, 7.78626], [-8.21374, 7.54466], [-8.4003, 7.6285], [-8.47114, 7.55676], [-8.41935, 7.51203], [-8.37458, 7.25794], [-8.29249, 7.1691], [-8.31736, 6.82837], [-8.59456, 6.50612], [-8.48652, 6.43797], [-8.45666, 6.49977], [-8.38453, 6.35887], [-8.3298, 6.36381], [-8.17557, 6.28222], [-8.00642, 6.31684], [-7.90692, 6.27728], [-7.83478, 6.20309], [-7.8497, 6.08932], [-7.79747, 6.07696], [-7.78254, 5.99037], [-7.70294, 5.90625], [-7.67309, 5.94337], [-7.48155, 5.80974], [-7.46165, 5.84934], [-7.43677, 5.84687], [-7.43926, 5.74787], [-7.37209, 5.61173], [-7.43428, 5.42355], [-7.36463, 5.32944], [-7.46165, 5.26256], [-7.48901, 5.14118], [-7.55369, 5.08667], [-7.53876, 4.94294], [-7.59349, 4.8909], [-7.53259, 4.35145], [-7.52774, 3.7105]]]] } },
-    { type: "Feature", properties: { iso1A2: "CK", iso1A3: "COK", iso1N3: "184", wikidata: "Q26988", nameEn: "Cook Islands", country: "NZ", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["682"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-168.15106, -10.26955], [-156.45576, -31.75456], [-156.48634, -15.52824], [-156.50903, -7.4975], [-168.15106, -10.26955]]]] } },
-    { type: "Feature", properties: { iso1A2: "CL", iso1A3: "CHL", iso1N3: "152", wikidata: "Q298", nameEn: "Chile", groups: ["005", "419", "019", "UN"], callingCodes: ["56"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-68.60702, -52.65781], [-68.41683, -52.33516], [-69.97824, -52.00845], [-71.99889, -51.98018], [-72.33873, -51.59954], [-72.31343, -50.58411], [-73.15765, -50.78337], [-73.55259, -49.92488], [-73.45156, -49.79461], [-73.09655, -49.14342], [-72.56894, -48.81116], [-72.54042, -48.52392], [-72.27662, -48.28727], [-72.50478, -47.80586], [-71.94152, -47.13595], [-71.68577, -46.55385], [-71.75614, -45.61611], [-71.35687, -45.22075], [-72.06985, -44.81756], [-71.26418, -44.75684], [-71.16436, -44.46244], [-71.81318, -44.38097], [-71.64206, -43.64774], [-72.14828, -42.85321], [-72.15541, -42.15941], [-71.74901, -42.11711], [-71.92726, -40.72714], [-71.37826, -38.91474], [-70.89532, -38.6923], [-71.24279, -37.20264], [-70.95047, -36.4321], [-70.38008, -36.02375], [-70.49416, -35.24145], [-69.87386, -34.13344], [-69.88099, -33.34489], [-70.55832, -31.51559], [-70.14479, -30.36595], [-69.8596, -30.26131], [-69.99507, -29.28351], [-69.80969, -29.07185], [-69.66709, -28.44055], [-69.22504, -27.95042], [-68.77586, -27.16029], [-68.43363, -27.08414], [-68.27677, -26.90626], [-68.59048, -26.49861], [-68.56909, -26.28146], [-68.38372, -26.15353], [-68.57622, -25.32505], [-68.38372, -25.08636], [-68.56909, -24.69831], [-68.24825, -24.42596], [-67.33563, -24.04237], [-66.99632, -22.99839], [-67.18382, -22.81525], [-67.54284, -22.89771], [-67.85114, -22.87076], [-68.18816, -21.28614], [-68.40403, -20.94562], [-68.53957, -20.91542], [-68.55383, -20.7355], [-68.44023, -20.62701], [-68.7276, -20.46178], [-68.74273, -20.08817], [-68.57132, -20.03134], [-68.54611, -19.84651], [-68.66761, -19.72118], [-68.41218, -19.40499], [-68.61989, -19.27584], [-68.80602, -19.08355], [-68.87082, -19.06003], [-68.94987, -18.93302], [-69.07432, -18.28259], [-69.14807, -18.16893], [-69.07496, -18.03715], [-69.28671, -17.94844], [-69.34126, -17.72753], [-69.46623, -17.60518], [-69.46897, -17.4988], [-69.66483, -17.65083], [-69.79087, -17.65563], [-69.82868, -17.72048], [-69.75305, -17.94605], [-69.81607, -18.12582], [-69.96732, -18.25992], [-70.16394, -18.31737], [-70.31267, -18.31258], [-70.378, -18.3495], [-70.59118, -18.35072], [-113.52687, -26.52828], [-68.11646, -58.14883], [-66.07313, -55.19618], [-67.11046, -54.94199], [-67.46182, -54.92205], [-68.01394, -54.8753], [-68.60733, -54.9125], [-68.60702, -52.65781]]]] } },
-    { type: "Feature", properties: { iso1A2: "CM", iso1A3: "CMR", iso1N3: "120", wikidata: "Q1009", nameEn: "Cameroon", groups: ["017", "202", "002", "UN"], callingCodes: ["237"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.83314, 12.62963], [14.55058, 12.78256], [14.56101, 12.91036], [14.46881, 13.08259], [14.08251, 13.0797], [14.20204, 12.53405], [14.17523, 12.41916], [14.22215, 12.36533], [14.4843, 12.35223], [14.6474, 12.17466], [14.61612, 11.7798], [14.55207, 11.72001], [14.64591, 11.66166], [14.6124, 11.51283], [14.17821, 11.23831], [13.97489, 11.30258], [13.78945, 11.00154], [13.7403, 11.00593], [13.70753, 10.94451], [13.73434, 10.9255], [13.54964, 10.61236], [13.5705, 10.53183], [13.43644, 10.13326], [13.34111, 10.12299], [13.25025, 10.03647], [13.25323, 10.00127], [13.286, 9.9822], [13.27409, 9.93232], [13.24132, 9.91031], [13.25025, 9.86042], [13.29941, 9.8296], [13.25472, 9.76795], [13.22642, 9.57266], [13.02385, 9.49334], [12.85628, 9.36698], [12.91958, 9.33905], [12.90022, 9.11411], [12.81085, 8.91992], [12.79, 8.75361], [12.71701, 8.7595], [12.68722, 8.65938], [12.44146, 8.6152], [12.4489, 8.52536], [12.26123, 8.43696], [12.24782, 8.17904], [12.19271, 8.10826], [12.20909, 7.97553], [11.99908, 7.67302], [12.01844, 7.52981], [11.93205, 7.47812], [11.84864, 7.26098], [11.87396, 7.09398], [11.63117, 6.9905], [11.55818, 6.86186], [11.57755, 6.74059], [11.51499, 6.60892], [11.42264, 6.5882], [11.42041, 6.53789], [11.09495, 6.51717], [11.09644, 6.68437], [10.94302, 6.69325], [10.8179, 6.83377], [10.83727, 6.9358], [10.60789, 7.06885], [10.59746, 7.14719], [10.57214, 7.16345], [10.53639, 6.93432], [10.21466, 6.88996], [10.15135, 7.03781], [9.86314, 6.77756], [9.77824, 6.79088], [9.70674, 6.51717], [9.51757, 6.43874], [8.84209, 5.82562], [8.88156, 5.78857], [8.83687, 5.68483], [8.92029, 5.58403], [8.78027, 5.1243], [8.60302, 4.87353], [8.34397, 4.30689], [9.22018, 3.72052], [9.81162, 2.33797], [9.82123, 2.35097], [9.83754, 2.32428], [9.83238, 2.29079], [9.84716, 2.24676], [9.89012, 2.20457], [9.90749, 2.20049], [9.991, 2.16561], [11.3561, 2.17217], [11.37116, 2.29975], [13.28534, 2.25716], [13.29457, 2.16106], [14.61145, 2.17866], [15.00996, 1.98887], [15.22634, 2.03243], [15.34776, 1.91264], [15.48942, 1.98265], [16.02959, 1.76483], [16.02647, 1.65591], [16.14634, 1.70259], [16.05294, 1.9811], [16.08563, 2.19733], [16.15568, 2.18955], [16.19357, 2.21537], [16.08252, 2.45708], [16.05449, 3.02306], [15.77725, 3.26835], [15.73522, 3.24348], [15.07686, 4.01805], [15.17482, 4.05131], [15.10644, 4.1362], [15.08609, 4.30282], [15.00825, 4.41458], [14.73383, 4.6135], [14.65489, 5.21343], [14.57083, 5.23979], [14.52724, 5.28319], [14.62531, 5.51411], [14.58951, 5.59777], [14.62375, 5.70466], [14.60974, 5.91838], [14.49455, 5.91683], [14.42917, 6.00508], [14.43073, 6.08867], [14.56149, 6.18928], [14.74206, 6.26356], [14.80122, 6.34866], [14.79966, 6.39043], [14.96311, 6.75693], [15.04717, 6.77085], [15.23397, 7.25135], [15.49743, 7.52179], [15.56964, 7.58936], [15.59272, 7.7696], [15.50743, 7.79302], [15.20426, 8.50892], [15.09484, 8.65982], [14.83566, 8.80557], [14.35707, 9.19611], [14.37094, 9.2954], [13.97544, 9.6365], [14.01793, 9.73169], [14.1317, 9.82413], [14.20411, 10.00055], [14.4673, 10.00264], [14.80082, 9.93818], [14.95722, 9.97926], [15.05999, 9.94845], [15.14043, 9.99246], [15.24618, 9.99246], [15.41408, 9.92876], [15.68761, 9.99344], [15.50535, 10.1098], [15.30874, 10.31063], [15.23724, 10.47764], [15.14936, 10.53915], [15.15532, 10.62846], [15.06737, 10.80921], [15.09127, 10.87431], [15.04957, 11.02347], [15.10021, 11.04101], [15.0585, 11.40481], [15.13149, 11.5537], [15.06595, 11.71126], [15.11579, 11.79313], [15.04808, 11.8731], [15.05786, 12.0608], [15.0349, 12.10698], [15.00146, 12.1223], [14.96952, 12.0925], [14.89019, 12.16593], [14.90827, 12.3269], [14.83314, 12.62963]]]] } },
-    { type: "Feature", properties: { iso1A2: "CN", iso1A3: "CHN", iso1N3: "156", wikidata: "Q148", nameEn: "People's Republic of China" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "CO", iso1A3: "COL", iso1N3: "170", wikidata: "Q739", nameEn: "Colombia", groups: ["005", "419", "019", "UN"], callingCodes: ["57"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.19849, 12.65801], [-81.58685, 18.0025], [-82.06974, 14.49418], [-82.56142, 11.91792], [-78.79327, 9.93766], [-77.58292, 9.22278], [-77.32389, 8.81247], [-77.45064, 8.49991], [-77.17257, 7.97422], [-77.57185, 7.51147], [-77.72514, 7.72348], [-77.72157, 7.47612], [-77.81426, 7.48319], [-77.89178, 7.22681], [-78.06168, 7.07793], [-82.12561, 4.00341], [-78.87137, 1.47457], [-78.42749, 1.15389], [-77.85677, 0.80197], [-77.7148, 0.85003], [-77.68613, 0.83029], [-77.66416, 0.81604], [-77.67815, 0.73863], [-77.49984, 0.64476], [-77.52001, 0.40782], [-76.89177, 0.24736], [-76.4094, 0.24015], [-76.41215, 0.38228], [-76.23441, 0.42294], [-75.82927, 0.09578], [-75.25764, -0.11943], [-75.18513, -0.0308], [-74.42701, -0.50218], [-74.26675, -0.97229], [-73.65312, -1.26222], [-72.92587, -2.44514], [-71.75223, -2.15058], [-70.94377, -2.23142], [-70.04609, -2.73906], [-70.71396, -3.7921], [-70.52393, -3.87553], [-70.3374, -3.79505], [-69.94708, -4.2431], [-69.43395, -1.42219], [-69.4215, -1.01853], [-69.59796, -0.75136], [-69.603, -0.51947], [-70.03658, -0.19681], [-70.04162, 0.55437], [-69.47696, 0.71065], [-69.20976, 0.57958], [-69.14422, 0.84172], [-69.26017, 1.06856], [-69.82987, 1.07864], [-69.83491, 1.69353], [-69.53746, 1.76408], [-69.38621, 1.70865], [-68.18128, 1.72881], [-68.26699, 1.83463], [-68.18632, 2.00091], [-67.9292, 1.82455], [-67.40488, 2.22258], [-67.299, 1.87494], [-67.15784, 1.80439], [-67.08222, 1.17441], [-66.85795, 1.22998], [-67.21967, 2.35778], [-67.65696, 2.81691], [-67.85862, 2.79173], [-67.85862, 2.86727], [-67.30945, 3.38393], [-67.50067, 3.75812], [-67.62671, 3.74303], [-67.85358, 4.53249], [-67.83341, 5.31104], [-67.59141, 5.5369], [-67.63914, 5.64963], [-67.58558, 5.84537], [-67.43513, 5.98835], [-67.4625, 6.20625], [-67.60654, 6.2891], [-69.41843, 6.1072], [-70.10716, 6.96516], [-70.7596, 7.09799], [-71.03941, 6.98163], [-71.37234, 7.01588], [-71.42212, 7.03854], [-71.44118, 7.02116], [-71.82441, 7.04314], [-72.04895, 7.03837], [-72.19437, 7.37034], [-72.43132, 7.40034], [-72.47415, 7.48928], [-72.45321, 7.57232], [-72.47827, 7.65604], [-72.46763, 7.79518], [-72.44454, 7.86031], [-72.46183, 7.90682], [-72.45806, 7.91141], [-72.47042, 7.92306], [-72.48183, 7.92909], [-72.48801, 7.94329], [-72.47213, 7.96106], [-72.39137, 8.03534], [-72.35163, 8.01163], [-72.36987, 8.19976], [-72.4042, 8.36513], [-72.65474, 8.61428], [-72.77415, 9.10165], [-72.94052, 9.10663], [-73.02119, 9.27584], [-73.36905, 9.16636], [-72.98085, 9.85253], [-72.88002, 10.44309], [-72.4767, 11.1117], [-72.24983, 11.14138], [-71.9675, 11.65536], [-71.3275, 11.85], [-70.92579, 11.96275], [-71.19849, 12.65801]]]] } },
-    { type: "Feature", properties: { iso1A2: "CP", iso1A3: "CPT", wikidata: "Q161258", nameEn: "Clipperton Island", country: "FR", groups: ["EU", "013", "003", "019", "UN"], isoStatus: "excRes" }, geometry: { type: "MultiPolygon", coordinates: [[[[-110.36279, 9.79626], [-108.755, 9.84085], [-109.04145, 11.13245], [-110.36279, 9.79626]]]] } },
-    { type: "Feature", properties: { iso1A2: "CQ", iso1A3: "CRQ", iso1N3: "680", m49: "680", wikidata: "Q3405693", ccTLD: null, nameEn: "Sark", country: "GB", groups: ["GG", "830", "Q185086", "154", "150", "UN"], level: "subterritory", isoStatus: "excRes", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01481"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.36485, 49.48223], [-2.65349, 49.15373], [-2.09454, 49.46288], [-2.36485, 49.48223]]]] } },
-    { type: "Feature", properties: { iso1A2: "CR", iso1A3: "CRI", iso1N3: "188", wikidata: "Q800", nameEn: "Costa Rica", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["506"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-83.68276, 11.01562], [-83.66597, 10.79916], [-83.90838, 10.71161], [-84.68197, 11.07568], [-84.92439, 10.9497], [-85.60529, 11.22607], [-85.71223, 11.06868], [-86.14524, 11.09059], [-87.41779, 5.02401], [-82.94503, 7.93865], [-82.89978, 8.04083], [-82.89137, 8.05755], [-82.88641, 8.10219], [-82.9388, 8.26634], [-83.05209, 8.33394], [-82.93056, 8.43465], [-82.8679, 8.44042], [-82.8382, 8.48117], [-82.83322, 8.52464], [-82.83975, 8.54755], [-82.82739, 8.60153], [-82.8794, 8.6981], [-82.92068, 8.74832], [-82.91377, 8.774], [-82.88253, 8.83331], [-82.72126, 8.97125], [-82.93516, 9.07687], [-82.93516, 9.46741], [-82.84871, 9.4973], [-82.87919, 9.62645], [-82.77206, 9.59573], [-82.66667, 9.49746], [-82.61345, 9.49881], [-82.56507, 9.57279], [-82.51044, 9.65379], [-83.54024, 10.96805], [-83.68276, 11.01562]]]] } },
-    { type: "Feature", properties: { iso1A2: "CU", iso1A3: "CUB", iso1N3: "192", wikidata: "Q241", nameEn: "Cuba", groups: ["029", "003", "419", "019", "UN"], callingCodes: ["53"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-73.62304, 20.6935], [-82.02215, 24.23074], [-85.77883, 21.92705], [-74.81171, 18.82201], [-73.62304, 20.6935]]]] } },
-    { type: "Feature", properties: { iso1A2: "CV", iso1A3: "CPV", iso1N3: "132", wikidata: "Q1011", nameEn: "Cape Verde", groups: ["Q105472", "011", "202", "002", "UN"], callingCodes: ["238"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-28.81604, 14.57305], [-20.39702, 14.12816], [-23.37101, 19.134], [-28.81604, 14.57305]]]] } },
-    { type: "Feature", properties: { iso1A2: "CW", iso1A3: "CUW", iso1N3: "531", wikidata: "Q25279", nameEn: "Cura\xE7ao", aliases: ["NL-CW"], country: "NL", groups: ["Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["599"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-68.90012, 12.62309], [-69.59009, 12.46019], [-68.99639, 11.79035], [-68.33524, 11.78151], [-68.90012, 12.62309]]]] } },
-    { type: "Feature", properties: { iso1A2: "CX", iso1A3: "CXR", iso1N3: "162", wikidata: "Q31063", nameEn: "Christmas Island", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[105.66835, -9.31927], [104.67494, -11.2566], [106.66176, -11.14349], [105.66835, -9.31927]]]] } },
-    { type: "Feature", properties: { iso1A2: "CY", iso1A3: "CYP", iso1N3: "196", wikidata: "Q229", nameEn: "Republic of Cyprus", groups: ["Q644636", "EU", "145", "142", "UN"], driveSide: "left", callingCodes: ["357"] }, geometry: { type: "MultiPolygon", coordinates: [[[[32.46489, 35.48584], [30.15137, 34.08517], [32.74412, 34.43926], [32.75515, 34.64985], [32.76136, 34.68318], [32.79433, 34.67883], [32.82717, 34.70622], [32.86014, 34.70585], [32.86167, 34.68734], [32.9068, 34.66102], [32.91398, 34.67343], [32.93043, 34.67091], [32.92807, 34.66736], [32.93449, 34.66241], [32.93693, 34.67027], [32.94379, 34.67111], [32.94683, 34.67907], [32.95539, 34.68471], [32.99135, 34.68061], [32.98668, 34.67268], [32.99014, 34.65518], [32.97736, 34.65277], [32.97079, 34.66112], [32.95325, 34.66462], [32.94796, 34.6587], [32.94976, 34.65204], [32.95471, 34.64528], [32.95323, 34.64075], [32.95891, 34.62919], [32.96718, 34.63446], [32.96968, 34.64046], [33.0138, 34.64424], [33.26744, 34.49942], [33.83531, 34.73974], [33.70575, 34.97947], [33.70639, 34.99303], [33.71514, 35.00294], [33.69731, 35.01754], [33.69938, 35.03123], [33.67678, 35.03866], [33.63765, 35.03869], [33.61215, 35.0527], [33.59658, 35.03635], [33.567, 35.04803], [33.57478, 35.06049], [33.53975, 35.08151], [33.48915, 35.06594], [33.47666, 35.00701], [33.45256, 35.00288], [33.45178, 35.02078], [33.47825, 35.04103], [33.48136, 35.0636], [33.46813, 35.10564], [33.41675, 35.16325], [33.4076, 35.20062], [33.38575, 35.2018], [33.37248, 35.18698], [33.3717, 35.1788], [33.36569, 35.17479], [33.35612, 35.17402], [33.35596, 35.17942], [33.34964, 35.17803], [33.35056, 35.18328], [33.31955, 35.18096], [33.3072, 35.16816], [33.27068, 35.16815], [33.15138, 35.19504], [33.11105, 35.15639], [33.08249, 35.17319], [33.01192, 35.15639], [32.94471, 35.09422], [32.86406, 35.1043], [32.85733, 35.07742], [32.70779, 35.14127], [32.70947, 35.18328], [32.64864, 35.19967], [32.60361, 35.16647], [32.46489, 35.48584]]], [[[33.74144, 35.01053], [33.7492, 35.01319], [33.74983, 35.02274], [33.74265, 35.02329], [33.73781, 35.02181], [33.7343, 35.01178], [33.74144, 35.01053]]], [[[33.77312, 34.9976], [33.75994, 35.00113], [33.75682, 34.99916], [33.76605, 34.99543], [33.76738, 34.99188], [33.7778, 34.98981], [33.77843, 34.988], [33.78149, 34.98854], [33.78318, 34.98699], [33.78571, 34.98951], [33.78917, 34.98854], [33.79191, 34.98914], [33.78516, 34.99582], [33.77553, 34.99518], [33.77312, 34.9976]]]] } },
-    { type: "Feature", properties: { iso1A2: "CZ", iso1A3: "CZE", iso1N3: "203", wikidata: "Q213", nameEn: "Czechia", groups: ["EU", "151", "150", "UN"], callingCodes: ["420"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.82803, 50.86966], [14.79139, 50.81438], [14.70661, 50.84096], [14.61993, 50.86049], [14.63434, 50.8883], [14.65259, 50.90513], [14.64802, 50.93241], [14.58024, 50.91443], [14.56374, 50.922], [14.59702, 50.96148], [14.59908, 50.98685], [14.58215, 50.99306], [14.56432, 51.01008], [14.53438, 51.00374], [14.53321, 51.01679], [14.49873, 51.02242], [14.50809, 51.0427], [14.49991, 51.04692], [14.49154, 51.04382], [14.49202, 51.02286], [14.45827, 51.03712], [14.41335, 51.02086], [14.30098, 51.05515], [14.25665, 50.98935], [14.28776, 50.97718], [14.32353, 50.98556], [14.32793, 50.97379], [14.30251, 50.96606], [14.31422, 50.95243], [14.39848, 50.93866], [14.38691, 50.89907], [14.30098, 50.88448], [14.27123, 50.89386], [14.24314, 50.88761], [14.22331, 50.86049], [14.02982, 50.80662], [13.98864, 50.8177], [13.89113, 50.78533], [13.89444, 50.74142], [13.82942, 50.7251], [13.76316, 50.73487], [13.70204, 50.71771], [13.65977, 50.73096], [13.52474, 50.70394], [13.53748, 50.67654], [13.5226, 50.64721], [13.49742, 50.63133], [13.46413, 50.60102], [13.42189, 50.61243], [13.37485, 50.64931], [13.37805, 50.627], [13.32264, 50.60317], [13.32594, 50.58009], [13.29454, 50.57904], [13.25158, 50.59268], [13.19043, 50.50237], [13.13424, 50.51709], [13.08301, 50.50132], [13.0312, 50.50944], [13.02038, 50.4734], [13.02147, 50.44763], [12.98433, 50.42016], [12.94058, 50.40944], [12.82465, 50.45738], [12.73476, 50.43237], [12.73044, 50.42268], [12.70731, 50.39948], [12.67261, 50.41949], [12.51356, 50.39694], [12.48747, 50.37278], [12.49214, 50.35228], [12.48256, 50.34784], [12.46643, 50.35527], [12.43722, 50.33774], [12.43371, 50.32506], [12.39924, 50.32302], [12.40158, 50.29521], [12.36594, 50.28289], [12.35425, 50.23993], [12.33263, 50.24367], [12.32445, 50.20442], [12.33847, 50.19432], [12.32596, 50.17146], [12.29232, 50.17524], [12.28063, 50.19544], [12.28755, 50.22429], [12.23943, 50.24594], [12.24791, 50.25525], [12.26953, 50.25189], [12.25119, 50.27079], [12.20823, 50.2729], [12.18013, 50.32146], [12.10907, 50.32041], [12.13716, 50.27396], [12.09287, 50.25032], [12.19335, 50.19997], [12.21484, 50.16399], [12.1917, 50.13434], [12.2073, 50.10315], [12.23709, 50.10213], [12.27433, 50.0771], [12.26111, 50.06331], [12.30798, 50.05719], [12.49908, 49.97305], [12.47264, 49.94222], [12.55197, 49.92094], [12.48256, 49.83575], [12.46603, 49.78882], [12.40489, 49.76321], [12.4462, 49.70233], [12.52553, 49.68415], [12.53544, 49.61888], [12.56188, 49.6146], [12.60155, 49.52887], [12.64782, 49.52565], [12.64121, 49.47628], [12.669, 49.42935], [12.71227, 49.42363], [12.75854, 49.3989], [12.78168, 49.34618], [12.88414, 49.33541], [12.88249, 49.35479], [12.94859, 49.34079], [13.03618, 49.30417], [13.02957, 49.27399], [13.05883, 49.26259], [13.17665, 49.16713], [13.17019, 49.14339], [13.20405, 49.12303], [13.23689, 49.11412], [13.28242, 49.1228], [13.39479, 49.04812], [13.40802, 48.98851], [13.50221, 48.93752], [13.50552, 48.97441], [13.58319, 48.96899], [13.61624, 48.9462], [13.67739, 48.87886], [13.73854, 48.88538], [13.76994, 48.83537], [13.78977, 48.83319], [13.8096, 48.77877], [13.84023, 48.76988], [14.06151, 48.66873], [14.01482, 48.63788], [14.09104, 48.5943], [14.20691, 48.5898], [14.33909, 48.55852], [14.43076, 48.58855], [14.4587, 48.64695], [14.56139, 48.60429], [14.60808, 48.62881], [14.66762, 48.58215], [14.71794, 48.59794], [14.72756, 48.69502], [14.80584, 48.73489], [14.80821, 48.77711], [14.81545, 48.7874], [14.94773, 48.76268], [14.95641, 48.75915], [14.9758, 48.76857], [14.98112, 48.77524], [14.9782, 48.7766], [14.98032, 48.77959], [14.95072, 48.79101], [14.98917, 48.90082], [14.97612, 48.96983], [14.99878, 49.01444], [15.15534, 48.99056], [15.16358, 48.94278], [15.26177, 48.95766], [15.28305, 48.98831], [15.34823, 48.98444], [15.48027, 48.94481], [15.51357, 48.91549], [15.61622, 48.89541], [15.6921, 48.85973], [15.75341, 48.8516], [15.78087, 48.87644], [15.84404, 48.86921], [16.06034, 48.75436], [16.37345, 48.729], [16.40915, 48.74576], [16.46134, 48.80865], [16.67008, 48.77699], [16.68518, 48.7281], [16.71883, 48.73806], [16.79779, 48.70998], [16.90354, 48.71541], [16.93955, 48.60371], [17.00215, 48.70887], [17.11202, 48.82925], [17.19355, 48.87602], [17.29054, 48.85546], [17.3853, 48.80936], [17.45671, 48.85004], [17.5295, 48.81117], [17.7094, 48.86721], [17.73126, 48.87885], [17.77944, 48.92318], [17.87831, 48.92679], [17.91814, 49.01784], [18.06885, 49.03157], [18.1104, 49.08624], [18.15022, 49.24518], [18.18456, 49.28909], [18.36446, 49.3267], [18.4139, 49.36517], [18.4084, 49.40003], [18.44686, 49.39467], [18.54848, 49.47059], [18.53063, 49.49022], [18.57183, 49.51162], [18.6144, 49.49824], [18.67757, 49.50895], [18.74761, 49.492], [18.84521, 49.51672], [18.84786, 49.5446], [18.80479, 49.6815], [18.72838, 49.68163], [18.69817, 49.70473], [18.62676, 49.71983], [18.62943, 49.74603], [18.62645, 49.75002], [18.61368, 49.75426], [18.61278, 49.7618], [18.57183, 49.83334], [18.60341, 49.86256], [18.57045, 49.87849], [18.57697, 49.91565], [18.54299, 49.92537], [18.54495, 49.9079], [18.53423, 49.89906], [18.41604, 49.93498], [18.33562, 49.94747], [18.33278, 49.92415], [18.31914, 49.91565], [18.27794, 49.93863], [18.27107, 49.96779], [18.21752, 49.97309], [18.20241, 49.99958], [18.10628, 50.00223], [18.07898, 50.04535], [18.03212, 50.06574], [18.00396, 50.04954], [18.04585, 50.03311], [18.04585, 50.01194], [18.00191, 50.01723], [17.86886, 49.97452], [17.77669, 50.02253], [17.7506, 50.07896], [17.6888, 50.12037], [17.66683, 50.10275], [17.59404, 50.16437], [17.70528, 50.18812], [17.76296, 50.23382], [17.72176, 50.25665], [17.74648, 50.29966], [17.69292, 50.32859], [17.67764, 50.28977], [17.58889, 50.27837], [17.3702, 50.28123], [17.34548, 50.2628], [17.34273, 50.32947], [17.27681, 50.32246], [17.19991, 50.3654], [17.19579, 50.38817], [17.14498, 50.38117], [17.1224, 50.39494], [16.89229, 50.45117], [16.85933, 50.41093], [16.90877, 50.38642], [16.94448, 50.31281], [16.99803, 50.30316], [17.02138, 50.27772], [16.99803, 50.25753], [17.02825, 50.23118], [17.00353, 50.21449], [16.98018, 50.24172], [16.8456, 50.20834], [16.7014, 50.09659], [16.63137, 50.1142], [16.55446, 50.16613], [16.56407, 50.21009], [16.42674, 50.32509], [16.39379, 50.3207], [16.3622, 50.34875], [16.36495, 50.37679], [16.30289, 50.38292], [16.28118, 50.36891], [16.22821, 50.41054], [16.21585, 50.40627], [16.19526, 50.43291], [16.31413, 50.50274], [16.34572, 50.49575], [16.44597, 50.58041], [16.33611, 50.66579], [16.23174, 50.67101], [16.20839, 50.63096], [16.10265, 50.66405], [16.02437, 50.60046], [15.98317, 50.61528], [16.0175, 50.63009], [15.97219, 50.69799], [15.87331, 50.67188], [15.81683, 50.75666], [15.73186, 50.73885], [15.43798, 50.80833], [15.3803, 50.77187], [15.36656, 50.83956], [15.2773, 50.8907], [15.27043, 50.97724], [15.2361, 50.99886], [15.1743, 50.9833], [15.16744, 51.01959], [15.11937, 50.99021], [15.10152, 51.01095], [15.06218, 51.02269], [15.03895, 51.0123], [15.02433, 51.0242], [14.96419, 50.99108], [15.01088, 50.97984], [14.99852, 50.86817], [14.82803, 50.86966]]]] } },
-    { type: "Feature", properties: { iso1A2: "DE", iso1A3: "DEU", iso1N3: "276", wikidata: "Q183", nameEn: "Germany", groups: ["EU", "155", "150", "UN"], callingCodes: ["49"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.70847, 47.68904], [8.71773, 47.69088], [8.70237, 47.71453], [8.66416, 47.71367], [8.67508, 47.6979], [8.65769, 47.68928], [8.66837, 47.68437], [8.68985, 47.69552], [8.70847, 47.68904]]], [[[8.72617, 47.69651], [8.72809, 47.69282], [8.75856, 47.68969], [8.79511, 47.67462], [8.79966, 47.70222], [8.76965, 47.7075], [8.77309, 47.72059], [8.80663, 47.73821], [8.82002, 47.71458], [8.86989, 47.70504], [8.85065, 47.68209], [8.87383, 47.67045], [8.87625, 47.65441], [8.89946, 47.64769], [8.94093, 47.65596], [9.02093, 47.6868], [9.09891, 47.67801], [9.13845, 47.66389], [9.15181, 47.66904], [9.1705, 47.65513], [9.1755, 47.65584], [9.17593, 47.65399], [9.18203, 47.65598], [9.25619, 47.65939], [9.55125, 47.53629], [9.72736, 47.53457], [9.76748, 47.5934], [9.80254, 47.59419], [9.82591, 47.58158], [9.8189, 47.54688], [9.87499, 47.52953], [9.87733, 47.54688], [9.92407, 47.53111], [9.96029, 47.53899], [10.00003, 47.48216], [10.03859, 47.48927], [10.07131, 47.45531], [10.09001, 47.46005], [10.1052, 47.4316], [10.06897, 47.40709], [10.09819, 47.35724], [10.11805, 47.37228], [10.16362, 47.36674], [10.17648, 47.38889], [10.2127, 47.38019], [10.22774, 47.38904], [10.23757, 47.37609], [10.19998, 47.32832], [10.2147, 47.31014], [10.17648, 47.29149], [10.17531, 47.27167], [10.23257, 47.27088], [10.33424, 47.30813], [10.39851, 47.37623], [10.4324, 47.38494], [10.4359, 47.41183], [10.47446, 47.43318], [10.46278, 47.47901], [10.44291, 47.48453], [10.4324, 47.50111], [10.44992, 47.5524], [10.43473, 47.58394], [10.47329, 47.58552], [10.48849, 47.54057], [10.56912, 47.53584], [10.60337, 47.56755], [10.63456, 47.5591], [10.68832, 47.55752], [10.6965, 47.54253], [10.7596, 47.53228], [10.77596, 47.51729], [10.88814, 47.53701], [10.91268, 47.51334], [10.86945, 47.5015], [10.87061, 47.4786], [10.90918, 47.48571], [10.93839, 47.48018], [10.92437, 47.46991], [10.98513, 47.42882], [10.97111, 47.41617], [10.97111, 47.39561], [11.11835, 47.39719], [11.12536, 47.41222], [11.20482, 47.43198], [11.25157, 47.43277], [11.22002, 47.3964], [11.27844, 47.39956], [11.29597, 47.42566], [11.33804, 47.44937], [11.4175, 47.44621], [11.38128, 47.47465], [11.4362, 47.51413], [11.52618, 47.50939], [11.58578, 47.52281], [11.58811, 47.55515], [11.60681, 47.57881], [11.63934, 47.59202], [11.84052, 47.58354], [11.85572, 47.60166], [12.0088, 47.62451], [12.02282, 47.61033], [12.05788, 47.61742], [12.13734, 47.60639], [12.17824, 47.61506], [12.18145, 47.61019], [12.17737, 47.60121], [12.18568, 47.6049], [12.20398, 47.60667], [12.20801, 47.61082], [12.19895, 47.64085], [12.18507, 47.65984], [12.18347, 47.66663], [12.16769, 47.68167], [12.16217, 47.70105], [12.18303, 47.70065], [12.22571, 47.71776], [12.2542, 47.7433], [12.26238, 47.73544], [12.24017, 47.69534], [12.26004, 47.67725], [12.27991, 47.68827], [12.336, 47.69534], [12.37222, 47.68433], [12.43883, 47.6977], [12.44117, 47.6741], [12.50076, 47.62293], [12.53816, 47.63553], [12.57438, 47.63238], [12.6071, 47.6741], [12.7357, 47.6787], [12.77777, 47.66689], [12.76492, 47.64485], [12.82101, 47.61493], [12.77427, 47.58025], [12.80699, 47.54477], [12.84672, 47.54556], [12.85256, 47.52741], [12.9624, 47.47452], [12.98344, 47.48716], [12.9998, 47.46267], [13.04537, 47.49426], [13.03252, 47.53373], [13.05355, 47.56291], [13.04537, 47.58183], [13.06641, 47.58577], [13.06407, 47.60075], [13.09562, 47.63304], [13.07692, 47.68814], [13.01382, 47.72116], [12.98578, 47.7078], [12.92969, 47.71094], [12.91333, 47.7178], [12.90274, 47.72513], [12.91711, 47.74026], [12.9353, 47.74788], [12.94371, 47.76281], [12.93202, 47.77302], [12.96311, 47.79957], [12.98543, 47.82896], [13.00588, 47.84374], [12.94163, 47.92927], [12.93886, 47.94046], [12.93642, 47.94436], [12.93419, 47.94063], [12.92668, 47.93879], [12.91985, 47.94069], [12.9211, 47.95135], [12.91683, 47.95647], [12.87476, 47.96195], [12.8549, 48.01122], [12.76141, 48.07373], [12.74973, 48.10885], [12.7617, 48.12796], [12.78595, 48.12445], [12.80676, 48.14979], [12.82673, 48.15245], [12.8362, 48.15876], [12.836, 48.1647], [12.84475, 48.16556], [12.87126, 48.20318], [12.95306, 48.20629], [13.02083, 48.25689], [13.0851, 48.27711], [13.126, 48.27867], [13.18093, 48.29577], [13.26039, 48.29422], [13.30897, 48.31575], [13.40709, 48.37292], [13.43929, 48.43386], [13.42527, 48.45711], [13.45727, 48.51092], [13.43695, 48.55776], [13.45214, 48.56472], [13.46967, 48.55157], [13.50663, 48.57506], [13.50131, 48.58091], [13.51291, 48.59023], [13.57535, 48.55912], [13.59705, 48.57013], [13.62508, 48.55501], [13.65186, 48.55092], [13.66113, 48.53558], [13.72802, 48.51208], [13.74816, 48.53058], [13.7513, 48.5624], [13.76921, 48.55324], [13.80519, 48.58026], [13.80038, 48.59487], [13.82609, 48.62345], [13.81901, 48.6761], [13.81283, 48.68426], [13.81791, 48.69832], [13.79337, 48.71375], [13.81863, 48.73257], [13.82266, 48.75544], [13.84023, 48.76988], [13.8096, 48.77877], [13.78977, 48.83319], [13.76994, 48.83537], [13.73854, 48.88538], [13.67739, 48.87886], [13.61624, 48.9462], [13.58319, 48.96899], [13.50552, 48.97441], [13.50221, 48.93752], [13.40802, 48.98851], [13.39479, 49.04812], [13.28242, 49.1228], [13.23689, 49.11412], [13.20405, 49.12303], [13.17019, 49.14339], [13.17665, 49.16713], [13.05883, 49.26259], [13.02957, 49.27399], [13.03618, 49.30417], [12.94859, 49.34079], [12.88249, 49.35479], [12.88414, 49.33541], [12.78168, 49.34618], [12.75854, 49.3989], [12.71227, 49.42363], [12.669, 49.42935], [12.64121, 49.47628], [12.64782, 49.52565], [12.60155, 49.52887], [12.56188, 49.6146], [12.53544, 49.61888], [12.52553, 49.68415], [12.4462, 49.70233], [12.40489, 49.76321], [12.46603, 49.78882], [12.48256, 49.83575], [12.55197, 49.92094], [12.47264, 49.94222], [12.49908, 49.97305], [12.30798, 50.05719], [12.26111, 50.06331], [12.27433, 50.0771], [12.23709, 50.10213], [12.2073, 50.10315], [12.1917, 50.13434], [12.21484, 50.16399], [12.19335, 50.19997], [12.09287, 50.25032], [12.13716, 50.27396], [12.10907, 50.32041], [12.18013, 50.32146], [12.20823, 50.2729], [12.25119, 50.27079], [12.26953, 50.25189], [12.24791, 50.25525], [12.23943, 50.24594], [12.28755, 50.22429], [12.28063, 50.19544], [12.29232, 50.17524], [12.32596, 50.17146], [12.33847, 50.19432], [12.32445, 50.20442], [12.33263, 50.24367], [12.35425, 50.23993], [12.36594, 50.28289], [12.40158, 50.29521], [12.39924, 50.32302], [12.43371, 50.32506], [12.43722, 50.33774], [12.46643, 50.35527], [12.48256, 50.34784], [12.49214, 50.35228], [12.48747, 50.37278], [12.51356, 50.39694], [12.67261, 50.41949], [12.70731, 50.39948], [12.73044, 50.42268], [12.73476, 50.43237], [12.82465, 50.45738], [12.94058, 50.40944], [12.98433, 50.42016], [13.02147, 50.44763], [13.02038, 50.4734], [13.0312, 50.50944], [13.08301, 50.50132], [13.13424, 50.51709], [13.19043, 50.50237], [13.25158, 50.59268], [13.29454, 50.57904], [13.32594, 50.58009], [13.32264, 50.60317], [13.37805, 50.627], [13.37485, 50.64931], [13.42189, 50.61243], [13.46413, 50.60102], [13.49742, 50.63133], [13.5226, 50.64721], [13.53748, 50.67654], [13.52474, 50.70394], [13.65977, 50.73096], [13.70204, 50.71771], [13.76316, 50.73487], [13.82942, 50.7251], [13.89444, 50.74142], [13.89113, 50.78533], [13.98864, 50.8177], [14.02982, 50.80662], [14.22331, 50.86049], [14.24314, 50.88761], [14.27123, 50.89386], [14.30098, 50.88448], [14.38691, 50.89907], [14.39848, 50.93866], [14.31422, 50.95243], [14.30251, 50.96606], [14.32793, 50.97379], [14.32353, 50.98556], [14.28776, 50.97718], [14.25665, 50.98935], [14.30098, 51.05515], [14.41335, 51.02086], [14.45827, 51.03712], [14.49202, 51.02286], [14.49154, 51.04382], [14.49991, 51.04692], [14.50809, 51.0427], [14.49873, 51.02242], [14.53321, 51.01679], [14.53438, 51.00374], [14.56432, 51.01008], [14.58215, 50.99306], [14.59908, 50.98685], [14.59702, 50.96148], [14.56374, 50.922], [14.58024, 50.91443], [14.64802, 50.93241], [14.65259, 50.90513], [14.63434, 50.8883], [14.61993, 50.86049], [14.70661, 50.84096], [14.79139, 50.81438], [14.82803, 50.86966], [14.81664, 50.88148], [14.89681, 50.9422], [14.89252, 50.94999], [14.92942, 50.99744], [14.95529, 51.04552], [14.97938, 51.07742], [14.98229, 51.11354], [14.99689, 51.12205], [14.99079, 51.14284], [14.99646, 51.14365], [15.00083, 51.14974], [14.99414, 51.15813], [14.99311, 51.16249], [15.0047, 51.16874], [15.01242, 51.21285], [15.04288, 51.28387], [14.98008, 51.33449], [14.96899, 51.38367], [14.9652, 51.44793], [14.94749, 51.47155], [14.73219, 51.52922], [14.72652, 51.53902], [14.73047, 51.54606], [14.71125, 51.56209], [14.7727, 51.61263], [14.75759, 51.62318], [14.75392, 51.67445], [14.69065, 51.70842], [14.66386, 51.73282], [14.64625, 51.79472], [14.60493, 51.80473], [14.59089, 51.83302], [14.6588, 51.88359], [14.6933, 51.9044], [14.70601, 51.92944], [14.7177, 51.94048], [14.72163, 51.95188], [14.71836, 51.95606], [14.7139, 51.95643], [14.70488, 51.97679], [14.71339, 52.00337], [14.76026, 52.06624], [14.72971, 52.09167], [14.6917, 52.10283], [14.67683, 52.13936], [14.70616, 52.16927], [14.68344, 52.19612], [14.71319, 52.22144], [14.70139, 52.25038], [14.58149, 52.28007], [14.56378, 52.33838], [14.55228, 52.35264], [14.54423, 52.42568], [14.63056, 52.48993], [14.60081, 52.53116], [14.6289, 52.57136], [14.61073, 52.59847], [14.22071, 52.81175], [14.13806, 52.82392], [14.12256, 52.84311], [14.15873, 52.87715], [14.14056, 52.95786], [14.25954, 53.00264], [14.35044, 53.05829], [14.38679, 53.13669], [14.36696, 53.16444], [14.37853, 53.20405], [14.40662, 53.21098], [14.45125, 53.26241], [14.44133, 53.27427], [14.4215, 53.27724], [14.35209, 53.49506], [14.3273, 53.50587], [14.30416, 53.55499], [14.31904, 53.61581], [14.2853, 53.63392], [14.28477, 53.65955], [14.27133, 53.66613], [14.2836, 53.67721], [14.26782, 53.69866], [14.27249, 53.74464], [14.21323, 53.8664], [14.20823, 53.90776], [14.18544, 53.91258], [14.20647, 53.91671], [14.22634, 53.9291], [14.20811, 54.12784], [13.93395, 54.84044], [12.85844, 54.82438], [11.90309, 54.38543], [11.00303, 54.63689], [10.31111, 54.65968], [10.16755, 54.73883], [9.89314, 54.84171], [9.73563, 54.8247], [9.61187, 54.85548], [9.62734, 54.88057], [9.58937, 54.88785], [9.4659, 54.83131], [9.43155, 54.82586], [9.41213, 54.84254], [9.38532, 54.83968], [9.36496, 54.81749], [9.33849, 54.80233], [9.32771, 54.80602], [9.2474, 54.8112], [9.23445, 54.83432], [9.24631, 54.84726], [9.20571, 54.85841], [9.14275, 54.87421], [9.04629, 54.87249], [8.92795, 54.90452], [8.81178, 54.90518], [8.76387, 54.8948], [8.63979, 54.91069], [8.55769, 54.91837], [8.45719, 55.06747], [8.02459, 55.09613], [5.45168, 54.20039], [6.91025, 53.44221], [7.00198, 53.32672], [7.19052, 53.31866], [7.21679, 53.20058], [7.22681, 53.18165], [7.17898, 53.13817], [7.21694, 53.00742], [7.07253, 52.81083], [7.04557, 52.63318], [6.77307, 52.65375], [6.71641, 52.62905], [6.69507, 52.488], [6.94293, 52.43597], [6.99041, 52.47235], [7.03417, 52.40237], [7.07044, 52.37805], [7.02703, 52.27941], [7.06365, 52.23789], [7.03729, 52.22695], [6.9897, 52.2271], [6.97189, 52.20329], [6.83984, 52.11728], [6.76117, 52.11895], [6.68128, 52.05052], [6.83035, 51.9905], [6.82357, 51.96711], [6.72319, 51.89518], [6.68386, 51.91861], [6.58556, 51.89386], [6.50231, 51.86313], [6.47179, 51.85395], [6.38815, 51.87257], [6.40704, 51.82771], [6.30593, 51.84998], [6.29872, 51.86801], [6.21443, 51.86801], [6.15349, 51.90439], [6.11551, 51.89769], [6.16902, 51.84094], [6.10337, 51.84829], [6.06705, 51.86136], [5.99848, 51.83195], [5.94568, 51.82786], [5.98665, 51.76944], [5.95003, 51.7493], [6.04091, 51.71821], [6.02767, 51.6742], [6.11759, 51.65609], [6.09055, 51.60564], [6.18017, 51.54096], [6.21724, 51.48568], [6.20654, 51.40049], [6.22641, 51.39948], [6.22674, 51.36135], [6.16977, 51.33169], [6.07889, 51.24432], [6.07889, 51.17038], [6.17384, 51.19589], [6.16706, 51.15677], [5.98292, 51.07469], [5.9541, 51.03496], [5.9134, 51.06736], [5.86735, 51.05182], [5.87849, 51.01969], [5.90493, 51.00198], [5.90296, 50.97356], [5.95282, 50.98728], [6.02697, 50.98303], [6.01615, 50.93367], [6.09297, 50.92066], [6.07486, 50.89307], [6.08805, 50.87223], [6.07693, 50.86025], [6.07431, 50.84674], [6.05702, 50.85179], [6.05623, 50.8572], [6.01921, 50.84435], [6.02328, 50.81694], [6.00462, 50.80065], [5.98404, 50.80988], [5.97497, 50.79992], [6.02624, 50.77453], [6.01976, 50.75398], [6.03889, 50.74618], [6.0326, 50.72647], [6.0406, 50.71848], [6.04428, 50.72861], [6.11707, 50.72231], [6.17852, 50.6245], [6.26957, 50.62444], [6.2476, 50.60392], [6.24888, 50.59869], [6.24005, 50.58732], [6.22581, 50.5907], [6.20281, 50.56952], [6.17739, 50.55875], [6.17802, 50.54179], [6.19735, 50.53576], [6.19579, 50.5313], [6.18716, 50.52653], [6.19193, 50.5212], [6.20599, 50.52089], [6.22335, 50.49578], [6.26637, 50.50272], [6.30809, 50.50058], [6.3465, 50.48833], [6.34005, 50.46083], [6.37219, 50.45397], [6.36852, 50.40776], [6.34406, 50.37994], [6.3688, 50.35898], [6.40785, 50.33557], [6.40641, 50.32425], [6.35701, 50.31139], [6.32488, 50.32333], [6.29949, 50.30887], [6.28797, 50.27458], [6.208, 50.25179], [6.16853, 50.2234], [6.18364, 50.20815], [6.18739, 50.1822], [6.14588, 50.17106], [6.14132, 50.14971], [6.15298, 50.14126], [6.1379, 50.12964], [6.12055, 50.09171], [6.11274, 50.05916], [6.13458, 50.04141], [6.13044, 50.02929], [6.14666, 50.02207], [6.13794, 50.01466], [6.13273, 50.02019], [6.1295, 50.01849], [6.13806, 50.01056], [6.14948, 50.00908], [6.14147, 49.99563], [6.1701, 49.98518], [6.16466, 49.97086], [6.17872, 49.9537], [6.18554, 49.95622], [6.18045, 49.96611], [6.19089, 49.96991], [6.19856, 49.95053], [6.22094, 49.94955], [6.22608, 49.929], [6.21882, 49.92403], [6.22926, 49.92096], [6.23496, 49.89972], [6.26146, 49.88203], [6.28874, 49.87592], [6.29692, 49.86685], [6.30963, 49.87021], [6.32303, 49.85133], [6.32098, 49.83728], [6.33585, 49.83785], [6.34267, 49.84974], [6.36576, 49.85032], [6.40022, 49.82029], [6.42521, 49.81591], [6.42905, 49.81091], [6.44131, 49.81443], [6.45425, 49.81164], [6.47111, 49.82263], [6.48718, 49.81267], [6.50647, 49.80916], [6.51215, 49.80124], [6.52121, 49.81338], [6.53122, 49.80666], [6.52169, 49.79787], [6.50534, 49.78952], [6.51669, 49.78336], [6.51056, 49.77515], [6.51828, 49.76855], [6.51646, 49.75961], [6.50174, 49.75292], [6.50193, 49.73291], [6.51805, 49.72425], [6.51397, 49.72058], [6.50261, 49.72718], [6.49535, 49.72645], [6.49694, 49.72205], [6.5042, 49.71808], [6.50647, 49.71353], [6.49785, 49.71118], [6.48014, 49.69767], [6.46048, 49.69092], [6.44654, 49.67799], [6.42937, 49.66857], [6.42726, 49.66078], [6.43768, 49.66021], [6.4413, 49.65722], [6.41861, 49.61723], [6.39822, 49.60081], [6.385, 49.59946], [6.37464, 49.58886], [6.38342, 49.5799], [6.38024, 49.57593], [6.36676, 49.57813], [6.35825, 49.57053], [6.38228, 49.55855], [6.38072, 49.55171], [6.35666, 49.52931], [6.36788, 49.50377], [6.36907, 49.48931], [6.36778, 49.46937], [6.38352, 49.46463], [6.39168, 49.4667], [6.40274, 49.46546], [6.42432, 49.47683], [6.55404, 49.42464], [6.533, 49.40748], [6.60091, 49.36864], [6.58807, 49.35358], [6.572, 49.35027], [6.60186, 49.31055], [6.66583, 49.28065], [6.69274, 49.21661], [6.71843, 49.2208], [6.73256, 49.20486], [6.71137, 49.18808], [6.73765, 49.16375], [6.78265, 49.16793], [6.83385, 49.15162], [6.84703, 49.15734], [6.86225, 49.18185], [6.85016, 49.19354], [6.85119, 49.20038], [6.83555, 49.21249], [6.85939, 49.22376], [6.89298, 49.20863], [6.91875, 49.22261], [6.93831, 49.2223], [6.94028, 49.21641], [6.95963, 49.203], [6.97273, 49.2099], [7.01318, 49.19018], [7.03459, 49.19096], [7.0274, 49.17042], [7.03178, 49.15734], [7.04662, 49.13724], [7.04409, 49.12123], [7.04843, 49.11422], [7.05548, 49.11185], [7.06642, 49.11415], [7.07162, 49.1255], [7.09007, 49.13094], [7.07859, 49.15031], [7.10715, 49.15631], [7.10384, 49.13787], [7.12504, 49.14253], [7.1358, 49.1282], [7.1593, 49.1204], [7.23473, 49.12971], [7.29514, 49.11426], [7.3195, 49.14231], [7.35995, 49.14399], [7.3662, 49.17308], [7.44052, 49.18354], [7.44455, 49.16765], [7.49473, 49.17], [7.49172, 49.13915], [7.53012, 49.09818], [7.56416, 49.08136], [7.62575, 49.07654], [7.63618, 49.05428], [7.75948, 49.04562], [7.79557, 49.06583], [7.86386, 49.03499], [7.93641, 49.05544], [7.97783, 49.03161], [8.14189, 48.97833], [8.22604, 48.97352], [8.20031, 48.95856], [8.19989, 48.95825], [8.12813, 48.87985], [8.10253, 48.81829], [8.06802, 48.78957], [8.0326, 48.79017], [8.01534, 48.76085], [7.96994, 48.75606], [7.96812, 48.72491], [7.89002, 48.66317], [7.84098, 48.64217], [7.80057, 48.5857], [7.80167, 48.54758], [7.80647, 48.51239], [7.76833, 48.48945], [7.73109, 48.39192], [7.74562, 48.32736], [7.69022, 48.30018], [7.6648, 48.22219], [7.57137, 48.12292], [7.56966, 48.03265], [7.62302, 47.97898], [7.55673, 47.87371], [7.52921, 47.77747], [7.54761, 47.72912], [7.53722, 47.71635], [7.51266, 47.70197], [7.51915, 47.68335], [7.52067, 47.66437], [7.53384, 47.65115], [7.5591, 47.63849], [7.57423, 47.61628], [7.58851, 47.60794], [7.59301, 47.60058], [7.58945, 47.59017], [7.60523, 47.58519], [7.60459, 47.57869], [7.61929, 47.57683], [7.64309, 47.59151], [7.64213, 47.5944], [7.64599, 47.59695], [7.67395, 47.59212], [7.68229, 47.59905], [7.69385, 47.60099], [7.68486, 47.59601], [7.67115, 47.5871], [7.68904, 47.57133], [7.67655, 47.56435], [7.63338, 47.56256], [7.65083, 47.54662], [7.66174, 47.54554], [7.6656, 47.53752], [7.68101, 47.53232], [7.69642, 47.53297], [7.71961, 47.54219], [7.75261, 47.54599], [7.79486, 47.55691], [7.81901, 47.58798], [7.84412, 47.5841], [7.88664, 47.58854], [7.90673, 47.57674], [7.91251, 47.55031], [7.94494, 47.54511], [7.95682, 47.55789], [7.97581, 47.55493], [8.00113, 47.55616], [8.02136, 47.55096], [8.04383, 47.55443], [8.06663, 47.56374], [8.08557, 47.55768], [8.10002, 47.56504], [8.10395, 47.57918], [8.11543, 47.5841], [8.13662, 47.58432], [8.13823, 47.59147], [8.14947, 47.59558], [8.1652, 47.5945], [8.19378, 47.61636], [8.20617, 47.62141], [8.22011, 47.6181], [8.22577, 47.60385], [8.23809, 47.61204], [8.25863, 47.61571], [8.26313, 47.6103], [8.2824, 47.61225], [8.29722, 47.60603], [8.29524, 47.5919], [8.30277, 47.58607], [8.32735, 47.57133], [8.35512, 47.57014], [8.38273, 47.56608], [8.39477, 47.57826], [8.43235, 47.56617], [8.49431, 47.58107], [8.48949, 47.588], [8.46637, 47.58389], [8.45578, 47.60121], [8.50747, 47.61897], [8.51686, 47.63476], [8.55756, 47.62394], [8.57586, 47.59537], [8.60348, 47.61204], [8.59545, 47.64298], [8.60701, 47.65271], [8.61471, 47.64514], [8.60412, 47.63735], [8.62049, 47.63757], [8.62884, 47.65098], [8.61113, 47.66332], [8.6052, 47.67258], [8.57683, 47.66158], [8.56141, 47.67088], [8.52801, 47.66059], [8.5322, 47.64687], [8.49656, 47.64709], [8.46605, 47.64103], [8.4667, 47.65747], [8.44711, 47.65379], [8.42264, 47.66667], [8.41346, 47.66676], [8.40473, 47.67499], [8.4211, 47.68407], [8.40569, 47.69855], [8.44807, 47.72426], [8.45771, 47.7493], [8.48868, 47.77215], [8.56814, 47.78001], [8.56415, 47.80633], [8.61657, 47.79998], [8.62408, 47.7626], [8.64425, 47.76398], [8.65292, 47.80066], [8.68022, 47.78599], [8.68985, 47.75686], [8.71778, 47.76571], [8.74251, 47.75168], [8.70543, 47.73121], [8.73671, 47.7169], [8.72617, 47.69651]]]] } },
-    { type: "Feature", properties: { iso1A2: "DG", iso1A3: "DGA", wikidata: "Q184851", nameEn: "Diego Garcia", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], isoStatus: "excRes", callingCodes: ["246"] }, geometry: { type: "MultiPolygon", coordinates: [[[[73.14823, -7.76302], [73.09982, -6.07324], [71.43792, -7.73904], [73.14823, -7.76302]]]] } },
-    { type: "Feature", properties: { iso1A2: "DJ", iso1A3: "DJI", iso1N3: "262", wikidata: "Q977", nameEn: "Djibouti", groups: ["014", "202", "002", "UN"], callingCodes: ["253"] }, geometry: { type: "MultiPolygon", coordinates: [[[[43.90659, 12.3823], [43.90659, 12.3823], [43.32909, 12.59711], [43.29075, 12.79154], [42.86195, 12.58747], [42.7996, 12.42629], [42.6957, 12.36201], [42.46941, 12.52661], [42.4037, 12.46478], [41.95461, 11.81157], [41.82878, 11.72361], [41.77727, 11.49902], [41.8096, 11.33606], [41.80056, 10.97127], [42.06302, 10.92599], [42.13691, 10.97586], [42.42669, 10.98493], [42.62989, 11.09711], [42.75111, 11.06992], [42.79037, 10.98493], [42.95776, 10.98533], [43.90659, 12.3823]]]] } },
-    { type: "Feature", properties: { iso1A2: "DK", iso1A3: "DNK", iso1N3: "208", wikidata: "Q756617", nameEn: "Kingdom of Denmark" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "DM", iso1A3: "DMA", iso1N3: "212", wikidata: "Q784", nameEn: "Dominica", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 767"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.32485, 14.91445], [-60.86656, 15.82603], [-61.95646, 15.5094], [-61.32485, 14.91445]]]] } },
-    { type: "Feature", properties: { iso1A2: "DO", iso1A3: "DOM", iso1N3: "214", wikidata: "Q786", nameEn: "Dominican Republic", groups: ["029", "003", "419", "019", "UN"], callingCodes: ["1 809", "1 829", "1 849"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-67.87844, 21.7938], [-72.38946, 20.27111], [-71.77419, 19.73128], [-71.75865, 19.70231], [-71.7429, 19.58445], [-71.71449, 19.55364], [-71.71268, 19.53374], [-71.6802, 19.45008], [-71.69448, 19.37866], [-71.77766, 19.33823], [-71.73229, 19.26686], [-71.62642, 19.21212], [-71.65337, 19.11759], [-71.69938, 19.10916], [-71.71088, 19.08353], [-71.74088, 19.0437], [-71.88102, 18.95007], [-71.77766, 18.95007], [-71.72624, 18.87802], [-71.71885, 18.78423], [-71.82556, 18.62551], [-71.95412, 18.64939], [-72.00201, 18.62312], [-71.88102, 18.50125], [-71.90875, 18.45821], [-71.69952, 18.34101], [-71.78271, 18.18302], [-71.75465, 18.14405], [-71.74994, 18.11115], [-71.73783, 18.07177], [-71.75671, 18.03456], [-72.29523, 17.48026], [-68.39466, 16.14167], [-67.87844, 21.7938]]]] } },
-    { type: "Feature", properties: { iso1A2: "DZ", iso1A3: "DZA", iso1N3: "012", wikidata: "Q262", nameEn: "Algeria", groups: ["015", "002", "UN"], callingCodes: ["213"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.59123, 37.14286], [5.10072, 39.89531], [-2.27707, 35.35051], [-2.21248, 35.08532], [-2.21445, 35.04378], [-2.04734, 34.93218], [-1.97833, 34.93218], [-1.97469, 34.886], [-1.73707, 34.74226], [-1.84569, 34.61907], [-1.69788, 34.48056], [-1.78042, 34.39018], [-1.64666, 34.10405], [-1.73494, 33.71721], [-1.59508, 33.59929], [-1.67067, 33.27084], [-1.46249, 33.0499], [-1.54244, 32.95499], [-1.37794, 32.73628], [-0.9912, 32.52467], [-1.24998, 32.32993], [-1.24453, 32.1917], [-1.15735, 32.12096], [-1.22829, 32.07832], [-2.46166, 32.16603], [-2.93873, 32.06557], [-2.82784, 31.79459], [-3.66314, 31.6339], [-3.66386, 31.39202], [-3.77647, 31.31912], [-3.77103, 31.14984], [-3.54944, 31.0503], [-3.65418, 30.85566], [-3.64735, 30.67539], [-4.31774, 30.53229], [-4.6058, 30.28343], [-5.21671, 29.95253], [-5.58831, 29.48103], [-5.72121, 29.52322], [-5.75616, 29.61407], [-6.69965, 29.51623], [-6.78351, 29.44634], [-6.95824, 29.50924], [-7.61585, 29.36252], [-8.6715, 28.71194], [-8.66879, 27.6666], [-8.66674, 27.31569], [-4.83423, 24.99935], [1.15698, 21.12843], [1.20992, 20.73533], [3.24648, 19.81703], [3.12501, 19.1366], [3.36082, 18.9745], [4.26651, 19.14224], [5.8153, 19.45101], [7.38361, 20.79165], [7.48273, 20.87258], [11.96886, 23.51735], [11.62498, 24.26669], [11.41061, 24.21456], [10.85323, 24.5595], [10.33159, 24.5465], [10.02432, 24.98124], [10.03146, 25.35635], [9.38834, 26.19288], [9.51696, 26.39148], [9.89569, 26.57696], [9.78136, 29.40961], [9.3876, 30.16738], [9.55544, 30.23971], [9.07483, 32.07865], [8.35999, 32.50101], [8.31895, 32.83483], [8.1179, 33.05086], [8.11433, 33.10175], [7.83028, 33.18851], [7.73687, 33.42114], [7.54088, 33.7726], [7.52851, 34.06493], [7.66174, 34.20167], [7.74207, 34.16492], [7.81242, 34.21841], [7.86264, 34.3987], [8.20482, 34.57575], [8.29655, 34.72798], [8.25189, 34.92009], [8.30727, 34.95378], [8.3555, 35.10007], [8.47318, 35.23376], [8.30329, 35.29884], [8.36086, 35.47774], [8.35371, 35.66373], [8.26472, 35.73669], [8.2626, 35.91733], [8.40731, 36.42208], [8.18936, 36.44939], [8.16167, 36.48817], [8.47609, 36.66607], [8.46537, 36.7706], [8.57613, 36.78062], [8.67706, 36.8364], [8.62972, 36.86499], [8.64044, 36.9401], [8.59123, 37.14286]]]] } },
-    { type: "Feature", properties: { iso1A2: "EA", wikidata: "Q28868874", nameEn: "Ceuta, Melilla", country: "ES", level: "territory", isoStatus: "excRes" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "EC", iso1A3: "ECU", iso1N3: "218", wikidata: "Q736", nameEn: "Ecuador" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "EE", iso1A3: "EST", iso1N3: "233", wikidata: "Q191", nameEn: "Estonia", aliases: ["EW"], groups: ["EU", "154", "150", "UN"], callingCodes: ["372"] }, geometry: { type: "MultiPolygon", coordinates: [[[[26.32936, 60.00121], [20.5104, 59.15546], [19.84909, 57.57876], [22.80496, 57.87798], [23.20055, 57.56697], [24.26221, 57.91787], [24.3579, 57.87471], [25.19484, 58.0831], [25.28237, 57.98539], [25.29581, 58.08288], [25.73499, 57.90193], [26.05949, 57.84744], [26.0324, 57.79037], [26.02456, 57.78342], [26.027, 57.78158], [26.0266, 57.77441], [26.02069, 57.77169], [26.02415, 57.76865], [26.03332, 57.7718], [26.0543, 57.76105], [26.08098, 57.76619], [26.2029, 57.7206], [26.1866, 57.6849], [26.29253, 57.59244], [26.46527, 57.56885], [26.54675, 57.51813], [26.90364, 57.62823], [27.34698, 57.52242], [27.31919, 57.57672], [27.40393, 57.62125], [27.3746, 57.66834], [27.52615, 57.72843], [27.50171, 57.78842], [27.56689, 57.83356], [27.78526, 57.83963], [27.81841, 57.89244], [27.67282, 57.92627], [27.62393, 58.09462], [27.48541, 58.22615], [27.55489, 58.39525], [27.36366, 58.78381], [27.74429, 58.98351], [27.80482, 59.1116], [27.87978, 59.18097], [27.90911, 59.24353], [28.00689, 59.28351], [28.14215, 59.28934], [28.19284, 59.35791], [28.20537, 59.36491], [28.21137, 59.38058], [28.19061, 59.39962], [28.04187, 59.47017], [27.85643, 59.58538], [26.90044, 59.63819], [26.32936, 60.00121]]]] } },
-    { type: "Feature", properties: { iso1A2: "EG", iso1A3: "EGY", iso1N3: "818", wikidata: "Q79", nameEn: "Egypt", groups: ["015", "002", "UN"], callingCodes: ["20"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.62659, 31.82938], [26.92891, 33.39516], [24.8458, 31.39877], [25.01077, 30.73861], [24.71117, 30.17441], [24.99968, 29.24574], [24.99885, 21.99535], [33.17563, 22.00405], [34.0765, 22.00501], [37.8565, 22.00903], [34.4454, 27.91479], [34.8812, 29.36878], [34.92298, 29.45305], [34.26742, 31.21998], [34.24012, 31.29591], [34.23572, 31.2966], [34.21853, 31.32363], [34.052, 31.46619], [33.62659, 31.82938]]]] } },
-    { type: "Feature", properties: { iso1A2: "EH", iso1A3: "ESH", iso1N3: "732", wikidata: "Q6250", nameEn: "Western Sahara", groups: ["015", "002"], callingCodes: ["212"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.66879, 27.6666], [-8.77527, 27.66663], [-8.71787, 26.9898], [-9.08698, 26.98639], [-9.56957, 26.90042], [-9.81998, 26.71379], [-10.68417, 26.90984], [-11.35695, 26.8505], [-11.23622, 26.72023], [-11.38635, 26.611], [-11.62052, 26.05229], [-12.06001, 26.04442], [-12.12281, 25.13682], [-12.92147, 24.39502], [-13.00628, 24.01923], [-13.75627, 23.77231], [-14.10361, 22.75501], [-14.1291, 22.41636], [-14.48112, 22.00886], [-14.47329, 21.63839], [-14.78487, 21.36587], [-16.44269, 21.39745], [-16.9978, 21.36239], [-17.02707, 21.34022], [-17.21511, 21.34226], [-17.35589, 20.80492], [-17.0471, 20.76408], [-17.0695, 20.85742], [-17.06781, 20.92697], [-17.0396, 20.9961], [-17.0357, 21.05368], [-16.99806, 21.12142], [-16.95474, 21.33997], [-13.01525, 21.33343], [-13.08438, 22.53866], [-13.15313, 22.75649], [-13.10753, 22.89493], [-13.00412, 23.02297], [-12.5741, 23.28975], [-12.36213, 23.3187], [-12.14969, 23.41935], [-12.00251, 23.4538], [-12.0002, 25.9986], [-8.66721, 25.99918], [-8.66674, 27.31569], [-8.66879, 27.6666]]]] } },
-    { type: "Feature", properties: { iso1A2: "ER", iso1A3: "ERI", iso1N3: "232", wikidata: "Q986", nameEn: "Eritrea", groups: ["014", "202", "002", "UN"], callingCodes: ["291"] }, geometry: { type: "MultiPolygon", coordinates: [[[[40.99158, 15.81743], [39.63762, 18.37348], [38.57727, 17.98125], [38.45916, 17.87167], [38.37133, 17.66269], [38.13362, 17.53906], [37.50967, 17.32199], [37.42694, 17.04041], [36.99777, 17.07172], [36.92193, 16.23451], [36.76371, 15.80831], [36.69761, 15.75323], [36.54276, 15.23478], [36.44337, 15.14963], [36.54376, 14.25597], [36.56536, 14.26177], [36.55659, 14.28237], [36.63364, 14.31172], [36.85787, 14.32201], [37.01622, 14.2561], [37.09486, 14.27155], [37.13206, 14.40746], [37.3106, 14.44657], [37.47319, 14.2149], [37.528, 14.18413], [37.91287, 14.89447], [38.0364, 14.72745], [38.25562, 14.67287], [38.3533, 14.51323], [38.45748, 14.41445], [38.78306, 14.4754], [38.98058, 14.54895], [39.02834, 14.63717], [39.16074, 14.65187], [39.14772, 14.61827], [39.19547, 14.56996], [39.23888, 14.56365], [39.26927, 14.48801], [39.2302, 14.44598], [39.2519, 14.40393], [39.37685, 14.54402], [39.52756, 14.49011], [39.50585, 14.55735], [39.58182, 14.60987], [39.76632, 14.54264], [39.9443, 14.41024], [40.07236, 14.54264], [40.14649, 14.53969], [40.21128, 14.39342], [40.25686, 14.41445], [40.9167, 14.11152], [41.25097, 13.60787], [41.62864, 13.38626], [42.05841, 12.80912], [42.21469, 12.75832], [42.2798, 12.6355], [42.4037, 12.46478], [42.46941, 12.52661], [42.6957, 12.36201], [42.7996, 12.42629], [42.86195, 12.58747], [43.29075, 12.79154], [40.99158, 15.81743]]]] } },
-    { type: "Feature", properties: { iso1A2: "ES", iso1A3: "ESP", iso1N3: "724", wikidata: "Q29", nameEn: "Spain" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "ET", iso1A3: "ETH", iso1N3: "231", wikidata: "Q115", nameEn: "Ethiopia", groups: ["014", "202", "002", "UN"], callingCodes: ["251"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.4037, 12.46478], [42.2798, 12.6355], [42.21469, 12.75832], [42.05841, 12.80912], [41.62864, 13.38626], [41.25097, 13.60787], [40.9167, 14.11152], [40.25686, 14.41445], [40.21128, 14.39342], [40.14649, 14.53969], [40.07236, 14.54264], [39.9443, 14.41024], [39.76632, 14.54264], [39.58182, 14.60987], [39.50585, 14.55735], [39.52756, 14.49011], [39.37685, 14.54402], [39.2519, 14.40393], [39.2302, 14.44598], [39.26927, 14.48801], [39.23888, 14.56365], [39.19547, 14.56996], [39.14772, 14.61827], [39.16074, 14.65187], [39.02834, 14.63717], [38.98058, 14.54895], [38.78306, 14.4754], [38.45748, 14.41445], [38.3533, 14.51323], [38.25562, 14.67287], [38.0364, 14.72745], [37.91287, 14.89447], [37.528, 14.18413], [37.47319, 14.2149], [37.3106, 14.44657], [37.13206, 14.40746], [37.09486, 14.27155], [37.01622, 14.2561], [36.85787, 14.32201], [36.63364, 14.31172], [36.55659, 14.28237], [36.56536, 14.26177], [36.54376, 14.25597], [36.44653, 13.95666], [36.48824, 13.83954], [36.38993, 13.56459], [36.24545, 13.36759], [36.13374, 12.92665], [36.16651, 12.88019], [36.14268, 12.70879], [36.01458, 12.72478], [35.70476, 12.67101], [35.24302, 11.91132], [35.11492, 11.85156], [35.05832, 11.71158], [35.09556, 11.56278], [34.95704, 11.24448], [35.01215, 11.19626], [34.93172, 10.95946], [34.97789, 10.91559], [34.97491, 10.86147], [34.86916, 10.78832], [34.86618, 10.74588], [34.77532, 10.69027], [34.77383, 10.74588], [34.59062, 10.89072], [34.4372, 10.781], [34.2823, 10.53508], [34.34783, 10.23914], [34.32102, 10.11599], [34.22718, 10.02506], [34.20484, 9.9033], [34.13186, 9.7492], [34.08717, 9.55243], [34.10229, 9.50238], [34.14304, 9.04654], [34.14453, 8.60204], [34.01346, 8.50041], [33.89579, 8.4842], [33.87195, 8.41938], [33.71407, 8.3678], [33.66938, 8.44442], [33.54575, 8.47094], [33.3119, 8.45474], [33.19721, 8.40317], [33.1853, 8.29264], [33.18083, 8.13047], [33.08401, 8.05822], [33.0006, 7.90333], [33.04944, 7.78989], [33.24637, 7.77939], [33.32531, 7.71297], [33.44745, 7.7543], [33.71407, 7.65983], [33.87642, 7.5491], [34.02984, 7.36449], [34.03878, 7.27437], [34.01495, 7.25664], [34.19369, 7.12807], [34.19369, 7.04382], [34.35753, 6.91963], [34.47669, 6.91076], [34.53925, 6.82794], [34.53776, 6.74808], [34.65096, 6.72589], [34.77459, 6.5957], [34.87736, 6.60161], [35.01738, 6.46991], [34.96227, 6.26415], [35.00546, 5.89387], [35.12611, 5.68937], [35.13058, 5.62118], [35.31188, 5.50106], [35.29938, 5.34042], [35.50792, 5.42431], [35.8576, 5.33413], [35.81968, 5.10757], [35.82118, 4.77382], [35.9419, 4.61933], [35.95449, 4.53244], [36.03924, 4.44406], [36.84474, 4.44518], [37.07724, 4.33503], [38.14168, 3.62487], [38.45812, 3.60445], [38.52336, 3.62551], [38.91938, 3.51198], [39.07736, 3.5267], [39.19954, 3.47834], [39.49444, 3.45521], [39.51551, 3.40895], [39.55132, 3.39634], [39.58339, 3.47434], [39.76808, 3.67058], [39.86043, 3.86974], [40.77498, 4.27683], [41.1754, 3.94079], [41.89488, 3.97375], [42.07619, 4.17667], [42.55853, 4.20518], [42.84526, 4.28357], [42.97746, 4.44032], [43.04177, 4.57923], [43.40263, 4.79289], [44.02436, 4.9451], [44.98104, 4.91821], [47.97917, 8.00124], [47.92477, 8.00111], [46.99339, 7.9989], [44.19222, 8.93028], [43.32613, 9.59205], [43.23518, 9.84605], [43.0937, 9.90579], [42.87643, 10.18441], [42.69452, 10.62672], [42.95776, 10.98533], [42.79037, 10.98493], [42.75111, 11.06992], [42.62989, 11.09711], [42.42669, 10.98493], [42.13691, 10.97586], [42.06302, 10.92599], [41.80056, 10.97127], [41.8096, 11.33606], [41.77727, 11.49902], [41.82878, 11.72361], [41.95461, 11.81157], [42.4037, 12.46478]]]] } },
-    { type: "Feature", properties: { iso1A2: "EU", iso1A3: "EUE", wikidata: "Q458", nameEn: "European Union", level: "union", isoStatus: "excRes" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "FI", iso1A3: "FIN", iso1N3: "246", wikidata: "Q33", nameEn: "Finland", aliases: ["SF"] }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "FJ", iso1A3: "FJI", iso1N3: "242", wikidata: "Q712", nameEn: "Fiji", groups: ["054", "009", "UN"], driveSide: "left", callingCodes: ["679"] }, geometry: { type: "MultiPolygon", coordinates: [[[[174.245, -23.1974], [179.99999, -22.5], [179.99999, -11.5], [174, -11.5], [174.245, -23.1974]]], [[[-176.76826, -14.95183], [-180, -14.96041], [-180, -22.90585], [-176.74538, -22.89767], [-176.76826, -14.95183]]]] } },
-    { type: "Feature", properties: { iso1A2: "FK", iso1A3: "FLK", iso1N3: "238", wikidata: "Q9648", nameEn: "Falkland Islands", country: "GB", groups: ["BOTS", "005", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["500"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.67376, -55.11859], [-54.56126, -51.26248], [-61.26735, -50.63919], [-63.67376, -55.11859]]]] } },
-    { type: "Feature", properties: { iso1A2: "FM", iso1A3: "FSM", iso1N3: "583", wikidata: "Q702", nameEn: "Federated States of Micronesia", groups: ["057", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["691"] }, geometry: { type: "MultiPolygon", coordinates: [[[[138.20583, 13.3783], [136.27107, 6.73747], [156.88247, -1.39237], [165.19726, 6.22546], [138.20583, 13.3783]]]] } },
-    { type: "Feature", properties: { iso1A2: "FO", iso1A3: "FRO", iso1N3: "234", wikidata: "Q4628", nameEn: "Faroe Islands", country: "DK", groups: ["154", "150", "UN"], callingCodes: ["298"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.51774, 62.35338], [-6.51083, 60.95272], [-5.70102, 62.77194], [-8.51774, 62.35338]]]] } },
-    { type: "Feature", properties: { iso1A2: "FR", iso1A3: "FRA", iso1N3: "250", wikidata: "Q142", nameEn: "France" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "FX", iso1A3: "FXX", iso1N3: "249", wikidata: "Q212429", nameEn: "Metropolitan France", country: "FR", groups: ["EU", "155", "150", "UN"], isoStatus: "excRes", callingCodes: ["33"] }, geometry: { type: "MultiPolygon", coordinates: [[[[2.55904, 51.07014], [2.18458, 51.52087], [1.17405, 50.74239], [-2.02963, 49.91866], [-2.09454, 49.46288], [-1.83944, 49.23037], [-2.00491, 48.86706], [-2.65349, 49.15373], [-6.28985, 48.93406], [-1.81005, 43.59738], [-1.77289, 43.38957], [-1.79319, 43.37497], [-1.78332, 43.36399], [-1.78714, 43.35476], [-1.77068, 43.34396], [-1.75334, 43.34107], [-1.75079, 43.3317], [-1.7397, 43.32979], [-1.73074, 43.29481], [-1.69407, 43.31378], [-1.62481, 43.30726], [-1.63052, 43.28591], [-1.61341, 43.25269], [-1.57674, 43.25269], [-1.55963, 43.28828], [-1.50992, 43.29481], [-1.45289, 43.27049], [-1.40942, 43.27272], [-1.3758, 43.24511], [-1.41562, 43.12815], [-1.47555, 43.08372], [-1.44067, 43.047], [-1.35272, 43.02658], [-1.34419, 43.09665], [-1.32209, 43.1127], [-1.27118, 43.11961], [-1.30052, 43.09581], [-1.30531, 43.06859], [-1.25244, 43.04164], [-1.22881, 43.05534], [-1.10333, 43.0059], [-1.00963, 42.99279], [-0.97133, 42.96239], [-0.81652, 42.95166], [-0.75478, 42.96916], [-0.72037, 42.92541], [-0.73422, 42.91228], [-0.72608, 42.89318], [-0.69837, 42.87945], [-0.67637, 42.88303], [-0.55497, 42.77846], [-0.50863, 42.82713], [-0.44334, 42.79939], [-0.41319, 42.80776], [-0.38833, 42.80132], [-0.3122, 42.84788], [-0.17939, 42.78974], [-0.16141, 42.79535], [-0.10519, 42.72761], [-0.02468, 42.68513], [0.17569, 42.73424], [0.25336, 42.7174], [0.29407, 42.67431], [0.36251, 42.72282], [0.40214, 42.69779], [0.67873, 42.69458], [0.65421, 42.75872], [0.66121, 42.84021], [0.711, 42.86372], [0.93089, 42.79154], [0.96166, 42.80629], [0.98292, 42.78754], [1.0804, 42.78569], [1.15928, 42.71407], [1.35562, 42.71944], [1.44197, 42.60217], [1.47986, 42.61346], [1.46718, 42.63296], [1.48043, 42.65203], [1.50867, 42.64483], [1.55418, 42.65669], [1.60085, 42.62703], [1.63485, 42.62957], [1.6625, 42.61982], [1.68267, 42.62533], [1.73452, 42.61515], [1.72588, 42.59098], [1.7858, 42.57698], [1.73683, 42.55492], [1.72515, 42.50338], [1.76335, 42.48863], [1.83037, 42.48395], [1.88853, 42.4501], [1.93663, 42.45439], [1.94292, 42.44316], [1.94061, 42.43333], [1.94084, 42.43039], [1.9574, 42.42401], [1.96482, 42.37787], [2.00488, 42.35399], [2.06241, 42.35906], [2.11621, 42.38393], [2.12789, 42.41291], [2.16599, 42.42314], [2.20578, 42.41633], [2.25551, 42.43757], [2.38504, 42.39977], [2.43299, 42.39423], [2.43508, 42.37568], [2.48457, 42.33933], [2.54382, 42.33406], [2.55516, 42.35351], [2.57934, 42.35808], [2.6747, 42.33974], [2.65311, 42.38771], [2.72056, 42.42298], [2.75497, 42.42578], [2.77464, 42.41046], [2.84335, 42.45724], [2.85675, 42.45444], [2.86983, 42.46843], [2.88413, 42.45938], [2.92107, 42.4573], [2.94283, 42.48174], [2.96518, 42.46692], [3.03734, 42.47363], [3.08167, 42.42748], [3.10027, 42.42621], [3.11379, 42.43646], [3.17156, 42.43545], [3.75438, 42.33445], [7.60802, 41.05927], [10.09675, 41.44089], [9.56115, 43.20816], [7.50102, 43.51859], [7.42422, 43.72209], [7.40903, 43.7296], [7.41113, 43.73156], [7.41291, 43.73168], [7.41298, 43.73311], [7.41233, 43.73439], [7.42062, 43.73977], [7.42299, 43.74176], [7.42443, 43.74087], [7.42809, 43.74396], [7.43013, 43.74895], [7.43624, 43.75014], [7.43708, 43.75197], [7.4389, 43.75151], [7.4379, 43.74963], [7.47823, 43.73341], [7.53006, 43.78405], [7.50423, 43.84345], [7.49355, 43.86551], [7.51162, 43.88301], [7.56075, 43.89932], [7.56858, 43.94506], [7.60771, 43.95772], [7.65266, 43.9763], [7.66848, 43.99943], [7.6597, 44.03009], [7.72508, 44.07578], [7.66878, 44.12795], [7.68694, 44.17487], [7.63245, 44.17877], [7.62155, 44.14881], [7.36364, 44.11882], [7.34547, 44.14359], [7.27827, 44.1462], [7.16929, 44.20352], [7.00764, 44.23736], [6.98221, 44.28289], [6.89171, 44.36637], [6.88784, 44.42043], [6.94504, 44.43112], [6.86233, 44.49834], [6.85507, 44.53072], [6.96042, 44.62129], [6.95133, 44.66264], [7.00582, 44.69364], [7.07484, 44.68073], [7.00401, 44.78782], [7.02217, 44.82519], [6.93499, 44.8664], [6.90774, 44.84322], [6.75518, 44.89915], [6.74519, 44.93661], [6.74791, 45.01939], [6.66981, 45.02324], [6.62803, 45.11175], [6.7697, 45.16044], [6.85144, 45.13226], [6.96706, 45.20841], [7.07074, 45.21228], [7.13115, 45.25386], [7.10572, 45.32924], [7.18019, 45.40071], [7.00037, 45.509], [6.98948, 45.63869], [6.80785, 45.71864], [6.80785, 45.83265], [6.95315, 45.85163], [7.04151, 45.92435], [7.00946, 45.9944], [6.93862, 46.06502], [6.87868, 46.03855], [6.89321, 46.12548], [6.78968, 46.14058], [6.86052, 46.28512], [6.77152, 46.34784], [6.8024, 46.39171], [6.82312, 46.42661], [6.53358, 46.45431], [6.25432, 46.3632], [6.21981, 46.31304], [6.24826, 46.30175], [6.25137, 46.29014], [6.23775, 46.27822], [6.24952, 46.26255], [6.26749, 46.24745], [6.29474, 46.26221], [6.31041, 46.24417], [6.29663, 46.22688], [6.27694, 46.21566], [6.26007, 46.21165], [6.24821, 46.20531], [6.23913, 46.20511], [6.23544, 46.20714], [6.22175, 46.20045], [6.22222, 46.19888], [6.21844, 46.19837], [6.21603, 46.19507], [6.21273, 46.19409], [6.21114, 46.1927], [6.20539, 46.19163], [6.19807, 46.18369], [6.19552, 46.18401], [6.18707, 46.17999], [6.18871, 46.16644], [6.18116, 46.16187], [6.15305, 46.15194], [6.13397, 46.1406], [6.09926, 46.14373], [6.09199, 46.15191], [6.07491, 46.14879], [6.05203, 46.15191], [6.04564, 46.14031], [6.03614, 46.13712], [6.01791, 46.14228], [5.9871, 46.14499], [5.97893, 46.13303], [5.95781, 46.12925], [5.9641, 46.14412], [5.97508, 46.15863], [5.98188, 46.17392], [5.98846, 46.17046], [5.99573, 46.18587], [5.96515, 46.19638], [5.97542, 46.21525], [6.02461, 46.23313], [6.03342, 46.2383], [6.04602, 46.23127], [6.05029, 46.23518], [6.0633, 46.24583], [6.07072, 46.24085], [6.08563, 46.24651], [6.10071, 46.23772], [6.12446, 46.25059], [6.11926, 46.2634], [6.1013, 46.28512], [6.11697, 46.29547], [6.1198, 46.31157], [6.13876, 46.33844], [6.15738, 46.3491], [6.16987, 46.36759], [6.15985, 46.37721], [6.15016, 46.3778], [6.09926, 46.40768], [6.06407, 46.41676], [6.08427, 46.44305], [6.07269, 46.46244], [6.1567, 46.54402], [6.11084, 46.57649], [6.27135, 46.68251], [6.38351, 46.73171], [6.45209, 46.77502], [6.43216, 46.80336], [6.46456, 46.88865], [6.43341, 46.92703], [6.71531, 47.0494], [6.68823, 47.06616], [6.76788, 47.1208], [6.8489, 47.15933], [6.9508, 47.24338], [6.95108, 47.26428], [6.94316, 47.28747], [7.05305, 47.33304], [7.0564, 47.35134], [7.03125, 47.36996], [6.87959, 47.35335], [6.88542, 47.37262], [6.93744, 47.40714], [6.93953, 47.43388], [7.0024, 47.45264], [6.98425, 47.49432], [7.0231, 47.50522], [7.07425, 47.48863], [7.12781, 47.50371], [7.16249, 47.49025], [7.19583, 47.49455], [7.17026, 47.44312], [7.24669, 47.4205], [7.33526, 47.44186], [7.35603, 47.43432], [7.40308, 47.43638], [7.43088, 47.45846], [7.4462, 47.46264], [7.4583, 47.47216], [7.42923, 47.48628], [7.43356, 47.49712], [7.47534, 47.47932], [7.51076, 47.49651], [7.49804, 47.51798], [7.5229, 47.51644], [7.53199, 47.5284], [7.51904, 47.53515], [7.50588, 47.52856], [7.49691, 47.53821], [7.50873, 47.54546], [7.51723, 47.54578], [7.52831, 47.55347], [7.53634, 47.55553], [7.55652, 47.56779], [7.55689, 47.57232], [7.56548, 47.57617], [7.56684, 47.57785], [7.58386, 47.57536], [7.58945, 47.59017], [7.59301, 47.60058], [7.58851, 47.60794], [7.57423, 47.61628], [7.5591, 47.63849], [7.53384, 47.65115], [7.52067, 47.66437], [7.51915, 47.68335], [7.51266, 47.70197], [7.53722, 47.71635], [7.54761, 47.72912], [7.52921, 47.77747], [7.55673, 47.87371], [7.62302, 47.97898], [7.56966, 48.03265], [7.57137, 48.12292], [7.6648, 48.22219], [7.69022, 48.30018], [7.74562, 48.32736], [7.73109, 48.39192], [7.76833, 48.48945], [7.80647, 48.51239], [7.80167, 48.54758], [7.80057, 48.5857], [7.84098, 48.64217], [7.89002, 48.66317], [7.96812, 48.72491], [7.96994, 48.75606], [8.01534, 48.76085], [8.0326, 48.79017], [8.06802, 48.78957], [8.10253, 48.81829], [8.12813, 48.87985], [8.19989, 48.95825], [8.20031, 48.95856], [8.22604, 48.97352], [8.14189, 48.97833], [7.97783, 49.03161], [7.93641, 49.05544], [7.86386, 49.03499], [7.79557, 49.06583], [7.75948, 49.04562], [7.63618, 49.05428], [7.62575, 49.07654], [7.56416, 49.08136], [7.53012, 49.09818], [7.49172, 49.13915], [7.49473, 49.17], [7.44455, 49.16765], [7.44052, 49.18354], [7.3662, 49.17308], [7.35995, 49.14399], [7.3195, 49.14231], [7.29514, 49.11426], [7.23473, 49.12971], [7.1593, 49.1204], [7.1358, 49.1282], [7.12504, 49.14253], [7.10384, 49.13787], [7.10715, 49.15631], [7.07859, 49.15031], [7.09007, 49.13094], [7.07162, 49.1255], [7.06642, 49.11415], [7.05548, 49.11185], [7.04843, 49.11422], [7.04409, 49.12123], [7.04662, 49.13724], [7.03178, 49.15734], [7.0274, 49.17042], [7.03459, 49.19096], [7.01318, 49.19018], [6.97273, 49.2099], [6.95963, 49.203], [6.94028, 49.21641], [6.93831, 49.2223], [6.91875, 49.22261], [6.89298, 49.20863], [6.85939, 49.22376], [6.83555, 49.21249], [6.85119, 49.20038], [6.85016, 49.19354], [6.86225, 49.18185], [6.84703, 49.15734], [6.83385, 49.15162], [6.78265, 49.16793], [6.73765, 49.16375], [6.71137, 49.18808], [6.73256, 49.20486], [6.71843, 49.2208], [6.69274, 49.21661], [6.66583, 49.28065], [6.60186, 49.31055], [6.572, 49.35027], [6.58807, 49.35358], [6.60091, 49.36864], [6.533, 49.40748], [6.55404, 49.42464], [6.42432, 49.47683], [6.40274, 49.46546], [6.39168, 49.4667], [6.38352, 49.46463], [6.36778, 49.46937], [6.3687, 49.4593], [6.28818, 49.48465], [6.27875, 49.503], [6.25029, 49.50609], [6.2409, 49.51408], [6.19543, 49.50536], [6.17386, 49.50934], [6.15366, 49.50226], [6.16115, 49.49297], [6.14321, 49.48796], [6.12814, 49.49365], [6.12346, 49.4735], [6.10325, 49.4707], [6.09845, 49.46351], [6.10072, 49.45268], [6.08373, 49.45594], [6.07887, 49.46399], [6.05553, 49.46663], [6.04176, 49.44801], [6.02743, 49.44845], [6.02648, 49.45451], [5.97693, 49.45513], [5.96876, 49.49053], [5.94224, 49.49608], [5.94128, 49.50034], [5.86571, 49.50015], [5.83389, 49.52152], [5.83467, 49.52717], [5.84466, 49.53027], [5.83648, 49.5425], [5.81664, 49.53775], [5.80871, 49.5425], [5.81838, 49.54777], [5.79195, 49.55228], [5.77435, 49.56298], [5.7577, 49.55915], [5.75649, 49.54321], [5.64505, 49.55146], [5.60909, 49.51228], [5.55001, 49.52729], [5.46541, 49.49825], [5.46734, 49.52648], [5.43713, 49.5707], [5.3974, 49.61596], [5.34837, 49.62889], [5.33851, 49.61599], [5.3137, 49.61225], [5.30214, 49.63055], [5.33039, 49.6555], [5.31465, 49.66846], [5.26232, 49.69456], [5.14545, 49.70287], [5.09249, 49.76193], [4.96714, 49.79872], [4.85464, 49.78995], [4.86965, 49.82271], [4.85134, 49.86457], [4.88529, 49.9236], [4.78827, 49.95609], [4.8382, 50.06738], [4.88602, 50.15182], [4.83279, 50.15331], [4.82438, 50.16878], [4.75237, 50.11314], [4.70064, 50.09384], [4.68695, 49.99685], [4.5414, 49.96911], [4.51098, 49.94659], [4.43488, 49.94122], [4.35051, 49.95315], [4.31963, 49.97043], [4.20532, 49.95803], [4.14239, 49.98034], [4.13508, 50.01976], [4.16294, 50.04719], [4.23101, 50.06945], [4.20147, 50.13535], [4.13561, 50.13078], [4.16014, 50.19239], [4.15524, 50.21103], [4.21945, 50.25539], [4.20651, 50.27333], [4.17861, 50.27443], [4.17347, 50.28838], [4.15524, 50.2833], [4.16808, 50.25786], [4.13665, 50.25609], [4.11954, 50.30425], [4.10957, 50.30234], [4.10237, 50.31247], [4.0689, 50.3254], [4.0268, 50.35793], [3.96771, 50.34989], [3.90781, 50.32814], [3.84314, 50.35219], [3.73911, 50.34809], [3.70987, 50.3191], [3.71009, 50.30305], [3.66976, 50.34563], [3.65709, 50.36873], [3.67262, 50.38663], [3.67494, 50.40239], [3.66153, 50.45165], [3.64426, 50.46275], [3.61014, 50.49568], [3.58361, 50.49049], [3.5683, 50.50192], [3.49509, 50.48885], [3.51564, 50.5256], [3.47385, 50.53397], [3.44629, 50.51009], [3.37693, 50.49538], [3.28575, 50.52724], [3.2729, 50.60718], [3.23951, 50.6585], [3.264, 50.67668], [3.2536, 50.68977], [3.26141, 50.69151], [3.26063, 50.70086], [3.24593, 50.71389], [3.22042, 50.71019], [3.20845, 50.71662], [3.19017, 50.72569], [3.20064, 50.73547], [3.18811, 50.74025], [3.18339, 50.74981], [3.16476, 50.76843], [3.15017, 50.79031], [3.1257, 50.78603], [3.11987, 50.79188], [3.11206, 50.79416], [3.10614, 50.78303], [3.09163, 50.77717], [3.04314, 50.77674], [3.00537, 50.76588], [2.96778, 50.75242], [2.95019, 50.75138], [2.90873, 50.702], [2.91036, 50.6939], [2.90069, 50.69263], [2.88504, 50.70656], [2.87937, 50.70298], [2.86985, 50.7033], [2.8483, 50.72276], [2.81056, 50.71773], [2.71165, 50.81295], [2.63331, 50.81457], [2.59093, 50.91751], [2.63074, 50.94746], [2.57551, 51.00326], [2.55904, 51.07014]], [[1.99838, 42.44682], [1.98378, 42.44697], [1.96125, 42.45364], [1.95606, 42.45785], [1.96215, 42.47854], [1.97003, 42.48081], [1.97227, 42.48487], [1.97697, 42.48568], [1.98022, 42.49569], [1.98916, 42.49351], [1.99766, 42.4858], [1.98579, 42.47486], [1.99216, 42.46208], [2.01564, 42.45171], [1.99838, 42.44682]]]] } },
-    { type: "Feature", properties: { iso1A2: "GA", iso1A3: "GAB", iso1N3: "266", wikidata: "Q1000", nameEn: "Gabon", groups: ["017", "202", "002", "UN"], callingCodes: ["241"] }, geometry: { type: "MultiPolygon", coordinates: [[[[13.29457, 2.16106], [13.28534, 2.25716], [11.37116, 2.29975], [11.3561, 2.17217], [11.35307, 1.00251], [9.79648, 1.0019], [9.75065, 1.06753], [9.66433, 1.06723], [7.24416, -0.64092], [10.75913, -4.39519], [11.12647, -3.94169], [11.22301, -3.69888], [11.48764, -3.51089], [11.57949, -3.52798], [11.68608, -3.68942], [11.87083, -3.71571], [11.92719, -3.62768], [11.8318, -3.5812], [11.96554, -3.30267], [11.70227, -3.17465], [11.70558, -3.0773], [11.80365, -3.00424], [11.64798, -2.81146], [11.5359, -2.85654], [11.64487, -2.61865], [11.57637, -2.33379], [11.74605, -2.39936], [11.96866, -2.33559], [12.04895, -2.41704], [12.47925, -2.32626], [12.44656, -1.92025], [12.61312, -1.8129], [12.82172, -1.91091], [13.02759, -2.33098], [13.47977, -2.43224], [13.75884, -2.09293], [13.92073, -2.35581], [13.85846, -2.46935], [14.10442, -2.49268], [14.23829, -2.33715], [14.16202, -2.23916], [14.23518, -2.15671], [14.25932, -1.97624], [14.41838, -1.89412], [14.52569, -0.57818], [14.41887, -0.44799], [14.2165, -0.38261], [14.06862, -0.20826], [13.90632, -0.2287], [13.88648, 0.26652], [14.10909, 0.58563], [14.26066, 0.57255], [14.48179, 0.9152], [14.25186, 1.39842], [13.89582, 1.4261], [13.15519, 1.23368], [13.25447, 1.32339], [13.13461, 1.57238], [13.29457, 2.16106]]]] } },
-    { type: "Feature", properties: { iso1A2: "GB", iso1A3: "GBR", iso1N3: "826", wikidata: "Q145", ccTLD: ".uk", nameEn: "United Kingdom", aliases: ["UK"] }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "GD", iso1A3: "GRD", iso1N3: "308", wikidata: "Q769", nameEn: "Grenada", aliases: ["WG"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 473"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.64026, 12.69984], [-61.77886, 11.36496], [-59.94058, 12.34011], [-62.64026, 12.69984]]]] } },
-    { type: "Feature", properties: { iso1A2: "GE", iso1A3: "GEO", iso1N3: "268", wikidata: "Q230", nameEn: "Georgia", groups: ["145", "142", "UN"], callingCodes: ["995"] }, geometry: { type: "MultiPolygon", coordinates: [[[[46.42738, 41.91323], [45.61676, 42.20768], [45.78692, 42.48358], [45.36501, 42.55268], [45.15318, 42.70598], [44.88754, 42.74934], [44.80941, 42.61277], [44.70002, 42.74679], [44.54202, 42.75699], [43.95517, 42.55396], [43.73119, 42.62043], [43.81453, 42.74297], [43.0419, 43.02413], [43.03322, 43.08883], [42.75889, 43.19651], [42.66667, 43.13917], [42.40563, 43.23226], [41.64935, 43.22331], [40.65957, 43.56212], [40.10657, 43.57344], [40.04445, 43.47776], [40.03312, 43.44262], [40.01007, 43.42411], [40.01552, 43.42025], [40.00853, 43.40578], [40.0078, 43.38551], [39.81147, 43.06294], [40.89217, 41.72528], [41.54366, 41.52185], [41.7148, 41.4932], [41.7124, 41.47417], [41.81939, 41.43621], [41.95134, 41.52466], [42.26387, 41.49346], [42.51772, 41.43606], [42.59202, 41.58183], [42.72794, 41.59714], [42.84471, 41.58912], [42.78995, 41.50126], [42.84899, 41.47265], [42.8785, 41.50516], [43.02956, 41.37891], [43.21707, 41.30331], [43.13373, 41.25503], [43.1945, 41.25242], [43.23096, 41.17536], [43.36118, 41.2028], [43.44973, 41.17666], [43.4717, 41.12611], [43.67712, 41.13398], [43.74717, 41.1117], [43.84835, 41.16329], [44.16591, 41.19141], [44.18148, 41.24644], [44.32139, 41.2079], [44.34337, 41.20312], [44.34417, 41.2382], [44.46791, 41.18204], [44.59322, 41.1933], [44.61462, 41.24018], [44.72814, 41.20338], [44.82084, 41.21513], [44.87887, 41.20195], [44.89911, 41.21366], [44.84358, 41.23088], [44.81749, 41.23488], [44.80053, 41.25949], [44.81437, 41.30371], [44.93493, 41.25685], [45.0133, 41.29747], [45.09867, 41.34065], [45.1797, 41.42231], [45.26285, 41.46433], [45.31352, 41.47168], [45.4006, 41.42402], [45.45973, 41.45898], [45.68389, 41.3539], [45.71035, 41.36208], [45.75705, 41.35157], [45.69946, 41.29545], [45.80842, 41.2229], [45.95786, 41.17956], [46.13221, 41.19479], [46.27698, 41.19011], [46.37661, 41.10805], [46.456, 41.09984], [46.48558, 41.0576], [46.55096, 41.1104], [46.63969, 41.09515], [46.66148, 41.20533], [46.72375, 41.28609], [46.63658, 41.37727], [46.4669, 41.43331], [46.40307, 41.48464], [46.33925, 41.4963], [46.29794, 41.5724], [46.34126, 41.57454], [46.34039, 41.5947], [46.3253, 41.60912], [46.28182, 41.60089], [46.26531, 41.63339], [46.24429, 41.59883], [46.19759, 41.62327], [46.17891, 41.72094], [46.20538, 41.77205], [46.23962, 41.75811], [46.30863, 41.79133], [46.3984, 41.84399], [46.42738, 41.91323]]]] } },
-    { type: "Feature", properties: { iso1A2: "GF", iso1A3: "GUF", iso1N3: "254", wikidata: "Q3769", nameEn: "French Guiana", country: "FR", groups: ["Q3320166", "EU", "005", "419", "019", "UN"], callingCodes: ["594"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-51.35485, 4.8383], [-53.7094, 6.2264], [-54.01074, 5.68785], [-54.01877, 5.52789], [-54.26916, 5.26909], [-54.4717, 4.91964], [-54.38444, 4.13222], [-54.19367, 3.84387], [-54.05128, 3.63557], [-53.98914, 3.627], [-53.9849, 3.58697], [-54.28534, 2.67798], [-54.42864, 2.42442], [-54.6084, 2.32856], [-54.16286, 2.10779], [-53.78743, 2.34412], [-52.96539, 2.1881], [-52.6906, 2.37298], [-52.31787, 3.17896], [-51.85573, 3.83427], [-51.82312, 3.85825], [-51.79599, 3.89336], [-51.61983, 4.14596], [-51.63798, 4.51394], [-51.35485, 4.8383]]]] } },
-    { type: "Feature", properties: { iso1A2: "GG", iso1A3: "GGY", iso1N3: "831", wikidata: "Q25230", nameEn: "Bailiwick of Guernsey", country: "GB" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "GH", iso1A3: "GHA", iso1N3: "288", wikidata: "Q117", nameEn: "Ghana", groups: ["011", "202", "002", "UN"], callingCodes: ["233"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-0.13493, 11.14075], [-0.27374, 11.17157], [-0.28566, 11.12713], [-0.35955, 11.07801], [-0.38219, 11.12596], [-0.42391, 11.11661], [-0.44298, 11.04292], [-0.61937, 10.91305], [-0.67143, 10.99811], [-2.83373, 11.0067], [-2.94232, 10.64281], [-2.83108, 10.40252], [-2.74174, 9.83172], [-2.76534, 9.56589], [-2.68802, 9.49343], [-2.69814, 9.22717], [-2.77799, 9.04949], [-2.66357, 9.01771], [-2.58243, 8.7789], [-2.49037, 8.20872], [-2.62901, 8.11495], [-2.61232, 8.02645], [-2.67787, 8.02055], [-2.74819, 7.92613], [-2.78395, 7.94974], [-2.79467, 7.86002], [-2.92339, 7.60847], [-2.97822, 7.27165], [-2.95438, 7.23737], [-3.23327, 6.81744], [-3.21954, 6.74407], [-3.25999, 6.62521], [-3.01896, 5.71697], [-2.95323, 5.71865], [-2.96671, 5.6415], [-2.93132, 5.62137], [-2.85378, 5.65156], [-2.76614, 5.60963], [-2.72737, 5.34789], [-2.77625, 5.34621], [-2.73074, 5.1364], [-2.75502, 5.10657], [-2.95261, 5.12477], [-2.96554, 5.10397], [-3.063, 5.13665], [-3.11073, 5.12675], [-3.10675, 5.08515], [-3.34019, 4.17519], [1.07031, 5.15655], [1.27574, 5.93551], [1.19771, 6.11522], [1.19966, 6.17069], [1.09187, 6.17074], [1.05969, 6.22998], [1.03108, 6.24064], [0.99652, 6.33779], [0.89283, 6.33779], [0.71048, 6.53083], [0.74862, 6.56517], [0.63659, 6.63857], [0.6497, 6.73682], [0.58176, 6.76049], [0.57406, 6.80348], [0.52853, 6.82921], [0.56508, 6.92971], [0.52098, 6.94391], [0.52217, 6.9723], [0.59606, 7.01252], [0.65327, 7.31643], [0.62943, 7.41099], [0.57223, 7.39326], [0.52455, 7.45354], [0.51979, 7.58706], [0.58295, 7.62368], [0.62943, 7.85751], [0.58891, 8.12779], [0.6056, 8.13959], [0.61156, 8.18324], [0.5913, 8.19622], [0.63897, 8.25873], [0.73432, 8.29529], [0.64731, 8.48866], [0.47211, 8.59945], [0.37319, 8.75262], [0.52455, 8.87746], [0.45424, 9.04581], [0.56388, 9.40697], [0.49118, 9.48339], [0.36485, 9.49749], [0.33148, 9.44812], [0.25758, 9.42696], [0.2254, 9.47869], [0.31241, 9.50337], [0.30406, 9.521], [0.2409, 9.52335], [0.23851, 9.57389], [0.38153, 9.58682], [0.36008, 9.6256], [0.29334, 9.59387], [0.26712, 9.66437], [0.28261, 9.69022], [0.32313, 9.6491], [0.34816, 9.66907], [0.34816, 9.71607], [0.32075, 9.72781], [0.36366, 10.03309], [0.41252, 10.02018], [0.41371, 10.06361], [0.35293, 10.09412], [0.39584, 10.31112], [0.33028, 10.30408], [0.29453, 10.41546], [0.18846, 10.4096], [0.12886, 10.53149], [-0.05945, 10.63458], [-0.09141, 10.7147], [-0.07327, 10.71845], [-0.07183, 10.76794], [-0.0228, 10.81916], [-0.02685, 10.8783], [-908e-5, 10.91644], [-63e-4, 10.96417], [0.03355, 10.9807], [0.02395, 11.06229], [342e-5, 11.08317], [-514e-5, 11.10763], [-0.0275, 11.11202], [-0.05733, 11.08628], [-0.14462, 11.10811], [-0.13493, 11.14075]]]] } },
-    { type: "Feature", properties: { iso1A2: "GI", iso1A3: "GIB", iso1N3: "292", wikidata: "Q1410", nameEn: "Gibraltar", country: "GB", groups: ["Q12837", "BOTS", "039", "150", "UN"], callingCodes: ["350"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-5.34064, 36.03744], [-5.27801, 36.14942], [-5.33822, 36.15272], [-5.34536, 36.15501], [-5.40526, 36.15488], [-5.34064, 36.03744]]]] } },
-    { type: "Feature", properties: { iso1A2: "GL", iso1A3: "GRL", iso1N3: "304", wikidata: "Q223", nameEn: "Greenland", country: "DK", groups: ["Q1451600", "021", "003", "019", "UN"], callingCodes: ["299"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-49.33696, 84.57952], [-68.21821, 80.48551], [-77.52957, 77.23408], [-46.37635, 57.3249], [-9.68082, 72.73731], [-5.7106, 84.28058], [-49.33696, 84.57952]]]] } },
-    { type: "Feature", properties: { iso1A2: "GM", iso1A3: "GMB", iso1N3: "270", wikidata: "Q1005", nameEn: "The Gambia", groups: ["011", "202", "002", "UN"], callingCodes: ["220"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-15.14917, 13.57989], [-14.36795, 13.23033], [-13.79409, 13.34472], [-13.8955, 13.59126], [-14.34721, 13.46578], [-14.93719, 13.80173], [-15.36504, 13.79313], [-15.47902, 13.58758], [-17.43598, 13.59273], [-17.43966, 13.04579], [-16.74676, 13.06025], [-16.69343, 13.16791], [-15.80355, 13.16729], [-15.80478, 13.34832], [-15.26908, 13.37768], [-15.14917, 13.57989]]]] } },
-    { type: "Feature", properties: { iso1A2: "GN", iso1A3: "GIN", iso1N3: "324", wikidata: "Q1006", nameEn: "Guinea", groups: ["011", "202", "002", "UN"], callingCodes: ["224"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-11.37536, 12.40788], [-11.46267, 12.44559], [-11.91331, 12.42008], [-12.35415, 12.32758], [-12.87336, 12.51892], [-13.06603, 12.49342], [-13.05296, 12.64003], [-13.70523, 12.68013], [-13.7039, 12.60313], [-13.65089, 12.49515], [-13.64168, 12.42764], [-13.70851, 12.24978], [-13.92745, 12.24077], [-13.94589, 12.16869], [-13.7039, 12.00869], [-13.7039, 11.70195], [-14.09799, 11.63649], [-14.26623, 11.67486], [-14.31513, 11.60713], [-14.51173, 11.49708], [-14.66677, 11.51188], [-14.77786, 11.36323], [-14.95993, 10.99244], [-15.07174, 10.89557], [-15.96748, 10.162], [-14.36218, 8.64107], [-13.29911, 9.04245], [-13.18586, 9.0925], [-13.08953, 9.0409], [-12.94095, 9.26335], [-12.76788, 9.3133], [-12.47254, 9.86834], [-12.24262, 9.92386], [-12.12634, 9.87203], [-11.91023, 9.93927], [-11.89624, 9.99763], [-11.2118, 10.00098], [-10.6534, 9.29919], [-10.74484, 9.07998], [-10.5783, 9.06386], [-10.56197, 8.81225], [-10.47707, 8.67669], [-10.61422, 8.5314], [-10.70565, 8.29235], [-10.63934, 8.35326], [-10.54891, 8.31174], [-10.37257, 8.48941], [-10.27575, 8.48711], [-10.203, 8.47991], [-10.14579, 8.52665], [-10.05375, 8.50697], [-10.05873, 8.42578], [-9.77763, 8.54633], [-9.47415, 8.35195], [-9.50898, 8.18455], [-9.41445, 8.02448], [-9.44928, 7.9284], [-9.35724, 7.74111], [-9.37465, 7.62032], [-9.48161, 7.37122], [-9.41943, 7.41809], [-9.305, 7.42056], [-9.20798, 7.38109], [-9.18311, 7.30461], [-9.09107, 7.1985], [-8.93435, 7.2824], [-8.85724, 7.26019], [-8.8448, 7.35149], [-8.72789, 7.51429], [-8.67814, 7.69428], [-8.55874, 7.70167], [-8.55874, 7.62525], [-8.47114, 7.55676], [-8.4003, 7.6285], [-8.21374, 7.54466], [-8.09931, 7.78626], [-8.13414, 7.87991], [-8.06449, 8.04989], [-7.94695, 8.00925], [-7.99919, 8.11023], [-7.98675, 8.20134], [-8.062, 8.16071], [-8.2411, 8.24196], [-8.22991, 8.48438], [-7.92518, 8.50652], [-7.65653, 8.36873], [-7.69882, 8.66148], [-7.95503, 8.81146], [-7.92518, 8.99332], [-7.73862, 9.08422], [-7.90777, 9.20456], [-7.85056, 9.41812], [-8.03463, 9.39604], [-8.14657, 9.55062], [-8.09434, 9.86936], [-8.15652, 9.94288], [-8.11921, 10.04577], [-8.01225, 10.1021], [-7.97971, 10.17117], [-7.9578, 10.2703], [-8.10207, 10.44649], [-8.22711, 10.41722], [-8.32614, 10.69273], [-8.2667, 10.91762], [-8.35083, 11.06234], [-8.66923, 10.99397], [-8.40058, 11.37466], [-8.80854, 11.66715], [-8.94784, 12.34842], [-9.13689, 12.50875], [-9.38067, 12.48446], [-9.32097, 12.29009], [-9.63938, 12.18312], [-9.714, 12.0226], [-10.30604, 12.24634], [-10.71897, 11.91552], [-10.80355, 12.1053], [-10.99758, 12.24634], [-11.24136, 12.01286], [-11.50006, 12.17826], [-11.37536, 12.40788]]]] } },
-    { type: "Feature", properties: { iso1A2: "GP", iso1A3: "GLP", iso1N3: "312", wikidata: "Q17012", nameEn: "Guadeloupe", country: "FR", groups: ["Q3320166", "EU", "029", "003", "419", "019", "UN"], callingCodes: ["590"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-60.03183, 16.1129], [-61.60296, 16.73066], [-63.00549, 15.26166], [-60.03183, 16.1129]]]] } },
-    { type: "Feature", properties: { iso1A2: "GQ", iso1A3: "GNQ", iso1N3: "226", wikidata: "Q983", nameEn: "Equatorial Guinea", groups: ["017", "202", "002", "UN"], callingCodes: ["240"] }, geometry: { type: "MultiPolygon", coordinates: [[[[9.22018, 3.72052], [8.34397, 4.30689], [7.71762, 0.6674], [3.35016, -3.29031], [9.66433, 1.06723], [9.75065, 1.06753], [9.79648, 1.0019], [11.35307, 1.00251], [11.3561, 2.17217], [9.991, 2.16561], [9.90749, 2.20049], [9.89012, 2.20457], [9.84716, 2.24676], [9.83238, 2.29079], [9.83754, 2.32428], [9.82123, 2.35097], [9.81162, 2.33797], [9.22018, 3.72052]]]] } },
-    { type: "Feature", properties: { iso1A2: "GR", iso1A3: "GRC", iso1N3: "300", wikidata: "Q41", nameEn: "Greece", aliases: ["EL"], groups: ["EU", "039", "150", "UN"], callingCodes: ["30"] }, geometry: { type: "MultiPolygon", coordinates: [[[[26.03489, 40.73051], [26.0754, 40.72772], [26.08638, 40.73214], [26.12495, 40.74283], [26.12854, 40.77339], [26.15685, 40.80709], [26.21351, 40.83298], [26.20856, 40.86048], [26.26169, 40.9168], [26.29441, 40.89119], [26.28623, 40.93005], [26.32259, 40.94042], [26.35894, 40.94292], [26.33297, 40.98388], [26.3606, 41.02027], [26.31928, 41.07386], [26.32259, 41.24929], [26.39861, 41.25053], [26.5209, 41.33993], [26.5837, 41.32131], [26.62997, 41.34613], [26.61767, 41.42281], [26.59742, 41.48058], [26.59196, 41.60491], [26.5209, 41.62592], [26.47958, 41.67037], [26.35957, 41.71149], [26.30255, 41.70925], [26.2654, 41.71544], [26.22888, 41.74139], [26.21325, 41.73223], [26.16841, 41.74858], [26.06148, 41.70345], [26.07083, 41.64584], [26.15146, 41.60828], [26.14328, 41.55496], [26.17951, 41.55409], [26.176, 41.50072], [26.14796, 41.47533], [26.20288, 41.43943], [26.16548, 41.42278], [26.12926, 41.35878], [25.87919, 41.30526], [25.8266, 41.34563], [25.70507, 41.29209], [25.66183, 41.31316], [25.61042, 41.30614], [25.55082, 41.31667], [25.52394, 41.2798], [25.48187, 41.28506], [25.28322, 41.23411], [25.11611, 41.34212], [24.942, 41.38685], [24.90928, 41.40876], [24.86136, 41.39298], [24.82514, 41.4035], [24.8041, 41.34913], [24.71529, 41.41928], [24.61129, 41.42278], [24.52599, 41.56808], [24.30513, 41.51297], [24.27124, 41.57682], [24.18126, 41.51735], [24.10063, 41.54796], [24.06323, 41.53222], [24.06908, 41.46132], [23.96975, 41.44118], [23.91483, 41.47971], [23.89613, 41.45257], [23.80148, 41.43943], [23.76525, 41.40175], [23.67644, 41.41139], [23.63203, 41.37632], [23.52453, 41.40262], [23.40416, 41.39999], [23.33639, 41.36317], [23.31301, 41.40525], [23.22771, 41.37106], [23.21953, 41.33773], [23.1833, 41.31755], [22.93334, 41.34104], [22.81199, 41.3398], [22.76408, 41.32225], [22.74538, 41.16321], [22.71266, 41.13945], [22.65306, 41.18168], [22.62852, 41.14385], [22.58295, 41.11568], [22.5549, 41.13065], [22.42285, 41.11921], [22.26744, 41.16409], [22.17629, 41.15969], [22.1424, 41.12449], [22.06527, 41.15617], [21.90869, 41.09191], [21.91102, 41.04786], [21.7556, 40.92525], [21.69601, 40.9429], [21.57448, 40.86076], [21.53007, 40.90759], [21.41555, 40.9173], [21.35595, 40.87578], [21.25779, 40.86165], [21.21105, 40.8855], [21.15262, 40.85546], [20.97887, 40.85475], [20.98396, 40.79109], [20.95752, 40.76982], [20.98134, 40.76046], [21.05833, 40.66586], [21.03932, 40.56299], [20.96908, 40.51526], [20.94925, 40.46625], [20.83688, 40.47882], [20.7906, 40.42726], [20.78234, 40.35803], [20.71789, 40.27739], [20.67162, 40.09433], [20.62566, 40.0897], [20.61081, 40.07866], [20.55593, 40.06524], [20.51297, 40.08168], [20.48487, 40.06271], [20.42373, 40.06777], [20.37911, 39.99058], [20.31135, 39.99438], [20.41546, 39.82832], [20.41475, 39.81437], [20.38572, 39.78516], [20.30804, 39.81563], [20.29152, 39.80421], [20.31961, 39.72799], [20.27412, 39.69884], [20.22707, 39.67459], [20.22376, 39.64532], [20.15988, 39.652], [20.12956, 39.65805], [20.05189, 39.69112], [20.00957, 39.69227], [19.98042, 39.6504], [19.92466, 39.69533], [19.97622, 39.78684], [19.95905, 39.82857], [19.0384, 40.35325], [19.20409, 39.7532], [22.5213, 33.45682], [29.73302, 35.92555], [29.69611, 36.10365], [29.61805, 36.14179], [29.61002, 36.1731], [29.48192, 36.18377], [29.30783, 36.01033], [28.23708, 36.56812], [27.95037, 36.46155], [27.89482, 36.69898], [27.46117, 36.53789], [27.24613, 36.71622], [27.45627, 36.9008], [27.20312, 36.94571], [27.14757, 37.32], [26.95583, 37.64989], [26.99377, 37.69034], [27.16428, 37.72343], [27.05537, 37.9131], [26.21136, 38.17558], [26.24183, 38.44695], [26.32173, 38.48731], [26.21136, 38.65436], [26.61814, 38.81372], [26.70773, 39.0312], [26.43357, 39.43096], [25.94257, 39.39358], [25.61285, 40.17161], [26.04292, 40.3958], [25.94795, 40.72797], [26.03489, 40.73051]]]] } },
-    { type: "Feature", properties: { iso1A2: "GS", iso1A3: "SGS", iso1N3: "239", wikidata: "Q35086", nameEn: "South Georgia and South Sandwich Islands", country: "GB", groups: ["BOTS", "005", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["500"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-35.26394, -43.68272], [-53.39656, -59.87088], [-22.31757, -59.85974], [-35.26394, -43.68272]]]] } },
-    { type: "Feature", properties: { iso1A2: "GT", iso1A3: "GTM", iso1N3: "320", wikidata: "Q774", nameEn: "Guatemala", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["502"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-89.14985, 17.81563], [-90.98678, 17.81655], [-90.99199, 17.25192], [-91.43809, 17.25373], [-91.04436, 16.92175], [-90.69064, 16.70697], [-90.61212, 16.49832], [-90.40499, 16.40524], [-90.44567, 16.07573], [-91.73182, 16.07371], [-92.20983, 15.26077], [-92.0621, 15.07406], [-92.1454, 14.98143], [-92.1423, 14.88647], [-92.18161, 14.84147], [-92.1454, 14.6804], [-92.2261, 14.53423], [-92.37213, 14.39277], [-90.55276, 12.8866], [-90.11344, 13.73679], [-90.10505, 13.85104], [-89.88937, 14.0396], [-89.81807, 14.07073], [-89.76103, 14.02923], [-89.73251, 14.04133], [-89.75569, 14.07073], [-89.70756, 14.1537], [-89.61844, 14.21937], [-89.52397, 14.22628], [-89.50614, 14.26084], [-89.58814, 14.33165], [-89.57441, 14.41637], [-89.39028, 14.44561], [-89.34776, 14.43013], [-89.35189, 14.47553], [-89.23719, 14.58046], [-89.15653, 14.57802], [-89.13132, 14.71582], [-89.23467, 14.85596], [-89.15149, 14.97775], [-89.18048, 14.99967], [-89.15149, 15.07392], [-88.97343, 15.14039], [-88.32467, 15.63665], [-88.31459, 15.66942], [-88.24022, 15.69247], [-88.22552, 15.72294], [-88.20359, 16.03858], [-88.40779, 16.09624], [-88.95358, 15.88698], [-89.02415, 15.9063], [-89.17418, 15.90898], [-89.22683, 15.88619], [-89.15025, 17.04813], [-89.14985, 17.81563]]]] } },
-    { type: "Feature", properties: { iso1A2: "GU", iso1A3: "GUM", iso1N3: "316", wikidata: "Q16635", nameEn: "Guam", aliases: ["US-GU"], country: "US", groups: ["Q1352230", "Q153732", "057", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 671"] }, geometry: { type: "MultiPolygon", coordinates: [[[[146.25931, 13.85876], [143.82485, 13.92273], [144.61642, 12.82462], [146.25931, 13.85876]]]] } },
-    { type: "Feature", properties: { iso1A2: "GW", iso1A3: "GNB", iso1N3: "624", wikidata: "Q1007", nameEn: "Guinea-Bissau", groups: ["011", "202", "002", "UN"], callingCodes: ["245"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-14.31513, 11.60713], [-14.26623, 11.67486], [-14.09799, 11.63649], [-13.7039, 11.70195], [-13.7039, 12.00869], [-13.94589, 12.16869], [-13.92745, 12.24077], [-13.70851, 12.24978], [-13.64168, 12.42764], [-13.65089, 12.49515], [-13.7039, 12.60313], [-13.70523, 12.68013], [-15.17582, 12.6847], [-15.67302, 12.42974], [-16.20591, 12.46157], [-16.38191, 12.36449], [-16.70562, 12.34803], [-17.4623, 11.92379], [-15.96748, 10.162], [-15.07174, 10.89557], [-14.95993, 10.99244], [-14.77786, 11.36323], [-14.66677, 11.51188], [-14.51173, 11.49708], [-14.31513, 11.60713]]]] } },
-    { type: "Feature", properties: { iso1A2: "GY", iso1A3: "GUY", iso1N3: "328", wikidata: "Q734", nameEn: "Guyana", groups: ["005", "419", "019", "UN"], driveSide: "left", callingCodes: ["592"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-56.84822, 6.73257], [-59.54058, 8.6862], [-59.98508, 8.53046], [-59.85562, 8.35213], [-59.80661, 8.28906], [-59.83156, 8.23261], [-59.97059, 8.20791], [-60.02407, 8.04557], [-60.38056, 7.8302], [-60.51959, 7.83373], [-60.64793, 7.56877], [-60.71923, 7.55817], [-60.59802, 7.33194], [-60.63367, 7.25061], [-60.54098, 7.14804], [-60.44116, 7.20817], [-60.28074, 7.1162], [-60.39419, 6.94847], [-60.54873, 6.8631], [-61.13632, 6.70922], [-61.20762, 6.58174], [-61.15058, 6.19558], [-61.4041, 5.95304], [-60.73204, 5.20931], [-60.32352, 5.21299], [-60.20944, 5.28754], [-59.98129, 5.07097], [-60.04189, 4.69801], [-60.15953, 4.53456], [-59.78878, 4.45637], [-59.69361, 4.34069], [-59.73353, 4.20399], [-59.51963, 3.91951], [-59.86899, 3.57089], [-59.79769, 3.37162], [-59.99733, 2.92312], [-59.91177, 2.36759], [-59.7264, 2.27497], [-59.74066, 1.87596], [-59.25583, 1.40559], [-58.92072, 1.31293], [-58.84229, 1.17749], [-58.53571, 1.29154], [-58.4858, 1.48399], [-58.33887, 1.58014], [-58.01873, 1.51966], [-57.97336, 1.64566], [-57.77281, 1.73344], [-57.55743, 1.69605], [-57.35073, 1.98327], [-57.23981, 1.95808], [-57.09109, 2.01854], [-57.07092, 1.95304], [-56.7659, 1.89509], [-56.47045, 1.95135], [-56.55439, 2.02003], [-56.70519, 2.02964], [-57.35891, 3.32121], [-58.0307, 3.95513], [-57.8699, 4.89394], [-57.37442, 5.0208], [-57.22536, 5.15605], [-57.31629, 5.33714], [-56.84822, 6.73257]]]] } },
-    { type: "Feature", properties: { iso1A2: "HK", iso1A3: "HKG", iso1N3: "344", wikidata: "Q8646", nameEn: "Hong Kong", country: "CN", groups: ["030", "142", "UN"], driveSide: "left", callingCodes: ["852"] }, geometry: { type: "MultiPolygon", coordinates: [[[[113.92195, 22.13873], [114.50148, 22.15017], [114.44998, 22.55977], [114.25154, 22.55977], [114.22888, 22.5436], [114.22185, 22.55343], [114.20655, 22.55706], [114.18338, 22.55444], [114.17247, 22.55944], [114.1597, 22.56041], [114.15123, 22.55163], [114.1482, 22.54091], [114.13823, 22.54319], [114.12665, 22.54003], [114.11656, 22.53415], [114.11181, 22.52878], [114.1034, 22.5352], [114.09692, 22.53435], [114.09048, 22.53716], [114.08606, 22.53276], [114.07817, 22.52997], [114.07267, 22.51855], [114.06272, 22.51617], [114.05729, 22.51104], [114.05438, 22.5026], [114.03113, 22.5065], [113.86771, 22.42972], [113.81621, 22.2163], [113.83338, 22.1826], [113.92195, 22.13873]]]] } },
-    { type: "Feature", properties: { iso1A2: "HM", iso1A3: "HMD", iso1N3: "334", wikidata: "Q131198", nameEn: "Heard Island and McDonald Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[71.08716, -53.87687], [75.44182, -53.99822], [72.87012, -51.48322], [71.08716, -53.87687]]]] } },
-    { type: "Feature", properties: { iso1A2: "HN", iso1A3: "HND", iso1N3: "340", wikidata: "Q783", nameEn: "Honduras", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["504"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-83.86109, 17.73736], [-88.20359, 16.03858], [-88.22552, 15.72294], [-88.24022, 15.69247], [-88.31459, 15.66942], [-88.32467, 15.63665], [-88.97343, 15.14039], [-89.15149, 15.07392], [-89.18048, 14.99967], [-89.15149, 14.97775], [-89.23467, 14.85596], [-89.13132, 14.71582], [-89.15653, 14.57802], [-89.23719, 14.58046], [-89.35189, 14.47553], [-89.34776, 14.43013], [-89.04187, 14.33644], [-88.94608, 14.20207], [-88.85785, 14.17763], [-88.815, 14.11652], [-88.73182, 14.10919], [-88.70661, 14.04317], [-88.49738, 13.97224], [-88.48982, 13.86458], [-88.25791, 13.91108], [-88.23018, 13.99915], [-88.07641, 13.98447], [-88.00331, 13.86948], [-87.7966, 13.91353], [-87.68821, 13.80829], [-87.73106, 13.75443], [-87.78148, 13.52906], [-87.71657, 13.50577], [-87.72115, 13.46083], [-87.73841, 13.44169], [-87.77354, 13.45767], [-87.83467, 13.44655], [-87.84675, 13.41078], [-87.80177, 13.35689], [-87.73714, 13.32715], [-87.69751, 13.25228], [-87.55124, 13.12523], [-87.37107, 12.98646], [-87.06306, 13.00892], [-87.03785, 12.98682], [-86.93197, 13.05313], [-86.93383, 13.18677], [-86.87066, 13.30641], [-86.71267, 13.30348], [-86.76812, 13.79605], [-86.35219, 13.77157], [-86.14801, 14.04317], [-86.00685, 14.08474], [-86.03458, 13.99181], [-85.75477, 13.8499], [-85.73964, 13.9698], [-85.45762, 14.11304], [-85.32149, 14.2562], [-85.18602, 14.24929], [-85.1575, 14.53934], [-84.90082, 14.80489], [-84.82596, 14.82212], [-84.70119, 14.68078], [-84.48373, 14.63249], [-84.10584, 14.76353], [-83.89551, 14.76697], [-83.62101, 14.89448], [-83.49268, 15.01158], [-83.13724, 15.00002], [-83.04763, 15.03256], [-82.06974, 14.49418], [-81.58685, 18.0025], [-83.86109, 17.73736]]]] } },
-    { type: "Feature", properties: { iso1A2: "HR", iso1A3: "HRV", iso1N3: "191", wikidata: "Q224", nameEn: "Croatia", groups: ["EU", "039", "150", "UN"], callingCodes: ["385"] }, geometry: { type: "MultiPolygon", coordinates: [[[[17.6444, 42.88641], [17.5392, 42.92787], [17.70879, 42.97223], [17.64268, 43.08595], [17.46986, 43.16559], [17.286, 43.33065], [17.25579, 43.40353], [17.29699, 43.44542], [17.24411, 43.49376], [17.15828, 43.49376], [17.00585, 43.58037], [16.80736, 43.76011], [16.75316, 43.77157], [16.70922, 43.84887], [16.55472, 43.95326], [16.50528, 44.0244], [16.43629, 44.02826], [16.43662, 44.07523], [16.36864, 44.08263], [16.18688, 44.27012], [16.21346, 44.35231], [16.12969, 44.38275], [16.16814, 44.40679], [16.10566, 44.52586], [16.03012, 44.55572], [16.00884, 44.58605], [16.05828, 44.61538], [15.89348, 44.74964], [15.8255, 44.71501], [15.72584, 44.82334], [15.79472, 44.8455], [15.76096, 44.87045], [15.74723, 44.96818], [15.78568, 44.97401], [15.74585, 45.0638], [15.78842, 45.11519], [15.76371, 45.16508], [15.83512, 45.22459], [15.98412, 45.23088], [16.12153, 45.09616], [16.29036, 44.99732], [16.35404, 45.00241], [16.35863, 45.03529], [16.3749, 45.05206], [16.38219, 45.05139], [16.38309, 45.05955], [16.40023, 45.1147], [16.4634, 45.14522], [16.49155, 45.21153], [16.52982, 45.22713], [16.5501, 45.2212], [16.56559, 45.22307], [16.60194, 45.23042], [16.64962, 45.20714], [16.74845, 45.20393], [16.78219, 45.19002], [16.81137, 45.18434], [16.83804, 45.18951], [16.92405, 45.27607], [16.9385, 45.22742], [17.0415, 45.20759], [17.18438, 45.14764], [17.24325, 45.146], [17.25131, 45.14957], [17.26815, 45.18444], [17.32092, 45.16246], [17.33573, 45.14521], [17.41229, 45.13335], [17.4498, 45.16119], [17.45615, 45.12523], [17.47589, 45.12656], [17.51469, 45.10791], [17.59104, 45.10816], [17.66571, 45.13408], [17.84826, 45.04489], [17.87148, 45.04645], [17.93706, 45.08016], [17.97336, 45.12245], [17.97834, 45.13831], [17.99479, 45.14958], [18.01594, 45.15163], [18.03121, 45.12632], [18.1624, 45.07654], [18.24387, 45.13699], [18.32077, 45.1021], [18.41896, 45.11083], [18.47939, 45.05871], [18.65723, 45.07544], [18.78357, 44.97741], [18.80661, 44.93561], [18.76369, 44.93707], [18.76347, 44.90669], [18.8704, 44.85097], [19.01994, 44.85493], [18.98957, 44.90645], [19.02871, 44.92541], [19.06853, 44.89915], [19.15573, 44.95409], [19.05205, 44.97692], [19.1011, 45.01191], [19.07952, 45.14668], [19.14063, 45.12972], [19.19144, 45.17863], [19.43589, 45.17137], [19.41941, 45.23475], [19.28208, 45.23813], [19.10774, 45.29547], [18.97446, 45.37528], [18.99918, 45.49333], [19.08364, 45.48804], [19.07471, 45.53086], [18.94562, 45.53712], [18.88776, 45.57253], [18.96691, 45.66731], [18.90305, 45.71863], [18.85783, 45.85493], [18.81394, 45.91329], [18.80211, 45.87995], [18.6792, 45.92057], [18.57483, 45.80772], [18.44368, 45.73972], [18.12439, 45.78905], [18.08869, 45.76511], [17.99805, 45.79671], [17.87377, 45.78522], [17.66545, 45.84207], [17.56821, 45.93728], [17.35672, 45.95209], [17.14592, 46.16697], [16.8903, 46.28122], [16.8541, 46.36255], [16.7154, 46.39523], [16.6639, 46.45203], [16.59527, 46.47524], [16.52604, 46.47831], [16.5007, 46.49644], [16.44036, 46.5171], [16.38771, 46.53608], [16.37193, 46.55008], [16.29793, 46.5121], [16.26733, 46.51505], [16.26759, 46.50566], [16.23961, 46.49653], [16.25124, 46.48067], [16.27398, 46.42875], [16.27329, 46.41467], [16.30162, 46.40437], [16.30233, 46.37837], [16.18824, 46.38282], [16.14859, 46.40547], [16.05281, 46.39141], [16.05065, 46.3833], [16.07314, 46.36458], [16.07616, 46.3463], [15.97965, 46.30652], [15.79284, 46.25811], [15.78817, 46.21719], [15.75479, 46.20336], [15.75436, 46.21969], [15.67395, 46.22478], [15.6434, 46.21396], [15.64904, 46.19229], [15.59909, 46.14761], [15.6083, 46.11992], [15.62317, 46.09103], [15.72977, 46.04682], [15.71246, 46.01196], [15.70327, 46.00015], [15.70636, 45.92116], [15.67967, 45.90455], [15.68383, 45.88867], [15.68232, 45.86819], [15.70411, 45.8465], [15.66662, 45.84085], [15.64185, 45.82915], [15.57952, 45.84953], [15.52234, 45.82195], [15.47325, 45.8253], [15.47531, 45.79802], [15.40836, 45.79491], [15.25423, 45.72275], [15.30872, 45.69014], [15.34919, 45.71623], [15.4057, 45.64727], [15.38952, 45.63682], [15.34214, 45.64702], [15.34695, 45.63382], [15.31027, 45.6303], [15.27747, 45.60504], [15.29837, 45.5841], [15.30249, 45.53224], [15.38188, 45.48752], [15.33051, 45.45258], [15.27758, 45.46678], [15.16862, 45.42309], [15.05187, 45.49079], [15.02385, 45.48533], [14.92266, 45.52788], [14.90554, 45.47769], [14.81992, 45.45913], [14.80124, 45.49515], [14.71718, 45.53442], [14.68605, 45.53006], [14.69694, 45.57366], [14.59576, 45.62812], [14.60977, 45.66403], [14.57397, 45.67165], [14.53816, 45.6205], [14.5008, 45.60852], [14.49769, 45.54424], [14.36693, 45.48642], [14.32487, 45.47142], [14.27681, 45.4902], [14.26611, 45.48239], [14.24239, 45.50607], [14.22371, 45.50388], [14.20348, 45.46896], [14.07116, 45.48752], [14.00578, 45.52352], [13.96063, 45.50825], [13.99488, 45.47551], [13.97309, 45.45258], [13.90771, 45.45149], [13.88124, 45.42637], [13.81742, 45.43729], [13.7785, 45.46787], [13.67398, 45.4436], [13.62902, 45.45898], [13.56979, 45.4895], [13.45644, 45.59464], [13.05142, 45.33128], [13.12821, 44.48877], [16.15283, 42.18525], [18.45131, 42.21682], [18.54128, 42.39171], [18.52152, 42.42302], [18.43588, 42.48556], [18.44307, 42.51077], [18.43735, 42.55921], [18.36197, 42.61423], [18.24318, 42.6112], [17.88201, 42.83668], [17.80854, 42.9182], [17.7948, 42.89556], [17.68151, 42.92725], [17.6444, 42.88641]]]] } },
-    { type: "Feature", properties: { iso1A2: "HT", iso1A3: "HTI", iso1N3: "332", wikidata: "Q790", nameEn: "Haiti", aliases: ["RH"], groups: ["029", "003", "419", "019", "UN"], callingCodes: ["509"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.71885, 18.78423], [-71.72624, 18.87802], [-71.77766, 18.95007], [-71.88102, 18.95007], [-71.74088, 19.0437], [-71.71088, 19.08353], [-71.69938, 19.10916], [-71.65337, 19.11759], [-71.62642, 19.21212], [-71.73229, 19.26686], [-71.77766, 19.33823], [-71.69448, 19.37866], [-71.6802, 19.45008], [-71.71268, 19.53374], [-71.71449, 19.55364], [-71.7429, 19.58445], [-71.75865, 19.70231], [-71.77419, 19.73128], [-72.38946, 20.27111], [-73.37289, 20.43199], [-74.7289, 18.71009], [-74.76465, 18.06252], [-72.29523, 17.48026], [-71.75671, 18.03456], [-71.73783, 18.07177], [-71.74994, 18.11115], [-71.75465, 18.14405], [-71.78271, 18.18302], [-71.69952, 18.34101], [-71.90875, 18.45821], [-71.88102, 18.50125], [-72.00201, 18.62312], [-71.95412, 18.64939], [-71.82556, 18.62551], [-71.71885, 18.78423]]]] } },
-    { type: "Feature", properties: { iso1A2: "HU", iso1A3: "HUN", iso1N3: "348", wikidata: "Q28", nameEn: "Hungary", groups: ["EU", "151", "150", "UN"], callingCodes: ["36"] }, geometry: { type: "MultiPolygon", coordinates: [[[[21.72525, 48.34628], [21.67134, 48.3989], [21.6068, 48.50365], [21.44063, 48.58456], [21.11516, 48.49546], [20.83248, 48.5824], [20.5215, 48.53336], [20.29943, 48.26104], [20.24312, 48.2784], [19.92452, 48.1283], [19.63338, 48.25006], [19.52489, 48.19791], [19.47957, 48.09437], [19.28182, 48.08336], [19.23924, 48.0595], [19.01952, 48.07052], [18.82176, 48.04206], [18.76134, 47.97499], [18.76821, 47.87469], [18.8506, 47.82308], [18.74074, 47.8157], [18.66521, 47.76772], [18.56496, 47.76588], [18.29305, 47.73541], [18.02938, 47.75665], [17.71215, 47.7548], [17.23699, 48.02094], [17.16001, 48.00636], [17.09786, 47.97336], [17.11022, 47.92461], [17.08275, 47.87719], [17.00997, 47.86245], [17.07039, 47.81129], [17.05048, 47.79377], [17.08893, 47.70928], [16.87538, 47.68895], [16.86509, 47.72268], [16.82938, 47.68432], [16.7511, 47.67878], [16.72089, 47.73469], [16.65679, 47.74197], [16.61183, 47.76171], [16.54779, 47.75074], [16.53514, 47.73837], [16.55129, 47.72268], [16.4222, 47.66537], [16.58699, 47.61772], [16.64193, 47.63114], [16.71059, 47.52692], [16.64821, 47.50155], [16.6718, 47.46139], [16.57152, 47.40868], [16.52414, 47.41007], [16.49908, 47.39416], [16.45104, 47.41181], [16.47782, 47.25918], [16.44142, 47.25079], [16.43663, 47.21127], [16.41739, 47.20649], [16.42801, 47.18422], [16.4523, 47.18812], [16.46442, 47.16845], [16.44932, 47.14418], [16.52863, 47.13974], [16.46134, 47.09395], [16.52176, 47.05747], [16.43936, 47.03548], [16.51369, 47.00084], [16.28202, 47.00159], [16.27594, 46.9643], [16.22403, 46.939], [16.19904, 46.94134], [16.10983, 46.867], [16.14365, 46.8547], [16.15711, 46.85434], [16.21892, 46.86961], [16.2365, 46.87775], [16.2941, 46.87137], [16.34547, 46.83836], [16.3408, 46.80641], [16.31303, 46.79838], [16.30966, 46.7787], [16.37816, 46.69975], [16.42641, 46.69228], [16.41863, 46.66238], [16.38594, 46.6549], [16.39217, 46.63673], [16.50139, 46.56684], [16.52885, 46.53303], [16.52604, 46.5051], [16.59527, 46.47524], [16.6639, 46.45203], [16.7154, 46.39523], [16.8541, 46.36255], [16.8903, 46.28122], [17.14592, 46.16697], [17.35672, 45.95209], [17.56821, 45.93728], [17.66545, 45.84207], [17.87377, 45.78522], [17.99805, 45.79671], [18.08869, 45.76511], [18.12439, 45.78905], [18.44368, 45.73972], [18.57483, 45.80772], [18.6792, 45.92057], [18.80211, 45.87995], [18.81394, 45.91329], [18.99712, 45.93537], [19.01284, 45.96529], [19.0791, 45.96458], [19.10388, 46.04015], [19.14543, 45.9998], [19.28826, 45.99694], [19.52473, 46.1171], [19.56113, 46.16824], [19.66007, 46.19005], [19.81491, 46.1313], [19.93508, 46.17553], [20.01816, 46.17696], [20.03533, 46.14509], [20.09713, 46.17315], [20.26068, 46.12332], [20.28324, 46.1438], [20.35573, 46.16629], [20.45377, 46.14405], [20.49718, 46.18721], [20.63863, 46.12728], [20.76085, 46.21002], [20.74574, 46.25467], [20.86797, 46.28884], [21.06572, 46.24897], [21.16872, 46.30118], [21.28061, 46.44941], [21.26929, 46.4993], [21.33214, 46.63035], [21.43926, 46.65109], [21.5151, 46.72147], [21.48935, 46.7577], [21.52028, 46.84118], [21.59307, 46.86935], [21.59581, 46.91628], [21.68645, 46.99595], [21.648, 47.03902], [21.78395, 47.11104], [21.94463, 47.38046], [22.01055, 47.37767], [22.03389, 47.42508], [22.00917, 47.50492], [22.31816, 47.76126], [22.41979, 47.7391], [22.46559, 47.76583], [22.67247, 47.7871], [22.76617, 47.8417], [22.77991, 47.87211], [22.89849, 47.95851], [22.84276, 47.98602], [22.87847, 48.04665], [22.81804, 48.11363], [22.73427, 48.12005], [22.66835, 48.09162], [22.58733, 48.10813], [22.59007, 48.15121], [22.49806, 48.25189], [22.38133, 48.23726], [22.2083, 48.42534], [22.14689, 48.4005], [21.83339, 48.36242], [21.8279, 48.33321], [21.72525, 48.34628]]]] } },
-    { type: "Feature", properties: { iso1A2: "IC", wikidata: "Q5813", nameEn: "Canary Islands", country: "ES", groups: ["Q3320166", "Q105472", "EU", "039", "150", "UN"], isoStatus: "excRes", callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-12.00985, 30.24121], [-25.3475, 27.87574], [-14.43883, 27.02969], [-12.00985, 30.24121]]]] } },
-    { type: "Feature", properties: { iso1A2: "ID", iso1A3: "IDN", iso1N3: "360", wikidata: "Q252", nameEn: "Indonesia", aliases: ["RI"] }, geometry: null },
-    { type: "Feature", geometry: { type: "MultiPolygon", coordinates: [[[[-6.26218, 54.09785], [-6.29003, 54.11278], [-6.32694, 54.09337], [-6.36279, 54.11248], [-6.36605, 54.07234], [-6.47849, 54.06947], [-6.62842, 54.03503], [-6.66264, 54.0666], [-6.6382, 54.17071], [-6.70175, 54.20218], [-6.74575, 54.18788], [-6.81583, 54.22791], [-6.85179, 54.29176], [-6.87775, 54.34682], [-7.02034, 54.4212], [-7.19145, 54.31296], [-7.14908, 54.22732], [-7.25012, 54.20063], [-7.26316, 54.13863], [-7.29493, 54.12013], [-7.29687, 54.1354], [-7.28017, 54.16714], [-7.29157, 54.17191], [-7.34005, 54.14698], [-7.30553, 54.11869], [-7.32834, 54.11475], [-7.44567, 54.1539], [-7.4799, 54.12239], [-7.55812, 54.12239], [-7.69501, 54.20731], [-7.81397, 54.20159], [-7.8596, 54.21779], [-7.87101, 54.29299], [-8.04555, 54.36292], [-8.179, 54.46763], [-8.04538, 54.48941], [-7.99812, 54.54427], [-7.8596, 54.53671], [-7.70315, 54.62077], [-7.93293, 54.66603], [-7.83352, 54.73854], [-7.75041, 54.7103], [-7.64449, 54.75265], [-7.54671, 54.74606], [-7.54508, 54.79401], [-7.47626, 54.83084], [-7.4473, 54.87003], [-7.44404, 54.9403], [-7.40004, 54.94498], [-7.4033, 55.00391], [-7.34464, 55.04688], [-7.2471, 55.06933], [-6.34755, 55.49206], [-7.75229, 55.93854], [-11.75, 54], [-11, 51], [-6.03913, 51.13217], [-5.37267, 53.63269], [-6.26218, 54.09785]]]] }, properties: { iso1A2: "IE", iso1A3: "IRL", iso1N3: "372", wikidata: "Q27", nameEn: "Republic of Ireland", groups: ["EU", "Q22890", "154", "150", "UN"], driveSide: "left", callingCodes: ["353"] } },
-    { type: "Feature", properties: { iso1A2: "IL", iso1A3: "ISR", iso1N3: "376", wikidata: "Q801", nameEn: "Israel", groups: ["145", "142", "UN"], callingCodes: ["972"] }, geometry: { type: "MultiPolygon", coordinates: [[[[34.052, 31.46619], [34.29262, 31.70393], [34.48681, 31.59711], [34.56797, 31.54197], [34.48892, 31.48365], [34.40077, 31.40926], [34.36505, 31.36404], [34.37381, 31.30598], [34.36523, 31.28963], [34.29417, 31.24194], [34.26742, 31.21998], [34.92298, 29.45305], [34.97718, 29.54294], [34.98207, 29.58147], [35.02147, 29.66343], [35.14108, 30.07374], [35.19183, 30.34636], [35.16218, 30.43535], [35.19595, 30.50297], [35.21379, 30.60401], [35.29311, 30.71365], [35.33456, 30.81224], [35.33984, 30.8802], [35.41371, 30.95565], [35.43658, 31.12444], [35.40316, 31.25535], [35.47672, 31.49578], [35.39675, 31.49572], [35.22921, 31.37445], [35.13033, 31.3551], [35.02459, 31.35979], [34.92571, 31.34337], [34.88932, 31.37093], [34.87833, 31.39321], [34.89756, 31.43891], [34.93258, 31.47816], [34.94356, 31.50743], [34.9415, 31.55601], [34.95249, 31.59813], [35.00879, 31.65426], [35.08226, 31.69107], [35.10782, 31.71594], [35.11895, 31.71454], [35.12933, 31.7325], [35.13931, 31.73012], [35.15119, 31.73634], [35.15474, 31.73352], [35.16478, 31.73242], [35.18023, 31.72067], [35.20538, 31.72388], [35.21937, 31.71578], [35.22392, 31.71899], [35.23972, 31.70896], [35.24315, 31.71244], [35.2438, 31.7201], [35.24981, 31.72543], [35.25182, 31.73945], [35.26319, 31.74846], [35.25225, 31.7678], [35.26058, 31.79064], [35.25573, 31.81362], [35.26404, 31.82567], [35.251, 31.83085], [35.25753, 31.8387], [35.24816, 31.8458], [35.2304, 31.84222], [35.2249, 31.85433], [35.22817, 31.8638], [35.22567, 31.86745], [35.22294, 31.87889], [35.22014, 31.88264], [35.2136, 31.88241], [35.21276, 31.88153], [35.21016, 31.88237], [35.20945, 31.8815], [35.20791, 31.8821], [35.20673, 31.88151], [35.20381, 31.86716], [35.21128, 31.863], [35.216, 31.83894], [35.21469, 31.81835], [35.19461, 31.82687], [35.18169, 31.82542], [35.18603, 31.80901], [35.14174, 31.81325], [35.07677, 31.85627], [35.05617, 31.85685], [35.01978, 31.82944], [34.9724, 31.83352], [34.99712, 31.85569], [35.03489, 31.85919], [35.03978, 31.89276], [35.03489, 31.92448], [35.00124, 31.93264], [34.98682, 31.96935], [35.00261, 32.027], [34.9863, 32.09551], [34.99437, 32.10962], [34.98507, 32.12606], [34.99039, 32.14626], [34.96009, 32.17503], [34.95703, 32.19522], [34.98885, 32.20758], [35.01841, 32.23981], [35.02939, 32.2671], [35.01119, 32.28684], [35.01772, 32.33863], [35.04243, 32.35008], [35.05142, 32.3667], [35.0421, 32.38242], [35.05311, 32.4024], [35.05423, 32.41754], [35.07059, 32.4585], [35.08564, 32.46948], [35.09236, 32.47614], [35.10024, 32.47856], [35.10882, 32.4757], [35.15937, 32.50466], [35.2244, 32.55289], [35.25049, 32.52453], [35.29306, 32.50947], [35.30685, 32.51024], [35.35212, 32.52047], [35.40224, 32.50136], [35.42034, 32.46009], [35.41598, 32.45593], [35.41048, 32.43706], [35.42078, 32.41562], [35.55807, 32.38674], [35.55494, 32.42687], [35.57485, 32.48669], [35.56614, 32.64393], [35.59813, 32.65159], [35.61669, 32.67999], [35.66527, 32.681], [35.68467, 32.70715], [35.75983, 32.74803], [35.78745, 32.77938], [35.83758, 32.82817], [35.84021, 32.8725], [35.87012, 32.91976], [35.89298, 32.9456], [35.87188, 32.98028], [35.84802, 33.1031], [35.81911, 33.11077], [35.81911, 33.1336], [35.84285, 33.16673], [35.83846, 33.19397], [35.81647, 33.2028], [35.81295, 33.24841], [35.77513, 33.27342], [35.813, 33.3172], [35.77477, 33.33609], [35.62019, 33.27278], [35.62283, 33.24226], [35.58502, 33.26653], [35.58326, 33.28381], [35.56523, 33.28969], [35.55555, 33.25844], [35.54544, 33.25513], [35.54808, 33.236], [35.5362, 33.23196], [35.54228, 33.19865], [35.52573, 33.11921], [35.50335, 33.114], [35.50272, 33.09056], [35.448, 33.09264], [35.43059, 33.06659], [35.35223, 33.05617], [35.31429, 33.10515], [35.1924, 33.08743], [35.10645, 33.09318], [34.78515, 33.20368], [33.62659, 31.82938], [34.052, 31.46619]]]] } },
-    { type: "Feature", properties: { iso1A2: "IM", iso1A3: "IMN", iso1N3: "833", wikidata: "Q9676", nameEn: "Isle of Man", country: "GB", groups: ["Q185086", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01624", "44 07624", "44 07524", "44 07924"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-3.98763, 54.07351], [-4.1819, 54.57861], [-5.6384, 53.81157], [-3.98763, 54.07351]]]] } },
-    { type: "Feature", properties: { iso1A2: "IN", iso1A3: "IND", iso1N3: "356", wikidata: "Q668", nameEn: "India" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "IO", iso1A3: "IOT", iso1N3: "086", wikidata: "Q43448", nameEn: "British Indian Ocean Territory", country: "GB" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "IQ", iso1A3: "IRQ", iso1N3: "368", wikidata: "Q796", nameEn: "Iraq", groups: ["145", "142", "UN"], callingCodes: ["964"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.78887, 37.38615], [42.56725, 37.14878], [42.35724, 37.10998], [42.36697, 37.0627], [41.81736, 36.58782], [41.40058, 36.52502], [41.28864, 36.35368], [41.2564, 36.06012], [41.37027, 35.84095], [41.38184, 35.62502], [41.26569, 35.42708], [41.21654, 35.1508], [41.2345, 34.80049], [41.12388, 34.65742], [40.97676, 34.39788], [40.64314, 34.31604], [38.79171, 33.37328], [39.08202, 32.50304], [38.98762, 32.47694], [39.04251, 32.30203], [39.26157, 32.35555], [39.29903, 32.23259], [40.01521, 32.05667], [42.97601, 30.72204], [42.97796, 30.48295], [44.72255, 29.19736], [46.42415, 29.05947], [46.5527, 29.10283], [46.89695, 29.50584], [47.15166, 30.01044], [47.37192, 30.10421], [47.7095, 30.10453], [48.01114, 29.98906], [48.06782, 30.02906], [48.17332, 30.02448], [48.40479, 29.85763], [48.59531, 29.66815], [48.83867, 29.78572], [48.61441, 29.93675], [48.51011, 29.96238], [48.44785, 30.00148], [48.4494, 30.04456], [48.43384, 30.08233], [48.38869, 30.11062], [48.38714, 30.13485], [48.41671, 30.17254], [48.41117, 30.19846], [48.26393, 30.3408], [48.24385, 30.33846], [48.21279, 30.31644], [48.19425, 30.32796], [48.18321, 30.39703], [48.14585, 30.44133], [48.02443, 30.4789], [48.03221, 30.9967], [47.68219, 31.00004], [47.6804, 31.39086], [47.86337, 31.78422], [47.64771, 32.07666], [47.52474, 32.15972], [47.57144, 32.20583], [47.37529, 32.47808], [47.17218, 32.45393], [46.46788, 32.91992], [46.32298, 32.9731], [46.17198, 32.95612], [46.09103, 32.98354], [46.15175, 33.07229], [46.03966, 33.09577], [46.05367, 33.13097], [46.11905, 33.11924], [46.20623, 33.20395], [45.99919, 33.5082], [45.86687, 33.49263], [45.96183, 33.55751], [45.89801, 33.63661], [45.77814, 33.60938], [45.50261, 33.94968], [45.42789, 33.9458], [45.41077, 33.97421], [45.47264, 34.03099], [45.56176, 34.15088], [45.58667, 34.30147], [45.53552, 34.35148], [45.49171, 34.3439], [45.46697, 34.38221], [45.43879, 34.45949], [45.51883, 34.47692], [45.53219, 34.60441], [45.59074, 34.55558], [45.60224, 34.55057], [45.73923, 34.54416], [45.70031, 34.69277], [45.65672, 34.7222], [45.68284, 34.76624], [45.70031, 34.82322], [45.73641, 34.83975], [45.79682, 34.85133], [45.78904, 34.91135], [45.86532, 34.89858], [45.89477, 34.95805], [45.87864, 35.03441], [45.92173, 35.0465], [45.92203, 35.09538], [45.93108, 35.08148], [45.94756, 35.09188], [46.06508, 35.03699], [46.07747, 35.0838], [46.11763, 35.07551], [46.19116, 35.11097], [46.15642, 35.1268], [46.16229, 35.16984], [46.19738, 35.18536], [46.18457, 35.22561], [46.11367, 35.23729], [46.15474, 35.2883], [46.13152, 35.32548], [46.05358, 35.38568], [45.98453, 35.49848], [46.01518, 35.52012], [45.97584, 35.58132], [46.03028, 35.57416], [46.01307, 35.59756], [46.0165, 35.61501], [45.99452, 35.63574], [46.0117, 35.65059], [46.01631, 35.69139], [46.23736, 35.71414], [46.34166, 35.78363], [46.32921, 35.82655], [46.17198, 35.8013], [46.08325, 35.8581], [45.94711, 35.82218], [45.89784, 35.83708], [45.81442, 35.82107], [45.76145, 35.79898], [45.6645, 35.92872], [45.60018, 35.96069], [45.55245, 35.99943], [45.46594, 36.00042], [45.38275, 35.97156], [45.33916, 35.99424], [45.37652, 36.06222], [45.37312, 36.09917], [45.32235, 36.17383], [45.30038, 36.27769], [45.26261, 36.3001], [45.27394, 36.35846], [45.23953, 36.43257], [45.11811, 36.40751], [45.00759, 36.5402], [45.06985, 36.62645], [45.06985, 36.6814], [45.01537, 36.75128], [44.84725, 36.77622], [44.83479, 36.81362], [44.90173, 36.86096], [44.91199, 36.91468], [44.89862, 37.01897], [44.81611, 37.04383], [44.75229, 37.11958], [44.78319, 37.1431], [44.76698, 37.16162], [44.63179, 37.19229], [44.42631, 37.05825], [44.38117, 37.05825], [44.35315, 37.04955], [44.35937, 37.02843], [44.30645, 36.97373], [44.25975, 36.98119], [44.18503, 37.09551], [44.22239, 37.15756], [44.27998, 37.16501], [44.2613, 37.25055], [44.13521, 37.32486], [44.02002, 37.33229], [43.90949, 37.22453], [43.84878, 37.22205], [43.82699, 37.19477], [43.8052, 37.22825], [43.7009, 37.23692], [43.63085, 37.21957], [43.56702, 37.25675], [43.50787, 37.24436], [43.33508, 37.33105], [43.30083, 37.30629], [43.11403, 37.37436], [42.93705, 37.32015], [42.78887, 37.38615]]]] } },
-    { type: "Feature", properties: { iso1A2: "IR", iso1A3: "IRN", iso1N3: "364", wikidata: "Q794", nameEn: "Iran", groups: ["034", "142", "UN"], callingCodes: ["98"] }, geometry: { type: "MultiPolygon", coordinates: [[[[44.96746, 39.42998], [44.88916, 39.59653], [44.81043, 39.62677], [44.71806, 39.71124], [44.65422, 39.72163], [44.6137, 39.78393], [44.47298, 39.68788], [44.48111, 39.61579], [44.41849, 39.56659], [44.42832, 39.4131], [44.37921, 39.4131], [44.29818, 39.378], [44.22452, 39.4169], [44.03667, 39.39223], [44.1043, 39.19842], [44.20946, 39.13975], [44.18863, 38.93881], [44.30322, 38.81581], [44.26155, 38.71427], [44.28065, 38.6465], [44.32058, 38.62752], [44.3207, 38.49799], [44.3119, 38.37887], [44.38309, 38.36117], [44.44386, 38.38295], [44.50115, 38.33939], [44.42476, 38.25763], [44.22509, 37.88859], [44.3883, 37.85433], [44.45948, 37.77065], [44.55498, 37.783], [44.62096, 37.71985], [44.56887, 37.6429], [44.61401, 37.60165], [44.58449, 37.45018], [44.81021, 37.2915], [44.75986, 37.21549], [44.7868, 37.16644], [44.78319, 37.1431], [44.75229, 37.11958], [44.81611, 37.04383], [44.89862, 37.01897], [44.91199, 36.91468], [44.90173, 36.86096], [44.83479, 36.81362], [44.84725, 36.77622], [45.01537, 36.75128], [45.06985, 36.6814], [45.06985, 36.62645], [45.00759, 36.5402], [45.11811, 36.40751], [45.23953, 36.43257], [45.27394, 36.35846], [45.26261, 36.3001], [45.30038, 36.27769], [45.32235, 36.17383], [45.37312, 36.09917], [45.37652, 36.06222], [45.33916, 35.99424], [45.38275, 35.97156], [45.46594, 36.00042], [45.55245, 35.99943], [45.60018, 35.96069], [45.6645, 35.92872], [45.76145, 35.79898], [45.81442, 35.82107], [45.89784, 35.83708], [45.94711, 35.82218], [46.08325, 35.8581], [46.17198, 35.8013], [46.32921, 35.82655], [46.34166, 35.78363], [46.23736, 35.71414], [46.01631, 35.69139], [46.0117, 35.65059], [45.99452, 35.63574], [46.0165, 35.61501], [46.01307, 35.59756], [46.03028, 35.57416], [45.97584, 35.58132], [46.01518, 35.52012], [45.98453, 35.49848], [46.05358, 35.38568], [46.13152, 35.32548], [46.15474, 35.2883], [46.11367, 35.23729], [46.18457, 35.22561], [46.19738, 35.18536], [46.16229, 35.16984], [46.15642, 35.1268], [46.19116, 35.11097], [46.11763, 35.07551], [46.07747, 35.0838], [46.06508, 35.03699], [45.94756, 35.09188], [45.93108, 35.08148], [45.92203, 35.09538], [45.92173, 35.0465], [45.87864, 35.03441], [45.89477, 34.95805], [45.86532, 34.89858], [45.78904, 34.91135], [45.79682, 34.85133], [45.73641, 34.83975], [45.70031, 34.82322], [45.68284, 34.76624], [45.65672, 34.7222], [45.70031, 34.69277], [45.73923, 34.54416], [45.60224, 34.55057], [45.59074, 34.55558], [45.53219, 34.60441], [45.51883, 34.47692], [45.43879, 34.45949], [45.46697, 34.38221], [45.49171, 34.3439], [45.53552, 34.35148], [45.58667, 34.30147], [45.56176, 34.15088], [45.47264, 34.03099], [45.41077, 33.97421], [45.42789, 33.9458], [45.50261, 33.94968], [45.77814, 33.60938], [45.89801, 33.63661], [45.96183, 33.55751], [45.86687, 33.49263], [45.99919, 33.5082], [46.20623, 33.20395], [46.11905, 33.11924], [46.05367, 33.13097], [46.03966, 33.09577], [46.15175, 33.07229], [46.09103, 32.98354], [46.17198, 32.95612], [46.32298, 32.9731], [46.46788, 32.91992], [47.17218, 32.45393], [47.37529, 32.47808], [47.57144, 32.20583], [47.52474, 32.15972], [47.64771, 32.07666], [47.86337, 31.78422], [47.6804, 31.39086], [47.68219, 31.00004], [48.03221, 30.9967], [48.02443, 30.4789], [48.14585, 30.44133], [48.18321, 30.39703], [48.19425, 30.32796], [48.21279, 30.31644], [48.24385, 30.33846], [48.26393, 30.3408], [48.41117, 30.19846], [48.41671, 30.17254], [48.38714, 30.13485], [48.38869, 30.11062], [48.43384, 30.08233], [48.4494, 30.04456], [48.44785, 30.00148], [48.51011, 29.96238], [48.61441, 29.93675], [48.83867, 29.78572], [49.98877, 27.87827], [50.37726, 27.89227], [54.39838, 25.68383], [55.14145, 25.62624], [55.81777, 26.18798], [56.2644, 26.58649], [56.68954, 26.76645], [56.79239, 26.41236], [56.82555, 25.7713], [56.86325, 25.03856], [61.46682, 24.57869], [61.6433, 25.27541], [61.683, 25.66638], [61.83968, 25.7538], [61.83831, 26.07249], [61.89391, 26.26251], [62.05117, 26.31647], [62.21304, 26.26601], [62.31484, 26.528], [62.77352, 26.64099], [63.1889, 26.65072], [63.18688, 26.83844], [63.25005, 26.84212], [63.25005, 27.08692], [63.32283, 27.14437], [63.19649, 27.25674], [62.80604, 27.22412], [62.79684, 27.34381], [62.84905, 27.47627], [62.7638, 28.02992], [62.79412, 28.28108], [62.59499, 28.24842], [62.40259, 28.42703], [61.93581, 28.55284], [61.65978, 28.77937], [61.53765, 29.00507], [61.31508, 29.38903], [60.87231, 29.86514], [61.80829, 30.84224], [61.78268, 30.92724], [61.8335, 30.97669], [61.83257, 31.0452], [61.80957, 31.12576], [61.80569, 31.16167], [61.70929, 31.37391], [60.84541, 31.49561], [60.86191, 32.22565], [60.56485, 33.12944], [60.88908, 33.50219], [60.91133, 33.55596], [60.69573, 33.56054], [60.57762, 33.59772], [60.5485, 33.73422], [60.5838, 33.80793], [60.50209, 34.13992], [60.66502, 34.31539], [60.91321, 34.30411], [60.72316, 34.52857], [60.99922, 34.63064], [61.00197, 34.70631], [61.06926, 34.82139], [61.12831, 35.09938], [61.0991, 35.27845], [61.18187, 35.30249], [61.27371, 35.61482], [61.22719, 35.67038], [61.26152, 35.80749], [61.22444, 35.92879], [61.12007, 35.95992], [61.22719, 36.12759], [61.1393, 36.38782], [61.18187, 36.55348], [61.14516, 36.64644], [60.34767, 36.63214], [60.00768, 37.04102], [59.74678, 37.12499], [59.55178, 37.13594], [59.39385, 37.34257], [59.39797, 37.47892], [59.33507, 37.53146], [59.22905, 37.51161], [58.9338, 37.67374], [58.6921, 37.64548], [58.5479, 37.70526], [58.47786, 37.6433], [58.39959, 37.63134], [58.22999, 37.6856], [58.21399, 37.77281], [57.79534, 37.89299], [57.35042, 37.98546], [57.37236, 38.09321], [57.21169, 38.28965], [57.03453, 38.18717], [56.73928, 38.27887], [56.62255, 38.24005], [56.43303, 38.26054], [56.32454, 38.18502], [56.33278, 38.08132], [55.97847, 38.08024], [55.76561, 38.12238], [55.44152, 38.08564], [55.13412, 37.94705], [54.851, 37.75739], [54.77684, 37.62264], [54.81804, 37.61285], [54.77822, 37.51597], [54.67247, 37.43532], [54.58664, 37.45809], [54.36211, 37.34912], [54.24565, 37.32047], [53.89734, 37.3464], [48.88288, 38.43975], [48.84969, 38.45015], [48.81072, 38.44853], [48.78979, 38.45026], [48.70001, 38.40564], [48.62217, 38.40198], [48.58793, 38.45076], [48.45084, 38.61013], [48.3146, 38.59958], [48.24773, 38.71883], [48.02581, 38.82705], [48.01409, 38.90333], [48.07734, 38.91616], [48.08627, 38.94434], [48.28437, 38.97186], [48.33884, 39.03022], [48.31239, 39.09278], [48.15361, 39.19419], [48.12404, 39.25208], [48.15984, 39.30028], [48.37385, 39.37584], [48.34264, 39.42935], [47.98977, 39.70999], [47.84774, 39.66285], [47.50099, 39.49615], [47.38978, 39.45999], [47.31301, 39.37492], [47.05927, 39.24846], [47.05771, 39.20143], [46.95341, 39.13505], [46.92539, 39.16644], [46.83822, 39.13143], [46.75752, 39.03231], [46.53497, 38.86548], [46.34059, 38.92076], [46.20601, 38.85262], [46.14785, 38.84206], [46.06766, 38.87861], [46.00228, 38.87376], [45.94624, 38.89072], [45.90266, 38.87739], [45.83883, 38.90768], [45.65172, 38.95199], [45.6155, 38.94304], [45.6131, 38.964], [45.44966, 38.99243], [45.44811, 39.04927], [45.40452, 39.07224], [45.40148, 39.09007], [45.30489, 39.18333], [45.16168, 39.21952], [45.08751, 39.35052], [45.05932, 39.36435], [44.96746, 39.42998]]]] } },
-    { type: "Feature", properties: { iso1A2: "IS", iso1A3: "ISL", iso1N3: "352", wikidata: "Q189", nameEn: "Iceland", groups: ["154", "150", "UN"], callingCodes: ["354"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-33.15676, 62.62995], [-8.25539, 63.0423], [-15.70914, 69.67442], [-33.15676, 62.62995]]]] } },
-    { type: "Feature", properties: { iso1A2: "IT", iso1A3: "ITA", iso1N3: "380", wikidata: "Q38", nameEn: "Italy", groups: ["EU", "039", "150", "UN"], callingCodes: ["39"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.95861, 45.96485], [8.97604, 45.96151], [8.97741, 45.98317], [8.96668, 45.98436], [8.95861, 45.96485]]], [[[7.63035, 43.57419], [9.56115, 43.20816], [10.09675, 41.44089], [7.60802, 41.05927], [7.89009, 38.19924], [11.2718, 37.6713], [12.13667, 34.20326], [14.02721, 36.53141], [17.67657, 35.68918], [18.83516, 40.36999], [16.15283, 42.18525], [13.12821, 44.48877], [13.05142, 45.33128], [13.45644, 45.59464], [13.6076, 45.64761], [13.7198, 45.59352], [13.74587, 45.59811], [13.78445, 45.5825], [13.84106, 45.58185], [13.86771, 45.59898], [13.8695, 45.60835], [13.9191, 45.6322], [13.87933, 45.65207], [13.83422, 45.68703], [13.83332, 45.70855], [13.8235, 45.7176], [13.66986, 45.79955], [13.59784, 45.8072], [13.58858, 45.83503], [13.57563, 45.8425], [13.58644, 45.88173], [13.59565, 45.89446], [13.60857, 45.89907], [13.61931, 45.91782], [13.63815, 45.93607], [13.6329, 45.94894], [13.64307, 45.98326], [13.63458, 45.98947], [13.62074, 45.98388], [13.58903, 45.99009], [13.56759, 45.96991], [13.52963, 45.96588], [13.50104, 45.98078], [13.47474, 46.00546], [13.49702, 46.01832], [13.50998, 46.04498], [13.49568, 46.04839], [13.50104, 46.05986], [13.57072, 46.09022], [13.64053, 46.13587], [13.66472, 46.17392], [13.64451, 46.18966], [13.56682, 46.18703], [13.56114, 46.2054], [13.47587, 46.22725], [13.42218, 46.20758], [13.37671, 46.29668], [13.44808, 46.33507], [13.43418, 46.35992], [13.47019, 46.3621], [13.5763, 46.40915], [13.5763, 46.42613], [13.59777, 46.44137], [13.68684, 46.43881], [13.7148, 46.5222], [13.64088, 46.53438], [13.27627, 46.56059], [12.94445, 46.60401], [12.59992, 46.6595], [12.38708, 46.71529], [12.27591, 46.88651], [12.2006, 46.88854], [12.11675, 47.01241], [12.21781, 47.03996], [12.19254, 47.09331], [11.74789, 46.98484], [11.50739, 47.00644], [11.33355, 46.99862], [11.10618, 46.92966], [11.00764, 46.76896], [10.72974, 46.78972], [10.75753, 46.82258], [10.66405, 46.87614], [10.54783, 46.84505], [10.47197, 46.85698], [10.38659, 46.67847], [10.40475, 46.63671], [10.44686, 46.64162], [10.49375, 46.62049], [10.46136, 46.53164], [10.25309, 46.57432], [10.23674, 46.63484], [10.10307, 46.61003], [10.03715, 46.44479], [10.165, 46.41051], [10.10506, 46.3372], [10.17862, 46.25626], [10.14439, 46.22992], [10.07055, 46.21668], [9.95249, 46.38045], [9.73086, 46.35071], [9.71273, 46.29266], [9.57015, 46.2958], [9.46117, 46.37481], [9.45936, 46.50873], [9.40487, 46.46621], [9.36128, 46.5081], [9.28136, 46.49685], [9.25502, 46.43743], [9.29226, 46.32717], [9.24503, 46.23616], [9.01618, 46.04928], [8.99257, 45.9698], [9.09065, 45.89906], [9.06642, 45.8761], [9.04546, 45.84968], [9.04059, 45.8464], [9.03505, 45.83976], [9.03793, 45.83548], [9.03279, 45.82865], [9.0298, 45.82127], [9.00324, 45.82055], [8.99663, 45.83466], [8.9621, 45.83707], [8.94737, 45.84285], [8.91129, 45.8388], [8.93504, 45.86245], [8.94372, 45.86587], [8.93649, 45.86775], [8.88904, 45.95465], [8.86688, 45.96135], [8.85121, 45.97239], [8.8319, 45.9879], [8.79362, 45.99207], [8.78585, 45.98973], [8.79414, 46.00913], [8.85617, 46.0748], [8.80778, 46.10085], [8.75697, 46.10395], [8.62242, 46.12112], [8.45032, 46.26869], [8.46317, 46.43712], [8.42464, 46.46367], [8.30648, 46.41587], [8.31162, 46.38044], [8.08814, 46.26692], [8.16866, 46.17817], [8.11383, 46.11577], [8.02906, 46.10331], [7.98881, 45.99867], [7.9049, 45.99945], [7.85949, 45.91485], [7.56343, 45.97421], [7.10685, 45.85653], [7.04151, 45.92435], [6.95315, 45.85163], [6.80785, 45.83265], [6.80785, 45.71864], [6.98948, 45.63869], [7.00037, 45.509], [7.18019, 45.40071], [7.10572, 45.32924], [7.13115, 45.25386], [7.07074, 45.21228], [6.96706, 45.20841], [6.85144, 45.13226], [6.7697, 45.16044], [6.62803, 45.11175], [6.66981, 45.02324], [6.74791, 45.01939], [6.74519, 44.93661], [6.75518, 44.89915], [6.90774, 44.84322], [6.93499, 44.8664], [7.02217, 44.82519], [7.00401, 44.78782], [7.07484, 44.68073], [7.00582, 44.69364], [6.95133, 44.66264], [6.96042, 44.62129], [6.85507, 44.53072], [6.86233, 44.49834], [6.94504, 44.43112], [6.88784, 44.42043], [6.89171, 44.36637], [6.98221, 44.28289], [7.00764, 44.23736], [7.16929, 44.20352], [7.27827, 44.1462], [7.34547, 44.14359], [7.36364, 44.11882], [7.62155, 44.14881], [7.63245, 44.17877], [7.68694, 44.17487], [7.66878, 44.12795], [7.72508, 44.07578], [7.6597, 44.03009], [7.66848, 43.99943], [7.65266, 43.9763], [7.60771, 43.95772], [7.56858, 43.94506], [7.56075, 43.89932], [7.51162, 43.88301], [7.49355, 43.86551], [7.50423, 43.84345], [7.53006, 43.78405], [7.63035, 43.57419]], [[12.45181, 41.90056], [12.44834, 41.90095], [12.44582, 41.90194], [12.44815, 41.90326], [12.44984, 41.90545], [12.45091, 41.90625], [12.45543, 41.90738], [12.45561, 41.90629], [12.45762, 41.9058], [12.45755, 41.9033], [12.45826, 41.90281], [12.45834, 41.90174], [12.4577, 41.90115], [12.45691, 41.90125], [12.45626, 41.90172], [12.45435, 41.90143], [12.45446, 41.90028], [12.45181, 41.90056]], [[12.45648, 43.89369], [12.44184, 43.90498], [12.41641, 43.89991], [12.40935, 43.9024], [12.41233, 43.90956], [12.40733, 43.92379], [12.41551, 43.92984], [12.41165, 43.93769], [12.40506, 43.94325], [12.40415, 43.95485], [12.41414, 43.95273], [12.42005, 43.9578], [12.43662, 43.95698], [12.44684, 43.96597], [12.46205, 43.97463], [12.47853, 43.98052], [12.49406, 43.98492], [12.50678, 43.99113], [12.51463, 43.99122], [12.5154, 43.98508], [12.51064, 43.98165], [12.51109, 43.97201], [12.50622, 43.97131], [12.50875, 43.96198], [12.50655, 43.95796], [12.51427, 43.94897], [12.51553, 43.94096], [12.50496, 43.93017], [12.50269, 43.92363], [12.49724, 43.92248], [12.49247, 43.91774], [12.49429, 43.90973], [12.48771, 43.89706], [12.45648, 43.89369]]]] } },
-    { type: "Feature", properties: { iso1A2: "JE", iso1A3: "JEY", iso1N3: "832", wikidata: "Q785", nameEn: "Bailiwick of Jersey", country: "GB", groups: ["830", "Q185086", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01534"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.00491, 48.86706], [-1.83944, 49.23037], [-2.09454, 49.46288], [-2.65349, 49.15373], [-2.00491, 48.86706]]]] } },
-    { type: "Feature", properties: { iso1A2: "JM", iso1A3: "JAM", iso1N3: "388", wikidata: "Q766", nameEn: "Jamaica", aliases: ["JA"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", callingCodes: ["1 876", "1 658"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-74.09729, 17.36817], [-78.9741, 19.59515], [-78.34606, 16.57862], [-74.09729, 17.36817]]]] } },
-    { type: "Feature", properties: { iso1A2: "JO", iso1A3: "JOR", iso1N3: "400", wikidata: "Q810", nameEn: "Jordan", groups: ["145", "142", "UN"], callingCodes: ["962"] }, geometry: { type: "MultiPolygon", coordinates: [[[[39.04251, 32.30203], [38.98762, 32.47694], [39.08202, 32.50304], [38.79171, 33.37328], [36.83946, 32.31293], [36.40959, 32.37908], [36.23948, 32.50108], [36.20875, 32.49529], [36.20379, 32.52751], [36.08074, 32.51463], [36.02239, 32.65911], [35.96633, 32.66237], [35.93307, 32.71966], [35.88405, 32.71321], [35.75983, 32.74803], [35.68467, 32.70715], [35.66527, 32.681], [35.61669, 32.67999], [35.59813, 32.65159], [35.56614, 32.64393], [35.57485, 32.48669], [35.55494, 32.42687], [35.55807, 32.38674], [35.57111, 32.21877], [35.52012, 32.04076], [35.54375, 31.96587], [35.52758, 31.9131], [35.55941, 31.76535], [35.47672, 31.49578], [35.40316, 31.25535], [35.43658, 31.12444], [35.41371, 30.95565], [35.33984, 30.8802], [35.33456, 30.81224], [35.29311, 30.71365], [35.21379, 30.60401], [35.19595, 30.50297], [35.16218, 30.43535], [35.19183, 30.34636], [35.14108, 30.07374], [35.02147, 29.66343], [34.98207, 29.58147], [34.97718, 29.54294], [34.92298, 29.45305], [34.8812, 29.36878], [36.07081, 29.18469], [36.50005, 29.49696], [36.75083, 29.86903], [37.4971, 29.99949], [37.66395, 30.33245], [37.99354, 30.49998], [36.99791, 31.50081], [38.99233, 31.99721], [39.29903, 32.23259], [39.26157, 32.35555], [39.04251, 32.30203]]]] } },
-    { type: "Feature", properties: { iso1A2: "JP", iso1A3: "JPN", iso1N3: "392", wikidata: "Q17", nameEn: "Japan", groups: ["030", "142", "UN"], driveSide: "left", callingCodes: ["81"] }, geometry: { type: "MultiPolygon", coordinates: [[[[145.82361, 43.38904], [145.23667, 43.76813], [145.82343, 44.571], [140.9182, 45.92937], [133.61399, 37.41], [129.2669, 34.87122], [122.26612, 25.98197], [123.92912, 17.8782], [155.16731, 23.60141], [145.82361, 43.38904]]]] } },
-    { type: "Feature", properties: { iso1A2: "KE", iso1A3: "KEN", iso1N3: "404", wikidata: "Q114", nameEn: "Kenya", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["254"] }, geometry: { type: "MultiPolygon", coordinates: [[[[35.9419, 4.61933], [35.51424, 4.61643], [35.42366, 4.76969], [35.47843, 4.91872], [35.30992, 4.90402], [35.34151, 5.02364], [34.47601, 4.72162], [33.9873, 4.23316], [34.06046, 4.15235], [34.15429, 3.80464], [34.45815, 3.67385], [34.44922, 3.51627], [34.39112, 3.48802], [34.41794, 3.44342], [34.40006, 3.37949], [34.45815, 3.18319], [34.56242, 3.11478], [34.60114, 2.93034], [34.65774, 2.8753], [34.73967, 2.85447], [34.78137, 2.76223], [34.77244, 2.70272], [34.95267, 2.47209], [34.90947, 2.42447], [34.98692, 1.97348], [34.9899, 1.6668], [34.92734, 1.56109], [34.87819, 1.5596], [34.7918, 1.36752], [34.82606, 1.30944], [34.82606, 1.26626], [34.80223, 1.22754], [34.67562, 1.21265], [34.58029, 1.14712], [34.57427, 1.09868], [34.52369, 1.10692], [34.43349, 0.85254], [34.40041, 0.80266], [34.31516, 0.75693], [34.27345, 0.63182], [34.20196, 0.62289], [34.13493, 0.58118], [34.11408, 0.48884], [34.08727, 0.44713], [34.10067, 0.36372], [33.90936, 0.10581], [33.98449, -0.13079], [33.9264, -0.54188], [33.93107, -0.99298], [34.02286, -1.00779], [34.03084, -1.05101], [34.0824, -1.02264], [37.67199, -3.06222], [37.71745, -3.304], [37.5903, -3.42735], [37.63099, -3.50723], [37.75036, -3.54243], [37.81321, -3.69179], [39.21631, -4.67835], [39.44306, -4.93877], [39.62121, -4.68136], [41.75542, -1.85308], [41.56362, -1.66375], [41.56, -1.59812], [41.00099, -0.83068], [40.98767, 2.82959], [41.31368, 3.14314], [41.89488, 3.97375], [41.1754, 3.94079], [40.77498, 4.27683], [39.86043, 3.86974], [39.76808, 3.67058], [39.58339, 3.47434], [39.55132, 3.39634], [39.51551, 3.40895], [39.49444, 3.45521], [39.19954, 3.47834], [39.07736, 3.5267], [38.91938, 3.51198], [38.52336, 3.62551], [38.45812, 3.60445], [38.14168, 3.62487], [37.07724, 4.33503], [36.84474, 4.44518], [36.03924, 4.44406], [35.95449, 4.53244], [35.9419, 4.61933]]]] } },
-    { type: "Feature", properties: { iso1A2: "KG", iso1A3: "KGZ", iso1N3: "417", wikidata: "Q813", nameEn: "Kyrgyzstan", groups: ["143", "142", "UN"], callingCodes: ["996"] }, geometry: { type: "MultiPolygon", coordinates: [[[[74.88756, 42.98612], [74.75, 42.99029], [74.70331, 43.02519], [74.64615, 43.05881], [74.57491, 43.13702], [74.22489, 43.24657], [73.55634, 43.03071], [73.50992, 42.82356], [73.44393, 42.43098], [71.88792, 42.83578], [71.62405, 42.76613], [71.53272, 42.8014], [71.2724, 42.77853], [71.22785, 42.69248], [71.17807, 42.67381], [71.15232, 42.60486], [70.97717, 42.50147], [70.85973, 42.30188], [70.94483, 42.26238], [71.13263, 42.28356], [71.28719, 42.18033], [70.69777, 41.92554], [70.17682, 41.5455], [70.48909, 41.40335], [70.67586, 41.47953], [70.78572, 41.36419], [70.77885, 41.24813], [70.86263, 41.23833], [70.9615, 41.16393], [71.02193, 41.19494], [71.11806, 41.15359], [71.25813, 41.18796], [71.27187, 41.11015], [71.34877, 41.16807], [71.40198, 41.09436], [71.46148, 41.13958], [71.43814, 41.19644], [71.46688, 41.31883], [71.57227, 41.29175], [71.6787, 41.42111], [71.65914, 41.49599], [71.73054, 41.54713], [71.71132, 41.43012], [71.76625, 41.4466], [71.83914, 41.3546], [71.91457, 41.2982], [71.85964, 41.19081], [72.07249, 41.11739], [72.10745, 41.15483], [72.16433, 41.16483], [72.17594, 41.15522], [72.14864, 41.13363], [72.1792, 41.10621], [72.21061, 41.05607], [72.17594, 41.02377], [72.18339, 40.99571], [72.324, 41.03381], [72.34026, 41.04539], [72.34757, 41.06104], [72.36138, 41.04384], [72.38511, 41.02785], [72.45206, 41.03018], [72.48742, 40.97136], [72.55109, 40.96046], [72.59136, 40.86947], [72.68157, 40.84942], [72.84291, 40.85512], [72.94454, 40.8094], [73.01869, 40.84681], [73.13267, 40.83512], [73.13412, 40.79122], [73.0612, 40.76678], [72.99133, 40.76457], [72.93296, 40.73089], [72.8722, 40.71111], [72.85372, 40.7116], [72.84754, 40.67229], [72.80137, 40.67856], [72.74866, 40.60873], [72.74894, 40.59592], [72.75982, 40.57273], [72.74862, 40.57131], [72.74768, 40.58051], [72.73995, 40.58409], [72.69579, 40.59778], [72.66713, 40.59076], [72.66713, 40.5219], [72.47795, 40.5532], [72.40517, 40.61917], [72.34406, 40.60144], [72.41714, 40.55736], [72.38384, 40.51535], [72.41513, 40.50856], [72.44191, 40.48222], [72.40346, 40.4007], [72.24368, 40.46091], [72.18648, 40.49893], [71.96401, 40.31907], [72.05464, 40.27586], [71.85002, 40.25647], [71.82646, 40.21872], [71.73054, 40.14818], [71.71719, 40.17886], [71.69621, 40.18492], [71.70569, 40.20391], [71.68386, 40.26984], [71.61931, 40.26775], [71.61725, 40.20615], [71.51549, 40.22986], [71.51215, 40.26943], [71.4246, 40.28619], [71.36663, 40.31593], [71.13042, 40.34106], [71.05901, 40.28765], [70.95789, 40.28761], [70.9818, 40.22392], [70.80495, 40.16813], [70.7928, 40.12797], [70.65827, 40.0981], [70.65946, 39.9878], [70.58912, 39.95211], [70.55033, 39.96619], [70.47557, 39.93216], [70.57384, 39.99394], [70.58297, 40.00891], [70.01283, 40.23288], [69.67001, 40.10639], [69.64704, 40.12165], [69.57615, 40.10524], [69.55555, 40.12296], [69.53794, 40.11833], [69.53855, 40.0887], [69.5057, 40.03277], [69.53615, 39.93991], [69.43557, 39.92877], [69.43134, 39.98431], [69.35649, 40.01994], [69.26938, 39.8127], [69.3594, 39.52516], [69.68677, 39.59281], [69.87491, 39.53882], [70.11111, 39.58223], [70.2869, 39.53141], [70.44757, 39.60128], [70.64087, 39.58792], [70.7854, 39.38933], [71.06418, 39.41586], [71.08752, 39.50704], [71.49814, 39.61397], [71.55856, 39.57588], [71.5517, 39.45722], [71.62688, 39.44056], [71.76816, 39.45456], [71.80164, 39.40631], [71.7522, 39.32031], [71.79202, 39.27355], [71.90601, 39.27674], [72.04059, 39.36704], [72.09689, 39.26823], [72.17242, 39.2661], [72.23834, 39.17248], [72.33173, 39.33093], [72.62027, 39.39696], [72.85934, 39.35116], [73.18454, 39.35536], [73.31912, 39.38615], [73.45096, 39.46677], [73.59831, 39.46425], [73.87018, 39.47879], [73.94683, 39.60733], [73.92354, 39.69565], [73.9051, 39.75073], [73.83006, 39.76136], [73.97049, 40.04378], [74.25533, 40.13191], [74.35063, 40.09742], [74.69875, 40.34668], [74.85996, 40.32857], [74.78168, 40.44886], [74.82013, 40.52197], [75.08243, 40.43945], [75.22834, 40.45382], [75.5854, 40.66874], [75.69663, 40.28642], [75.91361, 40.2948], [75.96168, 40.38064], [76.33659, 40.3482], [76.5261, 40.46114], [76.75681, 40.95354], [76.99302, 41.0696], [77.28004, 41.0033], [77.3693, 41.0375], [77.52723, 41.00227], [77.76206, 41.01574], [77.81287, 41.14307], [78.12873, 41.23091], [78.15757, 41.38565], [78.3732, 41.39603], [79.92977, 42.04113], [80.17842, 42.03211], [80.17807, 42.21166], [79.97364, 42.42816], [79.52921, 42.44778], [79.19763, 42.804], [78.91502, 42.76839], [78.48469, 42.89649], [75.82823, 42.94848], [75.72174, 42.79672], [75.29966, 42.86183], [75.22619, 42.85528], [74.88756, 42.98612]], [[70.74189, 39.86319], [70.63105, 39.77923], [70.59667, 39.83542], [70.54998, 39.85137], [70.52631, 39.86989], [70.53651, 39.89155], [70.74189, 39.86319]], [[71.86463, 39.98598], [71.84316, 39.95582], [71.7504, 39.93701], [71.71511, 39.96348], [71.78838, 40.01404], [71.86463, 39.98598]], [[71.21139, 40.03369], [71.1427, 39.95026], [71.23067, 39.93581], [71.16101, 39.88423], [71.10531, 39.91354], [71.04979, 39.89808], [71.10501, 39.95568], [71.09063, 39.99], [71.11668, 39.99291], [71.11037, 40.01984], [71.01035, 40.05481], [71.00236, 40.18154], [71.06305, 40.1771], [71.12218, 40.03052], [71.21139, 40.03369]]]] } },
-    { type: "Feature", properties: { iso1A2: "KH", iso1A3: "KHM", iso1N3: "116", wikidata: "Q424", nameEn: "Cambodia", groups: ["035", "142", "UN"], callingCodes: ["855"] }, geometry: { type: "MultiPolygon", coordinates: [[[[105.87328, 11.55953], [105.81645, 11.56876], [105.80867, 11.60536], [105.8507, 11.66635], [105.88962, 11.67854], [105.95188, 11.63738], [106.00792, 11.7197], [106.02038, 11.77457], [106.06708, 11.77761], [106.13158, 11.73283], [106.18539, 11.75171], [106.26478, 11.72122], [106.30525, 11.67549], [106.37219, 11.69836], [106.44691, 11.66787], [106.45158, 11.68616], [106.41577, 11.76999], [106.44535, 11.8279], [106.44068, 11.86294], [106.4687, 11.86751], [106.4111, 11.97413], [106.70687, 11.96956], [106.79405, 12.0807], [106.92325, 12.06548], [106.99953, 12.08983], [107.15831, 12.27547], [107.34511, 12.33327], [107.42917, 12.24657], [107.4463, 12.29373], [107.55059, 12.36824], [107.5755, 12.52177], [107.55993, 12.7982], [107.49611, 12.88926], [107.49144, 13.01215], [107.62843, 13.3668], [107.61909, 13.52577], [107.53503, 13.73908], [107.45252, 13.78897], [107.46498, 13.91593], [107.44318, 13.99751], [107.38247, 13.99147], [107.35757, 14.02319], [107.37158, 14.07906], [107.33577, 14.11832], [107.40427, 14.24509], [107.39493, 14.32655], [107.44941, 14.41552], [107.48521, 14.40346], [107.52569, 14.54665], [107.52102, 14.59034], [107.55371, 14.628], [107.54361, 14.69092], [107.47238, 14.61523], [107.44435, 14.52785], [107.37897, 14.54443], [107.3276, 14.58812], [107.29803, 14.58963], [107.26534, 14.54292], [107.256, 14.48716], [107.21241, 14.48716], [107.17038, 14.41782], [107.09722, 14.3937], [107.03962, 14.45099], [107.04585, 14.41782], [106.98825, 14.36806], [106.9649, 14.3198], [106.90574, 14.33639], [106.8497, 14.29416], [106.80767, 14.31226], [106.73762, 14.42687], [106.63333, 14.44194], [106.59908, 14.50977], [106.57106, 14.50525], [106.54148, 14.59565], [106.50723, 14.58963], [106.45898, 14.55045], [106.47766, 14.50977], [106.43874, 14.52032], [106.40916, 14.45249], [106.32355, 14.44043], [106.25194, 14.48415], [106.21302, 14.36203], [106.00131, 14.36957], [105.99509, 14.32734], [106.02311, 14.30623], [106.04801, 14.20363], [106.10872, 14.18401], [106.11962, 14.11307], [106.18656, 14.06324], [106.16632, 14.01794], [106.10094, 13.98471], [106.10405, 13.9137], [105.90791, 13.92881], [105.78182, 14.02247], [105.78338, 14.08438], [105.5561, 14.15684], [105.44869, 14.10703], [105.36775, 14.09948], [105.2759, 14.17496], [105.20894, 14.34967], [105.17748, 14.34432], [105.14012, 14.23873], [105.08408, 14.20402], [105.02804, 14.23722], [104.97667, 14.38806], [104.69335, 14.42726], [104.55014, 14.36091], [104.27616, 14.39861], [103.93836, 14.3398], [103.70175, 14.38052], [103.71109, 14.4348], [103.53518, 14.42575], [103.39353, 14.35639], [103.16469, 14.33075], [102.93275, 14.19044], [102.91251, 14.01531], [102.77864, 13.93374], [102.72727, 13.77806], [102.56848, 13.69366], [102.5481, 13.6589], [102.58635, 13.6286], [102.62483, 13.60883], [102.57573, 13.60461], [102.5358, 13.56933], [102.44601, 13.5637], [102.36859, 13.57488], [102.33828, 13.55613], [102.361, 13.50551], [102.35563, 13.47307], [102.35692, 13.38274], [102.34611, 13.35618], [102.36001, 13.31142], [102.36146, 13.26006], [102.43422, 13.09061], [102.46011, 13.08057], [102.52275, 12.99813], [102.48694, 12.97537], [102.49335, 12.92711], [102.53053, 12.77506], [102.4994, 12.71736], [102.51963, 12.66117], [102.57567, 12.65358], [102.7796, 12.43781], [102.78116, 12.40284], [102.73134, 12.37091], [102.70176, 12.1686], [102.77026, 12.06815], [102.78427, 11.98746], [102.83957, 11.8519], [102.90973, 11.75613], [102.91449, 11.65512], [102.52395, 11.25257], [102.47649, 9.66162], [103.99198, 10.48391], [104.43778, 10.42386], [104.47963, 10.43046], [104.49869, 10.4057], [104.59018, 10.53073], [104.87933, 10.52833], [104.95094, 10.64003], [105.09571, 10.72722], [105.02722, 10.89236], [105.08326, 10.95656], [105.11449, 10.96332], [105.34011, 10.86179], [105.42884, 10.96878], [105.50045, 10.94586], [105.77751, 11.03671], [105.86376, 10.89839], [105.84603, 10.85873], [105.93403, 10.83853], [105.94535, 10.9168], [106.06708, 10.8098], [106.18539, 10.79451], [106.14301, 10.98176], [106.20095, 10.97795], [106.1757, 11.07301], [106.1527, 11.10476], [106.10444, 11.07879], [105.86782, 11.28343], [105.88962, 11.43605], [105.87328, 11.55953]]]] } },
-    { type: "Feature", properties: { iso1A2: "KI", iso1A3: "KIR", iso1N3: "296", wikidata: "Q710", nameEn: "Kiribati", groups: ["057", "009", "UN"], driveSide: "left", callingCodes: ["686"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169, 3.9], [169, -3.5], [178, -3.5], [178, 3.9], [169, 3.9]]], [[[-161.06795, 5.2462], [-158.12991, -1.86122], [-175.33482, -1.40631], [-175.31804, -7.54825], [-156.50903, -7.4975], [-156.48634, -15.52824], [-135.59706, -4.70473], [-161.06795, 5.2462]]]] } },
-    { type: "Feature", properties: { iso1A2: "KM", iso1A3: "COM", iso1N3: "174", wikidata: "Q970", nameEn: "Comoros", groups: ["014", "202", "002", "UN"], callingCodes: ["269"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.63904, -10.02522], [43.28731, -13.97126], [45.4971, -11.75965], [42.63904, -10.02522]]]] } },
-    { type: "Feature", properties: { iso1A2: "KN", iso1A3: "KNA", iso1N3: "659", wikidata: "Q763", nameEn: "St. Kitts and Nevis", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 869"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.29333, 17.43155], [-62.76692, 17.64353], [-63.09677, 17.21372], [-62.63813, 16.65446], [-62.29333, 17.43155]]]] } },
-    { type: "Feature", properties: { iso1A2: "KP", iso1A3: "PRK", iso1N3: "408", wikidata: "Q423", nameEn: "North Korea", groups: ["030", "142", "UN"], callingCodes: ["850"] }, geometry: { type: "MultiPolygon", coordinates: [[[[130.26095, 42.9027], [130.09764, 42.91425], [130.12957, 42.98361], [129.96409, 42.97306], [129.95082, 43.01051], [129.8865, 43.00395], [129.85261, 42.96494], [129.83277, 42.86746], [129.80719, 42.79218], [129.7835, 42.76521], [129.77183, 42.69435], [129.75294, 42.59409], [129.72541, 42.43739], [129.60482, 42.44461], [129.54701, 42.37254], [129.42882, 42.44702], [129.28541, 42.41574], [129.22423, 42.3553], [129.22285, 42.26491], [129.15178, 42.17224], [128.96068, 42.06657], [128.94007, 42.03537], [128.04487, 42.01769], [128.15119, 41.74568], [128.30716, 41.60322], [128.20061, 41.40895], [128.18546, 41.41279], [128.12967, 41.37931], [128.03311, 41.39232], [128.02633, 41.42103], [127.92943, 41.44291], [127.29712, 41.49473], [127.17841, 41.59714], [126.90729, 41.79955], [126.60631, 41.65565], [126.53189, 41.35206], [126.242, 41.15454], [126.00335, 40.92835], [125.76869, 40.87908], [125.71172, 40.85223], [124.86913, 40.45387], [124.40719, 40.13655], [124.38556, 40.11047], [124.3322, 40.05573], [124.37089, 40.03004], [124.35029, 39.95639], [124.23201, 39.9248], [124.17532, 39.8232], [123.90497, 38.79949], [123.85601, 37.49093], [124.67666, 38.05679], [124.84224, 37.977], [124.87921, 37.80827], [125.06408, 37.66334], [125.37112, 37.62643], [125.81159, 37.72949], [126.13074, 37.70512], [126.18776, 37.74728], [126.19097, 37.81462], [126.24402, 37.83113], [126.43239, 37.84095], [126.46818, 37.80873], [126.56709, 37.76857], [126.59918, 37.76364], [126.66067, 37.7897], [126.68793, 37.83728], [126.68793, 37.9175], [126.67023, 37.95852], [126.84961, 38.0344], [126.88106, 38.10246], [126.95887, 38.1347], [126.95338, 38.17735], [127.04479, 38.25518], [127.15749, 38.30722], [127.38727, 38.33227], [127.49672, 38.30647], [127.55013, 38.32257], [128.02917, 38.31861], [128.27652, 38.41657], [128.31105, 38.58462], [128.37487, 38.62345], [128.65655, 38.61914], [131.95041, 41.5445], [130.65022, 42.32281], [130.66367, 42.38024], [130.64181, 42.41422], [130.60805, 42.4317], [130.56835, 42.43281], [130.55143, 42.52158], [130.50123, 42.61636], [130.44361, 42.54849], [130.41826, 42.6011], [130.2385, 42.71127], [130.23068, 42.80125], [130.26095, 42.9027]]]] } },
-    { type: "Feature", properties: { iso1A2: "KR", iso1A3: "KOR", iso1N3: "410", wikidata: "Q884", nameEn: "South Korea", groups: ["030", "142", "UN"], callingCodes: ["82"] }, geometry: { type: "MultiPolygon", coordinates: [[[[133.11729, 37.53115], [128.65655, 38.61914], [128.37487, 38.62345], [128.31105, 38.58462], [128.27652, 38.41657], [128.02917, 38.31861], [127.55013, 38.32257], [127.49672, 38.30647], [127.38727, 38.33227], [127.15749, 38.30722], [127.04479, 38.25518], [126.95338, 38.17735], [126.95887, 38.1347], [126.88106, 38.10246], [126.84961, 38.0344], [126.67023, 37.95852], [126.68793, 37.9175], [126.68793, 37.83728], [126.66067, 37.7897], [126.59918, 37.76364], [126.56709, 37.76857], [126.46818, 37.80873], [126.43239, 37.84095], [126.24402, 37.83113], [126.19097, 37.81462], [126.18776, 37.74728], [126.13074, 37.70512], [125.81159, 37.72949], [125.37112, 37.62643], [125.06408, 37.66334], [124.87921, 37.80827], [124.84224, 37.977], [124.67666, 38.05679], [123.85601, 37.49093], [122.80525, 33.30571], [125.99728, 32.63328], [129.2669, 34.87122], [133.11729, 37.53115]]]] } },
-    { type: "Feature", properties: { iso1A2: "KW", iso1A3: "KWT", iso1N3: "414", wikidata: "Q817", nameEn: "Kuwait", groups: ["145", "142", "UN"], callingCodes: ["965"] }, geometry: { type: "MultiPolygon", coordinates: [[[[49.00421, 28.81495], [48.59531, 29.66815], [48.40479, 29.85763], [48.17332, 30.02448], [48.06782, 30.02906], [48.01114, 29.98906], [47.7095, 30.10453], [47.37192, 30.10421], [47.15166, 30.01044], [46.89695, 29.50584], [46.5527, 29.10283], [47.46202, 29.0014], [47.58376, 28.83382], [47.59863, 28.66798], [47.70561, 28.5221], [48.42991, 28.53628], [49.00421, 28.81495]]]] } },
-    { type: "Feature", properties: { iso1A2: "KY", iso1A3: "CYM", iso1N3: "136", wikidata: "Q5785", nameEn: "Cayman Islands", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 345"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-82.11509, 19.60401], [-80.36068, 18.11751], [-79.32727, 20.06742], [-82.11509, 19.60401]]]] } },
-    { type: "Feature", properties: { iso1A2: "KZ", iso1A3: "KAZ", iso1N3: "398", wikidata: "Q232", nameEn: "Kazakhstan", groups: ["143", "142", "UN"], callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[68.90865, 55.38148], [68.19206, 55.18823], [68.26661, 55.09226], [68.21308, 54.98645], [65.20174, 54.55216], [65.24663, 54.35721], [65.11033, 54.33028], [64.97216, 54.4212], [63.97686, 54.29763], [64.02715, 54.22679], [63.91224, 54.20013], [63.80604, 54.27079], [62.58651, 54.05871], [62.56876, 53.94047], [62.45931, 53.90737], [62.38535, 54.03961], [62.00966, 54.04134], [62.03913, 53.94768], [61.65318, 54.02445], [61.56941, 53.95703], [61.47603, 54.08048], [61.3706, 54.08464], [61.26863, 53.92797], [60.99796, 53.93699], [61.14283, 53.90063], [61.22574, 53.80268], [60.90626, 53.62937], [61.55706, 53.57144], [61.57185, 53.50112], [61.37957, 53.45887], [61.29082, 53.50992], [61.14291, 53.41481], [61.19024, 53.30536], [62.14574, 53.09626], [62.12799, 52.99133], [62.0422, 52.96105], [61.23462, 53.03227], [61.05842, 52.92217], [60.71989, 52.75923], [60.71693, 52.66245], [60.84118, 52.63912], [60.84709, 52.52228], [60.98021, 52.50068], [61.05417, 52.35096], [60.78201, 52.22067], [60.72581, 52.15538], [60.48915, 52.15175], [60.19925, 51.99173], [59.99809, 51.98263], [60.09867, 51.87135], [60.50986, 51.7964], [60.36787, 51.66815], [60.5424, 51.61675], [60.92401, 51.61124], [60.95655, 51.48615], [61.50677, 51.40687], [61.55114, 51.32746], [61.6813, 51.25716], [61.56889, 51.23679], [61.4431, 50.80679], [60.81833, 50.6629], [60.31914, 50.67705], [60.17262, 50.83312], [60.01288, 50.8163], [59.81172, 50.54451], [59.51886, 50.49937], [59.48928, 50.64216], [58.87974, 50.70852], [58.3208, 51.15151], [57.75578, 51.13852], [57.74986, 50.93017], [57.44221, 50.88354], [57.17302, 51.11253], [56.17906, 50.93204], [56.11398, 50.7471], [55.67774, 50.54508], [54.72067, 51.03261], [54.56685, 51.01958], [54.71476, 50.61214], [54.55797, 50.52006], [54.41894, 50.61214], [54.46331, 50.85554], [54.12248, 51.11542], [53.69299, 51.23466], [53.46165, 51.49445], [52.54329, 51.48444], [52.36119, 51.74161], [51.8246, 51.67916], [51.77431, 51.49536], [51.301, 51.48799], [51.26254, 51.68466], [50.59695, 51.61859], [50.26859, 51.28677], [49.97277, 51.2405], [49.76866, 51.11067], [49.39001, 51.09396], [49.41959, 50.85927], [49.12673, 50.78639], [48.86936, 50.61589], [48.57946, 50.63278], [48.90782, 50.02281], [48.68352, 49.89546], [48.42564, 49.82283], [48.24519, 49.86099], [48.10044, 50.09242], [47.58551, 50.47867], [47.30448, 50.30894], [47.34589, 50.09308], [47.18319, 49.93721], [46.9078, 49.86707], [46.78398, 49.34026], [47.04658, 49.19834], [47.00857, 49.04921], [46.78392, 48.95352], [46.49011, 48.43019], [47.11516, 48.27188], [47.12107, 47.83687], [47.38731, 47.68176], [47.41689, 47.83687], [47.64973, 47.76559], [48.15348, 47.74545], [48.45173, 47.40818], [48.52326, 47.4102], [49.01136, 46.72716], [48.51142, 46.69268], [48.54988, 46.56267], [49.16518, 46.38542], [49.32259, 46.26944], [49.88945, 46.04554], [49.2134, 44.84989], [52.26048, 41.69249], [52.47884, 41.78034], [52.97575, 42.1308], [54.20635, 42.38477], [54.95182, 41.92424], [55.45471, 41.25609], [56.00314, 41.32584], [55.97584, 44.99322], [55.97584, 44.99328], [55.97584, 44.99338], [55.97584, 44.99343], [55.97584, 44.99348], [55.97584, 44.99353], [55.97584, 44.99359], [55.97584, 44.99369], [55.97584, 44.99374], [55.97584, 44.99384], [55.97584, 44.9939], [55.97584, 44.994], [55.97584, 44.99405], [55.97584, 44.99415], [55.97584, 44.99421], [55.97584, 44.99426], [55.97584, 44.99431], [55.97584, 44.99436], [55.97584, 44.99441], [55.97594, 44.99446], [55.97605, 44.99452], [55.97605, 44.99457], [55.97605, 44.99462], [55.97605, 44.99467], [55.97605, 44.99477], [55.97615, 44.99477], [55.97615, 44.99483], [55.97615, 44.99493], [55.97615, 44.99498], [55.97615, 44.99503], [55.97615, 44.99508], [55.97625, 44.99514], [55.97636, 44.99519], [55.97636, 44.99524], [55.97646, 44.99529], [55.97646, 44.99534], [55.97656, 44.99539], [55.97667, 44.99545], [55.97677, 44.9955], [55.97677, 44.99555], [55.97677, 44.9956], [55.97687, 44.9956], [55.97698, 44.99565], [55.97698, 44.9957], [55.97708, 44.99576], [55.97718, 44.99581], [55.97729, 44.99586], [55.97739, 44.99586], [55.97739, 44.99591], [55.97749, 44.99591], [55.9776, 44.99591], [55.9777, 44.99596], [55.9777, 44.99601], [55.9778, 44.99607], [55.97791, 44.99607], [55.97801, 44.99607], [55.97801, 44.99612], [55.97811, 44.99617], [55.97822, 44.99617], [55.97832, 44.99622], [55.97842, 44.99622], [58.59711, 45.58671], [61.01475, 44.41383], [62.01711, 43.51008], [63.34656, 43.64003], [64.53885, 43.56941], [64.96464, 43.74748], [65.18666, 43.48835], [65.53277, 43.31856], [65.85194, 42.85481], [66.09482, 42.93426], [66.00546, 41.94455], [66.53302, 41.87388], [66.69129, 41.1311], [67.9644, 41.14611], [67.98511, 41.02794], [68.08273, 41.08148], [68.1271, 41.0324], [67.96736, 40.83798], [68.49983, 40.56437], [68.63, 40.59358], [68.58444, 40.91447], [68.49983, 40.99669], [68.62221, 41.03019], [68.65662, 40.93861], [68.73945, 40.96989], [68.7217, 41.05025], [69.01308, 41.22804], [69.05006, 41.36183], [69.15137, 41.43078], [69.17701, 41.43769], [69.18528, 41.45175], [69.20439, 41.45391], [69.22671, 41.46298], [69.23332, 41.45847], [69.25059, 41.46693], [69.29778, 41.43673], [69.35554, 41.47211], [69.37468, 41.46555], [69.45081, 41.46246], [69.39485, 41.51518], [69.45751, 41.56863], [69.49545, 41.545], [70.94483, 42.26238], [70.85973, 42.30188], [70.97717, 42.50147], [71.15232, 42.60486], [71.17807, 42.67381], [71.22785, 42.69248], [71.2724, 42.77853], [71.53272, 42.8014], [71.62405, 42.76613], [71.88792, 42.83578], [73.44393, 42.43098], [73.50992, 42.82356], [73.55634, 43.03071], [74.22489, 43.24657], [74.57491, 43.13702], [74.64615, 43.05881], [74.70331, 43.02519], [74.75, 42.99029], [74.88756, 42.98612], [75.22619, 42.85528], [75.29966, 42.86183], [75.72174, 42.79672], [75.82823, 42.94848], [78.48469, 42.89649], [78.91502, 42.76839], [79.19763, 42.804], [79.52921, 42.44778], [79.97364, 42.42816], [80.17807, 42.21166], [80.26841, 42.23797], [80.16892, 42.61137], [80.26886, 42.8366], [80.38169, 42.83142], [80.58999, 42.9011], [80.3735, 43.01557], [80.62913, 43.141], [80.78817, 43.14235], [80.77771, 43.30065], [80.69718, 43.32589], [80.75156, 43.44948], [80.40031, 44.10986], [80.40229, 44.23319], [80.38384, 44.63073], [79.8987, 44.89957], [80.11169, 45.03352], [81.73278, 45.3504], [82.51374, 45.1755], [82.58474, 45.40027], [82.21792, 45.56619], [83.04622, 47.19053], [83.92184, 46.98912], [84.73077, 47.01394], [84.93995, 46.87399], [85.22443, 47.04816], [85.54294, 47.06171], [85.69696, 47.2898], [85.61067, 47.49753], [85.5169, 48.05493], [85.73581, 48.3939], [86.38069, 48.46064], [86.75343, 48.70331], [86.73568, 48.99918], [86.87238, 49.12432], [87.28386, 49.11626], [87.31465, 49.23603], [87.03071, 49.25142], [86.82606, 49.51796], [86.61307, 49.60239], [86.79056, 49.74787], [86.63674, 49.80136], [86.18709, 49.50259], [85.24047, 49.60239], [84.99198, 50.06793], [84.29385, 50.27257], [83.8442, 50.87375], [83.14607, 51.00796], [82.55443, 50.75412], [81.94999, 50.79307], [81.46581, 50.77658], [81.41248, 50.97524], [81.06091, 50.94833], [81.16999, 51.15662], [80.80318, 51.28262], [80.44819, 51.20855], [80.4127, 50.95581], [80.08138, 50.77658], [79.11255, 52.01171], [77.90383, 53.29807], [76.54243, 53.99329], [76.44076, 54.16017], [76.82266, 54.1798], [76.91052, 54.4677], [75.3668, 54.07439], [75.43398, 53.98652], [75.07405, 53.80831], [73.39218, 53.44623], [73.25412, 53.61532], [73.68921, 53.86522], [73.74778, 54.07194], [73.37963, 53.96132], [72.71026, 54.1161], [72.43415, 53.92685], [72.17477, 54.36303], [71.96141, 54.17736], [71.10379, 54.13326], [71.08706, 54.33376], [71.24185, 54.64965], [71.08288, 54.71253], [70.96009, 55.10558], [70.76493, 55.3027], [70.19179, 55.1476], [69.74917, 55.35545], [69.34224, 55.36344], [68.90865, 55.38148]]]] } },
-    { type: "Feature", properties: { iso1A2: "LA", iso1A3: "LAO", iso1N3: "418", wikidata: "Q819", nameEn: "Laos", groups: ["035", "142", "UN"], callingCodes: ["856"] }, geometry: { type: "MultiPolygon", coordinates: [[[[102.1245, 22.43372], [102.03633, 22.46164], [101.98487, 22.42766], [101.91344, 22.44417], [101.90714, 22.38688], [101.86828, 22.38397], [101.7685, 22.50337], [101.68973, 22.46843], [101.61306, 22.27515], [101.56789, 22.28876], [101.53638, 22.24794], [101.60675, 22.13513], [101.57525, 22.13026], [101.62566, 21.96574], [101.7791, 21.83019], [101.74555, 21.72852], [101.83257, 21.61562], [101.80001, 21.57461], [101.7475, 21.5873], [101.7727, 21.51794], [101.74224, 21.48276], [101.74014, 21.30967], [101.84412, 21.25291], [101.83887, 21.20983], [101.76745, 21.21571], [101.79266, 21.19025], [101.7622, 21.14813], [101.70548, 21.14911], [101.66977, 21.20004], [101.60886, 21.17947], [101.59491, 21.18621], [101.6068, 21.23329], [101.54563, 21.25668], [101.29326, 21.17254], [101.2229, 21.23271], [101.26912, 21.36482], [101.19349, 21.41959], [101.2124, 21.56422], [101.15156, 21.56129], [101.16198, 21.52808], [101.00234, 21.39612], [100.80173, 21.2934], [100.72716, 21.31786], [100.63578, 21.05639], [100.55281, 21.02796], [100.50974, 20.88574], [100.64628, 20.88279], [100.60112, 20.8347], [100.51079, 20.82194], [100.36375, 20.82783], [100.1957, 20.68247], [100.08404, 20.36626], [100.09999, 20.31614], [100.09337, 20.26293], [100.11785, 20.24787], [100.1712, 20.24324], [100.16668, 20.2986], [100.22076, 20.31598], [100.25769, 20.3992], [100.33383, 20.4028], [100.37439, 20.35156], [100.41473, 20.25625], [100.44992, 20.23644], [100.4537, 20.19971], [100.47567, 20.19133], [100.51052, 20.14928], [100.55218, 20.17741], [100.58808, 20.15791], [100.5094, 19.87904], [100.398, 19.75047], [100.49604, 19.53504], [100.58219, 19.49164], [100.64606, 19.55884], [100.77231, 19.48324], [100.90302, 19.61901], [101.08928, 19.59748], [101.26545, 19.59242], [101.26991, 19.48324], [101.21347, 19.46223], [101.20604, 19.35296], [101.24911, 19.33334], [101.261, 19.12717], [101.35606, 19.04716], [101.25803, 18.89545], [101.22832, 18.73377], [101.27585, 18.68875], [101.06047, 18.43247], [101.18227, 18.34367], [101.15108, 18.25624], [101.19118, 18.2125], [101.1793, 18.0544], [101.02185, 17.87637], [100.96541, 17.57926], [101.15108, 17.47586], [101.44667, 17.7392], [101.72294, 17.92867], [101.78087, 18.07559], [101.88485, 18.02474], [102.11359, 18.21532], [102.45523, 17.97106], [102.59234, 17.96127], [102.60971, 17.95411], [102.61432, 17.92273], [102.5896, 17.84889], [102.59485, 17.83537], [102.68194, 17.80151], [102.69946, 17.81686], [102.67543, 17.84529], [102.68538, 17.86653], [102.75954, 17.89561], [102.79044, 17.93612], [102.81988, 17.94233], [102.86323, 17.97531], [102.95812, 18.0054], [102.9912, 17.9949], [103.01998, 17.97095], [103.0566, 18.00144], [103.07823, 18.03833], [103.07343, 18.12351], [103.1493, 18.17799], [103.14994, 18.23172], [103.17093, 18.2618], [103.29757, 18.30475], [103.23818, 18.34875], [103.24779, 18.37807], [103.30977, 18.4341], [103.41044, 18.4486], [103.47773, 18.42841], [103.60957, 18.40528], [103.699, 18.34125], [103.82449, 18.33979], [103.85642, 18.28666], [103.93916, 18.33914], [103.97725, 18.33631], [104.06533, 18.21656], [104.10927, 18.10826], [104.21776, 17.99335], [104.2757, 17.86139], [104.35432, 17.82871], [104.45404, 17.66788], [104.69867, 17.53038], [104.80061, 17.39367], [104.80716, 17.19025], [104.73712, 17.01404], [104.7373, 16.91125], [104.76442, 16.84752], [104.7397, 16.81005], [104.76099, 16.69302], [104.73349, 16.565], [104.88057, 16.37311], [105.00262, 16.25627], [105.06204, 16.09792], [105.42001, 16.00657], [105.38508, 15.987], [105.34115, 15.92737], [105.37959, 15.84074], [105.42285, 15.76971], [105.46573, 15.74742], [105.61756, 15.68792], [105.60446, 15.53301], [105.58191, 15.41031], [105.47635, 15.3796], [105.4692, 15.33709], [105.50662, 15.32054], [105.58043, 15.32724], [105.46661, 15.13132], [105.61162, 15.00037], [105.5121, 14.80802], [105.53864, 14.55731], [105.43783, 14.43865], [105.20894, 14.34967], [105.2759, 14.17496], [105.36775, 14.09948], [105.44869, 14.10703], [105.5561, 14.15684], [105.78338, 14.08438], [105.78182, 14.02247], [105.90791, 13.92881], [106.10405, 13.9137], [106.10094, 13.98471], [106.16632, 14.01794], [106.18656, 14.06324], [106.11962, 14.11307], [106.10872, 14.18401], [106.04801, 14.20363], [106.02311, 14.30623], [105.99509, 14.32734], [106.00131, 14.36957], [106.21302, 14.36203], [106.25194, 14.48415], [106.32355, 14.44043], [106.40916, 14.45249], [106.43874, 14.52032], [106.47766, 14.50977], [106.45898, 14.55045], [106.50723, 14.58963], [106.54148, 14.59565], [106.57106, 14.50525], [106.59908, 14.50977], [106.63333, 14.44194], [106.73762, 14.42687], [106.80767, 14.31226], [106.8497, 14.29416], [106.90574, 14.33639], [106.9649, 14.3198], [106.98825, 14.36806], [107.04585, 14.41782], [107.03962, 14.45099], [107.09722, 14.3937], [107.17038, 14.41782], [107.21241, 14.48716], [107.256, 14.48716], [107.26534, 14.54292], [107.29803, 14.58963], [107.3276, 14.58812], [107.37897, 14.54443], [107.44435, 14.52785], [107.47238, 14.61523], [107.54361, 14.69092], [107.51579, 14.79282], [107.59285, 14.87795], [107.48277, 14.93751], [107.46516, 15.00982], [107.61486, 15.0566], [107.61926, 15.13949], [107.58844, 15.20111], [107.62587, 15.2266], [107.60605, 15.37524], [107.62367, 15.42193], [107.53341, 15.40496], [107.50699, 15.48771], [107.3815, 15.49832], [107.34408, 15.62345], [107.27583, 15.62769], [107.27143, 15.71459], [107.21859, 15.74638], [107.21419, 15.83747], [107.34188, 15.89464], [107.39471, 15.88829], [107.46296, 16.01106], [107.44975, 16.08511], [107.33968, 16.05549], [107.25822, 16.13587], [107.14595, 16.17816], [107.15035, 16.26271], [107.09091, 16.3092], [107.02597, 16.31132], [106.97385, 16.30204], [106.96638, 16.34938], [106.88067, 16.43594], [106.88727, 16.52671], [106.84104, 16.55415], [106.74418, 16.41904], [106.65832, 16.47816], [106.66052, 16.56892], [106.61477, 16.60713], [106.58267, 16.6012], [106.59013, 16.62259], [106.55485, 16.68704], [106.55265, 16.86831], [106.52183, 16.87884], [106.51963, 16.92097], [106.54824, 16.92729], [106.55045, 17.0031], [106.50862, 16.9673], [106.43597, 17.01362], [106.31929, 17.20509], [106.29287, 17.3018], [106.24444, 17.24714], [106.18991, 17.28227], [106.09019, 17.36399], [105.85744, 17.63221], [105.76612, 17.67147], [105.60381, 17.89356], [105.64784, 17.96687], [105.46292, 18.22008], [105.38366, 18.15315], [105.15942, 18.38691], [105.10408, 18.43533], [105.1327, 18.58355], [105.19654, 18.64196], [105.12829, 18.70453], [104.64617, 18.85668], [104.5361, 18.97747], [103.87125, 19.31854], [104.06058, 19.43484], [104.10832, 19.51575], [104.05617, 19.61743], [104.06498, 19.66926], [104.23229, 19.70242], [104.41281, 19.70035], [104.53169, 19.61743], [104.64837, 19.62365], [104.68359, 19.72729], [104.8355, 19.80395], [104.8465, 19.91783], [104.9874, 20.09573], [104.91695, 20.15567], [104.86852, 20.14121], [104.61315, 20.24452], [104.62195, 20.36633], [104.72102, 20.40554], [104.66158, 20.47774], [104.47886, 20.37459], [104.40621, 20.3849], [104.38199, 20.47155], [104.63957, 20.6653], [104.27412, 20.91433], [104.11121, 20.96779], [103.98024, 20.91531], [103.82282, 20.8732], [103.73478, 20.6669], [103.68633, 20.66324], [103.45737, 20.82382], [103.38032, 20.79501], [103.21497, 20.89832], [103.12055, 20.89994], [103.03469, 21.05821], [102.97745, 21.05821], [102.89825, 21.24707], [102.80794, 21.25736], [102.88939, 21.3107], [102.94223, 21.46034], [102.86297, 21.4255], [102.98846, 21.58936], [102.97965, 21.74076], [102.86077, 21.71213], [102.85637, 21.84501], [102.81894, 21.83888], [102.82115, 21.73667], [102.74189, 21.66713], [102.67145, 21.65894], [102.62301, 21.91447], [102.49092, 21.99002], [102.51734, 22.02676], [102.18712, 22.30403], [102.14099, 22.40092], [102.1245, 22.43372]]]] } },
-    { type: "Feature", properties: { iso1A2: "LB", iso1A3: "LBN", iso1N3: "422", wikidata: "Q822", nameEn: "Lebanon", aliases: ["RL"], groups: ["145", "142", "UN"], callingCodes: ["961"] }, geometry: { type: "MultiPolygon", coordinates: [[[[35.94816, 33.47886], [35.94465, 33.52774], [36.05723, 33.57904], [35.9341, 33.6596], [36.06778, 33.82927], [36.14517, 33.85118], [36.3967, 33.83365], [36.38263, 33.86579], [36.28589, 33.91981], [36.41078, 34.05253], [36.50576, 34.05982], [36.5128, 34.09916], [36.62537, 34.20251], [36.59195, 34.2316], [36.58667, 34.27667], [36.60778, 34.31009], [36.56556, 34.31881], [36.53039, 34.3798], [36.55853, 34.41609], [36.46179, 34.46541], [36.4442, 34.50165], [36.34745, 34.5002], [36.3369, 34.52629], [36.39846, 34.55672], [36.41429, 34.61175], [36.45299, 34.59438], [36.46003, 34.6378], [36.42941, 34.62505], [36.35384, 34.65447], [36.35135, 34.68516], [36.32399, 34.69334], [36.29165, 34.62991], [35.98718, 34.64977], [35.97386, 34.63322], [35.48515, 34.70851], [34.78515, 33.20368], [35.10645, 33.09318], [35.1924, 33.08743], [35.31429, 33.10515], [35.35223, 33.05617], [35.43059, 33.06659], [35.448, 33.09264], [35.50272, 33.09056], [35.50335, 33.114], [35.52573, 33.11921], [35.54228, 33.19865], [35.5362, 33.23196], [35.54808, 33.236], [35.54544, 33.25513], [35.55555, 33.25844], [35.56523, 33.28969], [35.58326, 33.28381], [35.58502, 33.26653], [35.62283, 33.24226], [35.62019, 33.27278], [35.77477, 33.33609], [35.81324, 33.36354], [35.82577, 33.40479], [35.88668, 33.43183], [35.94816, 33.47886]]]] } },
-    { type: "Feature", properties: { iso1A2: "LC", iso1A3: "LCA", iso1N3: "662", wikidata: "Q760", nameEn: "St. Lucia", aliases: ["WL"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 758"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-59.95997, 14.20285], [-61.69315, 14.26451], [-59.94058, 12.34011], [-59.95997, 14.20285]]]] } },
-    { type: "Feature", properties: { iso1A2: "LI", iso1A3: "LIE", iso1N3: "438", wikidata: "Q347", nameEn: "Liechtenstein", aliases: ["FL"], groups: ["155", "150", "UN"], callingCodes: ["423"] }, geometry: { type: "MultiPolygon", coordinates: [[[[9.60717, 47.06091], [9.61216, 47.07732], [9.63395, 47.08443], [9.62623, 47.14685], [9.56539, 47.17124], [9.58264, 47.20673], [9.56981, 47.21926], [9.55176, 47.22585], [9.56766, 47.24281], [9.53116, 47.27029], [9.52406, 47.24959], [9.50318, 47.22153], [9.4891, 47.19346], [9.48774, 47.17402], [9.51044, 47.13727], [9.52089, 47.10019], [9.51362, 47.08505], [9.47139, 47.06402], [9.47548, 47.05257], [9.54041, 47.06495], [9.55721, 47.04762], [9.60717, 47.06091]]]] } },
-    { type: "Feature", properties: { iso1A2: "LK", iso1A3: "LKA", iso1N3: "144", wikidata: "Q854", nameEn: "Sri Lanka", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["94"] }, geometry: { type: "MultiPolygon", coordinates: [[[[76.59015, 5.591], [85.15017, 5.21497], [80.48418, 10.20786], [79.42124, 9.80115], [79.50447, 8.91876], [76.59015, 5.591]]]] } },
-    { type: "Feature", properties: { iso1A2: "LR", iso1A3: "LBR", iso1N3: "430", wikidata: "Q1014", nameEn: "Liberia", groups: ["011", "202", "002", "UN"], callingCodes: ["231"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.47114, 7.55676], [-8.55874, 7.62525], [-8.55874, 7.70167], [-8.67814, 7.69428], [-8.72789, 7.51429], [-8.8448, 7.35149], [-8.85724, 7.26019], [-8.93435, 7.2824], [-9.09107, 7.1985], [-9.18311, 7.30461], [-9.20798, 7.38109], [-9.305, 7.42056], [-9.41943, 7.41809], [-9.48161, 7.37122], [-9.37465, 7.62032], [-9.35724, 7.74111], [-9.44928, 7.9284], [-9.41445, 8.02448], [-9.50898, 8.18455], [-9.47415, 8.35195], [-9.77763, 8.54633], [-10.05873, 8.42578], [-10.05375, 8.50697], [-10.14579, 8.52665], [-10.203, 8.47991], [-10.27575, 8.48711], [-10.30084, 8.30008], [-10.31635, 8.28554], [-10.29839, 8.21283], [-10.35227, 8.15223], [-10.45023, 8.15627], [-10.51554, 8.1393], [-10.57523, 8.04829], [-10.60492, 8.04072], [-10.60422, 7.7739], [-11.29417, 7.21576], [-11.4027, 6.97746], [-11.50429, 6.92704], [-12.15048, 6.15992], [-7.52774, 3.7105], [-7.53259, 4.35145], [-7.59349, 4.8909], [-7.53876, 4.94294], [-7.55369, 5.08667], [-7.48901, 5.14118], [-7.46165, 5.26256], [-7.36463, 5.32944], [-7.43428, 5.42355], [-7.37209, 5.61173], [-7.43926, 5.74787], [-7.43677, 5.84687], [-7.46165, 5.84934], [-7.48155, 5.80974], [-7.67309, 5.94337], [-7.70294, 5.90625], [-7.78254, 5.99037], [-7.79747, 6.07696], [-7.8497, 6.08932], [-7.83478, 6.20309], [-7.90692, 6.27728], [-8.00642, 6.31684], [-8.17557, 6.28222], [-8.3298, 6.36381], [-8.38453, 6.35887], [-8.45666, 6.49977], [-8.48652, 6.43797], [-8.59456, 6.50612], [-8.31736, 6.82837], [-8.29249, 7.1691], [-8.37458, 7.25794], [-8.41935, 7.51203], [-8.47114, 7.55676]]]] } },
-    { type: "Feature", properties: { iso1A2: "LS", iso1A3: "LSO", iso1N3: "426", wikidata: "Q1013", nameEn: "Lesotho", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["266"] }, geometry: { type: "MultiPolygon", coordinates: [[[[29.33204, -29.45598], [29.44883, -29.3772], [29.40524, -29.21246], [28.68043, -28.58744], [28.65091, -28.57025], [28.40612, -28.6215], [28.30518, -28.69531], [28.2348, -28.69471], [28.1317, -28.7293], [28.02503, -28.85991], [27.98675, -28.8787], [27.9392, -28.84864], [27.88933, -28.88156], [27.8907, -28.91612], [27.75458, -28.89839], [27.55974, -29.18954], [27.5158, -29.2261], [27.54258, -29.25575], [27.48679, -29.29349], [27.45125, -29.29708], [27.47254, -29.31968], [27.4358, -29.33465], [27.33464, -29.48161], [27.01016, -29.65439], [27.09489, -29.72796], [27.22719, -30.00718], [27.29603, -30.05473], [27.32555, -30.14785], [27.40778, -30.14577], [27.37293, -30.19401], [27.36649, -30.27246], [27.38108, -30.33456], [27.45452, -30.32239], [27.56901, -30.42504], [27.56781, -30.44562], [27.62137, -30.50509], [27.6521, -30.51707], [27.67819, -30.53437], [27.69467, -30.55862], [27.74814, -30.60635], [28.12073, -30.68072], [28.2319, -30.28476], [28.399, -30.1592], [28.68627, -30.12885], [28.80222, -30.10579], [28.9338, -30.05072], [29.16548, -29.91706], [29.12553, -29.76266], [29.28545, -29.58456], [29.33204, -29.45598]]]] } },
-    { type: "Feature", properties: { iso1A2: "LT", iso1A3: "LTU", iso1N3: "440", wikidata: "Q37", nameEn: "Lithuania", groups: ["EU", "154", "150", "UN"], callingCodes: ["370"] }, geometry: { type: "MultiPolygon", coordinates: [[[[24.89005, 56.46666], [24.83686, 56.41565], [24.70022, 56.40483], [24.57353, 56.31525], [24.58143, 56.29125], [24.42746, 56.26522], [24.32334, 56.30226], [24.13139, 56.24881], [24.02657, 56.3231], [23.75726, 56.37282], [23.49803, 56.34307], [23.40486, 56.37689], [23.31606, 56.3827], [23.17312, 56.36795], [23.09531, 56.30511], [22.96988, 56.41213], [22.83048, 56.367], [22.69354, 56.36284], [22.56441, 56.39305], [22.3361, 56.4016], [22.09728, 56.42851], [22.00548, 56.41508], [21.74558, 56.33181], [21.57888, 56.31406], [21.49736, 56.29106], [21.24644, 56.16917], [21.15016, 56.07818], [20.68447, 56.04073], [20.60454, 55.40986], [20.95181, 55.27994], [21.26425, 55.24456], [21.35465, 55.28427], [21.38446, 55.29348], [21.46766, 55.21115], [21.51095, 55.18507], [21.55605, 55.20311], [21.64954, 55.1791], [21.85521, 55.09493], [21.96505, 55.07353], [21.99543, 55.08691], [22.03984, 55.07888], [22.02582, 55.05078], [22.06087, 55.02935], [22.11697, 55.02131], [22.14267, 55.05345], [22.31562, 55.0655], [22.47688, 55.04408], [22.58907, 55.07085], [22.60075, 55.01863], [22.65451, 54.97037], [22.68723, 54.9811], [22.76422, 54.92521], [22.85083, 54.88711], [22.87317, 54.79492], [22.73631, 54.72952], [22.73397, 54.66604], [22.75467, 54.6483], [22.74225, 54.64339], [22.7522, 54.63525], [22.68021, 54.58486], [22.71293, 54.56454], [22.67788, 54.532], [22.70208, 54.45312], [22.7253, 54.41732], [22.79705, 54.36264], [22.83756, 54.40827], [23.00584, 54.38514], [22.99649, 54.35927], [23.05726, 54.34565], [23.04323, 54.31567], [23.104, 54.29794], [23.13905, 54.31567], [23.15526, 54.31076], [23.15938, 54.29894], [23.24656, 54.25701], [23.3494, 54.25155], [23.39525, 54.21672], [23.42418, 54.17911], [23.45223, 54.17775], [23.49196, 54.14764], [23.52702, 54.04622], [23.48261, 53.98855], [23.51284, 53.95052], [23.61677, 53.92691], [23.71726, 53.93379], [23.80543, 53.89558], [23.81309, 53.94205], [23.95098, 53.9613], [23.98837, 53.92554], [24.19638, 53.96405], [24.34128, 53.90076], [24.44411, 53.90076], [24.62275, 54.00217], [24.69652, 54.01901], [24.69185, 53.96543], [24.74279, 53.96663], [24.85311, 54.02862], [24.77131, 54.11091], [24.96894, 54.17589], [24.991, 54.14241], [25.0728, 54.13419], [25.19199, 54.219], [25.22705, 54.26271], [25.35559, 54.26544], [25.509, 54.30267], [25.56823, 54.25212], [25.51452, 54.17799], [25.54724, 54.14925], [25.64875, 54.1259], [25.71084, 54.16704], [25.78563, 54.15747], [25.78553, 54.23327], [25.68513, 54.31727], [25.55425, 54.31591], [25.5376, 54.33158], [25.63371, 54.42075], [25.62203, 54.4656], [25.64813, 54.48704], [25.68045, 54.5321], [25.75977, 54.57252], [25.74122, 54.80108], [25.89462, 54.93438], [25.99129, 54.95705], [26.05907, 54.94631], [26.13386, 54.98924], [26.20397, 54.99729], [26.26941, 55.08032], [26.23202, 55.10439], [26.30628, 55.12536], [26.35121, 55.1525], [26.46249, 55.12814], [26.51481, 55.16051], [26.54753, 55.14181], [26.69243, 55.16718], [26.68075, 55.19787], [26.72983, 55.21788], [26.73017, 55.24226], [26.835, 55.28182], [26.83266, 55.30444], [26.80929, 55.31642], [26.6714, 55.33902], [26.5709, 55.32572], [26.44937, 55.34832], [26.5522, 55.40277], [26.55094, 55.5093], [26.63167, 55.57887], [26.63231, 55.67968], [26.58248, 55.6754], [26.46661, 55.70375], [26.39561, 55.71156], [26.18509, 55.86813], [26.03815, 55.95884], [25.90047, 56.0013], [25.85893, 56.00188], [25.81773, 56.05444], [25.69246, 56.08892], [25.68588, 56.14725], [25.53621, 56.16663], [25.39751, 56.15707], [25.23099, 56.19147], [25.09325, 56.1878], [25.05762, 56.26742], [24.89005, 56.46666]]]] } },
-    { type: "Feature", properties: { iso1A2: "LU", iso1A3: "LUX", iso1N3: "442", wikidata: "Q32", nameEn: "Luxembourg", groups: ["EU", "155", "150", "UN"], callingCodes: ["352"] }, geometry: { type: "MultiPolygon", coordinates: [[[[6.1379, 50.12964], [6.1137, 50.13668], [6.12028, 50.16374], [6.08577, 50.17246], [6.06406, 50.15344], [6.03093, 50.16362], [6.02488, 50.18283], [5.96453, 50.17259], [5.95929, 50.13295], [5.89488, 50.11476], [5.8857, 50.07824], [5.85474, 50.06342], [5.86904, 50.04614], [5.8551, 50.02683], [5.81866, 50.01286], [5.82331, 49.99662], [5.83968, 49.9892], [5.83467, 49.97823], [5.81163, 49.97142], [5.80833, 49.96451], [5.77291, 49.96056], [5.77314, 49.93646], [5.73621, 49.89796], [5.78415, 49.87922], [5.75269, 49.8711], [5.75861, 49.85631], [5.74567, 49.85368], [5.75884, 49.84811], [5.74953, 49.84709], [5.74975, 49.83933], [5.74076, 49.83823], [5.7404, 49.83452], [5.74844, 49.82435], [5.74364, 49.82058], [5.74953, 49.81428], [5.75409, 49.79239], [5.78871, 49.7962], [5.82245, 49.75048], [5.83149, 49.74729], [5.82562, 49.72395], [5.84193, 49.72161], [5.86503, 49.72739], [5.88677, 49.70951], [5.86527, 49.69291], [5.86175, 49.67862], [5.9069, 49.66377], [5.90164, 49.6511], [5.90599, 49.63853], [5.88552, 49.63507], [5.88393, 49.62802], [5.87609, 49.62047], [5.8762, 49.60898], [5.84826, 49.5969], [5.84971, 49.58674], [5.86986, 49.58756], [5.87256, 49.57539], [5.8424, 49.56082], [5.84692, 49.55663], [5.84143, 49.5533], [5.81838, 49.54777], [5.80871, 49.5425], [5.81664, 49.53775], [5.83648, 49.5425], [5.84466, 49.53027], [5.83467, 49.52717], [5.83389, 49.52152], [5.86571, 49.50015], [5.94128, 49.50034], [5.94224, 49.49608], [5.96876, 49.49053], [5.97693, 49.45513], [6.02648, 49.45451], [6.02743, 49.44845], [6.04176, 49.44801], [6.05553, 49.46663], [6.07887, 49.46399], [6.08373, 49.45594], [6.10072, 49.45268], [6.09845, 49.46351], [6.10325, 49.4707], [6.12346, 49.4735], [6.12814, 49.49365], [6.14321, 49.48796], [6.16115, 49.49297], [6.15366, 49.50226], [6.17386, 49.50934], [6.19543, 49.50536], [6.2409, 49.51408], [6.25029, 49.50609], [6.27875, 49.503], [6.28818, 49.48465], [6.3687, 49.4593], [6.36778, 49.46937], [6.36907, 49.48931], [6.36788, 49.50377], [6.35666, 49.52931], [6.38072, 49.55171], [6.38228, 49.55855], [6.35825, 49.57053], [6.36676, 49.57813], [6.38024, 49.57593], [6.38342, 49.5799], [6.37464, 49.58886], [6.385, 49.59946], [6.39822, 49.60081], [6.41861, 49.61723], [6.4413, 49.65722], [6.43768, 49.66021], [6.42726, 49.66078], [6.42937, 49.66857], [6.44654, 49.67799], [6.46048, 49.69092], [6.48014, 49.69767], [6.49785, 49.71118], [6.50647, 49.71353], [6.5042, 49.71808], [6.49694, 49.72205], [6.49535, 49.72645], [6.50261, 49.72718], [6.51397, 49.72058], [6.51805, 49.72425], [6.50193, 49.73291], [6.50174, 49.75292], [6.51646, 49.75961], [6.51828, 49.76855], [6.51056, 49.77515], [6.51669, 49.78336], [6.50534, 49.78952], [6.52169, 49.79787], [6.53122, 49.80666], [6.52121, 49.81338], [6.51215, 49.80124], [6.50647, 49.80916], [6.48718, 49.81267], [6.47111, 49.82263], [6.45425, 49.81164], [6.44131, 49.81443], [6.42905, 49.81091], [6.42521, 49.81591], [6.40022, 49.82029], [6.36576, 49.85032], [6.34267, 49.84974], [6.33585, 49.83785], [6.32098, 49.83728], [6.32303, 49.85133], [6.30963, 49.87021], [6.29692, 49.86685], [6.28874, 49.87592], [6.26146, 49.88203], [6.23496, 49.89972], [6.22926, 49.92096], [6.21882, 49.92403], [6.22608, 49.929], [6.22094, 49.94955], [6.19856, 49.95053], [6.19089, 49.96991], [6.18045, 49.96611], [6.18554, 49.95622], [6.17872, 49.9537], [6.16466, 49.97086], [6.1701, 49.98518], [6.14147, 49.99563], [6.14948, 50.00908], [6.13806, 50.01056], [6.1295, 50.01849], [6.13273, 50.02019], [6.13794, 50.01466], [6.14666, 50.02207], [6.13044, 50.02929], [6.13458, 50.04141], [6.11274, 50.05916], [6.12055, 50.09171], [6.1379, 50.12964]]]] } },
-    { type: "Feature", properties: { iso1A2: "LV", iso1A3: "LVA", iso1N3: "428", wikidata: "Q211", nameEn: "Latvia", groups: ["EU", "154", "150", "UN"], callingCodes: ["371"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.34698, 57.52242], [26.90364, 57.62823], [26.54675, 57.51813], [26.46527, 57.56885], [26.29253, 57.59244], [26.1866, 57.6849], [26.2029, 57.7206], [26.08098, 57.76619], [26.0543, 57.76105], [26.03332, 57.7718], [26.02415, 57.76865], [26.02069, 57.77169], [26.0266, 57.77441], [26.027, 57.78158], [26.02456, 57.78342], [26.0324, 57.79037], [26.05949, 57.84744], [25.73499, 57.90193], [25.29581, 58.08288], [25.28237, 57.98539], [25.19484, 58.0831], [24.3579, 57.87471], [24.26221, 57.91787], [23.20055, 57.56697], [22.80496, 57.87798], [19.84909, 57.57876], [19.64795, 57.06466], [20.68447, 56.04073], [21.15016, 56.07818], [21.24644, 56.16917], [21.49736, 56.29106], [21.57888, 56.31406], [21.74558, 56.33181], [22.00548, 56.41508], [22.09728, 56.42851], [22.3361, 56.4016], [22.56441, 56.39305], [22.69354, 56.36284], [22.83048, 56.367], [22.96988, 56.41213], [23.09531, 56.30511], [23.17312, 56.36795], [23.31606, 56.3827], [23.40486, 56.37689], [23.49803, 56.34307], [23.75726, 56.37282], [24.02657, 56.3231], [24.13139, 56.24881], [24.32334, 56.30226], [24.42746, 56.26522], [24.58143, 56.29125], [24.57353, 56.31525], [24.70022, 56.40483], [24.83686, 56.41565], [24.89005, 56.46666], [25.05762, 56.26742], [25.09325, 56.1878], [25.23099, 56.19147], [25.39751, 56.15707], [25.53621, 56.16663], [25.68588, 56.14725], [25.69246, 56.08892], [25.81773, 56.05444], [25.85893, 56.00188], [25.90047, 56.0013], [26.03815, 55.95884], [26.18509, 55.86813], [26.39561, 55.71156], [26.46661, 55.70375], [26.58248, 55.6754], [26.63231, 55.67968], [26.64888, 55.70515], [26.71802, 55.70645], [26.76872, 55.67658], [26.87448, 55.7172], [26.97153, 55.8102], [27.1559, 55.85032], [27.27804, 55.78299], [27.3541, 55.8089], [27.61683, 55.78558], [27.63065, 55.89687], [27.97865, 56.11849], [28.15217, 56.16964], [28.23716, 56.27588], [28.16599, 56.37806], [28.19057, 56.44637], [28.10069, 56.524], [28.13526, 56.57989], [28.04768, 56.59004], [27.86101, 56.88204], [27.66511, 56.83921], [27.86101, 57.29402], [27.52453, 57.42826], [27.56832, 57.53728], [27.34698, 57.52242]]]] } },
-    { type: "Feature", properties: { iso1A2: "LY", iso1A3: "LBY", iso1N3: "434", wikidata: "Q1016", nameEn: "Libya", groups: ["015", "002", "UN"], callingCodes: ["218"] }, geometry: { type: "MultiPolygon", coordinates: [[[[26.92891, 33.39516], [11.58941, 33.36891], [11.55852, 33.1409], [11.51549, 33.09826], [11.46037, 32.6307], [11.57828, 32.48013], [11.53898, 32.4138], [11.04234, 32.2145], [10.7315, 31.97235], [10.62788, 31.96629], [10.48497, 31.72956], [10.31364, 31.72648], [10.12239, 31.42098], [10.29516, 30.90337], [9.88152, 30.34074], [9.76848, 30.34366], [9.55544, 30.23971], [9.3876, 30.16738], [9.78136, 29.40961], [9.89569, 26.57696], [9.51696, 26.39148], [9.38834, 26.19288], [10.03146, 25.35635], [10.02432, 24.98124], [10.33159, 24.5465], [10.85323, 24.5595], [11.41061, 24.21456], [11.62498, 24.26669], [11.96886, 23.51735], [13.5631, 23.16574], [14.22918, 22.61719], [14.99751, 23.00539], [15.99566, 23.49639], [23.99539, 19.49944], [23.99715, 20.00038], [24.99794, 19.99661], [24.99885, 21.99535], [24.99968, 29.24574], [24.71117, 30.17441], [25.01077, 30.73861], [24.8458, 31.39877], [26.92891, 33.39516]]]] } },
-    { type: "Feature", properties: { iso1A2: "MA", iso1A3: "MAR", iso1N3: "504", wikidata: "Q1028", nameEn: "Morocco", groups: ["015", "002", "UN"], callingCodes: ["212"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.27707, 35.35051], [-5.10878, 36.05227], [-7.2725, 35.73269], [-14.43883, 27.02969], [-17.27295, 21.93519], [-17.21511, 21.34226], [-17.02707, 21.34022], [-16.9978, 21.36239], [-16.44269, 21.39745], [-14.78487, 21.36587], [-14.47329, 21.63839], [-14.48112, 22.00886], [-14.1291, 22.41636], [-14.10361, 22.75501], [-13.75627, 23.77231], [-13.00628, 24.01923], [-12.92147, 24.39502], [-12.12281, 25.13682], [-12.06001, 26.04442], [-11.62052, 26.05229], [-11.38635, 26.611], [-11.23622, 26.72023], [-11.35695, 26.8505], [-10.68417, 26.90984], [-9.81998, 26.71379], [-9.56957, 26.90042], [-9.08698, 26.98639], [-8.71787, 26.9898], [-8.77527, 27.66663], [-8.66879, 27.6666], [-8.6715, 28.71194], [-7.61585, 29.36252], [-6.95824, 29.50924], [-6.78351, 29.44634], [-6.69965, 29.51623], [-5.75616, 29.61407], [-5.72121, 29.52322], [-5.58831, 29.48103], [-5.21671, 29.95253], [-4.6058, 30.28343], [-4.31774, 30.53229], [-3.64735, 30.67539], [-3.65418, 30.85566], [-3.54944, 31.0503], [-3.77103, 31.14984], [-3.77647, 31.31912], [-3.66386, 31.39202], [-3.66314, 31.6339], [-2.82784, 31.79459], [-2.93873, 32.06557], [-2.46166, 32.16603], [-1.22829, 32.07832], [-1.15735, 32.12096], [-1.24453, 32.1917], [-1.24998, 32.32993], [-0.9912, 32.52467], [-1.37794, 32.73628], [-1.54244, 32.95499], [-1.46249, 33.0499], [-1.67067, 33.27084], [-1.59508, 33.59929], [-1.73494, 33.71721], [-1.64666, 34.10405], [-1.78042, 34.39018], [-1.69788, 34.48056], [-1.84569, 34.61907], [-1.73707, 34.74226], [-1.97469, 34.886], [-1.97833, 34.93218], [-2.04734, 34.93218], [-2.21445, 35.04378], [-2.21248, 35.08532], [-2.27707, 35.35051]], [[-2.91909, 35.33927], [-2.92272, 35.27509], [-2.93893, 35.26737], [-2.95065, 35.26576], [-2.95431, 35.2728], [-2.96516, 35.27967], [-2.96826, 35.28296], [-2.96507, 35.28801], [-2.97035, 35.28852], [-2.96978, 35.29459], [-2.96648, 35.30475], [-2.96038, 35.31609], [-2.91909, 35.33927]], [[-3.90602, 35.21494], [-3.89343, 35.22728], [-3.88372, 35.20767], [-3.90602, 35.21494]], [[-4.30191, 35.17419], [-4.29436, 35.17149], [-4.30112, 35.17058], [-4.30191, 35.17419]], [[-2.40316, 35.16893], [-2.45965, 35.16527], [-2.43262, 35.20652], [-2.40316, 35.16893]], [[-5.38491, 35.92591], [-5.21179, 35.90091], [-5.34379, 35.8711], [-5.35844, 35.87375], [-5.37338, 35.88417], [-5.38491, 35.92591]]]] } },
-    { type: "Feature", properties: { iso1A2: "MC", iso1A3: "MCO", iso1N3: "492", wikidata: "Q235", nameEn: "Monaco", groups: ["155", "150", "UN"], callingCodes: ["377"] }, geometry: { type: "MultiPolygon", coordinates: [[[[7.47823, 43.73341], [7.4379, 43.74963], [7.4389, 43.75151], [7.43708, 43.75197], [7.43624, 43.75014], [7.43013, 43.74895], [7.42809, 43.74396], [7.42443, 43.74087], [7.42299, 43.74176], [7.42062, 43.73977], [7.41233, 43.73439], [7.41298, 43.73311], [7.41291, 43.73168], [7.41113, 43.73156], [7.40903, 43.7296], [7.42422, 43.72209], [7.47823, 43.73341]]]] } },
-    { type: "Feature", properties: { iso1A2: "MD", iso1A3: "MDA", iso1N3: "498", wikidata: "Q217", nameEn: "Moldova", groups: ["151", "150", "UN"], callingCodes: ["373"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.74422, 48.45926], [27.6658, 48.44034], [27.59027, 48.46311], [27.5889, 48.49224], [27.46942, 48.454], [27.44333, 48.41209], [27.37741, 48.41026], [27.37604, 48.44398], [27.32159, 48.4434], [27.27855, 48.37534], [27.13434, 48.37288], [27.08078, 48.43214], [27.0231, 48.42485], [27.03821, 48.37653], [26.93384, 48.36558], [26.85556, 48.41095], [26.71274, 48.40388], [26.82809, 48.31629], [26.79239, 48.29071], [26.6839, 48.35828], [26.62823, 48.25804], [26.81161, 48.25049], [26.87708, 48.19919], [26.94265, 48.1969], [26.98042, 48.15752], [26.96119, 48.13003], [27.04118, 48.12522], [27.02985, 48.09083], [27.15622, 47.98538], [27.1618, 47.92391], [27.29069, 47.73722], [27.25519, 47.71366], [27.32202, 47.64009], [27.3979, 47.59473], [27.47942, 47.48113], [27.55731, 47.46637], [27.60263, 47.32507], [27.68706, 47.28962], [27.73172, 47.29248], [27.81892, 47.1381], [28.09095, 46.97621], [28.12173, 46.82283], [28.24808, 46.64305], [28.22281, 46.50481], [28.25769, 46.43334], [28.18902, 46.35283], [28.19864, 46.31869], [28.10937, 46.22852], [28.13684, 46.18099], [28.08612, 46.01105], [28.13111, 45.92819], [28.16568, 45.6421], [28.08927, 45.6051], [28.18741, 45.47358], [28.21139, 45.46895], [28.30201, 45.54744], [28.41836, 45.51715], [28.43072, 45.48538], [28.51449, 45.49982], [28.49252, 45.56716], [28.54196, 45.58062], [28.51587, 45.6613], [28.47879, 45.66994], [28.52823, 45.73803], [28.70401, 45.78019], [28.69852, 45.81753], [28.78503, 45.83475], [28.74383, 45.96664], [28.98004, 46.00385], [29.00613, 46.04962], [28.94643, 46.09176], [29.06656, 46.19716], [28.94953, 46.25852], [28.98478, 46.31803], [29.004, 46.31495], [28.9306, 46.45699], [29.01241, 46.46177], [29.02409, 46.49582], [29.23547, 46.55435], [29.24886, 46.37912], [29.35357, 46.49505], [29.49914, 46.45889], [29.5939, 46.35472], [29.6763, 46.36041], [29.66359, 46.4215], [29.74496, 46.45605], [29.88329, 46.35851], [29.94114, 46.40114], [30.09103, 46.38694], [30.16794, 46.40967], [30.02511, 46.45132], [29.88916, 46.54302], [29.94409, 46.56002], [29.9743, 46.75325], [29.94522, 46.80055], [29.98814, 46.82358], [29.87405, 46.88199], [29.75458, 46.8604], [29.72986, 46.92234], [29.57056, 46.94766], [29.62137, 47.05069], [29.61038, 47.09932], [29.53044, 47.07851], [29.49732, 47.12878], [29.57696, 47.13581], [29.54996, 47.24962], [29.59665, 47.25521], [29.5733, 47.36508], [29.48678, 47.36043], [29.47854, 47.30366], [29.39889, 47.30179], [29.3261, 47.44664], [29.18603, 47.43387], [29.11743, 47.55001], [29.22414, 47.60012], [29.22242, 47.73607], [29.27255, 47.79953], [29.20663, 47.80367], [29.27804, 47.88893], [29.19839, 47.89261], [29.1723, 47.99013], [28.9306, 47.96255], [28.8414, 48.03392], [28.85232, 48.12506], [28.69896, 48.13106], [28.53921, 48.17453], [28.48428, 48.0737], [28.42454, 48.12047], [28.43701, 48.15832], [28.38712, 48.17567], [28.34009, 48.13147], [28.30609, 48.14018], [28.30586, 48.1597], [28.34912, 48.1787], [28.36996, 48.20543], [28.35519, 48.24957], [28.32508, 48.23384], [28.2856, 48.23202], [28.19314, 48.20749], [28.17666, 48.25963], [28.07504, 48.23494], [28.09873, 48.3124], [28.04527, 48.32661], [27.95883, 48.32368], [27.88391, 48.36699], [27.87533, 48.4037], [27.81902, 48.41874], [27.79225, 48.44244], [27.74422, 48.45926]]]] } },
-    { type: "Feature", properties: { iso1A2: "ME", iso1A3: "MNE", iso1N3: "499", wikidata: "Q236", nameEn: "Montenegro", groups: ["039", "150", "UN"], callingCodes: ["382"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.22807, 43.5264], [19.15685, 43.53943], [19.13933, 43.5282], [19.04934, 43.50384], [19.01078, 43.55806], [18.91379, 43.50299], [18.95469, 43.49367], [18.96053, 43.45042], [19.01078, 43.43854], [19.04071, 43.397], [19.08673, 43.31453], [19.08206, 43.29668], [19.04233, 43.30008], [19.00844, 43.24988], [18.95001, 43.29327], [18.95819, 43.32899], [18.90911, 43.36383], [18.83912, 43.34795], [18.84794, 43.33735], [18.85342, 43.32426], [18.76538, 43.29838], [18.6976, 43.25243], [18.71747, 43.2286], [18.66605, 43.2056], [18.64735, 43.14766], [18.66254, 43.03928], [18.52232, 43.01451], [18.49076, 42.95553], [18.49661, 42.89306], [18.4935, 42.86433], [18.47633, 42.85829], [18.45921, 42.81682], [18.47324, 42.74992], [18.56789, 42.72074], [18.55221, 42.69045], [18.54603, 42.69171], [18.54841, 42.68328], [18.57373, 42.64429], [18.52232, 42.62279], [18.55504, 42.58409], [18.53751, 42.57376], [18.49778, 42.58409], [18.43735, 42.55921], [18.44307, 42.51077], [18.43588, 42.48556], [18.52152, 42.42302], [18.54128, 42.39171], [18.45131, 42.21682], [19.26406, 41.74971], [19.37597, 41.84849], [19.37451, 41.8842], [19.33812, 41.90669], [19.34601, 41.95675], [19.37691, 41.96977], [19.36867, 42.02564], [19.37548, 42.06835], [19.40687, 42.10024], [19.28623, 42.17745], [19.42, 42.33019], [19.42352, 42.36546], [19.4836, 42.40831], [19.65972, 42.62774], [19.73244, 42.66299], [19.77375, 42.58517], [19.74731, 42.57422], [19.76549, 42.50237], [19.82333, 42.46581], [19.9324, 42.51699], [20.00842, 42.5109], [20.01834, 42.54622], [20.07761, 42.55582], [20.0969, 42.65559], [20.02915, 42.71147], [20.02088, 42.74789], [20.04898, 42.77701], [20.2539, 42.76245], [20.27869, 42.81945], [20.35692, 42.8335], [20.34528, 42.90676], [20.16415, 42.97177], [20.14896, 42.99058], [20.12325, 42.96237], [20.05431, 42.99571], [20.04729, 43.02732], [19.98887, 43.0538], [19.96549, 43.11098], [19.92576, 43.08539], [19.79255, 43.11951], [19.76918, 43.16044], [19.64063, 43.19027], [19.62661, 43.2286], [19.54598, 43.25158], [19.52962, 43.31623], [19.48171, 43.32644], [19.44315, 43.38846], [19.22229, 43.47926], [19.22807, 43.5264]]]] } },
-    { type: "Feature", properties: { iso1A2: "MF", iso1A3: "MAF", iso1N3: "663", wikidata: "Q126125", nameEn: "Saint-Martin", country: "FR", groups: ["Q3320166", "EU", "029", "003", "419", "019", "UN"], callingCodes: ["590"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.93924, 18.02904], [-62.62718, 18.26185], [-63.35989, 18.06012], [-63.33064, 17.9615], [-63.13502, 18.05445], [-63.11042, 18.05339], [-63.09686, 18.04608], [-63.07759, 18.04943], [-63.0579, 18.06614], [-63.04039, 18.05619], [-63.02323, 18.05757], [-62.93924, 18.02904]]]] } },
-    { type: "Feature", properties: { iso1A2: "MG", iso1A3: "MDG", iso1N3: "450", wikidata: "Q1019", nameEn: "Madagascar", aliases: ["RM"], groups: ["014", "202", "002", "UN"], callingCodes: ["261"] }, geometry: { type: "MultiPolygon", coordinates: [[[[51.93891, -10.85085], [45.84651, -12.77177], [42.14681, -19.63341], [45.80092, -33.00974], [51.93891, -10.85085]]]] } },
-    { type: "Feature", properties: { iso1A2: "MH", iso1A3: "MHL", iso1N3: "584", wikidata: "Q709", nameEn: "Marshall Islands", groups: ["057", "009", "UN"], roadSpeedUnit: "mph", callingCodes: ["692"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169, 3.9], [173.53711, 5.70687], [169.29099, 15.77133], [159.04653, 10.59067], [169, 3.9]]]] } },
-    { type: "Feature", properties: { iso1A2: "MK", iso1A3: "MKD", iso1N3: "807", wikidata: "Q221", nameEn: "North Macedonia", groups: ["039", "150", "UN"], callingCodes: ["389"] }, geometry: { type: "MultiPolygon", coordinates: [[[[22.34773, 42.31725], [22.29275, 42.34913], [22.29605, 42.37477], [22.16384, 42.32103], [22.02908, 42.29848], [21.94405, 42.34669], [21.91595, 42.30392], [21.84654, 42.3247], [21.77176, 42.2648], [21.70111, 42.23789], [21.58992, 42.25915], [21.52145, 42.24465], [21.50823, 42.27156], [21.43882, 42.2789], [21.43882, 42.23609], [21.38428, 42.24465], [21.30496, 42.1418], [21.29913, 42.13954], [21.31983, 42.10993], [21.22728, 42.08909], [21.16614, 42.19815], [21.11491, 42.20794], [20.75464, 42.05229], [20.76786, 41.91839], [20.68523, 41.85318], [20.59524, 41.8818], [20.55976, 41.87068], [20.57144, 41.7897], [20.53405, 41.78099], [20.51301, 41.72433], [20.52937, 41.69292], [20.51769, 41.65975], [20.55508, 41.58113], [20.52103, 41.56473], [20.45809, 41.5549], [20.45331, 41.51436], [20.49039, 41.49277], [20.51301, 41.442], [20.55976, 41.4087], [20.52119, 41.34381], [20.49432, 41.33679], [20.51068, 41.2323], [20.59715, 41.13644], [20.58546, 41.11179], [20.59832, 41.09066], [20.63454, 41.0889], [20.65558, 41.08009], [20.71634, 40.91781], [20.73504, 40.9081], [20.81567, 40.89662], [20.83671, 40.92752], [20.94305, 40.92399], [20.97693, 40.90103], [20.97887, 40.85475], [21.15262, 40.85546], [21.21105, 40.8855], [21.25779, 40.86165], [21.35595, 40.87578], [21.41555, 40.9173], [21.53007, 40.90759], [21.57448, 40.86076], [21.69601, 40.9429], [21.7556, 40.92525], [21.91102, 41.04786], [21.90869, 41.09191], [22.06527, 41.15617], [22.1424, 41.12449], [22.17629, 41.15969], [22.26744, 41.16409], [22.42285, 41.11921], [22.5549, 41.13065], [22.58295, 41.11568], [22.62852, 41.14385], [22.65306, 41.18168], [22.71266, 41.13945], [22.74538, 41.16321], [22.76408, 41.32225], [22.81199, 41.3398], [22.93334, 41.34104], [22.96331, 41.35782], [22.95513, 41.63265], [23.03342, 41.71034], [23.01239, 41.76527], [22.96682, 41.77137], [22.90254, 41.87587], [22.86749, 42.02275], [22.67701, 42.06614], [22.51224, 42.15457], [22.50289, 42.19527], [22.47251, 42.20393], [22.38136, 42.30339], [22.34773, 42.31725]]]] } },
-    { type: "Feature", properties: { iso1A2: "ML", iso1A3: "MLI", iso1N3: "466", wikidata: "Q912", nameEn: "Mali", groups: ["011", "202", "002", "UN"], callingCodes: ["223"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-4.83423, 24.99935], [-6.57191, 25.0002], [-5.60725, 16.49919], [-5.33435, 16.33354], [-5.50165, 15.50061], [-9.32979, 15.50032], [-9.31106, 15.69412], [-9.33314, 15.7044], [-9.44673, 15.60553], [-9.40447, 15.4396], [-10.71721, 15.4223], [-10.90932, 15.11001], [-11.43483, 15.62339], [-11.70705, 15.51558], [-11.94903, 14.76143], [-12.23936, 14.76324], [-11.93043, 13.84505], [-12.06897, 13.71049], [-11.83345, 13.33333], [-11.63025, 13.39174], [-11.39935, 12.97808], [-11.37536, 12.40788], [-11.50006, 12.17826], [-11.24136, 12.01286], [-10.99758, 12.24634], [-10.80355, 12.1053], [-10.71897, 11.91552], [-10.30604, 12.24634], [-9.714, 12.0226], [-9.63938, 12.18312], [-9.32097, 12.29009], [-9.38067, 12.48446], [-9.13689, 12.50875], [-8.94784, 12.34842], [-8.80854, 11.66715], [-8.40058, 11.37466], [-8.66923, 10.99397], [-8.35083, 11.06234], [-8.2667, 10.91762], [-8.32614, 10.69273], [-8.22711, 10.41722], [-8.10207, 10.44649], [-7.9578, 10.2703], [-7.97971, 10.17117], [-7.92107, 10.15577], [-7.63048, 10.46334], [-7.54462, 10.40921], [-7.52261, 10.4655], [-7.44555, 10.44602], [-7.3707, 10.24677], [-7.13331, 10.24877], [-7.0603, 10.14711], [-7.00966, 10.15794], [-6.97444, 10.21644], [-7.01186, 10.25111], [-6.93921, 10.35291], [-6.68164, 10.35074], [-6.63541, 10.66893], [-6.52974, 10.59104], [-6.42847, 10.5694], [-6.40646, 10.69922], [-6.325, 10.68624], [-6.24795, 10.74248], [-6.1731, 10.46983], [-6.18851, 10.24244], [-5.99478, 10.19694], [-5.78124, 10.43952], [-5.65135, 10.46767], [-5.51058, 10.43177], [-5.46643, 10.56074], [-5.47083, 10.75329], [-5.41579, 10.84628], [-5.49284, 11.07538], [-5.32994, 11.13371], [-5.32553, 11.21578], [-5.25949, 11.24816], [-5.25509, 11.36905], [-5.20665, 11.43811], [-5.22867, 11.60421], [-5.29251, 11.61715], [-5.26389, 11.75728], [-5.40258, 11.8327], [-5.26389, 11.84778], [-5.07897, 11.97918], [-4.72893, 12.01579], [-4.70692, 12.06746], [-4.62987, 12.06531], [-4.62546, 12.13204], [-4.54841, 12.1385], [-4.57703, 12.19875], [-4.41412, 12.31922], [-4.47356, 12.71252], [-4.238, 12.71467], [-4.21819, 12.95722], [-4.34477, 13.12927], [-3.96501, 13.49778], [-3.90558, 13.44375], [-3.96282, 13.38164], [-3.7911, 13.36665], [-3.54454, 13.1781], [-3.4313, 13.1588], [-3.43507, 13.27272], [-3.23599, 13.29035], [-3.28396, 13.5422], [-3.26407, 13.70699], [-2.88189, 13.64921], [-2.90831, 13.81174], [-2.84667, 14.05532], [-2.66175, 14.14713], [-2.47587, 14.29671], [-2.10223, 14.14878], [-1.9992, 14.19011], [-1.97945, 14.47709], [-1.68083, 14.50023], [-1.32166, 14.72774], [-1.05875, 14.7921], [-0.72004, 15.08655], [-0.24673, 15.07805], [0.06588, 14.96961], [0.23859, 15.00135], [0.72632, 14.95898], [0.96711, 14.98275], [1.31275, 15.27978], [3.01806, 15.34571], [3.03134, 15.42221], [3.50368, 15.35934], [4.19893, 16.39923], [4.21787, 17.00118], [4.26762, 17.00432], [4.26651, 19.14224], [3.36082, 18.9745], [3.12501, 19.1366], [3.24648, 19.81703], [1.20992, 20.73533], [1.15698, 21.12843], [-4.83423, 24.99935]]]] } },
-    { type: "Feature", properties: { iso1A2: "MM", iso1A3: "MMR", iso1N3: "104", wikidata: "Q836", nameEn: "Myanmar", aliases: ["Burma", "BU"], groups: ["035", "142", "UN"], callingCodes: ["95"] }, geometry: { type: "MultiPolygon", coordinates: [[[[92.62187, 21.87037], [92.59775, 21.6092], [92.68152, 21.28454], [92.60187, 21.24615], [92.55105, 21.3856], [92.43158, 21.37025], [92.37939, 21.47764], [92.20087, 21.337], [92.17752, 21.17445], [92.26071, 21.05697], [92.47409, 20.38654], [92.61042, 13.76986], [94.6371, 13.81803], [97.63455, 9.60854], [98.12555, 9.44056], [98.33094, 9.91973], [98.47298, 9.95782], [98.52291, 9.92389], [98.55174, 9.92804], [98.7391, 10.31488], [98.81944, 10.52761], [98.77275, 10.62548], [98.78511, 10.68351], [98.86819, 10.78336], [99.0069, 10.85485], [98.99701, 10.92962], [99.02337, 10.97217], [99.06938, 10.94857], [99.32756, 11.28545], [99.31573, 11.32081], [99.39485, 11.3925], [99.47598, 11.62434], [99.5672, 11.62732], [99.64108, 11.78948], [99.64891, 11.82699], [99.53424, 12.02317], [99.56445, 12.14805], [99.47519, 12.1353], [99.409, 12.60603], [99.29254, 12.68921], [99.18905, 12.84799], [99.18748, 12.9898], [99.10646, 13.05804], [99.12225, 13.19847], [99.20617, 13.20575], [99.16695, 13.72621], [98.97356, 14.04868], [98.56762, 14.37701], [98.24874, 14.83013], [98.18821, 15.13125], [98.22, 15.21327], [98.30446, 15.30667], [98.40522, 15.25268], [98.41906, 15.27103], [98.39351, 15.34177], [98.4866, 15.39154], [98.56027, 15.33471], [98.58598, 15.46821], [98.541, 15.65406], [98.59853, 15.87197], [98.57019, 16.04578], [98.69585, 16.13353], [98.8376, 16.11706], [98.92656, 16.36425], [98.84485, 16.42354], [98.68074, 16.27068], [98.63817, 16.47424], [98.57912, 16.55983], [98.5695, 16.62826], [98.51113, 16.64503], [98.51833, 16.676], [98.51472, 16.68521], [98.51579, 16.69433], [98.51043, 16.70107], [98.49713, 16.69022], [98.50253, 16.7139], [98.46994, 16.73613], [98.53833, 16.81934], [98.49603, 16.8446], [98.52624, 16.89979], [98.39441, 17.06266], [98.34566, 17.04822], [98.10439, 17.33847], [98.11185, 17.36829], [97.91829, 17.54504], [97.76407, 17.71595], [97.66794, 17.88005], [97.73723, 17.97912], [97.60841, 18.23846], [97.64116, 18.29778], [97.56219, 18.33885], [97.50383, 18.26844], [97.34522, 18.54596], [97.36444, 18.57138], [97.5258, 18.4939], [97.76752, 18.58097], [97.73836, 18.88478], [97.66487, 18.9371], [97.73654, 18.9812], [97.73797, 19.04261], [97.83479, 19.09972], [97.84024, 19.22217], [97.78606, 19.26769], [97.84186, 19.29526], [97.78769, 19.39429], [97.88423, 19.5041], [97.84715, 19.55782], [98.04364, 19.65755], [98.03314, 19.80941], [98.13829, 19.78541], [98.24884, 19.67876], [98.51182, 19.71303], [98.56065, 19.67807], [98.83661, 19.80931], [98.98679, 19.7419], [99.0735, 20.10298], [99.20328, 20.12877], [99.416, 20.08614], [99.52943, 20.14811], [99.5569, 20.20676], [99.46077, 20.36198], [99.46008, 20.39673], [99.68255, 20.32077], [99.81096, 20.33687], [99.86383, 20.44371], [99.88211, 20.44488], [99.88451, 20.44596], [99.89168, 20.44548], [99.89301, 20.44311], [99.89692, 20.44789], [99.90499, 20.4487], [99.91616, 20.44986], [99.95721, 20.46301], [100.08404, 20.36626], [100.1957, 20.68247], [100.36375, 20.82783], [100.51079, 20.82194], [100.60112, 20.8347], [100.64628, 20.88279], [100.50974, 20.88574], [100.55281, 21.02796], [100.63578, 21.05639], [100.72716, 21.31786], [100.80173, 21.2934], [101.00234, 21.39612], [101.16198, 21.52808], [101.15156, 21.56129], [101.11744, 21.77659], [100.87265, 21.67396], [100.72143, 21.51898], [100.57861, 21.45637], [100.4811, 21.46148], [100.42892, 21.54325], [100.35201, 21.53176], [100.25863, 21.47043], [100.18447, 21.51898], [100.1625, 21.48704], [100.12542, 21.50365], [100.10757, 21.59945], [100.17486, 21.65306], [100.12679, 21.70539], [100.04956, 21.66843], [99.98654, 21.71064], [99.94003, 21.82782], [99.99084, 21.97053], [99.96612, 22.05965], [99.85351, 22.04183], [99.47585, 22.13345], [99.33166, 22.09656], [99.1552, 22.15874], [99.19176, 22.16983], [99.17318, 22.18025], [99.28771, 22.4105], [99.37972, 22.50188], [99.38247, 22.57544], [99.31243, 22.73893], [99.45654, 22.85726], [99.43537, 22.94086], [99.54218, 22.90014], [99.52214, 23.08218], [99.34127, 23.13099], [99.25741, 23.09025], [99.04601, 23.12215], [99.05975, 23.16382], [98.88597, 23.18656], [98.92515, 23.29535], [98.93958, 23.31414], [98.87573, 23.33038], [98.92104, 23.36946], [98.87683, 23.48995], [98.82877, 23.47908], [98.80294, 23.5345], [98.88396, 23.59555], [98.81775, 23.694], [98.82933, 23.72921], [98.79607, 23.77947], [98.68209, 23.80492], [98.67797, 23.9644], [98.89632, 24.10612], [98.87998, 24.15624], [98.85319, 24.13042], [98.59256, 24.08371], [98.54476, 24.13119], [98.20666, 24.11406], [98.07806, 24.07988], [98.06703, 24.08028], [98.0607, 24.07812], [98.05671, 24.07961], [98.05302, 24.07408], [98.04709, 24.07616], [97.99583, 24.04932], [97.98691, 24.03897], [97.93951, 24.01953], [97.90998, 24.02094], [97.88616, 24.00463], [97.88414, 23.99405], [97.88814, 23.98605], [97.89683, 23.98389], [97.89676, 23.97931], [97.8955, 23.97758], [97.88811, 23.97446], [97.86545, 23.97723], [97.84328, 23.97603], [97.79416, 23.95663], [97.79456, 23.94836], [97.72302, 23.89288], [97.64667, 23.84574], [97.5247, 23.94032], [97.62363, 24.00506], [97.72903, 24.12606], [97.75305, 24.16902], [97.72799, 24.18883], [97.72998, 24.2302], [97.76799, 24.26365], [97.71941, 24.29652], [97.66723, 24.30027], [97.65624, 24.33781], [97.7098, 24.35658], [97.66998, 24.45288], [97.60029, 24.4401], [97.52757, 24.43748], [97.56286, 24.54535], [97.56525, 24.72838], [97.54675, 24.74202], [97.5542, 24.74943], [97.56383, 24.75535], [97.56648, 24.76475], [97.64354, 24.79171], [97.70181, 24.84557], [97.73127, 24.83015], [97.76481, 24.8289], [97.79949, 24.85655], [97.72903, 24.91332], [97.72216, 25.08508], [97.77023, 25.11492], [97.83614, 25.2715], [97.92541, 25.20815], [98.14925, 25.41547], [98.12591, 25.50722], [98.18084, 25.56298], [98.16848, 25.62739], [98.25774, 25.6051], [98.31268, 25.55307], [98.40606, 25.61129], [98.54064, 25.85129], [98.63128, 25.79937], [98.70818, 25.86241], [98.60763, 26.01512], [98.57085, 26.11547], [98.63128, 26.15492], [98.66884, 26.09165], [98.7329, 26.17218], [98.67797, 26.24487], [98.72741, 26.36183], [98.77547, 26.61994], [98.7333, 26.85615], [98.69582, 27.56499], [98.43353, 27.67086], [98.42529, 27.55404], [98.32641, 27.51385], [98.13964, 27.9478], [98.15337, 28.12114], [97.90069, 28.3776], [97.79632, 28.33168], [97.70705, 28.5056], [97.56835, 28.55628], [97.50518, 28.49716], [97.47085, 28.2688], [97.41729, 28.29783], [97.34547, 28.21385], [97.31292, 28.06784], [97.35412, 28.06663], [97.38845, 28.01329], [97.35824, 27.87256], [97.29919, 27.92233], [96.90112, 27.62149], [96.91431, 27.45752], [97.17422, 27.14052], [97.14675, 27.09041], [96.89132, 27.17474], [96.85287, 27.2065], [96.88445, 27.25046], [96.73888, 27.36638], [96.55761, 27.29928], [96.40779, 27.29818], [96.15591, 27.24572], [96.04949, 27.19428], [95.93002, 27.04149], [95.81603, 27.01335], [95.437, 26.7083], [95.30339, 26.65372], [95.23513, 26.68499], [95.05798, 26.45408], [95.12801, 26.38397], [95.11428, 26.1019], [95.18556, 26.07338], [94.80117, 25.49359], [94.68032, 25.47003], [94.57458, 25.20318], [94.74212, 25.13606], [94.73937, 25.00545], [94.60204, 24.70889], [94.5526, 24.70764], [94.50729, 24.59281], [94.45279, 24.56656], [94.32362, 24.27692], [94.30215, 24.23752], [94.14081, 23.83333], [93.92089, 23.95812], [93.80279, 23.92549], [93.75952, 24.0003], [93.62871, 24.00922], [93.50616, 23.94432], [93.46633, 23.97067], [93.41415, 24.07854], [93.34735, 24.10151], [93.32351, 24.04468], [93.36059, 23.93176], [93.3908, 23.92925], [93.3908, 23.7622], [93.43475, 23.68299], [93.38805, 23.4728], [93.39981, 23.38828], [93.38781, 23.36139], [93.36862, 23.35426], [93.38478, 23.13698], [93.2878, 23.00464], [93.12988, 23.05772], [93.134, 22.92498], [93.09417, 22.69459], [93.134, 22.59573], [93.11477, 22.54374], [93.13537, 22.45873], [93.18206, 22.43716], [93.19991, 22.25425], [93.14224, 22.24535], [93.15734, 22.18687], [93.04885, 22.20595], [92.99255, 22.05965], [92.99804, 21.98964], [92.93899, 22.02656], [92.89504, 21.95143], [92.86208, 22.05456], [92.70416, 22.16017], [92.67532, 22.03547], [92.60949, 21.97638], [92.62187, 21.87037]]]] } },
-    { type: "Feature", properties: { iso1A2: "MN", iso1A3: "MNG", iso1N3: "496", wikidata: "Q711", nameEn: "Mongolia", groups: ["030", "142", "UN"], callingCodes: ["976"] }, geometry: { type: "MultiPolygon", coordinates: [[[[102.14032, 51.35566], [101.5044, 51.50467], [101.39085, 51.45753], [100.61116, 51.73028], [99.89203, 51.74903], [99.75578, 51.90108], [99.27888, 51.96876], [98.87768, 52.14563], [98.74142, 51.8637], [98.33222, 51.71832], [98.22053, 51.46579], [98.05257, 51.46696], [97.83305, 51.00248], [98.01472, 50.86652], [97.9693, 50.78044], [98.06393, 50.61262], [98.31373, 50.4996], [98.29481, 50.33561], [97.85197, 49.91339], [97.76871, 49.99861], [97.56432, 49.92801], [97.56811, 49.84265], [97.24639, 49.74737], [96.97388, 49.88413], [95.80056, 50.04239], [95.74757, 49.97915], [95.02465, 49.96941], [94.97166, 50.04725], [94.6121, 50.04239], [94.49477, 50.17832], [94.39258, 50.22193], [94.30823, 50.57498], [92.99595, 50.63183], [93.01109, 50.79001], [92.44714, 50.78762], [92.07173, 50.69585], [91.86048, 50.73734], [89.59711, 49.90851], [89.70687, 49.72535], [88.82499, 49.44808], [88.42449, 49.48821], [88.17223, 49.46934], [88.15543, 49.30314], [87.98977, 49.18147], [87.81333, 49.17354], [87.88171, 48.95853], [87.73822, 48.89582], [88.0788, 48.71436], [87.96361, 48.58478], [88.58939, 48.34531], [88.58316, 48.21893], [88.8011, 48.11302], [88.93186, 48.10263], [89.0711, 47.98528], [89.55453, 48.0423], [89.76624, 47.82745], [90.06512, 47.88177], [90.10871, 47.7375], [90.33598, 47.68303], [90.48854, 47.41826], [90.48542, 47.30438], [90.76108, 46.99399], [90.84035, 46.99525], [91.03649, 46.72916], [91.0147, 46.58171], [91.07696, 46.57315], [90.89639, 46.30711], [90.99672, 46.14207], [91.03026, 46.04194], [90.70907, 45.73437], [90.65114, 45.49314], [90.89169, 45.19667], [91.64048, 45.07408], [93.51161, 44.95964], [94.10003, 44.71016], [94.71959, 44.35284], [95.01191, 44.25274], [95.39772, 44.2805], [95.32891, 44.02407], [95.52594, 43.99353], [95.89543, 43.2528], [96.35658, 42.90363], [96.37926, 42.72055], [97.1777, 42.7964], [99.50671, 42.56535], [100.33297, 42.68231], [100.84979, 42.67087], [101.80515, 42.50074], [102.07645, 42.22519], [102.72403, 42.14675], [103.92804, 41.78246], [104.52258, 41.8706], [104.51667, 41.66113], [105.0123, 41.63188], [106.76517, 42.28741], [107.24774, 42.36107], [107.29755, 42.41395], [107.49681, 42.46221], [107.57258, 42.40898], [108.84489, 42.40246], [109.00679, 42.45302], [109.452, 42.44842], [109.89402, 42.63111], [110.08401, 42.6411], [110.4327, 42.78293], [111.0149, 43.3289], [111.59087, 43.51207], [111.79758, 43.6637], [111.93776, 43.68709], [111.96289, 43.81596], [111.40498, 44.3461], [111.76275, 44.98032], [111.98695, 45.09074], [112.4164, 45.06858], [112.74662, 44.86297], [113.70918, 44.72891], [114.5166, 45.27189], [114.54801, 45.38337], [114.74612, 45.43585], [114.94546, 45.37377], [115.60329, 45.44717], [116.16989, 45.68603], [116.27366, 45.78637], [116.24012, 45.8778], [116.26678, 45.96479], [116.58612, 46.30211], [116.75551, 46.33083], [116.83166, 46.38637], [117.36609, 46.36335], [117.41782, 46.57862], [117.60748, 46.59771], [117.69554, 46.50991], [118.30534, 46.73519], [118.78747, 46.68689], [118.8337, 46.77742], [118.89974, 46.77139], [118.92616, 46.72765], [119.00541, 46.74273], [119.10448, 46.65516], [119.24978, 46.64761], [119.32827, 46.61433], [119.42827, 46.63783], [119.65265, 46.62342], [119.68127, 46.59015], [119.77373, 46.62947], [119.80455, 46.67631], [119.89261, 46.66423], [119.91242, 46.90091], [119.85518, 46.92196], [119.71209, 47.19192], [119.62403, 47.24575], [119.56019, 47.24874], [119.54918, 47.29505], [119.31964, 47.42617], [119.35892, 47.48104], [119.13995, 47.53997], [119.12343, 47.66458], [118.7564, 47.76947], [118.55766, 47.99277], [118.29654, 48.00246], [118.22677, 48.03853], [118.11009, 48.04], [118.03676, 48.00982], [117.80196, 48.01661], [117.50181, 47.77216], [117.37875, 47.63627], [116.9723, 47.87285], [116.67405, 47.89039], [116.4465, 47.83662], [116.21879, 47.88505], [115.94296, 47.67741], [115.57128, 47.91988], [115.52082, 48.15367], [115.811, 48.25699], [115.78876, 48.51781], [116.06565, 48.81716], [116.03781, 48.87014], [116.71193, 49.83813], [116.62502, 49.92919], [116.22402, 50.04477], [115.73602, 49.87688], [115.26068, 49.97367], [114.9703, 50.19254], [114.325, 50.28098], [113.20216, 49.83356], [113.02647, 49.60772], [110.64493, 49.1816], [110.39891, 49.25083], [110.24373, 49.16676], [109.51325, 49.22859], [109.18017, 49.34709], [108.53969, 49.32325], [108.27937, 49.53167], [107.95387, 49.66659], [107.96116, 49.93191], [107.36407, 49.97612], [107.1174, 50.04239], [107.00007, 50.1977], [106.80326, 50.30177], [106.58373, 50.34044], [106.51122, 50.34408], [106.49628, 50.32436], [106.47156, 50.31909], [106.07865, 50.33474], [106.05562, 50.40582], [105.32528, 50.4648], [103.70343, 50.13952], [102.71178, 50.38873], [102.32194, 50.67982], [102.14032, 51.35566]]]] } },
-    { type: "Feature", properties: { iso1A2: "MO", iso1A3: "MAC", iso1N3: "446", wikidata: "Q14773", nameEn: "Macau", aliases: ["Macao"], country: "CN", groups: ["030", "142", "UN"], driveSide: "left", callingCodes: ["853"] }, geometry: { type: "MultiPolygon", coordinates: [[[[113.54942, 22.14519], [113.54839, 22.10909], [113.57191, 22.07696], [113.63011, 22.10782], [113.60504, 22.20464], [113.57123, 22.20416], [113.56865, 22.20973], [113.5508, 22.21672], [113.54333, 22.21688], [113.54093, 22.21314], [113.53593, 22.2137], [113.53301, 22.21235], [113.53552, 22.20607], [113.52659, 22.18271], [113.54093, 22.15497], [113.54942, 22.14519]]]] } },
-    { type: "Feature", properties: { iso1A2: "MP", iso1A3: "MNP", iso1N3: "580", wikidata: "Q16644", nameEn: "Northern Mariana Islands", aliases: ["US-MP"], country: "US", groups: ["Q1352230", "Q153732", "057", "009", "UN"], roadSpeedUnit: "mph", callingCodes: ["1 670"] }, geometry: { type: "MultiPolygon", coordinates: [[[[135.52896, 14.32623], [152.19114, 13.63487], [145.05972, 21.28731], [135.52896, 14.32623]]]] } },
-    { type: "Feature", properties: { iso1A2: "MQ", iso1A3: "MTQ", iso1N3: "474", wikidata: "Q17054", nameEn: "Martinique", country: "FR", groups: ["Q3320166", "EU", "029", "003", "419", "019", "UN"], callingCodes: ["596"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-59.95997, 14.20285], [-61.07821, 15.25109], [-61.69315, 14.26451], [-59.95997, 14.20285]]]] } },
-    { type: "Feature", properties: { iso1A2: "MR", iso1A3: "MRT", iso1N3: "478", wikidata: "Q1025", nameEn: "Mauritania", groups: ["011", "202", "002", "UN"], callingCodes: ["222"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-5.60725, 16.49919], [-6.57191, 25.0002], [-4.83423, 24.99935], [-8.66674, 27.31569], [-8.66721, 25.99918], [-12.0002, 25.9986], [-12.00251, 23.4538], [-12.14969, 23.41935], [-12.36213, 23.3187], [-12.5741, 23.28975], [-13.00412, 23.02297], [-13.10753, 22.89493], [-13.15313, 22.75649], [-13.08438, 22.53866], [-13.01525, 21.33343], [-16.95474, 21.33997], [-16.99806, 21.12142], [-17.0357, 21.05368], [-17.0396, 20.9961], [-17.06781, 20.92697], [-17.0695, 20.85742], [-17.0471, 20.76408], [-17.15288, 16.07139], [-16.50854, 16.09032], [-16.48967, 16.0496], [-16.44814, 16.09753], [-16.4429, 16.20605], [-16.27016, 16.51565], [-15.6509, 16.50315], [-15.00557, 16.64997], [-14.32144, 16.61495], [-13.80075, 16.13961], [-13.43135, 16.09022], [-13.11029, 15.52116], [-12.23936, 14.76324], [-11.94903, 14.76143], [-11.70705, 15.51558], [-11.43483, 15.62339], [-10.90932, 15.11001], [-10.71721, 15.4223], [-9.40447, 15.4396], [-9.44673, 15.60553], [-9.33314, 15.7044], [-9.31106, 15.69412], [-9.32979, 15.50032], [-5.50165, 15.50061], [-5.33435, 16.33354], [-5.60725, 16.49919]]]] } },
-    { type: "Feature", properties: { iso1A2: "MS", iso1A3: "MSR", iso1N3: "500", wikidata: "Q13353", nameEn: "Montserrat", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 664"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.91508, 16.51165], [-62.1023, 16.97277], [-62.58307, 16.68909], [-61.91508, 16.51165]]]] } },
-    { type: "Feature", properties: { iso1A2: "MT", iso1A3: "MLT", iso1N3: "470", wikidata: "Q233", nameEn: "Malta", groups: ["EU", "039", "150", "UN"], driveSide: "left", callingCodes: ["356"] }, geometry: { type: "MultiPolygon", coordinates: [[[[15.70991, 35.79901], [14.07544, 36.41525], [13.27636, 35.20764], [15.70991, 35.79901]]]] } },
-    { type: "Feature", properties: { iso1A2: "MU", iso1A3: "MUS", iso1N3: "480", wikidata: "Q1027", nameEn: "Mauritius", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["230"] }, geometry: { type: "MultiPolygon", coordinates: [[[[56.09755, -9.55401], [57.50644, -31.92637], [68.4673, -19.15185], [56.09755, -9.55401]]]] } },
-    { type: "Feature", properties: { iso1A2: "MV", iso1A3: "MDV", iso1N3: "462", wikidata: "Q826", nameEn: "Maldives", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["960"] }, geometry: { type: "MultiPolygon", coordinates: [[[[71.9161, 8.55531], [72.57428, -3.7623], [76.59015, 5.591], [71.9161, 8.55531]]]] } },
-    { type: "Feature", properties: { iso1A2: "MW", iso1A3: "MWI", iso1N3: "454", wikidata: "Q1020", nameEn: "Malawi", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["265"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.48052, -9.62442], [33.31581, -9.48554], [33.14925, -9.49322], [32.99397, -9.36712], [32.95389, -9.40138], [33.00476, -9.5133], [33.00256, -9.63053], [33.05485, -9.61316], [33.10163, -9.66525], [33.12144, -9.58929], [33.2095, -9.61099], [33.31517, -9.82364], [33.36581, -9.81063], [33.37902, -9.9104], [33.31297, -10.05133], [33.53863, -10.20148], [33.54797, -10.36077], [33.70675, -10.56896], [33.47636, -10.78465], [33.28022, -10.84428], [33.25998, -10.88862], [33.39697, -11.15296], [33.29267, -11.3789], [33.29267, -11.43536], [33.23663, -11.40637], [33.24252, -11.59302], [33.32692, -11.59248], [33.33937, -11.91252], [33.25998, -12.14242], [33.3705, -12.34931], [33.47636, -12.32498], [33.54485, -12.35996], [33.37517, -12.54085], [33.28177, -12.54692], [33.18837, -12.61377], [33.05917, -12.59554], [32.94397, -12.76868], [32.96733, -12.88251], [33.02181, -12.88707], [32.98289, -13.12671], [33.0078, -13.19492], [32.86113, -13.47292], [32.84176, -13.52794], [32.73683, -13.57682], [32.68436, -13.55769], [32.66468, -13.60019], [32.68654, -13.64268], [32.7828, -13.64805], [32.84528, -13.71576], [32.76962, -13.77224], [32.79015, -13.80755], [32.88985, -13.82956], [32.99042, -13.95689], [33.02977, -14.05022], [33.07568, -13.98447], [33.16749, -13.93992], [33.24249, -14.00019], [33.66677, -14.61306], [33.7247, -14.4989], [33.88503, -14.51652], [33.92898, -14.47929], [34.08588, -14.48893], [34.18733, -14.43823], [34.22355, -14.43607], [34.34453, -14.3985], [34.35843, -14.38652], [34.39277, -14.39467], [34.4192, -14.43191], [34.44641, -14.47746], [34.45053, -14.49873], [34.47628, -14.53363], [34.48932, -14.53646], [34.49636, -14.55091], [34.52366, -14.5667], [34.53962, -14.59776], [34.55112, -14.64494], [34.53516, -14.67782], [34.52057, -14.68263], [34.54503, -14.74672], [34.567, -14.77345], [34.61522, -14.99583], [34.57503, -15.30619], [34.43126, -15.44778], [34.44981, -15.60864], [34.25195, -15.90321], [34.43126, -16.04737], [34.40344, -16.20923], [35.04805, -16.83167], [35.13771, -16.81687], [35.17017, -16.93521], [35.04805, -17.00027], [35.0923, -17.13235], [35.3062, -17.1244], [35.27065, -16.93817], [35.30929, -16.82871], [35.27219, -16.69402], [35.14235, -16.56812], [35.25828, -16.4792], [35.30157, -16.2211], [35.43355, -16.11371], [35.52365, -16.15414], [35.70107, -16.10147], [35.80487, -16.03907], [35.85303, -15.41913], [35.78799, -15.17428], [35.91812, -14.89514], [35.87212, -14.89478], [35.86945, -14.67481], [35.5299, -14.27714], [35.47989, -14.15594], [34.86229, -13.48958], [34.60253, -13.48487], [34.37831, -12.17408], [34.46088, -12.0174], [34.70739, -12.15652], [34.82903, -12.04837], [34.57917, -11.87849], [34.64241, -11.57499], [34.96296, -11.57354], [34.91153, -11.39799], [34.79375, -11.32245], [34.63305, -11.11731], [34.61161, -11.01611], [34.67047, -10.93796], [34.65946, -10.6828], [34.57581, -10.56271], [34.51911, -10.12279], [34.54499, -10.0678], [34.03865, -9.49398], [33.95829, -9.54066], [33.9638, -9.62206], [33.93298, -9.71647], [33.76677, -9.58516], [33.48052, -9.62442]]]] } },
-    { type: "Feature", properties: { iso1A2: "MX", iso1A3: "MEX", iso1N3: "484", wikidata: "Q96", nameEn: "Mexico", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["52"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-117.1243, 32.53427], [-118.48109, 32.5991], [-120.12904, 18.41089], [-92.37213, 14.39277], [-92.2261, 14.53423], [-92.1454, 14.6804], [-92.18161, 14.84147], [-92.1423, 14.88647], [-92.1454, 14.98143], [-92.0621, 15.07406], [-92.20983, 15.26077], [-91.73182, 16.07371], [-90.44567, 16.07573], [-90.40499, 16.40524], [-90.61212, 16.49832], [-90.69064, 16.70697], [-91.04436, 16.92175], [-91.43809, 17.25373], [-90.99199, 17.25192], [-90.98678, 17.81655], [-89.14985, 17.81563], [-89.15105, 17.95104], [-89.03839, 18.0067], [-88.8716, 17.89535], [-88.71505, 18.0707], [-88.48242, 18.49164], [-88.3268, 18.49048], [-88.29909, 18.47591], [-88.26593, 18.47617], [-88.03238, 18.41778], [-88.03165, 18.16657], [-87.90671, 18.15213], [-87.87604, 18.18313], [-87.86657, 18.19971], [-87.85693, 18.18266], [-87.84815, 18.18511], [-86.92368, 17.61462], [-85.9092, 21.8218], [-96.92418, 25.97377], [-97.13927, 25.96583], [-97.35946, 25.92189], [-97.37332, 25.83854], [-97.42511, 25.83969], [-97.45669, 25.86874], [-97.49828, 25.89877], [-97.52025, 25.88518], [-97.66511, 26.01708], [-97.95155, 26.0625], [-97.97017, 26.05232], [-98.24603, 26.07191], [-98.27075, 26.09457], [-98.30491, 26.10475], [-98.35126, 26.15129], [-99.00546, 26.3925], [-99.03053, 26.41249], [-99.08477, 26.39849], [-99.53573, 27.30926], [-99.49744, 27.43746], [-99.482, 27.47128], [-99.48045, 27.49016], [-99.50208, 27.50021], [-99.52955, 27.49747], [-99.51478, 27.55836], [-99.55409, 27.61314], [-100.50029, 28.66117], [-100.51222, 28.70679], [-100.5075, 28.74066], [-100.52313, 28.75598], [-100.59809, 28.88197], [-100.63689, 28.90812], [-100.67294, 29.09744], [-100.79696, 29.24688], [-100.87982, 29.296], [-100.94056, 29.33371], [-100.94579, 29.34523], [-100.96725, 29.3477], [-101.01128, 29.36947], [-101.05686, 29.44738], [-101.47277, 29.7744], [-102.60596, 29.8192], [-103.15787, 28.93865], [-104.37752, 29.54255], [-104.39363, 29.55396], [-104.3969, 29.57105], [-104.5171, 29.64671], [-104.77674, 30.4236], [-106.00363, 31.39181], [-106.09025, 31.40569], [-106.20346, 31.46305], [-106.23711, 31.51262], [-106.24612, 31.54193], [-106.28084, 31.56173], [-106.30305, 31.62154], [-106.33419, 31.66303], [-106.34864, 31.69663], [-106.3718, 31.71165], [-106.38003, 31.73151], [-106.41773, 31.75196], [-106.43419, 31.75478], [-106.45244, 31.76523], [-106.46726, 31.75998], [-106.47298, 31.75054], [-106.48815, 31.74769], [-106.50111, 31.75714], [-106.50962, 31.76155], [-106.51251, 31.76922], [-106.52266, 31.77509], [-106.529, 31.784], [-108.20899, 31.78534], [-108.20979, 31.33316], [-111.07523, 31.33232], [-114.82011, 32.49609], [-114.79524, 32.55731], [-114.81141, 32.55543], [-114.80584, 32.62028], [-114.76736, 32.64094], [-114.71871, 32.71894], [-115.88053, 32.63624], [-117.1243, 32.53427]]]] } },
-    { type: "Feature", properties: { iso1A2: "MY", iso1A3: "MYS", iso1N3: "458", wikidata: "Q833", nameEn: "Malaysia" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "MZ", iso1A3: "MOZ", iso1N3: "508", wikidata: "Q1029", nameEn: "Mozambique", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["258"] }, geometry: { type: "MultiPolygon", coordinates: [[[[40.74206, -10.25691], [40.44265, -10.4618], [40.00295, -10.80255], [39.58249, -10.96043], [39.24395, -11.17433], [38.88996, -11.16978], [38.47258, -11.4199], [38.21598, -11.27289], [37.93618, -11.26228], [37.8388, -11.3123], [37.76614, -11.53352], [37.3936, -11.68949], [36.80309, -11.56836], [36.62068, -11.72884], [36.19094, -11.70008], [36.19094, -11.57593], [35.82767, -11.41081], [35.63599, -11.55927], [34.96296, -11.57354], [34.64241, -11.57499], [34.57917, -11.87849], [34.82903, -12.04837], [34.70739, -12.15652], [34.46088, -12.0174], [34.37831, -12.17408], [34.60253, -13.48487], [34.86229, -13.48958], [35.47989, -14.15594], [35.5299, -14.27714], [35.86945, -14.67481], [35.87212, -14.89478], [35.91812, -14.89514], [35.78799, -15.17428], [35.85303, -15.41913], [35.80487, -16.03907], [35.70107, -16.10147], [35.52365, -16.15414], [35.43355, -16.11371], [35.30157, -16.2211], [35.25828, -16.4792], [35.14235, -16.56812], [35.27219, -16.69402], [35.30929, -16.82871], [35.27065, -16.93817], [35.3062, -17.1244], [35.0923, -17.13235], [35.04805, -17.00027], [35.17017, -16.93521], [35.13771, -16.81687], [35.04805, -16.83167], [34.40344, -16.20923], [34.43126, -16.04737], [34.25195, -15.90321], [34.44981, -15.60864], [34.43126, -15.44778], [34.57503, -15.30619], [34.61522, -14.99583], [34.567, -14.77345], [34.54503, -14.74672], [34.52057, -14.68263], [34.53516, -14.67782], [34.55112, -14.64494], [34.53962, -14.59776], [34.52366, -14.5667], [34.49636, -14.55091], [34.48932, -14.53646], [34.47628, -14.53363], [34.45053, -14.49873], [34.44641, -14.47746], [34.4192, -14.43191], [34.39277, -14.39467], [34.35843, -14.38652], [34.34453, -14.3985], [34.22355, -14.43607], [34.18733, -14.43823], [34.08588, -14.48893], [33.92898, -14.47929], [33.88503, -14.51652], [33.7247, -14.4989], [33.66677, -14.61306], [33.24249, -14.00019], [30.22098, -14.99447], [30.41902, -15.62269], [30.42568, -15.9962], [30.91597, -15.99924], [30.97761, -16.05848], [31.13171, -15.98019], [31.30563, -16.01193], [31.42451, -16.15154], [31.67988, -16.19595], [31.90223, -16.34388], [31.91324, -16.41569], [32.02772, -16.43892], [32.28529, -16.43892], [32.42838, -16.4727], [32.71017, -16.59932], [32.69917, -16.66893], [32.78943, -16.70267], [32.97655, -16.70689], [32.91051, -16.89446], [32.84113, -16.92259], [32.96554, -17.11971], [33.00517, -17.30477], [33.0426, -17.3468], [32.96554, -17.48964], [32.98536, -17.55891], [33.0492, -17.60298], [32.94133, -17.99705], [33.03159, -18.35054], [33.02278, -18.4696], [32.88629, -18.51344], [32.88629, -18.58023], [32.95013, -18.69079], [32.9017, -18.7992], [32.82465, -18.77419], [32.70137, -18.84712], [32.73439, -18.92628], [32.69917, -18.94293], [32.72118, -19.02204], [32.84006, -19.0262], [32.87088, -19.09279], [32.85107, -19.29238], [32.77966, -19.36098], [32.78282, -19.47513], [32.84446, -19.48343], [32.84666, -19.68462], [32.95013, -19.67219], [33.06461, -19.77787], [33.01178, -20.02007], [32.93032, -20.03868], [32.85987, -20.16686], [32.85987, -20.27841], [32.66174, -20.56106], [32.55167, -20.56312], [32.48122, -20.63319], [32.51644, -20.91929], [32.37115, -21.133], [32.48236, -21.32873], [32.41234, -21.31246], [31.38336, -22.36919], [31.30611, -22.422], [31.55779, -23.176], [31.56539, -23.47268], [31.67942, -23.60858], [31.70223, -23.72695], [31.77445, -23.90082], [31.87707, -23.95293], [31.90368, -24.18892], [31.9835, -24.29983], [32.03196, -25.10785], [32.01676, -25.38117], [31.97875, -25.46356], [32.00631, -25.65044], [31.92649, -25.84216], [31.974, -25.95387], [32.00916, -25.999], [32.08599, -26.00978], [32.10435, -26.15656], [32.07352, -26.40185], [32.13409, -26.5317], [32.13315, -26.84345], [32.19409, -26.84032], [32.22302, -26.84136], [32.29584, -26.852], [32.35222, -26.86027], [34.51034, -26.91792], [42.99868, -12.65261], [40.74206, -10.25691]]]] } },
-    { type: "Feature", properties: { iso1A2: "NA", iso1A3: "NAM", iso1N3: "516", wikidata: "Q1030", nameEn: "Namibia", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["264"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.28743, -17.38814], [13.95896, -17.43141], [13.36212, -16.98048], [12.97145, -16.98567], [12.52111, -17.24495], [12.07076, -17.15165], [11.75063, -17.25013], [10.5065, -17.25284], [12.51595, -32.27486], [16.45332, -28.63117], [16.46592, -28.57126], [16.59922, -28.53246], [16.90446, -28.057], [17.15405, -28.08573], [17.4579, -28.68718], [18.99885, -28.89165], [19.99882, -28.42622], [19.99817, -24.76768], [19.99912, -21.99991], [20.99751, -22.00026], [20.99904, -18.31743], [21.45556, -18.31795], [23.0996, -18.00075], [23.29618, -17.99855], [23.61088, -18.4881], [24.19416, -18.01919], [24.40577, -17.95726], [24.57485, -18.07151], [24.6303, -17.9863], [24.71887, -17.9218], [24.73364, -17.89338], [24.95586, -17.79674], [25.05895, -17.84452], [25.16882, -17.78253], [25.26433, -17.79571], [25.00198, -17.58221], [24.70864, -17.49501], [24.5621, -17.52963], [24.38712, -17.46818], [24.32811, -17.49082], [24.23619, -17.47489], [23.47474, -17.62877], [21.42741, -18.02787], [21.14283, -17.94318], [18.84226, -17.80375], [18.39229, -17.38927], [14.28743, -17.38814]]]] } },
-    { type: "Feature", properties: { iso1A2: "NC", iso1A3: "NCL", iso1N3: "540", wikidata: "Q33788", nameEn: "New Caledonia", country: "FR", groups: ["EU", "Q1451600", "054", "009", "UN"], callingCodes: ["687"] }, geometry: { type: "MultiPolygon", coordinates: [[[[159.77159, -28.41151], [174.245, -23.1974], [156.73836, -14.50464], [159.77159, -28.41151]]]] } },
-    { type: "Feature", properties: { iso1A2: "NE", iso1A3: "NER", iso1N3: "562", wikidata: "Q1032", nameEn: "Niger", aliases: ["RN"], groups: ["011", "202", "002", "UN"], callingCodes: ["227"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.22918, 22.61719], [13.5631, 23.16574], [11.96886, 23.51735], [7.48273, 20.87258], [7.38361, 20.79165], [5.8153, 19.45101], [4.26651, 19.14224], [4.26762, 17.00432], [4.21787, 17.00118], [4.19893, 16.39923], [3.50368, 15.35934], [3.03134, 15.42221], [3.01806, 15.34571], [1.31275, 15.27978], [0.96711, 14.98275], [0.72632, 14.95898], [0.23859, 15.00135], [0.16936, 14.51654], [0.38051, 14.05575], [0.61924, 13.68491], [0.77377, 13.6866], [0.77637, 13.64442], [0.99514, 13.5668], [1.02813, 13.46635], [1.20088, 13.38951], [1.24429, 13.39373], [1.28509, 13.35488], [1.24516, 13.33968], [1.21217, 13.37853], [1.18873, 13.31771], [0.99253, 13.37515], [0.99167, 13.10727], [2.26349, 12.41915], [2.05785, 12.35539], [2.39723, 11.89473], [2.45824, 11.98672], [2.39657, 12.10952], [2.37783, 12.24804], [2.6593, 12.30631], [2.83978, 12.40585], [3.25352, 12.01467], [3.31613, 11.88495], [3.48187, 11.86092], [3.59375, 11.70269], [3.61075, 11.69181], [3.67988, 11.75429], [3.67122, 11.80865], [3.63063, 11.83042], [3.61955, 11.91847], [3.67775, 11.97599], [3.63136, 12.11826], [3.66364, 12.25884], [3.65111, 12.52223], [3.94339, 12.74979], [4.10006, 12.98862], [4.14367, 13.17189], [4.14186, 13.47586], [4.23456, 13.47725], [4.4668, 13.68286], [4.87425, 13.78], [4.9368, 13.7345], [5.07396, 13.75052], [5.21026, 13.73627], [5.27797, 13.75474], [5.35437, 13.83567], [5.52957, 13.8845], [6.15771, 13.64564], [6.27411, 13.67835], [6.43053, 13.6006], [6.69617, 13.34057], [6.94445, 12.99825], [7.0521, 13.00076], [7.12676, 13.02445], [7.22399, 13.1293], [7.39241, 13.09717], [7.81085, 13.34902], [8.07997, 13.30847], [8.25185, 13.20369], [8.41853, 13.06166], [8.49493, 13.07519], [8.60431, 13.01768], [8.64251, 12.93985], [8.97413, 12.83661], [9.65995, 12.80614], [10.00373, 13.18171], [10.19993, 13.27129], [10.46731, 13.28819], [10.66004, 13.36422], [11.4535, 13.37773], [11.88236, 13.2527], [12.04209, 13.14452], [12.16189, 13.10056], [12.19315, 13.12423], [12.47095, 13.06673], [12.58033, 13.27805], [12.6793, 13.29157], [12.87376, 13.48919], [13.05085, 13.53984], [13.19844, 13.52802], [13.33213, 13.71195], [13.6302, 13.71094], [13.47559, 14.40881], [13.48259, 14.46704], [13.68573, 14.55276], [13.67878, 14.64013], [13.809, 14.72915], [13.78991, 14.87519], [13.86301, 15.04043], [14.37425, 15.72591], [15.50373, 16.89649], [15.6032, 18.77402], [15.75098, 19.93002], [15.99632, 20.35364], [15.6721, 20.70069], [15.59841, 20.74039], [15.56004, 20.79488], [15.55382, 20.86507], [15.57248, 20.92138], [15.62515, 20.95395], [15.28332, 21.44557], [15.20213, 21.49365], [15.19692, 21.99339], [14.99751, 23.00539], [14.22918, 22.61719]]]] } },
-    { type: "Feature", properties: { iso1A2: "NF", iso1A3: "NFK", iso1N3: "574", wikidata: "Q31057", nameEn: "Norfolk Island", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["672 3"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169.82316, -28.16667], [166.29505, -28.29175], [167.94076, -30.60745], [169.82316, -28.16667]]]] } },
-    { type: "Feature", properties: { iso1A2: "NG", iso1A3: "NGA", iso1N3: "566", wikidata: "Q1033", nameEn: "Nigeria", groups: ["011", "202", "002", "UN"], callingCodes: ["234"] }, geometry: { type: "MultiPolygon", coordinates: [[[[6.15771, 13.64564], [5.52957, 13.8845], [5.35437, 13.83567], [5.27797, 13.75474], [5.21026, 13.73627], [5.07396, 13.75052], [4.9368, 13.7345], [4.87425, 13.78], [4.4668, 13.68286], [4.23456, 13.47725], [4.14186, 13.47586], [4.14367, 13.17189], [4.10006, 12.98862], [3.94339, 12.74979], [3.65111, 12.52223], [3.66364, 12.25884], [3.63136, 12.11826], [3.67775, 11.97599], [3.61955, 11.91847], [3.63063, 11.83042], [3.67122, 11.80865], [3.67988, 11.75429], [3.61075, 11.69181], [3.59375, 11.70269], [3.49175, 11.29765], [3.71505, 11.13015], [3.84243, 10.59316], [3.78292, 10.40538], [3.6844, 10.46351], [3.57275, 10.27185], [3.66908, 10.18136], [3.54429, 9.87739], [3.35383, 9.83641], [3.32099, 9.78032], [3.34726, 9.70696], [3.25093, 9.61632], [3.13928, 9.47167], [3.14147, 9.28375], [3.08017, 9.10006], [2.77907, 9.06924], [2.67523, 7.87825], [2.73095, 7.7755], [2.73405, 7.5423], [2.78668, 7.5116], [2.79442, 7.43486], [2.74489, 7.42565], [2.76965, 7.13543], [2.71702, 6.95722], [2.74024, 6.92802], [2.73405, 6.78508], [2.78823, 6.76356], [2.78204, 6.70514], [2.7325, 6.64057], [2.74334, 6.57291], [2.70464, 6.50831], [2.70566, 6.38038], [2.74181, 6.13349], [5.87055, 3.78489], [8.34397, 4.30689], [8.60302, 4.87353], [8.78027, 5.1243], [8.92029, 5.58403], [8.83687, 5.68483], [8.88156, 5.78857], [8.84209, 5.82562], [9.51757, 6.43874], [9.70674, 6.51717], [9.77824, 6.79088], [9.86314, 6.77756], [10.15135, 7.03781], [10.21466, 6.88996], [10.53639, 6.93432], [10.57214, 7.16345], [10.59746, 7.14719], [10.60789, 7.06885], [10.83727, 6.9358], [10.8179, 6.83377], [10.94302, 6.69325], [11.09644, 6.68437], [11.09495, 6.51717], [11.42041, 6.53789], [11.42264, 6.5882], [11.51499, 6.60892], [11.57755, 6.74059], [11.55818, 6.86186], [11.63117, 6.9905], [11.87396, 7.09398], [11.84864, 7.26098], [11.93205, 7.47812], [12.01844, 7.52981], [11.99908, 7.67302], [12.20909, 7.97553], [12.19271, 8.10826], [12.24782, 8.17904], [12.26123, 8.43696], [12.4489, 8.52536], [12.44146, 8.6152], [12.68722, 8.65938], [12.71701, 8.7595], [12.79, 8.75361], [12.81085, 8.91992], [12.90022, 9.11411], [12.91958, 9.33905], [12.85628, 9.36698], [13.02385, 9.49334], [13.22642, 9.57266], [13.25472, 9.76795], [13.29941, 9.8296], [13.25025, 9.86042], [13.24132, 9.91031], [13.27409, 9.93232], [13.286, 9.9822], [13.25323, 10.00127], [13.25025, 10.03647], [13.34111, 10.12299], [13.43644, 10.13326], [13.5705, 10.53183], [13.54964, 10.61236], [13.73434, 10.9255], [13.70753, 10.94451], [13.7403, 11.00593], [13.78945, 11.00154], [13.97489, 11.30258], [14.17821, 11.23831], [14.6124, 11.51283], [14.64591, 11.66166], [14.55207, 11.72001], [14.61612, 11.7798], [14.6474, 12.17466], [14.4843, 12.35223], [14.22215, 12.36533], [14.17523, 12.41916], [14.20204, 12.53405], [14.08251, 13.0797], [13.6302, 13.71094], [13.33213, 13.71195], [13.19844, 13.52802], [13.05085, 13.53984], [12.87376, 13.48919], [12.6793, 13.29157], [12.58033, 13.27805], [12.47095, 13.06673], [12.19315, 13.12423], [12.16189, 13.10056], [12.04209, 13.14452], [11.88236, 13.2527], [11.4535, 13.37773], [10.66004, 13.36422], [10.46731, 13.28819], [10.19993, 13.27129], [10.00373, 13.18171], [9.65995, 12.80614], [8.97413, 12.83661], [8.64251, 12.93985], [8.60431, 13.01768], [8.49493, 13.07519], [8.41853, 13.06166], [8.25185, 13.20369], [8.07997, 13.30847], [7.81085, 13.34902], [7.39241, 13.09717], [7.22399, 13.1293], [7.12676, 13.02445], [7.0521, 13.00076], [6.94445, 12.99825], [6.69617, 13.34057], [6.43053, 13.6006], [6.27411, 13.67835], [6.15771, 13.64564]]]] } },
-    { type: "Feature", properties: { iso1A2: "NI", iso1A3: "NIC", iso1N3: "558", wikidata: "Q811", nameEn: "Nicaragua", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["505"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-83.13724, 15.00002], [-83.49268, 15.01158], [-83.62101, 14.89448], [-83.89551, 14.76697], [-84.10584, 14.76353], [-84.48373, 14.63249], [-84.70119, 14.68078], [-84.82596, 14.82212], [-84.90082, 14.80489], [-85.1575, 14.53934], [-85.18602, 14.24929], [-85.32149, 14.2562], [-85.45762, 14.11304], [-85.73964, 13.9698], [-85.75477, 13.8499], [-86.03458, 13.99181], [-86.00685, 14.08474], [-86.14801, 14.04317], [-86.35219, 13.77157], [-86.76812, 13.79605], [-86.71267, 13.30348], [-86.87066, 13.30641], [-86.93383, 13.18677], [-86.93197, 13.05313], [-87.03785, 12.98682], [-87.06306, 13.00892], [-87.37107, 12.98646], [-87.55124, 13.12523], [-87.7346, 13.13228], [-88.11443, 12.63306], [-86.14524, 11.09059], [-85.71223, 11.06868], [-85.60529, 11.22607], [-84.92439, 10.9497], [-84.68197, 11.07568], [-83.90838, 10.71161], [-83.66597, 10.79916], [-83.68276, 11.01562], [-82.56142, 11.91792], [-82.06974, 14.49418], [-83.04763, 15.03256], [-83.13724, 15.00002]]]] } },
-    { type: "Feature", properties: { iso1A2: "NL", iso1A3: "NLD", iso1N3: "528", wikidata: "Q29999", nameEn: "Kingdom of the Netherlands" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "NO", iso1A3: "NOR", iso1N3: "578", wikidata: "Q20", nameEn: "Norway" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "NP", iso1A3: "NPL", iso1N3: "524", wikidata: "Q837", nameEn: "Nepal", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["977"] }, geometry: { type: "MultiPolygon", coordinates: [[[[88.13378, 27.88015], [87.82681, 27.95248], [87.72718, 27.80938], [87.56996, 27.84517], [87.11696, 27.84104], [87.03757, 27.94835], [86.75582, 28.04182], [86.74181, 28.10638], [86.56265, 28.09569], [86.51609, 27.96623], [86.42736, 27.91122], [86.22966, 27.9786], [86.18607, 28.17364], [86.088, 28.09264], [86.08333, 28.02121], [86.12069, 27.93047], [86.06309, 27.90021], [85.94946, 27.9401], [85.97813, 27.99023], [85.90743, 28.05144], [85.84672, 28.18187], [85.74864, 28.23126], [85.71907, 28.38064], [85.69105, 28.38475], [85.60854, 28.25045], [85.59765, 28.30529], [85.4233, 28.32996], [85.38127, 28.28336], [85.10729, 28.34092], [85.18668, 28.54076], [85.19135, 28.62825], [85.06059, 28.68562], [84.85511, 28.58041], [84.62317, 28.73887], [84.47528, 28.74023], [84.2231, 28.89571], [84.24801, 29.02783], [84.18107, 29.23451], [83.97559, 29.33091], [83.82303, 29.30513], [83.63156, 29.16249], [83.44787, 29.30513], [83.28131, 29.56813], [83.07116, 29.61957], [82.73024, 29.81695], [82.5341, 29.9735], [82.38622, 30.02608], [82.16984, 30.0692], [82.19475, 30.16884], [82.10757, 30.23745], [82.10135, 30.35439], [81.99082, 30.33423], [81.62033, 30.44703], [81.5459, 30.37688], [81.41018, 30.42153], [81.39928, 30.21862], [81.33355, 30.15303], [81.2623, 30.14596], [81.29032, 30.08806], [81.24362, 30.0126], [81.12842, 30.01395], [81.03953, 30.20059], [80.92547, 30.17193], [80.91143, 30.22173], [80.86673, 30.17321], [80.8778, 30.13384], [80.67076, 29.95732], [80.60226, 29.95732], [80.57179, 29.91422], [80.56247, 29.86661], [80.48997, 29.79566], [80.43458, 29.80466], [80.41554, 29.79451], [80.36803, 29.73865], [80.38428, 29.68513], [80.41858, 29.63581], [80.37939, 29.57098], [80.24322, 29.44299], [80.31428, 29.30784], [80.28626, 29.20327], [80.24112, 29.21414], [80.26602, 29.13938], [80.23178, 29.11626], [80.18085, 29.13649], [80.05743, 28.91479], [80.06957, 28.82763], [80.12125, 28.82346], [80.37188, 28.63371], [80.44504, 28.63098], [80.52443, 28.54897], [80.50575, 28.6706], [80.55142, 28.69182], [81.03471, 28.40054], [81.19847, 28.36284], [81.32923, 28.13521], [81.38683, 28.17638], [81.48179, 28.12148], [81.47867, 28.08303], [81.91223, 27.84995], [81.97214, 27.93322], [82.06554, 27.92222], [82.46405, 27.6716], [82.70378, 27.72122], [82.74119, 27.49838], [82.93261, 27.50328], [82.94938, 27.46036], [83.19413, 27.45632], [83.27197, 27.38309], [83.2673, 27.36235], [83.29999, 27.32778], [83.35136, 27.33885], [83.38872, 27.39276], [83.39495, 27.4798], [83.61288, 27.47013], [83.85595, 27.35797], [83.86182, 27.4241], [83.93306, 27.44939], [84.02229, 27.43836], [84.10791, 27.52399], [84.21376, 27.45218], [84.25735, 27.44941], [84.29315, 27.39], [84.62161, 27.33885], [84.69166, 27.21294], [84.64496, 27.04669], [84.793, 26.9968], [84.82913, 27.01989], [84.85754, 26.98984], [84.96687, 26.95599], [84.97186, 26.9149], [85.00536, 26.89523], [85.05592, 26.88991], [85.02635, 26.85381], [85.15883, 26.86966], [85.19291, 26.86909], [85.18046, 26.80519], [85.21159, 26.75933], [85.34302, 26.74954], [85.47752, 26.79292], [85.56471, 26.84133], [85.5757, 26.85955], [85.59461, 26.85161], [85.61621, 26.86721], [85.66239, 26.84822], [85.73483, 26.79613], [85.72315, 26.67471], [85.76907, 26.63076], [85.83126, 26.61134], [85.85126, 26.60866], [85.8492, 26.56667], [86.02729, 26.66756], [86.13596, 26.60651], [86.22513, 26.58863], [86.26235, 26.61886], [86.31564, 26.61925], [86.49726, 26.54218], [86.54258, 26.53819], [86.57073, 26.49825], [86.61313, 26.48658], [86.62686, 26.46891], [86.69124, 26.45169], [86.74025, 26.42386], [86.76797, 26.45892], [86.82898, 26.43919], [86.94543, 26.52076], [86.95912, 26.52076], [87.01559, 26.53228], [87.04691, 26.58685], [87.0707, 26.58571], [87.09147, 26.45039], [87.14751, 26.40542], [87.18863, 26.40558], [87.24682, 26.4143], [87.26587, 26.40592], [87.26568, 26.37294], [87.34568, 26.34787], [87.37314, 26.40815], [87.46566, 26.44058], [87.51571, 26.43106], [87.55274, 26.40596], [87.59175, 26.38342], [87.66803, 26.40294], [87.67893, 26.43501], [87.76004, 26.40711], [87.7918, 26.46737], [87.84193, 26.43663], [87.89085, 26.48565], [87.90115, 26.44923], [88.00895, 26.36029], [88.09414, 26.43732], [88.09963, 26.54195], [88.16452, 26.64111], [88.1659, 26.68177], [88.19107, 26.75516], [88.12302, 26.95324], [88.13422, 26.98705], [88.11719, 26.98758], [87.9887, 27.11045], [88.01587, 27.21388], [88.01646, 27.21612], [88.07277, 27.43007], [88.04008, 27.49223], [88.19107, 27.79285], [88.1973, 27.85067], [88.13378, 27.88015]]]] } },
-    { type: "Feature", properties: { iso1A2: "NR", iso1A3: "NRU", iso1N3: "520", wikidata: "Q697", nameEn: "Nauru", groups: ["057", "009", "UN"], driveSide: "left", callingCodes: ["674"] }, geometry: { type: "MultiPolygon", coordinates: [[[[166.95155, 0.14829], [166.21778, -0.7977], [167.60042, -0.88259], [166.95155, 0.14829]]]] } },
-    { type: "Feature", properties: { iso1A2: "NU", iso1A3: "NIU", iso1N3: "570", wikidata: "Q34020", nameEn: "Niue", country: "NZ", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["683"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-170.83899, -18.53439], [-170.82274, -20.44429], [-168.63096, -18.60489], [-170.83899, -18.53439]]]] } },
-    { type: "Feature", properties: { iso1A2: "NZ", iso1A3: "NZL", iso1N3: "554", wikidata: "Q664", nameEn: "New Zealand" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "OM", iso1A3: "OMN", iso1N3: "512", wikidata: "Q842", nameEn: "Oman", groups: ["145", "142", "UN"], callingCodes: ["968"] }, geometry: { type: "MultiPolygon", coordinates: [[[[56.82555, 25.7713], [56.79239, 26.41236], [56.68954, 26.76645], [56.2644, 26.58649], [55.81777, 26.18798], [56.08666, 26.05038], [56.15498, 26.06828], [56.19334, 25.9795], [56.13963, 25.82765], [56.17416, 25.77239], [56.13579, 25.73524], [56.14826, 25.66351], [56.18363, 25.65508], [56.20473, 25.61119], [56.25365, 25.60211], [56.26636, 25.60643], [56.25341, 25.61443], [56.26534, 25.62825], [56.82555, 25.7713]]], [[[56.26062, 25.33108], [56.23362, 25.31253], [56.25008, 25.28843], [56.24465, 25.27505], [56.20838, 25.25668], [56.20872, 25.24104], [56.24341, 25.22867], [56.27628, 25.23404], [56.34438, 25.26653], [56.35172, 25.30681], [56.3111, 25.30107], [56.3005, 25.31815], [56.26062, 25.33108]], [[56.28423, 25.26344], [56.27086, 25.26128], [56.2716, 25.27916], [56.28102, 25.28486], [56.29379, 25.2754], [56.28423, 25.26344]]], [[[61.45114, 22.55394], [56.86325, 25.03856], [56.3227, 24.97284], [56.34873, 24.93205], [56.30269, 24.88334], [56.20568, 24.85063], [56.20062, 24.78565], [56.13684, 24.73699], [56.06128, 24.74457], [56.03535, 24.81161], [55.97836, 24.87673], [55.97467, 24.89639], [56.05106, 24.87461], [56.05715, 24.95727], [55.96316, 25.00857], [55.90849, 24.96771], [55.85094, 24.96858], [55.81116, 24.9116], [55.81348, 24.80102], [55.83408, 24.77858], [55.83271, 24.68567], [55.76461, 24.5287], [55.83271, 24.41521], [55.83395, 24.32776], [55.80747, 24.31069], [55.79145, 24.27914], [55.76781, 24.26209], [55.75939, 24.26114], [55.75382, 24.2466], [55.75257, 24.23466], [55.76558, 24.23227], [55.77658, 24.23476], [55.83367, 24.20193], [55.95472, 24.2172], [56.01799, 24.07426], [55.8308, 24.01633], [55.73301, 24.05994], [55.48677, 23.94946], [55.57358, 23.669], [55.22634, 23.10378], [55.2137, 22.71065], [55.66469, 21.99658], [54.99756, 20.00083], [52.00311, 19.00083], [52.78009, 17.35124], [52.74267, 17.29519], [52.81185, 17.28568], [57.49095, 8.14549], [61.45114, 22.55394]]]] } },
-    { type: "Feature", properties: { iso1A2: "PA", iso1A3: "PAN", iso1N3: "591", wikidata: "Q804", nameEn: "Panama", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["507"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-77.32389, 8.81247], [-77.58292, 9.22278], [-78.79327, 9.93766], [-82.51044, 9.65379], [-82.56507, 9.57279], [-82.61345, 9.49881], [-82.66667, 9.49746], [-82.77206, 9.59573], [-82.87919, 9.62645], [-82.84871, 9.4973], [-82.93516, 9.46741], [-82.93516, 9.07687], [-82.72126, 8.97125], [-82.88253, 8.83331], [-82.91377, 8.774], [-82.92068, 8.74832], [-82.8794, 8.6981], [-82.82739, 8.60153], [-82.83975, 8.54755], [-82.83322, 8.52464], [-82.8382, 8.48117], [-82.8679, 8.44042], [-82.93056, 8.43465], [-83.05209, 8.33394], [-82.9388, 8.26634], [-82.88641, 8.10219], [-82.89137, 8.05755], [-82.89978, 8.04083], [-82.94503, 7.93865], [-82.13751, 6.97312], [-78.06168, 7.07793], [-77.89178, 7.22681], [-77.81426, 7.48319], [-77.72157, 7.47612], [-77.72514, 7.72348], [-77.57185, 7.51147], [-77.17257, 7.97422], [-77.45064, 8.49991], [-77.32389, 8.81247]]]] } },
-    { type: "Feature", properties: { iso1A2: "PE", iso1A3: "PER", iso1N3: "604", wikidata: "Q419", nameEn: "Peru", groups: ["005", "419", "019", "UN"], callingCodes: ["51"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-74.26675, -0.97229], [-74.42701, -0.50218], [-75.18513, -0.0308], [-75.25764, -0.11943], [-75.40192, -0.17196], [-75.61997, -0.10012], [-75.60169, -0.18708], [-75.53615, -0.19213], [-75.22862, -0.60048], [-75.22862, -0.95588], [-75.3872, -0.9374], [-75.57429, -1.55961], [-76.05203, -2.12179], [-76.6324, -2.58397], [-77.94147, -3.05454], [-78.19369, -3.36431], [-78.14324, -3.47653], [-78.22642, -3.51113], [-78.24589, -3.39907], [-78.34362, -3.38633], [-78.68394, -4.60754], [-78.85149, -4.66795], [-79.01659, -5.01481], [-79.1162, -4.97774], [-79.26248, -4.95167], [-79.59402, -4.46848], [-79.79722, -4.47558], [-80.13945, -4.29786], [-80.39256, -4.48269], [-80.46386, -4.41516], [-80.32114, -4.21323], [-80.45023, -4.20938], [-80.4822, -4.05477], [-80.46386, -4.01342], [-80.13232, -3.90317], [-80.19926, -3.68894], [-80.18741, -3.63994], [-80.19848, -3.59249], [-80.21642, -3.5888], [-80.20535, -3.51667], [-80.22629, -3.501], [-80.23651, -3.48652], [-80.24586, -3.48677], [-80.24123, -3.46124], [-80.20647, -3.431], [-80.30602, -3.39149], [-84.52388, -3.36941], [-85.71054, -21.15413], [-70.59118, -18.35072], [-70.378, -18.3495], [-70.31267, -18.31258], [-70.16394, -18.31737], [-69.96732, -18.25992], [-69.81607, -18.12582], [-69.75305, -17.94605], [-69.82868, -17.72048], [-69.79087, -17.65563], [-69.66483, -17.65083], [-69.46897, -17.4988], [-69.46863, -17.37466], [-69.62883, -17.28142], [-69.16896, -16.72233], [-69.00853, -16.66769], [-69.04027, -16.57214], [-68.98358, -16.42165], [-68.79464, -16.33272], [-68.96238, -16.194], [-69.09986, -16.22693], [-69.20291, -16.16668], [-69.40336, -15.61358], [-69.14856, -15.23478], [-69.36254, -14.94634], [-68.88135, -14.18639], [-69.05265, -13.68546], [-68.8864, -13.40792], [-68.85615, -12.87769], [-68.65044, -12.50689], [-68.98115, -11.8979], [-69.57156, -10.94555], [-69.57835, -10.94051], [-69.90896, -10.92744], [-70.38791, -11.07096], [-70.51395, -10.92249], [-70.64134, -11.0108], [-70.62487, -9.80666], [-70.55429, -9.76692], [-70.58453, -9.58303], [-70.53373, -9.42628], [-71.23394, -9.9668], [-72.14742, -9.98049], [-72.31883, -9.5184], [-72.72216, -9.41397], [-73.21498, -9.40904], [-72.92886, -9.04074], [-73.76576, -7.89884], [-73.65485, -7.77897], [-73.96938, -7.58465], [-73.77011, -7.28944], [-73.73986, -6.87919], [-73.12983, -6.43852], [-73.24579, -6.05764], [-72.83973, -5.14765], [-72.64391, -5.0391], [-71.87003, -4.51661], [-70.96814, -4.36915], [-70.77601, -4.15717], [-70.33236, -4.15214], [-70.19582, -4.3607], [-70.11305, -4.27281], [-70.00888, -4.37833], [-69.94708, -4.2431], [-70.3374, -3.79505], [-70.52393, -3.87553], [-70.71396, -3.7921], [-70.04609, -2.73906], [-70.94377, -2.23142], [-71.75223, -2.15058], [-72.92587, -2.44514], [-73.65312, -1.26222], [-74.26675, -0.97229]]]] } },
-    { type: "Feature", properties: { iso1A2: "PF", iso1A3: "PYF", iso1N3: "258", wikidata: "Q30971", nameEn: "French Polynesia", country: "FR", groups: ["EU", "Q1451600", "061", "009", "UN"], callingCodes: ["689"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-135.59706, -4.70473], [-156.48634, -15.52824], [-156.45576, -31.75456], [-133.59543, -28.4709], [-135.59706, -4.70473]]]] } },
-    { type: "Feature", properties: { iso1A2: "PG", iso1A3: "PNG", iso1N3: "598", wikidata: "Q691", nameEn: "Papua New Guinea", groups: ["054", "009", "UN"], driveSide: "left", callingCodes: ["675"] }, geometry: { type: "MultiPolygon", coordinates: [[[[141.03157, 2.12829], [140.99813, -6.3233], [140.85295, -6.72996], [140.90448, -6.85033], [141.01763, -6.90181], [141.01842, -9.35091], [141.88934, -9.36111], [142.19246, -9.15378], [142.48658, -9.36754], [143.29772, -9.33993], [143.87386, -9.02382], [145.2855, -9.62524], [156.73836, -14.50464], [154.74815, -7.33315], [155.60735, -6.92266], [155.69784, -6.92661], [155.92557, -6.84664], [156.03993, -6.65703], [156.03296, -6.55528], [160.43769, -4.17974], [141.03157, 2.12829]]]] } },
-    { type: "Feature", properties: { iso1A2: "PH", iso1A3: "PHL", iso1N3: "608", wikidata: "Q928", nameEn: "Philippines", aliases: ["PI", "RP"], groups: ["035", "142", "UN"], callingCodes: ["63"] }, geometry: { type: "MultiPolygon", coordinates: [[[[129.19694, 7.84182], [121.8109, 21.77688], [120.69238, 21.52331], [118.82252, 14.67191], [115.39742, 10.92666], [116.79524, 7.43869], [117.17735, 7.52841], [117.93857, 6.89845], [117.98544, 6.27477], [119.52945, 5.35672], [118.93936, 4.09009], [118.06469, 4.16638], [121.14448, 2.12444], [129.19694, 7.84182]]]] } },
-    { type: "Feature", properties: { iso1A2: "PK", iso1A3: "PAK", iso1N3: "586", wikidata: "Q843", nameEn: "Pakistan", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["92"] }, geometry: { type: "MultiPolygon", coordinates: [[[[75.72737, 36.7529], [75.45562, 36.71971], [75.40481, 36.95382], [75.13839, 37.02622], [74.56453, 37.03023], [74.53739, 36.96224], [74.43389, 37.00977], [74.04856, 36.82648], [73.82685, 36.91421], [72.6323, 36.84601], [72.18135, 36.71838], [71.80267, 36.49924], [71.60491, 36.39429], [71.19505, 36.04134], [71.37969, 35.95865], [71.55273, 35.71483], [71.49917, 35.6267], [71.65435, 35.4479], [71.54294, 35.31037], [71.5541, 35.28776], [71.67495, 35.21262], [71.52938, 35.09023], [71.55273, 35.02615], [71.49917, 35.00478], [71.50329, 34.97328], [71.29472, 34.87728], [71.28356, 34.80882], [71.08718, 34.69034], [71.11602, 34.63047], [71.0089, 34.54568], [71.02401, 34.44835], [71.17662, 34.36769], [71.12815, 34.26619], [71.13078, 34.16503], [71.09453, 34.13524], [71.09307, 34.11961], [71.06933, 34.10564], [71.07345, 34.06242], [70.88119, 33.97933], [70.54336, 33.9463], [69.90203, 34.04194], [69.87307, 33.9689], [69.85671, 33.93719], [70.00503, 33.73528], [70.14236, 33.71701], [70.14785, 33.6553], [70.20141, 33.64387], [70.17062, 33.53535], [70.32775, 33.34496], [70.13686, 33.21064], [70.07369, 33.22557], [70.02563, 33.14282], [69.85259, 33.09451], [69.79766, 33.13247], [69.71526, 33.09911], [69.57656, 33.09911], [69.49004, 33.01509], [69.49854, 32.88843], [69.5436, 32.8768], [69.47082, 32.85834], [69.38018, 32.76601], [69.43649, 32.7302], [69.44747, 32.6678], [69.38155, 32.56601], [69.2868, 32.53938], [69.23599, 32.45946], [69.27932, 32.29119], [69.27032, 32.14141], [69.3225, 31.93186], [69.20577, 31.85957], [69.11514, 31.70782], [69.00939, 31.62249], [68.95995, 31.64822], [68.91078, 31.59687], [68.79997, 31.61665], [68.6956, 31.75687], [68.57475, 31.83158], [68.44222, 31.76446], [68.27605, 31.75863], [68.25614, 31.80357], [68.1655, 31.82691], [68.00071, 31.6564], [67.86887, 31.63536], [67.72056, 31.52304], [67.58323, 31.52772], [67.62374, 31.40473], [67.7748, 31.4188], [67.78854, 31.33203], [67.29964, 31.19586], [67.03323, 31.24519], [67.04147, 31.31561], [66.83273, 31.26867], [66.72561, 31.20526], [66.68166, 31.07597], [66.58175, 30.97532], [66.42645, 30.95309], [66.39194, 30.9408], [66.28413, 30.57001], [66.34869, 30.404], [66.23609, 30.06321], [66.36042, 29.9583], [66.24175, 29.85181], [65.04005, 29.53957], [64.62116, 29.58903], [64.19796, 29.50407], [64.12966, 29.39157], [63.5876, 29.50456], [62.47751, 29.40782], [60.87231, 29.86514], [61.31508, 29.38903], [61.53765, 29.00507], [61.65978, 28.77937], [61.93581, 28.55284], [62.40259, 28.42703], [62.59499, 28.24842], [62.79412, 28.28108], [62.7638, 28.02992], [62.84905, 27.47627], [62.79684, 27.34381], [62.80604, 27.22412], [63.19649, 27.25674], [63.32283, 27.14437], [63.25005, 27.08692], [63.25005, 26.84212], [63.18688, 26.83844], [63.1889, 26.65072], [62.77352, 26.64099], [62.31484, 26.528], [62.21304, 26.26601], [62.05117, 26.31647], [61.89391, 26.26251], [61.83831, 26.07249], [61.83968, 25.7538], [61.683, 25.66638], [61.6433, 25.27541], [61.46682, 24.57869], [68.11329, 23.53945], [68.20763, 23.85849], [68.39339, 23.96838], [68.74643, 23.97027], [68.7416, 24.31904], [68.90914, 24.33156], [68.97781, 24.26021], [69.07806, 24.29777], [69.19341, 24.25646], [69.29778, 24.28712], [69.59579, 24.29777], [69.73335, 24.17007], [70.03428, 24.172], [70.11712, 24.30915], [70.5667, 24.43787], [70.57906, 24.27774], [70.71502, 24.23517], [70.88393, 24.27398], [70.85784, 24.30903], [70.94985, 24.3791], [71.04461, 24.34657], [71.12838, 24.42662], [71.00341, 24.46038], [70.97594, 24.60904], [71.09405, 24.69017], [70.94002, 24.92843], [70.89148, 25.15064], [70.66695, 25.39314], [70.67382, 25.68186], [70.60378, 25.71898], [70.53649, 25.68928], [70.37444, 25.67443], [70.2687, 25.71156], [70.0985, 25.93238], [70.08193, 26.08094], [70.17532, 26.24118], [70.17532, 26.55362], [70.05584, 26.60398], [69.88555, 26.56836], [69.50904, 26.74892], [69.58519, 27.18109], [70.03136, 27.56627], [70.12502, 27.8057], [70.37307, 28.01208], [70.60927, 28.02178], [70.79054, 27.68423], [71.89921, 27.96035], [71.9244, 28.11555], [72.20329, 28.3869], [72.29495, 28.66367], [72.40402, 28.78283], [72.94272, 29.02487], [73.01337, 29.16422], [73.05886, 29.1878], [73.28094, 29.56646], [73.3962, 29.94707], [73.58665, 30.01848], [73.80299, 30.06969], [73.97225, 30.19829], [73.95736, 30.28466], [73.88993, 30.36305], [74.5616, 31.04153], [74.67971, 31.05479], [74.6852, 31.12771], [74.60006, 31.13711], [74.60281, 31.10419], [74.56023, 31.08303], [74.51629, 31.13829], [74.53223, 31.30321], [74.59773, 31.4136], [74.64713, 31.45605], [74.59319, 31.50197], [74.61517, 31.55698], [74.57498, 31.60382], [74.47771, 31.72227], [74.58907, 31.87824], [74.79919, 31.95983], [74.86236, 32.04485], [74.9269, 32.0658], [75.00793, 32.03786], [75.25649, 32.10187], [75.38046, 32.26836], [75.28259, 32.36556], [75.03265, 32.49538], [74.97634, 32.45367], [74.84725, 32.49075], [74.68362, 32.49298], [74.67431, 32.56676], [74.65251, 32.56416], [74.64424, 32.60985], [74.69542, 32.66792], [74.65345, 32.71225], [74.7113, 32.84219], [74.64675, 32.82604], [74.6289, 32.75561], [74.45312, 32.77755], [74.41467, 32.90563], [74.31227, 32.92795], [74.34875, 32.97823], [74.31854, 33.02891], [74.17571, 33.07495], [74.15374, 33.13477], [74.02144, 33.18908], [74.01366, 33.25199], [74.08782, 33.26232], [74.17983, 33.3679], [74.18121, 33.4745], [74.10115, 33.56392], [74.03576, 33.56718], [73.97367, 33.64061], [73.98968, 33.66155], [73.96423, 33.73071], [74.00891, 33.75437], [74.05898, 33.82089], [74.14001, 33.83002], [74.26086, 33.92237], [74.25262, 34.01577], [74.21554, 34.03853], [73.91341, 34.01235], [73.88732, 34.05105], [73.90677, 34.10504], [73.98208, 34.2522], [73.90517, 34.35317], [73.8475, 34.32935], [73.74862, 34.34183], [73.74999, 34.3781], [73.88732, 34.48911], [73.89419, 34.54568], [73.93951, 34.57169], [73.93401, 34.63386], [73.96423, 34.68244], [74.12897, 34.70073], [74.31239, 34.79626], [74.58083, 34.77386], [74.6663, 34.703], [75.01479, 34.64629], [75.38009, 34.55021], [75.75438, 34.51827], [76.04614, 34.67566], [76.15463, 34.6429], [76.47186, 34.78965], [76.67648, 34.76371], [76.74377, 34.84039], [76.74514, 34.92488], [76.87193, 34.96906], [76.99251, 34.93349], [77.11796, 35.05419], [76.93465, 35.39866], [76.85088, 35.39754], [76.75475, 35.52617], [76.77323, 35.66062], [76.50961, 35.8908], [76.33453, 35.84296], [76.14913, 35.82848], [76.15325, 35.9264], [75.93028, 36.13136], [76.00906, 36.17511], [76.0324, 36.41198], [75.92391, 36.56986], [75.72737, 36.7529]]]] } },
-    { type: "Feature", properties: { iso1A2: "PL", iso1A3: "POL", iso1N3: "616", wikidata: "Q36", nameEn: "Poland", groups: ["EU", "151", "150", "UN"], callingCodes: ["48"] }, geometry: { type: "MultiPolygon", coordinates: [[[[18.57853, 55.25302], [14.20811, 54.12784], [14.22634, 53.9291], [14.20647, 53.91671], [14.18544, 53.91258], [14.20823, 53.90776], [14.21323, 53.8664], [14.27249, 53.74464], [14.26782, 53.69866], [14.2836, 53.67721], [14.27133, 53.66613], [14.28477, 53.65955], [14.2853, 53.63392], [14.31904, 53.61581], [14.30416, 53.55499], [14.3273, 53.50587], [14.35209, 53.49506], [14.4215, 53.27724], [14.44133, 53.27427], [14.45125, 53.26241], [14.40662, 53.21098], [14.37853, 53.20405], [14.36696, 53.16444], [14.38679, 53.13669], [14.35044, 53.05829], [14.25954, 53.00264], [14.14056, 52.95786], [14.15873, 52.87715], [14.12256, 52.84311], [14.13806, 52.82392], [14.22071, 52.81175], [14.61073, 52.59847], [14.6289, 52.57136], [14.60081, 52.53116], [14.63056, 52.48993], [14.54423, 52.42568], [14.55228, 52.35264], [14.56378, 52.33838], [14.58149, 52.28007], [14.70139, 52.25038], [14.71319, 52.22144], [14.68344, 52.19612], [14.70616, 52.16927], [14.67683, 52.13936], [14.6917, 52.10283], [14.72971, 52.09167], [14.76026, 52.06624], [14.71339, 52.00337], [14.70488, 51.97679], [14.7139, 51.95643], [14.71836, 51.95606], [14.72163, 51.95188], [14.7177, 51.94048], [14.70601, 51.92944], [14.6933, 51.9044], [14.6588, 51.88359], [14.59089, 51.83302], [14.60493, 51.80473], [14.64625, 51.79472], [14.66386, 51.73282], [14.69065, 51.70842], [14.75392, 51.67445], [14.75759, 51.62318], [14.7727, 51.61263], [14.71125, 51.56209], [14.73047, 51.54606], [14.72652, 51.53902], [14.73219, 51.52922], [14.94749, 51.47155], [14.9652, 51.44793], [14.96899, 51.38367], [14.98008, 51.33449], [15.04288, 51.28387], [15.01242, 51.21285], [15.0047, 51.16874], [14.99311, 51.16249], [14.99414, 51.15813], [15.00083, 51.14974], [14.99646, 51.14365], [14.99079, 51.14284], [14.99689, 51.12205], [14.98229, 51.11354], [14.97938, 51.07742], [14.95529, 51.04552], [14.92942, 50.99744], [14.89252, 50.94999], [14.89681, 50.9422], [14.81664, 50.88148], [14.82803, 50.86966], [14.99852, 50.86817], [15.01088, 50.97984], [14.96419, 50.99108], [15.02433, 51.0242], [15.03895, 51.0123], [15.06218, 51.02269], [15.10152, 51.01095], [15.11937, 50.99021], [15.16744, 51.01959], [15.1743, 50.9833], [15.2361, 50.99886], [15.27043, 50.97724], [15.2773, 50.8907], [15.36656, 50.83956], [15.3803, 50.77187], [15.43798, 50.80833], [15.73186, 50.73885], [15.81683, 50.75666], [15.87331, 50.67188], [15.97219, 50.69799], [16.0175, 50.63009], [15.98317, 50.61528], [16.02437, 50.60046], [16.10265, 50.66405], [16.20839, 50.63096], [16.23174, 50.67101], [16.33611, 50.66579], [16.44597, 50.58041], [16.34572, 50.49575], [16.31413, 50.50274], [16.19526, 50.43291], [16.21585, 50.40627], [16.22821, 50.41054], [16.28118, 50.36891], [16.30289, 50.38292], [16.36495, 50.37679], [16.3622, 50.34875], [16.39379, 50.3207], [16.42674, 50.32509], [16.56407, 50.21009], [16.55446, 50.16613], [16.63137, 50.1142], [16.7014, 50.09659], [16.8456, 50.20834], [16.98018, 50.24172], [17.00353, 50.21449], [17.02825, 50.23118], [16.99803, 50.25753], [17.02138, 50.27772], [16.99803, 50.30316], [16.94448, 50.31281], [16.90877, 50.38642], [16.85933, 50.41093], [16.89229, 50.45117], [17.1224, 50.39494], [17.14498, 50.38117], [17.19579, 50.38817], [17.19991, 50.3654], [17.27681, 50.32246], [17.34273, 50.32947], [17.34548, 50.2628], [17.3702, 50.28123], [17.58889, 50.27837], [17.67764, 50.28977], [17.69292, 50.32859], [17.74648, 50.29966], [17.72176, 50.25665], [17.76296, 50.23382], [17.70528, 50.18812], [17.59404, 50.16437], [17.66683, 50.10275], [17.6888, 50.12037], [17.7506, 50.07896], [17.77669, 50.02253], [17.86886, 49.97452], [18.00191, 50.01723], [18.04585, 50.01194], [18.04585, 50.03311], [18.00396, 50.04954], [18.03212, 50.06574], [18.07898, 50.04535], [18.10628, 50.00223], [18.20241, 49.99958], [18.21752, 49.97309], [18.27107, 49.96779], [18.27794, 49.93863], [18.31914, 49.91565], [18.33278, 49.92415], [18.33562, 49.94747], [18.41604, 49.93498], [18.53423, 49.89906], [18.54495, 49.9079], [18.54299, 49.92537], [18.57697, 49.91565], [18.57045, 49.87849], [18.60341, 49.86256], [18.57183, 49.83334], [18.61278, 49.7618], [18.61368, 49.75426], [18.62645, 49.75002], [18.62943, 49.74603], [18.62676, 49.71983], [18.69817, 49.70473], [18.72838, 49.68163], [18.80479, 49.6815], [18.84786, 49.5446], [18.84521, 49.51672], [18.94536, 49.52143], [18.97283, 49.49914], [18.9742, 49.39557], [19.18019, 49.41165], [19.25435, 49.53391], [19.36009, 49.53747], [19.37795, 49.574], [19.45348, 49.61583], [19.52626, 49.57311], [19.53313, 49.52856], [19.57845, 49.46077], [19.64162, 49.45184], [19.6375, 49.40897], [19.72127, 49.39288], [19.78581, 49.41701], [19.82237, 49.27806], [19.75286, 49.20751], [19.86409, 49.19316], [19.90529, 49.23532], [19.98494, 49.22904], [20.08238, 49.1813], [20.13738, 49.31685], [20.21977, 49.35265], [20.31453, 49.34817], [20.31728, 49.39914], [20.39939, 49.3896], [20.46422, 49.41612], [20.5631, 49.375], [20.61666, 49.41791], [20.72274, 49.41813], [20.77971, 49.35383], [20.9229, 49.29626], [20.98733, 49.30774], [21.09799, 49.37176], [21.041, 49.41791], [21.12477, 49.43666], [21.19756, 49.4054], [21.27858, 49.45988], [21.43376, 49.41433], [21.62328, 49.4447], [21.77983, 49.35443], [21.82927, 49.39467], [21.96385, 49.3437], [22.04427, 49.22136], [22.56155, 49.08865], [22.89122, 49.00725], [22.86336, 49.10513], [22.72009, 49.20288], [22.748, 49.32759], [22.69444, 49.49378], [22.64534, 49.53094], [22.78304, 49.65543], [22.80261, 49.69098], [22.83179, 49.69875], [22.99329, 49.84249], [23.28221, 50.0957], [23.67635, 50.33385], [23.71382, 50.38248], [23.79445, 50.40481], [23.99563, 50.41289], [24.03668, 50.44507], [24.07048, 50.5071], [24.0996, 50.60752], [24.0595, 50.71625], [23.95925, 50.79271], [23.99254, 50.83847], [24.0952, 50.83262], [24.14524, 50.86128], [24.04576, 50.90196], [23.92217, 51.00836], [23.90376, 51.07697], [23.80678, 51.18405], [23.63858, 51.32182], [23.69905, 51.40871], [23.62751, 51.50512], [23.56236, 51.53673], [23.57053, 51.55938], [23.53198, 51.74298], [23.62691, 51.78208], [23.61523, 51.92066], [23.68733, 51.9906], [23.64066, 52.07626], [23.61, 52.11264], [23.54314, 52.12148], [23.47859, 52.18215], [23.20071, 52.22848], [23.18196, 52.28812], [23.34141, 52.44845], [23.45112, 52.53774], [23.58296, 52.59868], [23.73615, 52.6149], [23.93763, 52.71332], [23.91805, 52.94016], [23.94689, 52.95919], [23.92184, 53.02079], [23.87548, 53.0831], [23.91393, 53.16469], [23.85657, 53.22923], [23.81995, 53.24131], [23.62004, 53.60942], [23.51284, 53.95052], [23.48261, 53.98855], [23.52702, 54.04622], [23.49196, 54.14764], [23.45223, 54.17775], [23.42418, 54.17911], [23.39525, 54.21672], [23.3494, 54.25155], [23.24656, 54.25701], [23.15938, 54.29894], [23.15526, 54.31076], [23.13905, 54.31567], [23.104, 54.29794], [23.04323, 54.31567], [23.05726, 54.34565], [22.99649, 54.35927], [23.00584, 54.38514], [22.83756, 54.40827], [22.79705, 54.36264], [21.41123, 54.32395], [20.63871, 54.3706], [19.8038, 54.44203], [19.64312, 54.45423], [18.57853, 55.25302]]]] } },
-    { type: "Feature", properties: { iso1A2: "PM", iso1A3: "SPM", iso1N3: "666", wikidata: "Q34617", nameEn: "Saint Pierre and Miquelon", country: "FR", groups: ["EU", "Q1451600", "021", "003", "019", "UN"], callingCodes: ["508"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-56.72993, 46.65575], [-55.90758, 46.6223], [-56.27503, 47.39728], [-56.72993, 46.65575]]]] } },
-    { type: "Feature", properties: { iso1A2: "PN", iso1A3: "PCN", iso1N3: "612", wikidata: "Q35672", nameEn: "Pitcairn Islands", country: "GB", groups: ["BOTS", "061", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-133.59543, -28.4709], [-122.0366, -24.55017], [-133.61511, -21.93325], [-133.59543, -28.4709]]]] } },
-    { type: "Feature", properties: { iso1A2: "PR", iso1A3: "PRI", iso1N3: "630", wikidata: "Q1183", nameEn: "Puerto Rico", aliases: ["US-PR"], country: "US", groups: ["Q1352230", "029", "003", "419", "019", "UN"], roadSpeedUnit: "mph", callingCodes: ["1 787", "1 939"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-65.27974, 17.56928], [-65.02435, 18.73231], [-67.99519, 18.97186], [-68.23894, 17.84663], [-65.27974, 17.56928]]]] } },
-    { type: "Feature", properties: { iso1A2: "PS", iso1A3: "PSE", iso1N3: "275", wikidata: "Q219060", nameEn: "Palestine" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "PT", iso1A3: "PRT", iso1N3: "620", wikidata: "Q45", nameEn: "Portugal" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "PW", iso1A3: "PLW", iso1N3: "585", wikidata: "Q695", nameEn: "Palau", groups: ["057", "009", "UN"], roadSpeedUnit: "mph", callingCodes: ["680"] }, geometry: { type: "MultiPolygon", coordinates: [[[[128.97621, 3.08804], [136.39296, 1.54187], [136.04605, 12.45908], [128.97621, 3.08804]]]] } },
-    { type: "Feature", properties: { iso1A2: "PY", iso1A3: "PRY", iso1N3: "600", wikidata: "Q733", nameEn: "Paraguay", groups: ["005", "419", "019", "UN"], callingCodes: ["595"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-58.16225, -20.16193], [-58.23216, -19.80058], [-59.06965, -19.29148], [-60.00638, -19.2981], [-61.73723, -19.63958], [-61.93912, -20.10053], [-62.26883, -20.55311], [-62.2757, -21.06657], [-62.64455, -22.25091], [-62.51761, -22.37684], [-62.22768, -22.55807], [-61.9756, -23.0507], [-61.0782, -23.62932], [-60.99754, -23.80934], [-60.28163, -24.04436], [-60.03367, -24.00701], [-59.45482, -24.34787], [-59.33886, -24.49935], [-58.33055, -24.97099], [-58.25492, -24.92528], [-57.80821, -25.13863], [-57.57431, -25.47269], [-57.87176, -25.93604], [-58.1188, -26.16704], [-58.3198, -26.83443], [-58.65321, -27.14028], [-58.59549, -27.29973], [-58.04205, -27.2387], [-56.85337, -27.5165], [-56.18313, -27.29851], [-55.89195, -27.3467], [-55.74475, -27.44485], [-55.59094, -27.32444], [-55.62322, -27.1941], [-55.39611, -26.97679], [-55.25243, -26.93808], [-55.16948, -26.96068], [-55.06351, -26.80195], [-55.00584, -26.78754], [-54.80868, -26.55669], [-54.70732, -26.45099], [-54.69333, -26.37705], [-54.67359, -25.98607], [-54.60664, -25.9691], [-54.62063, -25.91213], [-54.59398, -25.59224], [-54.59509, -25.53696], [-54.60196, -25.48397], [-54.62033, -25.46026], [-54.4423, -25.13381], [-54.28207, -24.07305], [-54.32807, -24.01865], [-54.6238, -23.83078], [-55.02691, -23.97317], [-55.0518, -23.98666], [-55.12292, -23.99669], [-55.41784, -23.9657], [-55.44117, -23.9185], [-55.43585, -23.87157], [-55.5555, -23.28237], [-55.52288, -23.2595], [-55.5446, -23.22811], [-55.63849, -22.95122], [-55.62493, -22.62765], [-55.68742, -22.58407], [-55.6986, -22.56268], [-55.72366, -22.5519], [-55.741, -22.52018], [-55.74941, -22.46436], [-55.8331, -22.29008], [-56.23206, -22.25347], [-56.45893, -22.08072], [-56.5212, -22.11556], [-56.6508, -22.28387], [-57.98625, -22.09157], [-57.94642, -21.73799], [-57.88239, -21.6868], [-57.93492, -21.65505], [-57.84536, -20.93155], [-58.16225, -20.16193]]]] } },
-    { type: "Feature", properties: { iso1A2: "QA", iso1A3: "QAT", iso1N3: "634", wikidata: "Q846", nameEn: "Qatar", groups: ["145", "142", "UN"], callingCodes: ["974"] }, geometry: { type: "MultiPolygon", coordinates: [[[[50.92992, 24.54396], [51.09638, 24.46907], [51.29972, 24.50747], [51.39468, 24.62785], [51.58834, 24.66608], [51.83108, 24.71675], [51.83682, 26.70231], [50.93865, 26.30758], [50.81266, 25.88946], [50.86149, 25.6965], [50.7801, 25.595], [50.80824, 25.54641], [50.57069, 25.57887], [50.8133, 24.74049], [50.92992, 24.54396]]]] } },
-    { type: "Feature", properties: { iso1A2: "RE", iso1A3: "REU", iso1N3: "638", wikidata: "Q17070", nameEn: "R\xE9union", country: "FR", groups: ["Q3320166", "EU", "014", "202", "002", "UN"], callingCodes: ["262"] }, geometry: { type: "MultiPolygon", coordinates: [[[[53.37984, -21.23941], [56.73473, -21.9174], [56.62373, -20.2711], [53.37984, -21.23941]]]] } },
-    { type: "Feature", properties: { iso1A2: "RO", iso1A3: "ROU", iso1N3: "642", wikidata: "Q218", nameEn: "Romania", groups: ["EU", "151", "150", "UN"], callingCodes: ["40"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.15622, 47.98538], [27.02985, 48.09083], [27.04118, 48.12522], [26.96119, 48.13003], [26.98042, 48.15752], [26.94265, 48.1969], [26.87708, 48.19919], [26.81161, 48.25049], [26.62823, 48.25804], [26.55202, 48.22445], [26.33504, 48.18418], [26.17711, 47.99246], [26.05901, 47.9897], [25.77723, 47.93919], [25.63878, 47.94924], [25.23778, 47.89403], [25.11144, 47.75203], [24.88896, 47.7234], [24.81893, 47.82031], [24.70632, 47.84428], [24.61994, 47.95062], [24.43578, 47.97131], [24.34926, 47.9244], [24.22566, 47.90231], [24.11281, 47.91487], [24.06466, 47.95317], [24.02999, 47.95087], [24.00801, 47.968], [23.98553, 47.96076], [23.96337, 47.96672], [23.94192, 47.94868], [23.89352, 47.94512], [23.8602, 47.9329], [23.80904, 47.98142], [23.75188, 47.99705], [23.66262, 47.98786], [23.63894, 48.00293], [23.5653, 48.00499], [23.52803, 48.01818], [23.4979, 47.96858], [23.33577, 48.0237], [23.27397, 48.08245], [23.15999, 48.12188], [23.1133, 48.08061], [23.08858, 48.00716], [23.0158, 47.99338], [22.92241, 48.02002], [22.94301, 47.96672], [22.89849, 47.95851], [22.77991, 47.87211], [22.76617, 47.8417], [22.67247, 47.7871], [22.46559, 47.76583], [22.41979, 47.7391], [22.31816, 47.76126], [22.00917, 47.50492], [22.03389, 47.42508], [22.01055, 47.37767], [21.94463, 47.38046], [21.78395, 47.11104], [21.648, 47.03902], [21.68645, 46.99595], [21.59581, 46.91628], [21.59307, 46.86935], [21.52028, 46.84118], [21.48935, 46.7577], [21.5151, 46.72147], [21.43926, 46.65109], [21.33214, 46.63035], [21.26929, 46.4993], [21.28061, 46.44941], [21.16872, 46.30118], [21.06572, 46.24897], [20.86797, 46.28884], [20.74574, 46.25467], [20.76085, 46.21002], [20.63863, 46.12728], [20.49718, 46.18721], [20.45377, 46.14405], [20.35573, 46.16629], [20.28324, 46.1438], [20.26068, 46.12332], [20.35862, 45.99356], [20.54818, 45.89939], [20.65645, 45.82801], [20.70069, 45.7493], [20.77416, 45.75601], [20.78446, 45.78522], [20.82364, 45.77738], [20.80361, 45.65875], [20.76798, 45.60969], [20.83321, 45.53567], [20.77217, 45.49788], [20.86026, 45.47295], [20.87948, 45.42743], [21.09894, 45.30144], [21.17612, 45.32566], [21.20392, 45.2677], [21.29398, 45.24148], [21.48278, 45.19557], [21.51299, 45.15345], [21.4505, 45.04294], [21.35855, 45.01941], [21.54938, 44.9327], [21.56328, 44.89502], [21.48202, 44.87199], [21.44013, 44.87613], [21.35643, 44.86364], [21.38802, 44.78133], [21.55007, 44.77304], [21.60019, 44.75208], [21.61942, 44.67059], [21.67504, 44.67107], [21.71692, 44.65349], [21.7795, 44.66165], [21.99364, 44.63395], [22.08016, 44.49844], [22.13234, 44.47444], [22.18315, 44.48179], [22.30844, 44.6619], [22.45301, 44.7194], [22.61917, 44.61489], [22.69196, 44.61587], [22.76749, 44.54446], [22.70981, 44.51852], [22.61368, 44.55719], [22.56493, 44.53419], [22.54021, 44.47836], [22.45436, 44.47258], [22.56012, 44.30712], [22.68166, 44.28206], [22.67173, 44.21564], [23.04988, 44.07694], [23.01674, 44.01946], [22.87873, 43.9844], [22.83753, 43.88055], [22.85314, 43.84452], [23.05288, 43.79494], [23.26772, 43.84843], [23.4507, 43.84936], [23.61687, 43.79289], [23.73978, 43.80627], [24.18149, 43.68218], [24.35364, 43.70211], [24.50264, 43.76314], [24.62281, 43.74082], [24.73542, 43.68523], [24.96682, 43.72693], [25.10718, 43.6831], [25.17144, 43.70261], [25.39528, 43.61866], [25.72792, 43.69263], [25.94911, 43.85745], [26.05584, 43.90925], [26.10115, 43.96908], [26.38764, 44.04356], [26.62712, 44.05698], [26.95141, 44.13555], [27.26845, 44.12602], [27.39757, 44.0141], [27.60834, 44.01206], [27.64542, 44.04958], [27.73468, 43.95326], [27.92008, 44.00761], [27.99558, 43.84193], [28.23293, 43.76], [29.24336, 43.70874], [30.04414, 45.08461], [29.69272, 45.19227], [29.65428, 45.25629], [29.68175, 45.26885], [29.59798, 45.38857], [29.42632, 45.44545], [29.24779, 45.43388], [28.96077, 45.33164], [28.94292, 45.28045], [28.81383, 45.3384], [28.78911, 45.24179], [28.71358, 45.22631], [28.5735, 45.24759], [28.34554, 45.32102], [28.28504, 45.43907], [28.21139, 45.46895], [28.18741, 45.47358], [28.08927, 45.6051], [28.16568, 45.6421], [28.13111, 45.92819], [28.08612, 46.01105], [28.13684, 46.18099], [28.10937, 46.22852], [28.19864, 46.31869], [28.18902, 46.35283], [28.25769, 46.43334], [28.22281, 46.50481], [28.24808, 46.64305], [28.12173, 46.82283], [28.09095, 46.97621], [27.81892, 47.1381], [27.73172, 47.29248], [27.68706, 47.28962], [27.60263, 47.32507], [27.55731, 47.46637], [27.47942, 47.48113], [27.3979, 47.59473], [27.32202, 47.64009], [27.25519, 47.71366], [27.29069, 47.73722], [27.1618, 47.92391], [27.15622, 47.98538]]]] } },
-    { type: "Feature", properties: { iso1A2: "RS", iso1A3: "SRB", iso1N3: "688", wikidata: "Q403", nameEn: "Serbia", groups: ["039", "150", "UN"], callingCodes: ["381"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.66007, 46.19005], [19.56113, 46.16824], [19.52473, 46.1171], [19.28826, 45.99694], [19.14543, 45.9998], [19.10388, 46.04015], [19.0791, 45.96458], [19.01284, 45.96529], [18.99712, 45.93537], [18.81394, 45.91329], [18.85783, 45.85493], [18.90305, 45.71863], [18.96691, 45.66731], [18.88776, 45.57253], [18.94562, 45.53712], [19.07471, 45.53086], [19.08364, 45.48804], [18.99918, 45.49333], [18.97446, 45.37528], [19.10774, 45.29547], [19.28208, 45.23813], [19.41941, 45.23475], [19.43589, 45.17137], [19.19144, 45.17863], [19.14063, 45.12972], [19.07952, 45.14668], [19.1011, 45.01191], [19.05205, 44.97692], [19.15573, 44.95409], [19.06853, 44.89915], [19.02871, 44.92541], [18.98957, 44.90645], [19.01994, 44.85493], [19.18183, 44.92055], [19.36722, 44.88164], [19.32543, 44.74058], [19.26388, 44.65412], [19.16699, 44.52197], [19.13369, 44.52521], [19.12278, 44.50132], [19.14837, 44.45253], [19.14681, 44.41463], [19.11785, 44.40313], [19.10749, 44.39421], [19.10704, 44.38249], [19.10365, 44.37795], [19.10298, 44.36924], [19.11865, 44.36712], [19.1083, 44.3558], [19.11547, 44.34218], [19.13556, 44.338], [19.13332, 44.31492], [19.16741, 44.28648], [19.18328, 44.28383], [19.20508, 44.2917], [19.23306, 44.26097], [19.26945, 44.26957], [19.32464, 44.27185], [19.34773, 44.23244], [19.3588, 44.18353], [19.40927, 44.16722], [19.43905, 44.13088], [19.47338, 44.15034], [19.48386, 44.14332], [19.47321, 44.1193], [19.51167, 44.08158], [19.55999, 44.06894], [19.57467, 44.04716], [19.61991, 44.05254], [19.61836, 44.01464], [19.56498, 43.99922], [19.52515, 43.95573], [19.38439, 43.96611], [19.24363, 44.01502], [19.23465, 43.98764], [19.3986, 43.79668], [19.5176, 43.71403], [19.50455, 43.58385], [19.42696, 43.57987], [19.41941, 43.54056], [19.36653, 43.60921], [19.33426, 43.58833], [19.2553, 43.5938], [19.24774, 43.53061], [19.22807, 43.5264], [19.22229, 43.47926], [19.44315, 43.38846], [19.48171, 43.32644], [19.52962, 43.31623], [19.54598, 43.25158], [19.62661, 43.2286], [19.64063, 43.19027], [19.76918, 43.16044], [19.79255, 43.11951], [19.92576, 43.08539], [19.96549, 43.11098], [19.98887, 43.0538], [20.04729, 43.02732], [20.05431, 42.99571], [20.12325, 42.96237], [20.14896, 42.99058], [20.16415, 42.97177], [20.34528, 42.90676], [20.35692, 42.8335], [20.40594, 42.84853], [20.43734, 42.83157], [20.53484, 42.8885], [20.48692, 42.93208], [20.59929, 43.01067], [20.64557, 43.00826], [20.69515, 43.09641], [20.59929, 43.20492], [20.68688, 43.21335], [20.73811, 43.25068], [20.82145, 43.26769], [20.88685, 43.21697], [20.83727, 43.17842], [20.96287, 43.12416], [21.00749, 43.13984], [21.05378, 43.10707], [21.08952, 43.13471], [21.14465, 43.11089], [21.16734, 42.99694], [21.2041, 43.02277], [21.23877, 43.00848], [21.23534, 42.95523], [21.2719, 42.8994], [21.32974, 42.90424], [21.36941, 42.87397], [21.44047, 42.87276], [21.39045, 42.74888], [21.47498, 42.74695], [21.59154, 42.72643], [21.58755, 42.70418], [21.6626, 42.67813], [21.75025, 42.70125], [21.79413, 42.65923], [21.75672, 42.62695], [21.7327, 42.55041], [21.70522, 42.54176], [21.7035, 42.51899], [21.62556, 42.45106], [21.64209, 42.41081], [21.62887, 42.37664], [21.59029, 42.38042], [21.57021, 42.3647], [21.53467, 42.36809], [21.5264, 42.33634], [21.56772, 42.30946], [21.58992, 42.25915], [21.70111, 42.23789], [21.77176, 42.2648], [21.84654, 42.3247], [21.91595, 42.30392], [21.94405, 42.34669], [22.02908, 42.29848], [22.16384, 42.32103], [22.29605, 42.37477], [22.29275, 42.34913], [22.34773, 42.31725], [22.45919, 42.33822], [22.47498, 42.3915], [22.51961, 42.3991], [22.55669, 42.50144], [22.43983, 42.56851], [22.4997, 42.74144], [22.43309, 42.82057], [22.54302, 42.87774], [22.74826, 42.88701], [22.78397, 42.98253], [22.89521, 43.03625], [22.98104, 43.11199], [23.00806, 43.19279], [22.89727, 43.22417], [22.82036, 43.33665], [22.53397, 43.47225], [22.47582, 43.6558], [22.41043, 43.69566], [22.35558, 43.81281], [22.41449, 44.00514], [22.61688, 44.06534], [22.61711, 44.16938], [22.67173, 44.21564], [22.68166, 44.28206], [22.56012, 44.30712], [22.45436, 44.47258], [22.54021, 44.47836], [22.56493, 44.53419], [22.61368, 44.55719], [22.70981, 44.51852], [22.76749, 44.54446], [22.69196, 44.61587], [22.61917, 44.61489], [22.45301, 44.7194], [22.30844, 44.6619], [22.18315, 44.48179], [22.13234, 44.47444], [22.08016, 44.49844], [21.99364, 44.63395], [21.7795, 44.66165], [21.71692, 44.65349], [21.67504, 44.67107], [21.61942, 44.67059], [21.60019, 44.75208], [21.55007, 44.77304], [21.38802, 44.78133], [21.35643, 44.86364], [21.44013, 44.87613], [21.48202, 44.87199], [21.56328, 44.89502], [21.54938, 44.9327], [21.35855, 45.01941], [21.4505, 45.04294], [21.51299, 45.15345], [21.48278, 45.19557], [21.29398, 45.24148], [21.20392, 45.2677], [21.17612, 45.32566], [21.09894, 45.30144], [20.87948, 45.42743], [20.86026, 45.47295], [20.77217, 45.49788], [20.83321, 45.53567], [20.76798, 45.60969], [20.80361, 45.65875], [20.82364, 45.77738], [20.78446, 45.78522], [20.77416, 45.75601], [20.70069, 45.7493], [20.65645, 45.82801], [20.54818, 45.89939], [20.35862, 45.99356], [20.26068, 46.12332], [20.09713, 46.17315], [20.03533, 46.14509], [20.01816, 46.17696], [19.93508, 46.17553], [19.81491, 46.1313], [19.66007, 46.19005]]]] } },
-    { type: "Feature", properties: { iso1A2: "RU", iso1A3: "RUS", iso1N3: "643", wikidata: "Q159", nameEn: "Russia" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "RW", iso1A3: "RWA", iso1N3: "646", wikidata: "Q1037", nameEn: "Rwanda", groups: ["014", "202", "002", "UN"], callingCodes: ["250"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.47194, -1.0555], [30.35212, -1.06896], [30.16369, -1.34303], [29.912, -1.48269], [29.82657, -1.31187], [29.59061, -1.39016], [29.53062, -1.40499], [29.45038, -1.5054], [29.36322, -1.50887], [29.24323, -1.66826], [29.24458, -1.69663], [29.11847, -1.90576], [29.17562, -2.12278], [29.105, -2.27043], [29.00051, -2.29001], [28.95642, -2.37321], [28.89601, -2.37321], [28.86826, -2.41888], [28.86846, -2.44866], [28.89132, -2.47557], [28.89342, -2.49017], [28.88846, -2.50493], [28.87497, -2.50887], [28.86209, -2.5231], [28.86193, -2.53185], [28.87943, -2.55165], [28.89288, -2.55848], [28.90226, -2.62385], [28.89793, -2.66111], [28.94346, -2.69124], [29.00357, -2.70596], [29.04081, -2.7416], [29.0562, -2.58632], [29.32234, -2.6483], [29.36805, -2.82933], [29.88237, -2.75105], [29.95911, -2.33348], [30.14034, -2.43626], [30.42933, -2.31064], [30.54501, -2.41404], [30.83915, -2.35795], [30.89303, -2.08223], [30.80802, -1.91477], [30.84079, -1.64652], [30.71974, -1.43244], [30.57123, -1.33264], [30.50889, -1.16412], [30.45116, -1.10641], [30.47194, -1.0555]]]] } },
-    { type: "Feature", properties: { iso1A2: "SA", iso1A3: "SAU", iso1N3: "682", wikidata: "Q851", nameEn: "Saudi Arabia", groups: ["145", "142", "UN"], callingCodes: ["966"] }, geometry: { type: "MultiPolygon", coordinates: [[[[40.01521, 32.05667], [39.29903, 32.23259], [38.99233, 31.99721], [36.99791, 31.50081], [37.99354, 30.49998], [37.66395, 30.33245], [37.4971, 29.99949], [36.75083, 29.86903], [36.50005, 29.49696], [36.07081, 29.18469], [34.8812, 29.36878], [34.4454, 27.91479], [37.8565, 22.00903], [39.63762, 18.37348], [40.99158, 15.81743], [42.15205, 16.40211], [42.76801, 16.40371], [42.94625, 16.39721], [42.94351, 16.49467], [42.97215, 16.51093], [43.11601, 16.53166], [43.15274, 16.67248], [43.22066, 16.65179], [43.21325, 16.74416], [43.25857, 16.75304], [43.26303, 16.79479], [43.24801, 16.80613], [43.22956, 16.80613], [43.22012, 16.83932], [43.18338, 16.84852], [43.1398, 16.90696], [43.19328, 16.94703], [43.1813, 16.98438], [43.18233, 17.02673], [43.23967, 17.03428], [43.17787, 17.14717], [43.20156, 17.25901], [43.32653, 17.31179], [43.22533, 17.38343], [43.29185, 17.53224], [43.43005, 17.56148], [43.70631, 17.35762], [44.50126, 17.47475], [46.31018, 17.20464], [46.76494, 17.29151], [47.00571, 16.94765], [47.48245, 17.10808], [47.58351, 17.50366], [48.19996, 18.20584], [49.04884, 18.59899], [52.00311, 19.00083], [54.99756, 20.00083], [55.66469, 21.99658], [55.2137, 22.71065], [55.13599, 22.63334], [52.56622, 22.94341], [51.59617, 24.12041], [51.58871, 24.27256], [51.41644, 24.39615], [51.58834, 24.66608], [51.39468, 24.62785], [51.29972, 24.50747], [51.09638, 24.46907], [50.92992, 24.54396], [50.8133, 24.74049], [50.57069, 25.57887], [50.302, 25.87592], [50.26923, 26.08243], [50.38162, 26.53976], [50.71771, 26.73086], [50.37726, 27.89227], [49.98877, 27.87827], [49.00421, 28.81495], [48.42991, 28.53628], [47.70561, 28.5221], [47.59863, 28.66798], [47.58376, 28.83382], [47.46202, 29.0014], [46.5527, 29.10283], [46.42415, 29.05947], [44.72255, 29.19736], [42.97796, 30.48295], [42.97601, 30.72204], [40.01521, 32.05667]]]] } },
-    { type: "Feature", properties: { iso1A2: "SB", iso1A3: "SLB", iso1N3: "090", wikidata: "Q685", nameEn: "Solomon Islands", groups: ["054", "009", "UN"], driveSide: "left", callingCodes: ["677"] }, geometry: { type: "MultiPolygon", coordinates: [[[[172.71443, -12.01327], [160.43769, -4.17974], [156.03296, -6.55528], [156.03993, -6.65703], [155.92557, -6.84664], [155.69784, -6.92661], [155.60735, -6.92266], [154.74815, -7.33315], [156.73836, -14.50464], [172.71443, -12.01327]]]] } },
-    { type: "Feature", properties: { iso1A2: "SC", iso1A3: "SYC", iso1N3: "690", wikidata: "Q1042", nameEn: "Seychelles", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["248"] }, geometry: { type: "MultiPolygon", coordinates: [[[[43.75112, -10.38913], [54.83239, -10.93575], [66.3222, 5.65313], [43.75112, -10.38913]]]] } },
-    { type: "Feature", properties: { iso1A2: "SD", iso1A3: "SDN", iso1N3: "729", wikidata: "Q1049", nameEn: "Sudan", groups: ["015", "002", "UN"], callingCodes: ["249"] }, geometry: { type: "MultiPolygon", coordinates: [[[[37.8565, 22.00903], [34.0765, 22.00501], [33.99686, 21.76784], [33.57251, 21.72406], [33.17563, 22.00405], [24.99885, 21.99535], [24.99794, 19.99661], [23.99715, 20.00038], [23.99539, 19.49944], [23.99997, 15.69575], [23.62785, 15.7804], [23.38812, 15.69649], [23.10792, 15.71297], [22.93201, 15.55107], [22.92579, 15.47007], [22.99584, 15.40105], [22.99584, 15.22989], [22.66115, 14.86308], [22.70474, 14.69149], [22.38562, 14.58907], [22.44944, 14.24986], [22.55997, 14.23024], [22.5553, 14.11704], [22.22995, 13.96754], [22.08674, 13.77863], [22.29689, 13.3731], [22.1599, 13.19281], [22.02914, 13.13976], [21.94819, 13.05637], [21.81432, 12.81362], [21.89371, 12.68001], [21.98711, 12.63292], [22.15679, 12.66634], [22.22684, 12.74682], [22.46345, 12.61925], [22.38873, 12.45514], [22.50548, 12.16769], [22.48369, 12.02766], [22.64092, 12.07485], [22.54907, 11.64372], [22.7997, 11.40424], [22.93124, 11.41645], [22.97249, 11.21955], [22.87758, 10.91915], [23.02221, 10.69235], [23.3128, 10.45214], [23.67164, 9.86923], [23.69155, 9.67566], [24.09319, 9.66572], [24.12744, 9.73784], [24.49389, 9.79962], [24.84653, 9.80643], [24.97739, 9.9081], [25.05688, 10.06776], [25.0918, 10.33718], [25.78141, 10.42599], [25.93163, 10.38159], [25.93241, 10.17941], [26.21338, 9.91545], [26.35815, 9.57946], [26.70685, 9.48735], [27.14427, 9.62858], [27.90704, 9.61323], [28.99983, 9.67155], [29.06988, 9.74826], [29.53844, 9.75133], [29.54, 10.07949], [29.94629, 10.29245], [30.00389, 10.28633], [30.53005, 9.95992], [30.82893, 9.71451], [30.84605, 9.7498], [31.28504, 9.75287], [31.77539, 10.28939], [31.99177, 10.65065], [32.46967, 11.04662], [32.39358, 11.18207], [32.39578, 11.70208], [32.10079, 11.95203], [32.73921, 11.95203], [32.73921, 12.22757], [33.25876, 12.22111], [33.13988, 11.43248], [33.26977, 10.83632], [33.24645, 10.77913], [33.52294, 10.64382], [33.66604, 10.44254], [33.80913, 10.32994], [33.90159, 10.17179], [33.96984, 10.15446], [33.99185, 9.99623], [33.96323, 9.80972], [33.9082, 9.762], [33.87958, 9.49937], [34.10229, 9.50238], [34.08717, 9.55243], [34.13186, 9.7492], [34.20484, 9.9033], [34.22718, 10.02506], [34.32102, 10.11599], [34.34783, 10.23914], [34.2823, 10.53508], [34.4372, 10.781], [34.59062, 10.89072], [34.77383, 10.74588], [34.77532, 10.69027], [34.86618, 10.74588], [34.86916, 10.78832], [34.97491, 10.86147], [34.97789, 10.91559], [34.93172, 10.95946], [35.01215, 11.19626], [34.95704, 11.24448], [35.09556, 11.56278], [35.05832, 11.71158], [35.11492, 11.85156], [35.24302, 11.91132], [35.70476, 12.67101], [36.01458, 12.72478], [36.14268, 12.70879], [36.16651, 12.88019], [36.13374, 12.92665], [36.24545, 13.36759], [36.38993, 13.56459], [36.48824, 13.83954], [36.44653, 13.95666], [36.54376, 14.25597], [36.44337, 15.14963], [36.54276, 15.23478], [36.69761, 15.75323], [36.76371, 15.80831], [36.92193, 16.23451], [36.99777, 17.07172], [37.42694, 17.04041], [37.50967, 17.32199], [38.13362, 17.53906], [38.37133, 17.66269], [38.45916, 17.87167], [38.57727, 17.98125], [39.63762, 18.37348], [37.8565, 22.00903]]]] } },
-    { type: "Feature", properties: { iso1A2: "SE", iso1A3: "SWE", iso1N3: "752", wikidata: "Q34", nameEn: "Sweden", groups: ["EU", "154", "150", "UN"], callingCodes: ["46"] }, geometry: { type: "MultiPolygon", coordinates: [[[[24.15791, 65.85385], [23.90497, 66.15802], [23.71339, 66.21299], [23.64982, 66.30603], [23.67591, 66.3862], [23.63776, 66.43568], [23.85959, 66.56434], [23.89488, 66.772], [23.98059, 66.79585], [23.98563, 66.84149], [23.56214, 67.17038], [23.58735, 67.20752], [23.54701, 67.25435], [23.75372, 67.29914], [23.75372, 67.43688], [23.39577, 67.46974], [23.54701, 67.59306], [23.45627, 67.85297], [23.65793, 67.9497], [23.40081, 68.05545], [23.26469, 68.15134], [23.15377, 68.14759], [23.10336, 68.26551], [22.73028, 68.40881], [22.00429, 68.50692], [21.03001, 68.88969], [20.90649, 68.89696], [20.85104, 68.93142], [20.91658, 68.96764], [20.78802, 69.03087], [20.55258, 69.06069], [20.0695, 69.04469], [20.28444, 68.93283], [20.33435, 68.80174], [20.22027, 68.67246], [19.95647, 68.55546], [20.22027, 68.48759], [19.93508, 68.35911], [18.97255, 68.52416], [18.63032, 68.50849], [18.39503, 68.58672], [18.1241, 68.53721], [18.13836, 68.20874], [17.90787, 67.96537], [17.30416, 68.11591], [16.7409, 67.91037], [16.38441, 67.52923], [16.12774, 67.52106], [16.09922, 67.4364], [16.39154, 67.21653], [16.35589, 67.06419], [15.37197, 66.48217], [15.49318, 66.28509], [15.05113, 66.15572], [14.53778, 66.12399], [14.50926, 65.31786], [13.64276, 64.58402], [14.11117, 64.46674], [14.16051, 64.18725], [13.98222, 64.00953], [13.23411, 64.09087], [12.74105, 64.02171], [12.14928, 63.59373], [12.19919, 63.47935], [11.98529, 63.27487], [12.19919, 63.00104], [12.07085, 62.6297], [12.29187, 62.25699], [12.14746, 61.7147], [12.40595, 61.57226], [12.57707, 61.56547], [12.86939, 61.35427], [12.69115, 61.06584], [12.2277, 61.02442], [12.59133, 60.50559], [12.52003, 60.13846], [12.36317, 59.99259], [12.15641, 59.8926], [11.87121, 59.86039], [11.92112, 59.69531], [11.69297, 59.59442], [11.8213, 59.24985], [11.65732, 58.90177], [11.45199, 58.89604], [11.4601, 58.99022], [11.34459, 59.11672], [11.15367, 59.07862], [11.08911, 58.98745], [10.64958, 58.89391], [10.40861, 58.38489], [12.16597, 56.60205], [12.07466, 56.29488], [12.65312, 56.04345], [12.6372, 55.91371], [12.88472, 55.63369], [12.60345, 55.42675], [12.84405, 55.13257], [14.28399, 55.1553], [14.89259, 55.5623], [15.79951, 55.54655], [19.64795, 57.06466], [19.84909, 57.57876], [20.5104, 59.15546], [19.08191, 60.19152], [19.23413, 60.61414], [20.15877, 63.06556], [24.14112, 65.39731], [24.15107, 65.81427], [24.14798, 65.83466], [24.15791, 65.85385]]]] } },
-    { type: "Feature", properties: { iso1A2: "SG", iso1A3: "SGP", iso1N3: "702", wikidata: "Q334", nameEn: "Singapore", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["65"] }, geometry: { type: "MultiPolygon", coordinates: [[[[104.00131, 1.42405], [103.93384, 1.42926], [103.89565, 1.42841], [103.86383, 1.46288], [103.81181, 1.47953], [103.76395, 1.45183], [103.74161, 1.4502], [103.7219, 1.46108], [103.67468, 1.43166], [103.62738, 1.35255], [103.56591, 1.19719], [103.66049, 1.18825], [103.74084, 1.12902], [104.03085, 1.26954], [104.12282, 1.27714], [104.08072, 1.35998], [104.09162, 1.39694], [104.08871, 1.42015], [104.07348, 1.43322], [104.04622, 1.44691], [104.02277, 1.4438], [104.00131, 1.42405]]]] } },
-    { type: "Feature", properties: { iso1A2: "SH", iso1A3: "SHN", iso1N3: "654", wikidata: "Q192184", nameEn: "Saint Helena, Ascension and Tristan da Cunha", country: "GB" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "SI", iso1A3: "SVN", iso1N3: "705", wikidata: "Q215", nameEn: "Slovenia", groups: ["EU", "039", "150", "UN"], callingCodes: ["386"] }, geometry: { type: "MultiPolygon", coordinates: [[[[16.50139, 46.56684], [16.39217, 46.63673], [16.38594, 46.6549], [16.41863, 46.66238], [16.42641, 46.69228], [16.37816, 46.69975], [16.30966, 46.7787], [16.31303, 46.79838], [16.3408, 46.80641], [16.34547, 46.83836], [16.2941, 46.87137], [16.2365, 46.87775], [16.21892, 46.86961], [16.15711, 46.85434], [16.14365, 46.8547], [16.10983, 46.867], [16.05786, 46.83927], [15.99054, 46.82772], [15.99126, 46.78199], [15.98432, 46.74991], [15.99769, 46.7266], [16.02808, 46.71094], [16.04347, 46.68694], [16.04036, 46.6549], [15.99988, 46.67947], [15.98512, 46.68463], [15.94864, 46.68769], [15.87691, 46.7211], [15.8162, 46.71897], [15.78518, 46.70712], [15.76771, 46.69863], [15.73823, 46.70011], [15.72279, 46.69548], [15.69523, 46.69823], [15.67411, 46.70735], [15.6543, 46.70616], [15.6543, 46.69228], [15.6365, 46.6894], [15.63255, 46.68069], [15.62317, 46.67947], [15.59826, 46.68908], [15.54533, 46.66985], [15.55333, 46.64988], [15.54431, 46.6312], [15.46906, 46.61321], [15.45514, 46.63697], [15.41235, 46.65556], [15.23711, 46.63994], [15.14215, 46.66131], [15.01451, 46.641], [14.98024, 46.6009], [14.96002, 46.63459], [14.92283, 46.60848], [14.87129, 46.61], [14.86419, 46.59411], [14.83549, 46.56614], [14.81836, 46.51046], [14.72185, 46.49974], [14.66892, 46.44936], [14.5942, 46.43434], [14.56463, 46.37208], [14.52176, 46.42617], [14.45877, 46.41717], [14.42608, 46.44614], [14.314, 46.43327], [14.28326, 46.44315], [14.15989, 46.43327], [14.12097, 46.47724], [14.04002, 46.49117], [14.00422, 46.48474], [13.89837, 46.52331], [13.7148, 46.5222], [13.68684, 46.43881], [13.59777, 46.44137], [13.5763, 46.42613], [13.5763, 46.40915], [13.47019, 46.3621], [13.43418, 46.35992], [13.44808, 46.33507], [13.37671, 46.29668], [13.42218, 46.20758], [13.47587, 46.22725], [13.56114, 46.2054], [13.56682, 46.18703], [13.64451, 46.18966], [13.66472, 46.17392], [13.64053, 46.13587], [13.57072, 46.09022], [13.50104, 46.05986], [13.49568, 46.04839], [13.50998, 46.04498], [13.49702, 46.01832], [13.47474, 46.00546], [13.50104, 45.98078], [13.52963, 45.96588], [13.56759, 45.96991], [13.58903, 45.99009], [13.62074, 45.98388], [13.63458, 45.98947], [13.64307, 45.98326], [13.6329, 45.94894], [13.63815, 45.93607], [13.61931, 45.91782], [13.60857, 45.89907], [13.59565, 45.89446], [13.58644, 45.88173], [13.57563, 45.8425], [13.58858, 45.83503], [13.59784, 45.8072], [13.66986, 45.79955], [13.8235, 45.7176], [13.83332, 45.70855], [13.83422, 45.68703], [13.87933, 45.65207], [13.9191, 45.6322], [13.8695, 45.60835], [13.86771, 45.59898], [13.84106, 45.58185], [13.78445, 45.5825], [13.74587, 45.59811], [13.7198, 45.59352], [13.6076, 45.64761], [13.45644, 45.59464], [13.56979, 45.4895], [13.62902, 45.45898], [13.67398, 45.4436], [13.7785, 45.46787], [13.81742, 45.43729], [13.88124, 45.42637], [13.90771, 45.45149], [13.97309, 45.45258], [13.99488, 45.47551], [13.96063, 45.50825], [14.00578, 45.52352], [14.07116, 45.48752], [14.20348, 45.46896], [14.22371, 45.50388], [14.24239, 45.50607], [14.26611, 45.48239], [14.27681, 45.4902], [14.32487, 45.47142], [14.36693, 45.48642], [14.49769, 45.54424], [14.5008, 45.60852], [14.53816, 45.6205], [14.57397, 45.67165], [14.60977, 45.66403], [14.59576, 45.62812], [14.69694, 45.57366], [14.68605, 45.53006], [14.71718, 45.53442], [14.80124, 45.49515], [14.81992, 45.45913], [14.90554, 45.47769], [14.92266, 45.52788], [15.02385, 45.48533], [15.05187, 45.49079], [15.16862, 45.42309], [15.27758, 45.46678], [15.33051, 45.45258], [15.38188, 45.48752], [15.30249, 45.53224], [15.29837, 45.5841], [15.27747, 45.60504], [15.31027, 45.6303], [15.34695, 45.63382], [15.34214, 45.64702], [15.38952, 45.63682], [15.4057, 45.64727], [15.34919, 45.71623], [15.30872, 45.69014], [15.25423, 45.72275], [15.40836, 45.79491], [15.47531, 45.79802], [15.47325, 45.8253], [15.52234, 45.82195], [15.57952, 45.84953], [15.64185, 45.82915], [15.66662, 45.84085], [15.70411, 45.8465], [15.68232, 45.86819], [15.68383, 45.88867], [15.67967, 45.90455], [15.70636, 45.92116], [15.70327, 46.00015], [15.71246, 46.01196], [15.72977, 46.04682], [15.62317, 46.09103], [15.6083, 46.11992], [15.59909, 46.14761], [15.64904, 46.19229], [15.6434, 46.21396], [15.67395, 46.22478], [15.75436, 46.21969], [15.75479, 46.20336], [15.78817, 46.21719], [15.79284, 46.25811], [15.97965, 46.30652], [16.07616, 46.3463], [16.07314, 46.36458], [16.05065, 46.3833], [16.05281, 46.39141], [16.14859, 46.40547], [16.18824, 46.38282], [16.30233, 46.37837], [16.30162, 46.40437], [16.27329, 46.41467], [16.27398, 46.42875], [16.25124, 46.48067], [16.23961, 46.49653], [16.26759, 46.50566], [16.26733, 46.51505], [16.29793, 46.5121], [16.37193, 46.55008], [16.38771, 46.53608], [16.44036, 46.5171], [16.5007, 46.49644], [16.52604, 46.47831], [16.59527, 46.47524], [16.52604, 46.5051], [16.52885, 46.53303], [16.50139, 46.56684]]]] } },
-    { type: "Feature", properties: { iso1A2: "SJ", iso1A3: "SJM", iso1N3: "744", wikidata: "Q842829", nameEn: "Svalbard and Jan Mayen", country: "NO" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "SK", iso1A3: "SVK", iso1N3: "703", wikidata: "Q214", nameEn: "Slovakia", groups: ["EU", "151", "150", "UN"], callingCodes: ["421"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.82237, 49.27806], [19.78581, 49.41701], [19.72127, 49.39288], [19.6375, 49.40897], [19.64162, 49.45184], [19.57845, 49.46077], [19.53313, 49.52856], [19.52626, 49.57311], [19.45348, 49.61583], [19.37795, 49.574], [19.36009, 49.53747], [19.25435, 49.53391], [19.18019, 49.41165], [18.9742, 49.39557], [18.97283, 49.49914], [18.94536, 49.52143], [18.84521, 49.51672], [18.74761, 49.492], [18.67757, 49.50895], [18.6144, 49.49824], [18.57183, 49.51162], [18.53063, 49.49022], [18.54848, 49.47059], [18.44686, 49.39467], [18.4084, 49.40003], [18.4139, 49.36517], [18.36446, 49.3267], [18.18456, 49.28909], [18.15022, 49.24518], [18.1104, 49.08624], [18.06885, 49.03157], [17.91814, 49.01784], [17.87831, 48.92679], [17.77944, 48.92318], [17.73126, 48.87885], [17.7094, 48.86721], [17.5295, 48.81117], [17.45671, 48.85004], [17.3853, 48.80936], [17.29054, 48.85546], [17.19355, 48.87602], [17.11202, 48.82925], [17.00215, 48.70887], [16.93955, 48.60371], [16.94611, 48.53614], [16.85204, 48.44968], [16.8497, 48.38321], [16.83588, 48.3844], [16.83317, 48.38138], [16.84243, 48.35258], [16.90903, 48.32519], [16.89461, 48.31332], [16.97701, 48.17385], [17.02919, 48.13996], [17.05735, 48.14179], [17.09168, 48.09366], [17.07039, 48.0317], [17.16001, 48.00636], [17.23699, 48.02094], [17.71215, 47.7548], [18.02938, 47.75665], [18.29305, 47.73541], [18.56496, 47.76588], [18.66521, 47.76772], [18.74074, 47.8157], [18.8506, 47.82308], [18.76821, 47.87469], [18.76134, 47.97499], [18.82176, 48.04206], [19.01952, 48.07052], [19.23924, 48.0595], [19.28182, 48.08336], [19.47957, 48.09437], [19.52489, 48.19791], [19.63338, 48.25006], [19.92452, 48.1283], [20.24312, 48.2784], [20.29943, 48.26104], [20.5215, 48.53336], [20.83248, 48.5824], [21.11516, 48.49546], [21.44063, 48.58456], [21.6068, 48.50365], [21.67134, 48.3989], [21.72525, 48.34628], [21.8279, 48.33321], [21.83339, 48.36242], [22.14689, 48.4005], [22.16023, 48.56548], [22.21379, 48.6218], [22.34151, 48.68893], [22.42934, 48.92857], [22.48296, 48.99172], [22.54338, 49.01424], [22.56155, 49.08865], [22.04427, 49.22136], [21.96385, 49.3437], [21.82927, 49.39467], [21.77983, 49.35443], [21.62328, 49.4447], [21.43376, 49.41433], [21.27858, 49.45988], [21.19756, 49.4054], [21.12477, 49.43666], [21.041, 49.41791], [21.09799, 49.37176], [20.98733, 49.30774], [20.9229, 49.29626], [20.77971, 49.35383], [20.72274, 49.41813], [20.61666, 49.41791], [20.5631, 49.375], [20.46422, 49.41612], [20.39939, 49.3896], [20.31728, 49.39914], [20.31453, 49.34817], [20.21977, 49.35265], [20.13738, 49.31685], [20.08238, 49.1813], [19.98494, 49.22904], [19.90529, 49.23532], [19.86409, 49.19316], [19.75286, 49.20751], [19.82237, 49.27806]]]] } },
-    { type: "Feature", properties: { iso1A2: "SL", iso1A3: "SLE", iso1N3: "694", wikidata: "Q1044", nameEn: "Sierra Leone", groups: ["011", "202", "002", "UN"], callingCodes: ["232"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-10.27575, 8.48711], [-10.37257, 8.48941], [-10.54891, 8.31174], [-10.63934, 8.35326], [-10.70565, 8.29235], [-10.61422, 8.5314], [-10.47707, 8.67669], [-10.56197, 8.81225], [-10.5783, 9.06386], [-10.74484, 9.07998], [-10.6534, 9.29919], [-11.2118, 10.00098], [-11.89624, 9.99763], [-11.91023, 9.93927], [-12.12634, 9.87203], [-12.24262, 9.92386], [-12.47254, 9.86834], [-12.76788, 9.3133], [-12.94095, 9.26335], [-13.08953, 9.0409], [-13.18586, 9.0925], [-13.29911, 9.04245], [-14.36218, 8.64107], [-12.15048, 6.15992], [-11.50429, 6.92704], [-11.4027, 6.97746], [-11.29417, 7.21576], [-10.60422, 7.7739], [-10.60492, 8.04072], [-10.57523, 8.04829], [-10.51554, 8.1393], [-10.45023, 8.15627], [-10.35227, 8.15223], [-10.29839, 8.21283], [-10.31635, 8.28554], [-10.30084, 8.30008], [-10.27575, 8.48711]]]] } },
-    { type: "Feature", properties: { iso1A2: "SM", iso1A3: "SMR", iso1N3: "674", wikidata: "Q238", nameEn: "San Marino", groups: ["039", "150", "UN"], callingCodes: ["378"] }, geometry: { type: "MultiPolygon", coordinates: [[[[12.45648, 43.89369], [12.48771, 43.89706], [12.49429, 43.90973], [12.49247, 43.91774], [12.49724, 43.92248], [12.50269, 43.92363], [12.50496, 43.93017], [12.51553, 43.94096], [12.51427, 43.94897], [12.50655, 43.95796], [12.50875, 43.96198], [12.50622, 43.97131], [12.51109, 43.97201], [12.51064, 43.98165], [12.5154, 43.98508], [12.51463, 43.99122], [12.50678, 43.99113], [12.49406, 43.98492], [12.47853, 43.98052], [12.46205, 43.97463], [12.44684, 43.96597], [12.43662, 43.95698], [12.42005, 43.9578], [12.41414, 43.95273], [12.40415, 43.95485], [12.40506, 43.94325], [12.41165, 43.93769], [12.41551, 43.92984], [12.40733, 43.92379], [12.41233, 43.90956], [12.40935, 43.9024], [12.41641, 43.89991], [12.44184, 43.90498], [12.45648, 43.89369]]]] } },
-    { type: "Feature", properties: { iso1A2: "SN", iso1A3: "SEN", iso1N3: "686", wikidata: "Q1041", nameEn: "Senegal", groups: ["011", "202", "002", "UN"], callingCodes: ["221"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-14.32144, 16.61495], [-15.00557, 16.64997], [-15.6509, 16.50315], [-16.27016, 16.51565], [-16.4429, 16.20605], [-16.44814, 16.09753], [-16.48967, 16.0496], [-16.50854, 16.09032], [-17.15288, 16.07139], [-18.35085, 14.63444], [-17.43598, 13.59273], [-15.47902, 13.58758], [-15.36504, 13.79313], [-14.93719, 13.80173], [-14.34721, 13.46578], [-13.8955, 13.59126], [-13.79409, 13.34472], [-14.36795, 13.23033], [-15.14917, 13.57989], [-15.26908, 13.37768], [-15.80478, 13.34832], [-15.80355, 13.16729], [-16.69343, 13.16791], [-16.74676, 13.06025], [-17.43966, 13.04579], [-17.4623, 11.92379], [-16.70562, 12.34803], [-16.38191, 12.36449], [-16.20591, 12.46157], [-15.67302, 12.42974], [-15.17582, 12.6847], [-13.70523, 12.68013], [-13.05296, 12.64003], [-13.06603, 12.49342], [-12.87336, 12.51892], [-12.35415, 12.32758], [-11.91331, 12.42008], [-11.46267, 12.44559], [-11.37536, 12.40788], [-11.39935, 12.97808], [-11.63025, 13.39174], [-11.83345, 13.33333], [-12.06897, 13.71049], [-11.93043, 13.84505], [-12.23936, 14.76324], [-13.11029, 15.52116], [-13.43135, 16.09022], [-13.80075, 16.13961], [-14.32144, 16.61495]]]] } },
-    { type: "Feature", properties: { iso1A2: "SO", iso1A3: "SOM", iso1N3: "706", wikidata: "Q1045", nameEn: "Somalia", groups: ["014", "202", "002", "UN"], callingCodes: ["252"] }, geometry: { type: "MultiPolygon", coordinates: [[[[51.12877, 12.56479], [43.90659, 12.3823], [42.95776, 10.98533], [42.69452, 10.62672], [42.87643, 10.18441], [43.0937, 9.90579], [43.23518, 9.84605], [43.32613, 9.59205], [44.19222, 8.93028], [46.99339, 7.9989], [47.92477, 8.00111], [47.97917, 8.00124], [44.98104, 4.91821], [44.02436, 4.9451], [43.40263, 4.79289], [43.04177, 4.57923], [42.97746, 4.44032], [42.84526, 4.28357], [42.55853, 4.20518], [42.07619, 4.17667], [41.89488, 3.97375], [41.31368, 3.14314], [40.98767, 2.82959], [41.00099, -0.83068], [41.56, -1.59812], [41.56362, -1.66375], [41.75542, -1.85308], [57.49095, 8.14549], [51.12877, 12.56479]]]] } },
-    { type: "Feature", properties: { iso1A2: "SR", iso1A3: "SUR", iso1N3: "740", wikidata: "Q730", nameEn: "Suriname", groups: ["005", "419", "019", "UN"], driveSide: "left", callingCodes: ["597"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-54.26916, 5.26909], [-54.01877, 5.52789], [-54.01074, 5.68785], [-53.7094, 6.2264], [-56.84822, 6.73257], [-57.31629, 5.33714], [-57.22536, 5.15605], [-57.37442, 5.0208], [-57.8699, 4.89394], [-58.0307, 3.95513], [-57.35891, 3.32121], [-56.70519, 2.02964], [-56.55439, 2.02003], [-56.47045, 1.95135], [-55.99278, 1.83137], [-55.89863, 1.89861], [-55.92159, 2.05236], [-56.13054, 2.27723], [-55.96292, 2.53188], [-55.71493, 2.40342], [-55.01919, 2.564], [-54.6084, 2.32856], [-54.42864, 2.42442], [-54.28534, 2.67798], [-53.9849, 3.58697], [-53.98914, 3.627], [-54.05128, 3.63557], [-54.19367, 3.84387], [-54.38444, 4.13222], [-54.4717, 4.91964], [-54.26916, 5.26909]]]] } },
-    { type: "Feature", properties: { iso1A2: "SS", iso1A3: "SSD", iso1N3: "728", wikidata: "Q958", nameEn: "South Sudan", groups: ["014", "202", "002", "UN"], callingCodes: ["211"] }, geometry: { type: "MultiPolygon", coordinates: [[[[34.10229, 9.50238], [33.87958, 9.49937], [33.9082, 9.762], [33.96323, 9.80972], [33.99185, 9.99623], [33.96984, 10.15446], [33.90159, 10.17179], [33.80913, 10.32994], [33.66604, 10.44254], [33.52294, 10.64382], [33.24645, 10.77913], [33.26977, 10.83632], [33.13988, 11.43248], [33.25876, 12.22111], [32.73921, 12.22757], [32.73921, 11.95203], [32.10079, 11.95203], [32.39578, 11.70208], [32.39358, 11.18207], [32.46967, 11.04662], [31.99177, 10.65065], [31.77539, 10.28939], [31.28504, 9.75287], [30.84605, 9.7498], [30.82893, 9.71451], [30.53005, 9.95992], [30.00389, 10.28633], [29.94629, 10.29245], [29.54, 10.07949], [29.53844, 9.75133], [29.06988, 9.74826], [28.99983, 9.67155], [27.90704, 9.61323], [27.14427, 9.62858], [26.70685, 9.48735], [26.35815, 9.57946], [26.21338, 9.91545], [25.93241, 10.17941], [25.93163, 10.38159], [25.78141, 10.42599], [25.0918, 10.33718], [25.05688, 10.06776], [24.97739, 9.9081], [24.84653, 9.80643], [24.49389, 9.79962], [24.12744, 9.73784], [24.09319, 9.66572], [23.69155, 9.67566], [23.62179, 9.53823], [23.64981, 9.44303], [23.64358, 9.28637], [23.56263, 9.19418], [23.4848, 9.16959], [23.44744, 8.99128], [23.59065, 8.99743], [23.51905, 8.71749], [24.25691, 8.69288], [24.13238, 8.36959], [24.35965, 8.26177], [24.85156, 8.16933], [24.98855, 7.96588], [25.25319, 7.8487], [25.29214, 7.66675], [25.20649, 7.61115], [25.20337, 7.50312], [25.35281, 7.42595], [25.37461, 7.33024], [25.90076, 7.09549], [26.38022, 6.63493], [26.32729, 6.36272], [26.58259, 6.1987], [26.51721, 6.09655], [27.22705, 5.71254], [27.22705, 5.62889], [27.28621, 5.56382], [27.23017, 5.37167], [27.26886, 5.25876], [27.44012, 5.07349], [27.56656, 4.89375], [27.65462, 4.89375], [27.76469, 4.79284], [27.79551, 4.59976], [28.20719, 4.35614], [28.6651, 4.42638], [28.8126, 4.48784], [29.03054, 4.48784], [29.22207, 4.34297], [29.43341, 4.50101], [29.49726, 4.7007], [29.82087, 4.56246], [29.79666, 4.37809], [30.06964, 4.13221], [30.1621, 4.10586], [30.22374, 3.93896], [30.27658, 3.95653], [30.47691, 3.83353], [30.55396, 3.84451], [30.57378, 3.74567], [30.56277, 3.62703], [30.78512, 3.67097], [30.80713, 3.60506], [30.85997, 3.5743], [30.85153, 3.48867], [30.97601, 3.693], [31.16666, 3.79853], [31.29476, 3.8015], [31.50478, 3.67814], [31.50776, 3.63652], [31.72075, 3.74354], [31.81459, 3.82083], [31.86821, 3.78664], [31.96205, 3.6499], [31.95907, 3.57408], [32.05187, 3.589], [32.08491, 3.56287], [32.08866, 3.53543], [32.19888, 3.50867], [32.20782, 3.6053], [32.41337, 3.748], [32.72021, 3.77327], [32.89746, 3.81339], [33.02852, 3.89296], [33.18356, 3.77812], [33.51264, 3.75068], [33.9873, 4.23316], [34.47601, 4.72162], [35.34151, 5.02364], [35.30992, 4.90402], [35.47843, 4.91872], [35.42366, 4.76969], [35.51424, 4.61643], [35.9419, 4.61933], [35.82118, 4.77382], [35.81968, 5.10757], [35.8576, 5.33413], [35.50792, 5.42431], [35.29938, 5.34042], [35.31188, 5.50106], [35.13058, 5.62118], [35.12611, 5.68937], [35.00546, 5.89387], [34.96227, 6.26415], [35.01738, 6.46991], [34.87736, 6.60161], [34.77459, 6.5957], [34.65096, 6.72589], [34.53776, 6.74808], [34.53925, 6.82794], [34.47669, 6.91076], [34.35753, 6.91963], [34.19369, 7.04382], [34.19369, 7.12807], [34.01495, 7.25664], [34.03878, 7.27437], [34.02984, 7.36449], [33.87642, 7.5491], [33.71407, 7.65983], [33.44745, 7.7543], [33.32531, 7.71297], [33.24637, 7.77939], [33.04944, 7.78989], [33.0006, 7.90333], [33.08401, 8.05822], [33.18083, 8.13047], [33.1853, 8.29264], [33.19721, 8.40317], [33.3119, 8.45474], [33.54575, 8.47094], [33.66938, 8.44442], [33.71407, 8.3678], [33.87195, 8.41938], [33.89579, 8.4842], [34.01346, 8.50041], [34.14453, 8.60204], [34.14304, 9.04654], [34.10229, 9.50238]]]] } },
-    { type: "Feature", properties: { iso1A2: "ST", iso1A3: "STP", iso1N3: "678", wikidata: "Q1039", nameEn: "S\xE3o Tom\xE9 and Principe", groups: ["017", "202", "002", "UN"], callingCodes: ["239"] }, geometry: { type: "MultiPolygon", coordinates: [[[[4.34149, 1.91417], [6.6507, -0.28606], [7.9035, 1.92304], [4.34149, 1.91417]]]] } },
-    { type: "Feature", properties: { iso1A2: "SV", iso1A3: "SLV", iso1N3: "222", wikidata: "Q792", nameEn: "El Salvador", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["503"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-89.34776, 14.43013], [-89.39028, 14.44561], [-89.57441, 14.41637], [-89.58814, 14.33165], [-89.50614, 14.26084], [-89.52397, 14.22628], [-89.61844, 14.21937], [-89.70756, 14.1537], [-89.75569, 14.07073], [-89.73251, 14.04133], [-89.76103, 14.02923], [-89.81807, 14.07073], [-89.88937, 14.0396], [-90.10505, 13.85104], [-90.11344, 13.73679], [-90.55276, 12.8866], [-88.11443, 12.63306], [-87.7346, 13.13228], [-87.55124, 13.12523], [-87.69751, 13.25228], [-87.73714, 13.32715], [-87.80177, 13.35689], [-87.84675, 13.41078], [-87.83467, 13.44655], [-87.77354, 13.45767], [-87.73841, 13.44169], [-87.72115, 13.46083], [-87.71657, 13.50577], [-87.78148, 13.52906], [-87.73106, 13.75443], [-87.68821, 13.80829], [-87.7966, 13.91353], [-88.00331, 13.86948], [-88.07641, 13.98447], [-88.23018, 13.99915], [-88.25791, 13.91108], [-88.48982, 13.86458], [-88.49738, 13.97224], [-88.70661, 14.04317], [-88.73182, 14.10919], [-88.815, 14.11652], [-88.85785, 14.17763], [-88.94608, 14.20207], [-89.04187, 14.33644], [-89.34776, 14.43013]]]] } },
-    { type: "Feature", properties: { iso1A2: "SX", iso1A3: "SXM", iso1N3: "534", wikidata: "Q26273", nameEn: "Sint Maarten", aliases: ["NL-SX"], country: "NL", groups: ["Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["1 721"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.33064, 17.9615], [-63.1055, 17.86651], [-62.93924, 18.02904], [-63.02323, 18.05757], [-63.04039, 18.05619], [-63.0579, 18.06614], [-63.07759, 18.04943], [-63.09686, 18.04608], [-63.11042, 18.05339], [-63.13502, 18.05445], [-63.33064, 17.9615]]]] } },
-    { type: "Feature", properties: { iso1A2: "SY", iso1A3: "SYR", iso1N3: "760", wikidata: "Q858", nameEn: "Syria", groups: ["145", "142", "UN"], callingCodes: ["963"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.23683, 37.2863], [42.21548, 37.28026], [42.20454, 37.28715], [42.22381, 37.30238], [42.22257, 37.31395], [42.2112, 37.32491], [42.19301, 37.31323], [42.18225, 37.28569], [42.00894, 37.17209], [41.515, 37.08084], [41.21937, 37.07665], [40.90856, 37.13147], [40.69136, 37.0996], [39.81589, 36.75538], [39.21538, 36.66834], [39.03217, 36.70911], [38.74042, 36.70629], [38.55908, 36.84429], [38.38859, 36.90064], [38.21064, 36.91842], [37.81974, 36.76055], [37.68048, 36.75065], [37.49103, 36.66904], [37.47253, 36.63243], [37.21988, 36.6736], [37.16177, 36.66069], [37.10894, 36.6704], [37.08279, 36.63495], [37.02088, 36.66422], [37.01647, 36.69512], [37.04619, 36.71101], [37.04399, 36.73483], [36.99886, 36.74012], [36.99557, 36.75997], [36.66727, 36.82901], [36.61581, 36.74629], [36.62681, 36.71189], [36.57398, 36.65186], [36.58829, 36.58295], [36.54206, 36.49539], [36.6081, 36.33772], [36.65653, 36.33861], [36.68672, 36.23677], [36.6125, 36.22592], [36.50463, 36.2419], [36.4617, 36.20461], [36.39206, 36.22088], [36.37474, 36.01163], [36.33956, 35.98687], [36.30099, 36.00985], [36.28338, 36.00273], [36.29769, 35.96086], [36.27678, 35.94839], [36.25366, 35.96264], [36.19973, 35.95195], [36.17441, 35.92076], [36.1623, 35.80925], [36.14029, 35.81015], [36.13919, 35.83692], [36.11827, 35.85923], [35.99829, 35.88242], [36.01844, 35.92403], [36.00514, 35.94113], [35.98499, 35.94107], [35.931, 35.92109], [35.51152, 36.10954], [35.48515, 34.70851], [35.97386, 34.63322], [35.98718, 34.64977], [36.29165, 34.62991], [36.32399, 34.69334], [36.35135, 34.68516], [36.35384, 34.65447], [36.42941, 34.62505], [36.46003, 34.6378], [36.45299, 34.59438], [36.41429, 34.61175], [36.39846, 34.55672], [36.3369, 34.52629], [36.34745, 34.5002], [36.4442, 34.50165], [36.46179, 34.46541], [36.55853, 34.41609], [36.53039, 34.3798], [36.56556, 34.31881], [36.60778, 34.31009], [36.58667, 34.27667], [36.59195, 34.2316], [36.62537, 34.20251], [36.5128, 34.09916], [36.50576, 34.05982], [36.41078, 34.05253], [36.28589, 33.91981], [36.38263, 33.86579], [36.3967, 33.83365], [36.14517, 33.85118], [36.06778, 33.82927], [35.9341, 33.6596], [36.05723, 33.57904], [35.94465, 33.52774], [35.94816, 33.47886], [35.88668, 33.43183], [35.82577, 33.40479], [35.81324, 33.36354], [35.77477, 33.33609], [35.813, 33.3172], [35.77513, 33.27342], [35.81295, 33.24841], [35.81647, 33.2028], [35.83846, 33.19397], [35.84285, 33.16673], [35.81911, 33.1336], [35.81911, 33.11077], [35.84802, 33.1031], [35.87188, 32.98028], [35.89298, 32.9456], [35.87012, 32.91976], [35.84021, 32.8725], [35.83758, 32.82817], [35.78745, 32.77938], [35.75983, 32.74803], [35.88405, 32.71321], [35.93307, 32.71966], [35.96633, 32.66237], [36.02239, 32.65911], [36.08074, 32.51463], [36.20379, 32.52751], [36.20875, 32.49529], [36.23948, 32.50108], [36.40959, 32.37908], [36.83946, 32.31293], [38.79171, 33.37328], [40.64314, 34.31604], [40.97676, 34.39788], [41.12388, 34.65742], [41.2345, 34.80049], [41.21654, 35.1508], [41.26569, 35.42708], [41.38184, 35.62502], [41.37027, 35.84095], [41.2564, 36.06012], [41.28864, 36.35368], [41.40058, 36.52502], [41.81736, 36.58782], [42.36697, 37.0627], [42.35724, 37.10998], [42.32313, 37.17814], [42.34735, 37.22548], [42.2824, 37.2798], [42.26039, 37.27017], [42.23683, 37.2863]]]] } },
-    { type: "Feature", properties: { iso1A2: "SZ", iso1A3: "SWZ", iso1N3: "748", wikidata: "Q1050", nameEn: "Eswatini", aliases: ["Swaziland"], groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["268"] }, geometry: { type: "MultiPolygon", coordinates: [[[[31.86881, -25.99973], [31.4175, -25.71886], [31.31237, -25.7431], [31.13073, -25.91558], [30.95819, -26.26303], [30.78927, -26.48271], [30.81101, -26.84722], [30.88826, -26.79622], [30.97757, -26.92706], [30.96088, -27.0245], [31.15027, -27.20151], [31.49834, -27.31549], [31.97592, -27.31675], [31.97463, -27.11057], [32.00893, -26.8096], [32.09664, -26.80721], [32.13315, -26.84345], [32.13409, -26.5317], [32.07352, -26.40185], [32.10435, -26.15656], [32.08599, -26.00978], [32.00916, -25.999], [31.974, -25.95387], [31.86881, -25.99973]]]] } },
-    { type: "Feature", properties: { iso1A2: "TA", iso1A3: "TAA", wikidata: "Q220982", nameEn: "Tristan da Cunha", aliases: ["SH-TA"], country: "GB", groups: ["SH", "BOTS", "011", "202", "002", "UN"], isoStatus: "excRes", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["290 8", "44 20"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-13.38232, -34.07258], [-16.67337, -41.9188], [-5.88482, -41.4829], [-13.38232, -34.07258]]]] } },
-    { type: "Feature", properties: { iso1A2: "TC", iso1A3: "TCA", iso1N3: "796", wikidata: "Q18221", nameEn: "Turks and Caicos Islands", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 649"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.70065, 25.7637], [-72.98446, 20.4801], [-69.80718, 21.35956], [-71.70065, 25.7637]]]] } },
-    { type: "Feature", properties: { iso1A2: "TD", iso1A3: "TCD", iso1N3: "148", wikidata: "Q657", nameEn: "Chad", groups: ["017", "202", "002", "UN"], callingCodes: ["235"] }, geometry: { type: "MultiPolygon", coordinates: [[[[23.99539, 19.49944], [15.99566, 23.49639], [14.99751, 23.00539], [15.19692, 21.99339], [15.20213, 21.49365], [15.28332, 21.44557], [15.62515, 20.95395], [15.57248, 20.92138], [15.55382, 20.86507], [15.56004, 20.79488], [15.59841, 20.74039], [15.6721, 20.70069], [15.99632, 20.35364], [15.75098, 19.93002], [15.6032, 18.77402], [15.50373, 16.89649], [14.37425, 15.72591], [13.86301, 15.04043], [13.78991, 14.87519], [13.809, 14.72915], [13.67878, 14.64013], [13.68573, 14.55276], [13.48259, 14.46704], [13.47559, 14.40881], [13.6302, 13.71094], [14.08251, 13.0797], [14.46881, 13.08259], [14.56101, 12.91036], [14.55058, 12.78256], [14.83314, 12.62963], [14.90827, 12.3269], [14.89019, 12.16593], [14.96952, 12.0925], [15.00146, 12.1223], [15.0349, 12.10698], [15.05786, 12.0608], [15.04808, 11.8731], [15.11579, 11.79313], [15.06595, 11.71126], [15.13149, 11.5537], [15.0585, 11.40481], [15.10021, 11.04101], [15.04957, 11.02347], [15.09127, 10.87431], [15.06737, 10.80921], [15.15532, 10.62846], [15.14936, 10.53915], [15.23724, 10.47764], [15.30874, 10.31063], [15.50535, 10.1098], [15.68761, 9.99344], [15.41408, 9.92876], [15.24618, 9.99246], [15.14043, 9.99246], [15.05999, 9.94845], [14.95722, 9.97926], [14.80082, 9.93818], [14.4673, 10.00264], [14.20411, 10.00055], [14.1317, 9.82413], [14.01793, 9.73169], [13.97544, 9.6365], [14.37094, 9.2954], [14.35707, 9.19611], [14.83566, 8.80557], [15.09484, 8.65982], [15.20426, 8.50892], [15.50743, 7.79302], [15.59272, 7.7696], [15.56964, 7.58936], [15.49743, 7.52179], [15.73118, 7.52006], [15.79942, 7.44149], [16.40703, 7.68809], [16.41583, 7.77971], [16.58315, 7.88657], [16.59415, 7.76444], [16.658, 7.75353], [16.6668, 7.67281], [16.8143, 7.53971], [17.67288, 7.98905], [17.93926, 7.95853], [18.02731, 8.01085], [18.6085, 8.05009], [18.64153, 8.08714], [18.62612, 8.14163], [18.67455, 8.22226], [18.79783, 8.25929], [19.11044, 8.68172], [18.86388, 8.87971], [19.06421, 9.00367], [20.36748, 9.11019], [20.82979, 9.44696], [21.26348, 9.97642], [21.34934, 9.95907], [21.52766, 10.2105], [21.63553, 10.217], [21.71479, 10.29932], [21.72139, 10.64136], [22.45889, 11.00246], [22.87758, 10.91915], [22.97249, 11.21955], [22.93124, 11.41645], [22.7997, 11.40424], [22.54907, 11.64372], [22.64092, 12.07485], [22.48369, 12.02766], [22.50548, 12.16769], [22.38873, 12.45514], [22.46345, 12.61925], [22.22684, 12.74682], [22.15679, 12.66634], [21.98711, 12.63292], [21.89371, 12.68001], [21.81432, 12.81362], [21.94819, 13.05637], [22.02914, 13.13976], [22.1599, 13.19281], [22.29689, 13.3731], [22.08674, 13.77863], [22.22995, 13.96754], [22.5553, 14.11704], [22.55997, 14.23024], [22.44944, 14.24986], [22.38562, 14.58907], [22.70474, 14.69149], [22.66115, 14.86308], [22.99584, 15.22989], [22.99584, 15.40105], [22.92579, 15.47007], [22.93201, 15.55107], [23.10792, 15.71297], [23.38812, 15.69649], [23.62785, 15.7804], [23.99997, 15.69575], [23.99539, 19.49944]]]] } },
-    { type: "Feature", properties: { iso1A2: "TF", iso1A3: "ATF", iso1N3: "260", wikidata: "Q129003", nameEn: "French Southern Territories", country: "FR", groups: ["EU", "UN"] }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "TG", iso1A3: "TGO", iso1N3: "768", wikidata: "Q945", nameEn: "Togo", groups: ["011", "202", "002", "UN"], callingCodes: ["228"] }, geometry: { type: "MultiPolygon", coordinates: [[[[0.50388, 11.01011], [-0.13493, 11.14075], [-0.14462, 11.10811], [-0.05733, 11.08628], [-0.0275, 11.11202], [-514e-5, 11.10763], [342e-5, 11.08317], [0.02395, 11.06229], [0.03355, 10.9807], [-63e-4, 10.96417], [-908e-5, 10.91644], [-0.02685, 10.8783], [-0.0228, 10.81916], [-0.07183, 10.76794], [-0.07327, 10.71845], [-0.09141, 10.7147], [-0.05945, 10.63458], [0.12886, 10.53149], [0.18846, 10.4096], [0.29453, 10.41546], [0.33028, 10.30408], [0.39584, 10.31112], [0.35293, 10.09412], [0.41371, 10.06361], [0.41252, 10.02018], [0.36366, 10.03309], [0.32075, 9.72781], [0.34816, 9.71607], [0.34816, 9.66907], [0.32313, 9.6491], [0.28261, 9.69022], [0.26712, 9.66437], [0.29334, 9.59387], [0.36008, 9.6256], [0.38153, 9.58682], [0.23851, 9.57389], [0.2409, 9.52335], [0.30406, 9.521], [0.31241, 9.50337], [0.2254, 9.47869], [0.25758, 9.42696], [0.33148, 9.44812], [0.36485, 9.49749], [0.49118, 9.48339], [0.56388, 9.40697], [0.45424, 9.04581], [0.52455, 8.87746], [0.37319, 8.75262], [0.47211, 8.59945], [0.64731, 8.48866], [0.73432, 8.29529], [0.63897, 8.25873], [0.5913, 8.19622], [0.61156, 8.18324], [0.6056, 8.13959], [0.58891, 8.12779], [0.62943, 7.85751], [0.58295, 7.62368], [0.51979, 7.58706], [0.52455, 7.45354], [0.57223, 7.39326], [0.62943, 7.41099], [0.65327, 7.31643], [0.59606, 7.01252], [0.52217, 6.9723], [0.52098, 6.94391], [0.56508, 6.92971], [0.52853, 6.82921], [0.57406, 6.80348], [0.58176, 6.76049], [0.6497, 6.73682], [0.63659, 6.63857], [0.74862, 6.56517], [0.71048, 6.53083], [0.89283, 6.33779], [0.99652, 6.33779], [1.03108, 6.24064], [1.05969, 6.22998], [1.09187, 6.17074], [1.19966, 6.17069], [1.19771, 6.11522], [1.27574, 5.93551], [1.67336, 6.02702], [1.62913, 6.24075], [1.79826, 6.28221], [1.76906, 6.43189], [1.58105, 6.68619], [1.61812, 6.74843], [1.55877, 6.99737], [1.64249, 6.99562], [1.61838, 9.0527], [1.5649, 9.16941], [1.41746, 9.3226], [1.33675, 9.54765], [1.36624, 9.5951], [1.35507, 9.99525], [0.77666, 10.37665], [0.80358, 10.71459], [0.8804, 10.803], [0.91245, 10.99597], [0.66104, 10.99964], [0.4958, 10.93269], [0.50521, 10.98035], [0.48852, 10.98561], [0.50388, 11.01011]]]] } },
-    { type: "Feature", properties: { iso1A2: "TH", iso1A3: "THA", iso1N3: "764", wikidata: "Q869", nameEn: "Thailand", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["66"] }, geometry: { type: "MultiPolygon", coordinates: [[[[100.08404, 20.36626], [99.95721, 20.46301], [99.91616, 20.44986], [99.90499, 20.4487], [99.89692, 20.44789], [99.89301, 20.44311], [99.89168, 20.44548], [99.88451, 20.44596], [99.88211, 20.44488], [99.86383, 20.44371], [99.81096, 20.33687], [99.68255, 20.32077], [99.46008, 20.39673], [99.46077, 20.36198], [99.5569, 20.20676], [99.52943, 20.14811], [99.416, 20.08614], [99.20328, 20.12877], [99.0735, 20.10298], [98.98679, 19.7419], [98.83661, 19.80931], [98.56065, 19.67807], [98.51182, 19.71303], [98.24884, 19.67876], [98.13829, 19.78541], [98.03314, 19.80941], [98.04364, 19.65755], [97.84715, 19.55782], [97.88423, 19.5041], [97.78769, 19.39429], [97.84186, 19.29526], [97.78606, 19.26769], [97.84024, 19.22217], [97.83479, 19.09972], [97.73797, 19.04261], [97.73654, 18.9812], [97.66487, 18.9371], [97.73836, 18.88478], [97.76752, 18.58097], [97.5258, 18.4939], [97.36444, 18.57138], [97.34522, 18.54596], [97.50383, 18.26844], [97.56219, 18.33885], [97.64116, 18.29778], [97.60841, 18.23846], [97.73723, 17.97912], [97.66794, 17.88005], [97.76407, 17.71595], [97.91829, 17.54504], [98.11185, 17.36829], [98.10439, 17.33847], [98.34566, 17.04822], [98.39441, 17.06266], [98.52624, 16.89979], [98.49603, 16.8446], [98.53833, 16.81934], [98.46994, 16.73613], [98.50253, 16.7139], [98.49713, 16.69022], [98.51043, 16.70107], [98.51579, 16.69433], [98.51472, 16.68521], [98.51833, 16.676], [98.51113, 16.64503], [98.5695, 16.62826], [98.57912, 16.55983], [98.63817, 16.47424], [98.68074, 16.27068], [98.84485, 16.42354], [98.92656, 16.36425], [98.8376, 16.11706], [98.69585, 16.13353], [98.57019, 16.04578], [98.59853, 15.87197], [98.541, 15.65406], [98.58598, 15.46821], [98.56027, 15.33471], [98.4866, 15.39154], [98.39351, 15.34177], [98.41906, 15.27103], [98.40522, 15.25268], [98.30446, 15.30667], [98.22, 15.21327], [98.18821, 15.13125], [98.24874, 14.83013], [98.56762, 14.37701], [98.97356, 14.04868], [99.16695, 13.72621], [99.20617, 13.20575], [99.12225, 13.19847], [99.10646, 13.05804], [99.18748, 12.9898], [99.18905, 12.84799], [99.29254, 12.68921], [99.409, 12.60603], [99.47519, 12.1353], [99.56445, 12.14805], [99.53424, 12.02317], [99.64891, 11.82699], [99.64108, 11.78948], [99.5672, 11.62732], [99.47598, 11.62434], [99.39485, 11.3925], [99.31573, 11.32081], [99.32756, 11.28545], [99.06938, 10.94857], [99.02337, 10.97217], [98.99701, 10.92962], [99.0069, 10.85485], [98.86819, 10.78336], [98.78511, 10.68351], [98.77275, 10.62548], [98.81944, 10.52761], [98.7391, 10.31488], [98.55174, 9.92804], [98.52291, 9.92389], [98.47298, 9.95782], [98.33094, 9.91973], [98.12555, 9.44056], [97.63455, 9.60854], [97.19814, 8.18901], [99.31854, 5.99868], [99.50117, 6.44501], [99.91873, 6.50233], [100.0756, 6.4045], [100.12, 6.42105], [100.19511, 6.72559], [100.29651, 6.68439], [100.30828, 6.66462], [100.31618, 6.66781], [100.31884, 6.66423], [100.32671, 6.66526], [100.32607, 6.65933], [100.31929, 6.65413], [100.35413, 6.54932], [100.41152, 6.52299], [100.41791, 6.5189], [100.42351, 6.51762], [100.43027, 6.52389], [100.66986, 6.45086], [100.74361, 6.50811], [100.74822, 6.46231], [100.81045, 6.45086], [100.85884, 6.24929], [101.10313, 6.25617], [101.12618, 6.19431], [101.06165, 6.14161], [101.12388, 6.11411], [101.087, 5.9193], [101.02708, 5.91013], [100.98815, 5.79464], [101.14062, 5.61613], [101.25755, 5.71065], [101.25524, 5.78633], [101.58019, 5.93534], [101.69773, 5.75881], [101.75074, 5.79091], [101.80144, 5.74505], [101.89188, 5.8386], [101.91776, 5.84269], [101.92819, 5.85511], [101.94712, 5.98421], [101.9714, 6.00575], [101.97114, 6.01992], [101.99209, 6.04075], [102.01835, 6.05407], [102.09182, 6.14161], [102.07732, 6.193], [102.08127, 6.22679], [102.09086, 6.23546], [102.46318, 7.22462], [102.47649, 9.66162], [102.52395, 11.25257], [102.91449, 11.65512], [102.90973, 11.75613], [102.83957, 11.8519], [102.78427, 11.98746], [102.77026, 12.06815], [102.70176, 12.1686], [102.73134, 12.37091], [102.78116, 12.40284], [102.7796, 12.43781], [102.57567, 12.65358], [102.51963, 12.66117], [102.4994, 12.71736], [102.53053, 12.77506], [102.49335, 12.92711], [102.48694, 12.97537], [102.52275, 12.99813], [102.46011, 13.08057], [102.43422, 13.09061], [102.36146, 13.26006], [102.36001, 13.31142], [102.34611, 13.35618], [102.35692, 13.38274], [102.35563, 13.47307], [102.361, 13.50551], [102.33828, 13.55613], [102.36859, 13.57488], [102.44601, 13.5637], [102.5358, 13.56933], [102.57573, 13.60461], [102.62483, 13.60883], [102.58635, 13.6286], [102.5481, 13.6589], [102.56848, 13.69366], [102.72727, 13.77806], [102.77864, 13.93374], [102.91251, 14.01531], [102.93275, 14.19044], [103.16469, 14.33075], [103.39353, 14.35639], [103.53518, 14.42575], [103.71109, 14.4348], [103.70175, 14.38052], [103.93836, 14.3398], [104.27616, 14.39861], [104.55014, 14.36091], [104.69335, 14.42726], [104.97667, 14.38806], [105.02804, 14.23722], [105.08408, 14.20402], [105.14012, 14.23873], [105.17748, 14.34432], [105.20894, 14.34967], [105.43783, 14.43865], [105.53864, 14.55731], [105.5121, 14.80802], [105.61162, 15.00037], [105.46661, 15.13132], [105.58043, 15.32724], [105.50662, 15.32054], [105.4692, 15.33709], [105.47635, 15.3796], [105.58191, 15.41031], [105.60446, 15.53301], [105.61756, 15.68792], [105.46573, 15.74742], [105.42285, 15.76971], [105.37959, 15.84074], [105.34115, 15.92737], [105.38508, 15.987], [105.42001, 16.00657], [105.06204, 16.09792], [105.00262, 16.25627], [104.88057, 16.37311], [104.73349, 16.565], [104.76099, 16.69302], [104.7397, 16.81005], [104.76442, 16.84752], [104.7373, 16.91125], [104.73712, 17.01404], [104.80716, 17.19025], [104.80061, 17.39367], [104.69867, 17.53038], [104.45404, 17.66788], [104.35432, 17.82871], [104.2757, 17.86139], [104.21776, 17.99335], [104.10927, 18.10826], [104.06533, 18.21656], [103.97725, 18.33631], [103.93916, 18.33914], [103.85642, 18.28666], [103.82449, 18.33979], [103.699, 18.34125], [103.60957, 18.40528], [103.47773, 18.42841], [103.41044, 18.4486], [103.30977, 18.4341], [103.24779, 18.37807], [103.23818, 18.34875], [103.29757, 18.30475], [103.17093, 18.2618], [103.14994, 18.23172], [103.1493, 18.17799], [103.07343, 18.12351], [103.07823, 18.03833], [103.0566, 18.00144], [103.01998, 17.97095], [102.9912, 17.9949], [102.95812, 18.0054], [102.86323, 17.97531], [102.81988, 17.94233], [102.79044, 17.93612], [102.75954, 17.89561], [102.68538, 17.86653], [102.67543, 17.84529], [102.69946, 17.81686], [102.68194, 17.80151], [102.59485, 17.83537], [102.5896, 17.84889], [102.61432, 17.92273], [102.60971, 17.95411], [102.59234, 17.96127], [102.45523, 17.97106], [102.11359, 18.21532], [101.88485, 18.02474], [101.78087, 18.07559], [101.72294, 17.92867], [101.44667, 17.7392], [101.15108, 17.47586], [100.96541, 17.57926], [101.02185, 17.87637], [101.1793, 18.0544], [101.19118, 18.2125], [101.15108, 18.25624], [101.18227, 18.34367], [101.06047, 18.43247], [101.27585, 18.68875], [101.22832, 18.73377], [101.25803, 18.89545], [101.35606, 19.04716], [101.261, 19.12717], [101.24911, 19.33334], [101.20604, 19.35296], [101.21347, 19.46223], [101.26991, 19.48324], [101.26545, 19.59242], [101.08928, 19.59748], [100.90302, 19.61901], [100.77231, 19.48324], [100.64606, 19.55884], [100.58219, 19.49164], [100.49604, 19.53504], [100.398, 19.75047], [100.5094, 19.87904], [100.58808, 20.15791], [100.55218, 20.17741], [100.51052, 20.14928], [100.47567, 20.19133], [100.4537, 20.19971], [100.44992, 20.23644], [100.41473, 20.25625], [100.37439, 20.35156], [100.33383, 20.4028], [100.25769, 20.3992], [100.22076, 20.31598], [100.16668, 20.2986], [100.1712, 20.24324], [100.11785, 20.24787], [100.09337, 20.26293], [100.09999, 20.31614], [100.08404, 20.36626]]]] } },
-    { type: "Feature", properties: { iso1A2: "TJ", iso1A3: "TJK", iso1N3: "762", wikidata: "Q863", nameEn: "Tajikistan", groups: ["143", "142", "UN"], callingCodes: ["992"] }, geometry: { type: "MultiPolygon", coordinates: [[[[70.45251, 41.04438], [70.38028, 41.02014], [70.36655, 40.90296], [69.69434, 40.62615], [69.59441, 40.70181], [69.53021, 40.77621], [69.38327, 40.7918], [69.32834, 40.70233], [69.3455, 40.57988], [69.2643, 40.57506], [69.21063, 40.54469], [69.27066, 40.49274], [69.28525, 40.41894], [69.30774, 40.36102], [69.33794, 40.34819], [69.32833, 40.29794], [69.30808, 40.2821], [69.24817, 40.30357], [69.25229, 40.26362], [69.30104, 40.24502], [69.30448, 40.18774], [69.2074, 40.21488], [69.15659, 40.2162], [69.04544, 40.22904], [68.85832, 40.20885], [68.84357, 40.18604], [68.79276, 40.17555], [68.77902, 40.20492], [68.5332, 40.14826], [68.52771, 40.11676], [68.62796, 40.07789], [69.01523, 40.15771], [69.01935, 40.11466], [68.96579, 40.06949], [68.84906, 40.04952], [68.93695, 39.91167], [68.88889, 39.87163], [68.63071, 39.85265], [68.61972, 39.68905], [68.54166, 39.53929], [68.12053, 39.56317], [67.70992, 39.66156], [67.62889, 39.60234], [67.44899, 39.57799], [67.46547, 39.53564], [67.39681, 39.52505], [67.46822, 39.46146], [67.45998, 39.315], [67.36522, 39.31287], [67.33226, 39.23739], [67.67833, 39.14479], [67.68915, 39.00775], [68.09704, 39.02589], [68.19743, 38.85985], [68.06948, 38.82115], [68.12877, 38.73677], [68.05598, 38.71641], [68.0807, 38.64136], [68.05873, 38.56087], [68.11366, 38.47169], [68.06274, 38.39435], [68.13289, 38.40822], [68.40343, 38.19484], [68.27159, 37.91477], [68.12635, 37.93], [67.81566, 37.43107], [67.8474, 37.31594], [67.78329, 37.1834], [67.7803, 37.08978], [67.87917, 37.0591], [68.02194, 36.91923], [68.18542, 37.02074], [68.27605, 37.00977], [68.29253, 37.10621], [68.41201, 37.10402], [68.41888, 37.13906], [68.61851, 37.19815], [68.6798, 37.27906], [68.81438, 37.23862], [68.80889, 37.32494], [68.91189, 37.26704], [68.88168, 37.33368], [68.96407, 37.32603], [69.03274, 37.25174], [69.25152, 37.09426], [69.39529, 37.16752], [69.45022, 37.23315], [69.36645, 37.40462], [69.44954, 37.4869], [69.51888, 37.5844], [69.80041, 37.5746], [69.84435, 37.60616], [69.93362, 37.61378], [69.95971, 37.5659], [70.15015, 37.52519], [70.28243, 37.66706], [70.27694, 37.81258], [70.1863, 37.84296], [70.17206, 37.93276], [70.4898, 38.12546], [70.54673, 38.24541], [70.60407, 38.28046], [70.61526, 38.34774], [70.64966, 38.34999], [70.69189, 38.37031], [70.6761, 38.39144], [70.67438, 38.40597], [70.69807, 38.41861], [70.72485, 38.4131], [70.75455, 38.4252], [70.77132, 38.45548], [70.78581, 38.45502], [70.78702, 38.45031], [70.79766, 38.44944], [70.80521, 38.44447], [70.81697, 38.44507], [70.82538, 38.45394], [70.84376, 38.44688], [70.88719, 38.46826], [70.92728, 38.43021], [70.98693, 38.48862], [71.03545, 38.44779], [71.0556, 38.40176], [71.09542, 38.42517], [71.10592, 38.42077], [71.10957, 38.40671], [71.1451, 38.40106], [71.21291, 38.32797], [71.33114, 38.30339], [71.33869, 38.27335], [71.37803, 38.25641], [71.36444, 38.15358], [71.29878, 38.04429], [71.28922, 38.01272], [71.27622, 37.99946], [71.27278, 37.96496], [71.24969, 37.93031], [71.2809, 37.91995], [71.296, 37.93403], [71.32871, 37.88564], [71.51565, 37.95349], [71.58843, 37.92425], [71.59255, 37.79956], [71.55752, 37.78677], [71.54324, 37.77104], [71.53053, 37.76534], [71.55234, 37.73209], [71.54186, 37.69691], [71.51972, 37.61945], [71.5065, 37.60912], [71.49693, 37.53527], [71.50616, 37.50733], [71.5256, 37.47971], [71.49612, 37.4279], [71.47685, 37.40281], [71.4862, 37.33405], [71.49821, 37.31975], [71.50674, 37.31502], [71.48536, 37.26017], [71.4824, 37.24921], [71.48339, 37.23937], [71.47386, 37.2269], [71.4555, 37.21418], [71.4494, 37.18137], [71.44127, 37.11856], [71.43097, 37.05855], [71.45578, 37.03094], [71.46923, 36.99925], [71.48481, 36.93218], [71.51502, 36.89128], [71.57195, 36.74943], [71.67083, 36.67346], [71.83229, 36.68084], [72.31676, 36.98115], [72.54095, 37.00007], [72.66381, 37.02014], [72.79693, 37.22222], [73.06884, 37.31729], [73.29633, 37.46495], [73.77197, 37.4417], [73.76647, 37.33913], [73.61129, 37.27469], [73.64974, 37.23643], [73.82552, 37.22659], [73.8564, 37.26158], [74.20308, 37.34208], [74.23339, 37.41116], [74.41055, 37.3948], [74.56161, 37.37734], [74.68383, 37.3948], [74.8294, 37.3435], [74.88887, 37.23275], [75.12328, 37.31839], [75.09719, 37.37297], [75.15899, 37.41443], [75.06011, 37.52779], [74.94338, 37.55501], [74.8912, 37.67576], [75.00935, 37.77486], [74.92416, 37.83428], [74.9063, 38.03033], [74.82665, 38.07359], [74.80331, 38.19889], [74.69894, 38.22155], [74.69619, 38.42947], [74.51217, 38.47034], [74.17022, 38.65504], [73.97933, 38.52945], [73.79806, 38.61106], [73.80656, 38.66449], [73.7033, 38.84782], [73.7445, 38.93867], [73.82964, 38.91517], [73.81728, 39.04007], [73.75823, 39.023], [73.60638, 39.24534], [73.54572, 39.27567], [73.55396, 39.3543], [73.5004, 39.38402], [73.59241, 39.40843], [73.59831, 39.46425], [73.45096, 39.46677], [73.31912, 39.38615], [73.18454, 39.35536], [72.85934, 39.35116], [72.62027, 39.39696], [72.33173, 39.33093], [72.23834, 39.17248], [72.17242, 39.2661], [72.09689, 39.26823], [72.04059, 39.36704], [71.90601, 39.27674], [71.79202, 39.27355], [71.7522, 39.32031], [71.80164, 39.40631], [71.76816, 39.45456], [71.62688, 39.44056], [71.5517, 39.45722], [71.55856, 39.57588], [71.49814, 39.61397], [71.08752, 39.50704], [71.06418, 39.41586], [70.7854, 39.38933], [70.64087, 39.58792], [70.44757, 39.60128], [70.2869, 39.53141], [70.11111, 39.58223], [69.87491, 39.53882], [69.68677, 39.59281], [69.3594, 39.52516], [69.26938, 39.8127], [69.35649, 40.01994], [69.43134, 39.98431], [69.43557, 39.92877], [69.53615, 39.93991], [69.5057, 40.03277], [69.53855, 40.0887], [69.53794, 40.11833], [69.55555, 40.12296], [69.57615, 40.10524], [69.64704, 40.12165], [69.67001, 40.10639], [70.01283, 40.23288], [70.58297, 40.00891], [70.57384, 39.99394], [70.47557, 39.93216], [70.55033, 39.96619], [70.58912, 39.95211], [70.65946, 39.9878], [70.65827, 40.0981], [70.7928, 40.12797], [70.80495, 40.16813], [70.9818, 40.22392], [70.8607, 40.217], [70.62342, 40.17396], [70.56394, 40.26421], [70.57149, 40.3442], [70.37511, 40.38605], [70.32626, 40.45174], [70.49871, 40.52503], [70.80009, 40.72825], [70.45251, 41.04438]]], [[[70.68112, 40.90612], [70.6158, 40.97661], [70.56077, 41.00642], [70.54223, 40.98787], [70.57501, 40.98941], [70.6721, 40.90555], [70.68112, 40.90612]]], [[[70.74189, 39.86319], [70.53651, 39.89155], [70.52631, 39.86989], [70.54998, 39.85137], [70.59667, 39.83542], [70.63105, 39.77923], [70.74189, 39.86319]]]] } },
-    { type: "Feature", properties: { iso1A2: "TK", iso1A3: "TKL", iso1N3: "772", wikidata: "Q36823", nameEn: "Tokelau", country: "NZ", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["690"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-168.251, -9.44289], [-174.18635, -7.80441], [-174.17993, -10.13616], [-168.251, -9.44289]]]] } },
-    { type: "Feature", properties: { iso1A2: "TL", iso1A3: "TLS", iso1N3: "626", wikidata: "Q574", nameEn: "East Timor", aliases: ["Timor-Leste", "TP"], groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["670"] }, geometry: { type: "MultiPolygon", coordinates: [[[[124.46701, -9.13002], [124.94011, -8.85617], [124.97742, -9.08128], [125.11764, -8.96359], [125.18632, -9.03142], [125.18907, -9.16434], [125.09434, -9.19669], [125.04044, -9.17093], [124.97892, -9.19281], [125.09025, -9.46406], [125.68138, -9.85176], [127.55165, -9.05052], [127.42116, -8.22471], [125.87691, -8.31789], [125.58506, -7.95311], [124.92337, -8.75859], [124.33472, -9.11416], [124.04628, -9.22671], [124.04286, -9.34243], [124.10539, -9.41206], [124.14517, -9.42324], [124.21247, -9.36904], [124.28115, -9.42189], [124.28115, -9.50453], [124.3535, -9.48493], [124.35258, -9.43002], [124.38554, -9.3582], [124.45971, -9.30263], [124.46701, -9.13002]]]] } },
-    { type: "Feature", properties: { iso1A2: "TM", iso1A3: "TKM", iso1N3: "795", wikidata: "Q874", nameEn: "Turkmenistan", groups: ["143", "142", "UN"], callingCodes: ["993"] }, geometry: { type: "MultiPolygon", coordinates: [[[[60.5078, 41.21694], [60.06581, 41.4363], [60.18117, 41.60082], [60.06032, 41.76287], [60.08504, 41.80997], [60.33223, 41.75058], [59.95046, 41.97966], [60.0356, 42.01028], [60.04659, 42.08982], [59.96419, 42.1428], [60.00539, 42.212], [59.94633, 42.27655], [59.4341, 42.29738], [59.2955, 42.37064], [59.17317, 42.52248], [58.93422, 42.5407], [58.6266, 42.79314], [58.57991, 42.64988], [58.27504, 42.69632], [58.14321, 42.62159], [58.29427, 42.56497], [58.51674, 42.30348], [58.40688, 42.29535], [58.3492, 42.43335], [57.99214, 42.50021], [57.90975, 42.4374], [57.92897, 42.24047], [57.84932, 42.18555], [57.6296, 42.16519], [57.30275, 42.14076], [57.03633, 41.92043], [56.96218, 41.80383], [57.03359, 41.41777], [57.13796, 41.36625], [57.03423, 41.25435], [56.00314, 41.32584], [55.45471, 41.25609], [54.95182, 41.92424], [54.20635, 42.38477], [52.97575, 42.1308], [52.47884, 41.78034], [52.26048, 41.69249], [51.7708, 40.29239], [53.89734, 37.3464], [54.24565, 37.32047], [54.36211, 37.34912], [54.58664, 37.45809], [54.67247, 37.43532], [54.77822, 37.51597], [54.81804, 37.61285], [54.77684, 37.62264], [54.851, 37.75739], [55.13412, 37.94705], [55.44152, 38.08564], [55.76561, 38.12238], [55.97847, 38.08024], [56.33278, 38.08132], [56.32454, 38.18502], [56.43303, 38.26054], [56.62255, 38.24005], [56.73928, 38.27887], [57.03453, 38.18717], [57.21169, 38.28965], [57.37236, 38.09321], [57.35042, 37.98546], [57.79534, 37.89299], [58.21399, 37.77281], [58.22999, 37.6856], [58.39959, 37.63134], [58.47786, 37.6433], [58.5479, 37.70526], [58.6921, 37.64548], [58.9338, 37.67374], [59.22905, 37.51161], [59.33507, 37.53146], [59.39797, 37.47892], [59.39385, 37.34257], [59.55178, 37.13594], [59.74678, 37.12499], [60.00768, 37.04102], [60.34767, 36.63214], [61.14516, 36.64644], [61.18187, 36.55348], [61.1393, 36.38782], [61.22719, 36.12759], [61.12007, 35.95992], [61.22444, 35.92879], [61.26152, 35.80749], [61.22719, 35.67038], [61.27371, 35.61482], [61.58742, 35.43803], [61.77693, 35.41341], [61.97743, 35.4604], [62.05709, 35.43803], [62.15871, 35.33278], [62.29191, 35.25964], [62.29878, 35.13312], [62.48006, 35.28796], [62.62288, 35.22067], [62.74098, 35.25432], [62.90853, 35.37086], [63.0898, 35.43131], [63.12276, 35.53196], [63.10079, 35.63024], [63.23262, 35.67487], [63.10318, 35.81782], [63.12276, 35.86208], [63.29579, 35.85985], [63.53475, 35.90881], [63.56496, 35.95106], [63.98519, 36.03773], [64.05385, 36.10433], [64.43288, 36.24401], [64.57295, 36.34362], [64.62514, 36.44311], [64.61141, 36.6351], [64.97945, 37.21913], [65.51778, 37.23881], [65.64263, 37.34388], [65.64137, 37.45061], [65.72274, 37.55438], [66.30993, 37.32409], [66.55743, 37.35409], [66.52303, 37.39827], [66.65761, 37.45497], [66.52852, 37.58568], [66.53676, 37.80084], [66.67684, 37.96776], [66.56697, 38.0435], [66.41042, 38.02403], [66.24013, 38.16238], [65.83913, 38.25733], [65.55873, 38.29052], [64.32576, 38.98691], [64.19086, 38.95561], [63.70778, 39.22349], [63.6913, 39.27666], [62.43337, 39.98528], [62.34273, 40.43206], [62.11751, 40.58242], [61.87856, 41.12257], [61.4446, 41.29407], [61.39732, 41.19873], [61.33199, 41.14946], [61.22212, 41.14946], [61.03261, 41.25691], [60.5078, 41.21694]]]] } },
-    { type: "Feature", properties: { iso1A2: "TN", iso1A3: "TUN", iso1N3: "788", wikidata: "Q948", nameEn: "Tunisia", groups: ["015", "002", "UN"], callingCodes: ["216"] }, geometry: { type: "MultiPolygon", coordinates: [[[[11.2718, 37.6713], [7.89009, 38.19924], [8.59123, 37.14286], [8.64044, 36.9401], [8.62972, 36.86499], [8.67706, 36.8364], [8.57613, 36.78062], [8.46537, 36.7706], [8.47609, 36.66607], [8.16167, 36.48817], [8.18936, 36.44939], [8.40731, 36.42208], [8.2626, 35.91733], [8.26472, 35.73669], [8.35371, 35.66373], [8.36086, 35.47774], [8.30329, 35.29884], [8.47318, 35.23376], [8.3555, 35.10007], [8.30727, 34.95378], [8.25189, 34.92009], [8.29655, 34.72798], [8.20482, 34.57575], [7.86264, 34.3987], [7.81242, 34.21841], [7.74207, 34.16492], [7.66174, 34.20167], [7.52851, 34.06493], [7.54088, 33.7726], [7.73687, 33.42114], [7.83028, 33.18851], [8.11433, 33.10175], [8.1179, 33.05086], [8.31895, 32.83483], [8.35999, 32.50101], [9.07483, 32.07865], [9.55544, 30.23971], [9.76848, 30.34366], [9.88152, 30.34074], [10.29516, 30.90337], [10.12239, 31.42098], [10.31364, 31.72648], [10.48497, 31.72956], [10.62788, 31.96629], [10.7315, 31.97235], [11.04234, 32.2145], [11.53898, 32.4138], [11.57828, 32.48013], [11.46037, 32.6307], [11.51549, 33.09826], [11.55852, 33.1409], [11.58941, 33.36891], [11.2718, 37.6713]]]] } },
-    { type: "Feature", properties: { iso1A2: "TO", iso1A3: "TON", iso1N3: "776", wikidata: "Q678", nameEn: "Tonga", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["676"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-176.74538, -22.89767], [-180, -22.90585], [-180, -24.21376], [-173.10761, -24.19665], [-173.13438, -14.94228], [-176.76826, -14.95183], [-176.74538, -22.89767]]]] } },
-    { type: "Feature", properties: { iso1A2: "TR", iso1A3: "TUR", iso1N3: "792", wikidata: "Q43", nameEn: "Turkey", groups: ["145", "142", "UN"], callingCodes: ["90"] }, geometry: { type: "MultiPolygon", coordinates: [[[[41.54366, 41.52185], [40.89217, 41.72528], [34.8305, 42.4581], [28.32297, 41.98371], [28.02971, 41.98066], [27.91479, 41.97902], [27.83492, 41.99709], [27.81235, 41.94803], [27.69949, 41.97515], [27.55191, 41.90928], [27.52379, 41.93756], [27.45478, 41.96591], [27.27411, 42.10409], [27.22376, 42.10152], [27.19251, 42.06028], [27.08486, 42.08735], [27.03277, 42.0809], [26.95638, 42.00741], [26.79143, 41.97386], [26.62996, 41.97644], [26.56051, 41.92995], [26.57961, 41.90024], [26.53968, 41.82653], [26.36952, 41.82265], [26.33589, 41.76802], [26.32952, 41.73637], [26.35957, 41.71149], [26.47958, 41.67037], [26.5209, 41.62592], [26.59196, 41.60491], [26.59742, 41.48058], [26.61767, 41.42281], [26.62997, 41.34613], [26.5837, 41.32131], [26.5209, 41.33993], [26.39861, 41.25053], [26.32259, 41.24929], [26.31928, 41.07386], [26.3606, 41.02027], [26.33297, 40.98388], [26.35894, 40.94292], [26.32259, 40.94042], [26.28623, 40.93005], [26.29441, 40.89119], [26.26169, 40.9168], [26.20856, 40.86048], [26.21351, 40.83298], [26.15685, 40.80709], [26.12854, 40.77339], [26.12495, 40.74283], [26.08638, 40.73214], [26.0754, 40.72772], [26.03489, 40.73051], [25.94795, 40.72797], [26.04292, 40.3958], [25.61285, 40.17161], [25.94257, 39.39358], [26.43357, 39.43096], [26.70773, 39.0312], [26.61814, 38.81372], [26.21136, 38.65436], [26.32173, 38.48731], [26.24183, 38.44695], [26.21136, 38.17558], [27.05537, 37.9131], [27.16428, 37.72343], [26.99377, 37.69034], [26.95583, 37.64989], [27.14757, 37.32], [27.20312, 36.94571], [27.45627, 36.9008], [27.24613, 36.71622], [27.46117, 36.53789], [27.89482, 36.69898], [27.95037, 36.46155], [28.23708, 36.56812], [29.30783, 36.01033], [29.48192, 36.18377], [29.61002, 36.1731], [29.61805, 36.14179], [29.69611, 36.10365], [29.73302, 35.92555], [32.82353, 35.70297], [35.51152, 36.10954], [35.931, 35.92109], [35.98499, 35.94107], [36.00514, 35.94113], [36.01844, 35.92403], [35.99829, 35.88242], [36.11827, 35.85923], [36.13919, 35.83692], [36.14029, 35.81015], [36.1623, 35.80925], [36.17441, 35.92076], [36.19973, 35.95195], [36.25366, 35.96264], [36.27678, 35.94839], [36.29769, 35.96086], [36.28338, 36.00273], [36.30099, 36.00985], [36.33956, 35.98687], [36.37474, 36.01163], [36.39206, 36.22088], [36.4617, 36.20461], [36.50463, 36.2419], [36.6125, 36.22592], [36.68672, 36.23677], [36.65653, 36.33861], [36.6081, 36.33772], [36.54206, 36.49539], [36.58829, 36.58295], [36.57398, 36.65186], [36.62681, 36.71189], [36.61581, 36.74629], [36.66727, 36.82901], [36.99557, 36.75997], [36.99886, 36.74012], [37.04399, 36.73483], [37.04619, 36.71101], [37.01647, 36.69512], [37.02088, 36.66422], [37.08279, 36.63495], [37.10894, 36.6704], [37.16177, 36.66069], [37.21988, 36.6736], [37.47253, 36.63243], [37.49103, 36.66904], [37.68048, 36.75065], [37.81974, 36.76055], [38.21064, 36.91842], [38.38859, 36.90064], [38.55908, 36.84429], [38.74042, 36.70629], [39.03217, 36.70911], [39.21538, 36.66834], [39.81589, 36.75538], [40.69136, 37.0996], [40.90856, 37.13147], [41.21937, 37.07665], [41.515, 37.08084], [42.00894, 37.17209], [42.18225, 37.28569], [42.19301, 37.31323], [42.2112, 37.32491], [42.22257, 37.31395], [42.22381, 37.30238], [42.20454, 37.28715], [42.21548, 37.28026], [42.23683, 37.2863], [42.26039, 37.27017], [42.2824, 37.2798], [42.34735, 37.22548], [42.32313, 37.17814], [42.35724, 37.10998], [42.56725, 37.14878], [42.78887, 37.38615], [42.93705, 37.32015], [43.11403, 37.37436], [43.30083, 37.30629], [43.33508, 37.33105], [43.50787, 37.24436], [43.56702, 37.25675], [43.63085, 37.21957], [43.7009, 37.23692], [43.8052, 37.22825], [43.82699, 37.19477], [43.84878, 37.22205], [43.90949, 37.22453], [44.02002, 37.33229], [44.13521, 37.32486], [44.2613, 37.25055], [44.27998, 37.16501], [44.22239, 37.15756], [44.18503, 37.09551], [44.25975, 36.98119], [44.30645, 36.97373], [44.35937, 37.02843], [44.35315, 37.04955], [44.38117, 37.05825], [44.42631, 37.05825], [44.63179, 37.19229], [44.76698, 37.16162], [44.78319, 37.1431], [44.7868, 37.16644], [44.75986, 37.21549], [44.81021, 37.2915], [44.58449, 37.45018], [44.61401, 37.60165], [44.56887, 37.6429], [44.62096, 37.71985], [44.55498, 37.783], [44.45948, 37.77065], [44.3883, 37.85433], [44.22509, 37.88859], [44.42476, 38.25763], [44.50115, 38.33939], [44.44386, 38.38295], [44.38309, 38.36117], [44.3119, 38.37887], [44.3207, 38.49799], [44.32058, 38.62752], [44.28065, 38.6465], [44.26155, 38.71427], [44.30322, 38.81581], [44.18863, 38.93881], [44.20946, 39.13975], [44.1043, 39.19842], [44.03667, 39.39223], [44.22452, 39.4169], [44.29818, 39.378], [44.37921, 39.4131], [44.42832, 39.4131], [44.41849, 39.56659], [44.48111, 39.61579], [44.47298, 39.68788], [44.6137, 39.78393], [44.65422, 39.72163], [44.71806, 39.71124], [44.81043, 39.62677], [44.80977, 39.65768], [44.75779, 39.7148], [44.61845, 39.8281], [44.46635, 39.97733], [44.26973, 40.04866], [44.1778, 40.02845], [44.1057, 40.03555], [43.92307, 40.01787], [43.65688, 40.11199], [43.65221, 40.14889], [43.71136, 40.16673], [43.59928, 40.34019], [43.60862, 40.43267], [43.54791, 40.47413], [43.63664, 40.54159], [43.7425, 40.66805], [43.74872, 40.7365], [43.67712, 40.84846], [43.67712, 40.93084], [43.58683, 40.98961], [43.47319, 41.02251], [43.44984, 41.0988], [43.4717, 41.12611], [43.44973, 41.17666], [43.36118, 41.2028], [43.23096, 41.17536], [43.1945, 41.25242], [43.13373, 41.25503], [43.21707, 41.30331], [43.02956, 41.37891], [42.8785, 41.50516], [42.84899, 41.47265], [42.78995, 41.50126], [42.84471, 41.58912], [42.72794, 41.59714], [42.59202, 41.58183], [42.51772, 41.43606], [42.26387, 41.49346], [41.95134, 41.52466], [41.81939, 41.43621], [41.7124, 41.47417], [41.7148, 41.4932], [41.54366, 41.52185]]]] } },
-    { type: "Feature", properties: { iso1A2: "TT", iso1A3: "TTO", iso1N3: "780", wikidata: "Q754", nameEn: "Trinidad and Tobago", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", callingCodes: ["1 868"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.62505, 11.18974], [-62.08693, 10.04435], [-60.89962, 9.81445], [-60.07172, 11.77667], [-61.62505, 11.18974]]]] } },
-    { type: "Feature", properties: { iso1A2: "TV", iso1A3: "TUV", iso1N3: "798", wikidata: "Q672", nameEn: "Tuvalu", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["688"] }, geometry: { type: "MultiPolygon", coordinates: [[[[174, -5], [174, -11.5], [179.99999, -11.5], [179.99999, -5], [174, -5]]]] } },
-    { type: "Feature", properties: { iso1A2: "TW", iso1A3: "TWN", iso1N3: "158", wikidata: "Q865", nameEn: "Taiwan", aliases: ["RC"], groups: ["030", "142"], callingCodes: ["886"] }, geometry: { type: "MultiPolygon", coordinates: [[[[121.8109, 21.77688], [122.26612, 25.98197], [120.5128, 26.536], [120.0693, 26.3959], [119.78816, 26.2348], [119.98511, 25.37624], [119.42295, 25.0886], [118.6333, 24.46259], [118.42453, 24.54644], [118.35291, 24.51645], [118.28244, 24.51231], [118.11703, 24.39734], [120.69238, 21.52331], [121.8109, 21.77688]]]] } },
-    { type: "Feature", properties: { iso1A2: "TZ", iso1A3: "TZA", iso1N3: "834", wikidata: "Q924", nameEn: "Tanzania", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["255"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.80408, -0.99911], [30.76635, -0.9852], [30.70631, -1.01175], [30.64166, -1.06601], [30.47194, -1.0555], [30.45116, -1.10641], [30.50889, -1.16412], [30.57123, -1.33264], [30.71974, -1.43244], [30.84079, -1.64652], [30.80802, -1.91477], [30.89303, -2.08223], [30.83915, -2.35795], [30.54501, -2.41404], [30.41789, -2.66266], [30.52747, -2.65841], [30.40662, -2.86151], [30.4987, -2.9573], [30.57926, -2.89791], [30.6675, -2.98987], [30.83823, -2.97837], [30.84165, -3.25152], [30.45915, -3.56532], [30.22042, -4.01738], [30.03323, -4.26631], [29.88172, -4.35743], [29.82885, -4.36153], [29.77289, -4.41733], [29.75109, -4.45836], [29.63827, -4.44681], [29.43673, -4.44845], [29.52552, -6.2731], [30.2567, -7.14121], [30.79243, -8.27382], [31.00796, -8.58615], [31.37533, -8.60769], [31.57147, -8.70619], [31.57147, -8.81388], [31.71158, -8.91386], [31.81587, -8.88618], [31.94663, -8.93846], [31.94196, -9.02303], [31.98866, -9.07069], [32.08206, -9.04609], [32.16146, -9.05993], [32.25486, -9.13371], [32.43543, -9.11988], [32.49147, -9.14754], [32.53661, -9.24281], [32.75611, -9.28583], [32.76233, -9.31963], [32.95389, -9.40138], [32.99397, -9.36712], [33.14925, -9.49322], [33.31581, -9.48554], [33.48052, -9.62442], [33.76677, -9.58516], [33.93298, -9.71647], [33.9638, -9.62206], [33.95829, -9.54066], [34.03865, -9.49398], [34.54499, -10.0678], [34.51911, -10.12279], [34.57581, -10.56271], [34.65946, -10.6828], [34.67047, -10.93796], [34.61161, -11.01611], [34.63305, -11.11731], [34.79375, -11.32245], [34.91153, -11.39799], [34.96296, -11.57354], [35.63599, -11.55927], [35.82767, -11.41081], [36.19094, -11.57593], [36.19094, -11.70008], [36.62068, -11.72884], [36.80309, -11.56836], [37.3936, -11.68949], [37.76614, -11.53352], [37.8388, -11.3123], [37.93618, -11.26228], [38.21598, -11.27289], [38.47258, -11.4199], [38.88996, -11.16978], [39.24395, -11.17433], [39.58249, -10.96043], [40.00295, -10.80255], [40.44265, -10.4618], [40.74206, -10.25691], [40.14328, -4.64201], [39.62121, -4.68136], [39.44306, -4.93877], [39.21631, -4.67835], [37.81321, -3.69179], [37.75036, -3.54243], [37.63099, -3.50723], [37.5903, -3.42735], [37.71745, -3.304], [37.67199, -3.06222], [34.0824, -1.02264], [34.03084, -1.05101], [34.02286, -1.00779], [33.93107, -0.99298], [30.80408, -0.99911]]]] } },
-    { type: "Feature", properties: { iso1A2: "UA", iso1A3: "UKR", iso1N3: "804", wikidata: "Q212", nameEn: "Ukraine", groups: ["151", "150", "UN"], callingCodes: ["380"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.57318, 46.10317], [33.61467, 46.13561], [33.63854, 46.14147], [33.61517, 46.22615], [33.646, 46.23028], [33.74047, 46.18555], [33.79715, 46.20482], [33.85234, 46.19863], [33.91549, 46.15938], [34.05272, 46.10838], [34.07311, 46.11769], [34.12929, 46.10494], [34.181, 46.06804], [34.25111, 46.0532], [34.33912, 46.06114], [34.41221, 46.00245], [34.44155, 45.95995], [34.48729, 45.94267], [34.52011, 45.95097], [34.55889, 45.99347], [34.60861, 45.99347], [34.66679, 45.97136], [34.75479, 45.90705], [34.80153, 45.90047], [34.79905, 45.81009], [34.96015, 45.75634], [35.23066, 45.79231], [37.62608, 46.82615], [38.12112, 46.86078], [38.3384, 46.98085], [38.22955, 47.12069], [38.23049, 47.2324], [38.32112, 47.2585], [38.33074, 47.30508], [38.22225, 47.30788], [38.28954, 47.39255], [38.28679, 47.53552], [38.35062, 47.61631], [38.76379, 47.69346], [38.79628, 47.81109], [38.87979, 47.87719], [39.73935, 47.82876], [39.82213, 47.96396], [39.77544, 48.04206], [39.88256, 48.04482], [39.83724, 48.06501], [39.94847, 48.22811], [40.00752, 48.22445], [39.99241, 48.31768], [39.97325, 48.31399], [39.9693, 48.29904], [39.95248, 48.29972], [39.91465, 48.26743], [39.90041, 48.3049], [39.84273, 48.30947], [39.84136, 48.33321], [39.94847, 48.35055], [39.88794, 48.44226], [39.86196, 48.46633], [39.84548, 48.57821], [39.79764, 48.58668], [39.67226, 48.59368], [39.71765, 48.68673], [39.73104, 48.7325], [39.79466, 48.83739], [39.97182, 48.79398], [40.08168, 48.87443], [40.03636, 48.91957], [39.98967, 48.86901], [39.78368, 48.91596], [39.74874, 48.98675], [39.72649, 48.9754], [39.71353, 48.98959], [39.6683, 48.99454], [39.6836, 49.05121], [39.93437, 49.05709], [40.01988, 49.1761], [40.22176, 49.25683], [40.18331, 49.34996], [40.14912, 49.37681], [40.1141, 49.38798], [40.03087, 49.45452], [40.03636, 49.52321], [40.16683, 49.56865], [40.13249, 49.61672], [39.84548, 49.56064], [39.65047, 49.61761], [39.59142, 49.73758], [39.44496, 49.76067], [39.27968, 49.75976], [39.1808, 49.88911], [38.9391, 49.79524], [38.90477, 49.86787], [38.73311, 49.90238], [38.68677, 50.00904], [38.65688, 49.97176], [38.35408, 50.00664], [38.32524, 50.08866], [38.18517, 50.08161], [38.21675, 49.98104], [38.02999, 49.90592], [38.02999, 49.94482], [37.90776, 50.04194], [37.79515, 50.08425], [37.75807, 50.07896], [37.61113, 50.21976], [37.62879, 50.24481], [37.62486, 50.29966], [37.47243, 50.36277], [37.48204, 50.46079], [37.08468, 50.34935], [36.91762, 50.34963], [36.69377, 50.26982], [36.64571, 50.218], [36.56655, 50.2413], [36.58371, 50.28563], [36.47817, 50.31457], [36.30101, 50.29088], [36.20763, 50.3943], [36.06893, 50.45205], [35.8926, 50.43829], [35.80388, 50.41356], [35.73659, 50.35489], [35.61711, 50.35707], [35.58003, 50.45117], [35.47463, 50.49247], [35.39464, 50.64751], [35.48116, 50.66405], [35.47704, 50.77274], [35.41367, 50.80227], [35.39307, 50.92145], [35.32598, 50.94524], [35.40837, 51.04119], [35.31774, 51.08434], [35.20375, 51.04723], [35.12685, 51.16191], [35.14058, 51.23162], [34.97304, 51.2342], [34.82472, 51.17483], [34.6874, 51.18], [34.6613, 51.25053], [34.38802, 51.2746], [34.31661, 51.23936], [34.23009, 51.26429], [34.33446, 51.363], [34.22048, 51.4187], [34.30562, 51.5205], [34.17599, 51.63253], [34.07765, 51.67065], [34.42922, 51.72852], [34.41136, 51.82793], [34.09413, 52.00835], [34.11199, 52.14087], [34.05239, 52.20132], [33.78789, 52.37204], [33.55718, 52.30324], [33.48027, 52.31499], [33.51323, 52.35779], [33.18913, 52.3754], [32.89937, 52.2461], [32.85405, 52.27888], [32.69475, 52.25535], [32.54781, 52.32423], [32.3528, 52.32842], [32.38988, 52.24946], [32.33083, 52.23685], [32.34044, 52.1434], [32.2777, 52.10266], [32.23331, 52.08085], [32.08813, 52.03319], [31.92159, 52.05144], [31.96141, 52.08015], [31.85018, 52.11305], [31.81722, 52.09955], [31.7822, 52.11406], [31.38326, 52.12991], [31.25142, 52.04131], [31.13332, 52.1004], [30.95589, 52.07775], [30.90897, 52.00699], [30.76443, 51.89739], [30.68804, 51.82806], [30.51946, 51.59649], [30.64992, 51.35014], [30.56203, 51.25655], [30.36153, 51.33984], [30.34642, 51.42555], [30.17888, 51.51025], [29.77376, 51.4461], [29.7408, 51.53417], [29.54372, 51.48372], [29.49773, 51.39814], [29.42357, 51.4187], [29.32881, 51.37843], [29.25191, 51.49828], [29.25603, 51.57089], [29.20659, 51.56918], [29.16402, 51.64679], [29.1187, 51.65872], [28.99098, 51.56833], [28.95528, 51.59222], [28.81795, 51.55552], [28.76027, 51.48802], [28.78224, 51.45294], [28.75615, 51.41442], [28.73143, 51.46236], [28.69161, 51.44695], [28.64429, 51.5664], [28.47051, 51.59734], [28.37592, 51.54505], [28.23452, 51.66988], [28.10658, 51.57857], [27.95827, 51.56065], [27.91844, 51.61952], [27.85253, 51.62293], [27.76052, 51.47604], [27.67125, 51.50854], [27.71932, 51.60672], [27.55727, 51.63486], [27.51058, 51.5854], [27.47212, 51.61184], [27.24828, 51.60161], [27.26613, 51.65957], [27.20948, 51.66713], [27.20602, 51.77291], [26.99422, 51.76933], [26.9489, 51.73788], [26.80043, 51.75777], [26.69759, 51.82284], [26.46962, 51.80501], [26.39367, 51.87315], [26.19084, 51.86781], [26.00408, 51.92967], [25.83217, 51.92587], [25.80574, 51.94556], [25.73673, 51.91973], [25.46163, 51.92205], [25.20228, 51.97143], [24.98784, 51.91273], [24.37123, 51.88222], [24.29021, 51.80841], [24.3163, 51.75063], [24.13075, 51.66979], [23.99907, 51.58369], [23.8741, 51.59734], [23.91118, 51.63316], [23.7766, 51.66809], [23.60906, 51.62122], [23.6736, 51.50255], [23.62751, 51.50512], [23.69905, 51.40871], [23.63858, 51.32182], [23.80678, 51.18405], [23.90376, 51.07697], [23.92217, 51.00836], [24.04576, 50.90196], [24.14524, 50.86128], [24.0952, 50.83262], [23.99254, 50.83847], [23.95925, 50.79271], [24.0595, 50.71625], [24.0996, 50.60752], [24.07048, 50.5071], [24.03668, 50.44507], [23.99563, 50.41289], [23.79445, 50.40481], [23.71382, 50.38248], [23.67635, 50.33385], [23.28221, 50.0957], [22.99329, 49.84249], [22.83179, 49.69875], [22.80261, 49.69098], [22.78304, 49.65543], [22.64534, 49.53094], [22.69444, 49.49378], [22.748, 49.32759], [22.72009, 49.20288], [22.86336, 49.10513], [22.89122, 49.00725], [22.56155, 49.08865], [22.54338, 49.01424], [22.48296, 48.99172], [22.42934, 48.92857], [22.34151, 48.68893], [22.21379, 48.6218], [22.16023, 48.56548], [22.14689, 48.4005], [22.2083, 48.42534], [22.38133, 48.23726], [22.49806, 48.25189], [22.59007, 48.15121], [22.58733, 48.10813], [22.66835, 48.09162], [22.73427, 48.12005], [22.81804, 48.11363], [22.87847, 48.04665], [22.84276, 47.98602], [22.89849, 47.95851], [22.94301, 47.96672], [22.92241, 48.02002], [23.0158, 47.99338], [23.08858, 48.00716], [23.1133, 48.08061], [23.15999, 48.12188], [23.27397, 48.08245], [23.33577, 48.0237], [23.4979, 47.96858], [23.52803, 48.01818], [23.5653, 48.00499], [23.63894, 48.00293], [23.66262, 47.98786], [23.75188, 47.99705], [23.80904, 47.98142], [23.8602, 47.9329], [23.89352, 47.94512], [23.94192, 47.94868], [23.96337, 47.96672], [23.98553, 47.96076], [24.00801, 47.968], [24.02999, 47.95087], [24.06466, 47.95317], [24.11281, 47.91487], [24.22566, 47.90231], [24.34926, 47.9244], [24.43578, 47.97131], [24.61994, 47.95062], [24.70632, 47.84428], [24.81893, 47.82031], [24.88896, 47.7234], [25.11144, 47.75203], [25.23778, 47.89403], [25.63878, 47.94924], [25.77723, 47.93919], [26.05901, 47.9897], [26.17711, 47.99246], [26.33504, 48.18418], [26.55202, 48.22445], [26.62823, 48.25804], [26.6839, 48.35828], [26.79239, 48.29071], [26.82809, 48.31629], [26.71274, 48.40388], [26.85556, 48.41095], [26.93384, 48.36558], [27.03821, 48.37653], [27.0231, 48.42485], [27.08078, 48.43214], [27.13434, 48.37288], [27.27855, 48.37534], [27.32159, 48.4434], [27.37604, 48.44398], [27.37741, 48.41026], [27.44333, 48.41209], [27.46942, 48.454], [27.5889, 48.49224], [27.59027, 48.46311], [27.6658, 48.44034], [27.74422, 48.45926], [27.79225, 48.44244], [27.81902, 48.41874], [27.87533, 48.4037], [27.88391, 48.36699], [27.95883, 48.32368], [28.04527, 48.32661], [28.09873, 48.3124], [28.07504, 48.23494], [28.17666, 48.25963], [28.19314, 48.20749], [28.2856, 48.23202], [28.32508, 48.23384], [28.35519, 48.24957], [28.36996, 48.20543], [28.34912, 48.1787], [28.30586, 48.1597], [28.30609, 48.14018], [28.34009, 48.13147], [28.38712, 48.17567], [28.43701, 48.15832], [28.42454, 48.12047], [28.48428, 48.0737], [28.53921, 48.17453], [28.69896, 48.13106], [28.85232, 48.12506], [28.8414, 48.03392], [28.9306, 47.96255], [29.1723, 47.99013], [29.19839, 47.89261], [29.27804, 47.88893], [29.20663, 47.80367], [29.27255, 47.79953], [29.22242, 47.73607], [29.22414, 47.60012], [29.11743, 47.55001], [29.18603, 47.43387], [29.3261, 47.44664], [29.39889, 47.30179], [29.47854, 47.30366], [29.48678, 47.36043], [29.5733, 47.36508], [29.59665, 47.25521], [29.54996, 47.24962], [29.57696, 47.13581], [29.49732, 47.12878], [29.53044, 47.07851], [29.61038, 47.09932], [29.62137, 47.05069], [29.57056, 46.94766], [29.72986, 46.92234], [29.75458, 46.8604], [29.87405, 46.88199], [29.98814, 46.82358], [29.94522, 46.80055], [29.9743, 46.75325], [29.94409, 46.56002], [29.88916, 46.54302], [30.02511, 46.45132], [30.16794, 46.40967], [30.09103, 46.38694], [29.94114, 46.40114], [29.88329, 46.35851], [29.74496, 46.45605], [29.66359, 46.4215], [29.6763, 46.36041], [29.5939, 46.35472], [29.49914, 46.45889], [29.35357, 46.49505], [29.24886, 46.37912], [29.23547, 46.55435], [29.02409, 46.49582], [29.01241, 46.46177], [28.9306, 46.45699], [29.004, 46.31495], [28.98478, 46.31803], [28.94953, 46.25852], [29.06656, 46.19716], [28.94643, 46.09176], [29.00613, 46.04962], [28.98004, 46.00385], [28.74383, 45.96664], [28.78503, 45.83475], [28.69852, 45.81753], [28.70401, 45.78019], [28.52823, 45.73803], [28.47879, 45.66994], [28.51587, 45.6613], [28.54196, 45.58062], [28.49252, 45.56716], [28.51449, 45.49982], [28.43072, 45.48538], [28.41836, 45.51715], [28.30201, 45.54744], [28.21139, 45.46895], [28.28504, 45.43907], [28.34554, 45.32102], [28.5735, 45.24759], [28.71358, 45.22631], [28.78911, 45.24179], [28.81383, 45.3384], [28.94292, 45.28045], [28.96077, 45.33164], [29.24779, 45.43388], [29.42632, 45.44545], [29.59798, 45.38857], [29.68175, 45.26885], [29.65428, 45.25629], [29.69272, 45.19227], [30.04414, 45.08461], [31.62627, 45.50633], [33.54017, 46.0123], [33.59087, 46.06013], [33.57318, 46.10317]]]] } },
-    { type: "Feature", properties: { iso1A2: "UG", iso1A3: "UGA", iso1N3: "800", wikidata: "Q1036", nameEn: "Uganda", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["256"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.93107, -0.99298], [33.9264, -0.54188], [33.98449, -0.13079], [33.90936, 0.10581], [34.10067, 0.36372], [34.08727, 0.44713], [34.11408, 0.48884], [34.13493, 0.58118], [34.20196, 0.62289], [34.27345, 0.63182], [34.31516, 0.75693], [34.40041, 0.80266], [34.43349, 0.85254], [34.52369, 1.10692], [34.57427, 1.09868], [34.58029, 1.14712], [34.67562, 1.21265], [34.80223, 1.22754], [34.82606, 1.26626], [34.82606, 1.30944], [34.7918, 1.36752], [34.87819, 1.5596], [34.92734, 1.56109], [34.9899, 1.6668], [34.98692, 1.97348], [34.90947, 2.42447], [34.95267, 2.47209], [34.77244, 2.70272], [34.78137, 2.76223], [34.73967, 2.85447], [34.65774, 2.8753], [34.60114, 2.93034], [34.56242, 3.11478], [34.45815, 3.18319], [34.40006, 3.37949], [34.41794, 3.44342], [34.39112, 3.48802], [34.44922, 3.51627], [34.45815, 3.67385], [34.15429, 3.80464], [34.06046, 4.15235], [33.9873, 4.23316], [33.51264, 3.75068], [33.18356, 3.77812], [33.02852, 3.89296], [32.89746, 3.81339], [32.72021, 3.77327], [32.41337, 3.748], [32.20782, 3.6053], [32.19888, 3.50867], [32.08866, 3.53543], [32.08491, 3.56287], [32.05187, 3.589], [31.95907, 3.57408], [31.96205, 3.6499], [31.86821, 3.78664], [31.81459, 3.82083], [31.72075, 3.74354], [31.50776, 3.63652], [31.50478, 3.67814], [31.29476, 3.8015], [31.16666, 3.79853], [30.97601, 3.693], [30.85153, 3.48867], [30.94081, 3.50847], [30.93486, 3.40737], [30.84251, 3.26908], [30.77101, 3.04897], [30.8574, 2.9508], [30.8857, 2.83923], [30.75612, 2.5863], [30.74271, 2.43601], [30.83059, 2.42559], [30.91102, 2.33332], [30.96911, 2.41071], [31.06593, 2.35862], [31.07934, 2.30207], [31.12104, 2.27676], [31.1985, 2.29462], [31.20148, 2.2217], [31.28042, 2.17853], [31.30127, 2.11006], [30.48503, 1.21675], [30.24671, 1.14974], [30.22139, 0.99635], [30.1484, 0.89805], [29.98307, 0.84295], [29.95477, 0.64486], [29.97413, 0.52124], [29.87284, 0.39166], [29.81922, 0.16824], [29.77454, 0.16675], [29.7224, 0.07291], [29.72687, -0.08051], [29.65091, -0.46777], [29.67474, -0.47969], [29.67176, -0.55714], [29.62708, -0.71055], [29.63006, -0.8997], [29.58388, -0.89821], [29.59061, -1.39016], [29.82657, -1.31187], [29.912, -1.48269], [30.16369, -1.34303], [30.35212, -1.06896], [30.47194, -1.0555], [30.64166, -1.06601], [30.70631, -1.01175], [30.76635, -0.9852], [30.80408, -0.99911], [33.93107, -0.99298]]]] } },
-    { type: "Feature", properties: { iso1A2: "UM", iso1A3: "UMI", iso1N3: "581", wikidata: "Q16645", nameEn: "United States Minor Outlying Islands", country: "US" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "UN", wikidata: "Q1065", nameEn: "United Nations", level: "unitedNations", isoStatus: "excRes" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "US", iso1A3: "USA", iso1N3: "840", wikidata: "Q30", nameEn: "United States of America" }, geometry: null },
-    { type: "Feature", properties: { iso1A2: "UY", iso1A3: "URY", iso1N3: "858", wikidata: "Q77", nameEn: "Uruguay", groups: ["005", "419", "019", "UN"], callingCodes: ["598"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-57.65132, -30.19229], [-57.61478, -30.25165], [-57.64859, -30.35095], [-57.89115, -30.49572], [-57.8024, -30.77193], [-57.89476, -30.95994], [-57.86729, -31.06352], [-57.9908, -31.34924], [-57.98127, -31.3872], [-58.07569, -31.44916], [-58.0023, -31.53084], [-58.00076, -31.65016], [-58.20252, -31.86966], [-58.10036, -32.25338], [-58.22362, -32.52416], [-58.1224, -32.98842], [-58.40475, -33.11777], [-58.44442, -33.84033], [-58.34425, -34.15035], [-57.83001, -34.69099], [-54.78916, -36.21945], [-52.83257, -34.01481], [-53.37138, -33.74313], [-53.39593, -33.75169], [-53.44031, -33.69344], [-53.52794, -33.68908], [-53.53459, -33.16843], [-53.1111, -32.71147], [-53.37671, -32.57005], [-53.39572, -32.58596], [-53.76024, -32.0751], [-54.17384, -31.86168], [-55.50821, -30.91349], [-55.50841, -30.9027], [-55.51862, -30.89828], [-55.52712, -30.89997], [-55.53276, -30.90218], [-55.53431, -30.89714], [-55.54572, -30.89051], [-55.55218, -30.88193], [-55.55373, -30.8732], [-55.5634, -30.8686], [-55.58866, -30.84117], [-55.87388, -31.05053], [-56.4619, -30.38457], [-56.4795, -30.3899], [-56.49267, -30.39471], [-56.90236, -30.02578], [-57.22502, -30.26121], [-57.65132, -30.19229]]]] } },
-    { type: "Feature", properties: { iso1A2: "UZ", iso1A3: "UZB", iso1N3: "860", wikidata: "Q265", nameEn: "Uzbekistan", groups: ["143", "142", "UN"], callingCodes: ["998"] }, geometry: { type: "MultiPolygon", coordinates: [[[[65.85194, 42.85481], [65.53277, 43.31856], [65.18666, 43.48835], [64.96464, 43.74748], [64.53885, 43.56941], [63.34656, 43.64003], [62.01711, 43.51008], [61.01475, 44.41383], [58.59711, 45.58671], [55.97842, 44.99622], [55.97832, 44.99622], [55.97822, 44.99617], [55.97811, 44.99617], [55.97801, 44.99612], [55.97801, 44.99607], [55.97791, 44.99607], [55.9778, 44.99607], [55.9777, 44.99601], [55.9777, 44.99596], [55.9776, 44.99591], [55.97749, 44.99591], [55.97739, 44.99591], [55.97739, 44.99586], [55.97729, 44.99586], [55.97718, 44.99581], [55.97708, 44.99576], [55.97698, 44.9957], [55.97698, 44.99565], [55.97687, 44.9956], [55.97677, 44.9956], [55.97677, 44.99555], [55.97677, 44.9955], [55.97667, 44.99545], [55.97656, 44.99539], [55.97646, 44.99534], [55.97646, 44.99529], [55.97636, 44.99524], [55.97636, 44.99519], [55.97625, 44.99514], [55.97615, 44.99508], [55.97615, 44.99503], [55.97615, 44.99498], [55.97615, 44.99493], [55.97615, 44.99483], [55.97615, 44.99477], [55.97605, 44.99477], [55.97605, 44.99467], [55.97605, 44.99462], [55.97605, 44.99457], [55.97605, 44.99452], [55.97594, 44.99446], [55.97584, 44.99441], [55.97584, 44.99436], [55.97584, 44.99431], [55.97584, 44.99426], [55.97584, 44.99421], [55.97584, 44.99415], [55.97584, 44.99405], [55.97584, 44.994], [55.97584, 44.9939], [55.97584, 44.99384], [55.97584, 44.99374], [55.97584, 44.99369], [55.97584, 44.99359], [55.97584, 44.99353], [55.97584, 44.99348], [55.97584, 44.99343], [55.97584, 44.99338], [55.97584, 44.99328], [55.97584, 44.99322], [56.00314, 41.32584], [57.03423, 41.25435], [57.13796, 41.36625], [57.03359, 41.41777], [56.96218, 41.80383], [57.03633, 41.92043], [57.30275, 42.14076], [57.6296, 42.16519], [57.84932, 42.18555], [57.92897, 42.24047], [57.90975, 42.4374], [57.99214, 42.50021], [58.3492, 42.43335], [58.40688, 42.29535], [58.51674, 42.30348], [58.29427, 42.56497], [58.14321, 42.62159], [58.27504, 42.69632], [58.57991, 42.64988], [58.6266, 42.79314], [58.93422, 42.5407], [59.17317, 42.52248], [59.2955, 42.37064], [59.4341, 42.29738], [59.94633, 42.27655], [60.00539, 42.212], [59.96419, 42.1428], [60.04659, 42.08982], [60.0356, 42.01028], [59.95046, 41.97966], [60.33223, 41.75058], [60.08504, 41.80997], [60.06032, 41.76287], [60.18117, 41.60082], [60.06581, 41.4363], [60.5078, 41.21694], [61.03261, 41.25691], [61.22212, 41.14946], [61.33199, 41.14946], [61.39732, 41.19873], [61.4446, 41.29407], [61.87856, 41.12257], [62.11751, 40.58242], [62.34273, 40.43206], [62.43337, 39.98528], [63.6913, 39.27666], [63.70778, 39.22349], [64.19086, 38.95561], [64.32576, 38.98691], [65.55873, 38.29052], [65.83913, 38.25733], [66.24013, 38.16238], [66.41042, 38.02403], [66.56697, 38.0435], [66.67684, 37.96776], [66.53676, 37.80084], [66.52852, 37.58568], [66.65761, 37.45497], [66.52303, 37.39827], [66.55743, 37.35409], [66.64699, 37.32958], [66.95598, 37.40162], [67.08232, 37.35469], [67.13039, 37.27168], [67.2224, 37.24545], [67.2581, 37.17216], [67.51868, 37.26102], [67.78329, 37.1834], [67.8474, 37.31594], [67.81566, 37.43107], [68.12635, 37.93], [68.27159, 37.91477], [68.40343, 38.19484], [68.13289, 38.40822], [68.06274, 38.39435], [68.11366, 38.47169], [68.05873, 38.56087], [68.0807, 38.64136], [68.05598, 38.71641], [68.12877, 38.73677], [68.06948, 38.82115], [68.19743, 38.85985], [68.09704, 39.02589], [67.68915, 39.00775], [67.67833, 39.14479], [67.33226, 39.23739], [67.36522, 39.31287], [67.45998, 39.315], [67.46822, 39.46146], [67.39681, 39.52505], [67.46547, 39.53564], [67.44899, 39.57799], [67.62889, 39.60234], [67.70992, 39.66156], [68.12053, 39.56317], [68.54166, 39.53929], [68.61972, 39.68905], [68.63071, 39.85265], [68.88889, 39.87163], [68.93695, 39.91167], [68.84906, 40.04952], [68.96579, 40.06949], [69.01935, 40.11466], [69.01523, 40.15771], [68.62796, 40.07789], [68.52771, 40.11676], [68.5332, 40.14826], [68.77902, 40.20492], [68.79276, 40.17555], [68.84357, 40.18604], [68.85832, 40.20885], [69.04544, 40.22904], [69.15659, 40.2162], [69.2074, 40.21488], [69.30448, 40.18774], [69.30104, 40.24502], [69.25229, 40.26362], [69.24817, 40.30357], [69.30808, 40.2821], [69.32833, 40.29794], [69.33794, 40.34819], [69.30774, 40.36102], [69.28525, 40.41894], [69.27066, 40.49274], [69.21063, 40.54469], [69.2643, 40.57506], [69.3455, 40.57988], [69.32834, 40.70233], [69.38327, 40.7918], [69.53021, 40.77621], [69.59441, 40.70181], [69.69434, 40.62615], [70.36655, 40.90296], [70.38028, 41.02014], [70.45251, 41.04438], [70.80009, 40.72825], [70.49871, 40.52503], [70.32626, 40.45174], [70.37511, 40.38605], [70.57149, 40.3442], [70.56394, 40.26421], [70.62342, 40.17396], [70.8607, 40.217], [70.9818, 40.22392], [70.95789, 40.28761], [71.05901, 40.28765], [71.13042, 40.34106], [71.36663, 40.31593], [71.4246, 40.28619], [71.51215, 40.26943], [71.51549, 40.22986], [71.61725, 40.20615], [71.61931, 40.26775], [71.68386, 40.26984], [71.70569, 40.20391], [71.69621, 40.18492], [71.71719, 40.17886], [71.73054, 40.14818], [71.82646, 40.21872], [71.85002, 40.25647], [72.05464, 40.27586], [71.96401, 40.31907], [72.18648, 40.49893], [72.24368, 40.46091], [72.40346, 40.4007], [72.44191, 40.48222], [72.41513, 40.50856], [72.38384, 40.51535], [72.41714, 40.55736], [72.34406, 40.60144], [72.40517, 40.61917], [72.47795, 40.5532], [72.66713, 40.5219], [72.66713, 40.59076], [72.69579, 40.59778], [72.73995, 40.58409], [72.74768, 40.58051], [72.74862, 40.57131], [72.75982, 40.57273], [72.74894, 40.59592], [72.74866, 40.60873], [72.80137, 40.67856], [72.84754, 40.67229], [72.85372, 40.7116], [72.8722, 40.71111], [72.93296, 40.73089], [72.99133, 40.76457], [73.0612, 40.76678], [73.13412, 40.79122], [73.13267, 40.83512], [73.01869, 40.84681], [72.94454, 40.8094], [72.84291, 40.85512], [72.68157, 40.84942], [72.59136, 40.86947], [72.55109, 40.96046], [72.48742, 40.97136], [72.45206, 41.03018], [72.38511, 41.02785], [72.36138, 41.04384], [72.34757, 41.06104], [72.34026, 41.04539], [72.324, 41.03381], [72.18339, 40.99571], [72.17594, 41.02377], [72.21061, 41.05607], [72.1792, 41.10621], [72.14864, 41.13363], [72.17594, 41.15522], [72.16433, 41.16483], [72.10745, 41.15483], [72.07249, 41.11739], [71.85964, 41.19081], [71.91457, 41.2982], [71.83914, 41.3546], [71.76625, 41.4466], [71.71132, 41.43012], [71.73054, 41.54713], [71.65914, 41.49599], [71.6787, 41.42111], [71.57227, 41.29175], [71.46688, 41.31883], [71.43814, 41.19644], [71.46148, 41.13958], [71.40198, 41.09436], [71.34877, 41.16807], [71.27187, 41.11015], [71.25813, 41.18796], [71.11806, 41.15359], [71.02193, 41.19494], [70.9615, 41.16393], [70.86263, 41.23833], [70.77885, 41.24813], [70.78572, 41.36419], [70.67586, 41.47953], [70.48909, 41.40335], [70.17682, 41.5455], [70.69777, 41.92554], [71.28719, 42.18033], [71.13263, 42.28356], [70.94483, 42.26238], [69.49545, 41.545], [69.45751, 41.56863], [69.39485, 41.51518], [69.45081, 41.46246], [69.37468, 41.46555], [69.35554, 41.47211], [69.29778, 41.43673], [69.25059, 41.46693], [69.23332, 41.45847], [69.22671, 41.46298], [69.20439, 41.45391], [69.18528, 41.45175], [69.17701, 41.43769], [69.15137, 41.43078], [69.05006, 41.36183], [69.01308, 41.22804], [68.7217, 41.05025], [68.73945, 40.96989], [68.65662, 40.93861], [68.62221, 41.03019], [68.49983, 40.99669], [68.58444, 40.91447], [68.63, 40.59358], [68.49983, 40.56437], [67.96736, 40.83798], [68.1271, 41.0324], [68.08273, 41.08148], [67.98511, 41.02794], [67.9644, 41.14611], [66.69129, 41.1311], [66.53302, 41.87388], [66.00546, 41.94455], [66.09482, 42.93426], [65.85194, 42.85481]], [[70.68112, 40.90612], [70.6721, 40.90555], [70.57501, 40.98941], [70.54223, 40.98787], [70.56077, 41.00642], [70.6158, 40.97661], [70.68112, 40.90612]]], [[[71.21139, 40.03369], [71.12218, 40.03052], [71.06305, 40.1771], [71.00236, 40.18154], [71.01035, 40.05481], [71.11037, 40.01984], [71.11668, 39.99291], [71.09063, 39.99], [71.10501, 39.95568], [71.04979, 39.89808], [71.10531, 39.91354], [71.16101, 39.88423], [71.23067, 39.93581], [71.1427, 39.95026], [71.21139, 40.03369]]], [[[71.86463, 39.98598], [71.78838, 40.01404], [71.71511, 39.96348], [71.7504, 39.93701], [71.84316, 39.95582], [71.86463, 39.98598]]]] } },
-    { type: "Feature", properties: { iso1A2: "VA", iso1A3: "VAT", iso1N3: "336", wikidata: "Q237", nameEn: "Vatican City", aliases: ["Holy See"], groups: ["039", "150"], callingCodes: ["379", "39 06"] }, geometry: { type: "MultiPolygon", coordinates: [[[[12.45181, 41.90056], [12.45446, 41.90028], [12.45435, 41.90143], [12.45626, 41.90172], [12.45691, 41.90125], [12.4577, 41.90115], [12.45834, 41.90174], [12.45826, 41.90281], [12.45755, 41.9033], [12.45762, 41.9058], [12.45561, 41.90629], [12.45543, 41.90738], [12.45091, 41.90625], [12.44984, 41.90545], [12.44815, 41.90326], [12.44582, 41.90194], [12.44834, 41.90095], [12.45181, 41.90056]]]] } },
-    { type: "Feature", properties: { iso1A2: "VC", iso1A3: "VCT", iso1N3: "670", wikidata: "Q757", nameEn: "St. Vincent and the Grenadines", aliases: ["WV"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 784"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.64026, 12.69984], [-59.94058, 12.34011], [-61.69315, 14.26451], [-62.64026, 12.69984]]]] } },
-    { type: "Feature", properties: { iso1A2: "VE", iso1A3: "VEN", iso1N3: "862", wikidata: "Q717", nameEn: "Venezuela", aliases: ["YV"], groups: ["005", "419", "019", "UN"], callingCodes: ["58"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.22331, 13.01387], [-70.92579, 11.96275], [-71.3275, 11.85], [-71.9675, 11.65536], [-72.24983, 11.14138], [-72.4767, 11.1117], [-72.88002, 10.44309], [-72.98085, 9.85253], [-73.36905, 9.16636], [-73.02119, 9.27584], [-72.94052, 9.10663], [-72.77415, 9.10165], [-72.65474, 8.61428], [-72.4042, 8.36513], [-72.36987, 8.19976], [-72.35163, 8.01163], [-72.39137, 8.03534], [-72.47213, 7.96106], [-72.48801, 7.94329], [-72.48183, 7.92909], [-72.47042, 7.92306], [-72.45806, 7.91141], [-72.46183, 7.90682], [-72.44454, 7.86031], [-72.46763, 7.79518], [-72.47827, 7.65604], [-72.45321, 7.57232], [-72.47415, 7.48928], [-72.43132, 7.40034], [-72.19437, 7.37034], [-72.04895, 7.03837], [-71.82441, 7.04314], [-71.44118, 7.02116], [-71.42212, 7.03854], [-71.37234, 7.01588], [-71.03941, 6.98163], [-70.7596, 7.09799], [-70.10716, 6.96516], [-69.41843, 6.1072], [-67.60654, 6.2891], [-67.4625, 6.20625], [-67.43513, 5.98835], [-67.58558, 5.84537], [-67.63914, 5.64963], [-67.59141, 5.5369], [-67.83341, 5.31104], [-67.85358, 4.53249], [-67.62671, 3.74303], [-67.50067, 3.75812], [-67.30945, 3.38393], [-67.85862, 2.86727], [-67.85862, 2.79173], [-67.65696, 2.81691], [-67.21967, 2.35778], [-66.85795, 1.22998], [-66.28507, 0.74585], [-65.6727, 1.01353], [-65.50158, 0.92086], [-65.57288, 0.62856], [-65.11657, 1.12046], [-64.38932, 1.5125], [-64.34654, 1.35569], [-64.08274, 1.64792], [-64.06135, 1.94722], [-63.39827, 2.16098], [-63.39114, 2.4317], [-64.0257, 2.48156], [-64.02908, 2.79797], [-64.48379, 3.7879], [-64.84028, 4.24665], [-64.72977, 4.28931], [-64.57648, 4.12576], [-64.14512, 4.12932], [-63.99183, 3.90172], [-63.86082, 3.94796], [-63.70218, 3.91417], [-63.67099, 4.01731], [-63.50611, 3.83592], [-63.42233, 3.89995], [-63.4464, 3.9693], [-63.21111, 3.96219], [-62.98296, 3.59935], [-62.7655, 3.73099], [-62.74411, 4.03331], [-62.57656, 4.04754], [-62.44822, 4.18621], [-62.13094, 4.08309], [-61.54629, 4.2822], [-61.48569, 4.43149], [-61.29675, 4.44216], [-61.31457, 4.54167], [-61.15703, 4.49839], [-60.98303, 4.54167], [-60.86539, 4.70512], [-60.5802, 4.94312], [-60.73204, 5.20931], [-61.4041, 5.95304], [-61.15058, 6.19558], [-61.20762, 6.58174], [-61.13632, 6.70922], [-60.54873, 6.8631], [-60.39419, 6.94847], [-60.28074, 7.1162], [-60.44116, 7.20817], [-60.54098, 7.14804], [-60.63367, 7.25061], [-60.59802, 7.33194], [-60.71923, 7.55817], [-60.64793, 7.56877], [-60.51959, 7.83373], [-60.38056, 7.8302], [-60.02407, 8.04557], [-59.97059, 8.20791], [-59.83156, 8.23261], [-59.80661, 8.28906], [-59.85562, 8.35213], [-59.98508, 8.53046], [-59.54058, 8.6862], [-60.89962, 9.81445], [-62.08693, 10.04435], [-61.62505, 11.18974], [-63.73917, 11.92623], [-63.19938, 16.44103], [-67.89186, 12.4116], [-68.01417, 11.77722], [-68.33524, 11.78151], [-68.99639, 11.79035], [-71.22331, 13.01387]]]] } },
-    { type: "Feature", properties: { iso1A2: "VG", iso1A3: "VGB", iso1N3: "092", wikidata: "Q25305", nameEn: "British Virgin Islands", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 284"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-64.47127, 17.55688], [-63.88746, 19.15706], [-65.02435, 18.73231], [-64.86027, 18.39056], [-64.64673, 18.36549], [-64.47127, 17.55688]]]] } },
-    { type: "Feature", properties: { iso1A2: "VI", iso1A3: "VIR", iso1N3: "850", wikidata: "Q11703", nameEn: "United States Virgin Islands", aliases: ["US-VI"], country: "US", groups: ["Q1352230", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 340"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-65.02435, 18.73231], [-65.27974, 17.56928], [-64.47127, 17.55688], [-64.64673, 18.36549], [-64.86027, 18.39056], [-65.02435, 18.73231]]]] } },
-    { type: "Feature", properties: { iso1A2: "VN", iso1A3: "VNM", iso1N3: "704", wikidata: "Q881", nameEn: "Vietnam", groups: ["035", "142", "UN"], callingCodes: ["84"] }, geometry: { type: "MultiPolygon", coordinates: [[[[108.10003, 21.47338], [108.0569, 21.53604], [108.02926, 21.54997], [107.97932, 21.54503], [107.97383, 21.53961], [107.97074, 21.54072], [107.96774, 21.53601], [107.95232, 21.5388], [107.92652, 21.58906], [107.90006, 21.5905], [107.86114, 21.65128], [107.80355, 21.66141], [107.66967, 21.60787], [107.56537, 21.61945], [107.54047, 21.5934], [107.49065, 21.59774], [107.49532, 21.62958], [107.47197, 21.6672], [107.41593, 21.64839], [107.38636, 21.59774], [107.35989, 21.60063], [107.35834, 21.6672], [107.29296, 21.74674], [107.24625, 21.7077], [107.20734, 21.71493], [107.10771, 21.79879], [107.02615, 21.81981], [107.00964, 21.85948], [107.06101, 21.88982], [107.05634, 21.92303], [106.99252, 21.95191], [106.97228, 21.92592], [106.92714, 21.93459], [106.9178, 21.97357], [106.81038, 21.97934], [106.74345, 22.00965], [106.72551, 21.97923], [106.69276, 21.96013], [106.68274, 21.99811], [106.70142, 22.02409], [106.6983, 22.15102], [106.67495, 22.1885], [106.69986, 22.22309], [106.6516, 22.33977], [106.55976, 22.34841], [106.57221, 22.37], [106.55665, 22.46498], [106.58395, 22.474], [106.61269, 22.60301], [106.65316, 22.5757], [106.71698, 22.58432], [106.72321, 22.63606], [106.76293, 22.73491], [106.82404, 22.7881], [106.83685, 22.8098], [106.81271, 22.8226], [106.78422, 22.81532], [106.71128, 22.85982], [106.71387, 22.88296], [106.6734, 22.89587], [106.6516, 22.86862], [106.60179, 22.92884], [106.55976, 22.92311], [106.51306, 22.94891], [106.49749, 22.91164], [106.34961, 22.86718], [106.27022, 22.87722], [106.19705, 22.98475], [106.00179, 22.99049], [105.99568, 22.94178], [105.90119, 22.94168], [105.8726, 22.92756], [105.72382, 23.06641], [105.57594, 23.075], [105.56037, 23.16806], [105.49966, 23.20669], [105.42805, 23.30824], [105.40782, 23.28107], [105.32376, 23.39684], [105.22569, 23.27249], [105.17276, 23.28679], [105.11672, 23.25247], [105.07002, 23.26248], [104.98712, 23.19176], [104.96532, 23.20463], [104.9486, 23.17235], [104.91435, 23.18666], [104.87992, 23.17141], [104.87382, 23.12854], [104.79478, 23.12934], [104.8334, 23.01484], [104.86765, 22.95178], [104.84942, 22.93631], [104.77114, 22.90017], [104.72755, 22.81984], [104.65283, 22.83419], [104.60457, 22.81841], [104.58122, 22.85571], [104.47225, 22.75813], [104.35593, 22.69353], [104.25683, 22.76534], [104.27084, 22.8457], [104.11384, 22.80363], [104.03734, 22.72945], [104.01088, 22.51823], [103.99247, 22.51958], [103.97384, 22.50634], [103.96783, 22.51173], [103.96352, 22.50584], [103.95191, 22.5134], [103.94513, 22.52553], [103.93286, 22.52703], [103.87904, 22.56683], [103.64506, 22.79979], [103.56255, 22.69499], [103.57812, 22.65764], [103.52675, 22.59155], [103.43646, 22.70648], [103.43179, 22.75816], [103.32282, 22.8127], [103.28079, 22.68063], [103.18895, 22.64471], [103.15782, 22.59873], [103.17961, 22.55705], [103.07843, 22.50097], [103.0722, 22.44775], [102.9321, 22.48659], [102.8636, 22.60735], [102.60675, 22.73376], [102.57095, 22.7036], [102.51802, 22.77969], [102.46665, 22.77108], [102.42618, 22.69212], [102.38415, 22.67919], [102.41061, 22.64184], [102.25339, 22.4607], [102.26428, 22.41321], [102.16621, 22.43336], [102.14099, 22.40092], [102.18712, 22.30403], [102.51734, 22.02676], [102.49092, 21.99002], [102.62301, 21.91447], [102.67145, 21.65894], [102.74189, 21.66713], [102.82115, 21.73667], [102.81894, 21.83888], [102.85637, 21.84501], [102.86077, 21.71213], [102.97965, 21.74076], [102.98846, 21.58936], [102.86297, 21.4255], [102.94223, 21.46034], [102.88939, 21.3107], [102.80794, 21.25736], [102.89825, 21.24707], [102.97745, 21.05821], [103.03469, 21.05821], [103.12055, 20.89994], [103.21497, 20.89832], [103.38032, 20.79501], [103.45737, 20.82382], [103.68633, 20.66324], [103.73478, 20.6669], [103.82282, 20.8732], [103.98024, 20.91531], [104.11121, 20.96779], [104.27412, 20.91433], [104.63957, 20.6653], [104.38199, 20.47155], [104.40621, 20.3849], [104.47886, 20.37459], [104.66158, 20.47774], [104.72102, 20.40554], [104.62195, 20.36633], [104.61315, 20.24452], [104.86852, 20.14121], [104.91695, 20.15567], [104.9874, 20.09573], [104.8465, 19.91783], [104.8355, 19.80395], [104.68359, 19.72729], [104.64837, 19.62365], [104.53169, 19.61743], [104.41281, 19.70035], [104.23229, 19.70242], [104.06498, 19.66926], [104.05617, 19.61743], [104.10832, 19.51575], [104.06058, 19.43484], [103.87125, 19.31854], [104.5361, 18.97747], [104.64617, 18.85668], [105.12829, 18.70453], [105.19654, 18.64196], [105.1327, 18.58355], [105.10408, 18.43533], [105.15942, 18.38691], [105.38366, 18.15315], [105.46292, 18.22008], [105.64784, 17.96687], [105.60381, 17.89356], [105.76612, 17.67147], [105.85744, 17.63221], [106.09019, 17.36399], [106.18991, 17.28227], [106.24444, 17.24714], [106.29287, 17.3018], [106.31929, 17.20509], [106.43597, 17.01362], [106.50862, 16.9673], [106.55045, 17.0031], [106.54824, 16.92729], [106.51963, 16.92097], [106.52183, 16.87884], [106.55265, 16.86831], [106.55485, 16.68704], [106.59013, 16.62259], [106.58267, 16.6012], [106.61477, 16.60713], [106.66052, 16.56892], [106.65832, 16.47816], [106.74418, 16.41904], [106.84104, 16.55415], [106.88727, 16.52671], [106.88067, 16.43594], [106.96638, 16.34938], [106.97385, 16.30204], [107.02597, 16.31132], [107.09091, 16.3092], [107.15035, 16.26271], [107.14595, 16.17816], [107.25822, 16.13587], [107.33968, 16.05549], [107.44975, 16.08511], [107.46296, 16.01106], [107.39471, 15.88829], [107.34188, 15.89464], [107.21419, 15.83747], [107.21859, 15.74638], [107.27143, 15.71459], [107.27583, 15.62769], [107.34408, 15.62345], [107.3815, 15.49832], [107.50699, 15.48771], [107.53341, 15.40496], [107.62367, 15.42193], [107.60605, 15.37524], [107.62587, 15.2266], [107.58844, 15.20111], [107.61926, 15.13949], [107.61486, 15.0566], [107.46516, 15.00982], [107.48277, 14.93751], [107.59285, 14.87795], [107.51579, 14.79282], [107.54361, 14.69092], [107.55371, 14.628], [107.52102, 14.59034], [107.52569, 14.54665], [107.48521, 14.40346], [107.44941, 14.41552], [107.39493, 14.32655], [107.40427, 14.24509], [107.33577, 14.11832], [107.37158, 14.07906], [107.35757, 14.02319], [107.38247, 13.99147], [107.44318, 13.99751], [107.46498, 13.91593], [107.45252, 13.78897], [107.53503, 13.73908], [107.61909, 13.52577], [107.62843, 13.3668], [107.49144, 13.01215], [107.49611, 12.88926], [107.55993, 12.7982], [107.5755, 12.52177], [107.55059, 12.36824], [107.4463, 12.29373], [107.42917, 12.24657], [107.34511, 12.33327], [107.15831, 12.27547], [106.99953, 12.08983], [106.92325, 12.06548], [106.79405, 12.0807], [106.70687, 11.96956], [106.4111, 11.97413], [106.4687, 11.86751], [106.44068, 11.86294], [106.44535, 11.8279], [106.41577, 11.76999], [106.45158, 11.68616], [106.44691, 11.66787], [106.37219, 11.69836], [106.30525, 11.67549], [106.26478, 11.72122], [106.18539, 11.75171], [106.13158, 11.73283], [106.06708, 11.77761], [106.02038, 11.77457], [106.00792, 11.7197], [105.95188, 11.63738], [105.88962, 11.67854], [105.8507, 11.66635], [105.80867, 11.60536], [105.81645, 11.56876], [105.87328, 11.55953], [105.88962, 11.43605], [105.86782, 11.28343], [106.10444, 11.07879], [106.1527, 11.10476], [106.1757, 11.07301], [106.20095, 10.97795], [106.14301, 10.98176], [106.18539, 10.79451], [106.06708, 10.8098], [105.94535, 10.9168], [105.93403, 10.83853], [105.84603, 10.85873], [105.86376, 10.89839], [105.77751, 11.03671], [105.50045, 10.94586], [105.42884, 10.96878], [105.34011, 10.86179], [105.11449, 10.96332], [105.08326, 10.95656], [105.02722, 10.89236], [105.09571, 10.72722], [104.95094, 10.64003], [104.87933, 10.52833], [104.59018, 10.53073], [104.49869, 10.4057], [104.47963, 10.43046], [104.43778, 10.42386], [103.99198, 10.48391], [102.47649, 9.66162], [104.81582, 8.03101], [109.55486, 8.10026], [111.60491, 13.57105], [108.00365, 17.98159], [108.10003, 21.47338]]]] } },
-    { type: "Feature", properties: { iso1A2: "VU", iso1A3: "VUT", iso1N3: "548", wikidata: "Q686", nameEn: "Vanuatu", groups: ["054", "009", "UN"], callingCodes: ["678"] }, geometry: { type: "MultiPolygon", coordinates: [[[[156.73836, -14.50464], [174.245, -23.1974], [172.71443, -12.01327], [156.73836, -14.50464]]]] } },
-    { type: "Feature", properties: { iso1A2: "WF", iso1A3: "WLF", iso1N3: "876", wikidata: "Q35555", nameEn: "Wallis and Futuna", country: "FR", groups: ["EU", "Q1451600", "061", "009", "UN"], callingCodes: ["681"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-178.66551, -14.32452], [-176.76826, -14.95183], [-175.59809, -12.61507], [-178.66551, -14.32452]]]] } },
-    { type: "Feature", properties: { iso1A2: "WS", iso1A3: "WSM", iso1N3: "882", wikidata: "Q683", nameEn: "Samoa", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["685"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-173.74402, -14.26669], [-170.99605, -15.1275], [-171.39864, -10.21587], [-173.74402, -14.26669]]]] } },
-    { type: "Feature", properties: { iso1A2: "XK", iso1A3: "XKX", wikidata: "Q1246", nameEn: "Kosovo", aliases: ["KV"], groups: ["039", "150"], isoStatus: "usrAssn", callingCodes: ["383"] }, geometry: { type: "MultiPolygon", coordinates: [[[[21.39045, 42.74888], [21.44047, 42.87276], [21.36941, 42.87397], [21.32974, 42.90424], [21.2719, 42.8994], [21.23534, 42.95523], [21.23877, 43.00848], [21.2041, 43.02277], [21.16734, 42.99694], [21.14465, 43.11089], [21.08952, 43.13471], [21.05378, 43.10707], [21.00749, 43.13984], [20.96287, 43.12416], [20.83727, 43.17842], [20.88685, 43.21697], [20.82145, 43.26769], [20.73811, 43.25068], [20.68688, 43.21335], [20.59929, 43.20492], [20.69515, 43.09641], [20.64557, 43.00826], [20.59929, 43.01067], [20.48692, 42.93208], [20.53484, 42.8885], [20.43734, 42.83157], [20.40594, 42.84853], [20.35692, 42.8335], [20.27869, 42.81945], [20.2539, 42.76245], [20.04898, 42.77701], [20.02088, 42.74789], [20.02915, 42.71147], [20.0969, 42.65559], [20.07761, 42.55582], [20.17127, 42.50469], [20.21797, 42.41237], [20.24399, 42.32168], [20.34479, 42.32656], [20.3819, 42.3029], [20.48857, 42.25444], [20.56955, 42.12097], [20.55633, 42.08173], [20.59434, 42.03879], [20.63069, 41.94913], [20.57946, 41.91593], [20.59524, 41.8818], [20.68523, 41.85318], [20.76786, 41.91839], [20.75464, 42.05229], [21.11491, 42.20794], [21.16614, 42.19815], [21.22728, 42.08909], [21.31983, 42.10993], [21.29913, 42.13954], [21.30496, 42.1418], [21.38428, 42.24465], [21.43882, 42.23609], [21.43882, 42.2789], [21.50823, 42.27156], [21.52145, 42.24465], [21.58992, 42.25915], [21.56772, 42.30946], [21.5264, 42.33634], [21.53467, 42.36809], [21.57021, 42.3647], [21.59029, 42.38042], [21.62887, 42.37664], [21.64209, 42.41081], [21.62556, 42.45106], [21.7035, 42.51899], [21.70522, 42.54176], [21.7327, 42.55041], [21.75672, 42.62695], [21.79413, 42.65923], [21.75025, 42.70125], [21.6626, 42.67813], [21.58755, 42.70418], [21.59154, 42.72643], [21.47498, 42.74695], [21.39045, 42.74888]]]] } },
-    { type: "Feature", properties: { iso1A2: "YE", iso1A3: "YEM", iso1N3: "887", wikidata: "Q805", nameEn: "Yemen", groups: ["145", "142", "UN"], callingCodes: ["967"] }, geometry: { type: "MultiPolygon", coordinates: [[[[57.49095, 8.14549], [52.81185, 17.28568], [52.74267, 17.29519], [52.78009, 17.35124], [52.00311, 19.00083], [49.04884, 18.59899], [48.19996, 18.20584], [47.58351, 17.50366], [47.48245, 17.10808], [47.00571, 16.94765], [46.76494, 17.29151], [46.31018, 17.20464], [44.50126, 17.47475], [43.70631, 17.35762], [43.43005, 17.56148], [43.29185, 17.53224], [43.22533, 17.38343], [43.32653, 17.31179], [43.20156, 17.25901], [43.17787, 17.14717], [43.23967, 17.03428], [43.18233, 17.02673], [43.1813, 16.98438], [43.19328, 16.94703], [43.1398, 16.90696], [43.18338, 16.84852], [43.22012, 16.83932], [43.22956, 16.80613], [43.24801, 16.80613], [43.26303, 16.79479], [43.25857, 16.75304], [43.21325, 16.74416], [43.22066, 16.65179], [43.15274, 16.67248], [43.11601, 16.53166], [42.97215, 16.51093], [42.94351, 16.49467], [42.94625, 16.39721], [42.76801, 16.40371], [42.15205, 16.40211], [40.99158, 15.81743], [43.29075, 12.79154], [43.32909, 12.59711], [43.90659, 12.3823], [51.12877, 12.56479], [57.49095, 8.14549]]]] } },
-    { type: "Feature", properties: { iso1A2: "YT", iso1A3: "MYT", iso1N3: "175", wikidata: "Q17063", nameEn: "Mayotte", country: "FR", groups: ["Q3320166", "EU", "014", "202", "002", "UN"], callingCodes: ["262"] }, geometry: { type: "MultiPolygon", coordinates: [[[[43.28731, -13.97126], [45.54824, -13.22353], [45.4971, -11.75965], [43.28731, -13.97126]]]] } },
-    { type: "Feature", properties: { iso1A2: "ZA", iso1A3: "ZAF", iso1N3: "710", wikidata: "Q258", nameEn: "South Africa", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["27"] }, geometry: { type: "MultiPolygon", coordinates: [[[[31.30611, -22.422], [31.16344, -22.32599], [31.08932, -22.34884], [30.86696, -22.28907], [30.6294, -22.32599], [30.48686, -22.31368], [30.38614, -22.34533], [30.28351, -22.35587], [30.2265, -22.2961], [30.13147, -22.30841], [29.92242, -22.19408], [29.76848, -22.14128], [29.64609, -22.12917], [29.37703, -22.19581], [29.21955, -22.17771], [29.18974, -22.18599], [29.15268, -22.21399], [29.10881, -22.21202], [29.0151, -22.22907], [28.91889, -22.44299], [28.63287, -22.55887], [28.34874, -22.5694], [28.04562, -22.8394], [28.04752, -22.90243], [27.93729, -22.96194], [27.93539, -23.04941], [27.74154, -23.2137], [27.6066, -23.21894], [27.52393, -23.37952], [27.33768, -23.40917], [26.99749, -23.65486], [26.84165, -24.24885], [26.51667, -24.47219], [26.46346, -24.60358], [26.39409, -24.63468], [25.8515, -24.75727], [25.84295, -24.78661], [25.88571, -24.87802], [25.72702, -25.25503], [25.69661, -25.29284], [25.6643, -25.4491], [25.58543, -25.6343], [25.33076, -25.76616], [25.12266, -25.75931], [25.01718, -25.72507], [24.8946, -25.80723], [24.67319, -25.81749], [24.44703, -25.73021], [24.36531, -25.773], [24.18287, -25.62916], [23.9244, -25.64286], [23.47588, -25.29971], [23.03497, -25.29971], [22.86012, -25.50572], [22.70808, -25.99186], [22.56365, -26.19668], [22.41921, -26.23078], [22.21206, -26.3773], [22.06192, -26.61882], [21.90703, -26.66808], [21.83291, -26.65959], [21.77114, -26.69015], [21.7854, -26.79199], [21.69322, -26.86152], [21.37869, -26.82083], [21.13353, -26.86661], [20.87031, -26.80047], [20.68596, -26.9039], [20.63275, -26.78181], [20.61754, -26.4692], [20.86081, -26.14892], [20.64795, -25.47827], [20.29826, -24.94869], [20.03678, -24.81004], [20.02809, -24.78725], [19.99817, -24.76768], [19.99882, -28.42622], [18.99885, -28.89165], [17.4579, -28.68718], [17.15405, -28.08573], [16.90446, -28.057], [16.59922, -28.53246], [16.46592, -28.57126], [16.45332, -28.63117], [12.51595, -32.27486], [38.88176, -48.03306], [34.51034, -26.91792], [32.35222, -26.86027], [32.29584, -26.852], [32.22302, -26.84136], [32.19409, -26.84032], [32.13315, -26.84345], [32.09664, -26.80721], [32.00893, -26.8096], [31.97463, -27.11057], [31.97592, -27.31675], [31.49834, -27.31549], [31.15027, -27.20151], [30.96088, -27.0245], [30.97757, -26.92706], [30.88826, -26.79622], [30.81101, -26.84722], [30.78927, -26.48271], [30.95819, -26.26303], [31.13073, -25.91558], [31.31237, -25.7431], [31.4175, -25.71886], [31.86881, -25.99973], [31.974, -25.95387], [31.92649, -25.84216], [32.00631, -25.65044], [31.97875, -25.46356], [32.01676, -25.38117], [32.03196, -25.10785], [31.9835, -24.29983], [31.90368, -24.18892], [31.87707, -23.95293], [31.77445, -23.90082], [31.70223, -23.72695], [31.67942, -23.60858], [31.56539, -23.47268], [31.55779, -23.176], [31.30611, -22.422]], [[29.33204, -29.45598], [29.28545, -29.58456], [29.12553, -29.76266], [29.16548, -29.91706], [28.9338, -30.05072], [28.80222, -30.10579], [28.68627, -30.12885], [28.399, -30.1592], [28.2319, -30.28476], [28.12073, -30.68072], [27.74814, -30.60635], [27.69467, -30.55862], [27.67819, -30.53437], [27.6521, -30.51707], [27.62137, -30.50509], [27.56781, -30.44562], [27.56901, -30.42504], [27.45452, -30.32239], [27.38108, -30.33456], [27.36649, -30.27246], [27.37293, -30.19401], [27.40778, -30.14577], [27.32555, -30.14785], [27.29603, -30.05473], [27.22719, -30.00718], [27.09489, -29.72796], [27.01016, -29.65439], [27.33464, -29.48161], [27.4358, -29.33465], [27.47254, -29.31968], [27.45125, -29.29708], [27.48679, -29.29349], [27.54258, -29.25575], [27.5158, -29.2261], [27.55974, -29.18954], [27.75458, -28.89839], [27.8907, -28.91612], [27.88933, -28.88156], [27.9392, -28.84864], [27.98675, -28.8787], [28.02503, -28.85991], [28.1317, -28.7293], [28.2348, -28.69471], [28.30518, -28.69531], [28.40612, -28.6215], [28.65091, -28.57025], [28.68043, -28.58744], [29.40524, -29.21246], [29.44883, -29.3772], [29.33204, -29.45598]]]] } },
-    { type: "Feature", properties: { iso1A2: "ZM", iso1A3: "ZMB", iso1N3: "894", wikidata: "Q953", nameEn: "Zambia", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["260"] }, geometry: { type: "MultiPolygon", coordinates: [[[[32.95389, -9.40138], [32.76233, -9.31963], [32.75611, -9.28583], [32.53661, -9.24281], [32.49147, -9.14754], [32.43543, -9.11988], [32.25486, -9.13371], [32.16146, -9.05993], [32.08206, -9.04609], [31.98866, -9.07069], [31.94196, -9.02303], [31.94663, -8.93846], [31.81587, -8.88618], [31.71158, -8.91386], [31.57147, -8.81388], [31.57147, -8.70619], [31.37533, -8.60769], [31.00796, -8.58615], [30.79243, -8.27382], [28.88917, -8.4831], [28.9711, -8.66935], [28.38526, -9.23393], [28.36562, -9.30091], [28.52636, -9.35379], [28.51627, -9.44726], [28.56208, -9.49122], [28.68532, -9.78], [28.62795, -9.92942], [28.65032, -10.65133], [28.37241, -11.57848], [28.48357, -11.87532], [29.18592, -12.37921], [29.4992, -12.43843], [29.48404, -12.23604], [29.8139, -12.14898], [29.81551, -13.44683], [29.65078, -13.41844], [29.60531, -13.21685], [29.01918, -13.41353], [28.33199, -12.41375], [27.59932, -12.22123], [27.21025, -11.76157], [27.22541, -11.60323], [27.04351, -11.61312], [26.88687, -12.01868], [26.01777, -11.91488], [25.33058, -11.65767], [25.34069, -11.19707], [24.42612, -11.44975], [24.34528, -11.06816], [24.00027, -10.89356], [24.02603, -11.15368], [23.98804, -12.13149], [24.06672, -12.29058], [23.90937, -12.844], [24.03339, -12.99091], [21.97988, -13.00148], [22.00323, -16.18028], [22.17217, -16.50269], [23.20038, -17.47563], [23.47474, -17.62877], [24.23619, -17.47489], [24.32811, -17.49082], [24.38712, -17.46818], [24.5621, -17.52963], [24.70864, -17.49501], [25.00198, -17.58221], [25.26433, -17.79571], [25.51646, -17.86232], [25.6827, -17.81987], [25.85738, -17.91403], [25.85892, -17.97726], [26.08925, -17.98168], [26.0908, -17.93021], [26.21601, -17.88608], [26.55918, -17.99638], [26.68403, -18.07411], [26.74314, -18.0199], [26.89926, -17.98756], [27.14196, -17.81398], [27.30736, -17.60487], [27.61377, -17.34378], [27.62795, -17.24365], [27.83141, -16.96274], [28.73725, -16.5528], [28.76199, -16.51575], [28.81454, -16.48611], [28.8501, -16.04537], [28.9243, -15.93987], [29.01298, -15.93805], [29.21955, -15.76589], [29.4437, -15.68702], [29.8317, -15.6126], [30.35574, -15.6513], [30.41902, -15.62269], [30.22098, -14.99447], [33.24249, -14.00019], [33.16749, -13.93992], [33.07568, -13.98447], [33.02977, -14.05022], [32.99042, -13.95689], [32.88985, -13.82956], [32.79015, -13.80755], [32.76962, -13.77224], [32.84528, -13.71576], [32.7828, -13.64805], [32.68654, -13.64268], [32.66468, -13.60019], [32.68436, -13.55769], [32.73683, -13.57682], [32.84176, -13.52794], [32.86113, -13.47292], [33.0078, -13.19492], [32.98289, -13.12671], [33.02181, -12.88707], [32.96733, -12.88251], [32.94397, -12.76868], [33.05917, -12.59554], [33.18837, -12.61377], [33.28177, -12.54692], [33.37517, -12.54085], [33.54485, -12.35996], [33.47636, -12.32498], [33.3705, -12.34931], [33.25998, -12.14242], [33.33937, -11.91252], [33.32692, -11.59248], [33.24252, -11.59302], [33.23663, -11.40637], [33.29267, -11.43536], [33.29267, -11.3789], [33.39697, -11.15296], [33.25998, -10.88862], [33.28022, -10.84428], [33.47636, -10.78465], [33.70675, -10.56896], [33.54797, -10.36077], [33.53863, -10.20148], [33.31297, -10.05133], [33.37902, -9.9104], [33.36581, -9.81063], [33.31517, -9.82364], [33.2095, -9.61099], [33.12144, -9.58929], [33.10163, -9.66525], [33.05485, -9.61316], [33.00256, -9.63053], [33.00476, -9.5133], [32.95389, -9.40138]]]] } },
-    { type: "Feature", properties: { iso1A2: "ZW", iso1A3: "ZWE", iso1N3: "716", wikidata: "Q954", nameEn: "Zimbabwe", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["263"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.41902, -15.62269], [30.35574, -15.6513], [29.8317, -15.6126], [29.4437, -15.68702], [29.21955, -15.76589], [29.01298, -15.93805], [28.9243, -15.93987], [28.8501, -16.04537], [28.81454, -16.48611], [28.76199, -16.51575], [28.73725, -16.5528], [27.83141, -16.96274], [27.62795, -17.24365], [27.61377, -17.34378], [27.30736, -17.60487], [27.14196, -17.81398], [26.89926, -17.98756], [26.74314, -18.0199], [26.68403, -18.07411], [26.55918, -17.99638], [26.21601, -17.88608], [26.0908, -17.93021], [26.08925, -17.98168], [25.85892, -17.97726], [25.85738, -17.91403], [25.6827, -17.81987], [25.51646, -17.86232], [25.26433, -17.79571], [25.23909, -17.90832], [25.31799, -18.07091], [25.39972, -18.12691], [25.53465, -18.39041], [25.68859, -18.56165], [25.79217, -18.6355], [25.82353, -18.82808], [25.94326, -18.90362], [25.99837, -19.02943], [25.96226, -19.08152], [26.17227, -19.53709], [26.72246, -19.92707], [27.21278, -20.08244], [27.29831, -20.28935], [27.28865, -20.49873], [27.69361, -20.48531], [27.72972, -20.51735], [27.69171, -21.08409], [27.91407, -21.31621], [28.01669, -21.57624], [28.29416, -21.59037], [28.49942, -21.66634], [28.58114, -21.63455], [29.07763, -21.81877], [29.04023, -21.85864], [29.02191, -21.90647], [29.02191, -21.95665], [29.04108, -22.00563], [29.08495, -22.04867], [29.14501, -22.07275], [29.1974, -22.07472], [29.24648, -22.05967], [29.3533, -22.18363], [29.37703, -22.19581], [29.64609, -22.12917], [29.76848, -22.14128], [29.92242, -22.19408], [30.13147, -22.30841], [30.2265, -22.2961], [30.28351, -22.35587], [30.38614, -22.34533], [30.48686, -22.31368], [30.6294, -22.32599], [30.86696, -22.28907], [31.08932, -22.34884], [31.16344, -22.32599], [31.30611, -22.422], [31.38336, -22.36919], [32.41234, -21.31246], [32.48236, -21.32873], [32.37115, -21.133], [32.51644, -20.91929], [32.48122, -20.63319], [32.55167, -20.56312], [32.66174, -20.56106], [32.85987, -20.27841], [32.85987, -20.16686], [32.93032, -20.03868], [33.01178, -20.02007], [33.06461, -19.77787], [32.95013, -19.67219], [32.84666, -19.68462], [32.84446, -19.48343], [32.78282, -19.47513], [32.77966, -19.36098], [32.85107, -19.29238], [32.87088, -19.09279], [32.84006, -19.0262], [32.72118, -19.02204], [32.69917, -18.94293], [32.73439, -18.92628], [32.70137, -18.84712], [32.82465, -18.77419], [32.9017, -18.7992], [32.95013, -18.69079], [32.88629, -18.58023], [32.88629, -18.51344], [33.02278, -18.4696], [33.03159, -18.35054], [32.94133, -17.99705], [33.0492, -17.60298], [32.98536, -17.55891], [32.96554, -17.48964], [33.0426, -17.3468], [33.00517, -17.30477], [32.96554, -17.11971], [32.84113, -16.92259], [32.91051, -16.89446], [32.97655, -16.70689], [32.78943, -16.70267], [32.69917, -16.66893], [32.71017, -16.59932], [32.42838, -16.4727], [32.28529, -16.43892], [32.02772, -16.43892], [31.91324, -16.41569], [31.90223, -16.34388], [31.67988, -16.19595], [31.42451, -16.15154], [31.30563, -16.01193], [31.13171, -15.98019], [30.97761, -16.05848], [30.91597, -15.99924], [30.42568, -15.9962], [30.41902, -15.62269]]]] } }
-  ] };
-  var borders = borders_default;
-  var _whichPolygon = {};
-  var _featuresByCode = {};
-  var idFilterRegex = /(?=(?!^(and|the|of|el|la|de)$))(\b(and|the|of|el|la|de)\b)|[-_ .,'()&[\]/]/gi;
-  function canonicalID(id2) {
-    const s2 = id2 || "";
-    if (s2.charAt(0) === ".") {
-      return s2.toUpperCase();
+  // node_modules/d3-selection/src/selection/exit.js
+  function exit_default() {
+    return new Selection(this._exit || this._groups.map(sparse_default), this._parents);
+  }
+
+  // node_modules/d3-selection/src/selection/join.js
+  function join_default(onenter, onupdate, onexit) {
+    var enter = this.enter(), update = this, exit = this.exit();
+    if (typeof onenter === "function") {
+      enter = onenter(enter);
+      if (enter) enter = enter.selection();
     } else {
-      return s2.replace(idFilterRegex, "").toUpperCase();
+      enter = enter.append(onenter + "");
+    }
+    if (onupdate != null) {
+      update = onupdate(update);
+      if (update) update = update.selection();
+    }
+    if (onexit == null) exit.remove();
+    else onexit(exit);
+    return enter && update ? enter.merge(update).order() : update;
+  }
+
+  // node_modules/d3-selection/src/selection/merge.js
+  function merge_default(context) {
+    var selection2 = context.selection ? context.selection() : context;
+    for (var groups0 = this._groups, groups1 = selection2._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j2 = 0; j2 < m2; ++j2) {
+      for (var group0 = groups0[j2], group1 = groups1[j2], n3 = group0.length, merge2 = merges[j2] = new Array(n3), node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group0[i3] || group1[i3]) {
+          merge2[i3] = node;
+        }
+      }
+    }
+    for (; j2 < m0; ++j2) {
+      merges[j2] = groups0[j2];
+    }
+    return new Selection(merges, this._parents);
+  }
+
+  // node_modules/d3-selection/src/selection/order.js
+  function order_default() {
+    for (var groups = this._groups, j2 = -1, m2 = groups.length; ++j2 < m2; ) {
+      for (var group = groups[j2], i3 = group.length - 1, next = group[i3], node; --i3 >= 0; ) {
+        if (node = group[i3]) {
+          if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
+          next = node;
+        }
+      }
+    }
+    return this;
+  }
+
+  // node_modules/d3-selection/src/selection/sort.js
+  function sort_default(compare2) {
+    if (!compare2) compare2 = ascending2;
+    function compareNode(a2, b2) {
+      return a2 && b2 ? compare2(a2.__data__, b2.__data__) : !a2 - !b2;
+    }
+    for (var groups = this._groups, m2 = groups.length, sortgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, sortgroup = sortgroups[j2] = new Array(n3), node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group[i3]) {
+          sortgroup[i3] = node;
+        }
+      }
+      sortgroup.sort(compareNode);
     }
+    return new Selection(sortgroups, this._parents).order();
   }
-  var levels = [
-    "subterritory",
-    "territory",
-    "subcountryGroup",
-    "country",
-    "sharedLandform",
-    "intermediateRegion",
-    "subregion",
-    "region",
-    "subunion",
-    "union",
-    "unitedNations",
-    "world"
-  ];
-  loadDerivedDataAndCaches(borders);
-  function loadDerivedDataAndCaches(borders2) {
-    const identifierProps = ["iso1A2", "iso1A3", "m49", "wikidata", "emojiFlag", "ccTLD", "nameEn"];
-    let geometryFeatures = [];
-    for (const feature22 of borders2.features) {
-      const props = feature22.properties;
-      props.id = props.iso1A2 || props.m49 || props.wikidata;
-      loadM49(feature22);
-      loadTLD(feature22);
-      loadIsoStatus(feature22);
-      loadLevel(feature22);
-      loadGroups(feature22);
-      loadFlag(feature22);
-      cacheFeatureByIDs(feature22);
-      if (feature22.geometry) {
-        geometryFeatures.push(feature22);
+  function ascending2(a2, b2) {
+    return a2 < b2 ? -1 : a2 > b2 ? 1 : a2 >= b2 ? 0 : NaN;
+  }
+
+  // node_modules/d3-selection/src/selection/call.js
+  function call_default() {
+    var callback = arguments[0];
+    arguments[0] = this;
+    callback.apply(null, arguments);
+    return this;
+  }
+
+  // node_modules/d3-selection/src/selection/nodes.js
+  function nodes_default() {
+    return Array.from(this);
+  }
+
+  // node_modules/d3-selection/src/selection/node.js
+  function node_default() {
+    for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) {
+      for (var group = groups[j2], i3 = 0, n3 = group.length; i3 < n3; ++i3) {
+        var node = group[i3];
+        if (node) return node;
       }
     }
-    for (const feature22 of borders2.features) {
-      feature22.properties.groups = feature22.properties.groups.map((groupID) => {
-        return _featuresByCode[groupID].properties.id;
-      });
-      loadMembersForGroupsOf(feature22);
+    return null;
+  }
+
+  // node_modules/d3-selection/src/selection/size.js
+  function size_default() {
+    let size = 0;
+    for (const node of this) ++size;
+    return size;
+  }
+
+  // node_modules/d3-selection/src/selection/empty.js
+  function empty_default() {
+    return !this.node();
+  }
+
+  // node_modules/d3-selection/src/selection/each.js
+  function each_default(callback) {
+    for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) {
+      for (var group = groups[j2], i3 = 0, n3 = group.length, node; i3 < n3; ++i3) {
+        if (node = group[i3]) callback.call(node, node.__data__, i3, group);
+      }
     }
-    for (const feature22 of borders2.features) {
-      loadRoadSpeedUnit(feature22);
-      loadRoadHeightUnit(feature22);
-      loadDriveSide(feature22);
-      loadCallingCodes(feature22);
-      loadGroupGroups(feature22);
+    return this;
+  }
+
+  // node_modules/d3-selection/src/selection/attr.js
+  function attrRemove(name) {
+    return function() {
+      this.removeAttribute(name);
+    };
+  }
+  function attrRemoveNS(fullname) {
+    return function() {
+      this.removeAttributeNS(fullname.space, fullname.local);
+    };
+  }
+  function attrConstant(name, value) {
+    return function() {
+      this.setAttribute(name, value);
+    };
+  }
+  function attrConstantNS(fullname, value) {
+    return function() {
+      this.setAttributeNS(fullname.space, fullname.local, value);
+    };
+  }
+  function attrFunction(name, value) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      if (v2 == null) this.removeAttribute(name);
+      else this.setAttribute(name, v2);
+    };
+  }
+  function attrFunctionNS(fullname, value) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      if (v2 == null) this.removeAttributeNS(fullname.space, fullname.local);
+      else this.setAttributeNS(fullname.space, fullname.local, v2);
+    };
+  }
+  function attr_default(name, value) {
+    var fullname = namespace_default(name);
+    if (arguments.length < 2) {
+      var node = this.node();
+      return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);
     }
-    for (const feature22 of borders2.features) {
-      feature22.properties.groups.sort((groupID1, groupID2) => {
-        return levels.indexOf(_featuresByCode[groupID1].properties.level) - levels.indexOf(_featuresByCode[groupID2].properties.level);
-      });
-      if (feature22.properties.members) {
-        feature22.properties.members.sort((id1, id2) => {
-          const diff = levels.indexOf(_featuresByCode[id1].properties.level) - levels.indexOf(_featuresByCode[id2].properties.level);
-          if (diff === 0) {
-            return borders2.features.indexOf(_featuresByCode[id1]) - borders2.features.indexOf(_featuresByCode[id2]);
+    return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value));
+  }
+
+  // node_modules/d3-selection/src/window.js
+  function window_default(node) {
+    return node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView;
+  }
+
+  // node_modules/d3-selection/src/selection/style.js
+  function styleRemove(name) {
+    return function() {
+      this.style.removeProperty(name);
+    };
+  }
+  function styleConstant(name, value, priority) {
+    return function() {
+      this.style.setProperty(name, value, priority);
+    };
+  }
+  function styleFunction(name, value, priority) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      if (v2 == null) this.style.removeProperty(name);
+      else this.style.setProperty(name, v2, priority);
+    };
+  }
+  function style_default(name, value, priority) {
+    return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name);
+  }
+  function styleValue(node, name) {
+    return node.style.getPropertyValue(name) || window_default(node).getComputedStyle(node, null).getPropertyValue(name);
+  }
+
+  // node_modules/d3-selection/src/selection/property.js
+  function propertyRemove(name) {
+    return function() {
+      delete this[name];
+    };
+  }
+  function propertyConstant(name, value) {
+    return function() {
+      this[name] = value;
+    };
+  }
+  function propertyFunction(name, value) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      if (v2 == null) delete this[name];
+      else this[name] = v2;
+    };
+  }
+  function property_default(name, value) {
+    return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name];
+  }
+
+  // node_modules/d3-selection/src/selection/classed.js
+  function classArray(string) {
+    return string.trim().split(/^|\s+/);
+  }
+  function classList(node) {
+    return node.classList || new ClassList(node);
+  }
+  function ClassList(node) {
+    this._node = node;
+    this._names = classArray(node.getAttribute("class") || "");
+  }
+  ClassList.prototype = {
+    add: function(name) {
+      var i3 = this._names.indexOf(name);
+      if (i3 < 0) {
+        this._names.push(name);
+        this._node.setAttribute("class", this._names.join(" "));
+      }
+    },
+    remove: function(name) {
+      var i3 = this._names.indexOf(name);
+      if (i3 >= 0) {
+        this._names.splice(i3, 1);
+        this._node.setAttribute("class", this._names.join(" "));
+      }
+    },
+    contains: function(name) {
+      return this._names.indexOf(name) >= 0;
+    }
+  };
+  function classedAdd(node, names) {
+    var list2 = classList(node), i3 = -1, n3 = names.length;
+    while (++i3 < n3) list2.add(names[i3]);
+  }
+  function classedRemove(node, names) {
+    var list2 = classList(node), i3 = -1, n3 = names.length;
+    while (++i3 < n3) list2.remove(names[i3]);
+  }
+  function classedTrue(names) {
+    return function() {
+      classedAdd(this, names);
+    };
+  }
+  function classedFalse(names) {
+    return function() {
+      classedRemove(this, names);
+    };
+  }
+  function classedFunction(names, value) {
+    return function() {
+      (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
+    };
+  }
+  function classed_default(name, value) {
+    var names = classArray(name + "");
+    if (arguments.length < 2) {
+      var list2 = classList(this.node()), i3 = -1, n3 = names.length;
+      while (++i3 < n3) if (!list2.contains(names[i3])) return false;
+      return true;
+    }
+    return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));
+  }
+
+  // node_modules/d3-selection/src/selection/text.js
+  function textRemove() {
+    this.textContent = "";
+  }
+  function textConstant(value) {
+    return function() {
+      this.textContent = value;
+    };
+  }
+  function textFunction(value) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      this.textContent = v2 == null ? "" : v2;
+    };
+  }
+  function text_default(value) {
+    return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent;
+  }
+
+  // node_modules/d3-selection/src/selection/html.js
+  function htmlRemove() {
+    this.innerHTML = "";
+  }
+  function htmlConstant(value) {
+    return function() {
+      this.innerHTML = value;
+    };
+  }
+  function htmlFunction(value) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      this.innerHTML = v2 == null ? "" : v2;
+    };
+  }
+  function html_default(value) {
+    return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML;
+  }
+
+  // node_modules/d3-selection/src/selection/raise.js
+  function raise() {
+    if (this.nextSibling) this.parentNode.appendChild(this);
+  }
+  function raise_default() {
+    return this.each(raise);
+  }
+
+  // node_modules/d3-selection/src/selection/lower.js
+  function lower() {
+    if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
+  }
+  function lower_default() {
+    return this.each(lower);
+  }
+
+  // node_modules/d3-selection/src/selection/append.js
+  function append_default(name) {
+    var create2 = typeof name === "function" ? name : creator_default(name);
+    return this.select(function() {
+      return this.appendChild(create2.apply(this, arguments));
+    });
+  }
+
+  // node_modules/d3-selection/src/selection/insert.js
+  function constantNull() {
+    return null;
+  }
+  function insert_default(name, before) {
+    var create2 = typeof name === "function" ? name : creator_default(name), select = before == null ? constantNull : typeof before === "function" ? before : selector_default(before);
+    return this.select(function() {
+      return this.insertBefore(create2.apply(this, arguments), select.apply(this, arguments) || null);
+    });
+  }
+
+  // node_modules/d3-selection/src/selection/remove.js
+  function remove() {
+    var parent = this.parentNode;
+    if (parent) parent.removeChild(this);
+  }
+  function remove_default() {
+    return this.each(remove);
+  }
+
+  // node_modules/d3-selection/src/selection/clone.js
+  function selection_cloneShallow() {
+    var clone2 = this.cloneNode(false), parent = this.parentNode;
+    return parent ? parent.insertBefore(clone2, this.nextSibling) : clone2;
+  }
+  function selection_cloneDeep() {
+    var clone2 = this.cloneNode(true), parent = this.parentNode;
+    return parent ? parent.insertBefore(clone2, this.nextSibling) : clone2;
+  }
+  function clone_default(deep) {
+    return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
+  }
+
+  // node_modules/d3-selection/src/selection/datum.js
+  function datum_default(value) {
+    return arguments.length ? this.property("__data__", value) : this.node().__data__;
+  }
+
+  // node_modules/d3-selection/src/selection/on.js
+  function contextListener(listener) {
+    return function(event) {
+      listener.call(this, event, this.__data__);
+    };
+  }
+  function parseTypenames2(typenames) {
+    return typenames.trim().split(/^|\s+/).map(function(t2) {
+      var name = "", i3 = t2.indexOf(".");
+      if (i3 >= 0) name = t2.slice(i3 + 1), t2 = t2.slice(0, i3);
+      return { type: t2, name };
+    });
+  }
+  function onRemove(typename) {
+    return function() {
+      var on = this.__on;
+      if (!on) return;
+      for (var j2 = 0, i3 = -1, m2 = on.length, o2; j2 < m2; ++j2) {
+        if (o2 = on[j2], (!typename.type || o2.type === typename.type) && o2.name === typename.name) {
+          this.removeEventListener(o2.type, o2.listener, o2.options);
+        } else {
+          on[++i3] = o2;
+        }
+      }
+      if (++i3) on.length = i3;
+      else delete this.__on;
+    };
+  }
+  function onAdd(typename, value, options2) {
+    return function() {
+      var on = this.__on, o2, listener = contextListener(value);
+      if (on) for (var j2 = 0, m2 = on.length; j2 < m2; ++j2) {
+        if ((o2 = on[j2]).type === typename.type && o2.name === typename.name) {
+          this.removeEventListener(o2.type, o2.listener, o2.options);
+          this.addEventListener(o2.type, o2.listener = listener, o2.options = options2);
+          o2.value = value;
+          return;
+        }
+      }
+      this.addEventListener(typename.type, listener, options2);
+      o2 = { type: typename.type, name: typename.name, value, listener, options: options2 };
+      if (!on) this.__on = [o2];
+      else on.push(o2);
+    };
+  }
+  function on_default(typename, value, options2) {
+    var typenames = parseTypenames2(typename + ""), i3, n3 = typenames.length, t2;
+    if (arguments.length < 2) {
+      var on = this.node().__on;
+      if (on) for (var j2 = 0, m2 = on.length, o2; j2 < m2; ++j2) {
+        for (i3 = 0, o2 = on[j2]; i3 < n3; ++i3) {
+          if ((t2 = typenames[i3]).type === o2.type && t2.name === o2.name) {
+            return o2.value;
           }
-          return diff;
-        });
+        }
       }
+      return;
     }
-    const geometryOnlyCollection = {
-      type: "FeatureCollection",
-      features: geometryFeatures
+    on = value ? onAdd : onRemove;
+    for (i3 = 0; i3 < n3; ++i3) this.each(on(typenames[i3], value, options2));
+    return this;
+  }
+
+  // node_modules/d3-selection/src/selection/dispatch.js
+  function dispatchEvent(node, type2, params) {
+    var window2 = window_default(node), event = window2.CustomEvent;
+    if (typeof event === "function") {
+      event = new event(type2, params);
+    } else {
+      event = window2.document.createEvent("Event");
+      if (params) event.initEvent(type2, params.bubbles, params.cancelable), event.detail = params.detail;
+      else event.initEvent(type2, false, false);
+    }
+    node.dispatchEvent(event);
+  }
+  function dispatchConstant(type2, params) {
+    return function() {
+      return dispatchEvent(this, type2, params);
     };
-    _whichPolygon = (0, import_which_polygon.default)(geometryOnlyCollection);
-    function loadGroups(feature22) {
-      const props = feature22.properties;
-      if (!props.groups) {
-        props.groups = [];
+  }
+  function dispatchFunction(type2, params) {
+    return function() {
+      return dispatchEvent(this, type2, params.apply(this, arguments));
+    };
+  }
+  function dispatch_default2(type2, params) {
+    return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type2, params));
+  }
+
+  // node_modules/d3-selection/src/selection/iterator.js
+  function* iterator_default() {
+    for (var groups = this._groups, j2 = 0, m2 = groups.length; j2 < m2; ++j2) {
+      for (var group = groups[j2], i3 = 0, n3 = group.length, node; i3 < n3; ++i3) {
+        if (node = group[i3]) yield node;
       }
-      if (feature22.geometry && props.country) {
-        props.groups.push(props.country);
+    }
+  }
+
+  // node_modules/d3-selection/src/selection/index.js
+  var root = [null];
+  function Selection(groups, parents) {
+    this._groups = groups;
+    this._parents = parents;
+  }
+  function selection() {
+    return new Selection([[document.documentElement]], root);
+  }
+  function selection_selection() {
+    return this;
+  }
+  Selection.prototype = selection.prototype = {
+    constructor: Selection,
+    select: select_default,
+    selectAll: selectAll_default,
+    selectChild: selectChild_default,
+    selectChildren: selectChildren_default,
+    filter: filter_default,
+    data: data_default,
+    enter: enter_default,
+    exit: exit_default,
+    join: join_default,
+    merge: merge_default,
+    selection: selection_selection,
+    order: order_default,
+    sort: sort_default,
+    call: call_default,
+    nodes: nodes_default,
+    node: node_default,
+    size: size_default,
+    empty: empty_default,
+    each: each_default,
+    attr: attr_default,
+    style: style_default,
+    property: property_default,
+    classed: classed_default,
+    text: text_default,
+    html: html_default,
+    raise: raise_default,
+    lower: lower_default,
+    append: append_default,
+    insert: insert_default,
+    remove: remove_default,
+    clone: clone_default,
+    datum: datum_default,
+    on: on_default,
+    dispatch: dispatch_default2,
+    [Symbol.iterator]: iterator_default
+  };
+  var selection_default = selection;
+
+  // node_modules/d3-selection/src/select.js
+  function select_default2(selector) {
+    return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root);
+  }
+
+  // node_modules/d3-selection/src/sourceEvent.js
+  function sourceEvent_default(event) {
+    let sourceEvent;
+    while (sourceEvent = event.sourceEvent) event = sourceEvent;
+    return event;
+  }
+
+  // node_modules/d3-selection/src/pointer.js
+  function pointer_default(event, node) {
+    event = sourceEvent_default(event);
+    if (node === void 0) node = event.currentTarget;
+    if (node) {
+      var svg2 = node.ownerSVGElement || node;
+      if (svg2.createSVGPoint) {
+        var point = svg2.createSVGPoint();
+        point.x = event.clientX, point.y = event.clientY;
+        point = point.matrixTransform(node.getScreenCTM().inverse());
+        return [point.x, point.y];
       }
-      if (props.m49 !== "001") {
-        props.groups.push("001");
+      if (node.getBoundingClientRect) {
+        var rect = node.getBoundingClientRect();
+        return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
       }
     }
-    function loadM49(feature22) {
-      const props = feature22.properties;
-      if (!props.m49 && props.iso1N3) {
-        props.m49 = props.iso1N3;
-      }
+    return [event.pageX, event.pageY];
+  }
+
+  // node_modules/d3-selection/src/selectAll.js
+  function selectAll_default2(selector) {
+    return typeof selector === "string" ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) : new Selection([array(selector)], root);
+  }
+
+  // node_modules/d3-drag/src/noevent.js
+  var nonpassive = { passive: false };
+  var nonpassivecapture = { capture: true, passive: false };
+  function nopropagation(event) {
+    event.stopImmediatePropagation();
+  }
+  function noevent_default(event) {
+    event.preventDefault();
+    event.stopImmediatePropagation();
+  }
+
+  // node_modules/d3-drag/src/nodrag.js
+  function nodrag_default(view) {
+    var root3 = view.document.documentElement, selection2 = select_default2(view).on("dragstart.drag", noevent_default, nonpassivecapture);
+    if ("onselectstart" in root3) {
+      selection2.on("selectstart.drag", noevent_default, nonpassivecapture);
+    } else {
+      root3.__noselect = root3.style.MozUserSelect;
+      root3.style.MozUserSelect = "none";
     }
-    function loadTLD(feature22) {
-      const props = feature22.properties;
-      if (props.level === "unitedNations") return;
-      if (props.ccTLD === null) return;
-      if (!props.ccTLD && props.iso1A2) {
-        props.ccTLD = "." + props.iso1A2.toLowerCase();
-      }
+  }
+  function yesdrag(view, noclick) {
+    var root3 = view.document.documentElement, selection2 = select_default2(view).on("dragstart.drag", null);
+    if (noclick) {
+      selection2.on("click.drag", noevent_default, nonpassivecapture);
+      setTimeout(function() {
+        selection2.on("click.drag", null);
+      }, 0);
     }
-    function loadIsoStatus(feature22) {
-      const props = feature22.properties;
-      if (!props.isoStatus && props.iso1A2) {
-        props.isoStatus = "official";
-      }
+    if ("onselectstart" in root3) {
+      selection2.on("selectstart.drag", null);
+    } else {
+      root3.style.MozUserSelect = root3.__noselect;
+      delete root3.__noselect;
     }
-    function loadLevel(feature22) {
-      const props = feature22.properties;
-      if (props.level) return;
-      if (!props.country) {
-        props.level = "country";
-      } else if (!props.iso1A2 || props.isoStatus === "official") {
-        props.level = "territory";
-      } else {
-        props.level = "subterritory";
-      }
+  }
+
+  // node_modules/d3-drag/src/constant.js
+  var constant_default2 = (x2) => () => x2;
+
+  // node_modules/d3-drag/src/event.js
+  function DragEvent(type2, {
+    sourceEvent,
+    subject,
+    target,
+    identifier,
+    active,
+    x: x2,
+    y: y2,
+    dx,
+    dy,
+    dispatch: dispatch14
+  }) {
+    Object.defineProperties(this, {
+      type: { value: type2, enumerable: true, configurable: true },
+      sourceEvent: { value: sourceEvent, enumerable: true, configurable: true },
+      subject: { value: subject, enumerable: true, configurable: true },
+      target: { value: target, enumerable: true, configurable: true },
+      identifier: { value: identifier, enumerable: true, configurable: true },
+      active: { value: active, enumerable: true, configurable: true },
+      x: { value: x2, enumerable: true, configurable: true },
+      y: { value: y2, enumerable: true, configurable: true },
+      dx: { value: dx, enumerable: true, configurable: true },
+      dy: { value: dy, enumerable: true, configurable: true },
+      _: { value: dispatch14 }
+    });
+  }
+  DragEvent.prototype.on = function() {
+    var value = this._.on.apply(this._, arguments);
+    return value === this._ ? this : value;
+  };
+
+  // node_modules/d3-drag/src/drag.js
+  function defaultFilter(event) {
+    return !event.ctrlKey && !event.button;
+  }
+  function defaultContainer() {
+    return this.parentNode;
+  }
+  function defaultSubject(event, d2) {
+    return d2 == null ? { x: event.x, y: event.y } : d2;
+  }
+  function defaultTouchable() {
+    return navigator.maxTouchPoints || "ontouchstart" in this;
+  }
+  function drag_default() {
+    var filter2 = defaultFilter, container = defaultContainer, subject = defaultSubject, touchable = defaultTouchable, gestures = {}, listeners = dispatch_default("start", "drag", "end"), active = 0, mousedownx, mousedowny, mousemoving, touchending, clickDistance2 = 0;
+    function drag(selection2) {
+      selection2.on("mousedown.drag", mousedowned).filter(touchable).on("touchstart.drag", touchstarted).on("touchmove.drag", touchmoved, nonpassive).on("touchend.drag touchcancel.drag", touchended).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
     }
-    function loadGroupGroups(feature22) {
-      const props = feature22.properties;
-      if (feature22.geometry || !props.members) return;
-      const featureLevelIndex = levels.indexOf(props.level);
-      let sharedGroups = [];
-      props.members.forEach((memberID, index) => {
-        const member = _featuresByCode[memberID];
-        const memberGroups = member.properties.groups.filter((groupID) => {
-          return groupID !== feature22.properties.id && featureLevelIndex < levels.indexOf(_featuresByCode[groupID].properties.level);
-        });
-        if (index === 0) {
-          sharedGroups = memberGroups;
-        } else {
-          sharedGroups = sharedGroups.filter((groupID) => memberGroups.indexOf(groupID) !== -1);
-        }
-      });
-      props.groups = props.groups.concat(
-        sharedGroups.filter((groupID) => props.groups.indexOf(groupID) === -1)
-      );
-      for (const groupID of sharedGroups) {
-        const groupFeature = _featuresByCode[groupID];
-        if (groupFeature.properties.members.indexOf(props.id) === -1) {
-          groupFeature.properties.members.push(props.id);
-        }
-      }
+    function mousedowned(event, d2) {
+      if (touchending || !filter2.call(this, event, d2)) return;
+      var gesture = beforestart(this, container.call(this, event, d2), event, d2, "mouse");
+      if (!gesture) return;
+      select_default2(event.view).on("mousemove.drag", mousemoved, nonpassivecapture).on("mouseup.drag", mouseupped, nonpassivecapture);
+      nodrag_default(event.view);
+      nopropagation(event);
+      mousemoving = false;
+      mousedownx = event.clientX;
+      mousedowny = event.clientY;
+      gesture("start", event);
     }
-    function loadRoadSpeedUnit(feature22) {
-      const props = feature22.properties;
-      if (feature22.geometry) {
-        if (!props.roadSpeedUnit) props.roadSpeedUnit = "km/h";
-      } else if (props.members) {
-        const vals = Array.from(
-          new Set(
-            props.members.map((id2) => {
-              const member = _featuresByCode[id2];
-              if (member.geometry) return member.properties.roadSpeedUnit || "km/h";
-            }).filter(Boolean)
-          )
-        );
-        if (vals.length === 1) props.roadSpeedUnit = vals[0];
+    function mousemoved(event) {
+      noevent_default(event);
+      if (!mousemoving) {
+        var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
+        mousemoving = dx * dx + dy * dy > clickDistance2;
       }
+      gestures.mouse("drag", event);
     }
-    function loadRoadHeightUnit(feature22) {
-      const props = feature22.properties;
-      if (feature22.geometry) {
-        if (!props.roadHeightUnit) props.roadHeightUnit = "m";
-      } else if (props.members) {
-        const vals = Array.from(
-          new Set(
-            props.members.map((id2) => {
-              const member = _featuresByCode[id2];
-              if (member.geometry) return member.properties.roadHeightUnit || "m";
-            }).filter(Boolean)
-          )
-        );
-        if (vals.length === 1) props.roadHeightUnit = vals[0];
-      }
+    function mouseupped(event) {
+      select_default2(event.view).on("mousemove.drag mouseup.drag", null);
+      yesdrag(event.view, mousemoving);
+      noevent_default(event);
+      gestures.mouse("end", event);
     }
-    function loadDriveSide(feature22) {
-      const props = feature22.properties;
-      if (feature22.geometry) {
-        if (!props.driveSide) props.driveSide = "right";
-      } else if (props.members) {
-        const vals = Array.from(
-          new Set(
-            props.members.map((id2) => {
-              const member = _featuresByCode[id2];
-              if (member.geometry) return member.properties.driveSide || "right";
-            }).filter(Boolean)
-          )
-        );
-        if (vals.length === 1) props.driveSide = vals[0];
+    function touchstarted(event, d2) {
+      if (!filter2.call(this, event, d2)) return;
+      var touches = event.changedTouches, c2 = container.call(this, event, d2), n3 = touches.length, i3, gesture;
+      for (i3 = 0; i3 < n3; ++i3) {
+        if (gesture = beforestart(this, c2, event, d2, touches[i3].identifier, touches[i3])) {
+          nopropagation(event);
+          gesture("start", event, touches[i3]);
+        }
       }
     }
-    function loadCallingCodes(feature22) {
-      const props = feature22.properties;
-      if (!feature22.geometry && props.members) {
-        props.callingCodes = Array.from(
-          new Set(
-            props.members.reduce((array2, id2) => {
-              const member = _featuresByCode[id2];
-              if (member.geometry && member.properties.callingCodes) {
-                return array2.concat(member.properties.callingCodes);
-              }
-              return array2;
-            }, [])
-          )
-        );
+    function touchmoved(event) {
+      var touches = event.changedTouches, n3 = touches.length, i3, gesture;
+      for (i3 = 0; i3 < n3; ++i3) {
+        if (gesture = gestures[touches[i3].identifier]) {
+          noevent_default(event);
+          gesture("drag", event, touches[i3]);
+        }
       }
     }
-    function loadFlag(feature22) {
-      if (!feature22.properties.iso1A2) return;
-      const flag = feature22.properties.iso1A2.replace(/./g, function(char) {
-        return String.fromCodePoint(char.charCodeAt(0) + 127397);
-      });
-      feature22.properties.emojiFlag = flag;
-    }
-    function loadMembersForGroupsOf(feature22) {
-      for (const groupID of feature22.properties.groups) {
-        const groupFeature = _featuresByCode[groupID];
-        if (!groupFeature.properties.members) {
-          groupFeature.properties.members = [];
+    function touchended(event) {
+      var touches = event.changedTouches, n3 = touches.length, i3, gesture;
+      if (touchending) clearTimeout(touchending);
+      touchending = setTimeout(function() {
+        touchending = null;
+      }, 500);
+      for (i3 = 0; i3 < n3; ++i3) {
+        if (gesture = gestures[touches[i3].identifier]) {
+          nopropagation(event);
+          gesture("end", event, touches[i3]);
         }
-        groupFeature.properties.members.push(feature22.properties.id);
       }
     }
-    function cacheFeatureByIDs(feature22) {
-      let ids = [];
-      for (const prop of identifierProps) {
-        const id2 = feature22.properties[prop];
-        if (id2) {
-          ids.push(id2);
+    function beforestart(that, container2, event, d2, identifier, touch) {
+      var dispatch14 = listeners.copy(), p2 = pointer_default(touch || event, container2), dx, dy, s2;
+      if ((s2 = subject.call(that, new DragEvent("beforestart", {
+        sourceEvent: event,
+        target: drag,
+        identifier,
+        active,
+        x: p2[0],
+        y: p2[1],
+        dx: 0,
+        dy: 0,
+        dispatch: dispatch14
+      }), d2)) == null) return;
+      dx = s2.x - p2[0] || 0;
+      dy = s2.y - p2[1] || 0;
+      return function gesture(type2, event2, touch2) {
+        var p02 = p2, n3;
+        switch (type2) {
+          case "start":
+            gestures[identifier] = gesture, n3 = active++;
+            break;
+          case "end":
+            delete gestures[identifier], --active;
+          // falls through
+          case "drag":
+            p2 = pointer_default(touch2 || event2, container2), n3 = active;
+            break;
         }
-      }
-      for (const alias of feature22.properties.aliases || []) {
-        ids.push(alias);
-      }
-      for (const id2 of ids) {
-        const cid = canonicalID(id2);
-        _featuresByCode[cid] = feature22;
-      }
+        dispatch14.call(
+          type2,
+          that,
+          new DragEvent(type2, {
+            sourceEvent: event2,
+            subject: s2,
+            target: drag,
+            identifier,
+            active: n3,
+            x: p2[0] + dx,
+            y: p2[1] + dy,
+            dx: p2[0] - p02[0],
+            dy: p2[1] - p02[1],
+            dispatch: dispatch14
+          }),
+          d2
+        );
+      };
     }
+    drag.filter = function(_2) {
+      return arguments.length ? (filter2 = typeof _2 === "function" ? _2 : constant_default2(!!_2), drag) : filter2;
+    };
+    drag.container = function(_2) {
+      return arguments.length ? (container = typeof _2 === "function" ? _2 : constant_default2(_2), drag) : container;
+    };
+    drag.subject = function(_2) {
+      return arguments.length ? (subject = typeof _2 === "function" ? _2 : constant_default2(_2), drag) : subject;
+    };
+    drag.touchable = function(_2) {
+      return arguments.length ? (touchable = typeof _2 === "function" ? _2 : constant_default2(!!_2), drag) : touchable;
+    };
+    drag.on = function() {
+      var value = listeners.on.apply(listeners, arguments);
+      return value === listeners ? drag : value;
+    };
+    drag.clickDistance = function(_2) {
+      return arguments.length ? (clickDistance2 = (_2 = +_2) * _2, drag) : Math.sqrt(clickDistance2);
+    };
+    return drag;
+  }
+
+  // node_modules/d3-color/src/define.js
+  function define_default(constructor, factory, prototype) {
+    constructor.prototype = factory.prototype = prototype;
+    prototype.constructor = constructor;
+  }
+  function extend(parent, definition) {
+    var prototype = Object.create(parent.prototype);
+    for (var key in definition) prototype[key] = definition[key];
+    return prototype;
+  }
+
+  // node_modules/d3-color/src/color.js
+  function Color() {
+  }
+  var darker = 0.7;
+  var brighter = 1 / darker;
+  var reI = "\\s*([+-]?\\d+)\\s*";
+  var reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*";
+  var reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*";
+  var reHex = /^#([0-9a-f]{3,8})$/;
+  var reRgbInteger = new RegExp("^rgb\\(".concat(reI, ",").concat(reI, ",").concat(reI, "\\)$"));
+  var reRgbPercent = new RegExp("^rgb\\(".concat(reP, ",").concat(reP, ",").concat(reP, "\\)$"));
+  var reRgbaInteger = new RegExp("^rgba\\(".concat(reI, ",").concat(reI, ",").concat(reI, ",").concat(reN, "\\)$"));
+  var reRgbaPercent = new RegExp("^rgba\\(".concat(reP, ",").concat(reP, ",").concat(reP, ",").concat(reN, "\\)$"));
+  var reHslPercent = new RegExp("^hsl\\(".concat(reN, ",").concat(reP, ",").concat(reP, "\\)$"));
+  var reHslaPercent = new RegExp("^hsla\\(".concat(reN, ",").concat(reP, ",").concat(reP, ",").concat(reN, "\\)$"));
+  var named = {
+    aliceblue: 15792383,
+    antiquewhite: 16444375,
+    aqua: 65535,
+    aquamarine: 8388564,
+    azure: 15794175,
+    beige: 16119260,
+    bisque: 16770244,
+    black: 0,
+    blanchedalmond: 16772045,
+    blue: 255,
+    blueviolet: 9055202,
+    brown: 10824234,
+    burlywood: 14596231,
+    cadetblue: 6266528,
+    chartreuse: 8388352,
+    chocolate: 13789470,
+    coral: 16744272,
+    cornflowerblue: 6591981,
+    cornsilk: 16775388,
+    crimson: 14423100,
+    cyan: 65535,
+    darkblue: 139,
+    darkcyan: 35723,
+    darkgoldenrod: 12092939,
+    darkgray: 11119017,
+    darkgreen: 25600,
+    darkgrey: 11119017,
+    darkkhaki: 12433259,
+    darkmagenta: 9109643,
+    darkolivegreen: 5597999,
+    darkorange: 16747520,
+    darkorchid: 10040012,
+    darkred: 9109504,
+    darksalmon: 15308410,
+    darkseagreen: 9419919,
+    darkslateblue: 4734347,
+    darkslategray: 3100495,
+    darkslategrey: 3100495,
+    darkturquoise: 52945,
+    darkviolet: 9699539,
+    deeppink: 16716947,
+    deepskyblue: 49151,
+    dimgray: 6908265,
+    dimgrey: 6908265,
+    dodgerblue: 2003199,
+    firebrick: 11674146,
+    floralwhite: 16775920,
+    forestgreen: 2263842,
+    fuchsia: 16711935,
+    gainsboro: 14474460,
+    ghostwhite: 16316671,
+    gold: 16766720,
+    goldenrod: 14329120,
+    gray: 8421504,
+    green: 32768,
+    greenyellow: 11403055,
+    grey: 8421504,
+    honeydew: 15794160,
+    hotpink: 16738740,
+    indianred: 13458524,
+    indigo: 4915330,
+    ivory: 16777200,
+    khaki: 15787660,
+    lavender: 15132410,
+    lavenderblush: 16773365,
+    lawngreen: 8190976,
+    lemonchiffon: 16775885,
+    lightblue: 11393254,
+    lightcoral: 15761536,
+    lightcyan: 14745599,
+    lightgoldenrodyellow: 16448210,
+    lightgray: 13882323,
+    lightgreen: 9498256,
+    lightgrey: 13882323,
+    lightpink: 16758465,
+    lightsalmon: 16752762,
+    lightseagreen: 2142890,
+    lightskyblue: 8900346,
+    lightslategray: 7833753,
+    lightslategrey: 7833753,
+    lightsteelblue: 11584734,
+    lightyellow: 16777184,
+    lime: 65280,
+    limegreen: 3329330,
+    linen: 16445670,
+    magenta: 16711935,
+    maroon: 8388608,
+    mediumaquamarine: 6737322,
+    mediumblue: 205,
+    mediumorchid: 12211667,
+    mediumpurple: 9662683,
+    mediumseagreen: 3978097,
+    mediumslateblue: 8087790,
+    mediumspringgreen: 64154,
+    mediumturquoise: 4772300,
+    mediumvioletred: 13047173,
+    midnightblue: 1644912,
+    mintcream: 16121850,
+    mistyrose: 16770273,
+    moccasin: 16770229,
+    navajowhite: 16768685,
+    navy: 128,
+    oldlace: 16643558,
+    olive: 8421376,
+    olivedrab: 7048739,
+    orange: 16753920,
+    orangered: 16729344,
+    orchid: 14315734,
+    palegoldenrod: 15657130,
+    palegreen: 10025880,
+    paleturquoise: 11529966,
+    palevioletred: 14381203,
+    papayawhip: 16773077,
+    peachpuff: 16767673,
+    peru: 13468991,
+    pink: 16761035,
+    plum: 14524637,
+    powderblue: 11591910,
+    purple: 8388736,
+    rebeccapurple: 6697881,
+    red: 16711680,
+    rosybrown: 12357519,
+    royalblue: 4286945,
+    saddlebrown: 9127187,
+    salmon: 16416882,
+    sandybrown: 16032864,
+    seagreen: 3050327,
+    seashell: 16774638,
+    sienna: 10506797,
+    silver: 12632256,
+    skyblue: 8900331,
+    slateblue: 6970061,
+    slategray: 7372944,
+    slategrey: 7372944,
+    snow: 16775930,
+    springgreen: 65407,
+    steelblue: 4620980,
+    tan: 13808780,
+    teal: 32896,
+    thistle: 14204888,
+    tomato: 16737095,
+    turquoise: 4251856,
+    violet: 15631086,
+    wheat: 16113331,
+    white: 16777215,
+    whitesmoke: 16119285,
+    yellow: 16776960,
+    yellowgreen: 10145074
+  };
+  define_default(Color, color, {
+    copy(channels) {
+      return Object.assign(new this.constructor(), this, channels);
+    },
+    displayable() {
+      return this.rgb().displayable();
+    },
+    hex: color_formatHex,
+    // Deprecated! Use color.formatHex.
+    formatHex: color_formatHex,
+    formatHex8: color_formatHex8,
+    formatHsl: color_formatHsl,
+    formatRgb: color_formatRgb,
+    toString: color_formatRgb
+  });
+  function color_formatHex() {
+    return this.rgb().formatHex();
   }
-  function locArray(loc) {
-    if (Array.isArray(loc)) {
-      return loc;
-    } else if (loc.coordinates) {
-      return loc.coordinates;
-    }
-    return loc.geometry.coordinates;
+  function color_formatHex8() {
+    return this.rgb().formatHex8();
   }
-  function smallestFeature(loc) {
-    const query = locArray(loc);
-    const featureProperties = _whichPolygon(query);
-    if (!featureProperties) return null;
-    return _featuresByCode[featureProperties.id];
+  function color_formatHsl() {
+    return hslConvert(this).formatHsl();
   }
-  function countryFeature(loc) {
-    const feature22 = smallestFeature(loc);
-    if (!feature22) return null;
-    const countryCode = feature22.properties.country || feature22.properties.iso1A2;
-    return _featuresByCode[countryCode] || null;
+  function color_formatRgb() {
+    return this.rgb().formatRgb();
   }
-  var defaultOpts = {
-    level: void 0,
-    maxLevel: void 0,
-    withProp: void 0
-  };
-  function featureForLoc(loc, opts) {
-    const targetLevel = opts.level || "country";
-    const maxLevel = opts.maxLevel || "world";
-    const withProp = opts.withProp;
-    const targetLevelIndex = levels.indexOf(targetLevel);
-    if (targetLevelIndex === -1) return null;
-    const maxLevelIndex = levels.indexOf(maxLevel);
-    if (maxLevelIndex === -1) return null;
-    if (maxLevelIndex < targetLevelIndex) return null;
-    if (targetLevel === "country") {
-      const fastFeature = countryFeature(loc);
-      if (fastFeature) {
-        if (!withProp || fastFeature.properties[withProp]) {
-          return fastFeature;
-        }
-      }
-    }
-    const features = featuresContaining(loc);
-    const match = features.find((feature22) => {
-      let levelIndex = levels.indexOf(feature22.properties.level);
-      if (feature22.properties.level === targetLevel || // if no feature exists at the target level, return the first feature at the next level up
-      levelIndex > targetLevelIndex && levelIndex <= maxLevelIndex) {
-        if (!withProp || feature22.properties[withProp]) {
-          return feature22;
-        }
-      }
-      return false;
-    });
-    return match || null;
+  function color(format2) {
+    var m2, l2;
+    format2 = (format2 + "").trim().toLowerCase();
+    return (m2 = reHex.exec(format2)) ? (l2 = m2[1].length, m2 = parseInt(m2[1], 16), l2 === 6 ? rgbn(m2) : l2 === 3 ? new Rgb(m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, (m2 & 15) << 4 | m2 & 15, 1) : l2 === 8 ? rgba(m2 >> 24 & 255, m2 >> 16 & 255, m2 >> 8 & 255, (m2 & 255) / 255) : l2 === 4 ? rgba(m2 >> 12 & 15 | m2 >> 8 & 240, m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, ((m2 & 15) << 4 | m2 & 15) / 255) : null) : (m2 = reRgbInteger.exec(format2)) ? new Rgb(m2[1], m2[2], m2[3], 1) : (m2 = reRgbPercent.exec(format2)) ? new Rgb(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, 1) : (m2 = reRgbaInteger.exec(format2)) ? rgba(m2[1], m2[2], m2[3], m2[4]) : (m2 = reRgbaPercent.exec(format2)) ? rgba(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, m2[4]) : (m2 = reHslPercent.exec(format2)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, 1) : (m2 = reHslaPercent.exec(format2)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, m2[4]) : named.hasOwnProperty(format2) ? rgbn(named[format2]) : format2 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
   }
-  function featureForID(id2) {
-    let stringID;
-    if (typeof id2 === "number") {
-      stringID = id2.toString();
-      if (stringID.length === 1) {
-        stringID = "00" + stringID;
-      } else if (stringID.length === 2) {
-        stringID = "0" + stringID;
-      }
-    } else {
-      stringID = canonicalID(id2);
-    }
-    return _featuresByCode[stringID] || null;
+  function rgbn(n3) {
+    return new Rgb(n3 >> 16 & 255, n3 >> 8 & 255, n3 & 255, 1);
   }
-  function smallestFeaturesForBbox(bbox2) {
-    return _whichPolygon.bbox(bbox2).map((props) => _featuresByCode[props.id]);
+  function rgba(r2, g3, b2, a2) {
+    if (a2 <= 0) r2 = g3 = b2 = NaN;
+    return new Rgb(r2, g3, b2, a2);
   }
-  function smallestOrMatchingFeature(query) {
-    if (typeof query === "object") {
-      return smallestFeature(query);
-    }
-    return featureForID(query);
+  function rgbConvert(o2) {
+    if (!(o2 instanceof Color)) o2 = color(o2);
+    if (!o2) return new Rgb();
+    o2 = o2.rgb();
+    return new Rgb(o2.r, o2.g, o2.b, o2.opacity);
   }
-  function feature(query, opts = defaultOpts) {
-    if (typeof query === "object") {
-      return featureForLoc(query, opts);
-    }
-    return featureForID(query);
+  function rgb(r2, g3, b2, opacity) {
+    return arguments.length === 1 ? rgbConvert(r2) : new Rgb(r2, g3, b2, opacity == null ? 1 : opacity);
   }
-  function iso1A2Code(query, opts = defaultOpts) {
-    opts.withProp = "iso1A2";
-    const match = feature(query, opts);
-    if (!match) return null;
-    return match.properties.iso1A2 || null;
+  function Rgb(r2, g3, b2, opacity) {
+    this.r = +r2;
+    this.g = +g3;
+    this.b = +b2;
+    this.opacity = +opacity;
   }
-  function propertiesForQuery(query, property) {
-    const features = featuresContaining(query, false);
-    return features.map((feature22) => feature22.properties[property]).filter(Boolean);
+  define_default(Rgb, rgb, extend(Color, {
+    brighter(k2) {
+      k2 = k2 == null ? brighter : Math.pow(brighter, k2);
+      return new Rgb(this.r * k2, this.g * k2, this.b * k2, this.opacity);
+    },
+    darker(k2) {
+      k2 = k2 == null ? darker : Math.pow(darker, k2);
+      return new Rgb(this.r * k2, this.g * k2, this.b * k2, this.opacity);
+    },
+    rgb() {
+      return this;
+    },
+    clamp() {
+      return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
+    },
+    displayable() {
+      return -0.5 <= this.r && this.r < 255.5 && (-0.5 <= this.g && this.g < 255.5) && (-0.5 <= this.b && this.b < 255.5) && (0 <= this.opacity && this.opacity <= 1);
+    },
+    hex: rgb_formatHex,
+    // Deprecated! Use color.formatHex.
+    formatHex: rgb_formatHex,
+    formatHex8: rgb_formatHex8,
+    formatRgb: rgb_formatRgb,
+    toString: rgb_formatRgb
+  }));
+  function rgb_formatHex() {
+    return "#".concat(hex(this.r)).concat(hex(this.g)).concat(hex(this.b));
   }
-  function iso1A2Codes(query) {
-    return propertiesForQuery(query, "iso1A2");
+  function rgb_formatHex8() {
+    return "#".concat(hex(this.r)).concat(hex(this.g)).concat(hex(this.b)).concat(hex((isNaN(this.opacity) ? 1 : this.opacity) * 255));
   }
-  function featuresContaining(query, strict) {
-    let matchingFeatures;
-    if (Array.isArray(query) && query.length === 4) {
-      matchingFeatures = smallestFeaturesForBbox(query);
-    } else {
-      const smallestOrMatching = smallestOrMatchingFeature(query);
-      matchingFeatures = smallestOrMatching ? [smallestOrMatching] : [];
-    }
-    if (!matchingFeatures.length) return [];
-    let returnFeatures;
-    if (!strict || typeof query === "object") {
-      returnFeatures = matchingFeatures.slice();
+  function rgb_formatRgb() {
+    const a2 = clampa(this.opacity);
+    return "".concat(a2 === 1 ? "rgb(" : "rgba(").concat(clampi(this.r), ", ").concat(clampi(this.g), ", ").concat(clampi(this.b)).concat(a2 === 1 ? ")" : ", ".concat(a2, ")"));
+  }
+  function clampa(opacity) {
+    return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
+  }
+  function clampi(value) {
+    return Math.max(0, Math.min(255, Math.round(value) || 0));
+  }
+  function hex(value) {
+    value = clampi(value);
+    return (value < 16 ? "0" : "") + value.toString(16);
+  }
+  function hsla(h2, s2, l2, a2) {
+    if (a2 <= 0) h2 = s2 = l2 = NaN;
+    else if (l2 <= 0 || l2 >= 1) h2 = s2 = NaN;
+    else if (s2 <= 0) h2 = NaN;
+    return new Hsl(h2, s2, l2, a2);
+  }
+  function hslConvert(o2) {
+    if (o2 instanceof Hsl) return new Hsl(o2.h, o2.s, o2.l, o2.opacity);
+    if (!(o2 instanceof Color)) o2 = color(o2);
+    if (!o2) return new Hsl();
+    if (o2 instanceof Hsl) return o2;
+    o2 = o2.rgb();
+    var r2 = o2.r / 255, g3 = o2.g / 255, b2 = o2.b / 255, min3 = Math.min(r2, g3, b2), max3 = Math.max(r2, g3, b2), h2 = NaN, s2 = max3 - min3, l2 = (max3 + min3) / 2;
+    if (s2) {
+      if (r2 === max3) h2 = (g3 - b2) / s2 + (g3 < b2) * 6;
+      else if (g3 === max3) h2 = (b2 - r2) / s2 + 2;
+      else h2 = (r2 - g3) / s2 + 4;
+      s2 /= l2 < 0.5 ? max3 + min3 : 2 - max3 - min3;
+      h2 *= 60;
     } else {
-      returnFeatures = [];
-    }
-    for (const feature22 of matchingFeatures) {
-      const properties = feature22.properties;
-      for (const groupID of properties.groups) {
-        const groupFeature = _featuresByCode[groupID];
-        if (returnFeatures.indexOf(groupFeature) === -1) {
-          returnFeatures.push(groupFeature);
-        }
-      }
+      s2 = l2 > 0 && l2 < 1 ? 0 : h2;
     }
-    return returnFeatures;
+    return new Hsl(h2, s2, l2, o2.opacity);
   }
-  function featuresIn(id2, strict) {
-    const feature22 = featureForID(id2);
-    if (!feature22) return [];
-    let features = [];
-    if (!strict) {
-      features.push(feature22);
-    }
-    const properties = feature22.properties;
-    for (const memberID of properties.members || []) {
-      features.push(_featuresByCode[memberID]);
-    }
-    return features;
+  function hsl(h2, s2, l2, opacity) {
+    return arguments.length === 1 ? hslConvert(h2) : new Hsl(h2, s2, l2, opacity == null ? 1 : opacity);
   }
-  function aggregateFeature(id2) {
-    var _a3;
-    const features = featuresIn(id2, false);
-    if (features.length === 0) return null;
-    let aggregateCoordinates = [];
-    for (const feature22 of features) {
-      if (((_a3 = feature22.geometry) == null ? void 0 : _a3.type) === "MultiPolygon" && feature22.geometry.coordinates) {
-        aggregateCoordinates = aggregateCoordinates.concat(feature22.geometry.coordinates);
-      }
+  function Hsl(h2, s2, l2, opacity) {
+    this.h = +h2;
+    this.s = +s2;
+    this.l = +l2;
+    this.opacity = +opacity;
+  }
+  define_default(Hsl, hsl, extend(Color, {
+    brighter(k2) {
+      k2 = k2 == null ? brighter : Math.pow(brighter, k2);
+      return new Hsl(this.h, this.s, this.l * k2, this.opacity);
+    },
+    darker(k2) {
+      k2 = k2 == null ? darker : Math.pow(darker, k2);
+      return new Hsl(this.h, this.s, this.l * k2, this.opacity);
+    },
+    rgb() {
+      var h2 = this.h % 360 + (this.h < 0) * 360, s2 = isNaN(h2) || isNaN(this.s) ? 0 : this.s, l2 = this.l, m2 = l2 + (l2 < 0.5 ? l2 : 1 - l2) * s2, m1 = 2 * l2 - m2;
+      return new Rgb(
+        hsl2rgb(h2 >= 240 ? h2 - 240 : h2 + 120, m1, m2),
+        hsl2rgb(h2, m1, m2),
+        hsl2rgb(h2 < 120 ? h2 + 240 : h2 - 120, m1, m2),
+        this.opacity
+      );
+    },
+    clamp() {
+      return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
+    },
+    displayable() {
+      return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && (0 <= this.l && this.l <= 1) && (0 <= this.opacity && this.opacity <= 1);
+    },
+    formatHsl() {
+      const a2 = clampa(this.opacity);
+      return "".concat(a2 === 1 ? "hsl(" : "hsla(").concat(clamph(this.h), ", ").concat(clampt(this.s) * 100, "%, ").concat(clampt(this.l) * 100, "%").concat(a2 === 1 ? ")" : ", ".concat(a2, ")"));
     }
-    return {
-      type: "Feature",
-      properties: features[0].properties,
-      geometry: {
-        type: "MultiPolygon",
-        coordinates: aggregateCoordinates
-      }
-    };
+  }));
+  function clamph(value) {
+    value = (value || 0) % 360;
+    return value < 0 ? value + 360 : value;
   }
-  function roadSpeedUnit(query) {
-    const feature22 = smallestOrMatchingFeature(query);
-    return feature22 && feature22.properties.roadSpeedUnit || null;
+  function clampt(value) {
+    return Math.max(0, Math.min(1, value || 0));
   }
-  function roadHeightUnit(query) {
-    const feature22 = smallestOrMatchingFeature(query);
-    return feature22 && feature22.properties.roadHeightUnit || null;
+  function hsl2rgb(h2, m1, m2) {
+    return (h2 < 60 ? m1 + (m2 - m1) * h2 / 60 : h2 < 180 ? m2 : h2 < 240 ? m1 + (m2 - m1) * (240 - h2) / 60 : m1) * 255;
   }
 
-  // node_modules/polyclip-ts/dist/constant.js
-  var constant_default5 = (x2) => {
-    return () => {
-      return x2;
-    };
-  };
-
-  // node_modules/polyclip-ts/dist/compare.js
-  var compare_default = (eps) => {
-    const almostEqual = eps ? (a2, b2) => b2.minus(a2).abs().isLessThanOrEqualTo(eps) : constant_default5(false);
-    return (a2, b2) => {
-      if (almostEqual(a2, b2))
-        return 0;
-      return a2.comparedTo(b2);
-    };
-  };
-
-  // node_modules/polyclip-ts/dist/orient.js
-  function orient_default(eps) {
-    const almostCollinear = eps ? (area2, ax, ay, cx, cy) => area2.exponentiatedBy(2).isLessThanOrEqualTo(cx.minus(ax).exponentiatedBy(2).plus(cy.minus(ay).exponentiatedBy(2)).times(eps)) : constant_default5(false);
-    return (a2, b2, c2) => {
-      const ax = a2.x, ay = a2.y, cx = c2.x, cy = c2.y;
-      const area2 = ay.minus(cy).times(b2.x.minus(cx)).minus(ax.minus(cx).times(b2.y.minus(cy)));
-      if (almostCollinear(area2, ax, ay, cx, cy))
-        return 0;
-      return area2.comparedTo(0);
+  // node_modules/d3-interpolate/src/basis.js
+  function basis(t1, v0, v1, v2, v3) {
+    var t2 = t1 * t1, t3 = t2 * t1;
+    return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;
+  }
+  function basis_default(values) {
+    var n3 = values.length - 1;
+    return function(t2) {
+      var i3 = t2 <= 0 ? t2 = 0 : t2 >= 1 ? (t2 = 1, n3 - 1) : Math.floor(t2 * n3), v1 = values[i3], v2 = values[i3 + 1], v0 = i3 > 0 ? values[i3 - 1] : 2 * v1 - v2, v3 = i3 < n3 - 1 ? values[i3 + 2] : 2 * v2 - v1;
+      return basis((t2 - i3 / n3) * n3, v0, v1, v2, v3);
     };
   }
 
-  // node_modules/bignumber.js/bignumber.mjs
-  var isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
-  var mathceil = Math.ceil;
-  var mathfloor = Math.floor;
-  var bignumberError = "[BigNumber Error] ";
-  var tooManyDigits = bignumberError + "Number primitive has more than 15 significant digits: ";
-  var BASE = 1e14;
-  var LOG_BASE = 14;
-  var MAX_SAFE_INTEGER = 9007199254740991;
-  var POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13];
-  var SQRT_BASE = 1e7;
-  var MAX = 1e9;
-  function clone(configObject) {
-    var div, convertBase, parseNumeric2, P2 = BigNumber2.prototype = { constructor: BigNumber2, toString: null, valueOf: null }, ONE = new BigNumber2(1), DECIMAL_PLACES = 20, ROUNDING_MODE = 4, TO_EXP_NEG = -7, TO_EXP_POS = 21, MIN_EXP = -1e7, MAX_EXP = 1e7, CRYPTO = false, MODULO_MODE = 1, POW_PRECISION = 0, FORMAT = {
-      prefix: "",
-      groupSize: 3,
-      secondaryGroupSize: 0,
-      groupSeparator: ",",
-      decimalSeparator: ".",
-      fractionGroupSize: 0,
-      fractionGroupSeparator: "\xA0",
-      // non-breaking space
-      suffix: ""
-    }, ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz", alphabetHasNormalDecimalDigits = true;
-    function BigNumber2(v2, b2) {
-      var alphabet, c2, caseChanged, e3, i3, isNum, len, str, x2 = this;
-      if (!(x2 instanceof BigNumber2)) return new BigNumber2(v2, b2);
-      if (b2 == null) {
-        if (v2 && v2._isBigNumber === true) {
-          x2.s = v2.s;
-          if (!v2.c || v2.e > MAX_EXP) {
-            x2.c = x2.e = null;
-          } else if (v2.e < MIN_EXP) {
-            x2.c = [x2.e = 0];
-          } else {
-            x2.e = v2.e;
-            x2.c = v2.c.slice();
-          }
-          return;
-        }
-        if ((isNum = typeof v2 == "number") && v2 * 0 == 0) {
-          x2.s = 1 / v2 < 0 ? (v2 = -v2, -1) : 1;
-          if (v2 === ~~v2) {
-            for (e3 = 0, i3 = v2; i3 >= 10; i3 /= 10, e3++) ;
-            if (e3 > MAX_EXP) {
-              x2.c = x2.e = null;
-            } else {
-              x2.e = e3;
-              x2.c = [v2];
-            }
-            return;
-          }
-          str = String(v2);
-        } else {
-          if (!isNumeric.test(str = String(v2))) return parseNumeric2(x2, str, isNum);
-          x2.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
-        }
-        if ((e3 = str.indexOf(".")) > -1) str = str.replace(".", "");
-        if ((i3 = str.search(/e/i)) > 0) {
-          if (e3 < 0) e3 = i3;
-          e3 += +str.slice(i3 + 1);
-          str = str.substring(0, i3);
-        } else if (e3 < 0) {
-          e3 = str.length;
-        }
-      } else {
-        intCheck(b2, 2, ALPHABET.length, "Base");
-        if (b2 == 10 && alphabetHasNormalDecimalDigits) {
-          x2 = new BigNumber2(v2);
-          return round(x2, DECIMAL_PLACES + x2.e + 1, ROUNDING_MODE);
-        }
-        str = String(v2);
-        if (isNum = typeof v2 == "number") {
-          if (v2 * 0 != 0) return parseNumeric2(x2, str, isNum, b2);
-          x2.s = 1 / v2 < 0 ? (str = str.slice(1), -1) : 1;
-          if (BigNumber2.DEBUG && str.replace(/^0\.0*|\./, "").length > 15) {
-            throw Error(tooManyDigits + v2);
-          }
-        } else {
-          x2.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
-        }
-        alphabet = ALPHABET.slice(0, b2);
-        e3 = i3 = 0;
-        for (len = str.length; i3 < len; i3++) {
-          if (alphabet.indexOf(c2 = str.charAt(i3)) < 0) {
-            if (c2 == ".") {
-              if (i3 > e3) {
-                e3 = len;
-                continue;
-              }
-            } else if (!caseChanged) {
-              if (str == str.toUpperCase() && (str = str.toLowerCase()) || str == str.toLowerCase() && (str = str.toUpperCase())) {
-                caseChanged = true;
-                i3 = -1;
-                e3 = 0;
-                continue;
-              }
-            }
-            return parseNumeric2(x2, String(v2), isNum, b2);
-          }
-        }
-        isNum = false;
-        str = convertBase(str, b2, 10, x2.s);
-        if ((e3 = str.indexOf(".")) > -1) str = str.replace(".", "");
-        else e3 = str.length;
-      }
-      for (i3 = 0; str.charCodeAt(i3) === 48; i3++) ;
-      for (len = str.length; str.charCodeAt(--len) === 48; ) ;
-      if (str = str.slice(i3, ++len)) {
-        len -= i3;
-        if (isNum && BigNumber2.DEBUG && len > 15 && (v2 > MAX_SAFE_INTEGER || v2 !== mathfloor(v2))) {
-          throw Error(tooManyDigits + x2.s * v2);
-        }
-        if ((e3 = e3 - i3 - 1) > MAX_EXP) {
-          x2.c = x2.e = null;
-        } else if (e3 < MIN_EXP) {
-          x2.c = [x2.e = 0];
-        } else {
-          x2.e = e3;
-          x2.c = [];
-          i3 = (e3 + 1) % LOG_BASE;
-          if (e3 < 0) i3 += LOG_BASE;
-          if (i3 < len) {
-            if (i3) x2.c.push(+str.slice(0, i3));
-            for (len -= LOG_BASE; i3 < len; ) {
-              x2.c.push(+str.slice(i3, i3 += LOG_BASE));
-            }
-            i3 = LOG_BASE - (str = str.slice(i3)).length;
-          } else {
-            i3 -= len;
-          }
-          for (; i3--; str += "0") ;
-          x2.c.push(+str);
-        }
-      } else {
-        x2.c = [x2.e = 0];
-      }
+  // node_modules/d3-interpolate/src/basisClosed.js
+  function basisClosed_default(values) {
+    var n3 = values.length;
+    return function(t2) {
+      var i3 = Math.floor(((t2 %= 1) < 0 ? ++t2 : t2) * n3), v0 = values[(i3 + n3 - 1) % n3], v1 = values[i3 % n3], v2 = values[(i3 + 1) % n3], v3 = values[(i3 + 2) % n3];
+      return basis((t2 - i3 / n3) * n3, v0, v1, v2, v3);
+    };
+  }
+
+  // node_modules/d3-interpolate/src/constant.js
+  var constant_default3 = (x2) => () => x2;
+
+  // node_modules/d3-interpolate/src/color.js
+  function linear(a2, d2) {
+    return function(t2) {
+      return a2 + t2 * d2;
+    };
+  }
+  function exponential(a2, b2, y2) {
+    return a2 = Math.pow(a2, y2), b2 = Math.pow(b2, y2) - a2, y2 = 1 / y2, function(t2) {
+      return Math.pow(a2 + t2 * b2, y2);
+    };
+  }
+  function gamma(y2) {
+    return (y2 = +y2) === 1 ? nogamma : function(a2, b2) {
+      return b2 - a2 ? exponential(a2, b2, y2) : constant_default3(isNaN(a2) ? b2 : a2);
+    };
+  }
+  function nogamma(a2, b2) {
+    var d2 = b2 - a2;
+    return d2 ? linear(a2, d2) : constant_default3(isNaN(a2) ? b2 : a2);
+  }
+
+  // node_modules/d3-interpolate/src/rgb.js
+  var rgb_default = function rgbGamma(y2) {
+    var color2 = gamma(y2);
+    function rgb2(start2, end) {
+      var r2 = color2((start2 = rgb(start2)).r, (end = rgb(end)).r), g3 = color2(start2.g, end.g), b2 = color2(start2.b, end.b), opacity = nogamma(start2.opacity, end.opacity);
+      return function(t2) {
+        start2.r = r2(t2);
+        start2.g = g3(t2);
+        start2.b = b2(t2);
+        start2.opacity = opacity(t2);
+        return start2 + "";
+      };
     }
-    BigNumber2.clone = clone;
-    BigNumber2.ROUND_UP = 0;
-    BigNumber2.ROUND_DOWN = 1;
-    BigNumber2.ROUND_CEIL = 2;
-    BigNumber2.ROUND_FLOOR = 3;
-    BigNumber2.ROUND_HALF_UP = 4;
-    BigNumber2.ROUND_HALF_DOWN = 5;
-    BigNumber2.ROUND_HALF_EVEN = 6;
-    BigNumber2.ROUND_HALF_CEIL = 7;
-    BigNumber2.ROUND_HALF_FLOOR = 8;
-    BigNumber2.EUCLID = 9;
-    BigNumber2.config = BigNumber2.set = function(obj) {
-      var p2, v2;
-      if (obj != null) {
-        if (typeof obj == "object") {
-          if (obj.hasOwnProperty(p2 = "DECIMAL_PLACES")) {
-            v2 = obj[p2];
-            intCheck(v2, 0, MAX, p2);
-            DECIMAL_PLACES = v2;
-          }
-          if (obj.hasOwnProperty(p2 = "ROUNDING_MODE")) {
-            v2 = obj[p2];
-            intCheck(v2, 0, 8, p2);
-            ROUNDING_MODE = v2;
-          }
-          if (obj.hasOwnProperty(p2 = "EXPONENTIAL_AT")) {
-            v2 = obj[p2];
-            if (v2 && v2.pop) {
-              intCheck(v2[0], -MAX, 0, p2);
-              intCheck(v2[1], 0, MAX, p2);
-              TO_EXP_NEG = v2[0];
-              TO_EXP_POS = v2[1];
-            } else {
-              intCheck(v2, -MAX, MAX, p2);
-              TO_EXP_NEG = -(TO_EXP_POS = v2 < 0 ? -v2 : v2);
-            }
-          }
-          if (obj.hasOwnProperty(p2 = "RANGE")) {
-            v2 = obj[p2];
-            if (v2 && v2.pop) {
-              intCheck(v2[0], -MAX, -1, p2);
-              intCheck(v2[1], 1, MAX, p2);
-              MIN_EXP = v2[0];
-              MAX_EXP = v2[1];
-            } else {
-              intCheck(v2, -MAX, MAX, p2);
-              if (v2) {
-                MIN_EXP = -(MAX_EXP = v2 < 0 ? -v2 : v2);
-              } else {
-                throw Error(bignumberError + p2 + " cannot be zero: " + v2);
-              }
-            }
-          }
-          if (obj.hasOwnProperty(p2 = "CRYPTO")) {
-            v2 = obj[p2];
-            if (v2 === !!v2) {
-              if (v2) {
-                if (typeof crypto != "undefined" && crypto && (crypto.getRandomValues || crypto.randomBytes)) {
-                  CRYPTO = v2;
-                } else {
-                  CRYPTO = !v2;
-                  throw Error(bignumberError + "crypto unavailable");
-                }
-              } else {
-                CRYPTO = v2;
-              }
-            } else {
-              throw Error(bignumberError + p2 + " not true or false: " + v2);
-            }
-          }
-          if (obj.hasOwnProperty(p2 = "MODULO_MODE")) {
-            v2 = obj[p2];
-            intCheck(v2, 0, 9, p2);
-            MODULO_MODE = v2;
-          }
-          if (obj.hasOwnProperty(p2 = "POW_PRECISION")) {
-            v2 = obj[p2];
-            intCheck(v2, 0, MAX, p2);
-            POW_PRECISION = v2;
-          }
-          if (obj.hasOwnProperty(p2 = "FORMAT")) {
-            v2 = obj[p2];
-            if (typeof v2 == "object") FORMAT = v2;
-            else throw Error(bignumberError + p2 + " not an object: " + v2);
-          }
-          if (obj.hasOwnProperty(p2 = "ALPHABET")) {
-            v2 = obj[p2];
-            if (typeof v2 == "string" && !/^.?$|[+\-.\s]|(.).*\1/.test(v2)) {
-              alphabetHasNormalDecimalDigits = v2.slice(0, 10) == "0123456789";
-              ALPHABET = v2;
-            } else {
-              throw Error(bignumberError + p2 + " invalid: " + v2);
-            }
-          }
-        } else {
-          throw Error(bignumberError + "Object expected: " + obj);
-        }
+    rgb2.gamma = rgbGamma;
+    return rgb2;
+  }(1);
+  function rgbSpline(spline) {
+    return function(colors) {
+      var n3 = colors.length, r2 = new Array(n3), g3 = new Array(n3), b2 = new Array(n3), i3, color2;
+      for (i3 = 0; i3 < n3; ++i3) {
+        color2 = rgb(colors[i3]);
+        r2[i3] = color2.r || 0;
+        g3[i3] = color2.g || 0;
+        b2[i3] = color2.b || 0;
       }
-      return {
-        DECIMAL_PLACES,
-        ROUNDING_MODE,
-        EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
-        RANGE: [MIN_EXP, MAX_EXP],
-        CRYPTO,
-        MODULO_MODE,
-        POW_PRECISION,
-        FORMAT,
-        ALPHABET
+      r2 = spline(r2);
+      g3 = spline(g3);
+      b2 = spline(b2);
+      color2.opacity = 1;
+      return function(t2) {
+        color2.r = r2(t2);
+        color2.g = g3(t2);
+        color2.b = b2(t2);
+        return color2 + "";
       };
     };
-    BigNumber2.isBigNumber = function(v2) {
-      if (!v2 || v2._isBigNumber !== true) return false;
-      if (!BigNumber2.DEBUG) return true;
-      var i3, n3, c2 = v2.c, e3 = v2.e, s2 = v2.s;
-      out: if ({}.toString.call(c2) == "[object Array]") {
-        if ((s2 === 1 || s2 === -1) && e3 >= -MAX && e3 <= MAX && e3 === mathfloor(e3)) {
-          if (c2[0] === 0) {
-            if (e3 === 0 && c2.length === 1) return true;
-            break out;
-          }
-          i3 = (e3 + 1) % LOG_BASE;
-          if (i3 < 1) i3 += LOG_BASE;
-          if (String(c2[0]).length == i3) {
-            for (i3 = 0; i3 < c2.length; i3++) {
-              n3 = c2[i3];
-              if (n3 < 0 || n3 >= BASE || n3 !== mathfloor(n3)) break out;
-            }
-            if (n3 !== 0) return true;
-          }
-        }
-      } else if (c2 === null && e3 === null && (s2 === null || s2 === 1 || s2 === -1)) {
-        return true;
-      }
-      throw Error(bignumberError + "Invalid BigNumber: " + v2);
+  }
+  var rgbBasis = rgbSpline(basis_default);
+  var rgbBasisClosed = rgbSpline(basisClosed_default);
+
+  // node_modules/d3-interpolate/src/numberArray.js
+  function numberArray_default(a2, b2) {
+    if (!b2) b2 = [];
+    var n3 = a2 ? Math.min(b2.length, a2.length) : 0, c2 = b2.slice(), i3;
+    return function(t2) {
+      for (i3 = 0; i3 < n3; ++i3) c2[i3] = a2[i3] * (1 - t2) + b2[i3] * t2;
+      return c2;
     };
-    BigNumber2.maximum = BigNumber2.max = function() {
-      return maxOrMin(arguments, -1);
+  }
+  function isNumberArray(x2) {
+    return ArrayBuffer.isView(x2) && !(x2 instanceof DataView);
+  }
+
+  // node_modules/d3-interpolate/src/array.js
+  function genericArray(a2, b2) {
+    var nb = b2 ? b2.length : 0, na = a2 ? Math.min(nb, a2.length) : 0, x2 = new Array(na), c2 = new Array(nb), i3;
+    for (i3 = 0; i3 < na; ++i3) x2[i3] = value_default(a2[i3], b2[i3]);
+    for (; i3 < nb; ++i3) c2[i3] = b2[i3];
+    return function(t2) {
+      for (i3 = 0; i3 < na; ++i3) c2[i3] = x2[i3](t2);
+      return c2;
     };
-    BigNumber2.minimum = BigNumber2.min = function() {
-      return maxOrMin(arguments, 1);
+  }
+
+  // node_modules/d3-interpolate/src/date.js
+  function date_default(a2, b2) {
+    var d2 = /* @__PURE__ */ new Date();
+    return a2 = +a2, b2 = +b2, function(t2) {
+      return d2.setTime(a2 * (1 - t2) + b2 * t2), d2;
     };
-    BigNumber2.random = function() {
-      var pow2_53 = 9007199254740992;
-      var random53bitInt = Math.random() * pow2_53 & 2097151 ? function() {
-        return mathfloor(Math.random() * pow2_53);
-      } : function() {
-        return (Math.random() * 1073741824 | 0) * 8388608 + (Math.random() * 8388608 | 0);
-      };
-      return function(dp) {
-        var a2, b2, e3, k2, v2, i3 = 0, c2 = [], rand = new BigNumber2(ONE);
-        if (dp == null) dp = DECIMAL_PLACES;
-        else intCheck(dp, 0, MAX);
-        k2 = mathceil(dp / LOG_BASE);
-        if (CRYPTO) {
-          if (crypto.getRandomValues) {
-            a2 = crypto.getRandomValues(new Uint32Array(k2 *= 2));
-            for (; i3 < k2; ) {
-              v2 = a2[i3] * 131072 + (a2[i3 + 1] >>> 11);
-              if (v2 >= 9e15) {
-                b2 = crypto.getRandomValues(new Uint32Array(2));
-                a2[i3] = b2[0];
-                a2[i3 + 1] = b2[1];
-              } else {
-                c2.push(v2 % 1e14);
-                i3 += 2;
-              }
-            }
-            i3 = k2 / 2;
-          } else if (crypto.randomBytes) {
-            a2 = crypto.randomBytes(k2 *= 7);
-            for (; i3 < k2; ) {
-              v2 = (a2[i3] & 31) * 281474976710656 + a2[i3 + 1] * 1099511627776 + a2[i3 + 2] * 4294967296 + a2[i3 + 3] * 16777216 + (a2[i3 + 4] << 16) + (a2[i3 + 5] << 8) + a2[i3 + 6];
-              if (v2 >= 9e15) {
-                crypto.randomBytes(7).copy(a2, i3);
-              } else {
-                c2.push(v2 % 1e14);
-                i3 += 7;
-              }
-            }
-            i3 = k2 / 7;
-          } else {
-            CRYPTO = false;
-            throw Error(bignumberError + "crypto unavailable");
-          }
-        }
-        if (!CRYPTO) {
-          for (; i3 < k2; ) {
-            v2 = random53bitInt();
-            if (v2 < 9e15) c2[i3++] = v2 % 1e14;
-          }
-        }
-        k2 = c2[--i3];
-        dp %= LOG_BASE;
-        if (k2 && dp) {
-          v2 = POWS_TEN[LOG_BASE - dp];
-          c2[i3] = mathfloor(k2 / v2) * v2;
-        }
-        for (; c2[i3] === 0; c2.pop(), i3--) ;
-        if (i3 < 0) {
-          c2 = [e3 = 0];
-        } else {
-          for (e3 = -1; c2[0] === 0; c2.splice(0, 1), e3 -= LOG_BASE) ;
-          for (i3 = 1, v2 = c2[0]; v2 >= 10; v2 /= 10, i3++) ;
-          if (i3 < LOG_BASE) e3 -= LOG_BASE - i3;
-        }
-        rand.e = e3;
-        rand.c = c2;
-        return rand;
-      };
-    }();
-    BigNumber2.sum = function() {
-      var i3 = 1, args = arguments, sum = new BigNumber2(args[0]);
-      for (; i3 < args.length; ) sum = sum.plus(args[i3++]);
-      return sum;
+  }
+
+  // node_modules/d3-interpolate/src/number.js
+  function number_default(a2, b2) {
+    return a2 = +a2, b2 = +b2, function(t2) {
+      return a2 * (1 - t2) + b2 * t2;
     };
-    convertBase = /* @__PURE__ */ function() {
-      var decimal = "0123456789";
-      function toBaseOut(str, baseIn, baseOut, alphabet) {
-        var j2, arr = [0], arrL, i3 = 0, len = str.length;
-        for (; i3 < len; ) {
-          for (arrL = arr.length; arrL--; arr[arrL] *= baseIn) ;
-          arr[0] += alphabet.indexOf(str.charAt(i3++));
-          for (j2 = 0; j2 < arr.length; j2++) {
-            if (arr[j2] > baseOut - 1) {
-              if (arr[j2 + 1] == null) arr[j2 + 1] = 0;
-              arr[j2 + 1] += arr[j2] / baseOut | 0;
-              arr[j2] %= baseOut;
-            }
-          }
-        }
-        return arr.reverse();
+  }
+
+  // node_modules/d3-interpolate/src/object.js
+  function object_default(a2, b2) {
+    var i3 = {}, c2 = {}, k2;
+    if (a2 === null || typeof a2 !== "object") a2 = {};
+    if (b2 === null || typeof b2 !== "object") b2 = {};
+    for (k2 in b2) {
+      if (k2 in a2) {
+        i3[k2] = value_default(a2[k2], b2[k2]);
+      } else {
+        c2[k2] = b2[k2];
       }
-      return function(str, baseIn, baseOut, sign2, callerIsToString) {
-        var alphabet, d2, e3, k2, r2, x2, xc, y2, i3 = str.indexOf("."), dp = DECIMAL_PLACES, rm = ROUNDING_MODE;
-        if (i3 >= 0) {
-          k2 = POW_PRECISION;
-          POW_PRECISION = 0;
-          str = str.replace(".", "");
-          y2 = new BigNumber2(baseIn);
-          x2 = y2.pow(str.length - i3);
-          POW_PRECISION = k2;
-          y2.c = toBaseOut(
-            toFixedPoint(coeffToString(x2.c), x2.e, "0"),
-            10,
-            baseOut,
-            decimal
-          );
-          y2.e = y2.c.length;
-        }
-        xc = toBaseOut(str, baseIn, baseOut, callerIsToString ? (alphabet = ALPHABET, decimal) : (alphabet = decimal, ALPHABET));
-        e3 = k2 = xc.length;
-        for (; xc[--k2] == 0; xc.pop()) ;
-        if (!xc[0]) return alphabet.charAt(0);
-        if (i3 < 0) {
-          --e3;
-        } else {
-          x2.c = xc;
-          x2.e = e3;
-          x2.s = sign2;
-          x2 = div(x2, y2, dp, rm, baseOut);
-          xc = x2.c;
-          r2 = x2.r;
-          e3 = x2.e;
-        }
-        d2 = e3 + dp + 1;
-        i3 = xc[d2];
-        k2 = baseOut / 2;
-        r2 = r2 || d2 < 0 || xc[d2 + 1] != null;
-        r2 = rm < 4 ? (i3 != null || r2) && (rm == 0 || rm == (x2.s < 0 ? 3 : 2)) : i3 > k2 || i3 == k2 && (rm == 4 || r2 || rm == 6 && xc[d2 - 1] & 1 || rm == (x2.s < 0 ? 8 : 7));
-        if (d2 < 1 || !xc[0]) {
-          str = r2 ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
-        } else {
-          xc.length = d2;
-          if (r2) {
-            for (--baseOut; ++xc[--d2] > baseOut; ) {
-              xc[d2] = 0;
-              if (!d2) {
-                ++e3;
-                xc = [1].concat(xc);
-              }
-            }
-          }
-          for (k2 = xc.length; !xc[--k2]; ) ;
-          for (i3 = 0, str = ""; i3 <= k2; str += alphabet.charAt(xc[i3++])) ;
-          str = toFixedPoint(str, e3, alphabet.charAt(0));
-        }
-        return str;
-      };
-    }();
-    div = /* @__PURE__ */ function() {
-      function multiply(x2, k2, base) {
-        var m2, temp, xlo, xhi, carry = 0, i3 = x2.length, klo = k2 % SQRT_BASE, khi = k2 / SQRT_BASE | 0;
-        for (x2 = x2.slice(); i3--; ) {
-          xlo = x2[i3] % SQRT_BASE;
-          xhi = x2[i3] / SQRT_BASE | 0;
-          m2 = khi * xlo + xhi * klo;
-          temp = klo * xlo + m2 % SQRT_BASE * SQRT_BASE + carry;
-          carry = (temp / base | 0) + (m2 / SQRT_BASE | 0) + khi * xhi;
-          x2[i3] = temp % base;
-        }
-        if (carry) x2 = [carry].concat(x2);
-        return x2;
+    }
+    return function(t2) {
+      for (k2 in i3) c2[k2] = i3[k2](t2);
+      return c2;
+    };
+  }
+
+  // node_modules/d3-interpolate/src/string.js
+  var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
+  var reB = new RegExp(reA.source, "g");
+  function zero2(b2) {
+    return function() {
+      return b2;
+    };
+  }
+  function one(b2) {
+    return function(t2) {
+      return b2(t2) + "";
+    };
+  }
+  function string_default(a2, b2) {
+    var bi = reA.lastIndex = reB.lastIndex = 0, am, bm, bs, i3 = -1, s2 = [], q2 = [];
+    a2 = a2 + "", b2 = b2 + "";
+    while ((am = reA.exec(a2)) && (bm = reB.exec(b2))) {
+      if ((bs = bm.index) > bi) {
+        bs = b2.slice(bi, bs);
+        if (s2[i3]) s2[i3] += bs;
+        else s2[++i3] = bs;
+      }
+      if ((am = am[0]) === (bm = bm[0])) {
+        if (s2[i3]) s2[i3] += bm;
+        else s2[++i3] = bm;
+      } else {
+        s2[++i3] = null;
+        q2.push({ i: i3, x: number_default(am, bm) });
+      }
+      bi = reB.lastIndex;
+    }
+    if (bi < b2.length) {
+      bs = b2.slice(bi);
+      if (s2[i3]) s2[i3] += bs;
+      else s2[++i3] = bs;
+    }
+    return s2.length < 2 ? q2[0] ? one(q2[0].x) : zero2(b2) : (b2 = q2.length, function(t2) {
+      for (var i4 = 0, o2; i4 < b2; ++i4) s2[(o2 = q2[i4]).i] = o2.x(t2);
+      return s2.join("");
+    });
+  }
+
+  // node_modules/d3-interpolate/src/value.js
+  function value_default(a2, b2) {
+    var t2 = typeof b2, c2;
+    return b2 == null || t2 === "boolean" ? constant_default3(b2) : (t2 === "number" ? number_default : t2 === "string" ? (c2 = color(b2)) ? (b2 = c2, rgb_default) : string_default : b2 instanceof color ? rgb_default : b2 instanceof Date ? date_default : isNumberArray(b2) ? numberArray_default : Array.isArray(b2) ? genericArray : typeof b2.valueOf !== "function" && typeof b2.toString !== "function" || isNaN(b2) ? object_default : number_default)(a2, b2);
+  }
+
+  // node_modules/d3-interpolate/src/round.js
+  function round_default(a2, b2) {
+    return a2 = +a2, b2 = +b2, function(t2) {
+      return Math.round(a2 * (1 - t2) + b2 * t2);
+    };
+  }
+
+  // node_modules/d3-interpolate/src/transform/decompose.js
+  var degrees2 = 180 / Math.PI;
+  var identity = {
+    translateX: 0,
+    translateY: 0,
+    rotate: 0,
+    skewX: 0,
+    scaleX: 1,
+    scaleY: 1
+  };
+  function decompose_default(a2, b2, c2, d2, e3, f2) {
+    var scaleX, scaleY, skewX;
+    if (scaleX = Math.sqrt(a2 * a2 + b2 * b2)) a2 /= scaleX, b2 /= scaleX;
+    if (skewX = a2 * c2 + b2 * d2) c2 -= a2 * skewX, d2 -= b2 * skewX;
+    if (scaleY = Math.sqrt(c2 * c2 + d2 * d2)) c2 /= scaleY, d2 /= scaleY, skewX /= scaleY;
+    if (a2 * d2 < b2 * c2) a2 = -a2, b2 = -b2, skewX = -skewX, scaleX = -scaleX;
+    return {
+      translateX: e3,
+      translateY: f2,
+      rotate: Math.atan2(b2, a2) * degrees2,
+      skewX: Math.atan(skewX) * degrees2,
+      scaleX,
+      scaleY
+    };
+  }
+
+  // node_modules/d3-interpolate/src/transform/parse.js
+  var svgNode;
+  function parseCss(value) {
+    const m2 = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
+    return m2.isIdentity ? identity : decompose_default(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f);
+  }
+  function parseSvg(value) {
+    if (value == null) return identity;
+    if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+    svgNode.setAttribute("transform", value);
+    if (!(value = svgNode.transform.baseVal.consolidate())) return identity;
+    value = value.matrix;
+    return decompose_default(value.a, value.b, value.c, value.d, value.e, value.f);
+  }
+
+  // node_modules/d3-interpolate/src/transform/index.js
+  function interpolateTransform(parse, pxComma, pxParen, degParen) {
+    function pop(s2) {
+      return s2.length ? s2.pop() + " " : "";
+    }
+    function translate(xa, ya, xb, yb, s2, q2) {
+      if (xa !== xb || ya !== yb) {
+        var i3 = s2.push("translate(", null, pxComma, null, pxParen);
+        q2.push({ i: i3 - 4, x: number_default(xa, xb) }, { i: i3 - 2, x: number_default(ya, yb) });
+      } else if (xb || yb) {
+        s2.push("translate(" + xb + pxComma + yb + pxParen);
       }
-      function compare2(a2, b2, aL, bL) {
-        var i3, cmp;
-        if (aL != bL) {
-          cmp = aL > bL ? 1 : -1;
-        } else {
-          for (i3 = cmp = 0; i3 < aL; i3++) {
-            if (a2[i3] != b2[i3]) {
-              cmp = a2[i3] > b2[i3] ? 1 : -1;
-              break;
-            }
-          }
-        }
-        return cmp;
+    }
+    function rotate(a2, b2, s2, q2) {
+      if (a2 !== b2) {
+        if (a2 - b2 > 180) b2 += 360;
+        else if (b2 - a2 > 180) a2 += 360;
+        q2.push({ i: s2.push(pop(s2) + "rotate(", null, degParen) - 2, x: number_default(a2, b2) });
+      } else if (b2) {
+        s2.push(pop(s2) + "rotate(" + b2 + degParen);
       }
-      function subtract(a2, b2, aL, base) {
-        var i3 = 0;
-        for (; aL--; ) {
-          a2[aL] -= i3;
-          i3 = a2[aL] < b2[aL] ? 1 : 0;
-          a2[aL] = i3 * base + a2[aL] - b2[aL];
-        }
-        for (; !a2[0] && a2.length > 1; a2.splice(0, 1)) ;
+    }
+    function skewX(a2, b2, s2, q2) {
+      if (a2 !== b2) {
+        q2.push({ i: s2.push(pop(s2) + "skewX(", null, degParen) - 2, x: number_default(a2, b2) });
+      } else if (b2) {
+        s2.push(pop(s2) + "skewX(" + b2 + degParen);
       }
-      return function(x2, y2, dp, rm, base) {
-        var cmp, e3, i3, more, n3, prod, prodL, q2, qc, rem, remL, rem0, xi, xL, yc0, yL, yz, s2 = x2.s == y2.s ? 1 : -1, xc = x2.c, yc = y2.c;
-        if (!xc || !xc[0] || !yc || !yc[0]) {
-          return new BigNumber2(
-            // Return NaN if either NaN, or both Infinity or 0.
-            !x2.s || !y2.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : (
-              // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
-              xc && xc[0] == 0 || !yc ? s2 * 0 : s2 / 0
-            )
-          );
-        }
-        q2 = new BigNumber2(s2);
-        qc = q2.c = [];
-        e3 = x2.e - y2.e;
-        s2 = dp + e3 + 1;
-        if (!base) {
-          base = BASE;
-          e3 = bitFloor(x2.e / LOG_BASE) - bitFloor(y2.e / LOG_BASE);
-          s2 = s2 / LOG_BASE | 0;
-        }
-        for (i3 = 0; yc[i3] == (xc[i3] || 0); i3++) ;
-        if (yc[i3] > (xc[i3] || 0)) e3--;
-        if (s2 < 0) {
-          qc.push(1);
-          more = true;
-        } else {
-          xL = xc.length;
-          yL = yc.length;
-          i3 = 0;
-          s2 += 2;
-          n3 = mathfloor(base / (yc[0] + 1));
-          if (n3 > 1) {
-            yc = multiply(yc, n3, base);
-            xc = multiply(xc, n3, base);
-            yL = yc.length;
-            xL = xc.length;
-          }
-          xi = yL;
-          rem = xc.slice(0, yL);
-          remL = rem.length;
-          for (; remL < yL; rem[remL++] = 0) ;
-          yz = yc.slice();
-          yz = [0].concat(yz);
-          yc0 = yc[0];
-          if (yc[1] >= base / 2) yc0++;
-          do {
-            n3 = 0;
-            cmp = compare2(yc, rem, yL, remL);
-            if (cmp < 0) {
-              rem0 = rem[0];
-              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);
-              n3 = mathfloor(rem0 / yc0);
-              if (n3 > 1) {
-                if (n3 >= base) n3 = base - 1;
-                prod = multiply(yc, n3, base);
-                prodL = prod.length;
-                remL = rem.length;
-                while (compare2(prod, rem, prodL, remL) == 1) {
-                  n3--;
-                  subtract(prod, yL < prodL ? yz : yc, prodL, base);
-                  prodL = prod.length;
-                  cmp = 1;
-                }
-              } else {
-                if (n3 == 0) {
-                  cmp = n3 = 1;
-                }
-                prod = yc.slice();
-                prodL = prod.length;
-              }
-              if (prodL < remL) prod = [0].concat(prod);
-              subtract(rem, prod, remL, base);
-              remL = rem.length;
-              if (cmp == -1) {
-                while (compare2(yc, rem, yL, remL) < 1) {
-                  n3++;
-                  subtract(rem, yL < remL ? yz : yc, remL, base);
-                  remL = rem.length;
-                }
-              }
-            } else if (cmp === 0) {
-              n3++;
-              rem = [0];
-            }
-            qc[i3++] = n3;
-            if (rem[0]) {
-              rem[remL++] = xc[xi] || 0;
-            } else {
-              rem = [xc[xi]];
-              remL = 1;
-            }
-          } while ((xi++ < xL || rem[0] != null) && s2--);
-          more = rem[0] != null;
-          if (!qc[0]) qc.splice(0, 1);
-        }
-        if (base == BASE) {
-          for (i3 = 1, s2 = qc[0]; s2 >= 10; s2 /= 10, i3++) ;
-          round(q2, dp + (q2.e = i3 + e3 * LOG_BASE - 1) + 1, rm, more);
-        } else {
-          q2.e = e3;
-          q2.r = +more;
-        }
-        return q2;
+    }
+    function scale(xa, ya, xb, yb, s2, q2) {
+      if (xa !== xb || ya !== yb) {
+        var i3 = s2.push(pop(s2) + "scale(", null, ",", null, ")");
+        q2.push({ i: i3 - 4, x: number_default(xa, xb) }, { i: i3 - 2, x: number_default(ya, yb) });
+      } else if (xb !== 1 || yb !== 1) {
+        s2.push(pop(s2) + "scale(" + xb + "," + yb + ")");
+      }
+    }
+    return function(a2, b2) {
+      var s2 = [], q2 = [];
+      a2 = parse(a2), b2 = parse(b2);
+      translate(a2.translateX, a2.translateY, b2.translateX, b2.translateY, s2, q2);
+      rotate(a2.rotate, b2.rotate, s2, q2);
+      skewX(a2.skewX, b2.skewX, s2, q2);
+      scale(a2.scaleX, a2.scaleY, b2.scaleX, b2.scaleY, s2, q2);
+      a2 = b2 = null;
+      return function(t2) {
+        var i3 = -1, n3 = q2.length, o2;
+        while (++i3 < n3) s2[(o2 = q2[i3]).i] = o2.x(t2);
+        return s2.join("");
       };
-    }();
-    function format2(n3, i3, rm, id2) {
-      var c0, e3, ne2, len, str;
-      if (rm == null) rm = ROUNDING_MODE;
-      else intCheck(rm, 0, 8);
-      if (!n3.c) return n3.toString();
-      c0 = n3.c[0];
-      ne2 = n3.e;
-      if (i3 == null) {
-        str = coeffToString(n3.c);
-        str = id2 == 1 || id2 == 2 && (ne2 <= TO_EXP_NEG || ne2 >= TO_EXP_POS) ? toExponential(str, ne2) : toFixedPoint(str, ne2, "0");
+    };
+  }
+  var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+  var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
+
+  // node_modules/d3-interpolate/src/zoom.js
+  var epsilon22 = 1e-12;
+  function cosh(x2) {
+    return ((x2 = Math.exp(x2)) + 1 / x2) / 2;
+  }
+  function sinh(x2) {
+    return ((x2 = Math.exp(x2)) - 1 / x2) / 2;
+  }
+  function tanh(x2) {
+    return ((x2 = Math.exp(2 * x2)) - 1) / (x2 + 1);
+  }
+  var zoom_default = function zoomRho(rho, rho2, rho4) {
+    function zoom(p02, p1) {
+      var ux0 = p02[0], uy0 = p02[1], w0 = p02[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i3, S2;
+      if (d2 < epsilon22) {
+        S2 = Math.log(w1 / w0) / rho;
+        i3 = function(t2) {
+          return [
+            ux0 + t2 * dx,
+            uy0 + t2 * dy,
+            w0 * Math.exp(rho * t2 * S2)
+          ];
+        };
       } else {
-        n3 = round(new BigNumber2(n3), i3, rm);
-        e3 = n3.e;
-        str = coeffToString(n3.c);
-        len = str.length;
-        if (id2 == 1 || id2 == 2 && (i3 <= e3 || e3 <= TO_EXP_NEG)) {
-          for (; len < i3; str += "0", len++) ;
-          str = toExponential(str, e3);
-        } else {
-          i3 -= ne2;
-          str = toFixedPoint(str, e3, "0");
-          if (e3 + 1 > len) {
-            if (--i3 > 0) for (str += "."; i3--; str += "0") ;
-          } else {
-            i3 += e3 - len;
-            if (i3 > 0) {
-              if (e3 + 1 == len) str += ".";
-              for (; i3--; str += "0") ;
-            }
-          }
-        }
+        var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+        S2 = (r1 - r0) / rho;
+        i3 = function(t2) {
+          var s2 = t2 * S2, coshr0 = cosh(r0), u2 = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s2 + r0) - sinh(r0));
+          return [
+            ux0 + u2 * dx,
+            uy0 + u2 * dy,
+            w0 * coshr0 / cosh(rho * s2 + r0)
+          ];
+        };
       }
-      return n3.s < 0 && c0 ? "-" + str : str;
+      i3.duration = S2 * 1e3 * rho / Math.SQRT2;
+      return i3;
     }
-    function maxOrMin(args, n3) {
-      var k2, y2, i3 = 1, x2 = new BigNumber2(args[0]);
-      for (; i3 < args.length; i3++) {
-        y2 = new BigNumber2(args[i3]);
-        if (!y2.s || (k2 = compare(x2, y2)) === n3 || k2 === 0 && x2.s === n3) {
-          x2 = y2;
-        }
+    zoom.rho = function(_2) {
+      var _1 = Math.max(1e-3, +_2), _22 = _1 * _1, _4 = _22 * _22;
+      return zoomRho(_1, _22, _4);
+    };
+    return zoom;
+  }(Math.SQRT2, 2, 4);
+
+  // node_modules/d3-interpolate/src/quantize.js
+  function quantize_default(interpolator, n3) {
+    var samples = new Array(n3);
+    for (var i3 = 0; i3 < n3; ++i3) samples[i3] = interpolator(i3 / (n3 - 1));
+    return samples;
+  }
+
+  // node_modules/d3-timer/src/timer.js
+  var frame = 0;
+  var timeout = 0;
+  var interval = 0;
+  var pokeDelay = 1e3;
+  var taskHead;
+  var taskTail;
+  var clockLast = 0;
+  var clockNow = 0;
+  var clockSkew = 0;
+  var clock = typeof performance === "object" && performance.now ? performance : Date;
+  var setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f2) {
+    setTimeout(f2, 17);
+  };
+  function now() {
+    return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+  }
+  function clearNow() {
+    clockNow = 0;
+  }
+  function Timer() {
+    this._call = this._time = this._next = null;
+  }
+  Timer.prototype = timer.prototype = {
+    constructor: Timer,
+    restart: function(callback, delay, time) {
+      if (typeof callback !== "function") throw new TypeError("callback is not a function");
+      time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+      if (!this._next && taskTail !== this) {
+        if (taskTail) taskTail._next = this;
+        else taskHead = this;
+        taskTail = this;
+      }
+      this._call = callback;
+      this._time = time;
+      sleep();
+    },
+    stop: function() {
+      if (this._call) {
+        this._call = null;
+        this._time = Infinity;
+        sleep();
       }
-      return x2;
     }
-    function normalise(n3, c2, e3) {
-      var i3 = 1, j2 = c2.length;
-      for (; !c2[--j2]; c2.pop()) ;
-      for (j2 = c2[0]; j2 >= 10; j2 /= 10, i3++) ;
-      if ((e3 = i3 + e3 * LOG_BASE - 1) > MAX_EXP) {
-        n3.c = n3.e = null;
-      } else if (e3 < MIN_EXP) {
-        n3.c = [n3.e = 0];
+  };
+  function timer(callback, delay, time) {
+    var t2 = new Timer();
+    t2.restart(callback, delay, time);
+    return t2;
+  }
+  function timerFlush() {
+    now();
+    ++frame;
+    var t2 = taskHead, e3;
+    while (t2) {
+      if ((e3 = clockNow - t2._time) >= 0) t2._call.call(void 0, e3);
+      t2 = t2._next;
+    }
+    --frame;
+  }
+  function wake() {
+    clockNow = (clockLast = clock.now()) + clockSkew;
+    frame = timeout = 0;
+    try {
+      timerFlush();
+    } finally {
+      frame = 0;
+      nap();
+      clockNow = 0;
+    }
+  }
+  function poke() {
+    var now3 = clock.now(), delay = now3 - clockLast;
+    if (delay > pokeDelay) clockSkew -= delay, clockLast = now3;
+  }
+  function nap() {
+    var t0, t1 = taskHead, t2, time = Infinity;
+    while (t1) {
+      if (t1._call) {
+        if (time > t1._time) time = t1._time;
+        t0 = t1, t1 = t1._next;
       } else {
-        n3.e = e3;
-        n3.c = c2;
+        t2 = t1._next, t1._next = null;
+        t1 = t0 ? t0._next = t2 : taskHead = t2;
       }
-      return n3;
     }
-    parseNumeric2 = /* @__PURE__ */ function() {
-      var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, dotAfter = /^([^.]+)\.$/, dotBefore = /^\.([^.]+)$/, isInfinityOrNaN = /^-?(Infinity|NaN)$/, whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;
-      return function(x2, str, isNum, b2) {
-        var base, s2 = isNum ? str : str.replace(whitespaceOrPlus, "");
-        if (isInfinityOrNaN.test(s2)) {
-          x2.s = isNaN(s2) ? null : s2 < 0 ? -1 : 1;
-        } else {
-          if (!isNum) {
-            s2 = s2.replace(basePrefix, function(m2, p1, p2) {
-              base = (p2 = p2.toLowerCase()) == "x" ? 16 : p2 == "b" ? 2 : 8;
-              return !b2 || b2 == base ? p1 : m2;
-            });
-            if (b2) {
-              base = b2;
-              s2 = s2.replace(dotAfter, "$1").replace(dotBefore, "0.$1");
-            }
-            if (str != s2) return new BigNumber2(s2, base);
-          }
-          if (BigNumber2.DEBUG) {
-            throw Error(bignumberError + "Not a" + (b2 ? " base " + b2 : "") + " number: " + str);
-          }
-          x2.s = null;
-        }
-        x2.c = x2.e = null;
-      };
-    }();
-    function round(x2, sd, rm, r2) {
-      var d2, i3, j2, k2, n3, ni, rd, xc = x2.c, pows10 = POWS_TEN;
-      if (xc) {
-        out: {
-          for (d2 = 1, k2 = xc[0]; k2 >= 10; k2 /= 10, d2++) ;
-          i3 = sd - d2;
-          if (i3 < 0) {
-            i3 += LOG_BASE;
-            j2 = sd;
-            n3 = xc[ni = 0];
-            rd = mathfloor(n3 / pows10[d2 - j2 - 1] % 10);
-          } else {
-            ni = mathceil((i3 + 1) / LOG_BASE);
-            if (ni >= xc.length) {
-              if (r2) {
-                for (; xc.length <= ni; xc.push(0)) ;
-                n3 = rd = 0;
-                d2 = 1;
-                i3 %= LOG_BASE;
-                j2 = i3 - LOG_BASE + 1;
-              } else {
-                break out;
-              }
-            } else {
-              n3 = k2 = xc[ni];
-              for (d2 = 1; k2 >= 10; k2 /= 10, d2++) ;
-              i3 %= LOG_BASE;
-              j2 = i3 - LOG_BASE + d2;
-              rd = j2 < 0 ? 0 : mathfloor(n3 / pows10[d2 - j2 - 1] % 10);
-            }
-          }
-          r2 = r2 || sd < 0 || // Are there any non-zero digits after the rounding digit?
-          // The expression  n % pows10[d - j - 1]  returns all digits of n to the right
-          // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
-          xc[ni + 1] != null || (j2 < 0 ? n3 : n3 % pows10[d2 - j2 - 1]);
-          r2 = rm < 4 ? (rd || r2) && (rm == 0 || rm == (x2.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || r2 || rm == 6 && // Check whether the digit to the left of the rounding digit is odd.
-          (i3 > 0 ? j2 > 0 ? n3 / pows10[d2 - j2] : 0 : xc[ni - 1]) % 10 & 1 || rm == (x2.s < 0 ? 8 : 7));
-          if (sd < 1 || !xc[0]) {
-            xc.length = 0;
-            if (r2) {
-              sd -= x2.e + 1;
-              xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
-              x2.e = -sd || 0;
-            } else {
-              xc[0] = x2.e = 0;
-            }
-            return x2;
-          }
-          if (i3 == 0) {
-            xc.length = ni;
-            k2 = 1;
-            ni--;
-          } else {
-            xc.length = ni + 1;
-            k2 = pows10[LOG_BASE - i3];
-            xc[ni] = j2 > 0 ? mathfloor(n3 / pows10[d2 - j2] % pows10[j2]) * k2 : 0;
-          }
-          if (r2) {
-            for (; ; ) {
-              if (ni == 0) {
-                for (i3 = 1, j2 = xc[0]; j2 >= 10; j2 /= 10, i3++) ;
-                j2 = xc[0] += k2;
-                for (k2 = 1; j2 >= 10; j2 /= 10, k2++) ;
-                if (i3 != k2) {
-                  x2.e++;
-                  if (xc[0] == BASE) xc[0] = 1;
-                }
-                break;
-              } else {
-                xc[ni] += k2;
-                if (xc[ni] != BASE) break;
-                xc[ni--] = 0;
-                k2 = 1;
-              }
-            }
-          }
-          for (i3 = xc.length; xc[--i3] === 0; xc.pop()) ;
+    taskTail = t0;
+    sleep(time);
+  }
+  function sleep(time) {
+    if (frame) return;
+    if (timeout) timeout = clearTimeout(timeout);
+    var delay = time - clockNow;
+    if (delay > 24) {
+      if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
+      if (interval) interval = clearInterval(interval);
+    } else {
+      if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
+      frame = 1, setFrame(wake);
+    }
+  }
+
+  // node_modules/d3-timer/src/timeout.js
+  function timeout_default(callback, delay, time) {
+    var t2 = new Timer();
+    delay = delay == null ? 0 : +delay;
+    t2.restart((elapsed) => {
+      t2.stop();
+      callback(elapsed + delay);
+    }, delay, time);
+    return t2;
+  }
+
+  // node_modules/d3-transition/src/transition/schedule.js
+  var emptyOn = dispatch_default("start", "end", "cancel", "interrupt");
+  var emptyTween = [];
+  var CREATED = 0;
+  var SCHEDULED = 1;
+  var STARTING = 2;
+  var STARTED = 3;
+  var RUNNING = 4;
+  var ENDING = 5;
+  var ENDED = 6;
+  function schedule_default(node, name, id2, index, group, timing) {
+    var schedules = node.__transition;
+    if (!schedules) node.__transition = {};
+    else if (id2 in schedules) return;
+    create(node, id2, {
+      name,
+      index,
+      // For context during callback.
+      group,
+      // For context during callback.
+      on: emptyOn,
+      tween: emptyTween,
+      time: timing.time,
+      delay: timing.delay,
+      duration: timing.duration,
+      ease: timing.ease,
+      timer: null,
+      state: CREATED
+    });
+  }
+  function init(node, id2) {
+    var schedule = get2(node, id2);
+    if (schedule.state > CREATED) throw new Error("too late; already scheduled");
+    return schedule;
+  }
+  function set2(node, id2) {
+    var schedule = get2(node, id2);
+    if (schedule.state > STARTED) throw new Error("too late; already running");
+    return schedule;
+  }
+  function get2(node, id2) {
+    var schedule = node.__transition;
+    if (!schedule || !(schedule = schedule[id2])) throw new Error("transition not found");
+    return schedule;
+  }
+  function create(node, id2, self2) {
+    var schedules = node.__transition, tween;
+    schedules[id2] = self2;
+    self2.timer = timer(schedule, 0, self2.time);
+    function schedule(elapsed) {
+      self2.state = SCHEDULED;
+      self2.timer.restart(start2, self2.delay, self2.time);
+      if (self2.delay <= elapsed) start2(elapsed - self2.delay);
+    }
+    function start2(elapsed) {
+      var i3, j2, n3, o2;
+      if (self2.state !== SCHEDULED) return stop();
+      for (i3 in schedules) {
+        o2 = schedules[i3];
+        if (o2.name !== self2.name) continue;
+        if (o2.state === STARTED) return timeout_default(start2);
+        if (o2.state === RUNNING) {
+          o2.state = ENDED;
+          o2.timer.stop();
+          o2.on.call("interrupt", node, node.__data__, o2.index, o2.group);
+          delete schedules[i3];
+        } else if (+i3 < id2) {
+          o2.state = ENDED;
+          o2.timer.stop();
+          o2.on.call("cancel", node, node.__data__, o2.index, o2.group);
+          delete schedules[i3];
         }
-        if (x2.e > MAX_EXP) {
-          x2.c = x2.e = null;
-        } else if (x2.e < MIN_EXP) {
-          x2.c = [x2.e = 0];
+      }
+      timeout_default(function() {
+        if (self2.state === STARTED) {
+          self2.state = RUNNING;
+          self2.timer.restart(tick, self2.delay, self2.time);
+          tick(elapsed);
+        }
+      });
+      self2.state = STARTING;
+      self2.on.call("start", node, node.__data__, self2.index, self2.group);
+      if (self2.state !== STARTING) return;
+      self2.state = STARTED;
+      tween = new Array(n3 = self2.tween.length);
+      for (i3 = 0, j2 = -1; i3 < n3; ++i3) {
+        if (o2 = self2.tween[i3].value.call(node, node.__data__, self2.index, self2.group)) {
+          tween[++j2] = o2;
         }
       }
-      return x2;
-    }
-    function valueOf(n3) {
-      var str, e3 = n3.e;
-      if (e3 === null) return n3.toString();
-      str = coeffToString(n3.c);
-      str = e3 <= TO_EXP_NEG || e3 >= TO_EXP_POS ? toExponential(str, e3) : toFixedPoint(str, e3, "0");
-      return n3.s < 0 ? "-" + str : str;
+      tween.length = j2 + 1;
     }
-    P2.absoluteValue = P2.abs = function() {
-      var x2 = new BigNumber2(this);
-      if (x2.s < 0) x2.s = 1;
-      return x2;
-    };
-    P2.comparedTo = function(y2, b2) {
-      return compare(this, new BigNumber2(y2, b2));
-    };
-    P2.decimalPlaces = P2.dp = function(dp, rm) {
-      var c2, n3, v2, x2 = this;
-      if (dp != null) {
-        intCheck(dp, 0, MAX);
-        if (rm == null) rm = ROUNDING_MODE;
-        else intCheck(rm, 0, 8);
-        return round(new BigNumber2(x2), dp + x2.e + 1, rm);
-      }
-      if (!(c2 = x2.c)) return null;
-      n3 = ((v2 = c2.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;
-      if (v2 = c2[v2]) for (; v2 % 10 == 0; v2 /= 10, n3--) ;
-      if (n3 < 0) n3 = 0;
-      return n3;
-    };
-    P2.dividedBy = P2.div = function(y2, b2) {
-      return div(this, new BigNumber2(y2, b2), DECIMAL_PLACES, ROUNDING_MODE);
-    };
-    P2.dividedToIntegerBy = P2.idiv = function(y2, b2) {
-      return div(this, new BigNumber2(y2, b2), 0, 1);
-    };
-    P2.exponentiatedBy = P2.pow = function(n3, m2) {
-      var half, isModExp, i3, k2, more, nIsBig, nIsNeg, nIsOdd, y2, x2 = this;
-      n3 = new BigNumber2(n3);
-      if (n3.c && !n3.isInteger()) {
-        throw Error(bignumberError + "Exponent not an integer: " + valueOf(n3));
-      }
-      if (m2 != null) m2 = new BigNumber2(m2);
-      nIsBig = n3.e > 14;
-      if (!x2.c || !x2.c[0] || x2.c[0] == 1 && !x2.e && x2.c.length == 1 || !n3.c || !n3.c[0]) {
-        y2 = new BigNumber2(Math.pow(+valueOf(x2), nIsBig ? n3.s * (2 - isOdd(n3)) : +valueOf(n3)));
-        return m2 ? y2.mod(m2) : y2;
+    function tick(elapsed) {
+      var t2 = elapsed < self2.duration ? self2.ease.call(null, elapsed / self2.duration) : (self2.timer.restart(stop), self2.state = ENDING, 1), i3 = -1, n3 = tween.length;
+      while (++i3 < n3) {
+        tween[i3].call(node, t2);
       }
-      nIsNeg = n3.s < 0;
-      if (m2) {
-        if (m2.c ? !m2.c[0] : !m2.s) return new BigNumber2(NaN);
-        isModExp = !nIsNeg && x2.isInteger() && m2.isInteger();
-        if (isModExp) x2 = x2.mod(m2);
-      } else if (n3.e > 9 && (x2.e > 0 || x2.e < -1 || (x2.e == 0 ? x2.c[0] > 1 || nIsBig && x2.c[1] >= 24e7 : x2.c[0] < 8e13 || nIsBig && x2.c[0] <= 9999975e7))) {
-        k2 = x2.s < 0 && isOdd(n3) ? -0 : 0;
-        if (x2.e > -1) k2 = 1 / k2;
-        return new BigNumber2(nIsNeg ? 1 / k2 : k2);
-      } else if (POW_PRECISION) {
-        k2 = mathceil(POW_PRECISION / LOG_BASE + 2);
+      if (self2.state === ENDING) {
+        self2.on.call("end", node, node.__data__, self2.index, self2.group);
+        stop();
       }
-      if (nIsBig) {
-        half = new BigNumber2(0.5);
-        if (nIsNeg) n3.s = 1;
-        nIsOdd = isOdd(n3);
-      } else {
-        i3 = Math.abs(+valueOf(n3));
-        nIsOdd = i3 % 2;
+    }
+    function stop() {
+      self2.state = ENDED;
+      self2.timer.stop();
+      delete schedules[id2];
+      for (var i3 in schedules) return;
+      delete node.__transition;
+    }
+  }
+
+  // node_modules/d3-transition/src/interrupt.js
+  function interrupt_default(node, name) {
+    var schedules = node.__transition, schedule, active, empty2 = true, i3;
+    if (!schedules) return;
+    name = name == null ? null : name + "";
+    for (i3 in schedules) {
+      if ((schedule = schedules[i3]).name !== name) {
+        empty2 = false;
+        continue;
       }
-      y2 = new BigNumber2(ONE);
-      for (; ; ) {
-        if (nIsOdd) {
-          y2 = y2.times(x2);
-          if (!y2.c) break;
-          if (k2) {
-            if (y2.c.length > k2) y2.c.length = k2;
-          } else if (isModExp) {
-            y2 = y2.mod(m2);
+      active = schedule.state > STARTING && schedule.state < ENDING;
+      schedule.state = ENDED;
+      schedule.timer.stop();
+      schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
+      delete schedules[i3];
+    }
+    if (empty2) delete node.__transition;
+  }
+
+  // node_modules/d3-transition/src/selection/interrupt.js
+  function interrupt_default2(name) {
+    return this.each(function() {
+      interrupt_default(this, name);
+    });
+  }
+
+  // node_modules/d3-transition/src/transition/tween.js
+  function tweenRemove(id2, name) {
+    var tween0, tween1;
+    return function() {
+      var schedule = set2(this, id2), tween = schedule.tween;
+      if (tween !== tween0) {
+        tween1 = tween0 = tween;
+        for (var i3 = 0, n3 = tween1.length; i3 < n3; ++i3) {
+          if (tween1[i3].name === name) {
+            tween1 = tween1.slice();
+            tween1.splice(i3, 1);
+            break;
           }
         }
-        if (i3) {
-          i3 = mathfloor(i3 / 2);
-          if (i3 === 0) break;
-          nIsOdd = i3 % 2;
-        } else {
-          n3 = n3.times(half);
-          round(n3, n3.e + 1, 1);
-          if (n3.e > 14) {
-            nIsOdd = isOdd(n3);
-          } else {
-            i3 = +valueOf(n3);
-            if (i3 === 0) break;
-            nIsOdd = i3 % 2;
+      }
+      schedule.tween = tween1;
+    };
+  }
+  function tweenFunction(id2, name, value) {
+    var tween0, tween1;
+    if (typeof value !== "function") throw new Error();
+    return function() {
+      var schedule = set2(this, id2), tween = schedule.tween;
+      if (tween !== tween0) {
+        tween1 = (tween0 = tween).slice();
+        for (var t2 = { name, value }, i3 = 0, n3 = tween1.length; i3 < n3; ++i3) {
+          if (tween1[i3].name === name) {
+            tween1[i3] = t2;
+            break;
           }
         }
-        x2 = x2.times(x2);
-        if (k2) {
-          if (x2.c && x2.c.length > k2) x2.c.length = k2;
-        } else if (isModExp) {
-          x2 = x2.mod(m2);
-        }
+        if (i3 === n3) tween1.push(t2);
       }
-      if (isModExp) return y2;
-      if (nIsNeg) y2 = ONE.div(y2);
-      return m2 ? y2.mod(m2) : k2 ? round(y2, POW_PRECISION, ROUNDING_MODE, more) : y2;
-    };
-    P2.integerValue = function(rm) {
-      var n3 = new BigNumber2(this);
-      if (rm == null) rm = ROUNDING_MODE;
-      else intCheck(rm, 0, 8);
-      return round(n3, n3.e + 1, rm);
-    };
-    P2.isEqualTo = P2.eq = function(y2, b2) {
-      return compare(this, new BigNumber2(y2, b2)) === 0;
-    };
-    P2.isFinite = function() {
-      return !!this.c;
-    };
-    P2.isGreaterThan = P2.gt = function(y2, b2) {
-      return compare(this, new BigNumber2(y2, b2)) > 0;
-    };
-    P2.isGreaterThanOrEqualTo = P2.gte = function(y2, b2) {
-      return (b2 = compare(this, new BigNumber2(y2, b2))) === 1 || b2 === 0;
+      schedule.tween = tween1;
     };
-    P2.isInteger = function() {
-      return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
+  }
+  function tween_default(name, value) {
+    var id2 = this._id;
+    name += "";
+    if (arguments.length < 2) {
+      var tween = get2(this.node(), id2).tween;
+      for (var i3 = 0, n3 = tween.length, t2; i3 < n3; ++i3) {
+        if ((t2 = tween[i3]).name === name) {
+          return t2.value;
+        }
+      }
+      return null;
+    }
+    return this.each((value == null ? tweenRemove : tweenFunction)(id2, name, value));
+  }
+  function tweenValue(transition2, name, value) {
+    var id2 = transition2._id;
+    transition2.each(function() {
+      var schedule = set2(this, id2);
+      (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
+    });
+    return function(node) {
+      return get2(node, id2).value[name];
     };
-    P2.isLessThan = P2.lt = function(y2, b2) {
-      return compare(this, new BigNumber2(y2, b2)) < 0;
+  }
+
+  // node_modules/d3-transition/src/transition/interpolate.js
+  function interpolate_default(a2, b2) {
+    var c2;
+    return (typeof b2 === "number" ? number_default : b2 instanceof color ? rgb_default : (c2 = color(b2)) ? (b2 = c2, rgb_default) : string_default)(a2, b2);
+  }
+
+  // node_modules/d3-transition/src/transition/attr.js
+  function attrRemove2(name) {
+    return function() {
+      this.removeAttribute(name);
     };
-    P2.isLessThanOrEqualTo = P2.lte = function(y2, b2) {
-      return (b2 = compare(this, new BigNumber2(y2, b2))) === -1 || b2 === 0;
+  }
+  function attrRemoveNS2(fullname) {
+    return function() {
+      this.removeAttributeNS(fullname.space, fullname.local);
     };
-    P2.isNaN = function() {
-      return !this.s;
+  }
+  function attrConstant2(name, interpolate, value1) {
+    var string00, string1 = value1 + "", interpolate0;
+    return function() {
+      var string0 = this.getAttribute(name);
+      return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);
     };
-    P2.isNegative = function() {
-      return this.s < 0;
+  }
+  function attrConstantNS2(fullname, interpolate, value1) {
+    var string00, string1 = value1 + "", interpolate0;
+    return function() {
+      var string0 = this.getAttributeNS(fullname.space, fullname.local);
+      return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);
     };
-    P2.isPositive = function() {
-      return this.s > 0;
+  }
+  function attrFunction2(name, interpolate, value) {
+    var string00, string10, interpolate0;
+    return function() {
+      var string0, value1 = value(this), string1;
+      if (value1 == null) return void this.removeAttribute(name);
+      string0 = this.getAttribute(name);
+      string1 = value1 + "";
+      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
     };
-    P2.isZero = function() {
-      return !!this.c && this.c[0] == 0;
+  }
+  function attrFunctionNS2(fullname, interpolate, value) {
+    var string00, string10, interpolate0;
+    return function() {
+      var string0, value1 = value(this), string1;
+      if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
+      string0 = this.getAttributeNS(fullname.space, fullname.local);
+      string1 = value1 + "";
+      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
     };
-    P2.minus = function(y2, b2) {
-      var i3, j2, t2, xLTy, x2 = this, a2 = x2.s;
-      y2 = new BigNumber2(y2, b2);
-      b2 = y2.s;
-      if (!a2 || !b2) return new BigNumber2(NaN);
-      if (a2 != b2) {
-        y2.s = -b2;
-        return x2.plus(y2);
-      }
-      var xe2 = x2.e / LOG_BASE, ye2 = y2.e / LOG_BASE, xc = x2.c, yc = y2.c;
-      if (!xe2 || !ye2) {
-        if (!xc || !yc) return xc ? (y2.s = -b2, y2) : new BigNumber2(yc ? x2 : NaN);
-        if (!xc[0] || !yc[0]) {
-          return yc[0] ? (y2.s = -b2, y2) : new BigNumber2(xc[0] ? x2 : (
-            // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
-            ROUNDING_MODE == 3 ? -0 : 0
-          ));
-        }
-      }
-      xe2 = bitFloor(xe2);
-      ye2 = bitFloor(ye2);
-      xc = xc.slice();
-      if (a2 = xe2 - ye2) {
-        if (xLTy = a2 < 0) {
-          a2 = -a2;
-          t2 = xc;
-        } else {
-          ye2 = xe2;
-          t2 = yc;
-        }
-        t2.reverse();
-        for (b2 = a2; b2--; t2.push(0)) ;
-        t2.reverse();
-      } else {
-        j2 = (xLTy = (a2 = xc.length) < (b2 = yc.length)) ? a2 : b2;
-        for (a2 = b2 = 0; b2 < j2; b2++) {
-          if (xc[b2] != yc[b2]) {
-            xLTy = xc[b2] < yc[b2];
-            break;
-          }
-        }
-      }
-      if (xLTy) {
-        t2 = xc;
-        xc = yc;
-        yc = t2;
-        y2.s = -y2.s;
-      }
-      b2 = (j2 = yc.length) - (i3 = xc.length);
-      if (b2 > 0) for (; b2--; xc[i3++] = 0) ;
-      b2 = BASE - 1;
-      for (; j2 > a2; ) {
-        if (xc[--j2] < yc[j2]) {
-          for (i3 = j2; i3 && !xc[--i3]; xc[i3] = b2) ;
-          --xc[i3];
-          xc[j2] += BASE;
-        }
-        xc[j2] -= yc[j2];
-      }
-      for (; xc[0] == 0; xc.splice(0, 1), --ye2) ;
-      if (!xc[0]) {
-        y2.s = ROUNDING_MODE == 3 ? -1 : 1;
-        y2.c = [y2.e = 0];
-        return y2;
-      }
-      return normalise(y2, xc, ye2);
+  }
+  function attr_default2(name, value) {
+    var fullname = namespace_default(name), i3 = fullname === "transform" ? interpolateTransformSvg : interpolate_default;
+    return this.attrTween(name, typeof value === "function" ? (fullname.local ? attrFunctionNS2 : attrFunction2)(fullname, i3, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attrRemoveNS2 : attrRemove2)(fullname) : (fullname.local ? attrConstantNS2 : attrConstant2)(fullname, i3, value));
+  }
+
+  // node_modules/d3-transition/src/transition/attrTween.js
+  function attrInterpolate(name, i3) {
+    return function(t2) {
+      this.setAttribute(name, i3.call(this, t2));
     };
-    P2.modulo = P2.mod = function(y2, b2) {
-      var q2, s2, x2 = this;
-      y2 = new BigNumber2(y2, b2);
-      if (!x2.c || !y2.s || y2.c && !y2.c[0]) {
-        return new BigNumber2(NaN);
-      } else if (!y2.c || x2.c && !x2.c[0]) {
-        return new BigNumber2(x2);
-      }
-      if (MODULO_MODE == 9) {
-        s2 = y2.s;
-        y2.s = 1;
-        q2 = div(x2, y2, 0, 3);
-        y2.s = s2;
-        q2.s *= s2;
-      } else {
-        q2 = div(x2, y2, 0, MODULO_MODE);
-      }
-      y2 = x2.minus(q2.times(y2));
-      if (!y2.c[0] && MODULO_MODE == 1) y2.s = x2.s;
-      return y2;
+  }
+  function attrInterpolateNS(fullname, i3) {
+    return function(t2) {
+      this.setAttributeNS(fullname.space, fullname.local, i3.call(this, t2));
     };
-    P2.multipliedBy = P2.times = function(y2, b2) {
-      var c2, e3, i3, j2, k2, m2, xcL, xlo, xhi, ycL, ylo, yhi, zc, base, sqrtBase, x2 = this, xc = x2.c, yc = (y2 = new BigNumber2(y2, b2)).c;
-      if (!xc || !yc || !xc[0] || !yc[0]) {
-        if (!x2.s || !y2.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
-          y2.c = y2.e = y2.s = null;
-        } else {
-          y2.s *= x2.s;
-          if (!xc || !yc) {
-            y2.c = y2.e = null;
-          } else {
-            y2.c = [0];
-            y2.e = 0;
-          }
-        }
-        return y2;
-      }
-      e3 = bitFloor(x2.e / LOG_BASE) + bitFloor(y2.e / LOG_BASE);
-      y2.s *= x2.s;
-      xcL = xc.length;
-      ycL = yc.length;
-      if (xcL < ycL) {
-        zc = xc;
-        xc = yc;
-        yc = zc;
-        i3 = xcL;
-        xcL = ycL;
-        ycL = i3;
-      }
-      for (i3 = xcL + ycL, zc = []; i3--; zc.push(0)) ;
-      base = BASE;
-      sqrtBase = SQRT_BASE;
-      for (i3 = ycL; --i3 >= 0; ) {
-        c2 = 0;
-        ylo = yc[i3] % sqrtBase;
-        yhi = yc[i3] / sqrtBase | 0;
-        for (k2 = xcL, j2 = i3 + k2; j2 > i3; ) {
-          xlo = xc[--k2] % sqrtBase;
-          xhi = xc[k2] / sqrtBase | 0;
-          m2 = yhi * xlo + xhi * ylo;
-          xlo = ylo * xlo + m2 % sqrtBase * sqrtBase + zc[j2] + c2;
-          c2 = (xlo / base | 0) + (m2 / sqrtBase | 0) + yhi * xhi;
-          zc[j2--] = xlo % base;
-        }
-        zc[j2] = c2;
-      }
-      if (c2) {
-        ++e3;
-      } else {
-        zc.splice(0, 1);
-      }
-      return normalise(y2, zc, e3);
+  }
+  function attrTweenNS(fullname, value) {
+    var t0, i0;
+    function tween() {
+      var i3 = value.apply(this, arguments);
+      if (i3 !== i0) t0 = (i0 = i3) && attrInterpolateNS(fullname, i3);
+      return t0;
+    }
+    tween._value = value;
+    return tween;
+  }
+  function attrTween(name, value) {
+    var t0, i0;
+    function tween() {
+      var i3 = value.apply(this, arguments);
+      if (i3 !== i0) t0 = (i0 = i3) && attrInterpolate(name, i3);
+      return t0;
+    }
+    tween._value = value;
+    return tween;
+  }
+  function attrTween_default(name, value) {
+    var key = "attr." + name;
+    if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+    if (value == null) return this.tween(key, null);
+    if (typeof value !== "function") throw new Error();
+    var fullname = namespace_default(name);
+    return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
+  }
+
+  // node_modules/d3-transition/src/transition/delay.js
+  function delayFunction(id2, value) {
+    return function() {
+      init(this, id2).delay = +value.apply(this, arguments);
     };
-    P2.negated = function() {
-      var x2 = new BigNumber2(this);
-      x2.s = -x2.s || null;
-      return x2;
+  }
+  function delayConstant(id2, value) {
+    return value = +value, function() {
+      init(this, id2).delay = value;
     };
-    P2.plus = function(y2, b2) {
-      var t2, x2 = this, a2 = x2.s;
-      y2 = new BigNumber2(y2, b2);
-      b2 = y2.s;
-      if (!a2 || !b2) return new BigNumber2(NaN);
-      if (a2 != b2) {
-        y2.s = -b2;
-        return x2.minus(y2);
-      }
-      var xe2 = x2.e / LOG_BASE, ye2 = y2.e / LOG_BASE, xc = x2.c, yc = y2.c;
-      if (!xe2 || !ye2) {
-        if (!xc || !yc) return new BigNumber2(a2 / 0);
-        if (!xc[0] || !yc[0]) return yc[0] ? y2 : new BigNumber2(xc[0] ? x2 : a2 * 0);
-      }
-      xe2 = bitFloor(xe2);
-      ye2 = bitFloor(ye2);
-      xc = xc.slice();
-      if (a2 = xe2 - ye2) {
-        if (a2 > 0) {
-          ye2 = xe2;
-          t2 = yc;
-        } else {
-          a2 = -a2;
-          t2 = xc;
-        }
-        t2.reverse();
-        for (; a2--; t2.push(0)) ;
-        t2.reverse();
-      }
-      a2 = xc.length;
-      b2 = yc.length;
-      if (a2 - b2 < 0) {
-        t2 = yc;
-        yc = xc;
-        xc = t2;
-        b2 = a2;
-      }
-      for (a2 = 0; b2; ) {
-        a2 = (xc[--b2] = xc[b2] + yc[b2] + a2) / BASE | 0;
-        xc[b2] = BASE === xc[b2] ? 0 : xc[b2] % BASE;
-      }
-      if (a2) {
-        xc = [a2].concat(xc);
-        ++ye2;
-      }
-      return normalise(y2, xc, ye2);
+  }
+  function delay_default(value) {
+    var id2 = this._id;
+    return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id2, value)) : get2(this.node(), id2).delay;
+  }
+
+  // node_modules/d3-transition/src/transition/duration.js
+  function durationFunction(id2, value) {
+    return function() {
+      set2(this, id2).duration = +value.apply(this, arguments);
     };
-    P2.precision = P2.sd = function(sd, rm) {
-      var c2, n3, v2, x2 = this;
-      if (sd != null && sd !== !!sd) {
-        intCheck(sd, 1, MAX);
-        if (rm == null) rm = ROUNDING_MODE;
-        else intCheck(rm, 0, 8);
-        return round(new BigNumber2(x2), sd, rm);
+  }
+  function durationConstant(id2, value) {
+    return value = +value, function() {
+      set2(this, id2).duration = value;
+    };
+  }
+  function duration_default(value) {
+    var id2 = this._id;
+    return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id2, value)) : get2(this.node(), id2).duration;
+  }
+
+  // node_modules/d3-transition/src/transition/ease.js
+  function easeConstant(id2, value) {
+    if (typeof value !== "function") throw new Error();
+    return function() {
+      set2(this, id2).ease = value;
+    };
+  }
+  function ease_default(value) {
+    var id2 = this._id;
+    return arguments.length ? this.each(easeConstant(id2, value)) : get2(this.node(), id2).ease;
+  }
+
+  // node_modules/d3-transition/src/transition/easeVarying.js
+  function easeVarying(id2, value) {
+    return function() {
+      var v2 = value.apply(this, arguments);
+      if (typeof v2 !== "function") throw new Error();
+      set2(this, id2).ease = v2;
+    };
+  }
+  function easeVarying_default(value) {
+    if (typeof value !== "function") throw new Error();
+    return this.each(easeVarying(this._id, value));
+  }
+
+  // node_modules/d3-transition/src/transition/filter.js
+  function filter_default2(match) {
+    if (typeof match !== "function") match = matcher_default(match);
+    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = [], node, i3 = 0; i3 < n3; ++i3) {
+        if ((node = group[i3]) && match.call(node, node.__data__, i3, group)) {
+          subgroup.push(node);
+        }
       }
-      if (!(c2 = x2.c)) return null;
-      v2 = c2.length - 1;
-      n3 = v2 * LOG_BASE + 1;
-      if (v2 = c2[v2]) {
-        for (; v2 % 10 == 0; v2 /= 10, n3--) ;
-        for (v2 = c2[0]; v2 >= 10; v2 /= 10, n3++) ;
+    }
+    return new Transition(subgroups, this._parents, this._name, this._id);
+  }
+
+  // node_modules/d3-transition/src/transition/merge.js
+  function merge_default2(transition2) {
+    if (transition2._id !== this._id) throw new Error();
+    for (var groups0 = this._groups, groups1 = transition2._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j2 = 0; j2 < m2; ++j2) {
+      for (var group0 = groups0[j2], group1 = groups1[j2], n3 = group0.length, merge2 = merges[j2] = new Array(n3), node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group0[i3] || group1[i3]) {
+          merge2[i3] = node;
+        }
       }
-      if (sd && x2.e + 1 > n3) n3 = x2.e + 1;
-      return n3;
+    }
+    for (; j2 < m0; ++j2) {
+      merges[j2] = groups0[j2];
+    }
+    return new Transition(merges, this._parents, this._name, this._id);
+  }
+
+  // node_modules/d3-transition/src/transition/on.js
+  function start(name) {
+    return (name + "").trim().split(/^|\s+/).every(function(t2) {
+      var i3 = t2.indexOf(".");
+      if (i3 >= 0) t2 = t2.slice(0, i3);
+      return !t2 || t2 === "start";
+    });
+  }
+  function onFunction(id2, name, listener) {
+    var on0, on1, sit = start(name) ? init : set2;
+    return function() {
+      var schedule = sit(this, id2), on = schedule.on;
+      if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
+      schedule.on = on1;
     };
-    P2.shiftedBy = function(k2) {
-      intCheck(k2, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
-      return this.times("1e" + k2);
+  }
+  function on_default2(name, listener) {
+    var id2 = this._id;
+    return arguments.length < 2 ? get2(this.node(), id2).on.on(name) : this.each(onFunction(id2, name, listener));
+  }
+
+  // node_modules/d3-transition/src/transition/remove.js
+  function removeFunction(id2) {
+    return function() {
+      var parent = this.parentNode;
+      for (var i3 in this.__transition) if (+i3 !== id2) return;
+      if (parent) parent.removeChild(this);
     };
-    P2.squareRoot = P2.sqrt = function() {
-      var m2, n3, r2, rep, t2, x2 = this, c2 = x2.c, s2 = x2.s, e3 = x2.e, dp = DECIMAL_PLACES + 4, half = new BigNumber2("0.5");
-      if (s2 !== 1 || !c2 || !c2[0]) {
-        return new BigNumber2(!s2 || s2 < 0 && (!c2 || c2[0]) ? NaN : c2 ? x2 : 1 / 0);
-      }
-      s2 = Math.sqrt(+valueOf(x2));
-      if (s2 == 0 || s2 == 1 / 0) {
-        n3 = coeffToString(c2);
-        if ((n3.length + e3) % 2 == 0) n3 += "0";
-        s2 = Math.sqrt(+n3);
-        e3 = bitFloor((e3 + 1) / 2) - (e3 < 0 || e3 % 2);
-        if (s2 == 1 / 0) {
-          n3 = "5e" + e3;
-        } else {
-          n3 = s2.toExponential();
-          n3 = n3.slice(0, n3.indexOf("e") + 1) + e3;
+  }
+  function remove_default2() {
+    return this.on("end.remove", removeFunction(this._id));
+  }
+
+  // node_modules/d3-transition/src/transition/select.js
+  function select_default3(select) {
+    var name = this._name, id2 = this._id;
+    if (typeof select !== "function") select = selector_default(select);
+    for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, subgroup = subgroups[j2] = new Array(n3), node, subnode, i3 = 0; i3 < n3; ++i3) {
+        if ((node = group[i3]) && (subnode = select.call(node, node.__data__, i3, group))) {
+          if ("__data__" in node) subnode.__data__ = node.__data__;
+          subgroup[i3] = subnode;
+          schedule_default(subgroup[i3], name, id2, i3, subgroup, get2(node, id2));
         }
-        r2 = new BigNumber2(n3);
-      } else {
-        r2 = new BigNumber2(s2 + "");
       }
-      if (r2.c[0]) {
-        e3 = r2.e;
-        s2 = e3 + dp;
-        if (s2 < 3) s2 = 0;
-        for (; ; ) {
-          t2 = r2;
-          r2 = half.times(t2.plus(div(x2, t2, dp, 1)));
-          if (coeffToString(t2.c).slice(0, s2) === (n3 = coeffToString(r2.c)).slice(0, s2)) {
-            if (r2.e < e3) --s2;
-            n3 = n3.slice(s2 - 3, s2 + 1);
-            if (n3 == "9999" || !rep && n3 == "4999") {
-              if (!rep) {
-                round(t2, t2.e + DECIMAL_PLACES + 2, 0);
-                if (t2.times(t2).eq(x2)) {
-                  r2 = t2;
-                  break;
-                }
-              }
-              dp += 4;
-              s2 += 4;
-              rep = 1;
-            } else {
-              if (!+n3 || !+n3.slice(1) && n3.charAt(0) == "5") {
-                round(r2, r2.e + DECIMAL_PLACES + 2, 1);
-                m2 = !r2.times(r2).eq(x2);
-              }
-              break;
+    }
+    return new Transition(subgroups, this._parents, name, id2);
+  }
+
+  // node_modules/d3-transition/src/transition/selectAll.js
+  function selectAll_default3(select) {
+    var name = this._name, id2 = this._id;
+    if (typeof select !== "function") select = selectorAll_default(select);
+    for (var groups = this._groups, m2 = groups.length, subgroups = [], parents = [], j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group[i3]) {
+          for (var children2 = select.call(node, node.__data__, i3, group), child, inherit2 = get2(node, id2), k2 = 0, l2 = children2.length; k2 < l2; ++k2) {
+            if (child = children2[k2]) {
+              schedule_default(child, name, id2, k2, children2, inherit2);
             }
           }
+          subgroups.push(children2);
+          parents.push(node);
         }
       }
-      return round(r2, r2.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m2);
+    }
+    return new Transition(subgroups, parents, name, id2);
+  }
+
+  // node_modules/d3-transition/src/transition/selection.js
+  var Selection2 = selection_default.prototype.constructor;
+  function selection_default2() {
+    return new Selection2(this._groups, this._parents);
+  }
+
+  // node_modules/d3-transition/src/transition/style.js
+  function styleNull(name, interpolate) {
+    var string00, string10, interpolate0;
+    return function() {
+      var string0 = styleValue(this, name), string1 = (this.style.removeProperty(name), styleValue(this, name));
+      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate(string00 = string0, string10 = string1);
     };
-    P2.toExponential = function(dp, rm) {
-      if (dp != null) {
-        intCheck(dp, 0, MAX);
-        dp++;
-      }
-      return format2(this, dp, rm, 1);
+  }
+  function styleRemove2(name) {
+    return function() {
+      this.style.removeProperty(name);
     };
-    P2.toFixed = function(dp, rm) {
-      if (dp != null) {
-        intCheck(dp, 0, MAX);
-        dp = dp + this.e + 1;
-      }
-      return format2(this, dp, rm);
+  }
+  function styleConstant2(name, interpolate, value1) {
+    var string00, string1 = value1 + "", interpolate0;
+    return function() {
+      var string0 = styleValue(this, name);
+      return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);
     };
-    P2.toFormat = function(dp, rm, format3) {
-      var str, x2 = this;
-      if (format3 == null) {
-        if (dp != null && rm && typeof rm == "object") {
-          format3 = rm;
-          rm = null;
-        } else if (dp && typeof dp == "object") {
-          format3 = dp;
-          dp = rm = null;
-        } else {
-          format3 = FORMAT;
-        }
-      } else if (typeof format3 != "object") {
-        throw Error(bignumberError + "Argument not an object: " + format3);
-      }
-      str = x2.toFixed(dp, rm);
-      if (x2.c) {
-        var i3, arr = str.split("."), g1 = +format3.groupSize, g22 = +format3.secondaryGroupSize, groupSeparator = format3.groupSeparator || "", intPart = arr[0], fractionPart = arr[1], isNeg = x2.s < 0, intDigits = isNeg ? intPart.slice(1) : intPart, len = intDigits.length;
-        if (g22) {
-          i3 = g1;
-          g1 = g22;
-          g22 = i3;
-          len -= i3;
-        }
-        if (g1 > 0 && len > 0) {
-          i3 = len % g1 || g1;
-          intPart = intDigits.substr(0, i3);
-          for (; i3 < len; i3 += g1) intPart += groupSeparator + intDigits.substr(i3, g1);
-          if (g22 > 0) intPart += groupSeparator + intDigits.slice(i3);
-          if (isNeg) intPart = "-" + intPart;
-        }
-        str = fractionPart ? intPart + (format3.decimalSeparator || "") + ((g22 = +format3.fractionGroupSize) ? fractionPart.replace(
-          new RegExp("\\d{" + g22 + "}\\B", "g"),
-          "$&" + (format3.fractionGroupSeparator || "")
-        ) : fractionPart) : intPart;
-      }
-      return (format3.prefix || "") + str + (format3.suffix || "");
+  }
+  function styleFunction2(name, interpolate, value) {
+    var string00, string10, interpolate0;
+    return function() {
+      var string0 = styleValue(this, name), value1 = value(this), string1 = value1 + "";
+      if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
+      return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
     };
-    P2.toFraction = function(md) {
-      var d2, d0, d1, d22, e3, exp2, n3, n0, n1, q2, r2, s2, x2 = this, xc = x2.c;
-      if (md != null) {
-        n3 = new BigNumber2(md);
-        if (!n3.isInteger() && (n3.c || n3.s !== 1) || n3.lt(ONE)) {
-          throw Error(bignumberError + "Argument " + (n3.isInteger() ? "out of range: " : "not an integer: ") + valueOf(n3));
-        }
-      }
-      if (!xc) return new BigNumber2(x2);
-      d2 = new BigNumber2(ONE);
-      n1 = d0 = new BigNumber2(ONE);
-      d1 = n0 = new BigNumber2(ONE);
-      s2 = coeffToString(xc);
-      e3 = d2.e = s2.length - x2.e - 1;
-      d2.c[0] = POWS_TEN[(exp2 = e3 % LOG_BASE) < 0 ? LOG_BASE + exp2 : exp2];
-      md = !md || n3.comparedTo(d2) > 0 ? e3 > 0 ? d2 : n1 : n3;
-      exp2 = MAX_EXP;
-      MAX_EXP = 1 / 0;
-      n3 = new BigNumber2(s2);
-      n0.c[0] = 0;
-      for (; ; ) {
-        q2 = div(n3, d2, 0, 1);
-        d22 = d0.plus(q2.times(d1));
-        if (d22.comparedTo(md) == 1) break;
-        d0 = d1;
-        d1 = d22;
-        n1 = n0.plus(q2.times(d22 = n1));
-        n0 = d22;
-        d2 = n3.minus(q2.times(d22 = d2));
-        n3 = d22;
-      }
-      d22 = div(md.minus(d0), d1, 0, 1);
-      n0 = n0.plus(d22.times(n1));
-      d0 = d0.plus(d22.times(d1));
-      n0.s = n1.s = x2.s;
-      e3 = e3 * 2;
-      r2 = div(n1, d1, e3, ROUNDING_MODE).minus(x2).abs().comparedTo(
-        div(n0, d0, e3, ROUNDING_MODE).minus(x2).abs()
-      ) < 1 ? [n1, d1] : [n0, d0];
-      MAX_EXP = exp2;
-      return r2;
+  }
+  function styleMaybeRemove(id2, name) {
+    var on0, on1, listener0, key = "style." + name, event = "end." + key, remove2;
+    return function() {
+      var schedule = set2(this, id2), on = schedule.on, listener = schedule.value[key] == null ? remove2 || (remove2 = styleRemove2(name)) : void 0;
+      if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
+      schedule.on = on1;
     };
-    P2.toNumber = function() {
-      return +valueOf(this);
+  }
+  function style_default2(name, value, priority) {
+    var i3 = (name += "") === "transform" ? interpolateTransformCss : interpolate_default;
+    return value == null ? this.styleTween(name, styleNull(name, i3)).on("end.style." + name, styleRemove2(name)) : typeof value === "function" ? this.styleTween(name, styleFunction2(name, i3, tweenValue(this, "style." + name, value))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, styleConstant2(name, i3, value), priority).on("end.style." + name, null);
+  }
+
+  // node_modules/d3-transition/src/transition/styleTween.js
+  function styleInterpolate(name, i3, priority) {
+    return function(t2) {
+      this.style.setProperty(name, i3.call(this, t2), priority);
     };
-    P2.toPrecision = function(sd, rm) {
-      if (sd != null) intCheck(sd, 1, MAX);
-      return format2(this, sd, rm, 2);
+  }
+  function styleTween(name, value, priority) {
+    var t2, i0;
+    function tween() {
+      var i3 = value.apply(this, arguments);
+      if (i3 !== i0) t2 = (i0 = i3) && styleInterpolate(name, i3, priority);
+      return t2;
+    }
+    tween._value = value;
+    return tween;
+  }
+  function styleTween_default(name, value, priority) {
+    var key = "style." + (name += "");
+    if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+    if (value == null) return this.tween(key, null);
+    if (typeof value !== "function") throw new Error();
+    return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
+  }
+
+  // node_modules/d3-transition/src/transition/text.js
+  function textConstant2(value) {
+    return function() {
+      this.textContent = value;
     };
-    P2.toString = function(b2) {
-      var str, n3 = this, s2 = n3.s, e3 = n3.e;
-      if (e3 === null) {
-        if (s2) {
-          str = "Infinity";
-          if (s2 < 0) str = "-" + str;
-        } else {
-          str = "NaN";
-        }
-      } else {
-        if (b2 == null) {
-          str = e3 <= TO_EXP_NEG || e3 >= TO_EXP_POS ? toExponential(coeffToString(n3.c), e3) : toFixedPoint(coeffToString(n3.c), e3, "0");
-        } else if (b2 === 10 && alphabetHasNormalDecimalDigits) {
-          n3 = round(new BigNumber2(n3), DECIMAL_PLACES + e3 + 1, ROUNDING_MODE);
-          str = toFixedPoint(coeffToString(n3.c), n3.e, "0");
-        } else {
-          intCheck(b2, 2, ALPHABET.length, "Base");
-          str = convertBase(toFixedPoint(coeffToString(n3.c), e3, "0"), 10, b2, s2, true);
-        }
-        if (s2 < 0 && n3.c[0]) str = "-" + str;
-      }
-      return str;
+  }
+  function textFunction2(value) {
+    return function() {
+      var value1 = value(this);
+      this.textContent = value1 == null ? "" : value1;
     };
-    P2.valueOf = P2.toJSON = function() {
-      return valueOf(this);
+  }
+  function text_default2(value) {
+    return this.tween("text", typeof value === "function" ? textFunction2(tweenValue(this, "text", value)) : textConstant2(value == null ? "" : value + ""));
+  }
+
+  // node_modules/d3-transition/src/transition/textTween.js
+  function textInterpolate(i3) {
+    return function(t2) {
+      this.textContent = i3.call(this, t2);
     };
-    P2._isBigNumber = true;
-    P2[Symbol.toStringTag] = "BigNumber";
-    P2[Symbol.for("nodejs.util.inspect.custom")] = P2.valueOf;
-    if (configObject != null) BigNumber2.set(configObject);
-    return BigNumber2;
   }
-  function bitFloor(n3) {
-    var i3 = n3 | 0;
-    return n3 > 0 || n3 === i3 ? i3 : i3 - 1;
+  function textTween(value) {
+    var t0, i0;
+    function tween() {
+      var i3 = value.apply(this, arguments);
+      if (i3 !== i0) t0 = (i0 = i3) && textInterpolate(i3);
+      return t0;
+    }
+    tween._value = value;
+    return tween;
+  }
+  function textTween_default(value) {
+    var key = "text";
+    if (arguments.length < 1) return (key = this.tween(key)) && key._value;
+    if (value == null) return this.tween(key, null);
+    if (typeof value !== "function") throw new Error();
+    return this.tween(key, textTween(value));
+  }
+
+  // node_modules/d3-transition/src/transition/transition.js
+  function transition_default() {
+    var name = this._name, id0 = this._id, id1 = newId();
+    for (var groups = this._groups, m2 = groups.length, j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group[i3]) {
+          var inherit2 = get2(node, id0);
+          schedule_default(node, name, id1, i3, group, {
+            time: inherit2.time + inherit2.delay + inherit2.duration,
+            delay: 0,
+            duration: inherit2.duration,
+            ease: inherit2.ease
+          });
+        }
+      }
+    }
+    return new Transition(groups, this._parents, name, id1);
+  }
+
+  // node_modules/d3-transition/src/transition/end.js
+  function end_default() {
+    var on0, on1, that = this, id2 = that._id, size = that.size();
+    return new Promise(function(resolve, reject) {
+      var cancel = { value: reject }, end = { value: function() {
+        if (--size === 0) resolve();
+      } };
+      that.each(function() {
+        var schedule = set2(this, id2), on = schedule.on;
+        if (on !== on0) {
+          on1 = (on0 = on).copy();
+          on1._.cancel.push(cancel);
+          on1._.interrupt.push(cancel);
+          on1._.end.push(end);
+        }
+        schedule.on = on1;
+      });
+      if (size === 0) resolve();
+    });
   }
-  function coeffToString(a2) {
-    var s2, z2, i3 = 1, j2 = a2.length, r2 = a2[0] + "";
-    for (; i3 < j2; ) {
-      s2 = a2[i3++] + "";
-      z2 = LOG_BASE - s2.length;
-      for (; z2--; s2 = "0" + s2) ;
-      r2 += s2;
-    }
-    for (j2 = r2.length; r2.charCodeAt(--j2) === 48; ) ;
-    return r2.slice(0, j2 + 1 || 1);
+
+  // node_modules/d3-transition/src/transition/index.js
+  var id = 0;
+  function Transition(groups, parents, name, id2) {
+    this._groups = groups;
+    this._parents = parents;
+    this._name = name;
+    this._id = id2;
   }
-  function compare(x2, y2) {
-    var a2, b2, xc = x2.c, yc = y2.c, i3 = x2.s, j2 = y2.s, k2 = x2.e, l2 = y2.e;
-    if (!i3 || !j2) return null;
-    a2 = xc && !xc[0];
-    b2 = yc && !yc[0];
-    if (a2 || b2) return a2 ? b2 ? 0 : -j2 : i3;
-    if (i3 != j2) return i3;
-    a2 = i3 < 0;
-    b2 = k2 == l2;
-    if (!xc || !yc) return b2 ? 0 : !xc ^ a2 ? 1 : -1;
-    if (!b2) return k2 > l2 ^ a2 ? 1 : -1;
-    j2 = (k2 = xc.length) < (l2 = yc.length) ? k2 : l2;
-    for (i3 = 0; i3 < j2; i3++) if (xc[i3] != yc[i3]) return xc[i3] > yc[i3] ^ a2 ? 1 : -1;
-    return k2 == l2 ? 0 : k2 > l2 ^ a2 ? 1 : -1;
+  function transition(name) {
+    return selection_default().transition(name);
   }
-  function intCheck(n3, min3, max3, name) {
-    if (n3 < min3 || n3 > max3 || n3 !== mathfloor(n3)) {
-      throw Error(bignumberError + (name || "Argument") + (typeof n3 == "number" ? n3 < min3 || n3 > max3 ? " out of range: " : " not an integer: " : " not a primitive number: ") + String(n3));
-    }
+  function newId() {
+    return ++id;
   }
-  function isOdd(n3) {
-    var k2 = n3.c.length - 1;
-    return bitFloor(n3.e / LOG_BASE) == k2 && n3.c[k2] % 2 != 0;
+  var selection_prototype = selection_default.prototype;
+  Transition.prototype = transition.prototype = {
+    constructor: Transition,
+    select: select_default3,
+    selectAll: selectAll_default3,
+    selectChild: selection_prototype.selectChild,
+    selectChildren: selection_prototype.selectChildren,
+    filter: filter_default2,
+    merge: merge_default2,
+    selection: selection_default2,
+    transition: transition_default,
+    call: selection_prototype.call,
+    nodes: selection_prototype.nodes,
+    node: selection_prototype.node,
+    size: selection_prototype.size,
+    empty: selection_prototype.empty,
+    each: selection_prototype.each,
+    on: on_default2,
+    attr: attr_default2,
+    attrTween: attrTween_default,
+    style: style_default2,
+    styleTween: styleTween_default,
+    text: text_default2,
+    textTween: textTween_default,
+    remove: remove_default2,
+    tween: tween_default,
+    delay: delay_default,
+    duration: duration_default,
+    ease: ease_default,
+    easeVarying: easeVarying_default,
+    end: end_default,
+    [Symbol.iterator]: selection_prototype[Symbol.iterator]
+  };
+
+  // node_modules/d3-ease/src/linear.js
+  var linear2 = (t2) => +t2;
+
+  // node_modules/d3-ease/src/cubic.js
+  function cubicInOut(t2) {
+    return ((t2 *= 2) <= 1 ? t2 * t2 * t2 : (t2 -= 2) * t2 * t2 + 2) / 2;
   }
-  function toExponential(str, e3) {
-    return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e3 < 0 ? "e" : "e+") + e3;
+
+  // node_modules/d3-transition/src/selection/transition.js
+  var defaultTiming = {
+    time: null,
+    // Set on use.
+    delay: 0,
+    duration: 250,
+    ease: cubicInOut
+  };
+  function inherit(node, id2) {
+    var timing;
+    while (!(timing = node.__transition) || !(timing = timing[id2])) {
+      if (!(node = node.parentNode)) {
+        throw new Error("transition ".concat(id2, " not found"));
+      }
+    }
+    return timing;
   }
-  function toFixedPoint(str, e3, z2) {
-    var len, zs;
-    if (e3 < 0) {
-      for (zs = z2 + "."; ++e3; zs += z2) ;
-      str = zs + str;
+  function transition_default2(name) {
+    var id2, timing;
+    if (name instanceof Transition) {
+      id2 = name._id, name = name._name;
     } else {
-      len = str.length;
-      if (++e3 > len) {
-        for (zs = z2, e3 -= len; --e3; zs += z2) ;
-        str += zs;
-      } else if (e3 < len) {
-        str = str.slice(0, e3) + "." + str.slice(e3);
+      id2 = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
+    }
+    for (var groups = this._groups, m2 = groups.length, j2 = 0; j2 < m2; ++j2) {
+      for (var group = groups[j2], n3 = group.length, node, i3 = 0; i3 < n3; ++i3) {
+        if (node = group[i3]) {
+          schedule_default(node, name, id2, i3, group, timing || inherit(node, id2));
+        }
       }
     }
-    return str;
+    return new Transition(groups, this._parents, name, id2);
   }
-  var BigNumber = clone();
-  var bignumber_default = BigNumber;
 
-  // node_modules/splaytree-ts/dist/index.js
-  var SplayTreeNode = class {
-    constructor(key) {
-      __publicField(this, "key");
-      __publicField(this, "left", null);
-      __publicField(this, "right", null);
-      this.key = key;
+  // node_modules/d3-transition/src/selection/index.js
+  selection_default.prototype.interrupt = interrupt_default2;
+  selection_default.prototype.transition = transition_default2;
+
+  // node_modules/d3-zoom/src/constant.js
+  var constant_default4 = (x2) => () => x2;
+
+  // node_modules/d3-zoom/src/event.js
+  function ZoomEvent(type2, {
+    sourceEvent,
+    target,
+    transform: transform2,
+    dispatch: dispatch14
+  }) {
+    Object.defineProperties(this, {
+      type: { value: type2, enumerable: true, configurable: true },
+      sourceEvent: { value: sourceEvent, enumerable: true, configurable: true },
+      target: { value: target, enumerable: true, configurable: true },
+      transform: { value: transform2, enumerable: true, configurable: true },
+      _: { value: dispatch14 }
+    });
+  }
+
+  // node_modules/d3-zoom/src/transform.js
+  function Transform(k2, x2, y2) {
+    this.k = k2;
+    this.x = x2;
+    this.y = y2;
+  }
+  Transform.prototype = {
+    constructor: Transform,
+    scale: function(k2) {
+      return k2 === 1 ? this : new Transform(this.k * k2, this.x, this.y);
+    },
+    translate: function(x2, y2) {
+      return x2 === 0 & y2 === 0 ? this : new Transform(this.k, this.x + this.k * x2, this.y + this.k * y2);
+    },
+    apply: function(point) {
+      return [point[0] * this.k + this.x, point[1] * this.k + this.y];
+    },
+    applyX: function(x2) {
+      return x2 * this.k + this.x;
+    },
+    applyY: function(y2) {
+      return y2 * this.k + this.y;
+    },
+    invert: function(location) {
+      return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
+    },
+    invertX: function(x2) {
+      return (x2 - this.x) / this.k;
+    },
+    invertY: function(y2) {
+      return (y2 - this.y) / this.k;
+    },
+    rescaleX: function(x2) {
+      return x2.copy().domain(x2.range().map(this.invertX, this).map(x2.invert, x2));
+    },
+    rescaleY: function(y2) {
+      return y2.copy().domain(y2.range().map(this.invertY, this).map(y2.invert, y2));
+    },
+    toString: function() {
+      return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
     }
   };
-  var SplayTreeSetNode = class extends SplayTreeNode {
-    constructor(key) {
-      super(key);
+  var identity2 = new Transform(1, 0, 0);
+  transform.prototype = Transform.prototype;
+  function transform(node) {
+    while (!node.__zoom) if (!(node = node.parentNode)) return identity2;
+    return node.__zoom;
+  }
+
+  // node_modules/d3-zoom/src/noevent.js
+  function nopropagation2(event) {
+    event.stopImmediatePropagation();
+  }
+  function noevent_default2(event) {
+    event.preventDefault();
+    event.stopImmediatePropagation();
+  }
+
+  // node_modules/d3-zoom/src/zoom.js
+  function defaultFilter2(event) {
+    return (!event.ctrlKey || event.type === "wheel") && !event.button;
+  }
+  function defaultExtent() {
+    var e3 = this;
+    if (e3 instanceof SVGElement) {
+      e3 = e3.ownerSVGElement || e3;
+      if (e3.hasAttribute("viewBox")) {
+        e3 = e3.viewBox.baseVal;
+        return [[e3.x, e3.y], [e3.x + e3.width, e3.y + e3.height]];
+      }
+      return [[0, 0], [e3.width.baseVal.value, e3.height.baseVal.value]];
     }
-  };
-  var SplayTreeMapNode = class _SplayTreeMapNode extends SplayTreeNode {
-    constructor(key, value) {
-      super(key);
-      __publicField(this, "value");
-      this.value = value;
+    return [[0, 0], [e3.clientWidth, e3.clientHeight]];
+  }
+  function defaultTransform() {
+    return this.__zoom || identity2;
+  }
+  function defaultWheelDelta(event) {
+    return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 2e-3) * (event.ctrlKey ? 10 : 1);
+  }
+  function defaultTouchable2() {
+    return navigator.maxTouchPoints || "ontouchstart" in this;
+  }
+  function defaultConstrain(transform2, extent, translateExtent) {
+    var dx0 = transform2.invertX(extent[0][0]) - translateExtent[0][0], dx1 = transform2.invertX(extent[1][0]) - translateExtent[1][0], dy0 = transform2.invertY(extent[0][1]) - translateExtent[0][1], dy1 = transform2.invertY(extent[1][1]) - translateExtent[1][1];
+    return transform2.translate(
+      dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
+      dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
+    );
+  }
+  function zoom_default2() {
+    var filter2 = defaultFilter2, extent = defaultExtent, constrain = defaultConstrain, wheelDelta = defaultWheelDelta, touchable = defaultTouchable2, scaleExtent = [0, Infinity], translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], duration = 250, interpolate = zoom_default, listeners = dispatch_default("start", "zoom", "end"), touchstarting, touchfirst, touchending, touchDelay = 500, wheelDelay = 150, clickDistance2 = 0, tapDistance = 10;
+    function zoom(selection2) {
+      selection2.property("__zoom", defaultTransform).on("wheel.zoom", wheeled, { passive: false }).on("mousedown.zoom", mousedowned).on("dblclick.zoom", dblclicked).filter(touchable).on("touchstart.zoom", touchstarted).on("touchmove.zoom", touchmoved).on("touchend.zoom touchcancel.zoom", touchended).style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
     }
-    replaceValue(value) {
-      const node = new _SplayTreeMapNode(this.key, value);
-      node.left = this.left;
-      node.right = this.right;
-      return node;
+    zoom.transform = function(collection, transform2, point, event) {
+      var selection2 = collection.selection ? collection.selection() : collection;
+      selection2.property("__zoom", defaultTransform);
+      if (collection !== selection2) {
+        schedule(collection, transform2, point, event);
+      } else {
+        selection2.interrupt().each(function() {
+          gesture(this, arguments).event(event).start().zoom(null, typeof transform2 === "function" ? transform2.apply(this, arguments) : transform2).end();
+        });
+      }
+    };
+    zoom.scaleBy = function(selection2, k2, p2, event) {
+      zoom.scaleTo(selection2, function() {
+        var k0 = this.__zoom.k, k1 = typeof k2 === "function" ? k2.apply(this, arguments) : k2;
+        return k0 * k1;
+      }, p2, event);
+    };
+    zoom.scaleTo = function(selection2, k2, p2, event) {
+      zoom.transform(selection2, function() {
+        var e3 = extent.apply(this, arguments), t0 = this.__zoom, p02 = p2 == null ? centroid(e3) : typeof p2 === "function" ? p2.apply(this, arguments) : p2, p1 = t0.invert(p02), k1 = typeof k2 === "function" ? k2.apply(this, arguments) : k2;
+        return constrain(translate(scale(t0, k1), p02, p1), e3, translateExtent);
+      }, p2, event);
+    };
+    zoom.translateBy = function(selection2, x2, y2, event) {
+      zoom.transform(selection2, function() {
+        return constrain(this.__zoom.translate(
+          typeof x2 === "function" ? x2.apply(this, arguments) : x2,
+          typeof y2 === "function" ? y2.apply(this, arguments) : y2
+        ), extent.apply(this, arguments), translateExtent);
+      }, null, event);
+    };
+    zoom.translateTo = function(selection2, x2, y2, p2, event) {
+      zoom.transform(selection2, function() {
+        var e3 = extent.apply(this, arguments), t2 = this.__zoom, p02 = p2 == null ? centroid(e3) : typeof p2 === "function" ? p2.apply(this, arguments) : p2;
+        return constrain(identity2.translate(p02[0], p02[1]).scale(t2.k).translate(
+          typeof x2 === "function" ? -x2.apply(this, arguments) : -x2,
+          typeof y2 === "function" ? -y2.apply(this, arguments) : -y2
+        ), e3, translateExtent);
+      }, p2, event);
+    };
+    function scale(transform2, k2) {
+      k2 = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k2));
+      return k2 === transform2.k ? transform2 : new Transform(k2, transform2.x, transform2.y);
     }
-  };
-  var SplayTree = class {
-    constructor() {
-      __publicField(this, "size", 0);
-      __publicField(this, "modificationCount", 0);
-      __publicField(this, "splayCount", 0);
+    function translate(transform2, p02, p1) {
+      var x2 = p02[0] - p1[0] * transform2.k, y2 = p02[1] - p1[1] * transform2.k;
+      return x2 === transform2.x && y2 === transform2.y ? transform2 : new Transform(transform2.k, x2, y2);
     }
-    splay(key) {
-      const root3 = this.root;
-      if (root3 == null) {
-        this.compare(key, key);
-        return -1;
-      }
-      let right = null;
-      let newTreeRight = null;
-      let left = null;
-      let newTreeLeft = null;
-      let current = root3;
-      const compare2 = this.compare;
-      let comp;
-      while (true) {
-        comp = compare2(current.key, key);
-        if (comp > 0) {
-          let currentLeft = current.left;
-          if (currentLeft == null)
-            break;
-          comp = compare2(currentLeft.key, key);
-          if (comp > 0) {
-            current.left = currentLeft.right;
-            currentLeft.right = current;
-            current = currentLeft;
-            currentLeft = current.left;
-            if (currentLeft == null)
-              break;
-          }
-          if (right == null) {
-            newTreeRight = current;
-          } else {
-            right.left = current;
-          }
-          right = current;
-          current = currentLeft;
-        } else if (comp < 0) {
-          let currentRight = current.right;
-          if (currentRight == null)
-            break;
-          comp = compare2(currentRight.key, key);
-          if (comp < 0) {
-            current.right = currentRight.left;
-            currentRight.left = current;
-            current = currentRight;
-            currentRight = current.right;
-            if (currentRight == null)
-              break;
-          }
-          if (left == null) {
-            newTreeLeft = current;
-          } else {
-            left.right = current;
+    function centroid(extent2) {
+      return [(+extent2[0][0] + +extent2[1][0]) / 2, (+extent2[0][1] + +extent2[1][1]) / 2];
+    }
+    function schedule(transition2, transform2, point, event) {
+      transition2.on("start.zoom", function() {
+        gesture(this, arguments).event(event).start();
+      }).on("interrupt.zoom end.zoom", function() {
+        gesture(this, arguments).event(event).end();
+      }).tween("zoom", function() {
+        var that = this, args = arguments, g3 = gesture(that, args).event(event), e3 = extent.apply(that, args), p2 = point == null ? centroid(e3) : typeof point === "function" ? point.apply(that, args) : point, w2 = Math.max(e3[1][0] - e3[0][0], e3[1][1] - e3[0][1]), a2 = that.__zoom, b2 = typeof transform2 === "function" ? transform2.apply(that, args) : transform2, i3 = interpolate(a2.invert(p2).concat(w2 / a2.k), b2.invert(p2).concat(w2 / b2.k));
+        return function(t2) {
+          if (t2 === 1) t2 = b2;
+          else {
+            var l2 = i3(t2), k2 = w2 / l2[2];
+            t2 = new Transform(k2, p2[0] - l2[0] * k2, p2[1] - l2[1] * k2);
           }
-          left = current;
-          current = currentRight;
-        } else {
-          break;
-        }
-      }
-      if (left != null) {
-        left.right = current.left;
-        current.left = newTreeLeft;
-      }
-      if (right != null) {
-        right.left = current.right;
-        current.right = newTreeRight;
-      }
-      if (this.root !== current) {
-        this.root = current;
-        this.splayCount++;
-      }
-      return comp;
+          g3.zoom(null, t2);
+        };
+      });
     }
-    splayMin(node) {
-      let current = node;
-      let nextLeft = current.left;
-      while (nextLeft != null) {
-        const left = nextLeft;
-        current.left = left.right;
-        left.right = current;
-        current = left;
-        nextLeft = current.left;
-      }
-      return current;
+    function gesture(that, args, clean2) {
+      return !clean2 && that.__zooming || new Gesture(that, args);
     }
-    splayMax(node) {
-      let current = node;
-      let nextRight = current.right;
-      while (nextRight != null) {
-        const right = nextRight;
-        current.right = right.left;
-        right.left = current;
-        current = right;
-        nextRight = current.right;
-      }
-      return current;
+    function Gesture(that, args) {
+      this.that = that;
+      this.args = args;
+      this.active = 0;
+      this.sourceEvent = null;
+      this.extent = extent.apply(that, args);
+      this.taps = 0;
     }
-    _delete(key) {
-      if (this.root == null)
-        return null;
-      const comp = this.splay(key);
-      if (comp != 0)
-        return null;
-      let root3 = this.root;
-      const result = root3;
-      const left = root3.left;
-      this.size--;
-      if (left == null) {
-        this.root = root3.right;
-      } else {
-        const right = root3.right;
-        root3 = this.splayMax(left);
-        root3.right = right;
-        this.root = root3;
+    Gesture.prototype = {
+      event: function(event) {
+        if (event) this.sourceEvent = event;
+        return this;
+      },
+      start: function() {
+        if (++this.active === 1) {
+          this.that.__zooming = this;
+          this.emit("start");
+        }
+        return this;
+      },
+      zoom: function(key, transform2) {
+        if (this.mouse && key !== "mouse") this.mouse[1] = transform2.invert(this.mouse[0]);
+        if (this.touch0 && key !== "touch") this.touch0[1] = transform2.invert(this.touch0[0]);
+        if (this.touch1 && key !== "touch") this.touch1[1] = transform2.invert(this.touch1[0]);
+        this.that.__zoom = transform2;
+        this.emit("zoom");
+        return this;
+      },
+      end: function() {
+        if (--this.active === 0) {
+          delete this.that.__zooming;
+          this.emit("end");
+        }
+        return this;
+      },
+      emit: function(type2) {
+        var d2 = select_default2(this.that).datum();
+        listeners.call(
+          type2,
+          this.that,
+          new ZoomEvent(type2, {
+            sourceEvent: this.sourceEvent,
+            target: zoom,
+            type: type2,
+            transform: this.that.__zoom,
+            dispatch: listeners
+          }),
+          d2
+        );
       }
-      this.modificationCount++;
-      return result;
-    }
-    addNewRoot(node, comp) {
-      this.size++;
-      this.modificationCount++;
-      const root3 = this.root;
-      if (root3 == null) {
-        this.root = node;
-        return;
+    };
+    function wheeled(event, ...args) {
+      if (!filter2.apply(this, arguments)) return;
+      var g3 = gesture(this, args).event(event), t2 = this.__zoom, k2 = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t2.k * Math.pow(2, wheelDelta.apply(this, arguments)))), p2 = pointer_default(event);
+      if (g3.wheel) {
+        if (g3.mouse[0][0] !== p2[0] || g3.mouse[0][1] !== p2[1]) {
+          g3.mouse[1] = t2.invert(g3.mouse[0] = p2);
+        }
+        clearTimeout(g3.wheel);
+      } else if (t2.k === k2) return;
+      else {
+        g3.mouse = [p2, t2.invert(p2)];
+        interrupt_default(this);
+        g3.start();
       }
-      if (comp < 0) {
-        node.left = root3;
-        node.right = root3.right;
-        root3.right = null;
-      } else {
-        node.right = root3;
-        node.left = root3.left;
-        root3.left = null;
+      noevent_default2(event);
+      g3.wheel = setTimeout(wheelidled, wheelDelay);
+      g3.zoom("mouse", constrain(translate(scale(t2, k2), g3.mouse[0], g3.mouse[1]), g3.extent, translateExtent));
+      function wheelidled() {
+        g3.wheel = null;
+        g3.end();
       }
-      this.root = node;
-    }
-    _first() {
-      const root3 = this.root;
-      if (root3 == null)
-        return null;
-      this.root = this.splayMin(root3);
-      return this.root;
-    }
-    _last() {
-      const root3 = this.root;
-      if (root3 == null)
-        return null;
-      this.root = this.splayMax(root3);
-      return this.root;
-    }
-    clear() {
-      this.root = null;
-      this.size = 0;
-      this.modificationCount++;
     }
-    has(key) {
-      return this.validKey(key) && this.splay(key) == 0;
-    }
-    defaultCompare() {
-      return (a2, b2) => a2 < b2 ? -1 : a2 > b2 ? 1 : 0;
-    }
-    wrap() {
-      return {
-        getRoot: () => {
-          return this.root;
-        },
-        setRoot: (root3) => {
-          this.root = root3;
-        },
-        getSize: () => {
-          return this.size;
-        },
-        getModificationCount: () => {
-          return this.modificationCount;
-        },
-        getSplayCount: () => {
-          return this.splayCount;
-        },
-        setSplayCount: (count) => {
-          this.splayCount = count;
-        },
-        splay: (key) => {
-          return this.splay(key);
-        },
-        has: (key) => {
-          return this.has(key);
+    function mousedowned(event, ...args) {
+      if (touchending || !filter2.apply(this, arguments)) return;
+      var currentTarget = event.currentTarget, g3 = gesture(this, args, true).event(event), v2 = select_default2(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), p2 = pointer_default(event, currentTarget), x05 = event.clientX, y05 = event.clientY;
+      nodrag_default(event.view);
+      nopropagation2(event);
+      g3.mouse = [p2, this.__zoom.invert(p2)];
+      interrupt_default(this);
+      g3.start();
+      function mousemoved(event2) {
+        noevent_default2(event2);
+        if (!g3.moved) {
+          var dx = event2.clientX - x05, dy = event2.clientY - y05;
+          g3.moved = dx * dx + dy * dy > clickDistance2;
         }
-      };
-    }
-  };
-  var _a, _b;
-  var SplayTreeMap = class extends SplayTree {
-    constructor(compare2, isValidKey) {
-      super();
-      __publicField(this, "root", null);
-      __publicField(this, "compare");
-      __publicField(this, "validKey");
-      __publicField(this, _a, "[object Map]");
-      this.compare = compare2 != null ? compare2 : this.defaultCompare();
-      this.validKey = isValidKey != null ? isValidKey : (a2) => a2 != null && a2 != void 0;
+        g3.event(event2).zoom("mouse", constrain(translate(g3.that.__zoom, g3.mouse[0] = pointer_default(event2, currentTarget), g3.mouse[1]), g3.extent, translateExtent));
+      }
+      function mouseupped(event2) {
+        v2.on("mousemove.zoom mouseup.zoom", null);
+        yesdrag(event2.view, g3.moved);
+        noevent_default2(event2);
+        g3.event(event2).end();
+      }
     }
-    delete(key) {
-      if (!this.validKey(key))
-        return false;
-      return this._delete(key) != null;
+    function dblclicked(event, ...args) {
+      if (!filter2.apply(this, arguments)) return;
+      var t0 = this.__zoom, p02 = pointer_default(event.changedTouches ? event.changedTouches[0] : event, this), p1 = t0.invert(p02), k1 = t0.k * (event.shiftKey ? 0.5 : 2), t1 = constrain(translate(scale(t0, k1), p02, p1), extent.apply(this, args), translateExtent);
+      noevent_default2(event);
+      if (duration > 0) select_default2(this).transition().duration(duration).call(schedule, t1, p02, event);
+      else select_default2(this).call(zoom.transform, t1, p02, event);
     }
-    forEach(f2) {
-      const nodes = new SplayTreeMapEntryIterableIterator(this.wrap());
-      let result;
-      while (result = nodes.next(), !result.done) {
-        f2(result.value[1], result.value[0], this);
+    function touchstarted(event, ...args) {
+      if (!filter2.apply(this, arguments)) return;
+      var touches = event.touches, n3 = touches.length, g3 = gesture(this, args, event.changedTouches.length === n3).event(event), started, i3, t2, p2;
+      nopropagation2(event);
+      for (i3 = 0; i3 < n3; ++i3) {
+        t2 = touches[i3], p2 = pointer_default(t2, this);
+        p2 = [p2, this.__zoom.invert(p2), t2.identifier];
+        if (!g3.touch0) g3.touch0 = p2, started = true, g3.taps = 1 + !!touchstarting;
+        else if (!g3.touch1 && g3.touch0[2] !== p2[2]) g3.touch1 = p2, g3.taps = 0;
+      }
+      if (touchstarting) touchstarting = clearTimeout(touchstarting);
+      if (started) {
+        if (g3.taps < 2) touchfirst = p2[0], touchstarting = setTimeout(function() {
+          touchstarting = null;
+        }, touchDelay);
+        interrupt_default(this);
+        g3.start();
       }
     }
-    get(key) {
-      if (!this.validKey(key))
-        return void 0;
-      if (this.root != null) {
-        const comp = this.splay(key);
-        if (comp == 0) {
-          return this.root.value;
-        }
+    function touchmoved(event, ...args) {
+      if (!this.__zooming) return;
+      var g3 = gesture(this, args).event(event), touches = event.changedTouches, n3 = touches.length, i3, t2, p2, l2;
+      noevent_default2(event);
+      for (i3 = 0; i3 < n3; ++i3) {
+        t2 = touches[i3], p2 = pointer_default(t2, this);
+        if (g3.touch0 && g3.touch0[2] === t2.identifier) g3.touch0[0] = p2;
+        else if (g3.touch1 && g3.touch1[2] === t2.identifier) g3.touch1[0] = p2;
       }
-      return void 0;
+      t2 = g3.that.__zoom;
+      if (g3.touch1) {
+        var p02 = g3.touch0[0], l0 = g3.touch0[1], p1 = g3.touch1[0], l1 = g3.touch1[1], dp = (dp = p1[0] - p02[0]) * dp + (dp = p1[1] - p02[1]) * dp, dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
+        t2 = scale(t2, Math.sqrt(dp / dl));
+        p2 = [(p02[0] + p1[0]) / 2, (p02[1] + p1[1]) / 2];
+        l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
+      } else if (g3.touch0) p2 = g3.touch0[0], l2 = g3.touch0[1];
+      else return;
+      g3.zoom("touch", constrain(translate(t2, p2, l2), g3.extent, translateExtent));
     }
-    hasValue(value) {
-      const initialSplayCount = this.splayCount;
-      const visit = (node) => {
-        while (node != null) {
-          if (node.value == value)
-            return true;
-          if (initialSplayCount != this.splayCount) {
-            throw "Concurrent modification during iteration.";
-          }
-          if (node.right != null && visit(node.right)) {
-            return true;
+    function touchended(event, ...args) {
+      if (!this.__zooming) return;
+      var g3 = gesture(this, args).event(event), touches = event.changedTouches, n3 = touches.length, i3, t2;
+      nopropagation2(event);
+      if (touchending) clearTimeout(touchending);
+      touchending = setTimeout(function() {
+        touchending = null;
+      }, touchDelay);
+      for (i3 = 0; i3 < n3; ++i3) {
+        t2 = touches[i3];
+        if (g3.touch0 && g3.touch0[2] === t2.identifier) delete g3.touch0;
+        else if (g3.touch1 && g3.touch1[2] === t2.identifier) delete g3.touch1;
+      }
+      if (g3.touch1 && !g3.touch0) g3.touch0 = g3.touch1, delete g3.touch1;
+      if (g3.touch0) g3.touch0[1] = this.__zoom.invert(g3.touch0[0]);
+      else {
+        g3.end();
+        if (g3.taps === 2) {
+          t2 = pointer_default(t2, this);
+          if (Math.hypot(touchfirst[0] - t2[0], touchfirst[1] - t2[1]) < tapDistance) {
+            var p2 = select_default2(this).on("dblclick.zoom");
+            if (p2) p2.apply(this, arguments);
           }
-          node = node.left;
         }
-        return false;
-      };
-      return visit(this.root);
-    }
-    set(key, value) {
-      const comp = this.splay(key);
-      if (comp == 0) {
-        this.root = this.root.replaceValue(value);
-        this.splayCount += 1;
-        return this;
       }
-      this.addNewRoot(new SplayTreeMapNode(key, value), comp);
-      return this;
     }
-    setAll(other) {
-      other.forEach((value, key) => {
-        this.set(key, value);
-      });
+    zoom.wheelDelta = function(_2) {
+      return arguments.length ? (wheelDelta = typeof _2 === "function" ? _2 : constant_default4(+_2), zoom) : wheelDelta;
+    };
+    zoom.filter = function(_2) {
+      return arguments.length ? (filter2 = typeof _2 === "function" ? _2 : constant_default4(!!_2), zoom) : filter2;
+    };
+    zoom.touchable = function(_2) {
+      return arguments.length ? (touchable = typeof _2 === "function" ? _2 : constant_default4(!!_2), zoom) : touchable;
+    };
+    zoom.extent = function(_2) {
+      return arguments.length ? (extent = typeof _2 === "function" ? _2 : constant_default4([[+_2[0][0], +_2[0][1]], [+_2[1][0], +_2[1][1]]]), zoom) : extent;
+    };
+    zoom.scaleExtent = function(_2) {
+      return arguments.length ? (scaleExtent[0] = +_2[0], scaleExtent[1] = +_2[1], zoom) : [scaleExtent[0], scaleExtent[1]];
+    };
+    zoom.translateExtent = function(_2) {
+      return arguments.length ? (translateExtent[0][0] = +_2[0][0], translateExtent[1][0] = +_2[1][0], translateExtent[0][1] = +_2[0][1], translateExtent[1][1] = +_2[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
+    };
+    zoom.constrain = function(_2) {
+      return arguments.length ? (constrain = _2, zoom) : constrain;
+    };
+    zoom.duration = function(_2) {
+      return arguments.length ? (duration = +_2, zoom) : duration;
+    };
+    zoom.interpolate = function(_2) {
+      return arguments.length ? (interpolate = _2, zoom) : interpolate;
+    };
+    zoom.on = function() {
+      var value = listeners.on.apply(listeners, arguments);
+      return value === listeners ? zoom : value;
+    };
+    zoom.clickDistance = function(_2) {
+      return arguments.length ? (clickDistance2 = (_2 = +_2) * _2, zoom) : Math.sqrt(clickDistance2);
+    };
+    zoom.tapDistance = function(_2) {
+      return arguments.length ? (tapDistance = +_2, zoom) : tapDistance;
+    };
+    return zoom;
+  }
+
+  // modules/geo/raw_mercator.js
+  function geoRawMercator() {
+    var project = mercatorRaw;
+    var k2 = 512 / Math.PI;
+    var x2 = 0;
+    var y2 = 0;
+    var clipExtent = [[0, 0], [0, 0]];
+    function projection2(point) {
+      point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
+      return [point[0] * k2 + x2, y2 - point[1] * k2];
     }
-    setIfAbsent(key, ifAbsent) {
-      let comp = this.splay(key);
-      if (comp == 0) {
-        return this.root.value;
-      }
-      const modificationCount = this.modificationCount;
-      const splayCount = this.splayCount;
-      const value = ifAbsent();
-      if (modificationCount != this.modificationCount) {
-        throw "Concurrent modification during iteration.";
-      }
-      if (splayCount != this.splayCount) {
-        comp = this.splay(key);
+    projection2.invert = function(point) {
+      point = project.invert((point[0] - x2) / k2, (y2 - point[1]) / k2);
+      return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
+    };
+    projection2.scale = function(_2) {
+      if (!arguments.length) return k2;
+      k2 = +_2;
+      return projection2;
+    };
+    projection2.translate = function(_2) {
+      if (!arguments.length) return [x2, y2];
+      x2 = +_2[0];
+      y2 = +_2[1];
+      return projection2;
+    };
+    projection2.clipExtent = function(_2) {
+      if (!arguments.length) return clipExtent;
+      clipExtent = _2;
+      return projection2;
+    };
+    projection2.transform = function(obj) {
+      if (!arguments.length) return identity2.translate(x2, y2).scale(k2);
+      x2 = +obj.x;
+      y2 = +obj.y;
+      k2 = +obj.k;
+      return projection2;
+    };
+    projection2.stream = transform_default({
+      point: function(x3, y3) {
+        var vec = projection2([x3, y3]);
+        this.stream.point(vec[0], vec[1]);
       }
-      this.addNewRoot(new SplayTreeMapNode(key, value), comp);
-      return value;
+    }).stream;
+    return projection2;
+  }
+
+  // modules/geo/ortho.js
+  function geoOrthoNormalizedDotProduct(a2, b2, origin) {
+    if (geoVecEqual(origin, a2) || geoVecEqual(origin, b2)) {
+      return 1;
     }
-    isEmpty() {
-      return this.root == null;
+    return geoVecNormalizedDot(a2, b2, origin);
+  }
+  function geoOrthoFilterDotProduct(dotp, epsilon3, lowerThreshold, upperThreshold, allowStraightAngles) {
+    var val = Math.abs(dotp);
+    if (val < epsilon3) {
+      return 0;
+    } else if (allowStraightAngles && Math.abs(val - 1) < epsilon3) {
+      return 0;
+    } else if (val < lowerThreshold || val > upperThreshold) {
+      return dotp;
+    } else {
+      return null;
     }
-    isNotEmpty() {
-      return !this.isEmpty();
+  }
+  function geoOrthoCalcScore(points, isClosed, epsilon3, threshold) {
+    var score = 0;
+    var first = isClosed ? 0 : 1;
+    var last = isClosed ? points.length : points.length - 1;
+    var coords = points.map(function(p2) {
+      return p2.coord;
+    });
+    var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
+    var upperThreshold = Math.cos(threshold * Math.PI / 180);
+    for (var i3 = first; i3 < last; i3++) {
+      var a2 = coords[(i3 - 1 + coords.length) % coords.length];
+      var origin = coords[i3];
+      var b2 = coords[(i3 + 1) % coords.length];
+      var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a2, b2, origin), epsilon3, lowerThreshold, upperThreshold);
+      if (dotp === null) continue;
+      score = score + 2 * Math.min(Math.abs(dotp - 1), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
     }
-    firstKey() {
-      if (this.root == null)
-        return null;
-      return this._first().key;
+    return score;
+  }
+  function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
+    var max3 = -Infinity;
+    var first = isClosed ? 0 : 1;
+    var last = isClosed ? coords.length : coords.length - 1;
+    for (var i3 = first; i3 < last; i3++) {
+      var a2 = coords[(i3 - 1 + coords.length) % coords.length];
+      var origin = coords[i3];
+      var b2 = coords[(i3 + 1) % coords.length];
+      var normalizedDotP = geoOrthoNormalizedDotProduct(a2, b2, origin);
+      var angle2 = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
+      if (angle2 > 45) angle2 = 90 - angle2;
+      if (angle2 >= lessThan) continue;
+      if (angle2 > max3) max3 = angle2;
     }
-    lastKey() {
-      if (this.root == null)
-        return null;
-      return this._last().key;
+    if (max3 === -Infinity) return null;
+    return max3;
+  }
+  function geoOrthoCanOrthogonalize(coords, isClosed, epsilon3, threshold, allowStraightAngles) {
+    var score = null;
+    var first = isClosed ? 0 : 1;
+    var last = isClosed ? coords.length : coords.length - 1;
+    var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
+    var upperThreshold = Math.cos(threshold * Math.PI / 180);
+    for (var i3 = first; i3 < last; i3++) {
+      var a2 = coords[(i3 - 1 + coords.length) % coords.length];
+      var origin = coords[i3];
+      var b2 = coords[(i3 + 1) % coords.length];
+      var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a2, b2, origin), epsilon3, lowerThreshold, upperThreshold, allowStraightAngles);
+      if (dotp === null) continue;
+      if (Math.abs(dotp) > 0) return 1;
+      score = 0;
     }
-    lastKeyBefore(key) {
-      if (key == null)
-        throw "Invalid arguments(s)";
-      if (this.root == null)
-        return null;
-      const comp = this.splay(key);
-      if (comp < 0)
-        return this.root.key;
-      let node = this.root.left;
-      if (node == null)
-        return null;
-      let nodeRight = node.right;
-      while (nodeRight != null) {
-        node = nodeRight;
-        nodeRight = node.right;
-      }
-      return node.key;
+    return score;
+  }
+
+  // modules/osm/tags.js
+  function osmIsInterestingTag(key) {
+    return key !== "attribution" && key !== "created_by" && key !== "source" && key !== "odbl" && key.indexOf("source:") !== 0 && key.indexOf("source_ref") !== 0 && // purposely exclude colon
+    key.indexOf("tiger:") !== 0;
+  }
+  var osmLifecyclePrefixes = {
+    // nonexistent, might be built
+    proposed: true,
+    planned: true,
+    // under maintenance or between groundbreaking and opening
+    construction: true,
+    // existent but not functional
+    disused: true,
+    // dilapidated to nonexistent
+    abandoned: true,
+    was: true,
+    // nonexistent, still may appear in imagery
+    dismantled: true,
+    razed: true,
+    demolished: true,
+    destroyed: true,
+    removed: true,
+    obliterated: true,
+    // existent occasionally, e.g. stormwater drainage basin
+    intermittent: true
+  };
+  function osmRemoveLifecyclePrefix(key) {
+    const keySegments = key.split(":");
+    if (keySegments.length === 1) return key;
+    if (keySegments[0] in osmLifecyclePrefixes) {
+      return key.slice(keySegments[0].length + 1);
     }
-    firstKeyAfter(key) {
-      if (key == null)
-        throw "Invalid arguments(s)";
-      if (this.root == null)
-        return null;
-      const comp = this.splay(key);
-      if (comp > 0)
-        return this.root.key;
-      let node = this.root.right;
-      if (node == null)
-        return null;
-      let nodeLeft = node.left;
-      while (nodeLeft != null) {
-        node = nodeLeft;
-        nodeLeft = node.left;
-      }
-      return node.key;
+    return key;
+  }
+  var osmAreaKeys = {};
+  function osmSetAreaKeys(value) {
+    osmAreaKeys = value;
+  }
+  var osmAreaKeysExceptions = {
+    highway: {
+      elevator: true,
+      rest_area: true,
+      services: true
+    },
+    public_transport: {
+      platform: true
+    },
+    railway: {
+      platform: true,
+      roundhouse: true,
+      station: true,
+      traverser: true,
+      turntable: true,
+      wash: true,
+      ventilation_shaft: true
+    },
+    waterway: {
+      dam: true
+    },
+    amenity: {
+      bicycle_parking: true
     }
-    update(key, update, ifAbsent) {
-      let comp = this.splay(key);
-      if (comp == 0) {
-        const modificationCount = this.modificationCount;
-        const splayCount = this.splayCount;
-        const newValue = update(this.root.value);
-        if (modificationCount != this.modificationCount) {
-          throw "Concurrent modification during iteration.";
-        }
-        if (splayCount != this.splayCount) {
-          this.splay(key);
-        }
-        this.root = this.root.replaceValue(newValue);
-        this.splayCount += 1;
-        return newValue;
+  };
+  function osmTagSuggestingArea(tags) {
+    if (tags.area === "yes") return { area: "yes" };
+    if (tags.area === "no") return null;
+    var returnTags = {};
+    for (var realKey in tags) {
+      const key = osmRemoveLifecyclePrefix(realKey);
+      if (key in osmAreaKeys && !(tags[realKey] in osmAreaKeys[key])) {
+        returnTags[realKey] = tags[realKey];
+        return returnTags;
       }
-      if (ifAbsent != null) {
-        const modificationCount = this.modificationCount;
-        const splayCount = this.splayCount;
-        const newValue = ifAbsent();
-        if (modificationCount != this.modificationCount) {
-          throw "Concurrent modification during iteration.";
-        }
-        if (splayCount != this.splayCount) {
-          comp = this.splay(key);
-        }
-        this.addNewRoot(new SplayTreeMapNode(key, newValue), comp);
-        return newValue;
+      if (key in osmAreaKeysExceptions && tags[realKey] in osmAreaKeysExceptions[key]) {
+        returnTags[realKey] = tags[realKey];
+        return returnTags;
       }
-      throw "Invalid argument (key): Key not in map.";
     }
-    updateAll(update) {
-      const root3 = this.root;
-      if (root3 == null)
-        return;
-      const iterator = new SplayTreeMapEntryIterableIterator(this.wrap());
-      let node;
-      while (node = iterator.next(), !node.done) {
-        const newValue = update(...node.value);
-        iterator.replaceValue(newValue);
+    return null;
+  }
+  var osmLineTags = {};
+  function osmSetLineTags(value) {
+    osmLineTags = value;
+  }
+  var osmPointTags = {};
+  function osmSetPointTags(value) {
+    osmPointTags = value;
+  }
+  var osmVertexTags = {};
+  function osmSetVertexTags(value) {
+    osmVertexTags = value;
+  }
+  function osmNodeGeometriesForTags(nodeTags) {
+    var geometries = {};
+    for (var key in nodeTags) {
+      if (osmPointTags[key] && (osmPointTags[key]["*"] || osmPointTags[key][nodeTags[key]])) {
+        geometries.point = true;
       }
+      if (osmVertexTags[key] && (osmVertexTags[key]["*"] || osmVertexTags[key][nodeTags[key]])) {
+        geometries.vertex = true;
+      }
+      if (geometries.point && geometries.vertex) break;
     }
-    keys() {
-      return new SplayTreeKeyIterableIterator(this.wrap());
+    return geometries;
+  }
+  var osmOneWayTags = {
+    "aerialway": {
+      "chair_lift": true,
+      "drag_lift": true,
+      "j-bar": true,
+      "magic_carpet": true,
+      "mixed_lift": true,
+      "platter": true,
+      "rope_tow": true,
+      "t-bar": true,
+      "zip_line": true
+    },
+    "conveying": {
+      "forward": true,
+      "backward": true,
+      "reversible": true
+    },
+    "highway": {
+      "motorway": true
+    },
+    "junction": {
+      "circular": true,
+      "roundabout": true
+    },
+    "man_made": {
+      "goods_conveyor": true,
+      "piste:halfpipe": true
+    },
+    "piste:type": {
+      "downhill": true,
+      "sled": true,
+      "yes": true
+    },
+    "seamark:type": {
+      "two-way_route": true,
+      "recommended_traffic_lane": true,
+      "separation_lane": true,
+      "separation_roundabout": true
+    },
+    "waterway": {
+      "canal": true,
+      "ditch": true,
+      "drain": true,
+      "fish_pass": true,
+      "flowline": true,
+      "pressurised": true,
+      "river": true,
+      "spillway": true,
+      "stream": true,
+      "tidal_channel": true
     }
-    values() {
-      return new SplayTreeValueIterableIterator(this.wrap());
+  };
+  var osmPavedTags = {
+    "surface": {
+      "paved": true,
+      "asphalt": true,
+      "concrete": true,
+      "chipseal": true,
+      "concrete:lanes": true,
+      "concrete:plates": true
+    },
+    "tracktype": {
+      "grade1": true
     }
-    entries() {
-      return this[Symbol.iterator]();
+  };
+  var osmSemipavedTags = {
+    "surface": {
+      "cobblestone": true,
+      "cobblestone:flattened": true,
+      "unhewn_cobblestone": true,
+      "sett": true,
+      "paving_stones": true,
+      "metal": true,
+      "wood": true
     }
-    [(_b = Symbol.iterator, _a = Symbol.toStringTag, _b)]() {
-      return new SplayTreeMapEntryIterableIterator(this.wrap());
+  };
+  var osmRightSideIsInsideTags = {
+    "natural": {
+      "cliff": true,
+      "coastline": "coastline"
+    },
+    "barrier": {
+      "retaining_wall": true,
+      "kerb": true,
+      "guard_rail": true,
+      "city_wall": true
+    },
+    "man_made": {
+      "embankment": true,
+      "quay": true
+    },
+    "waterway": {
+      "weir": true
     }
   };
-  var _a2, _b2;
-  var SplayTreeSet = class _SplayTreeSet extends SplayTree {
-    constructor(compare2, isValidKey) {
-      super();
-      __publicField(this, "root", null);
-      __publicField(this, "compare");
-      __publicField(this, "validKey");
-      __publicField(this, _a2, "[object Set]");
-      this.compare = compare2 != null ? compare2 : this.defaultCompare();
-      this.validKey = isValidKey != null ? isValidKey : (v2) => v2 != null && v2 != void 0;
+  var osmRoutableHighwayTagValues = {
+    motorway: true,
+    trunk: true,
+    primary: true,
+    secondary: true,
+    tertiary: true,
+    residential: true,
+    motorway_link: true,
+    trunk_link: true,
+    primary_link: true,
+    secondary_link: true,
+    tertiary_link: true,
+    unclassified: true,
+    road: true,
+    service: true,
+    track: true,
+    living_street: true,
+    bus_guideway: true,
+    busway: true,
+    path: true,
+    footway: true,
+    cycleway: true,
+    bridleway: true,
+    pedestrian: true,
+    corridor: true,
+    steps: true,
+    ladder: true
+  };
+  var osmPathHighwayTagValues = {
+    path: true,
+    footway: true,
+    cycleway: true,
+    bridleway: true,
+    pedestrian: true,
+    corridor: true,
+    steps: true,
+    ladder: true
+  };
+  var osmRailwayTrackTagValues = {
+    rail: true,
+    light_rail: true,
+    tram: true,
+    subway: true,
+    monorail: true,
+    funicular: true,
+    miniature: true,
+    narrow_gauge: true,
+    disused: true,
+    preserved: true
+  };
+  var osmFlowingWaterwayTagValues = {
+    canal: true,
+    ditch: true,
+    drain: true,
+    fish_pass: true,
+    flowline: true,
+    river: true,
+    stream: true,
+    tidal_channel: true
+  };
+  var allowUpperCaseTagValues = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery|cai_scale|traffic_sign/;
+  function isColourValid(value) {
+    if (!value.match(/^(#([0-9a-fA-F]{3}){1,2}|\w+)$/)) {
+      return false;
     }
-    delete(element) {
-      if (!this.validKey(element))
-        return false;
-      return this._delete(element) != null;
+    if (!CSS.supports("color", value) || ["unset", "inherit", "initial", "revert"].includes(value)) {
+      return false;
     }
-    deleteAll(elements) {
-      for (const element of elements) {
-        this.delete(element);
-      }
+    return true;
+  }
+  var osmMutuallyExclusiveTagPairs = [
+    ["noname", "name"],
+    ["noref", "ref"],
+    ["nohousenumber", "addr:housenumber"],
+    ["noaddress", "addr:housenumber"],
+    ["noaddress", "addr:housename"],
+    ["noaddress", "addr:unit"],
+    ["addr:nostreet", "addr:street"]
+  ];
+
+  // modules/util/array.js
+  function utilArrayIdentical(a2, b2) {
+    if (a2 === b2) return true;
+    var i3 = a2.length;
+    if (i3 !== b2.length) return false;
+    while (i3--) {
+      if (a2[i3] !== b2[i3]) return false;
     }
-    forEach(f2) {
-      const nodes = this[Symbol.iterator]();
-      let result;
-      while (result = nodes.next(), !result.done) {
-        f2(result.value, result.value, this);
+    return true;
+  }
+  function utilArrayDifference(a2, b2) {
+    var other2 = new Set(b2);
+    return Array.from(new Set(a2)).filter(function(v2) {
+      return !other2.has(v2);
+    });
+  }
+  function utilArrayIntersection(a2, b2) {
+    var other2 = new Set(b2);
+    return Array.from(new Set(a2)).filter(function(v2) {
+      return other2.has(v2);
+    });
+  }
+  function utilArrayUnion(a2, b2) {
+    var result = new Set(a2);
+    b2.forEach(function(v2) {
+      result.add(v2);
+    });
+    return Array.from(result);
+  }
+  function utilArrayUniq(a2) {
+    return Array.from(new Set(a2));
+  }
+  function utilArrayChunk(a2, chunkSize) {
+    if (!chunkSize || chunkSize < 0) return [a2.slice()];
+    var result = new Array(Math.ceil(a2.length / chunkSize));
+    return Array.from(result, function(item, i3) {
+      return a2.slice(i3 * chunkSize, i3 * chunkSize + chunkSize);
+    });
+  }
+  function utilArrayFlatten(a2) {
+    return a2.reduce(function(acc, val) {
+      return acc.concat(val);
+    }, []);
+  }
+  function utilArrayGroupBy(a2, key) {
+    return a2.reduce(function(acc, item) {
+      var group = typeof key === "function" ? key(item) : item[key];
+      (acc[group] = acc[group] || []).push(item);
+      return acc;
+    }, {});
+  }
+  function utilArrayUniqBy(a2, key) {
+    var seen = /* @__PURE__ */ new Set();
+    return a2.reduce(function(acc, item) {
+      var val = typeof key === "function" ? key(item) : item[key];
+      if (val && !seen.has(val)) {
+        seen.add(val);
+        acc.push(item);
       }
+      return acc;
+    }, []);
+  }
+
+  // modules/util/util.js
+  var import_diacritics = __toESM(require_diacritics());
+
+  // modules/util/svg_paths_rtl_fix.js
+  var import_alif_toolkit = __toESM(require_lib());
+  var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u07BF\u08A0–\u08BF]/;
+  function fixRTLTextForSvg(inputText) {
+    var ret = "", rtlBuffer = [];
+    var arabicRegex = /[\u0600-\u06FF]/g;
+    var arabicDiacritics = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06ED]/g;
+    var arabicMath = /[\u0660-\u066C\u06F0-\u06F9]+/g;
+    var thaanaVowel = /[\u07A6-\u07B0]/;
+    var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
+    if (arabicRegex.test(inputText)) {
+      inputText = (0, import_alif_toolkit.WordShaper)(inputText);
     }
-    add(element) {
-      const compare2 = this.splay(element);
-      if (compare2 != 0)
-        this.addNewRoot(new SplayTreeSetNode(element), compare2);
-      return this;
-    }
-    addAndReturn(element) {
-      const compare2 = this.splay(element);
-      if (compare2 != 0)
-        this.addNewRoot(new SplayTreeSetNode(element), compare2);
-      return this.root.key;
-    }
-    addAll(elements) {
-      for (const element of elements) {
-        this.add(element);
+    for (var n3 = 0; n3 < inputText.length; n3++) {
+      var c2 = inputText[n3];
+      if (arabicMath.test(c2)) {
+        ret += rtlBuffer.reverse().join("");
+        rtlBuffer = [c2];
+      } else {
+        if (rtlBuffer.length && arabicMath.test(rtlBuffer[rtlBuffer.length - 1])) {
+          ret += rtlBuffer.reverse().join("");
+          rtlBuffer = [];
+        }
+        if ((thaanaVowel.test(c2) || hebrewSign.test(c2) || arabicDiacritics.test(c2)) && rtlBuffer.length) {
+          rtlBuffer[rtlBuffer.length - 1] += c2;
+        } else if (rtlRegex.test(c2) || c2.charCodeAt(0) >= 64336 && c2.charCodeAt(0) <= 65023 || c2.charCodeAt(0) >= 65136 && c2.charCodeAt(0) <= 65279) {
+          rtlBuffer.push(c2);
+        } else if (c2 === " " && rtlBuffer.length) {
+          rtlBuffer = [rtlBuffer.reverse().join("") + " "];
+        } else {
+          ret += rtlBuffer.reverse().join("") + c2;
+          rtlBuffer = [];
+        }
       }
     }
-    isEmpty() {
-      return this.root == null;
+    ret += rtlBuffer.reverse().join("");
+    return ret;
+  }
+
+  // node_modules/lodash-es/_freeGlobal.js
+  var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
+  var freeGlobal_default = freeGlobal;
+
+  // node_modules/lodash-es/_root.js
+  var freeSelf = typeof self == "object" && self && self.Object === Object && self;
+  var root2 = freeGlobal_default || freeSelf || Function("return this")();
+  var root_default = root2;
+
+  // node_modules/lodash-es/_Symbol.js
+  var Symbol2 = root_default.Symbol;
+  var Symbol_default = Symbol2;
+
+  // node_modules/lodash-es/_getRawTag.js
+  var objectProto = Object.prototype;
+  var hasOwnProperty = objectProto.hasOwnProperty;
+  var nativeObjectToString = objectProto.toString;
+  var symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
+  function getRawTag(value) {
+    var isOwn = hasOwnProperty.call(value, symToStringTag), tag2 = value[symToStringTag];
+    try {
+      value[symToStringTag] = void 0;
+      var unmasked = true;
+    } catch (e3) {
     }
-    isNotEmpty() {
-      return this.root != null;
+    var result = nativeObjectToString.call(value);
+    if (unmasked) {
+      if (isOwn) {
+        value[symToStringTag] = tag2;
+      } else {
+        delete value[symToStringTag];
+      }
     }
-    single() {
-      if (this.size == 0)
-        throw "Bad state: No element";
-      if (this.size > 1)
-        throw "Bad state: Too many element";
-      return this.root.key;
+    return result;
+  }
+  var getRawTag_default = getRawTag;
+
+  // node_modules/lodash-es/_objectToString.js
+  var objectProto2 = Object.prototype;
+  var nativeObjectToString2 = objectProto2.toString;
+  function objectToString(value) {
+    return nativeObjectToString2.call(value);
+  }
+  var objectToString_default = objectToString;
+
+  // node_modules/lodash-es/_baseGetTag.js
+  var nullTag = "[object Null]";
+  var undefinedTag = "[object Undefined]";
+  var symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
+  function baseGetTag(value) {
+    if (value == null) {
+      return value === void 0 ? undefinedTag : nullTag;
     }
-    first() {
-      if (this.size == 0)
-        throw "Bad state: No element";
-      return this._first().key;
+    return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
+  }
+  var baseGetTag_default = baseGetTag;
+
+  // node_modules/lodash-es/isObjectLike.js
+  function isObjectLike(value) {
+    return value != null && typeof value == "object";
+  }
+  var isObjectLike_default = isObjectLike;
+
+  // node_modules/lodash-es/isSymbol.js
+  var symbolTag = "[object Symbol]";
+  function isSymbol(value) {
+    return typeof value == "symbol" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;
+  }
+  var isSymbol_default = isSymbol;
+
+  // node_modules/lodash-es/_arrayMap.js
+  function arrayMap(array2, iteratee) {
+    var index = -1, length2 = array2 == null ? 0 : array2.length, result = Array(length2);
+    while (++index < length2) {
+      result[index] = iteratee(array2[index], index, array2);
     }
-    last() {
-      if (this.size == 0)
-        throw "Bad state: No element";
-      return this._last().key;
+    return result;
+  }
+  var arrayMap_default = arrayMap;
+
+  // node_modules/lodash-es/isArray.js
+  var isArray = Array.isArray;
+  var isArray_default = isArray;
+
+  // node_modules/lodash-es/_baseToString.js
+  var INFINITY = 1 / 0;
+  var symbolProto = Symbol_default ? Symbol_default.prototype : void 0;
+  var symbolToString = symbolProto ? symbolProto.toString : void 0;
+  function baseToString(value) {
+    if (typeof value == "string") {
+      return value;
     }
-    lastBefore(element) {
-      if (element == null)
-        throw "Invalid arguments(s)";
-      if (this.root == null)
-        return null;
-      const comp = this.splay(element);
-      if (comp < 0)
-        return this.root.key;
-      let node = this.root.left;
-      if (node == null)
-        return null;
-      let nodeRight = node.right;
-      while (nodeRight != null) {
-        node = nodeRight;
-        nodeRight = node.right;
-      }
-      return node.key;
+    if (isArray_default(value)) {
+      return arrayMap_default(value, baseToString) + "";
     }
-    firstAfter(element) {
-      if (element == null)
-        throw "Invalid arguments(s)";
-      if (this.root == null)
-        return null;
-      const comp = this.splay(element);
-      if (comp > 0)
-        return this.root.key;
-      let node = this.root.right;
-      if (node == null)
-        return null;
-      let nodeLeft = node.left;
-      while (nodeLeft != null) {
-        node = nodeLeft;
-        nodeLeft = node.left;
-      }
-      return node.key;
+    if (isSymbol_default(value)) {
+      return symbolToString ? symbolToString.call(value) : "";
     }
-    retainAll(elements) {
-      const retainSet = new _SplayTreeSet(this.compare, this.validKey);
-      const modificationCount = this.modificationCount;
-      for (const object of elements) {
-        if (modificationCount != this.modificationCount) {
-          throw "Concurrent modification during iteration.";
-        }
-        if (this.validKey(object) && this.splay(object) == 0) {
-          retainSet.add(this.root.key);
-        }
-      }
-      if (retainSet.size != this.size) {
-        this.root = retainSet.root;
-        this.size = retainSet.size;
-        this.modificationCount++;
-      }
+    var result = value + "";
+    return result == "0" && 1 / value == -INFINITY ? "-0" : result;
+  }
+  var baseToString_default = baseToString;
+
+  // node_modules/lodash-es/_trimmedEndIndex.js
+  var reWhitespace = /\s/;
+  function trimmedEndIndex(string) {
+    var index = string.length;
+    while (index-- && reWhitespace.test(string.charAt(index))) {
     }
-    lookup(object) {
-      if (!this.validKey(object))
-        return null;
-      const comp = this.splay(object);
-      if (comp != 0)
-        return null;
-      return this.root.key;
+    return index;
+  }
+  var trimmedEndIndex_default = trimmedEndIndex;
+
+  // node_modules/lodash-es/_baseTrim.js
+  var reTrimStart = /^\s+/;
+  function baseTrim(string) {
+    return string ? string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, "") : string;
+  }
+  var baseTrim_default = baseTrim;
+
+  // node_modules/lodash-es/isObject.js
+  function isObject(value) {
+    var type2 = typeof value;
+    return value != null && (type2 == "object" || type2 == "function");
+  }
+  var isObject_default = isObject;
+
+  // node_modules/lodash-es/toNumber.js
+  var NAN = 0 / 0;
+  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+  var reIsBinary = /^0b[01]+$/i;
+  var reIsOctal = /^0o[0-7]+$/i;
+  var freeParseInt = parseInt;
+  function toNumber(value) {
+    if (typeof value == "number") {
+      return value;
     }
-    intersection(other) {
-      const result = new _SplayTreeSet(this.compare, this.validKey);
-      for (const element of this) {
-        if (other.has(element))
-          result.add(element);
-      }
-      return result;
+    if (isSymbol_default(value)) {
+      return NAN;
     }
-    difference(other) {
-      const result = new _SplayTreeSet(this.compare, this.validKey);
-      for (const element of this) {
-        if (!other.has(element))
-          result.add(element);
-      }
-      return result;
+    if (isObject_default(value)) {
+      var other2 = typeof value.valueOf == "function" ? value.valueOf() : value;
+      value = isObject_default(other2) ? other2 + "" : other2;
     }
-    union(other) {
-      const u2 = this.clone();
-      u2.addAll(other);
-      return u2;
+    if (typeof value != "string") {
+      return value === 0 ? value : +value;
     }
-    clone() {
-      const set4 = new _SplayTreeSet(this.compare, this.validKey);
-      set4.size = this.size;
-      set4.root = this.copyNode(this.root);
-      return set4;
+    value = baseTrim_default(value);
+    var isBinary = reIsBinary.test(value);
+    return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
+  }
+  var toNumber_default = toNumber;
+
+  // node_modules/lodash-es/isFunction.js
+  var asyncTag = "[object AsyncFunction]";
+  var funcTag = "[object Function]";
+  var genTag = "[object GeneratorFunction]";
+  var proxyTag = "[object Proxy]";
+  function isFunction(value) {
+    if (!isObject_default(value)) {
+      return false;
     }
-    copyNode(node) {
-      if (node == null)
-        return null;
-      function copyChildren(node2, dest) {
-        let left;
-        let right;
-        do {
-          left = node2.left;
-          right = node2.right;
-          if (left != null) {
-            const newLeft = new SplayTreeSetNode(left.key);
-            dest.left = newLeft;
-            copyChildren(left, newLeft);
-          }
-          if (right != null) {
-            const newRight = new SplayTreeSetNode(right.key);
-            dest.right = newRight;
-            node2 = right;
-            dest = newRight;
-          }
-        } while (right != null);
+    var tag2 = baseGetTag_default(value);
+    return tag2 == funcTag || tag2 == genTag || tag2 == asyncTag || tag2 == proxyTag;
+  }
+  var isFunction_default = isFunction;
+
+  // node_modules/lodash-es/_coreJsData.js
+  var coreJsData = root_default["__core-js_shared__"];
+  var coreJsData_default = coreJsData;
+
+  // node_modules/lodash-es/_isMasked.js
+  var maskSrcKey = function() {
+    var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || "");
+    return uid ? "Symbol(src)_1." + uid : "";
+  }();
+  function isMasked(func) {
+    return !!maskSrcKey && maskSrcKey in func;
+  }
+  var isMasked_default = isMasked;
+
+  // node_modules/lodash-es/_toSource.js
+  var funcProto = Function.prototype;
+  var funcToString = funcProto.toString;
+  function toSource(func) {
+    if (func != null) {
+      try {
+        return funcToString.call(func);
+      } catch (e3) {
+      }
+      try {
+        return func + "";
+      } catch (e3) {
       }
-      const result = new SplayTreeSetNode(node.key);
-      copyChildren(node, result);
-      return result;
-    }
-    toSet() {
-      return this.clone();
-    }
-    entries() {
-      return new SplayTreeSetEntryIterableIterator(this.wrap());
-    }
-    keys() {
-      return this[Symbol.iterator]();
     }
-    values() {
-      return this[Symbol.iterator]();
+    return "";
+  }
+  var toSource_default = toSource;
+
+  // node_modules/lodash-es/_baseIsNative.js
+  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+  var reIsHostCtor = /^\[object .+?Constructor\]$/;
+  var funcProto2 = Function.prototype;
+  var objectProto3 = Object.prototype;
+  var funcToString2 = funcProto2.toString;
+  var hasOwnProperty2 = objectProto3.hasOwnProperty;
+  var reIsNative = RegExp(
+    "^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
+  );
+  function baseIsNative(value) {
+    if (!isObject_default(value) || isMasked_default(value)) {
+      return false;
     }
-    [(_b2 = Symbol.iterator, _a2 = Symbol.toStringTag, _b2)]() {
-      return new SplayTreeKeyIterableIterator(this.wrap());
+    var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor;
+    return pattern.test(toSource_default(value));
+  }
+  var baseIsNative_default = baseIsNative;
+
+  // node_modules/lodash-es/_getValue.js
+  function getValue(object, key) {
+    return object == null ? void 0 : object[key];
+  }
+  var getValue_default = getValue;
+
+  // node_modules/lodash-es/_getNative.js
+  function getNative(object, key) {
+    var value = getValue_default(object, key);
+    return baseIsNative_default(value) ? value : void 0;
+  }
+  var getNative_default = getNative;
+
+  // node_modules/lodash-es/_WeakMap.js
+  var WeakMap = getNative_default(root_default, "WeakMap");
+  var WeakMap_default = WeakMap;
+
+  // node_modules/lodash-es/_isIndex.js
+  var MAX_SAFE_INTEGER = 9007199254740991;
+  var reIsUint = /^(?:0|[1-9]\d*)$/;
+  function isIndex(value, length2) {
+    var type2 = typeof value;
+    length2 = length2 == null ? MAX_SAFE_INTEGER : length2;
+    return !!length2 && (type2 == "number" || type2 != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2);
+  }
+  var isIndex_default = isIndex;
+
+  // node_modules/lodash-es/eq.js
+  function eq(value, other2) {
+    return value === other2 || value !== value && other2 !== other2;
+  }
+  var eq_default = eq;
+
+  // node_modules/lodash-es/isLength.js
+  var MAX_SAFE_INTEGER2 = 9007199254740991;
+  function isLength(value) {
+    return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;
+  }
+  var isLength_default = isLength;
+
+  // node_modules/lodash-es/isArrayLike.js
+  function isArrayLike(value) {
+    return value != null && isLength_default(value.length) && !isFunction_default(value);
+  }
+  var isArrayLike_default = isArrayLike;
+
+  // node_modules/lodash-es/_isPrototype.js
+  var objectProto4 = Object.prototype;
+  function isPrototype(value) {
+    var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto4;
+    return value === proto;
+  }
+  var isPrototype_default = isPrototype;
+
+  // node_modules/lodash-es/_baseTimes.js
+  function baseTimes(n3, iteratee) {
+    var index = -1, result = Array(n3);
+    while (++index < n3) {
+      result[index] = iteratee(index);
     }
+    return result;
+  }
+  var baseTimes_default = baseTimes;
+
+  // node_modules/lodash-es/_baseIsArguments.js
+  var argsTag = "[object Arguments]";
+  function baseIsArguments(value) {
+    return isObjectLike_default(value) && baseGetTag_default(value) == argsTag;
+  }
+  var baseIsArguments_default = baseIsArguments;
+
+  // node_modules/lodash-es/isArguments.js
+  var objectProto5 = Object.prototype;
+  var hasOwnProperty3 = objectProto5.hasOwnProperty;
+  var propertyIsEnumerable = objectProto5.propertyIsEnumerable;
+  var isArguments = baseIsArguments_default(/* @__PURE__ */ function() {
+    return arguments;
+  }()) ? baseIsArguments_default : function(value) {
+    return isObjectLike_default(value) && hasOwnProperty3.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
   };
-  var SplayTreeIterableIterator = class {
-    constructor(tree) {
-      __publicField(this, "tree");
-      __publicField(this, "path", new Array());
-      __publicField(this, "modificationCount", null);
-      __publicField(this, "splayCount");
-      this.tree = tree;
-      this.splayCount = tree.getSplayCount();
-    }
-    [Symbol.iterator]() {
-      return this;
-    }
-    next() {
-      if (this.moveNext())
-        return { done: false, value: this.current() };
-      return { done: true, value: null };
+  var isArguments_default = isArguments;
+
+  // node_modules/lodash-es/stubFalse.js
+  function stubFalse() {
+    return false;
+  }
+  var stubFalse_default = stubFalse;
+
+  // node_modules/lodash-es/isBuffer.js
+  var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
+  var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
+  var moduleExports = freeModule && freeModule.exports === freeExports;
+  var Buffer2 = moduleExports ? root_default.Buffer : void 0;
+  var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
+  var isBuffer = nativeIsBuffer || stubFalse_default;
+  var isBuffer_default = isBuffer;
+
+  // node_modules/lodash-es/_baseIsTypedArray.js
+  var argsTag2 = "[object Arguments]";
+  var arrayTag = "[object Array]";
+  var boolTag = "[object Boolean]";
+  var dateTag = "[object Date]";
+  var errorTag = "[object Error]";
+  var funcTag2 = "[object Function]";
+  var mapTag = "[object Map]";
+  var numberTag = "[object Number]";
+  var objectTag = "[object Object]";
+  var regexpTag = "[object RegExp]";
+  var setTag = "[object Set]";
+  var stringTag = "[object String]";
+  var weakMapTag = "[object WeakMap]";
+  var arrayBufferTag = "[object ArrayBuffer]";
+  var dataViewTag = "[object DataView]";
+  var float32Tag = "[object Float32Array]";
+  var float64Tag = "[object Float64Array]";
+  var int8Tag = "[object Int8Array]";
+  var int16Tag = "[object Int16Array]";
+  var int32Tag = "[object Int32Array]";
+  var uint8Tag = "[object Uint8Array]";
+  var uint8ClampedTag = "[object Uint8ClampedArray]";
+  var uint16Tag = "[object Uint16Array]";
+  var uint32Tag = "[object Uint32Array]";
+  var typedArrayTags = {};
+  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
+  typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+  function baseIsTypedArray(value) {
+    return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)];
+  }
+  var baseIsTypedArray_default = baseIsTypedArray;
+
+  // node_modules/lodash-es/_baseUnary.js
+  function baseUnary(func) {
+    return function(value) {
+      return func(value);
+    };
+  }
+  var baseUnary_default = baseUnary;
+
+  // node_modules/lodash-es/_nodeUtil.js
+  var freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports;
+  var freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module;
+  var moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;
+  var freeProcess = moduleExports2 && freeGlobal_default.process;
+  var nodeUtil = function() {
+    try {
+      var types = freeModule2 && freeModule2.require && freeModule2.require("util").types;
+      if (types) {
+        return types;
+      }
+      return freeProcess && freeProcess.binding && freeProcess.binding("util");
+    } catch (e3) {
     }
-    current() {
-      if (!this.path.length)
-        return null;
-      const node = this.path[this.path.length - 1];
-      return this.getValue(node);
+  }();
+  var nodeUtil_default = nodeUtil;
+
+  // node_modules/lodash-es/isTypedArray.js
+  var nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray;
+  var isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default;
+  var isTypedArray_default = isTypedArray;
+
+  // node_modules/lodash-es/_arrayLikeKeys.js
+  var objectProto6 = Object.prototype;
+  var hasOwnProperty4 = objectProto6.hasOwnProperty;
+  function arrayLikeKeys(value, inherited) {
+    var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length2 = result.length;
+    for (var key in value) {
+      if ((inherited || hasOwnProperty4.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
+      (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
+      isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
+      isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
+      isIndex_default(key, length2)))) {
+        result.push(key);
+      }
     }
-    rebuildPath(key) {
-      this.path.splice(0, this.path.length);
-      this.tree.splay(key);
-      this.path.push(this.tree.getRoot());
-      this.splayCount = this.tree.getSplayCount();
+    return result;
+  }
+  var arrayLikeKeys_default = arrayLikeKeys;
+
+  // node_modules/lodash-es/_overArg.js
+  function overArg(func, transform2) {
+    return function(arg) {
+      return func(transform2(arg));
+    };
+  }
+  var overArg_default = overArg;
+
+  // node_modules/lodash-es/_nativeKeys.js
+  var nativeKeys = overArg_default(Object.keys, Object);
+  var nativeKeys_default = nativeKeys;
+
+  // node_modules/lodash-es/_baseKeys.js
+  var objectProto7 = Object.prototype;
+  var hasOwnProperty5 = objectProto7.hasOwnProperty;
+  function baseKeys(object) {
+    if (!isPrototype_default(object)) {
+      return nativeKeys_default(object);
     }
-    findLeftMostDescendent(node) {
-      while (node != null) {
-        this.path.push(node);
-        node = node.left;
+    var result = [];
+    for (var key in Object(object)) {
+      if (hasOwnProperty5.call(object, key) && key != "constructor") {
+        result.push(key);
       }
     }
-    moveNext() {
-      if (this.modificationCount != this.tree.getModificationCount()) {
-        if (this.modificationCount == null) {
-          this.modificationCount = this.tree.getModificationCount();
-          let node2 = this.tree.getRoot();
-          while (node2 != null) {
-            this.path.push(node2);
-            node2 = node2.left;
-          }
-          return this.path.length > 0;
-        }
-        throw "Concurrent modification during iteration.";
-      }
-      if (!this.path.length)
-        return false;
-      if (this.splayCount != this.tree.getSplayCount()) {
-        this.rebuildPath(this.path[this.path.length - 1].key);
-      }
-      let node = this.path[this.path.length - 1];
-      let next = node.right;
-      if (next != null) {
-        while (next != null) {
-          this.path.push(next);
-          next = next.left;
-        }
-        return true;
-      }
-      this.path.pop();
-      while (this.path.length && this.path[this.path.length - 1].right === node) {
-        node = this.path.pop();
-      }
-      return this.path.length > 0;
+    return result;
+  }
+  var baseKeys_default = baseKeys;
+
+  // node_modules/lodash-es/keys.js
+  function keys(object) {
+    return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object);
+  }
+  var keys_default = keys;
+
+  // node_modules/lodash-es/_nativeCreate.js
+  var nativeCreate = getNative_default(Object, "create");
+  var nativeCreate_default = nativeCreate;
+
+  // node_modules/lodash-es/_hashClear.js
+  function hashClear() {
+    this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {};
+    this.size = 0;
+  }
+  var hashClear_default = hashClear;
+
+  // node_modules/lodash-es/_hashDelete.js
+  function hashDelete(key) {
+    var result = this.has(key) && delete this.__data__[key];
+    this.size -= result ? 1 : 0;
+    return result;
+  }
+  var hashDelete_default = hashDelete;
+
+  // node_modules/lodash-es/_hashGet.js
+  var HASH_UNDEFINED = "__lodash_hash_undefined__";
+  var objectProto8 = Object.prototype;
+  var hasOwnProperty6 = objectProto8.hasOwnProperty;
+  function hashGet(key) {
+    var data = this.__data__;
+    if (nativeCreate_default) {
+      var result = data[key];
+      return result === HASH_UNDEFINED ? void 0 : result;
     }
-  };
-  var SplayTreeKeyIterableIterator = class extends SplayTreeIterableIterator {
-    getValue(node) {
-      return node.key;
+    return hasOwnProperty6.call(data, key) ? data[key] : void 0;
+  }
+  var hashGet_default = hashGet;
+
+  // node_modules/lodash-es/_hashHas.js
+  var objectProto9 = Object.prototype;
+  var hasOwnProperty7 = objectProto9.hasOwnProperty;
+  function hashHas(key) {
+    var data = this.__data__;
+    return nativeCreate_default ? data[key] !== void 0 : hasOwnProperty7.call(data, key);
+  }
+  var hashHas_default = hashHas;
+
+  // node_modules/lodash-es/_hashSet.js
+  var HASH_UNDEFINED2 = "__lodash_hash_undefined__";
+  function hashSet(key, value) {
+    var data = this.__data__;
+    this.size += this.has(key) ? 0 : 1;
+    data[key] = nativeCreate_default && value === void 0 ? HASH_UNDEFINED2 : value;
+    return this;
+  }
+  var hashSet_default = hashSet;
+
+  // node_modules/lodash-es/_Hash.js
+  function Hash(entries) {
+    var index = -1, length2 = entries == null ? 0 : entries.length;
+    this.clear();
+    while (++index < length2) {
+      var entry = entries[index];
+      this.set(entry[0], entry[1]);
     }
-  };
-  var SplayTreeSetEntryIterableIterator = class extends SplayTreeIterableIterator {
-    getValue(node) {
-      return [node.key, node.key];
+  }
+  Hash.prototype.clear = hashClear_default;
+  Hash.prototype["delete"] = hashDelete_default;
+  Hash.prototype.get = hashGet_default;
+  Hash.prototype.has = hashHas_default;
+  Hash.prototype.set = hashSet_default;
+  var Hash_default = Hash;
+
+  // node_modules/lodash-es/_listCacheClear.js
+  function listCacheClear() {
+    this.__data__ = [];
+    this.size = 0;
+  }
+  var listCacheClear_default = listCacheClear;
+
+  // node_modules/lodash-es/_assocIndexOf.js
+  function assocIndexOf(array2, key) {
+    var length2 = array2.length;
+    while (length2--) {
+      if (eq_default(array2[length2][0], key)) {
+        return length2;
+      }
     }
-  };
-  var SplayTreeValueIterableIterator = class extends SplayTreeIterableIterator {
-    constructor(map2) {
-      super(map2);
+    return -1;
+  }
+  var assocIndexOf_default = assocIndexOf;
+
+  // node_modules/lodash-es/_listCacheDelete.js
+  var arrayProto = Array.prototype;
+  var splice = arrayProto.splice;
+  function listCacheDelete(key) {
+    var data = this.__data__, index = assocIndexOf_default(data, key);
+    if (index < 0) {
+      return false;
     }
-    getValue(node) {
-      return node.value;
+    var lastIndex = data.length - 1;
+    if (index == lastIndex) {
+      data.pop();
+    } else {
+      splice.call(data, index, 1);
     }
-  };
-  var SplayTreeMapEntryIterableIterator = class extends SplayTreeIterableIterator {
-    constructor(map2) {
-      super(map2);
+    --this.size;
+    return true;
+  }
+  var listCacheDelete_default = listCacheDelete;
+
+  // node_modules/lodash-es/_listCacheGet.js
+  function listCacheGet(key) {
+    var data = this.__data__, index = assocIndexOf_default(data, key);
+    return index < 0 ? void 0 : data[index][1];
+  }
+  var listCacheGet_default = listCacheGet;
+
+  // node_modules/lodash-es/_listCacheHas.js
+  function listCacheHas(key) {
+    return assocIndexOf_default(this.__data__, key) > -1;
+  }
+  var listCacheHas_default = listCacheHas;
+
+  // node_modules/lodash-es/_listCacheSet.js
+  function listCacheSet(key, value) {
+    var data = this.__data__, index = assocIndexOf_default(data, key);
+    if (index < 0) {
+      ++this.size;
+      data.push([key, value]);
+    } else {
+      data[index][1] = value;
     }
-    getValue(node) {
-      return [node.key, node.value];
+    return this;
+  }
+  var listCacheSet_default = listCacheSet;
+
+  // node_modules/lodash-es/_ListCache.js
+  function ListCache(entries) {
+    var index = -1, length2 = entries == null ? 0 : entries.length;
+    this.clear();
+    while (++index < length2) {
+      var entry = entries[index];
+      this.set(entry[0], entry[1]);
     }
-    replaceValue(value) {
-      if (this.modificationCount != this.tree.getModificationCount()) {
-        throw "Concurrent modification during iteration.";
-      }
-      if (this.splayCount != this.tree.getSplayCount()) {
-        this.rebuildPath(this.path[this.path.length - 1].key);
-      }
-      const last = this.path.pop();
-      const newLast = last.replaceValue(value);
-      if (!this.path.length) {
-        this.tree.setRoot(newLast);
-      } else {
-        const parent = this.path[this.path.length - 1];
-        if (last === parent.left) {
-          parent.left = newLast;
-        } else {
-          parent.right = newLast;
-        }
-      }
-      this.path.push(newLast);
-      const count = this.tree.getSplayCount() + 1;
-      this.tree.setSplayCount(count);
-      this.splayCount = count;
+  }
+  ListCache.prototype.clear = listCacheClear_default;
+  ListCache.prototype["delete"] = listCacheDelete_default;
+  ListCache.prototype.get = listCacheGet_default;
+  ListCache.prototype.has = listCacheHas_default;
+  ListCache.prototype.set = listCacheSet_default;
+  var ListCache_default = ListCache;
+
+  // node_modules/lodash-es/_Map.js
+  var Map2 = getNative_default(root_default, "Map");
+  var Map_default = Map2;
+
+  // node_modules/lodash-es/_mapCacheClear.js
+  function mapCacheClear() {
+    this.size = 0;
+    this.__data__ = {
+      "hash": new Hash_default(),
+      "map": new (Map_default || ListCache_default)(),
+      "string": new Hash_default()
+    };
+  }
+  var mapCacheClear_default = mapCacheClear;
+
+  // node_modules/lodash-es/_isKeyable.js
+  function isKeyable(value) {
+    var type2 = typeof value;
+    return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value !== "__proto__" : value === null;
+  }
+  var isKeyable_default = isKeyable;
+
+  // node_modules/lodash-es/_getMapData.js
+  function getMapData(map2, key) {
+    var data = map2.__data__;
+    return isKeyable_default(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
+  }
+  var getMapData_default = getMapData;
+
+  // node_modules/lodash-es/_mapCacheDelete.js
+  function mapCacheDelete(key) {
+    var result = getMapData_default(this, key)["delete"](key);
+    this.size -= result ? 1 : 0;
+    return result;
+  }
+  var mapCacheDelete_default = mapCacheDelete;
+
+  // node_modules/lodash-es/_mapCacheGet.js
+  function mapCacheGet(key) {
+    return getMapData_default(this, key).get(key);
+  }
+  var mapCacheGet_default = mapCacheGet;
+
+  // node_modules/lodash-es/_mapCacheHas.js
+  function mapCacheHas(key) {
+    return getMapData_default(this, key).has(key);
+  }
+  var mapCacheHas_default = mapCacheHas;
+
+  // node_modules/lodash-es/_mapCacheSet.js
+  function mapCacheSet(key, value) {
+    var data = getMapData_default(this, key), size = data.size;
+    data.set(key, value);
+    this.size += data.size == size ? 0 : 1;
+    return this;
+  }
+  var mapCacheSet_default = mapCacheSet;
+
+  // node_modules/lodash-es/_MapCache.js
+  function MapCache(entries) {
+    var index = -1, length2 = entries == null ? 0 : entries.length;
+    this.clear();
+    while (++index < length2) {
+      var entry = entries[index];
+      this.set(entry[0], entry[1]);
     }
-  };
+  }
+  MapCache.prototype.clear = mapCacheClear_default;
+  MapCache.prototype["delete"] = mapCacheDelete_default;
+  MapCache.prototype.get = mapCacheGet_default;
+  MapCache.prototype.has = mapCacheHas_default;
+  MapCache.prototype.set = mapCacheSet_default;
+  var MapCache_default = MapCache;
 
-  // node_modules/polyclip-ts/dist/identity.js
-  var identity_default3 = (x2) => {
-    return x2;
-  };
+  // node_modules/lodash-es/toString.js
+  function toString(value) {
+    return value == null ? "" : baseToString_default(value);
+  }
+  var toString_default = toString;
 
-  // node_modules/polyclip-ts/dist/snap.js
-  var snap_default = (eps) => {
-    if (eps) {
-      const xTree = new SplayTreeSet(compare_default(eps));
-      const yTree = new SplayTreeSet(compare_default(eps));
-      const snapCoord = (coord2, tree) => {
-        return tree.addAndReturn(coord2);
-      };
-      const snap = (v2) => {
-        return {
-          x: snapCoord(v2.x, xTree),
-          y: snapCoord(v2.y, yTree)
-        };
-      };
-      snap({ x: new bignumber_default(0), y: new bignumber_default(0) });
-      return snap;
+  // node_modules/lodash-es/_arrayPush.js
+  function arrayPush(array2, values) {
+    var index = -1, length2 = values.length, offset = array2.length;
+    while (++index < length2) {
+      array2[offset + index] = values[index];
     }
-    return identity_default3;
-  };
+    return array2;
+  }
+  var arrayPush_default = arrayPush;
 
-  // node_modules/polyclip-ts/dist/precision.js
-  var set3 = (eps) => {
-    return {
-      set: (eps2) => {
-        precision = set3(eps2);
-      },
-      reset: () => set3(eps),
-      compare: compare_default(eps),
-      snap: snap_default(eps),
-      orient: orient_default(eps)
+  // node_modules/lodash-es/_basePropertyOf.js
+  function basePropertyOf(object) {
+    return function(key) {
+      return object == null ? void 0 : object[key];
     };
-  };
-  var precision = set3();
+  }
+  var basePropertyOf_default = basePropertyOf;
 
-  // node_modules/polyclip-ts/dist/bbox.js
-  var isInBbox = (bbox2, point) => {
-    return bbox2.ll.x.isLessThanOrEqualTo(point.x) && point.x.isLessThanOrEqualTo(bbox2.ur.x) && bbox2.ll.y.isLessThanOrEqualTo(point.y) && point.y.isLessThanOrEqualTo(bbox2.ur.y);
-  };
-  var getBboxOverlap = (b1, b2) => {
-    if (b2.ur.x.isLessThan(b1.ll.x) || b1.ur.x.isLessThan(b2.ll.x) || b2.ur.y.isLessThan(b1.ll.y) || b1.ur.y.isLessThan(b2.ll.y))
-      return null;
-    const lowerX = b1.ll.x.isLessThan(b2.ll.x) ? b2.ll.x : b1.ll.x;
-    const upperX = b1.ur.x.isLessThan(b2.ur.x) ? b1.ur.x : b2.ur.x;
-    const lowerY = b1.ll.y.isLessThan(b2.ll.y) ? b2.ll.y : b1.ll.y;
-    const upperY = b1.ur.y.isLessThan(b2.ur.y) ? b1.ur.y : b2.ur.y;
-    return { ll: { x: lowerX, y: lowerY }, ur: { x: upperX, y: upperY } };
-  };
+  // node_modules/lodash-es/_stackClear.js
+  function stackClear() {
+    this.__data__ = new ListCache_default();
+    this.size = 0;
+  }
+  var stackClear_default = stackClear;
 
-  // node_modules/polyclip-ts/dist/vector.js
-  var crossProduct = (a2, b2) => a2.x.times(b2.y).minus(a2.y.times(b2.x));
-  var dotProduct = (a2, b2) => a2.x.times(b2.x).plus(a2.y.times(b2.y));
-  var length = (v2) => dotProduct(v2, v2).sqrt();
-  var sineOfAngle = (pShared, pBase, pAngle) => {
-    const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) };
-    const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) };
-    return crossProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase));
-  };
-  var cosineOfAngle = (pShared, pBase, pAngle) => {
-    const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) };
-    const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) };
-    return dotProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase));
-  };
-  var horizontalIntersection = (pt2, v2, y2) => {
-    if (v2.y.isZero())
-      return null;
-    return { x: pt2.x.plus(v2.x.div(v2.y).times(y2.minus(pt2.y))), y: y2 };
-  };
-  var verticalIntersection = (pt2, v2, x2) => {
-    if (v2.x.isZero())
-      return null;
-    return { x: x2, y: pt2.y.plus(v2.y.div(v2.x).times(x2.minus(pt2.x))) };
-  };
-  var intersection = (pt1, v1, pt2, v2) => {
-    if (v1.x.isZero())
-      return verticalIntersection(pt2, v2, pt1.x);
-    if (v2.x.isZero())
-      return verticalIntersection(pt1, v1, pt2.x);
-    if (v1.y.isZero())
-      return horizontalIntersection(pt2, v2, pt1.y);
-    if (v2.y.isZero())
-      return horizontalIntersection(pt1, v1, pt2.y);
-    const kross = crossProduct(v1, v2);
-    if (kross.isZero())
-      return null;
-    const ve2 = { x: pt2.x.minus(pt1.x), y: pt2.y.minus(pt1.y) };
-    const d1 = crossProduct(ve2, v1).div(kross);
-    const d2 = crossProduct(ve2, v2).div(kross);
-    const x12 = pt1.x.plus(d2.times(v1.x)), x2 = pt2.x.plus(d1.times(v2.x));
-    const y12 = pt1.y.plus(d2.times(v1.y)), y2 = pt2.y.plus(d1.times(v2.y));
-    const x3 = x12.plus(x2).div(2);
-    const y3 = y12.plus(y2).div(2);
-    return { x: x3, y: y3 };
-  };
+  // node_modules/lodash-es/_stackDelete.js
+  function stackDelete(key) {
+    var data = this.__data__, result = data["delete"](key);
+    this.size = data.size;
+    return result;
+  }
+  var stackDelete_default = stackDelete;
 
-  // node_modules/polyclip-ts/dist/sweep-event.js
-  var SweepEvent = class _SweepEvent {
-    // Warning: 'point' input will be modified and re-used (for performance)
-    constructor(point, isLeft) {
-      __publicField(this, "point");
-      __publicField(this, "isLeft");
-      __publicField(this, "segment");
-      __publicField(this, "otherSE");
-      __publicField(this, "consumedBy");
-      if (point.events === void 0)
-        point.events = [this];
-      else
-        point.events.push(this);
-      this.point = point;
-      this.isLeft = isLeft;
-    }
-    // for ordering sweep events in the sweep event queue
-    static compare(a2, b2) {
-      const ptCmp = _SweepEvent.comparePoints(a2.point, b2.point);
-      if (ptCmp !== 0)
-        return ptCmp;
-      if (a2.point !== b2.point)
-        a2.link(b2);
-      if (a2.isLeft !== b2.isLeft)
-        return a2.isLeft ? 1 : -1;
-      return Segment.compare(a2.segment, b2.segment);
-    }
-    // for ordering points in sweep line order
-    static comparePoints(aPt, bPt) {
-      if (aPt.x.isLessThan(bPt.x))
-        return -1;
-      if (aPt.x.isGreaterThan(bPt.x))
-        return 1;
-      if (aPt.y.isLessThan(bPt.y))
-        return -1;
-      if (aPt.y.isGreaterThan(bPt.y))
-        return 1;
-      return 0;
-    }
-    link(other) {
-      if (other.point === this.point) {
-        throw new Error("Tried to link already linked events");
-      }
-      const otherEvents = other.point.events;
-      for (let i3 = 0, iMax = otherEvents.length; i3 < iMax; i3++) {
-        const evt = otherEvents[i3];
-        this.point.events.push(evt);
-        evt.point = this.point;
-      }
-      this.checkForConsuming();
-    }
-    /* Do a pass over our linked events and check to see if any pair
-     * of segments match, and should be consumed. */
-    checkForConsuming() {
-      const numEvents = this.point.events.length;
-      for (let i3 = 0; i3 < numEvents; i3++) {
-        const evt1 = this.point.events[i3];
-        if (evt1.segment.consumedBy !== void 0)
-          continue;
-        for (let j2 = i3 + 1; j2 < numEvents; j2++) {
-          const evt2 = this.point.events[j2];
-          if (evt2.consumedBy !== void 0)
-            continue;
-          if (evt1.otherSE.point.events !== evt2.otherSE.point.events)
-            continue;
-          evt1.segment.consume(evt2.segment);
-        }
+  // node_modules/lodash-es/_stackGet.js
+  function stackGet(key) {
+    return this.__data__.get(key);
+  }
+  var stackGet_default = stackGet;
+
+  // node_modules/lodash-es/_stackHas.js
+  function stackHas(key) {
+    return this.__data__.has(key);
+  }
+  var stackHas_default = stackHas;
+
+  // node_modules/lodash-es/_stackSet.js
+  var LARGE_ARRAY_SIZE = 200;
+  function stackSet(key, value) {
+    var data = this.__data__;
+    if (data instanceof ListCache_default) {
+      var pairs2 = data.__data__;
+      if (!Map_default || pairs2.length < LARGE_ARRAY_SIZE - 1) {
+        pairs2.push([key, value]);
+        this.size = ++data.size;
+        return this;
       }
+      data = this.__data__ = new MapCache_default(pairs2);
     }
-    getAvailableLinkedEvents() {
-      const events = [];
-      for (let i3 = 0, iMax = this.point.events.length; i3 < iMax; i3++) {
-        const evt = this.point.events[i3];
-        if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {
-          events.push(evt);
-        }
+    data.set(key, value);
+    this.size = data.size;
+    return this;
+  }
+  var stackSet_default = stackSet;
+
+  // node_modules/lodash-es/_Stack.js
+  function Stack(entries) {
+    var data = this.__data__ = new ListCache_default(entries);
+    this.size = data.size;
+  }
+  Stack.prototype.clear = stackClear_default;
+  Stack.prototype["delete"] = stackDelete_default;
+  Stack.prototype.get = stackGet_default;
+  Stack.prototype.has = stackHas_default;
+  Stack.prototype.set = stackSet_default;
+  var Stack_default = Stack;
+
+  // node_modules/lodash-es/_arrayFilter.js
+  function arrayFilter(array2, predicate) {
+    var index = -1, length2 = array2 == null ? 0 : array2.length, resIndex = 0, result = [];
+    while (++index < length2) {
+      var value = array2[index];
+      if (predicate(value, index, array2)) {
+        result[resIndex++] = value;
       }
-      return events;
     }
-    /**
-     * Returns a comparator function for sorting linked events that will
-     * favor the event that will give us the smallest left-side angle.
-     * All ring construction starts as low as possible heading to the right,
-     * so by always turning left as sharp as possible we'll get polygons
-     * without uncessary loops & holes.
-     *
-     * The comparator function has a compute cache such that it avoids
-     * re-computing already-computed values.
-     */
-    getLeftmostComparator(baseEvent) {
-      const cache = /* @__PURE__ */ new Map();
-      const fillCache = (linkedEvent) => {
-        const nextEvent = linkedEvent.otherSE;
-        cache.set(linkedEvent, {
-          sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),
-          cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point)
-        });
-      };
-      return (a2, b2) => {
-        if (!cache.has(a2))
-          fillCache(a2);
-        if (!cache.has(b2))
-          fillCache(b2);
-        const { sine: asine, cosine: acosine } = cache.get(a2);
-        const { sine: bsine, cosine: bcosine } = cache.get(b2);
-        if (asine.isGreaterThanOrEqualTo(0) && bsine.isGreaterThanOrEqualTo(0)) {
-          if (acosine.isLessThan(bcosine))
-            return 1;
-          if (acosine.isGreaterThan(bcosine))
-            return -1;
-          return 0;
-        }
-        if (asine.isLessThan(0) && bsine.isLessThan(0)) {
-          if (acosine.isLessThan(bcosine))
-            return -1;
-          if (acosine.isGreaterThan(bcosine))
-            return 1;
-          return 0;
-        }
-        if (bsine.isLessThan(asine))
-          return -1;
-        if (bsine.isGreaterThan(asine))
-          return 1;
-        return 0;
-      };
+    return result;
+  }
+  var arrayFilter_default = arrayFilter;
+
+  // node_modules/lodash-es/stubArray.js
+  function stubArray() {
+    return [];
+  }
+  var stubArray_default = stubArray;
+
+  // node_modules/lodash-es/_getSymbols.js
+  var objectProto10 = Object.prototype;
+  var propertyIsEnumerable2 = objectProto10.propertyIsEnumerable;
+  var nativeGetSymbols = Object.getOwnPropertySymbols;
+  var getSymbols = !nativeGetSymbols ? stubArray_default : function(object) {
+    if (object == null) {
+      return [];
     }
+    object = Object(object);
+    return arrayFilter_default(nativeGetSymbols(object), function(symbol) {
+      return propertyIsEnumerable2.call(object, symbol);
+    });
   };
+  var getSymbols_default = getSymbols;
 
-  // node_modules/polyclip-ts/dist/segment.js
-  var segmentId = 0;
-  var Segment = class _Segment {
-    /* Warning: a reference to ringWindings input will be stored,
-     *  and possibly will be later modified */
-    constructor(leftSE, rightSE, rings, windings) {
-      __publicField(this, "id");
-      __publicField(this, "leftSE");
-      __publicField(this, "rightSE");
-      __publicField(this, "rings");
-      __publicField(this, "windings");
-      __publicField(this, "ringOut");
-      __publicField(this, "consumedBy");
-      __publicField(this, "prev");
-      __publicField(this, "_prevInResult");
-      __publicField(this, "_beforeState");
-      __publicField(this, "_afterState");
-      __publicField(this, "_isInResult");
-      this.id = ++segmentId;
-      this.leftSE = leftSE;
-      leftSE.segment = this;
-      leftSE.otherSE = rightSE;
-      this.rightSE = rightSE;
-      rightSE.segment = this;
-      rightSE.otherSE = leftSE;
-      this.rings = rings;
-      this.windings = windings;
-    }
-    /* This compare() function is for ordering segments in the sweep
-     * line tree, and does so according to the following criteria:
-     *
-     * Consider the vertical line that lies an infinestimal step to the
-     * right of the right-more of the two left endpoints of the input
-     * segments. Imagine slowly moving a point up from negative infinity
-     * in the increasing y direction. Which of the two segments will that
-     * point intersect first? That segment comes 'before' the other one.
-     *
-     * If neither segment would be intersected by such a line, (if one
-     * or more of the segments are vertical) then the line to be considered
-     * is directly on the right-more of the two left inputs.
-     */
-    static compare(a2, b2) {
-      const alx = a2.leftSE.point.x;
-      const blx = b2.leftSE.point.x;
-      const arx = a2.rightSE.point.x;
-      const brx = b2.rightSE.point.x;
-      if (brx.isLessThan(alx))
-        return 1;
-      if (arx.isLessThan(blx))
-        return -1;
-      const aly = a2.leftSE.point.y;
-      const bly = b2.leftSE.point.y;
-      const ary = a2.rightSE.point.y;
-      const bry = b2.rightSE.point.y;
-      if (alx.isLessThan(blx)) {
-        if (bly.isLessThan(aly) && bly.isLessThan(ary))
-          return 1;
-        if (bly.isGreaterThan(aly) && bly.isGreaterThan(ary))
-          return -1;
-        const aCmpBLeft = a2.comparePoint(b2.leftSE.point);
-        if (aCmpBLeft < 0)
-          return 1;
-        if (aCmpBLeft > 0)
-          return -1;
-        const bCmpARight = b2.comparePoint(a2.rightSE.point);
-        if (bCmpARight !== 0)
-          return bCmpARight;
-        return -1;
-      }
-      if (alx.isGreaterThan(blx)) {
-        if (aly.isLessThan(bly) && aly.isLessThan(bry))
-          return -1;
-        if (aly.isGreaterThan(bly) && aly.isGreaterThan(bry))
-          return 1;
-        const bCmpALeft = b2.comparePoint(a2.leftSE.point);
-        if (bCmpALeft !== 0)
-          return bCmpALeft;
-        const aCmpBRight = a2.comparePoint(b2.rightSE.point);
-        if (aCmpBRight < 0)
-          return 1;
-        if (aCmpBRight > 0)
-          return -1;
-        return 1;
-      }
-      if (aly.isLessThan(bly))
-        return -1;
-      if (aly.isGreaterThan(bly))
-        return 1;
-      if (arx.isLessThan(brx)) {
-        const bCmpARight = b2.comparePoint(a2.rightSE.point);
-        if (bCmpARight !== 0)
-          return bCmpARight;
-      }
-      if (arx.isGreaterThan(brx)) {
-        const aCmpBRight = a2.comparePoint(b2.rightSE.point);
-        if (aCmpBRight < 0)
-          return 1;
-        if (aCmpBRight > 0)
-          return -1;
-      }
-      if (!arx.eq(brx)) {
-        const ay = ary.minus(aly);
-        const ax = arx.minus(alx);
-        const by = bry.minus(bly);
-        const bx = brx.minus(blx);
-        if (ay.isGreaterThan(ax) && by.isLessThan(bx))
-          return 1;
-        if (ay.isLessThan(ax) && by.isGreaterThan(bx))
-          return -1;
+  // node_modules/lodash-es/_baseGetAllKeys.js
+  function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+    var result = keysFunc(object);
+    return isArray_default(object) ? result : arrayPush_default(result, symbolsFunc(object));
+  }
+  var baseGetAllKeys_default = baseGetAllKeys;
+
+  // node_modules/lodash-es/_getAllKeys.js
+  function getAllKeys(object) {
+    return baseGetAllKeys_default(object, keys_default, getSymbols_default);
+  }
+  var getAllKeys_default = getAllKeys;
+
+  // node_modules/lodash-es/_DataView.js
+  var DataView2 = getNative_default(root_default, "DataView");
+  var DataView_default = DataView2;
+
+  // node_modules/lodash-es/_Promise.js
+  var Promise2 = getNative_default(root_default, "Promise");
+  var Promise_default = Promise2;
+
+  // node_modules/lodash-es/_Set.js
+  var Set2 = getNative_default(root_default, "Set");
+  var Set_default = Set2;
+
+  // node_modules/lodash-es/_getTag.js
+  var mapTag2 = "[object Map]";
+  var objectTag2 = "[object Object]";
+  var promiseTag = "[object Promise]";
+  var setTag2 = "[object Set]";
+  var weakMapTag2 = "[object WeakMap]";
+  var dataViewTag2 = "[object DataView]";
+  var dataViewCtorString = toSource_default(DataView_default);
+  var mapCtorString = toSource_default(Map_default);
+  var promiseCtorString = toSource_default(Promise_default);
+  var setCtorString = toSource_default(Set_default);
+  var weakMapCtorString = toSource_default(WeakMap_default);
+  var getTag = baseGetTag_default;
+  if (DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag2 || Map_default && getTag(new Map_default()) != mapTag2 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag2 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) {
+    getTag = function(value) {
+      var result = baseGetTag_default(value), Ctor = result == objectTag2 ? value.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : "";
+      if (ctorString) {
+        switch (ctorString) {
+          case dataViewCtorString:
+            return dataViewTag2;
+          case mapCtorString:
+            return mapTag2;
+          case promiseCtorString:
+            return promiseTag;
+          case setCtorString:
+            return setTag2;
+          case weakMapCtorString:
+            return weakMapTag2;
+        }
       }
-      if (arx.isGreaterThan(brx))
-        return 1;
-      if (arx.isLessThan(brx))
-        return -1;
-      if (ary.isLessThan(bry))
-        return -1;
-      if (ary.isGreaterThan(bry))
-        return 1;
-      if (a2.id < b2.id)
-        return -1;
-      if (a2.id > b2.id)
-        return 1;
-      return 0;
-    }
-    static fromRing(pt1, pt2, ring) {
-      let leftPt, rightPt, winding;
-      const cmpPts = SweepEvent.comparePoints(pt1, pt2);
-      if (cmpPts < 0) {
-        leftPt = pt1;
-        rightPt = pt2;
-        winding = 1;
-      } else if (cmpPts > 0) {
-        leftPt = pt2;
-        rightPt = pt1;
-        winding = -1;
-      } else
-        throw new Error("Tried to create degenerate segment at [".concat(pt1.x, ", ").concat(pt1.y, "]"));
-      const leftSE = new SweepEvent(leftPt, true);
-      const rightSE = new SweepEvent(rightPt, false);
-      return new _Segment(leftSE, rightSE, [ring], [winding]);
-    }
-    /* When a segment is split, the rightSE is replaced with a new sweep event */
-    replaceRightSE(newRightSE) {
-      this.rightSE = newRightSE;
-      this.rightSE.segment = this;
-      this.rightSE.otherSE = this.leftSE;
-      this.leftSE.otherSE = this.rightSE;
-    }
-    bbox() {
-      const y12 = this.leftSE.point.y;
-      const y2 = this.rightSE.point.y;
-      return {
-        ll: { x: this.leftSE.point.x, y: y12.isLessThan(y2) ? y12 : y2 },
-        ur: { x: this.rightSE.point.x, y: y12.isGreaterThan(y2) ? y12 : y2 }
-      };
-    }
-    /* A vector from the left point to the right */
-    vector() {
-      return {
-        x: this.rightSE.point.x.minus(this.leftSE.point.x),
-        y: this.rightSE.point.y.minus(this.leftSE.point.y)
-      };
+      return result;
+    };
+  }
+  var getTag_default = getTag;
+
+  // node_modules/lodash-es/_Uint8Array.js
+  var Uint8Array2 = root_default.Uint8Array;
+  var Uint8Array_default = Uint8Array2;
+
+  // node_modules/lodash-es/_setCacheAdd.js
+  var HASH_UNDEFINED3 = "__lodash_hash_undefined__";
+  function setCacheAdd(value) {
+    this.__data__.set(value, HASH_UNDEFINED3);
+    return this;
+  }
+  var setCacheAdd_default = setCacheAdd;
+
+  // node_modules/lodash-es/_setCacheHas.js
+  function setCacheHas(value) {
+    return this.__data__.has(value);
+  }
+  var setCacheHas_default = setCacheHas;
+
+  // node_modules/lodash-es/_SetCache.js
+  function SetCache(values) {
+    var index = -1, length2 = values == null ? 0 : values.length;
+    this.__data__ = new MapCache_default();
+    while (++index < length2) {
+      this.add(values[index]);
     }
-    isAnEndpoint(pt2) {
-      return pt2.x.eq(this.leftSE.point.x) && pt2.y.eq(this.leftSE.point.y) || pt2.x.eq(this.rightSE.point.x) && pt2.y.eq(this.rightSE.point.y);
+  }
+  SetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default;
+  SetCache.prototype.has = setCacheHas_default;
+  var SetCache_default = SetCache;
+
+  // node_modules/lodash-es/_arraySome.js
+  function arraySome(array2, predicate) {
+    var index = -1, length2 = array2 == null ? 0 : array2.length;
+    while (++index < length2) {
+      if (predicate(array2[index], index, array2)) {
+        return true;
+      }
     }
-    /* Compare this segment with a point.
-     *
-     * A point P is considered to be colinear to a segment if there
-     * exists a distance D such that if we travel along the segment
-     * from one * endpoint towards the other a distance D, we find
-     * ourselves at point P.
-     *
-     * Return value indicates:
-     *
-     *   1: point lies above the segment (to the left of vertical)
-     *   0: point is colinear to segment
-     *  -1: point lies below the segment (to the right of vertical)
-     */
-    comparePoint(point) {
-      return precision.orient(this.leftSE.point, point, this.rightSE.point);
+    return false;
+  }
+  var arraySome_default = arraySome;
+
+  // node_modules/lodash-es/_cacheHas.js
+  function cacheHas(cache, key) {
+    return cache.has(key);
+  }
+  var cacheHas_default = cacheHas;
+
+  // node_modules/lodash-es/_equalArrays.js
+  var COMPARE_PARTIAL_FLAG = 1;
+  var COMPARE_UNORDERED_FLAG = 2;
+  function equalArrays(array2, other2, bitmask, customizer, equalFunc, stack) {
+    var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array2.length, othLength = other2.length;
+    if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+      return false;
     }
-    /**
-     * Given another segment, returns the first non-trivial intersection
-     * between the two segments (in terms of sweep line ordering), if it exists.
-     *
-     * A 'non-trivial' intersection is one that will cause one or both of the
-     * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:
-     *
-     *   * endpoint of segA with endpoint of segB --> trivial
-     *   * endpoint of segA with point along segB --> non-trivial
-     *   * endpoint of segB with point along segA --> non-trivial
-     *   * point along segA with point along segB --> non-trivial
-     *
-     * If no non-trivial intersection exists, return null
-     * Else, return null.
-     */
-    getIntersection(other) {
-      const tBbox = this.bbox();
-      const oBbox = other.bbox();
-      const bboxOverlap = getBboxOverlap(tBbox, oBbox);
-      if (bboxOverlap === null)
-        return null;
-      const tlp = this.leftSE.point;
-      const trp = this.rightSE.point;
-      const olp = other.leftSE.point;
-      const orp = other.rightSE.point;
-      const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;
-      const touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;
-      const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;
-      const touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0;
-      if (touchesThisLSE && touchesOtherLSE) {
-        if (touchesThisRSE && !touchesOtherRSE)
-          return trp;
-        if (!touchesThisRSE && touchesOtherRSE)
-          return orp;
-        return null;
+    var arrStacked = stack.get(array2);
+    var othStacked = stack.get(other2);
+    if (arrStacked && othStacked) {
+      return arrStacked == other2 && othStacked == array2;
+    }
+    var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0;
+    stack.set(array2, other2);
+    stack.set(other2, array2);
+    while (++index < arrLength) {
+      var arrValue = array2[index], othValue = other2[index];
+      if (customizer) {
+        var compared = isPartial ? customizer(othValue, arrValue, index, other2, array2, stack) : customizer(arrValue, othValue, index, array2, other2, stack);
       }
-      if (touchesThisLSE) {
-        if (touchesOtherRSE) {
-          if (tlp.x.eq(orp.x) && tlp.y.eq(orp.y))
-            return null;
+      if (compared !== void 0) {
+        if (compared) {
+          continue;
         }
-        return tlp;
+        result = false;
+        break;
       }
-      if (touchesOtherLSE) {
-        if (touchesThisRSE) {
-          if (trp.x.eq(olp.x) && trp.y.eq(olp.y))
-            return null;
+      if (seen) {
+        if (!arraySome_default(other2, function(othValue2, othIndex) {
+          if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
+            return seen.push(othIndex);
+          }
+        })) {
+          result = false;
+          break;
         }
-        return olp;
+      } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+        result = false;
+        break;
       }
-      if (touchesThisRSE && touchesOtherRSE)
-        return null;
-      if (touchesThisRSE)
-        return trp;
-      if (touchesOtherRSE)
-        return orp;
-      const pt2 = intersection(tlp, this.vector(), olp, other.vector());
-      if (pt2 === null)
-        return null;
-      if (!isInBbox(bboxOverlap, pt2))
-        return null;
-      return precision.snap(pt2);
     }
-    /**
-     * Split the given segment into multiple segments on the given points.
-     *  * Each existing segment will retain its leftSE and a new rightSE will be
-     *    generated for it.
-     *  * A new segment will be generated which will adopt the original segment's
-     *    rightSE, and a new leftSE will be generated for it.
-     *  * If there are more than two points given to split on, new segments
-     *    in the middle will be generated with new leftSE and rightSE's.
-     *  * An array of the newly generated SweepEvents will be returned.
-     *
-     * Warning: input array of points is modified
-     */
-    split(point) {
-      const newEvents = [];
-      const alreadyLinked = point.events !== void 0;
-      const newLeftSE = new SweepEvent(point, true);
-      const newRightSE = new SweepEvent(point, false);
-      const oldRightSE = this.rightSE;
-      this.replaceRightSE(newRightSE);
-      newEvents.push(newRightSE);
-      newEvents.push(newLeftSE);
-      const newSeg = new _Segment(newLeftSE, oldRightSE, this.rings.slice(), this.windings.slice());
-      if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {
-        newSeg.swapEvents();
+    stack["delete"](array2);
+    stack["delete"](other2);
+    return result;
+  }
+  var equalArrays_default = equalArrays;
+
+  // node_modules/lodash-es/_mapToArray.js
+  function mapToArray(map2) {
+    var index = -1, result = Array(map2.size);
+    map2.forEach(function(value, key) {
+      result[++index] = [key, value];
+    });
+    return result;
+  }
+  var mapToArray_default = mapToArray;
+
+  // node_modules/lodash-es/_setToArray.js
+  function setToArray(set4) {
+    var index = -1, result = Array(set4.size);
+    set4.forEach(function(value) {
+      result[++index] = value;
+    });
+    return result;
+  }
+  var setToArray_default = setToArray;
+
+  // node_modules/lodash-es/_equalByTag.js
+  var COMPARE_PARTIAL_FLAG2 = 1;
+  var COMPARE_UNORDERED_FLAG2 = 2;
+  var boolTag2 = "[object Boolean]";
+  var dateTag2 = "[object Date]";
+  var errorTag2 = "[object Error]";
+  var mapTag3 = "[object Map]";
+  var numberTag2 = "[object Number]";
+  var regexpTag2 = "[object RegExp]";
+  var setTag3 = "[object Set]";
+  var stringTag2 = "[object String]";
+  var symbolTag2 = "[object Symbol]";
+  var arrayBufferTag2 = "[object ArrayBuffer]";
+  var dataViewTag3 = "[object DataView]";
+  var symbolProto2 = Symbol_default ? Symbol_default.prototype : void 0;
+  var symbolValueOf = symbolProto2 ? symbolProto2.valueOf : void 0;
+  function equalByTag(object, other2, tag2, bitmask, customizer, equalFunc, stack) {
+    switch (tag2) {
+      case dataViewTag3:
+        if (object.byteLength != other2.byteLength || object.byteOffset != other2.byteOffset) {
+          return false;
+        }
+        object = object.buffer;
+        other2 = other2.buffer;
+      case arrayBufferTag2:
+        if (object.byteLength != other2.byteLength || !equalFunc(new Uint8Array_default(object), new Uint8Array_default(other2))) {
+          return false;
+        }
+        return true;
+      case boolTag2:
+      case dateTag2:
+      case numberTag2:
+        return eq_default(+object, +other2);
+      case errorTag2:
+        return object.name == other2.name && object.message == other2.message;
+      case regexpTag2:
+      case stringTag2:
+        return object == other2 + "";
+      case mapTag3:
+        var convert = mapToArray_default;
+      case setTag3:
+        var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;
+        convert || (convert = setToArray_default);
+        if (object.size != other2.size && !isPartial) {
+          return false;
+        }
+        var stacked = stack.get(object);
+        if (stacked) {
+          return stacked == other2;
+        }
+        bitmask |= COMPARE_UNORDERED_FLAG2;
+        stack.set(object, other2);
+        var result = equalArrays_default(convert(object), convert(other2), bitmask, customizer, equalFunc, stack);
+        stack["delete"](object);
+        return result;
+      case symbolTag2:
+        if (symbolValueOf) {
+          return symbolValueOf.call(object) == symbolValueOf.call(other2);
+        }
+    }
+    return false;
+  }
+  var equalByTag_default = equalByTag;
+
+  // node_modules/lodash-es/_equalObjects.js
+  var COMPARE_PARTIAL_FLAG3 = 1;
+  var objectProto11 = Object.prototype;
+  var hasOwnProperty8 = objectProto11.hasOwnProperty;
+  function equalObjects(object, other2, bitmask, customizer, equalFunc, stack) {
+    var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object), objLength = objProps.length, othProps = getAllKeys_default(other2), othLength = othProps.length;
+    if (objLength != othLength && !isPartial) {
+      return false;
+    }
+    var index = objLength;
+    while (index--) {
+      var key = objProps[index];
+      if (!(isPartial ? key in other2 : hasOwnProperty8.call(other2, key))) {
+        return false;
       }
-      if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {
-        this.swapEvents();
+    }
+    var objStacked = stack.get(object);
+    var othStacked = stack.get(other2);
+    if (objStacked && othStacked) {
+      return objStacked == other2 && othStacked == object;
+    }
+    var result = true;
+    stack.set(object, other2);
+    stack.set(other2, object);
+    var skipCtor = isPartial;
+    while (++index < objLength) {
+      key = objProps[index];
+      var objValue = object[key], othValue = other2[key];
+      if (customizer) {
+        var compared = isPartial ? customizer(othValue, objValue, key, other2, object, stack) : customizer(objValue, othValue, key, object, other2, stack);
       }
-      if (alreadyLinked) {
-        newLeftSE.checkForConsuming();
-        newRightSE.checkForConsuming();
+      if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
+        result = false;
+        break;
       }
-      return newEvents;
+      skipCtor || (skipCtor = key == "constructor");
     }
-    /* Swap which event is left and right */
-    swapEvents() {
-      const tmpEvt = this.rightSE;
-      this.rightSE = this.leftSE;
-      this.leftSE = tmpEvt;
-      this.leftSE.isLeft = true;
-      this.rightSE.isLeft = false;
-      for (let i3 = 0, iMax = this.windings.length; i3 < iMax; i3++) {
-        this.windings[i3] *= -1;
+    if (result && !skipCtor) {
+      var objCtor = object.constructor, othCtor = other2.constructor;
+      if (objCtor != othCtor && ("constructor" in object && "constructor" in other2) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
+        result = false;
       }
     }
-    /* Consume another segment. We take their rings under our wing
-     * and mark them as consumed. Use for perfectly overlapping segments */
-    consume(other) {
-      let consumer = this;
-      let consumee = other;
-      while (consumer.consumedBy)
-        consumer = consumer.consumedBy;
-      while (consumee.consumedBy)
-        consumee = consumee.consumedBy;
-      const cmp = _Segment.compare(consumer, consumee);
-      if (cmp === 0)
-        return;
-      if (cmp > 0) {
-        const tmp = consumer;
-        consumer = consumee;
-        consumee = tmp;
-      }
-      if (consumer.prev === consumee) {
-        const tmp = consumer;
-        consumer = consumee;
-        consumee = tmp;
-      }
-      for (let i3 = 0, iMax = consumee.rings.length; i3 < iMax; i3++) {
-        const ring = consumee.rings[i3];
-        const winding = consumee.windings[i3];
-        const index = consumer.rings.indexOf(ring);
-        if (index === -1) {
-          consumer.rings.push(ring);
-          consumer.windings.push(winding);
-        } else
-          consumer.windings[index] += winding;
+    stack["delete"](object);
+    stack["delete"](other2);
+    return result;
+  }
+  var equalObjects_default = equalObjects;
+
+  // node_modules/lodash-es/_baseIsEqualDeep.js
+  var COMPARE_PARTIAL_FLAG4 = 1;
+  var argsTag3 = "[object Arguments]";
+  var arrayTag2 = "[object Array]";
+  var objectTag3 = "[object Object]";
+  var objectProto12 = Object.prototype;
+  var hasOwnProperty9 = objectProto12.hasOwnProperty;
+  function baseIsEqualDeep(object, other2, bitmask, customizer, equalFunc, stack) {
+    var objIsArr = isArray_default(object), othIsArr = isArray_default(other2), objTag = objIsArr ? arrayTag2 : getTag_default(object), othTag = othIsArr ? arrayTag2 : getTag_default(other2);
+    objTag = objTag == argsTag3 ? objectTag3 : objTag;
+    othTag = othTag == argsTag3 ? objectTag3 : othTag;
+    var objIsObj = objTag == objectTag3, othIsObj = othTag == objectTag3, isSameTag = objTag == othTag;
+    if (isSameTag && isBuffer_default(object)) {
+      if (!isBuffer_default(other2)) {
+        return false;
       }
-      consumee.rings = null;
-      consumee.windings = null;
-      consumee.consumedBy = consumer;
-      consumee.leftSE.consumedBy = consumer.leftSE;
-      consumee.rightSE.consumedBy = consumer.rightSE;
+      objIsArr = true;
+      objIsObj = false;
     }
-    /* The first segment previous segment chain that is in the result */
-    prevInResult() {
-      if (this._prevInResult !== void 0)
-        return this._prevInResult;
-      if (!this.prev)
-        this._prevInResult = null;
-      else if (this.prev.isInResult())
-        this._prevInResult = this.prev;
-      else
-        this._prevInResult = this.prev.prevInResult();
-      return this._prevInResult;
+    if (isSameTag && !objIsObj) {
+      stack || (stack = new Stack_default());
+      return objIsArr || isTypedArray_default(object) ? equalArrays_default(object, other2, bitmask, customizer, equalFunc, stack) : equalByTag_default(object, other2, objTag, bitmask, customizer, equalFunc, stack);
     }
-    beforeState() {
-      if (this._beforeState !== void 0)
-        return this._beforeState;
-      if (!this.prev)
-        this._beforeState = {
-          rings: [],
-          windings: [],
-          multiPolys: []
-        };
-      else {
-        const seg = this.prev.consumedBy || this.prev;
-        this._beforeState = seg.afterState();
+    if (!(bitmask & COMPARE_PARTIAL_FLAG4)) {
+      var objIsWrapped = objIsObj && hasOwnProperty9.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty9.call(other2, "__wrapped__");
+      if (objIsWrapped || othIsWrapped) {
+        var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other2.value() : other2;
+        stack || (stack = new Stack_default());
+        return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
       }
-      return this._beforeState;
     }
-    afterState() {
-      if (this._afterState !== void 0)
-        return this._afterState;
-      const beforeState = this.beforeState();
-      this._afterState = {
-        rings: beforeState.rings.slice(0),
-        windings: beforeState.windings.slice(0),
-        multiPolys: []
-      };
-      const ringsAfter = this._afterState.rings;
-      const windingsAfter = this._afterState.windings;
-      const mpsAfter = this._afterState.multiPolys;
-      for (let i3 = 0, iMax = this.rings.length; i3 < iMax; i3++) {
-        const ring = this.rings[i3];
-        const winding = this.windings[i3];
-        const index = ringsAfter.indexOf(ring);
-        if (index === -1) {
-          ringsAfter.push(ring);
-          windingsAfter.push(winding);
-        } else
-          windingsAfter[index] += winding;
+    if (!isSameTag) {
+      return false;
+    }
+    stack || (stack = new Stack_default());
+    return equalObjects_default(object, other2, bitmask, customizer, equalFunc, stack);
+  }
+  var baseIsEqualDeep_default = baseIsEqualDeep;
+
+  // node_modules/lodash-es/_baseIsEqual.js
+  function baseIsEqual(value, other2, bitmask, customizer, stack) {
+    if (value === other2) {
+      return true;
+    }
+    if (value == null || other2 == null || !isObjectLike_default(value) && !isObjectLike_default(other2)) {
+      return value !== value && other2 !== other2;
+    }
+    return baseIsEqualDeep_default(value, other2, bitmask, customizer, baseIsEqual, stack);
+  }
+  var baseIsEqual_default = baseIsEqual;
+
+  // node_modules/lodash-es/now.js
+  var now2 = function() {
+    return root_default.Date.now();
+  };
+  var now_default = now2;
+
+  // node_modules/lodash-es/debounce.js
+  var FUNC_ERROR_TEXT = "Expected a function";
+  var nativeMax = Math.max;
+  var nativeMin = Math.min;
+  function debounce(func, wait, options2) {
+    var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
+    if (typeof func != "function") {
+      throw new TypeError(FUNC_ERROR_TEXT);
+    }
+    wait = toNumber_default(wait) || 0;
+    if (isObject_default(options2)) {
+      leading = !!options2.leading;
+      maxing = "maxWait" in options2;
+      maxWait = maxing ? nativeMax(toNumber_default(options2.maxWait) || 0, wait) : maxWait;
+      trailing = "trailing" in options2 ? !!options2.trailing : trailing;
+    }
+    function invokeFunc(time) {
+      var args = lastArgs, thisArg = lastThis;
+      lastArgs = lastThis = void 0;
+      lastInvokeTime = time;
+      result = func.apply(thisArg, args);
+      return result;
+    }
+    function leadingEdge(time) {
+      lastInvokeTime = time;
+      timerId = setTimeout(timerExpired, wait);
+      return leading ? invokeFunc(time) : result;
+    }
+    function remainingWait(time) {
+      var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
+      return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
+    }
+    function shouldInvoke(time) {
+      var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
+      return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
+    }
+    function timerExpired() {
+      var time = now_default();
+      if (shouldInvoke(time)) {
+        return trailingEdge(time);
       }
-      const polysAfter = [];
-      const polysExclude = [];
-      for (let i3 = 0, iMax = ringsAfter.length; i3 < iMax; i3++) {
-        if (windingsAfter[i3] === 0)
-          continue;
-        const ring = ringsAfter[i3];
-        const poly = ring.poly;
-        if (polysExclude.indexOf(poly) !== -1)
-          continue;
-        if (ring.isExterior)
-          polysAfter.push(poly);
-        else {
-          if (polysExclude.indexOf(poly) === -1)
-            polysExclude.push(poly);
-          const index = polysAfter.indexOf(ring.poly);
-          if (index !== -1)
-            polysAfter.splice(index, 1);
-        }
+      timerId = setTimeout(timerExpired, remainingWait(time));
+    }
+    function trailingEdge(time) {
+      timerId = void 0;
+      if (trailing && lastArgs) {
+        return invokeFunc(time);
       }
-      for (let i3 = 0, iMax = polysAfter.length; i3 < iMax; i3++) {
-        const mp = polysAfter[i3].multiPoly;
-        if (mpsAfter.indexOf(mp) === -1)
-          mpsAfter.push(mp);
+      lastArgs = lastThis = void 0;
+      return result;
+    }
+    function cancel() {
+      if (timerId !== void 0) {
+        clearTimeout(timerId);
       }
-      return this._afterState;
+      lastInvokeTime = 0;
+      lastArgs = lastCallTime = lastThis = timerId = void 0;
     }
-    /* Is this segment part of the final result? */
-    isInResult() {
-      if (this.consumedBy)
-        return false;
-      if (this._isInResult !== void 0)
-        return this._isInResult;
-      const mpsBefore = this.beforeState().multiPolys;
-      const mpsAfter = this.afterState().multiPolys;
-      switch (operation_default.type) {
-        case "union": {
-          const noBefores = mpsBefore.length === 0;
-          const noAfters = mpsAfter.length === 0;
-          this._isInResult = noBefores !== noAfters;
-          break;
-        }
-        case "intersection": {
-          let least;
-          let most;
-          if (mpsBefore.length < mpsAfter.length) {
-            least = mpsBefore.length;
-            most = mpsAfter.length;
-          } else {
-            least = mpsAfter.length;
-            most = mpsBefore.length;
-          }
-          this._isInResult = most === operation_default.numMultiPolys && least < most;
-          break;
-        }
-        case "xor": {
-          const diff = Math.abs(mpsBefore.length - mpsAfter.length);
-          this._isInResult = diff % 2 === 1;
-          break;
+    function flush() {
+      return timerId === void 0 ? result : trailingEdge(now_default());
+    }
+    function debounced() {
+      var time = now_default(), isInvoking = shouldInvoke(time);
+      lastArgs = arguments;
+      lastThis = this;
+      lastCallTime = time;
+      if (isInvoking) {
+        if (timerId === void 0) {
+          return leadingEdge(lastCallTime);
         }
-        case "difference": {
-          const isJustSubject = (mps) => mps.length === 1 && mps[0].isSubject;
-          this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);
-          break;
+        if (maxing) {
+          clearTimeout(timerId);
+          timerId = setTimeout(timerExpired, wait);
+          return invokeFunc(lastCallTime);
         }
       }
-      return this._isInResult;
+      if (timerId === void 0) {
+        timerId = setTimeout(timerExpired, wait);
+      }
+      return result;
+    }
+    debounced.cancel = cancel;
+    debounced.flush = flush;
+    return debounced;
+  }
+  var debounce_default = debounce;
+
+  // node_modules/lodash-es/_escapeHtmlChar.js
+  var htmlEscapes = {
+    "&": "&amp;",
+    "<": "&lt;",
+    ">": "&gt;",
+    '"': "&quot;",
+    "'": "&#39;"
+  };
+  var escapeHtmlChar = basePropertyOf_default(htmlEscapes);
+  var escapeHtmlChar_default = escapeHtmlChar;
+
+  // node_modules/lodash-es/escape.js
+  var reUnescapedHtml = /[&<>"']/g;
+  var reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+  function escape2(string) {
+    string = toString_default(string);
+    return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar_default) : string;
+  }
+  var escape_default = escape2;
+
+  // node_modules/lodash-es/isEqual.js
+  function isEqual(value, other2) {
+    return baseIsEqual_default(value, other2);
+  }
+  var isEqual_default = isEqual;
+
+  // node_modules/lodash-es/isNumber.js
+  var numberTag3 = "[object Number]";
+  function isNumber(value) {
+    return typeof value == "number" || isObjectLike_default(value) && baseGetTag_default(value) == numberTag3;
+  }
+  var isNumber_default = isNumber;
+
+  // node_modules/lodash-es/throttle.js
+  var FUNC_ERROR_TEXT2 = "Expected a function";
+  function throttle(func, wait, options2) {
+    var leading = true, trailing = true;
+    if (typeof func != "function") {
+      throw new TypeError(FUNC_ERROR_TEXT2);
+    }
+    if (isObject_default(options2)) {
+      leading = "leading" in options2 ? !!options2.leading : leading;
+      trailing = "trailing" in options2 ? !!options2.trailing : trailing;
     }
+    return debounce_default(func, wait, {
+      "leading": leading,
+      "maxWait": wait,
+      "trailing": trailing
+    });
+  }
+  var throttle_default = throttle;
+
+  // node_modules/lodash-es/_unescapeHtmlChar.js
+  var htmlUnescapes = {
+    "&amp;": "&",
+    "&lt;": "<",
+    "&gt;": ">",
+    "&quot;": '"',
+    "&#39;": "'"
   };
+  var unescapeHtmlChar = basePropertyOf_default(htmlUnescapes);
+  var unescapeHtmlChar_default = unescapeHtmlChar;
 
-  // node_modules/polyclip-ts/dist/geom-in.js
-  var RingIn = class {
-    constructor(geomRing, poly, isExterior) {
-      __publicField(this, "poly");
-      __publicField(this, "isExterior");
-      __publicField(this, "segments");
-      __publicField(this, "bbox");
-      if (!Array.isArray(geomRing) || geomRing.length === 0) {
-        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+  // node_modules/lodash-es/unescape.js
+  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g;
+  var reHasEscapedHtml = RegExp(reEscapedHtml.source);
+  function unescape(string) {
+    string = toString_default(string);
+    return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar_default) : string;
+  }
+  var unescape_default = unescape;
+
+  // modules/core/file_fetcher.js
+  var import_vparse = __toESM(require_vparse());
+
+  // config/id.js
+  var presetsCdnUrl = "https://cdn.jsdelivr.net/npm/@openstreetmap/id-tagging-schema@{presets_version}/";
+  var ociCdnUrl = "https://cdn.jsdelivr.net/npm/osm-community-index@{version}/";
+  var wmfSitematrixCdnUrl = "https://cdn.jsdelivr.net/npm/wmf-sitematrix@{version}/";
+  var nsiCdnUrl = "https://cdn.jsdelivr.net/npm/name-suggestion-index@{version}/";
+  var defaultOsmApiConnections = {
+    live: {
+      url: "https://www.openstreetmap.org",
+      apiUrl: "https://api.openstreetmap.org",
+      client_id: "0tmNTmd0Jo1dQp4AUmMBLtGiD9YpMuXzHefitcuVStc"
+    },
+    dev: {
+      url: "https://api06.dev.openstreetmap.org",
+      client_id: "Ee1wWJ6UlpERbF6BfTNOpwn0R8k_06mvMXdDUkeHMgw"
+    }
+  };
+  var osmApiConnections = [];
+  if (false) {
+    osmApiConnections.push({
+      url: null,
+      apiUrl: null,
+      client_id: null
+    });
+  } else if (false) {
+    osmApiConnections.push(defaultOsmApiConnections[null]);
+  } else {
+    osmApiConnections.push(defaultOsmApiConnections.live);
+    osmApiConnections.push(defaultOsmApiConnections.dev);
+  }
+  var taginfoApiUrl = "https://taginfo.openstreetmap.org/api/4/";
+  var nominatimApiUrl = "https://nominatim.openstreetmap.org/";
+  var showDonationMessage = true;
+
+  // package.json
+  var package_default = {
+    name: "iD",
+    version: "2.31.1",
+    description: "A friendly editor for OpenStreetMap",
+    main: "dist/iD.min.js",
+    repository: "github:openstreetmap/iD",
+    homepage: "https://github.com/openstreetmap/iD",
+    bugs: "https://github.com/openstreetmap/iD/issues",
+    keywords: [
+      "editor",
+      "openstreetmap"
+    ],
+    license: "ISC",
+    scripts: {
+      all: "run-s clean build dist",
+      build: "run-s build:css build:data build:js",
+      "build:css": "node scripts/build_css.js",
+      "build:data": "shx mkdir -p dist/data && node scripts/build_data.js",
+      "build:stats": "node config/esbuild.config.mjs --stats && esbuild-visualizer --metadata dist/esbuild.json --exclude *.png --filename docs/statistics.html && shx rm dist/esbuild.json",
+      "build:js": "node config/esbuild.config.mjs",
+      "build:js:watch": "node config/esbuild.config.mjs --watch",
+      clean: "shx rm -f dist/esbuild.json dist/*.js dist/*.map dist/*.css dist/img/*.svg",
+      dist: "run-p dist:**",
+      "dist:mapillary": "shx mkdir -p dist/mapillary-js && shx cp -R node_modules/mapillary-js/dist/* dist/mapillary-js/",
+      "dist:pannellum": "shx mkdir -p dist/pannellum && shx cp -R node_modules/pannellum/build/* dist/pannellum/",
+      "dist:min": "node config/esbuild.config.min.mjs",
+      "dist:svg:iD": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "iD-%s" --symbol-sprite dist/img/iD-sprite.svg "svg/iD-sprite/**/*.svg"',
+      "dist:svg:community": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "community-%s" --symbol-sprite dist/img/community-sprite.svg node_modules/osm-community-index/dist/img/*.svg',
+      "dist:svg:fa": "svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/fa-sprite.svg svg/fontawesome/*.svg",
+      "dist:svg:maki": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "maki-%s" --symbol-sprite dist/img/maki-sprite.svg node_modules/@mapbox/maki/icons/*.svg',
+      "dist:svg:mapillary:signs": "svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-sprite.svg node_modules/@rapideditor/mapillary_sprite_source/package_signs/*.svg",
+      "dist:svg:mapillary:objects": "svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-object-sprite.svg node_modules/@rapideditor/mapillary_sprite_source/package_objects/*.svg",
+      "dist:svg:roentgen": 'svg-sprite --shape-id-generator "roentgen-%s" --shape-dim-width 16 --shape-dim-height 16 --symbol --symbol-dest . --symbol-sprite dist/img/roentgen-sprite.svg svg/roentgen/*.svg',
+      "dist:svg:temaki": 'svg-sprite --symbol --symbol-dest . --shape-id-generator "temaki-%s" --symbol-sprite dist/img/temaki-sprite.svg node_modules/@rapideditor/temaki/icons/*.svg',
+      imagery: "node scripts/update_imagery.js",
+      lint: "eslint config scripts test/spec modules",
+      "lint:fix": "eslint scripts test/spec modules --fix",
+      start: "run-s start:watch",
+      "start:single-build": "run-p build:js start:server",
+      "start:watch": "run-p build:js:watch start:server",
+      "start:server": "node scripts/server.js",
+      test: "npm-run-all -s lint build test:spec",
+      "test:spec": "vitest --no-isolate",
+      translations: "node scripts/update_locales.js"
+    },
+    dependencies: {
+      "@mapbox/geojson-area": "^0.2.2",
+      "@mapbox/sexagesimal": "1.2.0",
+      "@mapbox/vector-tile": "^2.0.3",
+      "@rapideditor/country-coder": "~5.3.1",
+      "@rapideditor/location-conflation": "~1.4.1",
+      "@tmcw/togeojson": "^6.0.1",
+      "@turf/bbox": "^7.2.0",
+      "@turf/bbox-clip": "^7.2.0",
+      "abortcontroller-polyfill": "^1.7.8",
+      "aes-js": "^3.1.2",
+      "alif-toolkit": "^1.3.0",
+      "core-js-bundle": "^3.40.0",
+      diacritics: "1.3.0",
+      exifr: "^7.1.3",
+      "fast-deep-equal": "~3.1.1",
+      "fast-json-stable-stringify": "2.1.0",
+      "lodash-es": "~4.17.15",
+      marked: "~15.0.6",
+      "node-diff3": "~3.1.0",
+      "osm-auth": "~2.6.0",
+      pannellum: "2.5.6",
+      pbf: "^4.0.1",
+      "polygon-clipping": "~0.15.7",
+      rbush: "4.0.1",
+      vitest: "^3.0.5",
+      "whatwg-fetch": "^3.6.20",
+      "which-polygon": "2.2.1"
+    },
+    devDependencies: {
+      "@fortawesome/fontawesome-svg-core": "~6.7.2",
+      "@fortawesome/free-brands-svg-icons": "~6.7.2",
+      "@fortawesome/free-regular-svg-icons": "~6.7.2",
+      "@fortawesome/free-solid-svg-icons": "~6.7.2",
+      "@mapbox/maki": "^8.0.1",
+      "@openstreetmap/id-tagging-schema": "^6.8.1",
+      "@rapideditor/mapillary_sprite_source": "^1.8.0",
+      "@rapideditor/temaki": "^5.9.0",
+      "@transifex/api": "^7.1.3",
+      "@types/chai": "^5.0.1",
+      "@types/d3": "^7.4.3",
+      "@types/happen": "^0.3.0",
+      "@types/sinon": "^17.0.3",
+      "@types/sinon-chai": "^4.0.0",
+      autoprefixer: "^10.4.20",
+      browserslist: "^4.24.4",
+      "browserslist-to-esbuild": "^2.1.1",
+      chai: "^5.1.2",
+      chalk: "^4.1.2",
+      "cldr-core": "^46.0.0",
+      "cldr-localenames-full": "^46.1.0",
+      "concat-files": "^0.1.1",
+      d3: "~7.9.0",
+      dotenv: "^16.4.7",
+      "editor-layer-index": "github:osmlab/editor-layer-index#gh-pages",
+      esbuild: "^0.24.2",
+      "esbuild-visualizer": "^0.7.0",
+      eslint: "^9.19.0",
+      "fetch-mock": "^11.1.1",
+      gaze: "^1.1.3",
+      glob: "^10.4.5",
+      happen: "^0.3.2",
+      "js-yaml": "^4.0.0",
+      jsdom: "^26.0.0",
+      "json-stringify-pretty-compact": "^3.0.0",
+      "mapillary-js": "4.1.2",
+      minimist: "^1.2.8",
+      "name-suggestion-index": "~6.0",
+      "npm-run-all": "^4.0.0",
+      "osm-community-index": "~5.9.1",
+      postcss: "^8.5.1",
+      "postcss-selector-prepend": "^0.5.0",
+      shelljs: "^0.8.0",
+      shx: "^0.3.0",
+      sinon: "^11.1.2",
+      "sinon-chai": "^4.0.0",
+      smash: "0.0",
+      "static-server": "^2.2.1",
+      "svg-sprite": "2.0.4",
+      vparse: "~1.1.0"
+    },
+    engines: {
+      node: ">=18"
+    },
+    browserslist: [
+      "> 0.3%, last 6 major versions, not dead, Firefox ESR, maintained node versions"
+    ]
+  };
+
+  // modules/core/file_fetcher.js
+  var _mainFileFetcher = coreFileFetcher();
+  function coreFileFetcher() {
+    const ociVersion = package_default.dependencies["osm-community-index"] || package_default.devDependencies["osm-community-index"];
+    const v2 = (0, import_vparse.default)(ociVersion);
+    const ociVersionMinor = "".concat(v2.major, ".").concat(v2.minor);
+    const presetsVersion = package_default.devDependencies["@openstreetmap/id-tagging-schema"];
+    let _this = {};
+    let _inflight4 = {};
+    let _fileMap = {
+      "address_formats": "data/address_formats.min.json",
+      "imagery": "data/imagery.min.json",
+      "intro_graph": "data/intro_graph.min.json",
+      "keepRight": "data/keepRight.min.json",
+      "languages": "data/languages.min.json",
+      "locales": "locales/index.min.json",
+      "phone_formats": "data/phone_formats.min.json",
+      "qa_data": "data/qa_data.min.json",
+      "shortcuts": "data/shortcuts.min.json",
+      "territory_languages": "data/territory_languages.min.json",
+      "oci_defaults": ociCdnUrl.replace("{version}", ociVersionMinor) + "dist/defaults.min.json",
+      "oci_features": ociCdnUrl.replace("{version}", ociVersionMinor) + "dist/featureCollection.min.json",
+      "oci_resources": ociCdnUrl.replace("{version}", ociVersionMinor) + "dist/resources.min.json",
+      "presets_package": presetsCdnUrl.replace("{presets_version}", presetsVersion) + "package.json",
+      "deprecated": presetsCdnUrl + "dist/deprecated.min.json",
+      "discarded": presetsCdnUrl + "dist/discarded.min.json",
+      "preset_categories": presetsCdnUrl + "dist/preset_categories.min.json",
+      "preset_defaults": presetsCdnUrl + "dist/preset_defaults.min.json",
+      "preset_fields": presetsCdnUrl + "dist/fields.min.json",
+      "preset_presets": presetsCdnUrl + "dist/presets.min.json",
+      "wmf_sitematrix": wmfSitematrixCdnUrl.replace("{version}", "0.2") + "data/wikipedia.min.json"
+    };
+    let _cachedData = {};
+    _this.cache = () => _cachedData;
+    _this.get = (which) => {
+      if (_cachedData[which]) {
+        return Promise.resolve(_cachedData[which]);
       }
-      this.poly = poly;
-      this.isExterior = isExterior;
-      this.segments = [];
-      if (typeof geomRing[0][0] !== "number" || typeof geomRing[0][1] !== "number") {
-        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+      const file = _fileMap[which];
+      const url = file && _this.asset(file);
+      if (!url) {
+        return Promise.reject('Unknown data file for "'.concat(which, '"'));
       }
-      const firstPoint = precision.snap({ x: new bignumber_default(geomRing[0][0]), y: new bignumber_default(geomRing[0][1]) });
-      this.bbox = {
-        ll: { x: firstPoint.x, y: firstPoint.y },
-        ur: { x: firstPoint.x, y: firstPoint.y }
-      };
-      let prevPoint = firstPoint;
-      for (let i3 = 1, iMax = geomRing.length; i3 < iMax; i3++) {
-        if (typeof geomRing[i3][0] !== "number" || typeof geomRing[i3][1] !== "number") {
-          throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
-        }
-        const point = precision.snap({ x: new bignumber_default(geomRing[i3][0]), y: new bignumber_default(geomRing[i3][1]) });
-        if (point.x.eq(prevPoint.x) && point.y.eq(prevPoint.y))
-          continue;
-        this.segments.push(Segment.fromRing(prevPoint, point, this));
-        if (point.x.isLessThan(this.bbox.ll.x))
-          this.bbox.ll.x = point.x;
-        if (point.y.isLessThan(this.bbox.ll.y))
-          this.bbox.ll.y = point.y;
-        if (point.x.isGreaterThan(this.bbox.ur.x))
-          this.bbox.ur.x = point.x;
-        if (point.y.isGreaterThan(this.bbox.ur.y))
-          this.bbox.ur.y = point.y;
-        prevPoint = point;
+      if (url.includes("{presets_version}")) {
+        return _this.get("presets_package").then((result) => {
+          const presetsVersion2 = result.version;
+          return getUrl(url.replace("{presets_version}", presetsVersion2), which);
+        });
+      } else {
+        return getUrl(url, which);
       }
-      if (!firstPoint.x.eq(prevPoint.x) || !firstPoint.y.eq(prevPoint.y)) {
-        this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));
+    };
+    function getUrl(url, which) {
+      let prom = _inflight4[url];
+      if (!prom) {
+        _inflight4[url] = prom = (window.VITEST ? import("../".concat(url)) : fetch(url)).then((response) => {
+          if (window.VITEST) return response.default;
+          if (!response.ok || !response.json) {
+            throw new Error(response.status + " " + response.statusText);
+          }
+          if (response.status === 204 || response.status === 205) return;
+          return response.json();
+        }).then((result) => {
+          delete _inflight4[url];
+          if (!result) {
+            throw new Error('No data loaded for "'.concat(which, '"'));
+          }
+          _cachedData[which] = result;
+          return result;
+        }).catch((err) => {
+          delete _inflight4[url];
+          throw err;
+        });
       }
+      return prom;
     }
-    getSweepEvents() {
-      const sweepEvents = [];
-      for (let i3 = 0, iMax = this.segments.length; i3 < iMax; i3++) {
-        const segment = this.segments[i3];
-        sweepEvents.push(segment.leftSE);
-        sweepEvents.push(segment.rightSE);
-      }
-      return sweepEvents;
+    _this.fileMap = function(val) {
+      if (!arguments.length) return _fileMap;
+      _fileMap = val;
+      return _this;
+    };
+    let _assetPath = "";
+    _this.assetPath = function(val) {
+      if (!arguments.length) return _assetPath;
+      _assetPath = val;
+      return _this;
+    };
+    let _assetMap = {};
+    _this.assetMap = function(val) {
+      if (!arguments.length) return _assetMap;
+      _assetMap = val;
+      return _this;
+    };
+    _this.asset = (val) => {
+      if (/^http(s)?:\/\//i.test(val)) return val;
+      const filename = _assetPath + val;
+      return _assetMap[filename] || filename;
+    };
+    return _this;
+  }
+
+  // modules/util/detect.js
+  var _detected;
+  function utilDetect(refresh2) {
+    if (_detected && !refresh2) return _detected;
+    _detected = {};
+    const ua = navigator.userAgent;
+    let m2 = null;
+    m2 = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);
+    if (m2 !== null) {
+      _detected.browser = m2[1];
+      _detected.version = m2[2];
     }
-  };
-  var PolyIn = class {
-    constructor(geomPoly, multiPoly) {
-      __publicField(this, "multiPoly");
-      __publicField(this, "exteriorRing");
-      __publicField(this, "interiorRings");
-      __publicField(this, "bbox");
-      if (!Array.isArray(geomPoly)) {
-        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
-      }
-      this.exteriorRing = new RingIn(geomPoly[0], this, true);
-      this.bbox = {
-        ll: { x: this.exteriorRing.bbox.ll.x, y: this.exteriorRing.bbox.ll.y },
-        ur: { x: this.exteriorRing.bbox.ur.x, y: this.exteriorRing.bbox.ur.y }
-      };
-      this.interiorRings = [];
-      for (let i3 = 1, iMax = geomPoly.length; i3 < iMax; i3++) {
-        const ring = new RingIn(geomPoly[i3], this, false);
-        if (ring.bbox.ll.x.isLessThan(this.bbox.ll.x))
-          this.bbox.ll.x = ring.bbox.ll.x;
-        if (ring.bbox.ll.y.isLessThan(this.bbox.ll.y))
-          this.bbox.ll.y = ring.bbox.ll.y;
-        if (ring.bbox.ur.x.isGreaterThan(this.bbox.ur.x))
-          this.bbox.ur.x = ring.bbox.ur.x;
-        if (ring.bbox.ur.y.isGreaterThan(this.bbox.ur.y))
-          this.bbox.ur.y = ring.bbox.ur.y;
-        this.interiorRings.push(ring);
+    if (!_detected.browser) {
+      m2 = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);
+      if (m2 !== null) {
+        _detected.browser = "msie";
+        _detected.version = m2[1];
       }
-      this.multiPoly = multiPoly;
     }
-    getSweepEvents() {
-      const sweepEvents = this.exteriorRing.getSweepEvents();
-      for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
-        const ringSweepEvents = this.interiorRings[i3].getSweepEvents();
-        for (let j2 = 0, jMax = ringSweepEvents.length; j2 < jMax; j2++) {
-          sweepEvents.push(ringSweepEvents[j2]);
-        }
+    if (!_detected.browser) {
+      m2 = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);
+      if (m2 !== null) {
+        _detected.browser = "Opera";
+        _detected.version = m2[2];
       }
-      return sweepEvents;
     }
-  };
-  var MultiPolyIn = class {
-    constructor(geom, isSubject) {
-      __publicField(this, "isSubject");
-      __publicField(this, "polys");
-      __publicField(this, "bbox");
-      if (!Array.isArray(geom)) {
-        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
-      }
-      try {
-        if (typeof geom[0][0][0] === "number")
-          geom = [geom];
-      } catch (ex) {
-      }
-      this.polys = [];
-      this.bbox = {
-        ll: { x: new bignumber_default(Number.POSITIVE_INFINITY), y: new bignumber_default(Number.POSITIVE_INFINITY) },
-        ur: { x: new bignumber_default(Number.NEGATIVE_INFINITY), y: new bignumber_default(Number.NEGATIVE_INFINITY) }
-      };
-      for (let i3 = 0, iMax = geom.length; i3 < iMax; i3++) {
-        const poly = new PolyIn(geom[i3], this);
-        if (poly.bbox.ll.x.isLessThan(this.bbox.ll.x))
-          this.bbox.ll.x = poly.bbox.ll.x;
-        if (poly.bbox.ll.y.isLessThan(this.bbox.ll.y))
-          this.bbox.ll.y = poly.bbox.ll.y;
-        if (poly.bbox.ur.x.isGreaterThan(this.bbox.ur.x))
-          this.bbox.ur.x = poly.bbox.ur.x;
-        if (poly.bbox.ur.y.isGreaterThan(this.bbox.ur.y))
-          this.bbox.ur.y = poly.bbox.ur.y;
-        this.polys.push(poly);
+    if (!_detected.browser) {
+      m2 = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
+      if (m2 !== null) {
+        _detected.browser = m2[1];
+        _detected.version = m2[2];
+        m2 = ua.match(/version\/([\.\d]+)/i);
+        if (m2 !== null) _detected.version = m2[1];
       }
-      this.isSubject = isSubject;
     }
-    getSweepEvents() {
-      const sweepEvents = [];
-      for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
-        const polySweepEvents = this.polys[i3].getSweepEvents();
-        for (let j2 = 0, jMax = polySweepEvents.length; j2 < jMax; j2++) {
-          sweepEvents.push(polySweepEvents[j2]);
-        }
-      }
-      return sweepEvents;
+    if (!_detected.browser) {
+      _detected.browser = navigator.appName;
+      _detected.version = navigator.appVersion;
     }
-  };
-
-  // node_modules/polyclip-ts/dist/geom-out.js
-  var RingOut = class _RingOut {
-    constructor(events) {
-      __publicField(this, "events");
-      __publicField(this, "poly");
-      __publicField(this, "_isExteriorRing");
-      __publicField(this, "_enclosingRing");
-      this.events = events;
-      for (let i3 = 0, iMax = events.length; i3 < iMax; i3++) {
-        events[i3].segment.ringOut = this;
-      }
-      this.poly = null;
+    _detected.version = _detected.version.split(/\W/).slice(0, 2).join(".");
+    _detected.opera = _detected.browser.toLowerCase() === "opera" && Number(_detected.version) < 15;
+    if (_detected.browser.toLowerCase() === "msie") {
+      _detected.ie = true;
+      _detected.browser = "Internet Explorer";
+      _detected.support = false;
+    } else {
+      _detected.ie = false;
+      _detected.support = true;
     }
-    /* Given the segments from the sweep line pass, compute & return a series
-     * of closed rings from all the segments marked to be part of the result */
-    static factory(allSegments) {
-      const ringsOut = [];
-      for (let i3 = 0, iMax = allSegments.length; i3 < iMax; i3++) {
-        const segment = allSegments[i3];
-        if (!segment.isInResult() || segment.ringOut)
-          continue;
-        let prevEvent = null;
-        let event = segment.leftSE;
-        let nextEvent = segment.rightSE;
-        const events = [event];
-        const startingPoint = event.point;
-        const intersectionLEs = [];
-        while (true) {
-          prevEvent = event;
-          event = nextEvent;
-          events.push(event);
-          if (event.point === startingPoint)
-            break;
-          while (true) {
-            const availableLEs = event.getAvailableLinkedEvents();
-            if (availableLEs.length === 0) {
-              const firstPt = events[0].point;
-              const lastPt = events[events.length - 1].point;
-              throw new Error("Unable to complete output ring starting at [".concat(firstPt.x, ",") + " ".concat(firstPt.y, "]. Last matching segment found ends at") + " [".concat(lastPt.x, ", ").concat(lastPt.y, "]."));
-            }
-            if (availableLEs.length === 1) {
-              nextEvent = availableLEs[0].otherSE;
-              break;
-            }
-            let indexLE = null;
-            for (let j2 = 0, jMax = intersectionLEs.length; j2 < jMax; j2++) {
-              if (intersectionLEs[j2].point === event.point) {
-                indexLE = j2;
-                break;
-              }
-            }
-            if (indexLE !== null) {
-              const intersectionLE = intersectionLEs.splice(indexLE)[0];
-              const ringEvents = events.splice(intersectionLE.index);
-              ringEvents.unshift(ringEvents[0].otherSE);
-              ringsOut.push(new _RingOut(ringEvents.reverse()));
-              continue;
-            }
-            intersectionLEs.push({
-              index: events.length,
-              point: event.point
-            });
-            const comparator = event.getLeftmostComparator(prevEvent);
-            nextEvent = availableLEs.sort(comparator)[0].otherSE;
-            break;
-          }
-        }
-        ringsOut.push(new _RingOut(events));
+    _detected.filedrop = window.FileReader && "ondrop" in window;
+    if (/Win/.test(ua)) {
+      _detected.os = "win";
+      _detected.platform = "Windows";
+    } else if (/Mac/.test(ua)) {
+      _detected.os = "mac";
+      _detected.platform = "Macintosh";
+    } else if (/X11/.test(ua) || /Linux/.test(ua)) {
+      _detected.os = "linux";
+      _detected.platform = "Linux";
+    } else {
+      _detected.os = "win";
+      _detected.platform = "Unknown";
+    }
+    _detected.isMobileWebKit = (/\b(iPad|iPhone|iPod)\b/.test(ua) || // HACK: iPadOS 13+ requests desktop sites by default by using a Mac user agent,
+    // so assume any "mac" with multitouch is actually iOS
+    navigator.platform === "MacIntel" && "maxTouchPoints" in navigator && navigator.maxTouchPoints > 1) && /WebKit/.test(ua) && !/Edge/.test(ua) && !window.MSStream;
+    _detected.browserLocales = Array.from(new Set(
+      // remove duplicates
+      [navigator.language].concat(navigator.languages || []).concat([
+        // old property for backwards compatibility
+        navigator.userLanguage
+      ]).filter(Boolean)
+    ));
+    const loc = window.top.location;
+    let origin = loc.origin;
+    if (!origin) {
+      origin = loc.protocol + "//" + loc.hostname + (loc.port ? ":" + loc.port : "");
+    }
+    _detected.host = origin + loc.pathname;
+    return _detected;
+  }
+
+  // modules/util/aes.js
+  var import_aes_js = __toESM(require_aes_js());
+  var DEFAULT_128 = [250, 157, 60, 79, 142, 134, 229, 129, 138, 126, 210, 129, 29, 71, 160, 208];
+  function utilAesEncrypt(text, key) {
+    key = key || DEFAULT_128;
+    const textBytes = import_aes_js.default.utils.utf8.toBytes(text);
+    const aesCtr = new import_aes_js.default.ModeOfOperation.ctr(key);
+    const encryptedBytes = aesCtr.encrypt(textBytes);
+    const encryptedHex = import_aes_js.default.utils.hex.fromBytes(encryptedBytes);
+    return encryptedHex;
+  }
+  function utilAesDecrypt(encryptedHex, key) {
+    key = key || DEFAULT_128;
+    const encryptedBytes = import_aes_js.default.utils.hex.toBytes(encryptedHex);
+    const aesCtr = new import_aes_js.default.ModeOfOperation.ctr(key);
+    const decryptedBytes = aesCtr.decrypt(encryptedBytes);
+    const text = import_aes_js.default.utils.utf8.fromBytes(decryptedBytes);
+    return text;
+  }
+
+  // modules/util/clean_tags.js
+  function utilCleanTags(tags) {
+    var out = {};
+    for (var k2 in tags) {
+      if (!k2) continue;
+      var v2 = tags[k2];
+      if (v2 !== void 0) {
+        out[k2] = cleanValue(k2, v2);
       }
-      return ringsOut;
     }
-    getGeom() {
-      let prevPt = this.events[0].point;
-      const points = [prevPt];
-      for (let i3 = 1, iMax = this.events.length - 1; i3 < iMax; i3++) {
-        const pt3 = this.events[i3].point;
-        const nextPt2 = this.events[i3 + 1].point;
-        if (precision.orient(pt3, prevPt, nextPt2) === 0)
-          continue;
-        points.push(pt3);
-        prevPt = pt3;
+    return out;
+    function cleanValue(k3, v3) {
+      function keepSpaces(k4) {
+        return /_hours|_times|:conditional$/.test(k4);
       }
-      if (points.length === 1)
-        return null;
-      const pt2 = points[0];
-      const nextPt = points[1];
-      if (precision.orient(pt2, prevPt, nextPt) === 0)
-        points.shift();
-      points.push(points[0]);
-      const step = this.isExteriorRing() ? 1 : -1;
-      const iStart = this.isExteriorRing() ? 0 : points.length - 1;
-      const iEnd = this.isExteriorRing() ? points.length : -1;
-      const orderedPoints = [];
-      for (let i3 = iStart; i3 != iEnd; i3 += step)
-        orderedPoints.push([points[i3].x.toNumber(), points[i3].y.toNumber()]);
-      return orderedPoints;
-    }
-    isExteriorRing() {
-      if (this._isExteriorRing === void 0) {
-        const enclosing = this.enclosingRing();
-        this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;
+      function skip(k4) {
+        return /^(description|note|fixme|inscription)$/.test(k4);
       }
-      return this._isExteriorRing;
-    }
-    enclosingRing() {
-      if (this._enclosingRing === void 0) {
-        this._enclosingRing = this._calcEnclosingRing();
+      if (skip(k3)) return v3;
+      var cleaned = v3.split(";").map(function(s2) {
+        return s2.trim();
+      }).join(keepSpaces(k3) ? "; " : ";");
+      if (k3.indexOf("website") !== -1 || k3.indexOf("email") !== -1 || cleaned.indexOf("http") === 0) {
+        cleaned = cleaned.replace(/[\u200B-\u200F\uFEFF]/g, "");
       }
-      return this._enclosingRing;
+      return cleaned;
     }
-    /* Returns the ring that encloses this one, if any */
-    _calcEnclosingRing() {
-      var _a3, _b3;
-      let leftMostEvt = this.events[0];
-      for (let i3 = 1, iMax = this.events.length; i3 < iMax; i3++) {
-        const evt = this.events[i3];
-        if (SweepEvent.compare(leftMostEvt, evt) > 0)
-          leftMostEvt = evt;
+  }
+
+  // modules/util/get_set_value.js
+  function utilGetSetValue(selection2, value, shouldUpdate) {
+    function setValue(value2, shouldUpdate2) {
+      function valueNull() {
+        delete this.value;
       }
-      let prevSeg = leftMostEvt.segment.prevInResult();
-      let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
-      while (true) {
-        if (!prevSeg)
-          return null;
-        if (!prevPrevSeg)
-          return prevSeg.ringOut;
-        if (prevPrevSeg.ringOut !== prevSeg.ringOut) {
-          if (((_a3 = prevPrevSeg.ringOut) == null ? void 0 : _a3.enclosingRing()) !== prevSeg.ringOut) {
-            return prevSeg.ringOut;
-          } else
-            return (_b3 = prevSeg.ringOut) == null ? void 0 : _b3.enclosingRing();
+      function valueConstant() {
+        if (shouldUpdate2(this.value, value2)) {
+          this.value = value2;
+        }
+      }
+      function valueFunction() {
+        var x2 = value2.apply(this, arguments);
+        if (x2 === null || x2 === void 0) {
+          delete this.value;
+        } else if (shouldUpdate2(this.value, x2)) {
+          this.value = x2;
         }
-        prevSeg = prevPrevSeg.prevInResult();
-        prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
       }
+      return value2 === null || value2 === void 0 ? valueNull : typeof value2 === "function" ? valueFunction : valueConstant;
     }
-  };
-  var PolyOut = class {
-    constructor(exteriorRing) {
-      __publicField(this, "exteriorRing");
-      __publicField(this, "interiorRings");
-      this.exteriorRing = exteriorRing;
-      exteriorRing.poly = this;
-      this.interiorRings = [];
+    if (arguments.length === 1) {
+      return selection2.property("value");
     }
-    addInterior(ring) {
-      this.interiorRings.push(ring);
-      ring.poly = this;
+    if (shouldUpdate === void 0) {
+      shouldUpdate = (a2, b2) => a2 !== b2;
     }
-    getGeom() {
-      const geom0 = this.exteriorRing.getGeom();
-      if (geom0 === null)
-        return null;
-      const geom = [geom0];
-      for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
-        const ringGeom = this.interiorRings[i3].getGeom();
-        if (ringGeom === null)
-          continue;
-        geom.push(ringGeom);
+    return selection2.each(setValue(value, shouldUpdate));
+  }
+
+  // modules/util/keybinding.js
+  function utilKeybinding(namespace) {
+    var _keybindings = {};
+    function testBindings(d3_event, isCapturing) {
+      var didMatch = false;
+      var bindings = Object.keys(_keybindings).map(function(id2) {
+        return _keybindings[id2];
+      });
+      var i3, binding;
+      for (i3 = 0; i3 < bindings.length; i3++) {
+        binding = bindings[i3];
+        if (!binding.event.modifiers.shiftKey) continue;
+        if (!!binding.capture !== isCapturing) continue;
+        if (matches(d3_event, binding, true)) {
+          binding.callback(d3_event);
+          didMatch = true;
+          break;
+        }
+      }
+      if (didMatch) return;
+      for (i3 = 0; i3 < bindings.length; i3++) {
+        binding = bindings[i3];
+        if (binding.event.modifiers.shiftKey) continue;
+        if (!!binding.capture !== isCapturing) continue;
+        if (matches(d3_event, binding, false)) {
+          binding.callback(d3_event);
+          break;
+        }
+      }
+      function matches(d3_event2, binding2, testShift) {
+        var event = d3_event2;
+        var isMatch = false;
+        var tryKeyCode = true;
+        if (event.key !== void 0) {
+          tryKeyCode = event.key.charCodeAt(0) > 127;
+          isMatch = true;
+          if (binding2.event.key === void 0) {
+            isMatch = false;
+          } else if (Array.isArray(binding2.event.key)) {
+            if (binding2.event.key.map(function(s2) {
+              return s2.toLowerCase();
+            }).indexOf(event.key.toLowerCase()) === -1) {
+              isMatch = false;
+            }
+          } else {
+            if (event.key.toLowerCase() !== binding2.event.key.toLowerCase()) {
+              isMatch = false;
+            }
+          }
+        }
+        if (!isMatch && (tryKeyCode || binding2.event.modifiers.altKey)) {
+          isMatch = event.keyCode === binding2.event.keyCode;
+        }
+        if (!isMatch) return false;
+        if (!(event.ctrlKey && event.altKey)) {
+          if (event.ctrlKey !== binding2.event.modifiers.ctrlKey) return false;
+          if (event.altKey !== binding2.event.modifiers.altKey) return false;
+        }
+        if (event.metaKey !== binding2.event.modifiers.metaKey) return false;
+        if (testShift && event.shiftKey !== binding2.event.modifiers.shiftKey) return false;
+        return true;
       }
-      return geom;
     }
-  };
-  var MultiPolyOut = class {
-    constructor(rings) {
-      __publicField(this, "rings");
-      __publicField(this, "polys");
-      this.rings = rings;
-      this.polys = this._composePolys(rings);
+    function capture(d3_event) {
+      testBindings(d3_event, true);
     }
-    getGeom() {
-      const geom = [];
-      for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
-        const polyGeom = this.polys[i3].getGeom();
-        if (polyGeom === null)
-          continue;
-        geom.push(polyGeom);
+    function bubble(d3_event) {
+      var tagName = select_default2(d3_event.target).node().tagName;
+      if (tagName === "INPUT" || tagName === "SELECT" || tagName === "TEXTAREA") {
+        return;
       }
-      return geom;
+      testBindings(d3_event, false);
     }
-    _composePolys(rings) {
-      var _a3;
-      const polys = [];
-      for (let i3 = 0, iMax = rings.length; i3 < iMax; i3++) {
-        const ring = rings[i3];
-        if (ring.poly)
-          continue;
-        if (ring.isExteriorRing())
-          polys.push(new PolyOut(ring));
-        else {
-          const enclosingRing = ring.enclosingRing();
-          if (!(enclosingRing == null ? void 0 : enclosingRing.poly))
-            polys.push(new PolyOut(enclosingRing));
-          (_a3 = enclosingRing == null ? void 0 : enclosingRing.poly) == null ? void 0 : _a3.addInterior(ring);
+    function keybinding(selection2) {
+      selection2 = selection2 || select_default2(document);
+      selection2.on("keydown.capture." + namespace, capture, true);
+      selection2.on("keydown.bubble." + namespace, bubble, false);
+      return keybinding;
+    }
+    keybinding.unbind = function(selection2) {
+      _keybindings = [];
+      selection2 = selection2 || select_default2(document);
+      selection2.on("keydown.capture." + namespace, null);
+      selection2.on("keydown.bubble." + namespace, null);
+      return keybinding;
+    };
+    keybinding.clear = function() {
+      _keybindings = {};
+      return keybinding;
+    };
+    keybinding.off = function(codes, capture2) {
+      var arr = utilArrayUniq([].concat(codes));
+      for (var i3 = 0; i3 < arr.length; i3++) {
+        var id2 = arr[i3] + (capture2 ? "-capture" : "-bubble");
+        delete _keybindings[id2];
+      }
+      return keybinding;
+    };
+    keybinding.on = function(codes, callback, capture2) {
+      if (typeof callback !== "function") {
+        return keybinding.off(codes, capture2);
+      }
+      var arr = utilArrayUniq([].concat(codes));
+      for (var i3 = 0; i3 < arr.length; i3++) {
+        var id2 = arr[i3] + (capture2 ? "-capture" : "-bubble");
+        var binding = {
+          id: id2,
+          capture: capture2,
+          callback,
+          event: {
+            key: void 0,
+            // preferred
+            keyCode: 0,
+            // fallback
+            modifiers: {
+              shiftKey: false,
+              ctrlKey: false,
+              altKey: false,
+              metaKey: false
+            }
+          }
+        };
+        if (_keybindings[id2]) {
+          console.warn('warning: duplicate keybinding for "' + id2 + '"');
+        }
+        _keybindings[id2] = binding;
+        var matches = arr[i3].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
+        for (var j2 = 0; j2 < matches.length; j2++) {
+          if (matches[j2] === "++") matches[j2] = "+";
+          if (matches[j2] in utilKeybinding.modifierCodes) {
+            var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j2]]];
+            binding.event.modifiers[prop] = true;
+          } else {
+            binding.event.key = utilKeybinding.keys[matches[j2]] || matches[j2];
+            if (matches[j2] in utilKeybinding.keyCodes) {
+              binding.event.keyCode = utilKeybinding.keyCodes[matches[j2]];
+            }
+          }
         }
       }
-      return polys;
-    }
+      return keybinding;
+    };
+    return keybinding;
+  }
+  utilKeybinding.modifierCodes = {
+    // Shift key, ⇧
+    "\u21E7": 16,
+    shift: 16,
+    // CTRL key, on Mac: ⌃
+    "\u2303": 17,
+    ctrl: 17,
+    // ALT key, on Mac: ⌥ (Alt)
+    "\u2325": 18,
+    alt: 18,
+    option: 18,
+    // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
+    "\u2318": 91,
+    meta: 91,
+    cmd: 91,
+    "super": 91,
+    win: 91
+  };
+  utilKeybinding.modifierProperties = {
+    16: "shiftKey",
+    17: "ctrlKey",
+    18: "altKey",
+    91: "metaKey"
+  };
+  utilKeybinding.plusKeys = ["plus", "ffplus", "=", "ffequals", "\u2260", "\xB1"];
+  utilKeybinding.minusKeys = ["_", "-", "ffminus", "dash", "\u2013", "\u2014"];
+  utilKeybinding.keys = {
+    // Backspace key, on Mac: ⌫ (Backspace)
+    "\u232B": "Backspace",
+    backspace: "Backspace",
+    // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
+    "\u21E5": "Tab",
+    "\u21C6": "Tab",
+    tab: "Tab",
+    // Return key, ↩
+    "\u21A9": "Enter",
+    "\u21B5": "Enter",
+    "\u23CE": "Enter",
+    "return": "Enter",
+    enter: "Enter",
+    "\u2305": "Enter",
+    // Pause/Break key
+    "pause": "Pause",
+    "pause-break": "Pause",
+    // Caps Lock key, ⇪
+    "\u21EA": "CapsLock",
+    caps: "CapsLock",
+    "caps-lock": "CapsLock",
+    // Escape key, on Mac: ⎋, on Windows: Esc
+    "\u238B": ["Escape", "Esc"],
+    escape: ["Escape", "Esc"],
+    esc: ["Escape", "Esc"],
+    // Space key
+    space: [" ", "Spacebar"],
+    // Page-Up key, or pgup, on Mac: ↖
+    "\u2196": "PageUp",
+    pgup: "PageUp",
+    "page-up": "PageUp",
+    // Page-Down key, or pgdown, on Mac: ↘
+    "\u2198": "PageDown",
+    pgdown: "PageDown",
+    "page-down": "PageDown",
+    // END key, on Mac: ⇟
+    "\u21DF": "End",
+    end: "End",
+    // HOME key, on Mac: ⇞
+    "\u21DE": "Home",
+    home: "Home",
+    // Insert key, or ins
+    ins: "Insert",
+    insert: "Insert",
+    // Delete key, on Mac: ⌦ (Delete)
+    "\u2326": ["Delete", "Del"],
+    del: ["Delete", "Del"],
+    "delete": ["Delete", "Del"],
+    // Left Arrow Key, or ←
+    "\u2190": ["ArrowLeft", "Left"],
+    left: ["ArrowLeft", "Left"],
+    "arrow-left": ["ArrowLeft", "Left"],
+    // Up Arrow Key, or ↑
+    "\u2191": ["ArrowUp", "Up"],
+    up: ["ArrowUp", "Up"],
+    "arrow-up": ["ArrowUp", "Up"],
+    // Right Arrow Key, or →
+    "\u2192": ["ArrowRight", "Right"],
+    right: ["ArrowRight", "Right"],
+    "arrow-right": ["ArrowRight", "Right"],
+    // Up Arrow Key, or ↓
+    "\u2193": ["ArrowDown", "Down"],
+    down: ["ArrowDown", "Down"],
+    "arrow-down": ["ArrowDown", "Down"],
+    // odities, stuff for backward compatibility (browsers and code):
+    // Num-Multiply, or *
+    "*": ["*", "Multiply"],
+    star: ["*", "Multiply"],
+    asterisk: ["*", "Multiply"],
+    multiply: ["*", "Multiply"],
+    // Num-Plus or +
+    "+": ["+", "Add"],
+    "plus": ["+", "Add"],
+    // Num-Subtract, or -
+    "-": ["-", "Subtract"],
+    subtract: ["-", "Subtract"],
+    "dash": ["-", "Subtract"],
+    // Semicolon
+    semicolon: ";",
+    // = or equals
+    equals: "=",
+    // Comma, or ,
+    comma: ",",
+    // Period, or ., or full-stop
+    period: ".",
+    "full-stop": ".",
+    // Slash, or /, or forward-slash
+    slash: "/",
+    "forward-slash": "/",
+    // Tick, or `, or back-quote
+    tick: "`",
+    "back-quote": "`",
+    // Open bracket, or [
+    "open-bracket": "[",
+    // Back slash, or \
+    "back-slash": "\\",
+    // Close bracket, or ]
+    "close-bracket": "]",
+    // Apostrophe, or Quote, or '
+    quote: "'",
+    apostrophe: "'",
+    // NUMPAD 0-9
+    "num-0": "0",
+    "num-1": "1",
+    "num-2": "2",
+    "num-3": "3",
+    "num-4": "4",
+    "num-5": "5",
+    "num-6": "6",
+    "num-7": "7",
+    "num-8": "8",
+    "num-9": "9",
+    // F1-F25
+    f1: "F1",
+    f2: "F2",
+    f3: "F3",
+    f4: "F4",
+    f5: "F5",
+    f6: "F6",
+    f7: "F7",
+    f8: "F8",
+    f9: "F9",
+    f10: "F10",
+    f11: "F11",
+    f12: "F12",
+    f13: "F13",
+    f14: "F14",
+    f15: "F15",
+    f16: "F16",
+    f17: "F17",
+    f18: "F18",
+    f19: "F19",
+    f20: "F20",
+    f21: "F21",
+    f22: "F22",
+    f23: "F23",
+    f24: "F24",
+    f25: "F25"
+  };
+  utilKeybinding.keyCodes = {
+    // Backspace key, on Mac: ⌫ (Backspace)
+    "\u232B": 8,
+    backspace: 8,
+    // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
+    "\u21E5": 9,
+    "\u21C6": 9,
+    tab: 9,
+    // Return key, ↩
+    "\u21A9": 13,
+    "\u21B5": 13,
+    "\u23CE": 13,
+    "return": 13,
+    enter: 13,
+    "\u2305": 13,
+    // Pause/Break key
+    "pause": 19,
+    "pause-break": 19,
+    // Caps Lock key, ⇪
+    "\u21EA": 20,
+    caps: 20,
+    "caps-lock": 20,
+    // Escape key, on Mac: ⎋, on Windows: Esc
+    "\u238B": 27,
+    escape: 27,
+    esc: 27,
+    // Space key
+    space: 32,
+    // Page-Up key, or pgup, on Mac: ↖
+    "\u2196": 33,
+    pgup: 33,
+    "page-up": 33,
+    // Page-Down key, or pgdown, on Mac: ↘
+    "\u2198": 34,
+    pgdown: 34,
+    "page-down": 34,
+    // END key, on Mac: ⇟
+    "\u21DF": 35,
+    end: 35,
+    // HOME key, on Mac: ⇞
+    "\u21DE": 36,
+    home: 36,
+    // Insert key, or ins
+    ins: 45,
+    insert: 45,
+    // Delete key, on Mac: ⌦ (Delete)
+    "\u2326": 46,
+    del: 46,
+    "delete": 46,
+    // Left Arrow Key, or ←
+    "\u2190": 37,
+    left: 37,
+    "arrow-left": 37,
+    // Up Arrow Key, or ↑
+    "\u2191": 38,
+    up: 38,
+    "arrow-up": 38,
+    // Right Arrow Key, or →
+    "\u2192": 39,
+    right: 39,
+    "arrow-right": 39,
+    // Up Arrow Key, or ↓
+    "\u2193": 40,
+    down: 40,
+    "arrow-down": 40,
+    // odities, printing characters that come out wrong:
+    // Firefox Equals
+    "ffequals": 61,
+    // Num-Multiply, or *
+    "*": 106,
+    star: 106,
+    asterisk: 106,
+    multiply: 106,
+    // Num-Plus or +
+    "+": 107,
+    "plus": 107,
+    // Num-Subtract, or -
+    "-": 109,
+    subtract: 109,
+    // Vertical Bar / Pipe
+    "|": 124,
+    // Firefox Plus
+    "ffplus": 171,
+    // Firefox Minus
+    "ffminus": 173,
+    // Semicolon
+    ";": 186,
+    semicolon: 186,
+    // = or equals
+    "=": 187,
+    "equals": 187,
+    // Comma, or ,
+    ",": 188,
+    comma: 188,
+    // Dash / Underscore key
+    "dash": 189,
+    // Period, or ., or full-stop
+    ".": 190,
+    period: 190,
+    "full-stop": 190,
+    // Slash, or /, or forward-slash
+    "/": 191,
+    slash: 191,
+    "forward-slash": 191,
+    // Tick, or `, or back-quote
+    "`": 192,
+    tick: 192,
+    "back-quote": 192,
+    // Open bracket, or [
+    "[": 219,
+    "open-bracket": 219,
+    // Back slash, or \
+    "\\": 220,
+    "back-slash": 220,
+    // Close bracket, or ]
+    "]": 221,
+    "close-bracket": 221,
+    // Apostrophe, or Quote, or '
+    "'": 222,
+    quote: 222,
+    apostrophe: 222
   };
+  var i = 95;
+  var n = 0;
+  while (++i < 106) {
+    utilKeybinding.keyCodes["num-" + n] = i;
+    ++n;
+  }
+  i = 47;
+  n = 0;
+  while (++i < 58) {
+    utilKeybinding.keyCodes[n] = i;
+    ++n;
+  }
+  i = 111;
+  n = 1;
+  while (++i < 136) {
+    utilKeybinding.keyCodes["f" + n] = i;
+    ++n;
+  }
+  i = 64;
+  while (++i < 91) {
+    utilKeybinding.keyCodes[String.fromCharCode(i).toLowerCase()] = i;
+  }
 
-  // node_modules/polyclip-ts/dist/sweep-line.js
-  var SweepLine = class {
-    constructor(queue, comparator = Segment.compare) {
-      __publicField(this, "queue");
-      __publicField(this, "tree");
-      __publicField(this, "segments");
-      this.queue = queue;
-      this.tree = new SplayTreeSet(comparator);
-      this.segments = [];
-    }
-    process(event) {
-      const segment = event.segment;
-      const newEvents = [];
-      if (event.consumedBy) {
-        if (event.isLeft)
-          this.queue.delete(event.otherSE);
-        else
-          this.tree.delete(segment);
-        return newEvents;
-      }
-      if (event.isLeft)
-        this.tree.add(segment);
-      let prevSeg = segment;
-      let nextSeg = segment;
-      do {
-        prevSeg = this.tree.lastBefore(prevSeg);
-      } while (prevSeg != null && prevSeg.consumedBy != void 0);
-      do {
-        nextSeg = this.tree.firstAfter(nextSeg);
-      } while (nextSeg != null && nextSeg.consumedBy != void 0);
-      if (event.isLeft) {
-        let prevMySplitter = null;
-        if (prevSeg) {
-          const prevInter = prevSeg.getIntersection(segment);
-          if (prevInter !== null) {
-            if (!segment.isAnEndpoint(prevInter))
-              prevMySplitter = prevInter;
-            if (!prevSeg.isAnEndpoint(prevInter)) {
-              const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);
-              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                newEvents.push(newEventsFromSplit[i3]);
-              }
-            }
-          }
-        }
-        let nextMySplitter = null;
-        if (nextSeg) {
-          const nextInter = nextSeg.getIntersection(segment);
-          if (nextInter !== null) {
-            if (!segment.isAnEndpoint(nextInter))
-              nextMySplitter = nextInter;
-            if (!nextSeg.isAnEndpoint(nextInter)) {
-              const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);
-              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                newEvents.push(newEventsFromSplit[i3]);
-              }
-            }
-          }
-        }
-        if (prevMySplitter !== null || nextMySplitter !== null) {
-          let mySplitter = null;
-          if (prevMySplitter === null)
-            mySplitter = nextMySplitter;
-          else if (nextMySplitter === null)
-            mySplitter = prevMySplitter;
-          else {
-            const cmpSplitters = SweepEvent.comparePoints(prevMySplitter, nextMySplitter);
-            mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;
-          }
-          this.queue.delete(segment.rightSE);
-          newEvents.push(segment.rightSE);
-          const newEventsFromSplit = segment.split(mySplitter);
-          for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-            newEvents.push(newEventsFromSplit[i3]);
-          }
-        }
-        if (newEvents.length > 0) {
-          this.tree.delete(segment);
-          newEvents.push(event);
-        } else {
-          this.segments.push(segment);
-          segment.prev = prevSeg;
-        }
-      } else {
-        if (prevSeg && nextSeg) {
-          const inter = prevSeg.getIntersection(nextSeg);
-          if (inter !== null) {
-            if (!prevSeg.isAnEndpoint(inter)) {
-              const newEventsFromSplit = this._splitSafely(prevSeg, inter);
-              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                newEvents.push(newEventsFromSplit[i3]);
-              }
-            }
-            if (!nextSeg.isAnEndpoint(inter)) {
-              const newEventsFromSplit = this._splitSafely(nextSeg, inter);
-              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
-                newEvents.push(newEventsFromSplit[i3]);
-              }
-            }
-          }
-        }
-        this.tree.delete(segment);
+  // modules/util/object.js
+  function utilObjectOmit(obj, omitKeys) {
+    return Object.keys(obj).reduce(function(result, key) {
+      if (omitKeys.indexOf(key) === -1) {
+        result[key] = obj[key];
       }
-      return newEvents;
+      return result;
+    }, {});
+  }
+
+  // modules/util/rebind.js
+  function utilRebind(target, source) {
+    var i3 = 1, n3 = arguments.length, method;
+    while (++i3 < n3) {
+      target[method = arguments[i3]] = d3_rebind(target, source, source[method]);
     }
-    /* Safely split a segment that is currently in the datastructures
-     * IE - a segment other than the one that is currently being processed. */
-    _splitSafely(seg, pt2) {
-      this.tree.delete(seg);
-      const rightSE = seg.rightSE;
-      this.queue.delete(rightSE);
-      const newEvents = seg.split(pt2);
-      newEvents.push(rightSE);
-      if (seg.consumedBy === void 0)
-        this.tree.add(seg);
-      return newEvents;
+    return target;
+  }
+  function d3_rebind(target, source, method) {
+    return function() {
+      var value = method.apply(source, arguments);
+      return value === source ? target : value;
+    };
+  }
+
+  // modules/util/session_mutex.js
+  function utilSessionMutex(name) {
+    var mutex = {};
+    var intervalID;
+    function renew() {
+      if (typeof window === "undefined") return;
+      var expires = /* @__PURE__ */ new Date();
+      expires.setSeconds(expires.getSeconds() + 5);
+      document.cookie = name + "=1; expires=" + expires.toUTCString() + "; sameSite=strict";
     }
-  };
+    mutex.lock = function() {
+      if (intervalID) return true;
+      var cookie = document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + name + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1");
+      if (cookie) return false;
+      renew();
+      intervalID = window.setInterval(renew, 4e3);
+      return true;
+    };
+    mutex.unlock = function() {
+      if (!intervalID) return;
+      document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; sameSite=strict";
+      clearInterval(intervalID);
+      intervalID = null;
+    };
+    mutex.locked = function() {
+      return !!intervalID;
+    };
+    return mutex;
+  }
 
-  // node_modules/polyclip-ts/dist/operation.js
-  var Operation = class {
-    constructor() {
-      __publicField(this, "type");
-      __publicField(this, "numMultiPolys");
+  // modules/util/tiler.js
+  function utilTiler() {
+    var _size = [256, 256];
+    var _scale = 256;
+    var _tileSize = 256;
+    var _zoomExtent = [0, 20];
+    var _translate = [_size[0] / 2, _size[1] / 2];
+    var _margin = 0;
+    var _skipNullIsland = false;
+    function clamp3(num, min3, max3) {
+      return Math.max(min3, Math.min(num, max3));
     }
-    run(type2, geom, moreGeoms) {
-      operation.type = type2;
-      const multipolys = [new MultiPolyIn(geom, true)];
-      for (let i3 = 0, iMax = moreGeoms.length; i3 < iMax; i3++) {
-        multipolys.push(new MultiPolyIn(moreGeoms[i3], false));
-      }
-      operation.numMultiPolys = multipolys.length;
-      if (operation.type === "difference") {
-        const subject = multipolys[0];
-        let i3 = 1;
-        while (i3 < multipolys.length) {
-          if (getBboxOverlap(multipolys[i3].bbox, subject.bbox) !== null)
-            i3++;
-          else
-            multipolys.splice(i3, 1);
-        }
+    function nearNullIsland(tile) {
+      var x2 = tile[0];
+      var y2 = tile[1];
+      var z2 = tile[2];
+      if (z2 >= 7) {
+        var center = Math.pow(2, z2 - 1);
+        var width = Math.pow(2, z2 - 6);
+        var min3 = center - width / 2;
+        var max3 = center + width / 2 - 1;
+        return x2 >= min3 && x2 <= max3 && y2 >= min3 && y2 <= max3;
       }
-      if (operation.type === "intersection") {
-        for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
-          const mpA = multipolys[i3];
-          for (let j2 = i3 + 1, jMax = multipolys.length; j2 < jMax; j2++) {
-            if (getBboxOverlap(mpA.bbox, multipolys[j2].bbox) === null)
-              return [];
+      return false;
+    }
+    function tiler8() {
+      var z2 = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
+      var z0 = clamp3(Math.round(z2), _zoomExtent[0], _zoomExtent[1]);
+      var tileMin = 0;
+      var tileMax = Math.pow(2, z0) - 1;
+      var log2ts = Math.log(_tileSize) * Math.LOG2E;
+      var k2 = Math.pow(2, z2 - z0 + log2ts);
+      var origin = [
+        (_translate[0] - _scale / 2) / k2,
+        (_translate[1] - _scale / 2) / k2
+      ];
+      var cols = range(
+        clamp3(Math.floor(-origin[0]) - _margin, tileMin, tileMax + 1),
+        clamp3(Math.ceil(_size[0] / k2 - origin[0]) + _margin, tileMin, tileMax + 1)
+      );
+      var rows = range(
+        clamp3(Math.floor(-origin[1]) - _margin, tileMin, tileMax + 1),
+        clamp3(Math.ceil(_size[1] / k2 - origin[1]) + _margin, tileMin, tileMax + 1)
+      );
+      var tiles = [];
+      for (var i3 = 0; i3 < rows.length; i3++) {
+        var y2 = rows[i3];
+        for (var j2 = 0; j2 < cols.length; j2++) {
+          var x2 = cols[j2];
+          if (i3 >= _margin && i3 <= rows.length - _margin && j2 >= _margin && j2 <= cols.length - _margin) {
+            tiles.unshift([x2, y2, z0]);
+          } else {
+            tiles.push([x2, y2, z0]);
           }
         }
       }
-      const queue = new SplayTreeSet(SweepEvent.compare);
-      for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
-        const sweepEvents = multipolys[i3].getSweepEvents();
-        for (let j2 = 0, jMax = sweepEvents.length; j2 < jMax; j2++) {
-          queue.add(sweepEvents[j2]);
-        }
-      }
-      const sweepLine = new SweepLine(queue);
-      let evt = null;
-      if (queue.size != 0) {
-        evt = queue.first();
-        queue.delete(evt);
-      }
-      while (evt) {
-        const newEvents = sweepLine.process(evt);
-        for (let i3 = 0, iMax = newEvents.length; i3 < iMax; i3++) {
-          const evt2 = newEvents[i3];
-          if (evt2.consumedBy === void 0)
-            queue.add(evt2);
-        }
-        if (queue.size != 0) {
-          evt = queue.first();
-          queue.delete(evt);
-        } else {
-          evt = null;
-        }
-      }
-      precision.reset();
-      const ringsOut = RingOut.factory(sweepLine.segments);
-      const result = new MultiPolyOut(ringsOut);
-      return result.getGeom();
+      tiles.translate = origin;
+      tiles.scale = k2;
+      return tiles;
     }
-  };
-  var operation = new Operation();
-  var operation_default = operation;
-
-  // node_modules/polyclip-ts/dist/index.js
-  var union = (geom, ...moreGeoms) => operation_default.run("union", geom, moreGeoms);
-  var difference = (geom, ...moreGeoms) => operation_default.run("difference", geom, moreGeoms);
-  var setPrecision = precision.set;
-
-  // node_modules/@rapideditor/location-conflation/index.mjs
-  var import_geojson_area = __toESM(require_geojson_area(), 1);
-  var import_circle_to_polygon = __toESM(require_circle_to_polygon(), 1);
-  var import_geojson_precision = __toESM(require_geojson_precision(), 1);
-  var import_json_stringify_pretty_compact = __toESM(require_json_stringify_pretty_compact(), 1);
-  var LocationConflation = class {
-    // constructor
-    //
-    // `fc`  Optional FeatureCollection of known features
-    //
-    // Optionally pass a GeoJSON FeatureCollection of known features which we can refer to later.
-    // Each feature must have a filename-like `id`, for example: `something.geojson`
-    //
-    // {
-    //   "type": "FeatureCollection"
-    //   "features": [
-    //     {
-    //       "type": "Feature",
-    //       "id": "philly_metro.geojson",
-    //       "properties": { … },
-    //       "geometry": { … }
-    //     }
-    //   ]
-    // }
-    constructor(fc) {
-      this._cache = {};
-      this.strict = true;
-      if (fc && fc.type === "FeatureCollection" && Array.isArray(fc.features)) {
-        fc.features.forEach((feature3) => {
-          feature3.properties = feature3.properties || {};
-          let props = feature3.properties;
-          let id2 = feature3.id || props.id;
-          if (!id2 || !/^\S+\.geojson$/i.test(id2)) return;
-          id2 = id2.toLowerCase();
-          feature3.id = id2;
-          props.id = id2;
-          if (!props.area) {
-            const area = import_geojson_area.default.geometry(feature3.geometry) / 1e6;
-            props.area = Number(area.toFixed(2));
+    tiler8.getTiles = function(projection2) {
+      var origin = [
+        projection2.scale() * Math.PI - projection2.translate()[0],
+        projection2.scale() * Math.PI - projection2.translate()[1]
+      ];
+      this.size(projection2.clipExtent()[1]).scale(projection2.scale() * 2 * Math.PI).translate(projection2.translate());
+      var tiles = tiler8();
+      var ts = tiles.scale;
+      return tiles.map(function(tile) {
+        if (_skipNullIsland && nearNullIsland(tile)) {
+          return false;
+        }
+        var x2 = tile[0] * ts - origin[0];
+        var y2 = tile[1] * ts - origin[1];
+        return {
+          id: tile.toString(),
+          xyz: tile,
+          extent: geoExtent(
+            projection2.invert([x2, y2 + ts]),
+            projection2.invert([x2 + ts, y2])
+          )
+        };
+      }).filter(Boolean);
+    };
+    tiler8.getGeoJSON = function(projection2) {
+      var features = tiler8.getTiles(projection2).map(function(tile) {
+        return {
+          type: "Feature",
+          properties: {
+            id: tile.id,
+            name: tile.id
+          },
+          geometry: {
+            type: "Polygon",
+            coordinates: [tile.extent.polygon()]
           }
-          this._cache[id2] = feature3;
-        });
-      }
-      let world = _cloneDeep(feature("Q2"));
-      world.geometry = {
-        type: "Polygon",
-        coordinates: [[[-180, -90], [180, -90], [180, 90], [-180, 90], [-180, -90]]]
+        };
+      });
+      return {
+        type: "FeatureCollection",
+        features
       };
-      world.id = "Q2";
-      world.properties.id = "Q2";
-      world.properties.area = import_geojson_area.default.geometry(world.geometry) / 1e6;
-      this._cache.Q2 = world;
-    }
-    // validateLocation
-    // `location`  The location to validate
-    //
-    // Pass a `location` value to validate
-    //
-    // Returns a result like:
-    //   {
-    //     type:     'point', 'geojson', or 'countrycoder'
-    //     location:  the queried location
-    //     id:        the stable identifier for the feature
-    //   }
-    // or `null` if the location is invalid
-    //
-    validateLocation(location) {
-      if (Array.isArray(location) && (location.length === 2 || location.length === 3)) {
-        const lon = location[0];
-        const lat = location[1];
-        const radius = location[2];
-        if (Number.isFinite(lon) && lon >= -180 && lon <= 180 && Number.isFinite(lat) && lat >= -90 && lat <= 90 && (location.length === 2 || Number.isFinite(radius) && radius > 0)) {
-          const id2 = "[" + location.toString() + "]";
-          return { type: "point", location, id: id2 };
-        }
-      } else if (typeof location === "string" && /^\S+\.geojson$/i.test(location)) {
-        const id2 = location.toLowerCase();
-        if (this._cache[id2]) {
-          return { type: "geojson", location, id: id2 };
-        }
-      } else if (typeof location === "string" || typeof location === "number") {
-        const feature3 = feature(location);
-        if (feature3) {
-          const id2 = feature3.properties.wikidata;
-          return { type: "countrycoder", location, id: id2 };
-        }
-      }
-      if (this.strict) {
-        throw new Error('validateLocation:  Invalid location: "'.concat(location, '".'));
-      } else {
-        return null;
-      }
-    }
-    // resolveLocation
-    // `location`  The location to resolve
-    //
-    // Pass a `location` value to resolve
-    //
-    // Returns a result like:
-    //   {
-    //     type:      'point', 'geojson', or 'countrycoder'
-    //     location:  the queried location
-    //     id:        a stable identifier for the feature
-    //     feature:   the resolved GeoJSON feature
-    //   }
-    //  or `null` if the location is invalid
-    //
-    resolveLocation(location) {
-      const valid = this.validateLocation(location);
-      if (!valid) return null;
-      const id2 = valid.id;
-      if (this._cache[id2]) {
-        return Object.assign(valid, { feature: this._cache[id2] });
+    };
+    tiler8.tileSize = function(val) {
+      if (!arguments.length) return _tileSize;
+      _tileSize = val;
+      return tiler8;
+    };
+    tiler8.zoomExtent = function(val) {
+      if (!arguments.length) return _zoomExtent;
+      _zoomExtent = val;
+      return tiler8;
+    };
+    tiler8.size = function(val) {
+      if (!arguments.length) return _size;
+      _size = val;
+      return tiler8;
+    };
+    tiler8.scale = function(val) {
+      if (!arguments.length) return _scale;
+      _scale = val;
+      return tiler8;
+    };
+    tiler8.translate = function(val) {
+      if (!arguments.length) return _translate;
+      _translate = val;
+      return tiler8;
+    };
+    tiler8.margin = function(val) {
+      if (!arguments.length) return _margin;
+      _margin = +val;
+      return tiler8;
+    };
+    tiler8.skipNullIsland = function(val) {
+      if (!arguments.length) return _skipNullIsland;
+      _skipNullIsland = val;
+      return tiler8;
+    };
+    return tiler8;
+  }
+
+  // modules/util/trigger_event.js
+  function utilTriggerEvent(target, type2, eventProperties) {
+    target.each(function() {
+      var evt = document.createEvent("HTMLEvents");
+      evt.initEvent(type2, true, true);
+      for (var prop in eventProperties) {
+        evt[prop] = eventProperties[prop];
       }
-      if (valid.type === "point") {
-        const lon = location[0];
-        const lat = location[1];
-        const radius = location[2] || 25;
-        const EDGES = 10;
-        const PRECISION = 3;
-        const area = Math.PI * radius * radius;
-        const feature3 = this._cache[id2] = (0, import_geojson_precision.default)({
-          type: "Feature",
-          id: id2,
-          properties: { id: id2, area: Number(area.toFixed(2)) },
-          geometry: (0, import_circle_to_polygon.default)([lon, lat], radius * 1e3, EDGES)
-          // km to m
-        }, PRECISION);
-        return Object.assign(valid, { feature: feature3 });
-      } else if (valid.type === "geojson") {
-      } else if (valid.type === "countrycoder") {
-        let feature3 = _cloneDeep(feature(id2));
-        let props = feature3.properties;
-        if (Array.isArray(props.members)) {
-          let aggregate = aggregateFeature(id2);
-          aggregate.geometry.coordinates = _clip([aggregate], "UNION").geometry.coordinates;
-          feature3.geometry = aggregate.geometry;
-        }
-        if (!props.area) {
-          const area = import_geojson_area.default.geometry(feature3.geometry) / 1e6;
-          props.area = Number(area.toFixed(2));
-        }
-        feature3.id = id2;
-        props.id = id2;
-        this._cache[id2] = feature3;
-        return Object.assign(valid, { feature: feature3 });
+      this.dispatchEvent(evt);
+    });
+  }
+
+  // modules/util/units.js
+  var OSM_PRECISION = 7;
+  function displayLength(m2, isImperial) {
+    var d2 = m2 * (isImperial ? 3.28084 : 1);
+    var unit2;
+    if (isImperial) {
+      if (d2 >= 5280) {
+        d2 /= 5280;
+        unit2 = "miles";
+      } else {
+        unit2 = "feet";
       }
-      if (this.strict) {
-        throw new Error("resolveLocation:  Couldn't resolve location \"".concat(location, '".'));
+    } else {
+      if (d2 >= 1e3) {
+        d2 /= 1e3;
+        unit2 = "kilometers";
       } else {
-        return null;
+        unit2 = "meters";
       }
     }
-    // validateLocationSet
-    // `locationSet`  the locationSet to validate
-    //
-    // Pass a locationSet Object to validate like:
-    //   {
-    //     include: [ Array of locations ],
-    //     exclude: [ Array of locations ]
-    //   }
-    //
-    // Returns a result like:
-    //   {
-    //     type:         'locationset'
-    //     locationSet:  the queried locationSet
-    //     id:           the stable identifier for the feature
-    //   }
-    // or `null` if the locationSet is invalid
-    //
-    validateLocationSet(locationSet) {
-      locationSet = locationSet || {};
-      const validator = this.validateLocation.bind(this);
-      let include = (locationSet.include || []).map(validator).filter(Boolean);
-      let exclude = (locationSet.exclude || []).map(validator).filter(Boolean);
-      if (!include.length) {
-        if (this.strict) {
-          throw new Error("validateLocationSet:  LocationSet includes nothing.");
-        } else {
-          locationSet.include = ["Q2"];
-          include = [{ type: "countrycoder", location: "Q2", id: "Q2" }];
-        }
+    return _t("units." + unit2, {
+      quantity: d2.toLocaleString(_mainLocalizer.localeCode(), {
+        maximumSignificantDigits: 4
+      })
+    });
+  }
+  function displayArea(m2, isImperial) {
+    var locale2 = _mainLocalizer.localeCode();
+    var d2 = m2 * (isImperial ? 10.7639111056 : 1);
+    var d1, d22, area;
+    var unit1 = "";
+    var unit2 = "";
+    if (isImperial) {
+      if (d2 >= 6969600) {
+        d1 = d2 / 27878400;
+        unit1 = "square_miles";
+      } else {
+        d1 = d2;
+        unit1 = "square_feet";
       }
-      include.sort(_sortLocations);
-      let id2 = "+[" + include.map((d2) => d2.id).join(",") + "]";
-      if (exclude.length) {
-        exclude.sort(_sortLocations);
-        id2 += "-[" + exclude.map((d2) => d2.id).join(",") + "]";
+      if (d2 > 4356 && d2 < 4356e4) {
+        d22 = d2 / 43560;
+        unit2 = "acres";
       }
-      return { type: "locationset", locationSet, id: id2 };
-    }
-    // resolveLocationSet
-    // `locationSet`  the locationSet to resolve
-    //
-    // Pass a locationSet Object to validate like:
-    //   {
-    //     include: [ Array of locations ],
-    //     exclude: [ Array of locations ]
-    //   }
-    //
-    // Returns a result like:
-    //   {
-    //     type:         'locationset'
-    //     locationSet:  the queried locationSet
-    //     id:           the stable identifier for the feature
-    //     feature:      the resolved GeoJSON feature
-    //   }
-    // or `null` if the locationSet is invalid
-    //
-    resolveLocationSet(locationSet) {
-      locationSet = locationSet || {};
-      const valid = this.validateLocationSet(locationSet);
-      if (!valid) return null;
-      const id2 = valid.id;
-      if (this._cache[id2]) {
-        return Object.assign(valid, { feature: this._cache[id2] });
+    } else {
+      if (d2 >= 25e4) {
+        d1 = d2 / 1e6;
+        unit1 = "square_kilometers";
+      } else {
+        d1 = d2;
+        unit1 = "square_meters";
       }
-      const resolver = this.resolveLocation.bind(this);
-      const includes = (locationSet.include || []).map(resolver).filter(Boolean);
-      const excludes = (locationSet.exclude || []).map(resolver).filter(Boolean);
-      if (includes.length === 1 && excludes.length === 0) {
-        return Object.assign(valid, { feature: includes[0].feature });
+      if (d2 > 1e3 && d2 < 1e7) {
+        d22 = d2 / 1e4;
+        unit2 = "hectares";
       }
-      const includeGeoJSON = _clip(includes.map((d2) => d2.feature), "UNION");
-      const excludeGeoJSON = _clip(excludes.map((d2) => d2.feature), "UNION");
-      let resultGeoJSON = excludeGeoJSON ? _clip([includeGeoJSON, excludeGeoJSON], "DIFFERENCE") : includeGeoJSON;
-      const area = import_geojson_area.default.geometry(resultGeoJSON.geometry) / 1e6;
-      resultGeoJSON.id = id2;
-      resultGeoJSON.properties = { id: id2, area: Number(area.toFixed(2)) };
-      this._cache[id2] = resultGeoJSON;
-      return Object.assign(valid, { feature: resultGeoJSON });
     }
-    // stringify
-    // convenience method to prettyStringify the given object
-    stringify(obj, options2) {
-      return (0, import_json_stringify_pretty_compact.default)(obj, options2);
+    area = _t("units." + unit1, {
+      quantity: d1.toLocaleString(locale2, {
+        maximumSignificantDigits: 4
+      })
+    });
+    if (d22) {
+      return _t("units.area_pair", {
+        area1: area,
+        area2: _t("units." + unit2, {
+          quantity: d22.toLocaleString(locale2, {
+            maximumSignificantDigits: 2
+          })
+        })
+      });
+    } else {
+      return area;
     }
-  };
-  function _clip(features, which) {
-    if (!Array.isArray(features) || !features.length) return null;
-    const fn = { UNION: union, DIFFERENCE: difference }[which];
-    const args = features.map((feature3) => feature3.geometry.coordinates);
-    const coords = fn.apply(null, args);
-    return {
-      type: "Feature",
-      properties: {},
-      geometry: {
-        type: whichType(coords),
-        coordinates: coords
+  }
+  function wrap(x2, min3, max3) {
+    var d2 = max3 - min3;
+    return ((x2 - min3) % d2 + d2) % d2 + min3;
+  }
+  function clamp(x2, min3, max3) {
+    return Math.max(min3, Math.min(x2, max3));
+  }
+  function roundToDecimal(target, decimalPlace) {
+    target = Number(target);
+    decimalPlace = Number(decimalPlace);
+    const factor = Math.pow(10, decimalPlace);
+    return Math.round(target * factor) / factor;
+  }
+  function displayCoordinate(deg, pos, neg) {
+    var displayCoordinate2;
+    var locale2 = _mainLocalizer.localeCode();
+    var degreesFloor = Math.floor(Math.abs(deg));
+    var min3 = (Math.abs(deg) - degreesFloor) * 60;
+    var minFloor = Math.floor(min3);
+    var sec = (min3 - minFloor) * 60;
+    var fix = roundToDecimal(sec, 8);
+    var secRounded = roundToDecimal(fix, 0);
+    if (secRounded === 60) {
+      secRounded = 0;
+      minFloor += 1;
+      if (minFloor === 60) {
+        minFloor = 0;
+        degreesFloor += 1;
       }
-    };
-    function whichType(coords2) {
-      const a2 = Array.isArray(coords2);
-      const b2 = a2 && Array.isArray(coords2[0]);
-      const c2 = b2 && Array.isArray(coords2[0][0]);
-      const d2 = c2 && Array.isArray(coords2[0][0][0]);
-      return d2 ? "MultiPolygon" : "Polygon";
+    }
+    displayCoordinate2 = _t("units.arcdegrees", {
+      quantity: degreesFloor.toLocaleString(locale2)
+    }) + (minFloor !== 0 || secRounded !== 0 ? _t("units.arcminutes", {
+      quantity: minFloor.toLocaleString(locale2)
+    }) : "") + (secRounded !== 0 ? _t("units.arcseconds", {
+      quantity: secRounded.toLocaleString(locale2)
+    }) : "");
+    if (deg === 0) {
+      return displayCoordinate2;
+    } else {
+      return _t("units.coordinate", {
+        coordinate: displayCoordinate2,
+        direction: _t("units." + (deg > 0 ? pos : neg))
+      });
     }
   }
-  function _cloneDeep(obj) {
-    return JSON.parse(JSON.stringify(obj));
+  function dmsCoordinatePair(coord2) {
+    return _t("units.coordinate_pair", {
+      latitude: displayCoordinate(clamp(coord2[1], -90, 90), "north", "south"),
+      longitude: displayCoordinate(wrap(coord2[0], -180, 180), "east", "west")
+    });
   }
-  function _sortLocations(a2, b2) {
-    const rank = { countrycoder: 1, geojson: 2, point: 3 };
-    const aRank = rank[a2.type];
-    const bRank = rank[b2.type];
-    return aRank > bRank ? 1 : aRank < bRank ? -1 : a2.id.localeCompare(b2.id);
+  function decimalCoordinatePair(coord2) {
+    return _t("units.coordinate_pair", {
+      latitude: clamp(coord2[1], -90, 90).toFixed(OSM_PRECISION),
+      longitude: wrap(coord2[0], -180, 180).toFixed(OSM_PRECISION)
+    });
   }
-
-  // modules/core/LocationManager.js
-  var import_which_polygon2 = __toESM(require_which_polygon());
-  var import_geojson_area2 = __toESM(require_geojson_area());
-  var _loco = new LocationConflation();
-  var LocationManager = class {
-    /**
-     * @constructor
-     */
-    constructor() {
-      this._wp = null;
-      this._resolved = /* @__PURE__ */ new Map();
-      this._knownLocationSets = /* @__PURE__ */ new Map();
-      this._locationIncludedIn = /* @__PURE__ */ new Map();
-      this._locationExcludedIn = /* @__PURE__ */ new Map();
-      const world = { locationSet: { include: ["Q2"] } };
-      this._resolveLocationSet(world);
-      this._rebuildIndex();
-    }
-    /**
-     * _validateLocationSet
-     * Pass an Object with a `locationSet` property.
-     * Validates the `locationSet` and sets a `locationSetID` property on the object.
-     * To avoid so much computation we only resolve the include and exclude regions, but not the locationSet itself.
-     *
-     * Use `_resolveLocationSet()` instead if you need to resolve geojson of locationSet, for example to render it.
-     * Note: You need to call `_rebuildIndex()` after you're all finished validating the locationSets.
-     *
-     * @param  `obj`  Object to check, it should have `locationSet` property
-     */
-    _validateLocationSet(obj) {
-      if (obj.locationSetID) return;
-      try {
-        let locationSet = obj.locationSet;
-        if (!locationSet) {
-          throw new Error("object missing locationSet property");
+  function dmsMatcher(q2) {
+    const matchers = [
+      // D M SS , D M SS  ex: 35 11 10.1 , 136 49 53.8
+      {
+        condition: /^\s*(-?)\s*(\d+)\s+(\d+)\s+(\d+\.?\d*)\s*\,\s*(-?)\s*(\d+)\s+(\d+)\s+(\d+\.?\d*)\s*$/,
+        parser: function(q3) {
+          const match = this.condition.exec(q3);
+          const lat = +match[2] + +match[3] / 60 + +match[4] / 3600;
+          const lng = +match[6] + +match[7] / 60 + +match[8] / 3600;
+          const isNegLat = match[1] === "-" ? -lat : lat;
+          const isNegLng = match[5] === "-" ? -lng : lng;
+          const d2 = [isNegLat, isNegLng];
+          return d2;
         }
-        if (!locationSet.include) {
-          locationSet.include = ["Q2"];
+      },
+      // D MM , D MM ex: 35 11.1683 , 136 49.8966
+      {
+        condition: /^\s*(-?)\s*(\d+)\s+(\d+\.?\d*)\s*\,\s*(-?)\s*(\d+)\s+(\d+\.?\d*)\s*$/,
+        parser: function(q3) {
+          const match = this.condition.exec(q3);
+          const lat = +match[2] + +match[3] / 60;
+          const lng = +match[5] + +match[6] / 60;
+          const isNegLat = match[1] === "-" ? -lat : lat;
+          const isNegLng = match[4] === "-" ? -lng : lng;
+          const d2 = [isNegLat, isNegLng];
+          return d2;
         }
-        const locationSetID = _loco.validateLocationSet(locationSet).id;
-        obj.locationSetID = locationSetID;
-        if (this._knownLocationSets.has(locationSetID)) return;
-        let area = 0;
-        (locationSet.include || []).forEach((location) => {
-          const locationID = _loco.validateLocation(location).id;
-          let geojson = this._resolved.get(locationID);
-          if (!geojson) {
-            geojson = _loco.resolveLocation(location).feature;
-            this._resolved.set(locationID, geojson);
-          }
-          area += geojson.properties.area;
-          let s2 = this._locationIncludedIn.get(locationID);
-          if (!s2) {
-            s2 = /* @__PURE__ */ new Set();
-            this._locationIncludedIn.set(locationID, s2);
-          }
-          s2.add(locationSetID);
-        });
-        (locationSet.exclude || []).forEach((location) => {
-          const locationID = _loco.validateLocation(location).id;
-          let geojson = this._resolved.get(locationID);
-          if (!geojson) {
-            geojson = _loco.resolveLocation(location).feature;
-            this._resolved.set(locationID, geojson);
-          }
-          area -= geojson.properties.area;
-          let s2 = this._locationExcludedIn.get(locationID);
-          if (!s2) {
-            s2 = /* @__PURE__ */ new Set();
-            this._locationExcludedIn.set(locationID, s2);
-          }
-          s2.add(locationSetID);
-        });
-        this._knownLocationSets.set(locationSetID, area);
-      } catch {
-        obj.locationSet = { include: ["Q2"] };
-        obj.locationSetID = "+[Q2]";
+      }
+    ];
+    for (const matcher of matchers) {
+      if (matcher.condition.test(q2)) {
+        return matcher.parser(q2);
       }
     }
-    /**
-     * _resolveLocationSet
-     * Does everything that `_validateLocationSet()` does, but then "resolves" the locationSet into GeoJSON.
-     * This step is a bit more computationally expensive, so really only needed if you intend to render the shape.
-     *
-     * Note: You need to call `_rebuildIndex()` after you're all finished validating the locationSets.
-     *
-     * @param  `obj`  Object to check, it should have `locationSet` property
-     */
-    _resolveLocationSet(obj) {
-      this._validateLocationSet(obj);
-      if (this._resolved.has(obj.locationSetID)) return;
-      try {
-        const result = _loco.resolveLocationSet(obj.locationSet);
-        const locationSetID = result.id;
-        obj.locationSetID = locationSetID;
-        if (!result.feature.geometry.coordinates.length || !result.feature.properties.area) {
-          throw new Error("locationSet ".concat(locationSetID, " resolves to an empty feature."));
+    return null;
+  }
+
+  // modules/core/localizer.js
+  var _mainLocalizer = coreLocalizer();
+  var _t = _mainLocalizer.t;
+  function coreLocalizer() {
+    let localizer = {};
+    let _dataLanguages = {};
+    let _dataLocales = {};
+    let _localeStrings = {};
+    let _localeCode = "en-US";
+    let _localeCodes = ["en-US", "en"];
+    let _languageCode = "en";
+    let _textDirection = "ltr";
+    let _usesMetric = false;
+    let _languageNames = {};
+    let _scriptNames = {};
+    localizer.localeCode = () => _localeCode;
+    localizer.localeCodes = () => _localeCodes;
+    localizer.languageCode = () => _languageCode;
+    localizer.textDirection = () => _textDirection;
+    localizer.usesMetric = () => _usesMetric;
+    localizer.languageNames = () => _languageNames;
+    localizer.scriptNames = () => _scriptNames;
+    let _preferredLocaleCodes = [];
+    localizer.preferredLocaleCodes = function(codes) {
+      if (!arguments.length) return _preferredLocaleCodes;
+      if (typeof codes === "string") {
+        _preferredLocaleCodes = codes.split(/,|;| /gi).filter(Boolean);
+      } else {
+        _preferredLocaleCodes = codes;
+      }
+      return localizer;
+    };
+    var _loadPromise;
+    localizer.ensureLoaded = () => {
+      if (_loadPromise) return _loadPromise;
+      let filesToFetch = [
+        "languages",
+        // load the list of languages
+        "locales"
+        // load the list of supported locales
+      ];
+      const localeDirs = {
+        general: "locales",
+        tagging: presetsCdnUrl + "dist/translations"
+      };
+      let fileMap = _mainFileFetcher.fileMap();
+      for (let scopeId in localeDirs) {
+        const key = "locales_index_".concat(scopeId);
+        if (!fileMap[key]) {
+          fileMap[key] = localeDirs[scopeId] + "/index.min.json";
         }
-        let geojson = JSON.parse(JSON.stringify(result.feature));
-        geojson.id = locationSetID;
-        geojson.properties.id = locationSetID;
-        this._resolved.set(locationSetID, geojson);
-      } catch {
-        obj.locationSet = { include: ["Q2"] };
-        obj.locationSetID = "+[Q2]";
+        filesToFetch.push(key);
       }
-    }
-    /**
-     * _rebuildIndex
-     * Rebuilds the whichPolygon index with whatever features have been resolved into GeoJSON.
-     */
-    _rebuildIndex() {
-      this._wp = (0, import_which_polygon2.default)({ features: [...this._resolved.values()] });
-    }
-    /**
-     * mergeCustomGeoJSON
-     * Accepts a FeatureCollection-like object containing custom locations
-     * Each feature must have a filename-like `id`, for example: `something.geojson`
-     * {
-     *   "type": "FeatureCollection"
-     *   "features": [
-     *     {
-     *       "type": "Feature",
-     *       "id": "philly_metro.geojson",
-     *       "properties": { … },
-     *       "geometry": { … }
-     *     }
-     *   ]
-     * }
-     *
-     * @param  `fc`  FeatureCollection-like Object containing custom locations
-     */
-    mergeCustomGeoJSON(fc) {
-      if (!fc || fc.type !== "FeatureCollection" || !Array.isArray(fc.features)) return;
-      fc.features.forEach((feature3) => {
-        feature3.properties = feature3.properties || {};
-        let props = feature3.properties;
-        let id2 = feature3.id || props.id;
-        if (!id2 || !/^\S+\.geojson$/i.test(id2)) return;
-        id2 = id2.toLowerCase();
-        feature3.id = id2;
-        props.id = id2;
-        if (!props.area) {
-          const area = import_geojson_area2.default.geometry(feature3.geometry) / 1e6;
-          props.area = Number(area.toFixed(2));
+      return _loadPromise = Promise.all(filesToFetch.map((key) => _mainFileFetcher.get(key))).then((results) => {
+        _dataLanguages = results[0];
+        _dataLocales = results[1];
+        let indexes = results.slice(2);
+        let requestedLocales = (_preferredLocaleCodes || []).concat(utilDetect().browserLocales).concat(["en"]);
+        _localeCodes = localesToUseFrom(requestedLocales);
+        _localeCode = _localeCodes[0];
+        let loadStringsPromises = [];
+        indexes.forEach((index, i3) => {
+          const fullCoverageIndex = _localeCodes.findIndex(function(locale2) {
+            return index[locale2] && index[locale2].pct === 1;
+          });
+          _localeCodes.slice(0, fullCoverageIndex + 1).forEach(function(code) {
+            let scopeId = Object.keys(localeDirs)[i3];
+            let directory = Object.values(localeDirs)[i3];
+            if (index[code]) loadStringsPromises.push(localizer.loadLocale(code, scopeId, directory));
+          });
+        });
+        return Promise.all(loadStringsPromises);
+      }).then(() => {
+        updateForCurrentLocale();
+      }).catch((err) => console.error(err));
+    };
+    function localesToUseFrom(requestedLocales) {
+      let supportedLocales = _dataLocales;
+      let toUse = [];
+      for (let i3 in requestedLocales) {
+        let locale2 = requestedLocales[i3];
+        if (supportedLocales[locale2]) toUse.push(locale2);
+        if (locale2.includes("-")) {
+          let langPart = locale2.split("-")[0];
+          if (supportedLocales[langPart]) toUse.push(langPart);
         }
-        _loco._cache[id2] = feature3;
-      });
-    }
-    /**
-     * mergeLocationSets
-     * Accepts an Array of Objects containing `locationSet` properties:
-     * [
-     *  { id: 'preset1', locationSet: {…} },
-     *  { id: 'preset2', locationSet: {…} },
-     *  …
-     * ]
-     * After validating, the Objects will be decorated with a `locationSetID` property:
-     * [
-     *  { id: 'preset1', locationSet: {…}, locationSetID: '+[Q2]' },
-     *  { id: 'preset2', locationSet: {…}, locationSetID: '+[Q30]' },
-     *  …
-     * ]
-     *
-     * @param  `objects`  Objects to check - they should have `locationSet` property
-     * @return  Promise resolved true (this function used to be slow/async, now it's faster and sync)
-     */
-    mergeLocationSets(objects) {
-      if (!Array.isArray(objects)) return Promise.reject("nothing to do");
-      objects.forEach((obj) => this._validateLocationSet(obj));
-      this._rebuildIndex();
-      return Promise.resolve(objects);
+      }
+      return utilArrayUniq(toUse);
     }
-    /**
-     * locationSetID
-     * Returns a locationSetID for a given locationSet (fallback to `+[Q2]`, world)
-     * (The locationSet doesn't necessarily need to be resolved to compute its `id`)
-     *
-     * @param  `locationSet`  A locationSet Object, e.g. `{ include: ['us'] }`
-     * @return  String locationSetID, e.g. `+[Q30]`
-     */
-    locationSetID(locationSet) {
-      let locationSetID;
-      try {
-        locationSetID = _loco.validateLocationSet(locationSet).id;
-      } catch {
-        locationSetID = "+[Q2]";
+    function updateForCurrentLocale() {
+      if (!_localeCode) return;
+      _languageCode = _localeCode.split("-")[0];
+      const currentData = _dataLocales[_localeCode] || _dataLocales[_languageCode];
+      const hash2 = utilStringQs(window.location.hash);
+      if (hash2.rtl === "true") {
+        _textDirection = "rtl";
+      } else if (hash2.rtl === "false") {
+        _textDirection = "ltr";
+      } else {
+        _textDirection = currentData && currentData.rtl ? "rtl" : "ltr";
       }
-      return locationSetID;
+      let locale2 = _localeCode;
+      if (locale2.toLowerCase() === "en-us") locale2 = "en";
+      _languageNames = _localeStrings.general[locale2].languageNames || _localeStrings.general[_languageCode].languageNames;
+      _scriptNames = _localeStrings.general[locale2].scriptNames || _localeStrings.general[_languageCode].scriptNames;
+      _usesMetric = _localeCode.slice(-3).toLowerCase() !== "-us";
     }
-    /**
-     * feature
-     * Returns the resolved GeoJSON feature for a given locationSetID (fallback to 'world')
-     * A GeoJSON feature:
-     * {
-     *   type: 'Feature',
-     *   id: '+[Q30]',
-     *   properties: { id: '+[Q30]', area: 21817019.17, … },
-     *   geometry: { … }
-     * }
-     *
-     * @param  `locationSetID`  String identifier, e.g. `+[Q30]`
-     * @return  GeoJSON object (fallback to world)
-     */
-    feature(locationSetID = "+[Q2]") {
-      const feature3 = this._resolved.get(locationSetID);
-      return feature3 || this._resolved.get("+[Q2]");
+    localizer.loadLocale = (locale2, scopeId, directory) => {
+      if (locale2.toLowerCase() === "en-us") locale2 = "en";
+      if (_localeStrings[scopeId] && _localeStrings[scopeId][locale2]) {
+        return Promise.resolve(locale2);
+      }
+      let fileMap = _mainFileFetcher.fileMap();
+      const key = "locale_".concat(scopeId, "_").concat(locale2);
+      if (!fileMap[key]) {
+        fileMap[key] = "".concat(directory, "/").concat(locale2, ".min.json");
+      }
+      return _mainFileFetcher.get(key).then((d2) => {
+        if (!_localeStrings[scopeId]) _localeStrings[scopeId] = {};
+        _localeStrings[scopeId][locale2] = d2[locale2];
+        return locale2;
+      });
+    };
+    localizer.pluralRule = function(number3) {
+      return pluralRule(number3, _localeCode);
+    };
+    function pluralRule(number3, localeCode) {
+      const rules = "Intl" in window && Intl.PluralRules && new Intl.PluralRules(localeCode);
+      if (rules) {
+        return rules.select(number3);
+      }
+      if (number3 === 1) return "one";
+      return "other";
     }
-    /**
-     * locationSetsAt
-     * Find all the locationSets valid at the given location.
-     * Results include the area (in km²) to facilitate sorting.
-     *
-     * Object of locationSetIDs to areas (in km²)
-     * {
-     *   "+[Q2]": 511207893.3958111,
-     *   "+[Q30]": 21817019.17,
-     *   "+[new_jersey.geojson]": 22390.77,
-     *   …
-     * }
-     *
-     * @param  `loc`  `[lon,lat]` location to query, e.g. `[-74.4813, 40.7967]`
-     * @return  Object of locationSetIDs valid at given location
-     */
-    locationSetsAt(loc) {
-      let result = {};
-      const hits = this._wp(loc, true) || [];
-      const thiz = this;
-      hits.forEach((prop) => {
-        if (prop.id[0] !== "+") return;
-        const locationSetID = prop.id;
-        const area = thiz._knownLocationSets.get(locationSetID);
-        if (area) {
-          result[locationSetID] = area;
+    localizer.tInfo = function(origStringId, replacements, locale2) {
+      let stringId = origStringId.trim();
+      let scopeId = "general";
+      if (stringId[0] === "_") {
+        let split = stringId.split(".");
+        scopeId = split[0].slice(1);
+        stringId = split.slice(1).join(".");
+      }
+      locale2 = locale2 || _localeCode;
+      let path = stringId.split(".").map((s2) => s2.replace(/<TX_DOT>/g, ".")).reverse();
+      let stringsKey = locale2;
+      if (stringsKey.toLowerCase() === "en-us") stringsKey = "en";
+      let result = _localeStrings && _localeStrings[scopeId] && _localeStrings[scopeId][stringsKey];
+      while (result !== void 0 && path.length) {
+        result = result[path.pop()];
+      }
+      if (result !== void 0) {
+        if (replacements) {
+          if (typeof result === "object" && Object.keys(result).length) {
+            const number3 = Object.values(replacements).find(function(value) {
+              return typeof value === "number";
+            });
+            if (number3 !== void 0) {
+              const rule = pluralRule(number3, locale2);
+              if (result[rule]) {
+                result = result[rule];
+              } else {
+                result = Object.values(result)[0];
+              }
+            }
+          }
+          if (typeof result === "string") {
+            for (let key in replacements) {
+              let value = replacements[key];
+              if (typeof value === "number") {
+                if (value.toLocaleString) {
+                  value = value.toLocaleString(locale2, {
+                    style: "decimal",
+                    useGrouping: true,
+                    minimumFractionDigits: 0
+                  });
+                } else {
+                  value = value.toString();
+                }
+              }
+              const token = "{".concat(key, "}");
+              const regex = new RegExp(token, "g");
+              result = result.replace(regex, value);
+            }
+          }
         }
-      });
-      hits.forEach((prop) => {
-        if (prop.id[0] === "+") return;
-        const locationID = prop.id;
-        const included = thiz._locationIncludedIn.get(locationID);
-        (included || []).forEach((locationSetID) => {
-          const area = thiz._knownLocationSets.get(locationSetID);
-          if (area) {
-            result[locationSetID] = area;
+        if (typeof result === "string") {
+          return {
+            text: result,
+            locale: locale2
+          };
+        }
+      }
+      let index = _localeCodes.indexOf(locale2);
+      if (index >= 0 && index < _localeCodes.length - 1) {
+        let fallback = _localeCodes[index + 1];
+        return localizer.tInfo(origStringId, replacements, fallback);
+      }
+      if (replacements && "default" in replacements) {
+        return {
+          text: replacements.default,
+          locale: null
+        };
+      }
+      const missing = "Missing ".concat(locale2, " translation: ").concat(origStringId);
+      if (typeof console !== "undefined") console.error(missing);
+      return {
+        text: missing,
+        locale: "en"
+      };
+    };
+    localizer.hasTextForStringId = function(stringId) {
+      return !!localizer.tInfo(stringId, { default: "nothing found" }).locale;
+    };
+    localizer.t = function(stringId, replacements, locale2) {
+      return localizer.tInfo(stringId, replacements, locale2).text;
+    };
+    localizer.t.html = function(stringId, replacements, locale2) {
+      replacements = Object.assign({}, replacements);
+      for (var k2 in replacements) {
+        if (typeof replacements[k2] === "string") {
+          replacements[k2] = escape_default(replacements[k2]);
+        }
+        if (typeof replacements[k2] === "object" && typeof replacements[k2].html === "string") {
+          replacements[k2] = replacements[k2].html;
+        }
+      }
+      const info = localizer.tInfo(stringId, replacements, locale2);
+      if (info.text) {
+        return '<span class="localized-text" lang="'.concat(info.locale || "und", '">').concat(info.text, "</span>");
+      } else {
+        return "";
+      }
+    };
+    localizer.t.append = function(stringId, replacements, locale2) {
+      const ret = function(selection2) {
+        const info = localizer.tInfo(stringId, replacements, locale2);
+        return selection2.append("span").attr("class", "localized-text").attr("lang", info.locale || "und").text((replacements && replacements.prefix || "") + info.text + (replacements && replacements.suffix || ""));
+      };
+      ret.stringId = stringId;
+      return ret;
+    };
+    localizer.t.addOrUpdate = function(stringId, replacements, locale2) {
+      const ret = function(selection2) {
+        const info = localizer.tInfo(stringId, replacements, locale2);
+        const span = selection2.selectAll("span.localized-text").data([info]);
+        const enter = span.enter().append("span").classed("localized-text", true);
+        span.merge(enter).attr("lang", info.locale || "und").text((replacements && replacements.prefix || "") + info.text + (replacements && replacements.suffix || ""));
+      };
+      ret.stringId = stringId;
+      return ret;
+    };
+    localizer.languageName = (code, options2) => {
+      if (_languageNames && _languageNames[code]) {
+        return _languageNames[code];
+      }
+      if (options2 && options2.localOnly) return null;
+      const langInfo = _dataLanguages[code];
+      if (langInfo) {
+        if (langInfo.nativeName) {
+          return localizer.t("translate.language_and_code", { language: langInfo.nativeName, code });
+        } else if (langInfo.base && langInfo.script) {
+          const base = langInfo.base;
+          if (_languageNames && _languageNames[base]) {
+            const scriptCode = langInfo.script;
+            const script = _scriptNames && _scriptNames[scriptCode] || scriptCode;
+            return localizer.t("translate.language_and_code", { language: _languageNames[base], code: script });
+          } else if (_dataLanguages[base] && _dataLanguages[base].nativeName) {
+            return localizer.t("translate.language_and_code", { language: _dataLanguages[base].nativeName, code });
           }
-        });
-      });
-      hits.forEach((prop) => {
-        if (prop.id[0] === "+") return;
-        const locationID = prop.id;
-        const excluded = thiz._locationExcludedIn.get(locationID);
-        (excluded || []).forEach((locationSetID) => {
-          delete result[locationSetID];
-        });
-      });
-      return result;
-    }
-    // Direct access to the location-conflation resolver
-    loco() {
-      return _loco;
-    }
-  };
-  var _sharedLocationManager = new LocationManager();
-
-  // node_modules/lodash-es/_freeGlobal.js
-  var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
-  var freeGlobal_default = freeGlobal;
-
-  // node_modules/lodash-es/_root.js
-  var freeSelf = typeof self == "object" && self && self.Object === Object && self;
-  var root2 = freeGlobal_default || freeSelf || Function("return this")();
-  var root_default = root2;
-
-  // node_modules/lodash-es/_Symbol.js
-  var Symbol2 = root_default.Symbol;
-  var Symbol_default = Symbol2;
-
-  // node_modules/lodash-es/_getRawTag.js
-  var objectProto = Object.prototype;
-  var hasOwnProperty = objectProto.hasOwnProperty;
-  var nativeObjectToString = objectProto.toString;
-  var symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;
-  function getRawTag(value) {
-    var isOwn = hasOwnProperty.call(value, symToStringTag), tag2 = value[symToStringTag];
-    try {
-      value[symToStringTag] = void 0;
-      var unmasked = true;
-    } catch (e3) {
-    }
-    var result = nativeObjectToString.call(value);
-    if (unmasked) {
-      if (isOwn) {
-        value[symToStringTag] = tag2;
+        }
+      }
+      return code;
+    };
+    localizer.floatFormatter = (locale2) => {
+      if (!("Intl" in window && "NumberFormat" in Intl && "formatToParts" in Intl.NumberFormat.prototype)) {
+        return (number3, fractionDigits) => {
+          return fractionDigits === void 0 ? number3.toString() : number3.toFixed(fractionDigits);
+        };
       } else {
-        delete value[symToStringTag];
+        return (number3, fractionDigits) => number3.toLocaleString(locale2, {
+          minimumFractionDigits: fractionDigits,
+          maximumFractionDigits: fractionDigits === void 0 ? 20 : fractionDigits
+        });
       }
-    }
-    return result;
+    };
+    localizer.floatParser = (locale2) => {
+      const polyfill = (string) => +string.trim();
+      if (!("Intl" in window && "NumberFormat" in Intl)) return polyfill;
+      const format2 = new Intl.NumberFormat(locale2, { maximumFractionDigits: 20 });
+      if (!("formatToParts" in format2)) return polyfill;
+      const parts = format2.formatToParts(-12345.6);
+      const numerals = Array.from({ length: 10 }).map((_2, i3) => format2.format(i3));
+      const index = new Map(numerals.map((d2, i3) => [d2, i3]));
+      const literalPart = parts.find((d2) => d2.type === "literal");
+      const literal = literalPart && new RegExp("[".concat(literalPart.value, "]"), "g");
+      const groupPart = parts.find((d2) => d2.type === "group");
+      const group = groupPart && new RegExp("[".concat(groupPart.value, "]"), "g");
+      const decimalPart = parts.find((d2) => d2.type === "decimal");
+      const decimal = decimalPart && new RegExp("[".concat(decimalPart.value, "]"));
+      const numeral = new RegExp("[".concat(numerals.join(""), "]"), "g");
+      const getIndex = (d2) => index.get(d2);
+      return (string) => {
+        string = string.trim();
+        if (literal) string = string.replace(literal, "");
+        if (group) string = string.replace(group, "");
+        if (decimal) string = string.replace(decimal, ".");
+        string = string.replace(numeral, getIndex);
+        return string ? +string : NaN;
+      };
+    };
+    localizer.decimalPlaceCounter = (locale2) => {
+      var literal, group, decimal;
+      if ("Intl" in window && "NumberFormat" in Intl) {
+        const format2 = new Intl.NumberFormat(locale2, { maximumFractionDigits: 20 });
+        if ("formatToParts" in format2) {
+          const parts = format2.formatToParts(-12345.6);
+          const literalPart = parts.find((d2) => d2.type === "literal");
+          literal = literalPart && new RegExp("[".concat(literalPart.value, "]"), "g");
+          const groupPart = parts.find((d2) => d2.type === "group");
+          group = groupPart && new RegExp("[".concat(groupPart.value, "]"), "g");
+          const decimalPart = parts.find((d2) => d2.type === "decimal");
+          decimal = decimalPart && new RegExp("[".concat(decimalPart.value, "]"));
+        }
+      }
+      return (string) => {
+        string = string.trim();
+        if (literal) string = string.replace(literal, "");
+        if (group) string = string.replace(group, "");
+        const parts = string.split(decimal || ".");
+        return parts && parts[1] && parts[1].length || 0;
+      };
+    };
+    return localizer;
   }
-  var getRawTag_default = getRawTag;
 
-  // node_modules/lodash-es/_objectToString.js
-  var objectProto2 = Object.prototype;
-  var nativeObjectToString2 = objectProto2.toString;
-  function objectToString(value) {
-    return nativeObjectToString2.call(value);
+  // modules/util/util.js
+  function utilTagText(entity) {
+    var obj = entity && entity.tags || {};
+    return Object.keys(obj).map(function(k2) {
+      return k2 + "=" + obj[k2];
+    }).join(", ");
   }
-  var objectToString_default = objectToString;
-
-  // node_modules/lodash-es/_baseGetTag.js
-  var nullTag = "[object Null]";
-  var undefinedTag = "[object Undefined]";
-  var symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;
-  function baseGetTag(value) {
-    if (value == null) {
-      return value === void 0 ? undefinedTag : nullTag;
+  function utilTotalExtent(array2, graph) {
+    var extent = geoExtent();
+    var val, entity;
+    for (var i3 = 0; i3 < array2.length; i3++) {
+      val = array2[i3];
+      entity = typeof val === "string" ? graph.hasEntity(val) : val;
+      if (entity) {
+        extent._extend(entity.extent(graph));
+      }
     }
-    return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);
+    return extent;
   }
-  var baseGetTag_default = baseGetTag;
-
-  // node_modules/lodash-es/isObjectLike.js
-  function isObjectLike(value) {
-    return value != null && typeof value == "object";
+  function utilTagDiff(oldTags, newTags) {
+    var tagDiff = [];
+    var keys2 = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
+    keys2.forEach(function(k2) {
+      var oldVal = oldTags[k2];
+      var newVal = newTags[k2];
+      if ((oldVal || oldVal === "") && (newVal === void 0 || newVal !== oldVal)) {
+        tagDiff.push({
+          type: "-",
+          key: k2,
+          oldVal,
+          newVal,
+          display: "- " + k2 + "=" + oldVal
+        });
+      }
+      if ((newVal || newVal === "") && (oldVal === void 0 || newVal !== oldVal)) {
+        tagDiff.push({
+          type: "+",
+          key: k2,
+          oldVal,
+          newVal,
+          display: "+ " + k2 + "=" + newVal
+        });
+      }
+    });
+    return tagDiff;
   }
-  var isObjectLike_default = isObjectLike;
-
-  // node_modules/lodash-es/isSymbol.js
-  var symbolTag = "[object Symbol]";
-  function isSymbol(value) {
-    return typeof value == "symbol" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;
+  function utilEntitySelector(ids) {
+    return ids.length ? "." + ids.join(",.") : "nothing";
   }
-  var isSymbol_default = isSymbol;
-
-  // node_modules/lodash-es/_arrayMap.js
-  function arrayMap(array2, iteratee) {
-    var index = -1, length2 = array2 == null ? 0 : array2.length, result = Array(length2);
-    while (++index < length2) {
-      result[index] = iteratee(array2[index], index, array2);
+  function utilEntityOrMemberSelector(ids, graph) {
+    var seen = new Set(ids);
+    ids.forEach(collectShallowDescendants);
+    return utilEntitySelector(Array.from(seen));
+    function collectShallowDescendants(id2) {
+      var entity = graph.hasEntity(id2);
+      if (!entity || entity.type !== "relation") return;
+      entity.members.map(function(member) {
+        return member.id;
+      }).forEach(function(id3) {
+        seen.add(id3);
+      });
     }
-    return result;
   }
-  var arrayMap_default = arrayMap;
-
-  // node_modules/lodash-es/isArray.js
-  var isArray = Array.isArray;
-  var isArray_default = isArray;
-
-  // node_modules/lodash-es/_baseToString.js
-  var INFINITY = 1 / 0;
-  var symbolProto = Symbol_default ? Symbol_default.prototype : void 0;
-  var symbolToString = symbolProto ? symbolProto.toString : void 0;
-  function baseToString(value) {
-    if (typeof value == "string") {
-      return value;
-    }
-    if (isArray_default(value)) {
-      return arrayMap_default(value, baseToString) + "";
-    }
-    if (isSymbol_default(value)) {
-      return symbolToString ? symbolToString.call(value) : "";
+  function utilEntityOrDeepMemberSelector(ids, graph) {
+    return utilEntitySelector(utilEntityAndDeepMemberIDs(ids, graph));
+  }
+  function utilEntityAndDeepMemberIDs(ids, graph) {
+    var seen = /* @__PURE__ */ new Set();
+    ids.forEach(collectDeepDescendants);
+    return Array.from(seen);
+    function collectDeepDescendants(id2) {
+      if (seen.has(id2)) return;
+      seen.add(id2);
+      var entity = graph.hasEntity(id2);
+      if (!entity || entity.type !== "relation") return;
+      entity.members.map(function(member) {
+        return member.id;
+      }).forEach(collectDeepDescendants);
     }
-    var result = value + "";
-    return result == "0" && 1 / value == -INFINITY ? "-0" : result;
   }
-  var baseToString_default = baseToString;
-
-  // node_modules/lodash-es/_trimmedEndIndex.js
-  var reWhitespace = /\s/;
-  function trimmedEndIndex(string) {
-    var index = string.length;
-    while (index-- && reWhitespace.test(string.charAt(index))) {
+  function utilDeepMemberSelector(ids, graph, skipMultipolgonMembers) {
+    var idsSet = new Set(ids);
+    var seen = /* @__PURE__ */ new Set();
+    var returners = /* @__PURE__ */ new Set();
+    ids.forEach(collectDeepDescendants);
+    return utilEntitySelector(Array.from(returners));
+    function collectDeepDescendants(id2) {
+      if (seen.has(id2)) return;
+      seen.add(id2);
+      if (!idsSet.has(id2)) {
+        returners.add(id2);
+      }
+      var entity = graph.hasEntity(id2);
+      if (!entity || entity.type !== "relation") return;
+      if (skipMultipolgonMembers && entity.isMultipolygon()) return;
+      entity.members.map(function(member) {
+        return member.id;
+      }).forEach(collectDeepDescendants);
     }
-    return index;
   }
-  var trimmedEndIndex_default = trimmedEndIndex;
-
-  // node_modules/lodash-es/_baseTrim.js
-  var reTrimStart = /^\s+/;
-  function baseTrim(string) {
-    return string ? string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, "") : string;
+  function utilHighlightEntities(ids, highlighted, context) {
+    context.surface().selectAll(utilEntityOrDeepMemberSelector(ids, context.graph())).classed("highlighted", highlighted);
   }
-  var baseTrim_default = baseTrim;
-
-  // node_modules/lodash-es/isObject.js
-  function isObject(value) {
-    var type2 = typeof value;
-    return value != null && (type2 == "object" || type2 == "function");
+  function utilGetAllNodes(ids, graph) {
+    var seen = /* @__PURE__ */ new Set();
+    var nodes = /* @__PURE__ */ new Set();
+    ids.forEach(collectNodes);
+    return Array.from(nodes);
+    function collectNodes(id2) {
+      if (seen.has(id2)) return;
+      seen.add(id2);
+      var entity = graph.hasEntity(id2);
+      if (!entity) return;
+      if (entity.type === "node") {
+        nodes.add(entity);
+      } else if (entity.type === "way") {
+        entity.nodes.forEach(collectNodes);
+      } else {
+        entity.members.map(function(member) {
+          return member.id;
+        }).forEach(collectNodes);
+      }
+    }
   }
-  var isObject_default = isObject;
-
-  // node_modules/lodash-es/toNumber.js
-  var NAN = 0 / 0;
-  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
-  var reIsBinary = /^0b[01]+$/i;
-  var reIsOctal = /^0o[0-7]+$/i;
-  var freeParseInt = parseInt;
-  function toNumber(value) {
-    if (typeof value == "number") {
-      return value;
+  function utilDisplayName(entity, hideNetwork) {
+    var localizedNameKey = "name:" + _mainLocalizer.languageCode().toLowerCase();
+    var name = entity.tags[localizedNameKey] || entity.tags.name || "";
+    var tags = {
+      direction: entity.tags.direction,
+      from: entity.tags.from,
+      name,
+      network: hideNetwork ? void 0 : entity.tags.cycle_network || entity.tags.network,
+      ref: entity.tags.ref,
+      to: entity.tags.to,
+      via: entity.tags.via
+    };
+    if (entity.tags.route && entity.tags.name && entity.tags.name.match(/[→⇒↔⇔]|[-=]>/)) {
+      return entity.tags.name;
     }
-    if (isSymbol_default(value)) {
-      return NAN;
+    if (!entity.tags.route && name) {
+      return name;
     }
-    if (isObject_default(value)) {
-      var other = typeof value.valueOf == "function" ? value.valueOf() : value;
-      value = isObject_default(other) ? other + "" : other;
+    var keyComponents = [];
+    if (tags.network) {
+      keyComponents.push("network");
     }
-    if (typeof value != "string") {
-      return value === 0 ? value : +value;
+    if (tags.ref) {
+      keyComponents.push("ref");
     }
-    value = baseTrim_default(value);
-    var isBinary = reIsBinary.test(value);
-    return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
-  }
-  var toNumber_default = toNumber;
-
-  // node_modules/lodash-es/isFunction.js
-  var asyncTag = "[object AsyncFunction]";
-  var funcTag = "[object Function]";
-  var genTag = "[object GeneratorFunction]";
-  var proxyTag = "[object Proxy]";
-  function isFunction(value) {
-    if (!isObject_default(value)) {
-      return false;
+    if (tags.name) {
+      keyComponents.push("name");
     }
-    var tag2 = baseGetTag_default(value);
-    return tag2 == funcTag || tag2 == genTag || tag2 == asyncTag || tag2 == proxyTag;
-  }
-  var isFunction_default = isFunction;
-
-  // node_modules/lodash-es/_coreJsData.js
-  var coreJsData = root_default["__core-js_shared__"];
-  var coreJsData_default = coreJsData;
-
-  // node_modules/lodash-es/_isMasked.js
-  var maskSrcKey = function() {
-    var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || "");
-    return uid ? "Symbol(src)_1." + uid : "";
-  }();
-  function isMasked(func) {
-    return !!maskSrcKey && maskSrcKey in func;
-  }
-  var isMasked_default = isMasked;
-
-  // node_modules/lodash-es/_toSource.js
-  var funcProto = Function.prototype;
-  var funcToString = funcProto.toString;
-  function toSource(func) {
-    if (func != null) {
-      try {
-        return funcToString.call(func);
-      } catch (e3) {
-      }
-      try {
-        return func + "";
-      } catch (e3) {
+    if (entity.tags.route) {
+      if (tags.direction) {
+        keyComponents.push("direction");
+      } else if (tags.from && tags.to) {
+        keyComponents.push("from");
+        keyComponents.push("to");
+        if (tags.via) {
+          keyComponents.push("via");
+        }
       }
     }
-    return "";
-  }
-  var toSource_default = toSource;
-
-  // node_modules/lodash-es/_baseIsNative.js
-  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-  var reIsHostCtor = /^\[object .+?Constructor\]$/;
-  var funcProto2 = Function.prototype;
-  var objectProto3 = Object.prototype;
-  var funcToString2 = funcProto2.toString;
-  var hasOwnProperty2 = objectProto3.hasOwnProperty;
-  var reIsNative = RegExp(
-    "^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
-  );
-  function baseIsNative(value) {
-    if (!isObject_default(value) || isMasked_default(value)) {
-      return false;
+    if (keyComponents.length) {
+      name = _t("inspector.display_name." + keyComponents.join("_"), tags);
     }
-    var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor;
-    return pattern.test(toSource_default(value));
-  }
-  var baseIsNative_default = baseIsNative;
-
-  // node_modules/lodash-es/_getValue.js
-  function getValue(object, key) {
-    return object == null ? void 0 : object[key];
-  }
-  var getValue_default = getValue;
-
-  // node_modules/lodash-es/_getNative.js
-  function getNative(object, key) {
-    var value = getValue_default(object, key);
-    return baseIsNative_default(value) ? value : void 0;
+    return name;
   }
-  var getNative_default = getNative;
-
-  // node_modules/lodash-es/_WeakMap.js
-  var WeakMap = getNative_default(root_default, "WeakMap");
-  var WeakMap_default = WeakMap;
-
-  // node_modules/lodash-es/_isIndex.js
-  var MAX_SAFE_INTEGER2 = 9007199254740991;
-  var reIsUint = /^(?:0|[1-9]\d*)$/;
-  function isIndex(value, length2) {
-    var type2 = typeof value;
-    length2 = length2 == null ? MAX_SAFE_INTEGER2 : length2;
-    return !!length2 && (type2 == "number" || type2 != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2);
+  function utilDisplayNameForPath(entity) {
+    var name = utilDisplayName(entity);
+    var isFirefox = utilDetect().browser.toLowerCase().indexOf("firefox") > -1;
+    var isNewChromium = Number(utilDetect().version.split(".")[0]) >= 96;
+    if (!isFirefox && !isNewChromium && name && rtlRegex.test(name)) {
+      name = fixRTLTextForSvg(name);
+    }
+    return name;
   }
-  var isIndex_default = isIndex;
-
-  // node_modules/lodash-es/eq.js
-  function eq(value, other) {
-    return value === other || value !== value && other !== other;
+  function utilDisplayType(id2) {
+    return {
+      n: _t("inspector.node"),
+      w: _t("inspector.way"),
+      r: _t("inspector.relation")
+    }[id2.charAt(0)];
   }
-  var eq_default = eq;
-
-  // node_modules/lodash-es/isLength.js
-  var MAX_SAFE_INTEGER3 = 9007199254740991;
-  function isLength(value) {
-    return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER3;
+  function utilEntityRoot(entityType) {
+    return {
+      node: "n",
+      way: "w",
+      relation: "r"
+    }[entityType];
   }
-  var isLength_default = isLength;
-
-  // node_modules/lodash-es/isArrayLike.js
-  function isArrayLike(value) {
-    return value != null && isLength_default(value.length) && !isFunction_default(value);
+  function utilCombinedTags(entityIDs, graph) {
+    var tags = {};
+    var tagCounts = {};
+    var allKeys = /* @__PURE__ */ new Set();
+    var entities = entityIDs.map(function(entityID) {
+      return graph.hasEntity(entityID);
+    }).filter(Boolean);
+    entities.forEach(function(entity) {
+      var keys2 = Object.keys(entity.tags).filter(Boolean);
+      keys2.forEach(function(key2) {
+        allKeys.add(key2);
+      });
+    });
+    entities.forEach(function(entity) {
+      allKeys.forEach(function(key2) {
+        var value = entity.tags[key2];
+        if (!tags.hasOwnProperty(key2)) {
+          tags[key2] = value;
+        } else {
+          if (!Array.isArray(tags[key2])) {
+            if (tags[key2] !== value) {
+              tags[key2] = [tags[key2], value];
+            }
+          } else {
+            if (tags[key2].indexOf(value) === -1) {
+              tags[key2].push(value);
+            }
+          }
+        }
+        var tagHash = key2 + "=" + value;
+        if (!tagCounts[tagHash]) tagCounts[tagHash] = 0;
+        tagCounts[tagHash] += 1;
+      });
+    });
+    for (var key in tags) {
+      if (!Array.isArray(tags[key])) continue;
+      tags[key] = tags[key].sort(function(val12, val2) {
+        var key2 = key2;
+        var count2 = tagCounts[key2 + "=" + val2];
+        var count1 = tagCounts[key2 + "=" + val12];
+        if (count2 !== count1) {
+          return count2 - count1;
+        }
+        if (val2 && val12) {
+          return val12.localeCompare(val2);
+        }
+        return val12 ? 1 : -1;
+      });
+    }
+    return tags;
   }
-  var isArrayLike_default = isArrayLike;
-
-  // node_modules/lodash-es/_isPrototype.js
-  var objectProto4 = Object.prototype;
-  function isPrototype(value) {
-    var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto4;
-    return value === proto;
+  function utilStringQs(str) {
+    var i3 = 0;
+    while (i3 < str.length && (str[i3] === "?" || str[i3] === "#")) i3++;
+    str = str.slice(i3);
+    return str.split("&").reduce(function(obj, pair3) {
+      var parts = pair3.split("=");
+      if (parts.length === 2) {
+        obj[parts[0]] = null === parts[1] ? "" : decodeURIComponent(parts[1]);
+      }
+      return obj;
+    }, {});
   }
-  var isPrototype_default = isPrototype;
-
-  // node_modules/lodash-es/_baseTimes.js
-  function baseTimes(n3, iteratee) {
-    var index = -1, result = Array(n3);
-    while (++index < n3) {
-      result[index] = iteratee(index);
+  function utilQsString(obj, noencode) {
+    function softEncode(s2) {
+      return encodeURIComponent(s2).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
     }
-    return result;
-  }
-  var baseTimes_default = baseTimes;
-
-  // node_modules/lodash-es/_baseIsArguments.js
-  var argsTag = "[object Arguments]";
-  function baseIsArguments(value) {
-    return isObjectLike_default(value) && baseGetTag_default(value) == argsTag;
+    return Object.keys(obj).sort().map(function(key) {
+      return encodeURIComponent(key) + "=" + (noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
+    }).join("&");
   }
-  var baseIsArguments_default = baseIsArguments;
-
-  // node_modules/lodash-es/isArguments.js
-  var objectProto5 = Object.prototype;
-  var hasOwnProperty3 = objectProto5.hasOwnProperty;
-  var propertyIsEnumerable = objectProto5.propertyIsEnumerable;
-  var isArguments = baseIsArguments_default(/* @__PURE__ */ function() {
-    return arguments;
-  }()) ? baseIsArguments_default : function(value) {
-    return isObjectLike_default(value) && hasOwnProperty3.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
-  };
-  var isArguments_default = isArguments;
-
-  // node_modules/lodash-es/stubFalse.js
-  function stubFalse() {
+  function utilPrefixDOMProperty(property) {
+    var prefixes2 = ["webkit", "ms", "moz", "o"];
+    var i3 = -1;
+    var n3 = prefixes2.length;
+    var s2 = document.body;
+    if (property in s2) return property;
+    property = property.slice(0, 1).toUpperCase() + property.slice(1);
+    while (++i3 < n3) {
+      if (prefixes2[i3] + property in s2) {
+        return prefixes2[i3] + property;
+      }
+    }
     return false;
   }
-  var stubFalse_default = stubFalse;
-
-  // node_modules/lodash-es/isBuffer.js
-  var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
-  var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
-  var moduleExports = freeModule && freeModule.exports === freeExports;
-  var Buffer2 = moduleExports ? root_default.Buffer : void 0;
-  var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
-  var isBuffer = nativeIsBuffer || stubFalse_default;
-  var isBuffer_default = isBuffer;
-
-  // node_modules/lodash-es/_baseIsTypedArray.js
-  var argsTag2 = "[object Arguments]";
-  var arrayTag = "[object Array]";
-  var boolTag = "[object Boolean]";
-  var dateTag = "[object Date]";
-  var errorTag = "[object Error]";
-  var funcTag2 = "[object Function]";
-  var mapTag = "[object Map]";
-  var numberTag = "[object Number]";
-  var objectTag = "[object Object]";
-  var regexpTag = "[object RegExp]";
-  var setTag = "[object Set]";
-  var stringTag = "[object String]";
-  var weakMapTag = "[object WeakMap]";
-  var arrayBufferTag = "[object ArrayBuffer]";
-  var dataViewTag = "[object DataView]";
-  var float32Tag = "[object Float32Array]";
-  var float64Tag = "[object Float64Array]";
-  var int8Tag = "[object Int8Array]";
-  var int16Tag = "[object Int16Array]";
-  var int32Tag = "[object Int32Array]";
-  var uint8Tag = "[object Uint8Array]";
-  var uint8ClampedTag = "[object Uint8ClampedArray]";
-  var uint16Tag = "[object Uint16Array]";
-  var uint32Tag = "[object Uint32Array]";
-  var typedArrayTags = {};
-  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
-  typedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
-  function baseIsTypedArray(value) {
-    return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)];
+  function utilPrefixCSSProperty(property) {
+    var prefixes2 = ["webkit", "ms", "Moz", "O"];
+    var i3 = -1;
+    var n3 = prefixes2.length;
+    var s2 = document.body.style;
+    if (property.toLowerCase() in s2) {
+      return property.toLowerCase();
+    }
+    while (++i3 < n3) {
+      if (prefixes2[i3] + property in s2) {
+        return "-" + prefixes2[i3].toLowerCase() + property.replace(/([A-Z])/g, "-$1").toLowerCase();
+      }
+    }
+    return false;
   }
-  var baseIsTypedArray_default = baseIsTypedArray;
-
-  // node_modules/lodash-es/_baseUnary.js
-  function baseUnary(func) {
-    return function(value) {
-      return func(value);
-    };
+  var transformProperty;
+  function utilSetTransform(el, x2, y2, scale) {
+    var prop = transformProperty = transformProperty || utilPrefixCSSProperty("Transform");
+    var translate = utilDetect().opera ? "translate(" + x2 + "px," + y2 + "px)" : "translate3d(" + x2 + "px," + y2 + "px,0)";
+    return el.style(prop, translate + (scale ? " scale(" + scale + ")" : ""));
   }
-  var baseUnary_default = baseUnary;
-
-  // node_modules/lodash-es/_nodeUtil.js
-  var freeExports2 = typeof exports == "object" && exports && !exports.nodeType && exports;
-  var freeModule2 = freeExports2 && typeof module == "object" && module && !module.nodeType && module;
-  var moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;
-  var freeProcess = moduleExports2 && freeGlobal_default.process;
-  var nodeUtil = function() {
-    try {
-      var types = freeModule2 && freeModule2.require && freeModule2.require("util").types;
-      if (types) {
-        return types;
-      }
-      return freeProcess && freeProcess.binding && freeProcess.binding("util");
-    } catch (e3) {
+  function utilEditDistance(a2, b2) {
+    a2 = (0, import_diacritics.remove)(a2.toLowerCase());
+    b2 = (0, import_diacritics.remove)(b2.toLowerCase());
+    if (a2.length === 0) return b2.length;
+    if (b2.length === 0) return a2.length;
+    var matrix = [];
+    var i3, j2;
+    for (i3 = 0; i3 <= b2.length; i3++) {
+      matrix[i3] = [i3];
     }
-  }();
-  var nodeUtil_default = nodeUtil;
-
-  // node_modules/lodash-es/isTypedArray.js
-  var nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray;
-  var isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default;
-  var isTypedArray_default = isTypedArray;
-
-  // node_modules/lodash-es/_arrayLikeKeys.js
-  var objectProto6 = Object.prototype;
-  var hasOwnProperty4 = objectProto6.hasOwnProperty;
-  function arrayLikeKeys(value, inherited) {
-    var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length2 = result.length;
-    for (var key in value) {
-      if ((inherited || hasOwnProperty4.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
-      (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
-      isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
-      isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
-      isIndex_default(key, length2)))) {
-        result.push(key);
+    for (j2 = 0; j2 <= a2.length; j2++) {
+      matrix[0][j2] = j2;
+    }
+    for (i3 = 1; i3 <= b2.length; i3++) {
+      for (j2 = 1; j2 <= a2.length; j2++) {
+        if (b2.charAt(i3 - 1) === a2.charAt(j2 - 1)) {
+          matrix[i3][j2] = matrix[i3 - 1][j2 - 1];
+        } else {
+          matrix[i3][j2] = Math.min(
+            matrix[i3 - 1][j2 - 1] + 1,
+            // substitution
+            Math.min(
+              matrix[i3][j2 - 1] + 1,
+              // insertion
+              matrix[i3 - 1][j2] + 1
+            )
+          );
+        }
       }
     }
-    return result;
+    return matrix[b2.length][a2.length];
   }
-  var arrayLikeKeys_default = arrayLikeKeys;
-
-  // node_modules/lodash-es/_overArg.js
-  function overArg(func, transform2) {
-    return function(arg) {
-      return func(transform2(arg));
+  function utilFastMouse(container) {
+    var rect = container.getBoundingClientRect();
+    var rectLeft = rect.left;
+    var rectTop = rect.top;
+    var clientLeft = +container.clientLeft;
+    var clientTop = +container.clientTop;
+    return function(e3) {
+      return [
+        e3.clientX - rectLeft - clientLeft,
+        e3.clientY - rectTop - clientTop
+      ];
+    };
+  }
+  function utilAsyncMap(inputs, func, callback) {
+    var remaining = inputs.length;
+    var results = [];
+    var errors = [];
+    inputs.forEach(function(d2, i3) {
+      func(d2, function done(err, data) {
+        errors[i3] = err;
+        results[i3] = data;
+        remaining--;
+        if (!remaining) callback(errors, results);
+      });
+    });
+  }
+  function utilWrap(index, length2) {
+    if (index < 0) {
+      index += Math.ceil(-index / length2) * length2;
+    }
+    return index % length2;
+  }
+  function utilFunctor(value) {
+    if (typeof value === "function") return value;
+    return function() {
+      return value;
     };
   }
-  var overArg_default = overArg;
-
-  // node_modules/lodash-es/_nativeKeys.js
-  var nativeKeys = overArg_default(Object.keys, Object);
-  var nativeKeys_default = nativeKeys;
-
-  // node_modules/lodash-es/_baseKeys.js
-  var objectProto7 = Object.prototype;
-  var hasOwnProperty5 = objectProto7.hasOwnProperty;
-  function baseKeys(object) {
-    if (!isPrototype_default(object)) {
-      return nativeKeys_default(object);
+  function utilNoAuto(selection2) {
+    var isText = selection2.size() && selection2.node().tagName.toLowerCase() === "textarea";
+    return selection2.attr("autocomplete", "new-password").attr("autocorrect", "off").attr("autocapitalize", "off").attr("data-1p-ignore", "true").attr("data-bwignore", "true").attr("data-form-type", "other").attr("data-lpignore", "true").attr("spellcheck", isText ? "true" : "false");
+  }
+  function utilHashcode(str) {
+    var hash2 = 0;
+    if (str.length === 0) {
+      return hash2;
     }
-    var result = [];
-    for (var key in Object(object)) {
-      if (hasOwnProperty5.call(object, key) && key != "constructor") {
-        result.push(key);
-      }
+    for (var i3 = 0; i3 < str.length; i3++) {
+      var char = str.charCodeAt(i3);
+      hash2 = (hash2 << 5) - hash2 + char;
+      hash2 = hash2 & hash2;
     }
-    return result;
+    return hash2;
   }
-  var baseKeys_default = baseKeys;
-
-  // node_modules/lodash-es/keys.js
-  function keys(object) {
-    return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object);
+  function utilSafeClassName(str) {
+    return str.toLowerCase().replace(/[^a-z0-9]+/g, "_");
   }
-  var keys_default = keys;
-
-  // node_modules/lodash-es/_nativeCreate.js
-  var nativeCreate = getNative_default(Object, "create");
-  var nativeCreate_default = nativeCreate;
-
-  // node_modules/lodash-es/_hashClear.js
-  function hashClear() {
-    this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {};
-    this.size = 0;
+  function utilUniqueDomId(val) {
+    return "ideditor-" + utilSafeClassName(val.toString()) + "-" + (/* @__PURE__ */ new Date()).getTime().toString();
   }
-  var hashClear_default = hashClear;
-
-  // node_modules/lodash-es/_hashDelete.js
-  function hashDelete(key) {
-    var result = this.has(key) && delete this.__data__[key];
-    this.size -= result ? 1 : 0;
-    return result;
+  function utilUnicodeCharsCount(str) {
+    return Array.from(str).length;
   }
-  var hashDelete_default = hashDelete;
-
-  // node_modules/lodash-es/_hashGet.js
-  var HASH_UNDEFINED = "__lodash_hash_undefined__";
-  var objectProto8 = Object.prototype;
-  var hasOwnProperty6 = objectProto8.hasOwnProperty;
-  function hashGet(key) {
-    var data = this.__data__;
-    if (nativeCreate_default) {
-      var result = data[key];
-      return result === HASH_UNDEFINED ? void 0 : result;
+  function utilUnicodeCharsTruncated(str, limit) {
+    return Array.from(str).slice(0, limit).join("");
+  }
+  function toNumericID(id2) {
+    var match = id2.match(/^[cnwr](-?\d+)$/);
+    if (match) {
+      return parseInt(match[1], 10);
     }
-    return hasOwnProperty6.call(data, key) ? data[key] : void 0;
+    return NaN;
   }
-  var hashGet_default = hashGet;
-
-  // node_modules/lodash-es/_hashHas.js
-  var objectProto9 = Object.prototype;
-  var hasOwnProperty7 = objectProto9.hasOwnProperty;
-  function hashHas(key) {
-    var data = this.__data__;
-    return nativeCreate_default ? data[key] !== void 0 : hasOwnProperty7.call(data, key);
+  function compareNumericIDs(left, right) {
+    if (isNaN(left) && isNaN(right)) return -1;
+    if (isNaN(left)) return 1;
+    if (isNaN(right)) return -1;
+    if (Math.sign(left) !== Math.sign(right)) return -Math.sign(left);
+    if (Math.sign(left) < 0) return Math.sign(right - left);
+    return Math.sign(left - right);
   }
-  var hashHas_default = hashHas;
-
-  // node_modules/lodash-es/_hashSet.js
-  var HASH_UNDEFINED2 = "__lodash_hash_undefined__";
-  function hashSet(key, value) {
-    var data = this.__data__;
-    this.size += this.has(key) ? 0 : 1;
-    data[key] = nativeCreate_default && value === void 0 ? HASH_UNDEFINED2 : value;
-    return this;
+  function utilCompareIDs(left, right) {
+    return compareNumericIDs(toNumericID(left), toNumericID(right));
   }
-  var hashSet_default = hashSet;
-
-  // node_modules/lodash-es/_Hash.js
-  function Hash(entries) {
-    var index = -1, length2 = entries == null ? 0 : entries.length;
-    this.clear();
-    while (++index < length2) {
-      var entry = entries[index];
-      this.set(entry[0], entry[1]);
+  function utilOldestID(ids) {
+    if (ids.length === 0) {
+      return void 0;
     }
-  }
-  Hash.prototype.clear = hashClear_default;
-  Hash.prototype["delete"] = hashDelete_default;
-  Hash.prototype.get = hashGet_default;
-  Hash.prototype.has = hashHas_default;
-  Hash.prototype.set = hashSet_default;
-  var Hash_default = Hash;
-
-  // node_modules/lodash-es/_listCacheClear.js
-  function listCacheClear() {
-    this.__data__ = [];
-    this.size = 0;
-  }
-  var listCacheClear_default = listCacheClear;
-
-  // node_modules/lodash-es/_assocIndexOf.js
-  function assocIndexOf(array2, key) {
-    var length2 = array2.length;
-    while (length2--) {
-      if (eq_default(array2[length2][0], key)) {
-        return length2;
+    var oldestIDIndex = 0;
+    var oldestID = toNumericID(ids[0]);
+    for (var i3 = 1; i3 < ids.length; i3++) {
+      var num = toNumericID(ids[i3]);
+      if (compareNumericIDs(oldestID, num) === 1) {
+        oldestIDIndex = i3;
+        oldestID = num;
       }
     }
-    return -1;
+    return ids[oldestIDIndex];
   }
-  var assocIndexOf_default = assocIndexOf;
-
-  // node_modules/lodash-es/_listCacheDelete.js
-  var arrayProto = Array.prototype;
-  var splice = arrayProto.splice;
-  function listCacheDelete(key) {
-    var data = this.__data__, index = assocIndexOf_default(data, key);
-    if (index < 0) {
-      return false;
-    }
-    var lastIndex = data.length - 1;
-    if (index == lastIndex) {
-      data.pop();
+  function utilCleanOsmString(val, maxChars) {
+    if (val === void 0 || val === null) {
+      val = "";
     } else {
-      splice.call(data, index, 1);
+      val = val.toString();
     }
-    --this.size;
-    return true;
+    val = val.trim();
+    if (val.normalize) val = val.normalize("NFC");
+    return utilUnicodeCharsTruncated(val, maxChars);
   }
-  var listCacheDelete_default = listCacheDelete;
 
-  // node_modules/lodash-es/_listCacheGet.js
-  function listCacheGet(key) {
-    var data = this.__data__, index = assocIndexOf_default(data, key);
-    return index < 0 ? void 0 : data[index][1];
+  // modules/osm/entity.js
+  function osmEntity(attrs) {
+    if (this instanceof osmEntity) return;
+    if (attrs && attrs.type) {
+      return osmEntity[attrs.type].apply(this, arguments);
+    } else if (attrs && attrs.id) {
+      return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
+    }
+    return new osmEntity().initialize(arguments);
   }
-  var listCacheGet_default = listCacheGet;
+  osmEntity.id = function(type2) {
+    return osmEntity.id.fromOSM(type2, osmEntity.id.next[type2]--);
+  };
+  osmEntity.id.next = {
+    changeset: -1,
+    node: -1,
+    way: -1,
+    relation: -1
+  };
+  osmEntity.id.fromOSM = function(type2, id2) {
+    return type2[0] + id2;
+  };
+  osmEntity.id.toOSM = function(id2) {
+    var match = id2.match(/^[cnwr](-?\d+)$/);
+    if (match) {
+      return match[1];
+    }
+    return "";
+  };
+  osmEntity.id.type = function(id2) {
+    return { "c": "changeset", "n": "node", "w": "way", "r": "relation" }[id2[0]];
+  };
+  osmEntity.key = function(entity) {
+    return entity.id + "v" + (entity.v || 0);
+  };
+  var _deprecatedTagValuesByKey;
+  osmEntity.deprecatedTagValuesByKey = function(dataDeprecated) {
+    if (!_deprecatedTagValuesByKey) {
+      _deprecatedTagValuesByKey = {};
+      dataDeprecated.forEach(function(d2) {
+        var oldKeys = Object.keys(d2.old);
+        if (oldKeys.length === 1) {
+          var oldKey = oldKeys[0];
+          var oldValue = d2.old[oldKey];
+          if (oldValue !== "*") {
+            if (!_deprecatedTagValuesByKey[oldKey]) {
+              _deprecatedTagValuesByKey[oldKey] = [oldValue];
+            } else {
+              _deprecatedTagValuesByKey[oldKey].push(oldValue);
+            }
+          }
+        }
+      });
+    }
+    return _deprecatedTagValuesByKey;
+  };
+  osmEntity.prototype = {
+    tags: {},
+    initialize: function(sources) {
+      for (var i3 = 0; i3 < sources.length; ++i3) {
+        var source = sources[i3];
+        for (var prop in source) {
+          if (Object.prototype.hasOwnProperty.call(source, prop)) {
+            if (source[prop] === void 0) {
+              delete this[prop];
+            } else {
+              this[prop] = source[prop];
+            }
+          }
+        }
+      }
+      if (!this.id && this.type) {
+        this.id = osmEntity.id(this.type);
+      }
+      if (!this.hasOwnProperty("visible")) {
+        this.visible = true;
+      }
+      if (debug) {
+        Object.freeze(this);
+        Object.freeze(this.tags);
+        if (this.loc) Object.freeze(this.loc);
+        if (this.nodes) Object.freeze(this.nodes);
+        if (this.members) Object.freeze(this.members);
+      }
+      return this;
+    },
+    copy: function(resolver, copies) {
+      if (copies[this.id]) return copies[this.id];
+      var copy2 = osmEntity(this, { id: void 0, user: void 0, version: void 0 });
+      copies[this.id] = copy2;
+      return copy2;
+    },
+    osmId: function() {
+      return osmEntity.id.toOSM(this.id);
+    },
+    isNew: function() {
+      var osmId = osmEntity.id.toOSM(this.id);
+      return osmId.length === 0 || osmId[0] === "-";
+    },
+    update: function(attrs) {
+      return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
+    },
+    mergeTags: function(tags) {
+      var merged = Object.assign({}, this.tags);
+      var changed = false;
+      for (var k2 in tags) {
+        var t1 = merged[k2];
+        var t2 = tags[k2];
+        if (!t1) {
+          changed = true;
+          merged[k2] = t2;
+        } else if (t1 !== t2) {
+          changed = true;
+          merged[k2] = utilUnicodeCharsTruncated(
+            utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(";"),
+            255
+            // avoid exceeding character limit; see also context.maxCharsForTagValue()
+          );
+        }
+      }
+      return changed ? this.update({ tags: merged }) : this;
+    },
+    intersects: function(extent, resolver) {
+      return this.extent(resolver).intersects(extent);
+    },
+    hasNonGeometryTags: function() {
+      return Object.keys(this.tags).some(function(k2) {
+        return k2 !== "area";
+      });
+    },
+    hasParentRelations: function(resolver) {
+      return resolver.parentRelations(this).length > 0;
+    },
+    hasInterestingTags: function() {
+      return Object.keys(this.tags).some(osmIsInterestingTag);
+    },
+    isHighwayIntersection: function() {
+      return false;
+    },
+    isDegenerate: function() {
+      return true;
+    },
+    deprecatedTags: function(dataDeprecated) {
+      var tags = this.tags;
+      if (Object.keys(tags).length === 0) return [];
+      var deprecated = [];
+      dataDeprecated.forEach(function(d2) {
+        var oldKeys = Object.keys(d2.old);
+        if (d2.replace) {
+          var hasExistingValues = Object.keys(d2.replace).some(function(replaceKey) {
+            if (!tags[replaceKey] || d2.old[replaceKey]) return false;
+            var replaceValue = d2.replace[replaceKey];
+            if (replaceValue === "*") return false;
+            if (replaceValue === tags[replaceKey]) return false;
+            return true;
+          });
+          if (hasExistingValues) return;
+        }
+        var matchesDeprecatedTags = oldKeys.every(function(oldKey) {
+          if (!tags[oldKey]) return false;
+          if (d2.old[oldKey] === "*") return true;
+          if (d2.old[oldKey] === tags[oldKey]) return true;
+          var vals = tags[oldKey].split(";").filter(Boolean);
+          if (vals.length === 0) {
+            return false;
+          } else if (vals.length > 1) {
+            return vals.indexOf(d2.old[oldKey]) !== -1;
+          } else {
+            if (tags[oldKey] === d2.old[oldKey]) {
+              if (d2.replace && d2.old[oldKey] === d2.replace[oldKey]) {
+                var replaceKeys = Object.keys(d2.replace);
+                return !replaceKeys.every(function(replaceKey) {
+                  return tags[replaceKey] === d2.replace[replaceKey];
+                });
+              } else {
+                return true;
+              }
+            }
+          }
+          return false;
+        });
+        if (matchesDeprecatedTags) {
+          deprecated.push(d2);
+        }
+      });
+      return deprecated;
+    }
+  };
 
-  // node_modules/lodash-es/_listCacheHas.js
-  function listCacheHas(key) {
-    return assocIndexOf_default(this.__data__, key) > -1;
+  // modules/osm/lanes.js
+  function osmLanes(entity) {
+    if (entity.type !== "way") return null;
+    if (!entity.tags.highway) return null;
+    var tags = entity.tags;
+    var isOneWay = entity.isOneWay();
+    var laneCount = getLaneCount(tags, isOneWay);
+    var maxspeed = parseMaxspeed(tags);
+    var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
+    var forward = laneDirections.forward;
+    var backward = laneDirections.backward;
+    var bothways = laneDirections.bothways;
+    var turnLanes = {};
+    turnLanes.unspecified = parseTurnLanes(tags["turn:lanes"]);
+    turnLanes.forward = parseTurnLanes(tags["turn:lanes:forward"]);
+    turnLanes.backward = parseTurnLanes(tags["turn:lanes:backward"]);
+    var maxspeedLanes = {};
+    maxspeedLanes.unspecified = parseMaxspeedLanes(tags["maxspeed:lanes"], maxspeed);
+    maxspeedLanes.forward = parseMaxspeedLanes(tags["maxspeed:lanes:forward"], maxspeed);
+    maxspeedLanes.backward = parseMaxspeedLanes(tags["maxspeed:lanes:backward"], maxspeed);
+    var psvLanes = {};
+    psvLanes.unspecified = parseMiscLanes(tags["psv:lanes"]);
+    psvLanes.forward = parseMiscLanes(tags["psv:lanes:forward"]);
+    psvLanes.backward = parseMiscLanes(tags["psv:lanes:backward"]);
+    var busLanes = {};
+    busLanes.unspecified = parseMiscLanes(tags["bus:lanes"]);
+    busLanes.forward = parseMiscLanes(tags["bus:lanes:forward"]);
+    busLanes.backward = parseMiscLanes(tags["bus:lanes:backward"]);
+    var taxiLanes = {};
+    taxiLanes.unspecified = parseMiscLanes(tags["taxi:lanes"]);
+    taxiLanes.forward = parseMiscLanes(tags["taxi:lanes:forward"]);
+    taxiLanes.backward = parseMiscLanes(tags["taxi:lanes:backward"]);
+    var hovLanes = {};
+    hovLanes.unspecified = parseMiscLanes(tags["hov:lanes"]);
+    hovLanes.forward = parseMiscLanes(tags["hov:lanes:forward"]);
+    hovLanes.backward = parseMiscLanes(tags["hov:lanes:backward"]);
+    var hgvLanes = {};
+    hgvLanes.unspecified = parseMiscLanes(tags["hgv:lanes"]);
+    hgvLanes.forward = parseMiscLanes(tags["hgv:lanes:forward"]);
+    hgvLanes.backward = parseMiscLanes(tags["hgv:lanes:backward"]);
+    var bicyclewayLanes = {};
+    bicyclewayLanes.unspecified = parseBicycleWay(tags["bicycleway:lanes"]);
+    bicyclewayLanes.forward = parseBicycleWay(tags["bicycleway:lanes:forward"]);
+    bicyclewayLanes.backward = parseBicycleWay(tags["bicycleway:lanes:backward"]);
+    var lanesObj = {
+      forward: [],
+      backward: [],
+      unspecified: []
+    };
+    mapToLanesObj(lanesObj, turnLanes, "turnLane");
+    mapToLanesObj(lanesObj, maxspeedLanes, "maxspeed");
+    mapToLanesObj(lanesObj, psvLanes, "psv");
+    mapToLanesObj(lanesObj, busLanes, "bus");
+    mapToLanesObj(lanesObj, taxiLanes, "taxi");
+    mapToLanesObj(lanesObj, hovLanes, "hov");
+    mapToLanesObj(lanesObj, hgvLanes, "hgv");
+    mapToLanesObj(lanesObj, bicyclewayLanes, "bicycleway");
+    return {
+      metadata: {
+        count: laneCount,
+        oneway: isOneWay,
+        forward,
+        backward,
+        bothways,
+        turnLanes,
+        maxspeed,
+        maxspeedLanes,
+        psvLanes,
+        busLanes,
+        taxiLanes,
+        hovLanes,
+        hgvLanes,
+        bicyclewayLanes
+      },
+      lanes: lanesObj
+    };
   }
-  var listCacheHas_default = listCacheHas;
-
-  // node_modules/lodash-es/_listCacheSet.js
-  function listCacheSet(key, value) {
-    var data = this.__data__, index = assocIndexOf_default(data, key);
-    if (index < 0) {
-      ++this.size;
-      data.push([key, value]);
-    } else {
-      data[index][1] = value;
+  function getLaneCount(tags, isOneWay) {
+    var count;
+    if (tags.lanes) {
+      count = parseInt(tags.lanes, 10);
+      if (count > 0) {
+        return count;
+      }
     }
-    return this;
+    switch (tags.highway) {
+      case "trunk":
+      case "motorway":
+        count = isOneWay ? 2 : 4;
+        break;
+      default:
+        count = isOneWay ? 1 : 2;
+        break;
+    }
+    return count;
   }
-  var listCacheSet_default = listCacheSet;
-
-  // node_modules/lodash-es/_ListCache.js
-  function ListCache(entries) {
-    var index = -1, length2 = entries == null ? 0 : entries.length;
-    this.clear();
-    while (++index < length2) {
-      var entry = entries[index];
-      this.set(entry[0], entry[1]);
+  function parseMaxspeed(tags) {
+    var maxspeed = tags.maxspeed;
+    if (!maxspeed) return;
+    var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
+    if (!maxspeedRegex.test(maxspeed)) return;
+    return parseInt(maxspeed, 10);
+  }
+  function parseLaneDirections(tags, isOneWay, laneCount) {
+    var forward = parseInt(tags["lanes:forward"], 10);
+    var backward = parseInt(tags["lanes:backward"], 10);
+    var bothways = parseInt(tags["lanes:both_ways"], 10) > 0 ? 1 : 0;
+    if (parseInt(tags.oneway, 10) === -1) {
+      forward = 0;
+      bothways = 0;
+      backward = laneCount;
+    } else if (isOneWay) {
+      forward = laneCount;
+      bothways = 0;
+      backward = 0;
+    } else if (isNaN(forward) && isNaN(backward)) {
+      backward = Math.floor((laneCount - bothways) / 2);
+      forward = laneCount - bothways - backward;
+    } else if (isNaN(forward)) {
+      if (backward > laneCount - bothways) {
+        backward = laneCount - bothways;
+      }
+      forward = laneCount - bothways - backward;
+    } else if (isNaN(backward)) {
+      if (forward > laneCount - bothways) {
+        forward = laneCount - bothways;
+      }
+      backward = laneCount - bothways - forward;
     }
-  }
-  ListCache.prototype.clear = listCacheClear_default;
-  ListCache.prototype["delete"] = listCacheDelete_default;
-  ListCache.prototype.get = listCacheGet_default;
-  ListCache.prototype.has = listCacheHas_default;
-  ListCache.prototype.set = listCacheSet_default;
-  var ListCache_default = ListCache;
-
-  // node_modules/lodash-es/_Map.js
-  var Map2 = getNative_default(root_default, "Map");
-  var Map_default = Map2;
-
-  // node_modules/lodash-es/_mapCacheClear.js
-  function mapCacheClear() {
-    this.size = 0;
-    this.__data__ = {
-      "hash": new Hash_default(),
-      "map": new (Map_default || ListCache_default)(),
-      "string": new Hash_default()
+    return {
+      forward,
+      backward,
+      bothways
     };
   }
-  var mapCacheClear_default = mapCacheClear;
-
-  // node_modules/lodash-es/_isKeyable.js
-  function isKeyable(value) {
-    var type2 = typeof value;
-    return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value !== "__proto__" : value === null;
+  function parseTurnLanes(tag2) {
+    if (!tag2) return;
+    var validValues = [
+      "left",
+      "slight_left",
+      "sharp_left",
+      "through",
+      "right",
+      "slight_right",
+      "sharp_right",
+      "reverse",
+      "merge_to_left",
+      "merge_to_right",
+      "none"
+    ];
+    return tag2.split("|").map(function(s2) {
+      if (s2 === "") s2 = "none";
+      return s2.split(";").map(function(d2) {
+        return validValues.indexOf(d2) === -1 ? "unknown" : d2;
+      });
+    });
   }
-  var isKeyable_default = isKeyable;
-
-  // node_modules/lodash-es/_getMapData.js
-  function getMapData(map2, key) {
-    var data = map2.__data__;
-    return isKeyable_default(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
+  function parseMaxspeedLanes(tag2, maxspeed) {
+    if (!tag2) return;
+    return tag2.split("|").map(function(s2) {
+      if (s2 === "none") return s2;
+      var m2 = parseInt(s2, 10);
+      if (s2 === "" || m2 === maxspeed) return null;
+      return isNaN(m2) ? "unknown" : m2;
+    });
   }
-  var getMapData_default = getMapData;
-
-  // node_modules/lodash-es/_mapCacheDelete.js
-  function mapCacheDelete(key) {
-    var result = getMapData_default(this, key)["delete"](key);
-    this.size -= result ? 1 : 0;
-    return result;
+  function parseMiscLanes(tag2) {
+    if (!tag2) return;
+    var validValues = [
+      "yes",
+      "no",
+      "designated"
+    ];
+    return tag2.split("|").map(function(s2) {
+      if (s2 === "") s2 = "no";
+      return validValues.indexOf(s2) === -1 ? "unknown" : s2;
+    });
   }
-  var mapCacheDelete_default = mapCacheDelete;
-
-  // node_modules/lodash-es/_mapCacheGet.js
-  function mapCacheGet(key) {
-    return getMapData_default(this, key).get(key);
+  function parseBicycleWay(tag2) {
+    if (!tag2) return;
+    var validValues = [
+      "yes",
+      "no",
+      "designated",
+      "lane"
+    ];
+    return tag2.split("|").map(function(s2) {
+      if (s2 === "") s2 = "no";
+      return validValues.indexOf(s2) === -1 ? "unknown" : s2;
+    });
   }
-  var mapCacheGet_default = mapCacheGet;
-
-  // node_modules/lodash-es/_mapCacheHas.js
-  function mapCacheHas(key) {
-    return getMapData_default(this, key).has(key);
+  function mapToLanesObj(lanesObj, data, key) {
+    if (data.forward) {
+      data.forward.forEach(function(l2, i3) {
+        if (!lanesObj.forward[i3]) lanesObj.forward[i3] = {};
+        lanesObj.forward[i3][key] = l2;
+      });
+    }
+    if (data.backward) {
+      data.backward.forEach(function(l2, i3) {
+        if (!lanesObj.backward[i3]) lanesObj.backward[i3] = {};
+        lanesObj.backward[i3][key] = l2;
+      });
+    }
+    if (data.unspecified) {
+      data.unspecified.forEach(function(l2, i3) {
+        if (!lanesObj.unspecified[i3]) lanesObj.unspecified[i3] = {};
+        lanesObj.unspecified[i3][key] = l2;
+      });
+    }
   }
-  var mapCacheHas_default = mapCacheHas;
 
-  // node_modules/lodash-es/_mapCacheSet.js
-  function mapCacheSet(key, value) {
-    var data = getMapData_default(this, key), size = data.size;
-    data.set(key, value);
-    this.size += data.size == size ? 0 : 1;
-    return this;
+  // modules/osm/way.js
+  function osmWay() {
+    if (!(this instanceof osmWay)) {
+      return new osmWay().initialize(arguments);
+    } else if (arguments.length) {
+      this.initialize(arguments);
+    }
   }
-  var mapCacheSet_default = mapCacheSet;
-
-  // node_modules/lodash-es/_MapCache.js
-  function MapCache(entries) {
-    var index = -1, length2 = entries == null ? 0 : entries.length;
-    this.clear();
-    while (++index < length2) {
-      var entry = entries[index];
-      this.set(entry[0], entry[1]);
+  osmEntity.way = osmWay;
+  osmWay.prototype = Object.create(osmEntity.prototype);
+  Object.assign(osmWay.prototype, {
+    type: "way",
+    nodes: [],
+    copy: function(resolver, copies) {
+      if (copies[this.id]) return copies[this.id];
+      var copy2 = osmEntity.prototype.copy.call(this, resolver, copies);
+      var nodes = this.nodes.map(function(id2) {
+        return resolver.entity(id2).copy(resolver, copies).id;
+      });
+      copy2 = copy2.update({ nodes });
+      copies[this.id] = copy2;
+      return copy2;
+    },
+    extent: function(resolver) {
+      return resolver.transient(this, "extent", function() {
+        var extent = geoExtent();
+        for (var i3 = 0; i3 < this.nodes.length; i3++) {
+          var node = resolver.hasEntity(this.nodes[i3]);
+          if (node) {
+            extent._extend(node.extent());
+          }
+        }
+        return extent;
+      });
+    },
+    first: function() {
+      return this.nodes[0];
+    },
+    last: function() {
+      return this.nodes[this.nodes.length - 1];
+    },
+    contains: function(node) {
+      return this.nodes.indexOf(node) >= 0;
+    },
+    affix: function(node) {
+      if (this.nodes[0] === node) return "prefix";
+      if (this.nodes[this.nodes.length - 1] === node) return "suffix";
+    },
+    layer: function() {
+      if (isFinite(this.tags.layer)) {
+        return Math.max(-10, Math.min(+this.tags.layer, 10));
+      }
+      if (this.tags.covered === "yes") return -1;
+      if (this.tags.location === "overground") return 1;
+      if (this.tags.location === "underground") return -1;
+      if (this.tags.location === "underwater") return -10;
+      if (this.tags.power === "line") return 10;
+      if (this.tags.power === "minor_line") return 10;
+      if (this.tags.aerialway) return 10;
+      if (this.tags.bridge) return 1;
+      if (this.tags.cutting) return -1;
+      if (this.tags.tunnel) return -1;
+      if (this.tags.waterway) return -1;
+      if (this.tags.man_made === "pipeline") return -10;
+      if (this.tags.boundary) return -10;
+      return 0;
+    },
+    // the approximate width of the line based on its tags except its `width` tag
+    impliedLineWidthMeters: function() {
+      var averageWidths = {
+        highway: {
+          // width is for single lane
+          motorway: 5,
+          motorway_link: 5,
+          trunk: 4.5,
+          trunk_link: 4.5,
+          primary: 4,
+          secondary: 4,
+          tertiary: 4,
+          primary_link: 4,
+          secondary_link: 4,
+          tertiary_link: 4,
+          unclassified: 4,
+          road: 4,
+          living_street: 4,
+          bus_guideway: 4,
+          busway: 4,
+          pedestrian: 4,
+          residential: 3.5,
+          service: 3.5,
+          track: 3,
+          cycleway: 2.5,
+          bridleway: 2,
+          corridor: 2,
+          steps: 2,
+          path: 1.5,
+          footway: 1.5,
+          ladder: 0.5
+        },
+        railway: {
+          // width includes ties and rail bed, not just track gauge
+          rail: 2.5,
+          light_rail: 2.5,
+          tram: 2.5,
+          subway: 2.5,
+          monorail: 2.5,
+          funicular: 2.5,
+          disused: 2.5,
+          preserved: 2.5,
+          miniature: 1.5,
+          narrow_gauge: 1.5
+        },
+        waterway: {
+          river: 50,
+          canal: 25,
+          stream: 5,
+          tidal_channel: 5,
+          fish_pass: 2.5,
+          drain: 2.5,
+          ditch: 1.5
+        }
+      };
+      for (var key in averageWidths) {
+        if (this.tags[key] && averageWidths[key][this.tags[key]]) {
+          var width = averageWidths[key][this.tags[key]];
+          if (key === "highway") {
+            var laneCount = this.tags.lanes && parseInt(this.tags.lanes, 10);
+            if (!laneCount) laneCount = this.isOneWay() ? 1 : 2;
+            return width * laneCount;
+          }
+          return width;
+        }
+      }
+      return null;
+    },
+    isOneWay: function() {
+      var values = {
+        "yes": true,
+        "1": true,
+        "-1": true,
+        "reversible": true,
+        "alternating": true,
+        "no": false,
+        "0": false
+      };
+      if (values[this.tags.oneway] !== void 0) {
+        return values[this.tags.oneway];
+      }
+      for (var key in this.tags) {
+        if (key in osmOneWayTags && this.tags[key] in osmOneWayTags[key]) {
+          return true;
+        }
+      }
+      return false;
+    },
+    // Some identifier for tag that implies that this way is "sided",
+    // i.e. the right side is the 'inside' (e.g. the right side of a
+    // natural=cliff is lower).
+    sidednessIdentifier: function() {
+      for (const realKey in this.tags) {
+        const value = this.tags[realKey];
+        const key = osmRemoveLifecyclePrefix(realKey);
+        if (key in osmRightSideIsInsideTags && value in osmRightSideIsInsideTags[key]) {
+          if (osmRightSideIsInsideTags[key][value] === true) {
+            return key;
+          } else {
+            return osmRightSideIsInsideTags[key][value];
+          }
+        }
+      }
+      return null;
+    },
+    isSided: function() {
+      if (this.tags.two_sided === "yes") {
+        return false;
+      }
+      return this.sidednessIdentifier() !== null;
+    },
+    lanes: function() {
+      return osmLanes(this);
+    },
+    isClosed: function() {
+      return this.nodes.length > 1 && this.first() === this.last();
+    },
+    isConvex: function(resolver) {
+      if (!this.isClosed() || this.isDegenerate()) return null;
+      var nodes = utilArrayUniq(resolver.childNodes(this));
+      var coords = nodes.map(function(n3) {
+        return n3.loc;
+      });
+      var curr = 0;
+      var prev = 0;
+      for (var i3 = 0; i3 < coords.length; i3++) {
+        var o2 = coords[(i3 + 1) % coords.length];
+        var a2 = coords[i3];
+        var b2 = coords[(i3 + 2) % coords.length];
+        var res = geoVecCross(a2, b2, o2);
+        curr = res > 0 ? 1 : res < 0 ? -1 : 0;
+        if (curr === 0) {
+          continue;
+        } else if (prev && curr !== prev) {
+          return false;
+        }
+        prev = curr;
+      }
+      return true;
+    },
+    // returns an object with the tag that implies this is an area, if any
+    tagSuggestingArea: function() {
+      return osmTagSuggestingArea(this.tags);
+    },
+    isArea: function() {
+      if (this.tags.area === "yes") return true;
+      if (!this.isClosed() || this.tags.area === "no") return false;
+      return this.tagSuggestingArea() !== null;
+    },
+    isDegenerate: function() {
+      return new Set(this.nodes).size < (this.isArea() ? 3 : 2);
+    },
+    areAdjacent: function(n1, n22) {
+      for (var i3 = 0; i3 < this.nodes.length; i3++) {
+        if (this.nodes[i3] === n1) {
+          if (this.nodes[i3 - 1] === n22) return true;
+          if (this.nodes[i3 + 1] === n22) return true;
+        }
+      }
+      return false;
+    },
+    geometry: function(graph) {
+      return graph.transient(this, "geometry", function() {
+        return this.isArea() ? "area" : "line";
+      });
+    },
+    // returns an array of objects representing the segments between the nodes in this way
+    segments: function(graph) {
+      function segmentExtent(graph2) {
+        var n1 = graph2.hasEntity(this.nodes[0]);
+        var n22 = graph2.hasEntity(this.nodes[1]);
+        return n1 && n22 && geoExtent([
+          [
+            Math.min(n1.loc[0], n22.loc[0]),
+            Math.min(n1.loc[1], n22.loc[1])
+          ],
+          [
+            Math.max(n1.loc[0], n22.loc[0]),
+            Math.max(n1.loc[1], n22.loc[1])
+          ]
+        ]);
+      }
+      return graph.transient(this, "segments", function() {
+        var segments = [];
+        for (var i3 = 0; i3 < this.nodes.length - 1; i3++) {
+          segments.push({
+            id: this.id + "-" + i3,
+            wayId: this.id,
+            index: i3,
+            nodes: [this.nodes[i3], this.nodes[i3 + 1]],
+            extent: segmentExtent
+          });
+        }
+        return segments;
+      });
+    },
+    // If this way is not closed, append the beginning node to the end of the nodelist to close it.
+    close: function() {
+      if (this.isClosed() || !this.nodes.length) return this;
+      var nodes = this.nodes.slice();
+      nodes = nodes.filter(noRepeatNodes);
+      nodes.push(nodes[0]);
+      return this.update({ nodes });
+    },
+    // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
+    unclose: function() {
+      if (!this.isClosed()) return this;
+      var nodes = this.nodes.slice();
+      var connector = this.first();
+      var i3 = nodes.length - 1;
+      while (i3 > 0 && nodes.length > 1 && nodes[i3] === connector) {
+        nodes.splice(i3, 1);
+        i3 = nodes.length - 1;
+      }
+      nodes = nodes.filter(noRepeatNodes);
+      return this.update({ nodes });
+    },
+    // Adds a node (id) in front of the node which is currently at position index.
+    // If index is undefined, the node will be added to the end of the way for linear ways,
+    //   or just before the final connecting node for circular ways.
+    // Consecutive duplicates are eliminated including existing ones.
+    // Circularity is always preserved when adding a node.
+    addNode: function(id2, index) {
+      var nodes = this.nodes.slice();
+      var isClosed = this.isClosed();
+      var max3 = isClosed ? nodes.length - 1 : nodes.length;
+      if (index === void 0) {
+        index = max3;
+      }
+      if (index < 0 || index > max3) {
+        throw new RangeError("index " + index + " out of range 0.." + max3);
+      }
+      if (isClosed) {
+        var connector = this.first();
+        var i3 = 1;
+        while (i3 < nodes.length && nodes.length > 2 && nodes[i3] === connector) {
+          nodes.splice(i3, 1);
+          if (index > i3) index--;
+        }
+        i3 = nodes.length - 1;
+        while (i3 > 0 && nodes.length > 1 && nodes[i3] === connector) {
+          nodes.splice(i3, 1);
+          if (index > i3) index--;
+          i3 = nodes.length - 1;
+        }
+      }
+      nodes.splice(index, 0, id2);
+      nodes = nodes.filter(noRepeatNodes);
+      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
+        nodes.push(nodes[0]);
+      }
+      return this.update({ nodes });
+    },
+    // Replaces the node which is currently at position index with the given node (id).
+    // Consecutive duplicates are eliminated including existing ones.
+    // Circularity is preserved when updating a node.
+    updateNode: function(id2, index) {
+      var nodes = this.nodes.slice();
+      var isClosed = this.isClosed();
+      var max3 = nodes.length - 1;
+      if (index === void 0 || index < 0 || index > max3) {
+        throw new RangeError("index " + index + " out of range 0.." + max3);
+      }
+      if (isClosed) {
+        var connector = this.first();
+        var i3 = 1;
+        while (i3 < nodes.length && nodes.length > 2 && nodes[i3] === connector) {
+          nodes.splice(i3, 1);
+          if (index > i3) index--;
+        }
+        i3 = nodes.length - 1;
+        while (i3 > 0 && nodes.length > 1 && nodes[i3] === connector) {
+          nodes.splice(i3, 1);
+          if (index === i3) index = 0;
+          i3 = nodes.length - 1;
+        }
+      }
+      nodes.splice(index, 1, id2);
+      nodes = nodes.filter(noRepeatNodes);
+      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
+        nodes.push(nodes[0]);
+      }
+      return this.update({ nodes });
+    },
+    // Replaces each occurrence of node id needle with replacement.
+    // Consecutive duplicates are eliminated including existing ones.
+    // Circularity is preserved.
+    replaceNode: function(needleID, replacementID) {
+      var nodes = this.nodes.slice();
+      var isClosed = this.isClosed();
+      for (var i3 = 0; i3 < nodes.length; i3++) {
+        if (nodes[i3] === needleID) {
+          nodes[i3] = replacementID;
+        }
+      }
+      nodes = nodes.filter(noRepeatNodes);
+      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
+        nodes.push(nodes[0]);
+      }
+      return this.update({ nodes });
+    },
+    // Removes each occurrence of node id.
+    // Consecutive duplicates are eliminated including existing ones.
+    // Circularity is preserved.
+    removeNode: function(id2) {
+      var nodes = this.nodes.slice();
+      var isClosed = this.isClosed();
+      nodes = nodes.filter(function(node) {
+        return node !== id2;
+      }).filter(noRepeatNodes);
+      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
+        nodes.push(nodes[0]);
+      }
+      return this.update({ nodes });
+    },
+    asJXON: function(changeset_id) {
+      var r2 = {
+        way: {
+          "@id": this.osmId(),
+          "@version": this.version || 0,
+          nd: this.nodes.map(function(id2) {
+            return { keyAttributes: { ref: osmEntity.id.toOSM(id2) } };
+          }, this),
+          tag: Object.keys(this.tags).map(function(k2) {
+            return { keyAttributes: { k: k2, v: this.tags[k2] } };
+          }, this)
+        }
+      };
+      if (changeset_id) {
+        r2.way["@changeset"] = changeset_id;
+      }
+      return r2;
+    },
+    asGeoJSON: function(resolver) {
+      return resolver.transient(this, "GeoJSON", function() {
+        var coordinates = resolver.childNodes(this).map(function(n3) {
+          return n3.loc;
+        });
+        if (this.isArea() && this.isClosed()) {
+          return {
+            type: "Polygon",
+            coordinates: [coordinates]
+          };
+        } else {
+          return {
+            type: "LineString",
+            coordinates
+          };
+        }
+      });
+    },
+    area: function(resolver) {
+      return resolver.transient(this, "area", function() {
+        var nodes = resolver.childNodes(this);
+        var json = {
+          type: "Polygon",
+          coordinates: [nodes.map(function(n3) {
+            return n3.loc;
+          })]
+        };
+        if (!this.isClosed() && nodes.length) {
+          json.coordinates[0].push(nodes[0].loc);
+        }
+        var area = area_default(json);
+        if (area > 2 * Math.PI) {
+          json.coordinates[0] = json.coordinates[0].reverse();
+          area = area_default(json);
+        }
+        return isNaN(area) ? 0 : area;
+      });
     }
+  });
+  function noRepeatNodes(node, i3, arr) {
+    return i3 === 0 || node !== arr[i3 - 1];
   }
-  MapCache.prototype.clear = mapCacheClear_default;
-  MapCache.prototype["delete"] = mapCacheDelete_default;
-  MapCache.prototype.get = mapCacheGet_default;
-  MapCache.prototype.has = mapCacheHas_default;
-  MapCache.prototype.set = mapCacheSet_default;
-  var MapCache_default = MapCache;
-
-  // node_modules/lodash-es/toString.js
-  function toString(value) {
-    return value == null ? "" : baseToString_default(value);
-  }
-  var toString_default = toString;
 
-  // node_modules/lodash-es/_arrayPush.js
-  function arrayPush(array2, values) {
-    var index = -1, length2 = values.length, offset = array2.length;
-    while (++index < length2) {
-      array2[offset + index] = values[index];
+  // modules/osm/multipolygon.js
+  function osmJoinWays(toJoin, graph) {
+    function resolve(member) {
+      return graph.childNodes(graph.entity(member.id));
     }
-    return array2;
-  }
-  var arrayPush_default = arrayPush;
-
-  // node_modules/lodash-es/_basePropertyOf.js
-  function basePropertyOf(object) {
-    return function(key) {
-      return object == null ? void 0 : object[key];
-    };
-  }
-  var basePropertyOf_default = basePropertyOf;
-
-  // node_modules/lodash-es/_stackClear.js
-  function stackClear() {
-    this.__data__ = new ListCache_default();
-    this.size = 0;
-  }
-  var stackClear_default = stackClear;
-
-  // node_modules/lodash-es/_stackDelete.js
-  function stackDelete(key) {
-    var data = this.__data__, result = data["delete"](key);
-    this.size = data.size;
-    return result;
-  }
-  var stackDelete_default = stackDelete;
-
-  // node_modules/lodash-es/_stackGet.js
-  function stackGet(key) {
-    return this.__data__.get(key);
-  }
-  var stackGet_default = stackGet;
-
-  // node_modules/lodash-es/_stackHas.js
-  function stackHas(key) {
-    return this.__data__.has(key);
-  }
-  var stackHas_default = stackHas;
-
-  // node_modules/lodash-es/_stackSet.js
-  var LARGE_ARRAY_SIZE = 200;
-  function stackSet(key, value) {
-    var data = this.__data__;
-    if (data instanceof ListCache_default) {
-      var pairs2 = data.__data__;
-      if (!Map_default || pairs2.length < LARGE_ARRAY_SIZE - 1) {
-        pairs2.push([key, value]);
-        this.size = ++data.size;
-        return this;
-      }
-      data = this.__data__ = new MapCache_default(pairs2);
+    function reverse(item2) {
+      var action = actionReverse(item2.id, { reverseOneway: true });
+      sequences.actions.push(action);
+      return item2 instanceof osmWay ? action(graph).entity(item2.id) : item2;
     }
-    data.set(key, value);
-    this.size = data.size;
-    return this;
-  }
-  var stackSet_default = stackSet;
-
-  // node_modules/lodash-es/_Stack.js
-  function Stack(entries) {
-    var data = this.__data__ = new ListCache_default(entries);
-    this.size = data.size;
-  }
-  Stack.prototype.clear = stackClear_default;
-  Stack.prototype["delete"] = stackDelete_default;
-  Stack.prototype.get = stackGet_default;
-  Stack.prototype.has = stackHas_default;
-  Stack.prototype.set = stackSet_default;
-  var Stack_default = Stack;
-
-  // node_modules/lodash-es/_arrayFilter.js
-  function arrayFilter(array2, predicate) {
-    var index = -1, length2 = array2 == null ? 0 : array2.length, resIndex = 0, result = [];
-    while (++index < length2) {
-      var value = array2[index];
-      if (predicate(value, index, array2)) {
-        result[resIndex++] = value;
+    toJoin = toJoin.filter(function(member) {
+      return member.type === "way" && graph.hasEntity(member.id);
+    });
+    var i3;
+    var joinAsMembers = true;
+    for (i3 = 0; i3 < toJoin.length; i3++) {
+      if (toJoin[i3] instanceof osmWay) {
+        joinAsMembers = false;
+        break;
       }
     }
-    return result;
-  }
-  var arrayFilter_default = arrayFilter;
-
-  // node_modules/lodash-es/stubArray.js
-  function stubArray() {
-    return [];
-  }
-  var stubArray_default = stubArray;
-
-  // node_modules/lodash-es/_getSymbols.js
-  var objectProto10 = Object.prototype;
-  var propertyIsEnumerable2 = objectProto10.propertyIsEnumerable;
-  var nativeGetSymbols = Object.getOwnPropertySymbols;
-  var getSymbols = !nativeGetSymbols ? stubArray_default : function(object) {
-    if (object == null) {
-      return [];
+    var sequences = [];
+    sequences.actions = [];
+    while (toJoin.length) {
+      var item = toJoin.shift();
+      var currWays = [item];
+      var currNodes = resolve(item).slice();
+      while (toJoin.length) {
+        var start2 = currNodes[0];
+        var end = currNodes[currNodes.length - 1];
+        var fn = null;
+        var nodes = null;
+        for (i3 = 0; i3 < toJoin.length; i3++) {
+          item = toJoin[i3];
+          nodes = resolve(item);
+          if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end && (nodes[nodes.length - 1] === start2 || nodes[0] === start2)) {
+            currWays[0] = reverse(currWays[0]);
+            currNodes.reverse();
+            start2 = currNodes[0];
+            end = currNodes[currNodes.length - 1];
+          }
+          if (nodes[0] === end) {
+            fn = currNodes.push;
+            nodes = nodes.slice(1);
+            break;
+          } else if (nodes[nodes.length - 1] === end) {
+            fn = currNodes.push;
+            nodes = nodes.slice(0, -1).reverse();
+            item = reverse(item);
+            break;
+          } else if (nodes[nodes.length - 1] === start2) {
+            fn = currNodes.unshift;
+            nodes = nodes.slice(0, -1);
+            break;
+          } else if (nodes[0] === start2) {
+            fn = currNodes.unshift;
+            nodes = nodes.slice(1).reverse();
+            item = reverse(item);
+            break;
+          } else {
+            fn = nodes = null;
+          }
+        }
+        if (!nodes) {
+          break;
+        }
+        fn.apply(currWays, [item]);
+        fn.apply(currNodes, nodes);
+        toJoin.splice(i3, 1);
+      }
+      currWays.nodes = currNodes;
+      sequences.push(currWays);
     }
-    object = Object(object);
-    return arrayFilter_default(nativeGetSymbols(object), function(symbol) {
-      return propertyIsEnumerable2.call(object, symbol);
-    });
-  };
-  var getSymbols_default = getSymbols;
-
-  // node_modules/lodash-es/_baseGetAllKeys.js
-  function baseGetAllKeys(object, keysFunc, symbolsFunc) {
-    var result = keysFunc(object);
-    return isArray_default(object) ? result : arrayPush_default(result, symbolsFunc(object));
-  }
-  var baseGetAllKeys_default = baseGetAllKeys;
-
-  // node_modules/lodash-es/_getAllKeys.js
-  function getAllKeys(object) {
-    return baseGetAllKeys_default(object, keys_default, getSymbols_default);
+    return sequences;
   }
-  var getAllKeys_default = getAllKeys;
-
-  // node_modules/lodash-es/_DataView.js
-  var DataView2 = getNative_default(root_default, "DataView");
-  var DataView_default = DataView2;
-
-  // node_modules/lodash-es/_Promise.js
-  var Promise2 = getNative_default(root_default, "Promise");
-  var Promise_default = Promise2;
 
-  // node_modules/lodash-es/_Set.js
-  var Set2 = getNative_default(root_default, "Set");
-  var Set_default = Set2;
-
-  // node_modules/lodash-es/_getTag.js
-  var mapTag2 = "[object Map]";
-  var objectTag2 = "[object Object]";
-  var promiseTag = "[object Promise]";
-  var setTag2 = "[object Set]";
-  var weakMapTag2 = "[object WeakMap]";
-  var dataViewTag2 = "[object DataView]";
-  var dataViewCtorString = toSource_default(DataView_default);
-  var mapCtorString = toSource_default(Map_default);
-  var promiseCtorString = toSource_default(Promise_default);
-  var setCtorString = toSource_default(Set_default);
-  var weakMapCtorString = toSource_default(WeakMap_default);
-  var getTag = baseGetTag_default;
-  if (DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag2 || Map_default && getTag(new Map_default()) != mapTag2 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag2 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) {
-    getTag = function(value) {
-      var result = baseGetTag_default(value), Ctor = result == objectTag2 ? value.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : "";
-      if (ctorString) {
-        switch (ctorString) {
-          case dataViewCtorString:
-            return dataViewTag2;
-          case mapCtorString:
-            return mapTag2;
-          case promiseCtorString:
-            return promiseTag;
-          case setCtorString:
-            return setTag2;
-          case weakMapCtorString:
-            return weakMapTag2;
+  // modules/actions/add_member.js
+  function actionAddMember(relationId, member, memberIndex) {
+    return function action(graph) {
+      var relation = graph.entity(relationId);
+      var isPTv2 = /stop|platform/.test(member.role);
+      if (member.type === "way" && !isPTv2) {
+        graph = addWayMember(relation, graph);
+      } else {
+        if (isPTv2 && isNaN(memberIndex)) {
+          memberIndex = 0;
         }
+        graph = graph.replace(relation.addMember(member, memberIndex));
       }
-      return result;
+      return graph;
     };
+    function addWayMember(relation, graph) {
+      var groups, item, i3, j2, k2;
+      var PTv2members = [];
+      var members = [];
+      for (i3 = 0; i3 < relation.members.length; i3++) {
+        var m2 = relation.members[i3];
+        if (/stop|platform/.test(m2.role)) {
+          PTv2members.push(m2);
+        } else {
+          members.push(m2);
+        }
+      }
+      relation = relation.update({ members });
+      groups = utilArrayGroupBy(relation.members, "type");
+      groups.way = groups.way || [];
+      groups.way.push(member);
+      members = withIndex(groups.way);
+      var joined = osmJoinWays(members, graph);
+      for (i3 = 0; i3 < joined.length; i3++) {
+        var segment = joined[i3];
+        var nodes = segment.nodes.slice();
+        var startIndex = segment[0].index;
+        for (j2 = 0; j2 < members.length; j2++) {
+          if (members[j2].index === startIndex) {
+            break;
+          }
+        }
+        for (k2 = 0; k2 < segment.length; k2++) {
+          item = segment[k2];
+          var way = graph.entity(item.id);
+          if (k2 > 0) {
+            if (j2 + k2 >= members.length || item.index !== members[j2 + k2].index) {
+              moveMember(members, item.index, j2 + k2);
+            }
+          }
+          nodes.splice(0, way.nodes.length - 1);
+        }
+      }
+      var wayMembers = [];
+      for (i3 = 0; i3 < members.length; i3++) {
+        item = members[i3];
+        if (item.index === -1) continue;
+        wayMembers.push(utilObjectOmit(item, ["index"]));
+      }
+      var newMembers = PTv2members.concat(groups.node || [], wayMembers, groups.relation || []);
+      return graph.replace(relation.update({ members: newMembers }));
+      function moveMember(arr, findIndex, toIndex) {
+        var i4;
+        for (i4 = 0; i4 < arr.length; i4++) {
+          if (arr[i4].index === findIndex) {
+            break;
+          }
+        }
+        var item2 = Object.assign({}, arr[i4]);
+        arr[i4].index = -1;
+        delete item2.index;
+        arr.splice(toIndex, 0, item2);
+      }
+      function withIndex(arr) {
+        var result = new Array(arr.length);
+        for (var i4 = 0; i4 < arr.length; i4++) {
+          result[i4] = Object.assign({}, arr[i4]);
+          result[i4].index = i4;
+        }
+        return result;
+      }
+    }
   }
-  var getTag_default = getTag;
-
-  // node_modules/lodash-es/_Uint8Array.js
-  var Uint8Array2 = root_default.Uint8Array;
-  var Uint8Array_default = Uint8Array2;
-
-  // node_modules/lodash-es/_setCacheAdd.js
-  var HASH_UNDEFINED3 = "__lodash_hash_undefined__";
-  function setCacheAdd(value) {
-    this.__data__.set(value, HASH_UNDEFINED3);
-    return this;
-  }
-  var setCacheAdd_default = setCacheAdd;
-
-  // node_modules/lodash-es/_setCacheHas.js
-  function setCacheHas(value) {
-    return this.__data__.has(value);
-  }
-  var setCacheHas_default = setCacheHas;
 
-  // node_modules/lodash-es/_SetCache.js
-  function SetCache(values) {
-    var index = -1, length2 = values == null ? 0 : values.length;
-    this.__data__ = new MapCache_default();
-    while (++index < length2) {
-      this.add(values[index]);
-    }
+  // modules/actions/add_midpoint.js
+  function actionAddMidpoint(midpoint, node) {
+    return function(graph) {
+      graph = graph.replace(node.move(midpoint.loc));
+      var parents = utilArrayIntersection(
+        graph.parentWays(graph.entity(midpoint.edge[0])),
+        graph.parentWays(graph.entity(midpoint.edge[1]))
+      );
+      parents.forEach(function(way) {
+        for (var i3 = 0; i3 < way.nodes.length - 1; i3++) {
+          if (geoEdgeEqual([way.nodes[i3], way.nodes[i3 + 1]], midpoint.edge)) {
+            graph = graph.replace(graph.entity(way.id).addNode(node.id, i3 + 1));
+            return;
+          }
+        }
+      });
+      return graph;
+    };
   }
-  SetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default;
-  SetCache.prototype.has = setCacheHas_default;
-  var SetCache_default = SetCache;
 
-  // node_modules/lodash-es/_arraySome.js
-  function arraySome(array2, predicate) {
-    var index = -1, length2 = array2 == null ? 0 : array2.length;
-    while (++index < length2) {
-      if (predicate(array2[index], index, array2)) {
-        return true;
-      }
-    }
-    return false;
+  // modules/actions/add_vertex.js
+  function actionAddVertex(wayId, nodeId, index) {
+    return function(graph) {
+      return graph.replace(graph.entity(wayId).addNode(nodeId, index));
+    };
   }
-  var arraySome_default = arraySome;
 
-  // node_modules/lodash-es/_cacheHas.js
-  function cacheHas(cache, key) {
-    return cache.has(key);
+  // modules/actions/change_member.js
+  function actionChangeMember(relationId, member, memberIndex) {
+    return function(graph) {
+      return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
+    };
   }
-  var cacheHas_default = cacheHas;
 
-  // node_modules/lodash-es/_equalArrays.js
-  var COMPARE_PARTIAL_FLAG = 1;
-  var COMPARE_UNORDERED_FLAG = 2;
-  function equalArrays(array2, other, bitmask, customizer, equalFunc, stack) {
-    var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array2.length, othLength = other.length;
-    if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
-      return false;
-    }
-    var arrStacked = stack.get(array2);
-    var othStacked = stack.get(other);
-    if (arrStacked && othStacked) {
-      return arrStacked == other && othStacked == array2;
-    }
-    var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0;
-    stack.set(array2, other);
-    stack.set(other, array2);
-    while (++index < arrLength) {
-      var arrValue = array2[index], othValue = other[index];
-      if (customizer) {
-        var compared = isPartial ? customizer(othValue, arrValue, index, other, array2, stack) : customizer(arrValue, othValue, index, array2, other, stack);
-      }
-      if (compared !== void 0) {
-        if (compared) {
-          continue;
+  // modules/actions/change_preset.js
+  function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
+    return function action(graph) {
+      var entity = graph.entity(entityID);
+      var geometry = entity.geometry(graph);
+      var tags = entity.tags;
+      const loc = entity.extent(graph).center();
+      var preserveKeys;
+      if (newPreset) {
+        preserveKeys = [];
+        if (newPreset.addTags) {
+          preserveKeys = preserveKeys.concat(Object.keys(newPreset.addTags));
         }
-        result = false;
-        break;
-      }
-      if (seen) {
-        if (!arraySome_default(other, function(othValue2, othIndex) {
-          if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
-            return seen.push(othIndex);
-          }
-        })) {
-          result = false;
-          break;
+        if (oldPreset && !oldPreset.id.startsWith(newPreset.id)) {
+          newPreset.fields(loc).concat(newPreset.moreFields(loc)).filter((f2) => f2.matchGeometry(geometry)).map((f2) => f2.key).filter(Boolean).forEach((key) => preserveKeys.push(key));
         }
-      } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
-        result = false;
-        break;
       }
-    }
-    stack["delete"](array2);
-    stack["delete"](other);
-    return result;
-  }
-  var equalArrays_default = equalArrays;
-
-  // node_modules/lodash-es/_mapToArray.js
-  function mapToArray(map2) {
-    var index = -1, result = Array(map2.size);
-    map2.forEach(function(value, key) {
-      result[++index] = [key, value];
-    });
-    return result;
+      if (oldPreset) tags = oldPreset.unsetTags(tags, geometry, preserveKeys, false, loc);
+      if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults, loc);
+      return graph.replace(entity.update({ tags }));
+    };
   }
-  var mapToArray_default = mapToArray;
 
-  // node_modules/lodash-es/_setToArray.js
-  function setToArray(set4) {
-    var index = -1, result = Array(set4.size);
-    set4.forEach(function(value) {
-      result[++index] = value;
-    });
-    return result;
+  // modules/actions/change_tags.js
+  function actionChangeTags(entityId, tags) {
+    return function(graph) {
+      var entity = graph.entity(entityId);
+      return graph.replace(entity.update({ tags }));
+    };
   }
-  var setToArray_default = setToArray;
 
-  // node_modules/lodash-es/_equalByTag.js
-  var COMPARE_PARTIAL_FLAG2 = 1;
-  var COMPARE_UNORDERED_FLAG2 = 2;
-  var boolTag2 = "[object Boolean]";
-  var dateTag2 = "[object Date]";
-  var errorTag2 = "[object Error]";
-  var mapTag3 = "[object Map]";
-  var numberTag2 = "[object Number]";
-  var regexpTag2 = "[object RegExp]";
-  var setTag3 = "[object Set]";
-  var stringTag2 = "[object String]";
-  var symbolTag2 = "[object Symbol]";
-  var arrayBufferTag2 = "[object ArrayBuffer]";
-  var dataViewTag3 = "[object DataView]";
-  var symbolProto2 = Symbol_default ? Symbol_default.prototype : void 0;
-  var symbolValueOf = symbolProto2 ? symbolProto2.valueOf : void 0;
-  function equalByTag(object, other, tag2, bitmask, customizer, equalFunc, stack) {
-    switch (tag2) {
-      case dataViewTag3:
-        if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
-          return false;
+  // modules/osm/node.js
+  var cardinal = {
+    north: 0,
+    n: 0,
+    northnortheast: 22,
+    nne: 22,
+    northeast: 45,
+    ne: 45,
+    eastnortheast: 67,
+    ene: 67,
+    east: 90,
+    e: 90,
+    eastsoutheast: 112,
+    ese: 112,
+    southeast: 135,
+    se: 135,
+    southsoutheast: 157,
+    sse: 157,
+    south: 180,
+    s: 180,
+    southsouthwest: 202,
+    ssw: 202,
+    southwest: 225,
+    sw: 225,
+    westsouthwest: 247,
+    wsw: 247,
+    west: 270,
+    w: 270,
+    westnorthwest: 292,
+    wnw: 292,
+    northwest: 315,
+    nw: 315,
+    northnorthwest: 337,
+    nnw: 337
+  };
+  function osmNode() {
+    if (!(this instanceof osmNode)) {
+      return new osmNode().initialize(arguments);
+    } else if (arguments.length) {
+      this.initialize(arguments);
+    }
+  }
+  osmEntity.node = osmNode;
+  osmNode.prototype = Object.create(osmEntity.prototype);
+  Object.assign(osmNode.prototype, {
+    type: "node",
+    loc: [9999, 9999],
+    extent: function() {
+      return new geoExtent(this.loc);
+    },
+    geometry: function(graph) {
+      return graph.transient(this, "geometry", function() {
+        return graph.isPoi(this) ? "point" : "vertex";
+      });
+    },
+    move: function(loc) {
+      return this.update({ loc });
+    },
+    isDegenerate: function() {
+      return !(Array.isArray(this.loc) && this.loc.length === 2 && this.loc[0] >= -180 && this.loc[0] <= 180 && this.loc[1] >= -90 && this.loc[1] <= 90);
+    },
+    // Inspect tags and geometry to determine which direction(s) this node/vertex points
+    directions: function(resolver, projection2) {
+      var val;
+      var i3;
+      if (this.isHighwayIntersection(resolver) && (this.tags.stop || "").toLowerCase() === "all") {
+        val = "all";
+      } else {
+        val = (this.tags.direction || "").toLowerCase();
+        var re3 = /:direction$/i;
+        var keys2 = Object.keys(this.tags);
+        for (i3 = 0; i3 < keys2.length; i3++) {
+          if (re3.test(keys2[i3])) {
+            val = this.tags[keys2[i3]].toLowerCase();
+            break;
+          }
         }
-        object = object.buffer;
-        other = other.buffer;
-      case arrayBufferTag2:
-        if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object), new Uint8Array_default(other))) {
-          return false;
+      }
+      if (val === "") return [];
+      var values = val.split(";");
+      var results = [];
+      values.forEach(function(v2) {
+        if (cardinal[v2] !== void 0) {
+          v2 = cardinal[v2];
         }
-        return true;
-      case boolTag2:
-      case dateTag2:
-      case numberTag2:
-        return eq_default(+object, +other);
-      case errorTag2:
-        return object.name == other.name && object.message == other.message;
-      case regexpTag2:
-      case stringTag2:
-        return object == other + "";
-      case mapTag3:
-        var convert = mapToArray_default;
-      case setTag3:
-        var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;
-        convert || (convert = setToArray_default);
-        if (object.size != other.size && !isPartial) {
-          return false;
+        if (v2 !== "" && !isNaN(+v2)) {
+          results.push(+v2);
+          return;
         }
-        var stacked = stack.get(object);
-        if (stacked) {
-          return stacked == other;
+        var lookBackward = this.tags["traffic_sign:backward"] || v2 === "backward" || v2 === "both" || v2 === "all";
+        var lookForward = this.tags["traffic_sign:forward"] || v2 === "forward" || v2 === "both" || v2 === "all";
+        if (!lookForward && !lookBackward) return;
+        var nodeIds = {};
+        resolver.parentWays(this).filter((p2) => this.tags.highway || this.tags.traffic_sign || this.tags.traffic_calming || this.tags.barrier || this.tags.cycleway ? p2.tags.highway : true).filter((p2) => this.tags.railway ? p2.tags.railway : true).filter((p2) => this.tags.waterway ? p2.tags.waterway : true).forEach(function(parent) {
+          var nodes = parent.nodes;
+          for (i3 = 0; i3 < nodes.length; i3++) {
+            if (nodes[i3] === this.id) {
+              if (lookForward && i3 > 0) {
+                nodeIds[nodes[i3 - 1]] = true;
+              }
+              if (lookBackward && i3 < nodes.length - 1) {
+                nodeIds[nodes[i3 + 1]] = true;
+              }
+            }
+          }
+        }, this);
+        Object.keys(nodeIds).forEach(function(nodeId) {
+          results.push(
+            geoAngle(this, resolver.entity(nodeId), projection2) * (180 / Math.PI) + 90
+          );
+        }, this);
+      }, this);
+      return utilArrayUniq(results);
+    },
+    isCrossing: function() {
+      return this.tags.highway === "crossing" || this.tags.railway && this.tags.railway.indexOf("crossing") !== -1;
+    },
+    isEndpoint: function(resolver) {
+      return resolver.transient(this, "isEndpoint", function() {
+        var id2 = this.id;
+        return resolver.parentWays(this).filter(function(parent) {
+          return !parent.isClosed() && !!parent.affix(id2);
+        }).length > 0;
+      });
+    },
+    isConnected: function(resolver) {
+      return resolver.transient(this, "isConnected", function() {
+        var parents = resolver.parentWays(this);
+        if (parents.length > 1) {
+          for (var i3 in parents) {
+            if (parents[i3].geometry(resolver) === "line" && parents[i3].hasInterestingTags()) return true;
+          }
+        } else if (parents.length === 1) {
+          var way = parents[0];
+          var nodes = way.nodes.slice();
+          if (way.isClosed()) {
+            nodes.pop();
+          }
+          return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
         }
-        bitmask |= COMPARE_UNORDERED_FLAG2;
-        stack.set(object, other);
-        var result = equalArrays_default(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
-        stack["delete"](object);
-        return result;
-      case symbolTag2:
-        if (symbolValueOf) {
-          return symbolValueOf.call(object) == symbolValueOf.call(other);
+        return false;
+      });
+    },
+    parentIntersectionWays: function(resolver) {
+      return resolver.transient(this, "parentIntersectionWays", function() {
+        return resolver.parentWays(this).filter(function(parent) {
+          return (parent.tags.highway || parent.tags.waterway || parent.tags.railway || parent.tags.aeroway) && parent.geometry(resolver) === "line";
+        });
+      });
+    },
+    isIntersection: function(resolver) {
+      return this.parentIntersectionWays(resolver).length > 1;
+    },
+    isHighwayIntersection: function(resolver) {
+      return resolver.transient(this, "isHighwayIntersection", function() {
+        return resolver.parentWays(this).filter(function(parent) {
+          return parent.tags.highway && parent.geometry(resolver) === "line";
+        }).length > 1;
+      });
+    },
+    isOnAddressLine: function(resolver) {
+      return resolver.transient(this, "isOnAddressLine", function() {
+        return resolver.parentWays(this).filter(function(parent) {
+          return parent.tags.hasOwnProperty("addr:interpolation") && parent.geometry(resolver) === "line";
+        }).length > 0;
+      });
+    },
+    asJXON: function(changeset_id) {
+      var r2 = {
+        node: {
+          "@id": this.osmId(),
+          "@lon": this.loc[0],
+          "@lat": this.loc[1],
+          "@version": this.version || 0,
+          tag: Object.keys(this.tags).map(function(k2) {
+            return { keyAttributes: { k: k2, v: this.tags[k2] } };
+          }, this)
         }
+      };
+      if (changeset_id) r2.node["@changeset"] = changeset_id;
+      return r2;
+    },
+    asGeoJSON: function() {
+      return {
+        type: "Point",
+        coordinates: this.loc
+      };
     }
-    return false;
-  }
-  var equalByTag_default = equalByTag;
+  });
 
-  // node_modules/lodash-es/_equalObjects.js
-  var COMPARE_PARTIAL_FLAG3 = 1;
-  var objectProto11 = Object.prototype;
-  var hasOwnProperty8 = objectProto11.hasOwnProperty;
-  function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
-    var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object), objLength = objProps.length, othProps = getAllKeys_default(other), othLength = othProps.length;
-    if (objLength != othLength && !isPartial) {
-      return false;
-    }
-    var index = objLength;
-    while (index--) {
-      var key = objProps[index];
-      if (!(isPartial ? key in other : hasOwnProperty8.call(other, key))) {
-        return false;
-      }
-    }
-    var objStacked = stack.get(object);
-    var othStacked = stack.get(other);
-    if (objStacked && othStacked) {
-      return objStacked == other && othStacked == object;
-    }
-    var result = true;
-    stack.set(object, other);
-    stack.set(other, object);
-    var skipCtor = isPartial;
-    while (++index < objLength) {
-      key = objProps[index];
-      var objValue = object[key], othValue = other[key];
-      if (customizer) {
-        var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
-      }
-      if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
-        result = false;
-        break;
+  // modules/actions/circularize.js
+  function actionCircularize(wayId, projection2, maxAngle) {
+    maxAngle = (maxAngle || 20) * Math.PI / 180;
+    var action = function(graph, t2) {
+      if (t2 === null || !isFinite(t2)) t2 = 1;
+      t2 = Math.min(Math.max(+t2, 0), 1);
+      var way = graph.entity(wayId);
+      var origNodes = {};
+      graph.childNodes(way).forEach(function(node2) {
+        if (!origNodes[node2.id]) origNodes[node2.id] = node2;
+      });
+      if (!way.isConvex(graph)) {
+        graph = action.makeConvex(graph);
       }
-      skipCtor || (skipCtor = key == "constructor");
-    }
-    if (result && !skipCtor) {
-      var objCtor = object.constructor, othCtor = other.constructor;
-      if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
-        result = false;
+      var nodes = utilArrayUniq(graph.childNodes(way));
+      var keyNodes = nodes.filter(function(n3) {
+        return graph.parentWays(n3).length !== 1;
+      });
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var keyPoints = keyNodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var centroid = points.length === 2 ? geoVecInterp(points[0], points[1], 0.5) : centroid_default2(points);
+      var radius = median(points, function(p2) {
+        return geoVecLength(centroid, p2);
+      });
+      var sign2 = area_default3(points) > 0 ? 1 : -1;
+      var ids, i3, j2, k2;
+      if (!keyNodes.length) {
+        keyNodes = [nodes[0]];
+        keyPoints = [points[0]];
       }
-    }
-    stack["delete"](object);
-    stack["delete"](other);
-    return result;
-  }
-  var equalObjects_default = equalObjects;
-
-  // node_modules/lodash-es/_baseIsEqualDeep.js
-  var COMPARE_PARTIAL_FLAG4 = 1;
-  var argsTag3 = "[object Arguments]";
-  var arrayTag2 = "[object Array]";
-  var objectTag3 = "[object Object]";
-  var objectProto12 = Object.prototype;
-  var hasOwnProperty9 = objectProto12.hasOwnProperty;
-  function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
-    var objIsArr = isArray_default(object), othIsArr = isArray_default(other), objTag = objIsArr ? arrayTag2 : getTag_default(object), othTag = othIsArr ? arrayTag2 : getTag_default(other);
-    objTag = objTag == argsTag3 ? objectTag3 : objTag;
-    othTag = othTag == argsTag3 ? objectTag3 : othTag;
-    var objIsObj = objTag == objectTag3, othIsObj = othTag == objectTag3, isSameTag = objTag == othTag;
-    if (isSameTag && isBuffer_default(object)) {
-      if (!isBuffer_default(other)) {
-        return false;
+      if (keyNodes.length === 1) {
+        var index = nodes.indexOf(keyNodes[0]);
+        var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
+        keyNodes.push(nodes[oppositeIndex]);
+        keyPoints.push(points[oppositeIndex]);
       }
-      objIsArr = true;
-      objIsObj = false;
-    }
-    if (isSameTag && !objIsObj) {
-      stack || (stack = new Stack_default());
-      return objIsArr || isTypedArray_default(object) ? equalArrays_default(object, other, bitmask, customizer, equalFunc, stack) : equalByTag_default(object, other, objTag, bitmask, customizer, equalFunc, stack);
-    }
-    if (!(bitmask & COMPARE_PARTIAL_FLAG4)) {
-      var objIsWrapped = objIsObj && hasOwnProperty9.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty9.call(other, "__wrapped__");
-      if (objIsWrapped || othIsWrapped) {
-        var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
-        stack || (stack = new Stack_default());
-        return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
+      for (i3 = 0; i3 < keyPoints.length; i3++) {
+        var nextKeyNodeIndex = (i3 + 1) % keyNodes.length;
+        var startNode = keyNodes[i3];
+        var endNode = keyNodes[nextKeyNodeIndex];
+        var startNodeIndex = nodes.indexOf(startNode);
+        var endNodeIndex = nodes.indexOf(endNode);
+        var numberNewPoints = -1;
+        var indexRange = endNodeIndex - startNodeIndex;
+        var nearNodes = {};
+        var inBetweenNodes = [];
+        var startAngle, endAngle, totalAngle, eachAngle;
+        var angle2, loc, node, origNode;
+        if (indexRange < 0) {
+          indexRange += nodes.length;
+        }
+        var distance = geoVecLength(centroid, keyPoints[i3]) || 1e-4;
+        keyPoints[i3] = [
+          centroid[0] + (keyPoints[i3][0] - centroid[0]) / distance * radius,
+          centroid[1] + (keyPoints[i3][1] - centroid[1]) / distance * radius
+        ];
+        loc = projection2.invert(keyPoints[i3]);
+        node = keyNodes[i3];
+        origNode = origNodes[node.id];
+        node = node.move(geoVecInterp(origNode.loc, loc, t2));
+        graph = graph.replace(node);
+        startAngle = Math.atan2(keyPoints[i3][1] - centroid[1], keyPoints[i3][0] - centroid[0]);
+        endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
+        totalAngle = endAngle - startAngle;
+        if (totalAngle * sign2 > 0) {
+          totalAngle = -sign2 * (2 * Math.PI - Math.abs(totalAngle));
+        }
+        do {
+          numberNewPoints++;
+          eachAngle = totalAngle / (indexRange + numberNewPoints);
+        } while (Math.abs(eachAngle) > maxAngle);
+        for (j2 = 1; j2 < indexRange; j2++) {
+          angle2 = startAngle + j2 * eachAngle;
+          loc = projection2.invert([
+            centroid[0] + Math.cos(angle2) * radius,
+            centroid[1] + Math.sin(angle2) * radius
+          ]);
+          node = nodes[(j2 + startNodeIndex) % nodes.length];
+          origNode = origNodes[node.id];
+          nearNodes[node.id] = angle2;
+          node = node.move(geoVecInterp(origNode.loc, loc, t2));
+          graph = graph.replace(node);
+        }
+        for (j2 = 0; j2 < numberNewPoints; j2++) {
+          angle2 = startAngle + (indexRange + j2) * eachAngle;
+          loc = projection2.invert([
+            centroid[0] + Math.cos(angle2) * radius,
+            centroid[1] + Math.sin(angle2) * radius
+          ]);
+          var min3 = Infinity;
+          for (var nodeId in nearNodes) {
+            var nearAngle = nearNodes[nodeId];
+            var dist = Math.abs(nearAngle - angle2);
+            if (dist < min3) {
+              min3 = dist;
+              origNode = origNodes[nodeId];
+            }
+          }
+          node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t2) });
+          graph = graph.replace(node);
+          nodes.splice(endNodeIndex + j2, 0, node);
+          inBetweenNodes.push(node.id);
+        }
+        if (indexRange === 1 && inBetweenNodes.length) {
+          var startIndex1 = way.nodes.lastIndexOf(startNode.id);
+          var endIndex1 = way.nodes.lastIndexOf(endNode.id);
+          var wayDirection1 = endIndex1 - startIndex1;
+          if (wayDirection1 < -1) {
+            wayDirection1 = 1;
+          }
+          var parentWays = graph.parentWays(keyNodes[i3]);
+          for (j2 = 0; j2 < parentWays.length; j2++) {
+            var sharedWay = parentWays[j2];
+            if (sharedWay === way) continue;
+            if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
+              var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
+              var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
+              var wayDirection2 = endIndex2 - startIndex2;
+              var insertAt = endIndex2;
+              if (wayDirection2 < -1) {
+                wayDirection2 = 1;
+              }
+              if (wayDirection1 !== wayDirection2) {
+                inBetweenNodes.reverse();
+                insertAt = startIndex2;
+              }
+              for (k2 = 0; k2 < inBetweenNodes.length; k2++) {
+                sharedWay = sharedWay.addNode(inBetweenNodes[k2], insertAt + k2);
+              }
+              graph = graph.replace(sharedWay);
+            }
+          }
+        }
       }
-    }
-    if (!isSameTag) {
-      return false;
-    }
-    stack || (stack = new Stack_default());
-    return equalObjects_default(object, other, bitmask, customizer, equalFunc, stack);
-  }
-  var baseIsEqualDeep_default = baseIsEqualDeep;
-
-  // node_modules/lodash-es/_baseIsEqual.js
-  function baseIsEqual(value, other, bitmask, customizer, stack) {
-    if (value === other) {
-      return true;
-    }
-    if (value == null || other == null || !isObjectLike_default(value) && !isObjectLike_default(other)) {
-      return value !== value && other !== other;
-    }
-    return baseIsEqualDeep_default(value, other, bitmask, customizer, baseIsEqual, stack);
-  }
-  var baseIsEqual_default = baseIsEqual;
-
-  // node_modules/lodash-es/now.js
-  var now2 = function() {
-    return root_default.Date.now();
-  };
-  var now_default = now2;
-
-  // node_modules/lodash-es/debounce.js
-  var FUNC_ERROR_TEXT = "Expected a function";
-  var nativeMax = Math.max;
-  var nativeMin = Math.min;
-  function debounce(func, wait, options2) {
-    var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
-    if (typeof func != "function") {
-      throw new TypeError(FUNC_ERROR_TEXT);
-    }
-    wait = toNumber_default(wait) || 0;
-    if (isObject_default(options2)) {
-      leading = !!options2.leading;
-      maxing = "maxWait" in options2;
-      maxWait = maxing ? nativeMax(toNumber_default(options2.maxWait) || 0, wait) : maxWait;
-      trailing = "trailing" in options2 ? !!options2.trailing : trailing;
-    }
-    function invokeFunc(time) {
-      var args = lastArgs, thisArg = lastThis;
-      lastArgs = lastThis = void 0;
-      lastInvokeTime = time;
-      result = func.apply(thisArg, args);
-      return result;
-    }
-    function leadingEdge(time) {
-      lastInvokeTime = time;
-      timerId = setTimeout(timerExpired, wait);
-      return leading ? invokeFunc(time) : result;
-    }
-    function remainingWait(time) {
-      var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
-      return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
-    }
-    function shouldInvoke(time) {
-      var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
-      return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
-    }
-    function timerExpired() {
-      var time = now_default();
-      if (shouldInvoke(time)) {
-        return trailingEdge(time);
+      ids = nodes.map(function(n3) {
+        return n3.id;
+      });
+      ids.push(ids[0]);
+      way = way.update({ nodes: ids });
+      graph = graph.replace(way);
+      return graph;
+    };
+    action.makeConvex = function(graph) {
+      var way = graph.entity(wayId);
+      var nodes = utilArrayUniq(graph.childNodes(way));
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var sign2 = area_default3(points) > 0 ? 1 : -1;
+      var hull = hull_default(points);
+      var i3, j2;
+      if (sign2 === -1) {
+        nodes.reverse();
+        points.reverse();
       }
-      timerId = setTimeout(timerExpired, remainingWait(time));
-    }
-    function trailingEdge(time) {
-      timerId = void 0;
-      if (trailing && lastArgs) {
-        return invokeFunc(time);
+      for (i3 = 0; i3 < hull.length - 1; i3++) {
+        var startIndex = points.indexOf(hull[i3]);
+        var endIndex = points.indexOf(hull[i3 + 1]);
+        var indexRange = endIndex - startIndex;
+        if (indexRange < 0) {
+          indexRange += nodes.length;
+        }
+        for (j2 = 1; j2 < indexRange; j2++) {
+          var point = geoVecInterp(hull[i3], hull[i3 + 1], j2 / indexRange);
+          var node = nodes[(j2 + startIndex) % nodes.length].move(projection2.invert(point));
+          graph = graph.replace(node);
+        }
       }
-      lastArgs = lastThis = void 0;
-      return result;
-    }
-    function cancel() {
-      if (timerId !== void 0) {
-        clearTimeout(timerId);
+      return graph;
+    };
+    action.disabled = function(graph) {
+      if (!graph.entity(wayId).isClosed()) {
+        return "not_closed";
       }
-      lastInvokeTime = 0;
-      lastArgs = lastCallTime = lastThis = timerId = void 0;
-    }
-    function flush() {
-      return timerId === void 0 ? result : trailingEdge(now_default());
-    }
-    function debounced() {
-      var time = now_default(), isInvoking = shouldInvoke(time);
-      lastArgs = arguments;
-      lastThis = this;
-      lastCallTime = time;
-      if (isInvoking) {
-        if (timerId === void 0) {
-          return leadingEdge(lastCallTime);
-        }
-        if (maxing) {
-          clearTimeout(timerId);
-          timerId = setTimeout(timerExpired, wait);
-          return invokeFunc(lastCallTime);
+      var way = graph.entity(wayId);
+      var nodes = utilArrayUniq(graph.childNodes(way));
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var hull = hull_default(points);
+      var epsilonAngle = Math.PI / 180;
+      if (hull.length !== points.length || hull.length < 3) {
+        return false;
+      }
+      var centroid = centroid_default2(points);
+      var radius = geoVecLengthSquare(centroid, points[0]);
+      var i3, actualPoint;
+      for (i3 = 0; i3 < hull.length; i3++) {
+        actualPoint = hull[i3];
+        var actualDist = geoVecLengthSquare(actualPoint, centroid);
+        var diff = Math.abs(actualDist - radius);
+        if (diff > 0.05 * radius) {
+          return false;
         }
       }
-      if (timerId === void 0) {
-        timerId = setTimeout(timerExpired, wait);
+      for (i3 = 0; i3 < hull.length; i3++) {
+        actualPoint = hull[i3];
+        var nextPoint = hull[(i3 + 1) % hull.length];
+        var startAngle = Math.atan2(actualPoint[1] - centroid[1], actualPoint[0] - centroid[0]);
+        var endAngle = Math.atan2(nextPoint[1] - centroid[1], nextPoint[0] - centroid[0]);
+        var angle2 = endAngle - startAngle;
+        if (angle2 < 0) {
+          angle2 = -angle2;
+        }
+        if (angle2 > Math.PI) {
+          angle2 = 2 * Math.PI - angle2;
+        }
+        if (angle2 > maxAngle + epsilonAngle) {
+          return false;
+        }
       }
-      return result;
-    }
-    debounced.cancel = cancel;
-    debounced.flush = flush;
-    return debounced;
-  }
-  var debounce_default = debounce;
-
-  // node_modules/lodash-es/_escapeHtmlChar.js
-  var htmlEscapes = {
-    "&": "&amp;",
-    "<": "&lt;",
-    ">": "&gt;",
-    '"': "&quot;",
-    "'": "&#39;"
-  };
-  var escapeHtmlChar = basePropertyOf_default(htmlEscapes);
-  var escapeHtmlChar_default = escapeHtmlChar;
-
-  // node_modules/lodash-es/escape.js
-  var reUnescapedHtml = /[&<>"']/g;
-  var reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
-  function escape2(string) {
-    string = toString_default(string);
-    return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar_default) : string;
-  }
-  var escape_default = escape2;
-
-  // node_modules/lodash-es/isEqual.js
-  function isEqual(value, other) {
-    return baseIsEqual_default(value, other);
-  }
-  var isEqual_default = isEqual;
-
-  // node_modules/lodash-es/isNumber.js
-  var numberTag3 = "[object Number]";
-  function isNumber(value) {
-    return typeof value == "number" || isObjectLike_default(value) && baseGetTag_default(value) == numberTag3;
+      return "already_circular";
+    };
+    action.transitionable = true;
+    return action;
   }
-  var isNumber_default = isNumber;
 
-  // node_modules/lodash-es/throttle.js
-  var FUNC_ERROR_TEXT2 = "Expected a function";
-  function throttle(func, wait, options2) {
-    var leading = true, trailing = true;
-    if (typeof func != "function") {
-      throw new TypeError(FUNC_ERROR_TEXT2);
-    }
-    if (isObject_default(options2)) {
-      leading = "leading" in options2 ? !!options2.leading : leading;
-      trailing = "trailing" in options2 ? !!options2.trailing : trailing;
+  // modules/actions/delete_way.js
+  function actionDeleteWay(wayID) {
+    function canDeleteNode(node, graph) {
+      if (graph.parentWays(node).length || graph.parentRelations(node).length) return false;
+      var geometries = osmNodeGeometriesForTags(node.tags);
+      if (geometries.point) return false;
+      if (geometries.vertex) return true;
+      return !node.hasInterestingTags();
     }
-    return debounce_default(func, wait, {
-      "leading": leading,
-      "maxWait": wait,
-      "trailing": trailing
-    });
+    var action = function(graph) {
+      var way = graph.entity(wayID);
+      graph.parentRelations(way).forEach(function(parent) {
+        parent = parent.removeMembersWithID(wayID);
+        graph = graph.replace(parent);
+        if (parent.isDegenerate()) {
+          graph = actionDeleteRelation(parent.id)(graph);
+        }
+      });
+      new Set(way.nodes).forEach(function(nodeID) {
+        graph = graph.replace(way.removeNode(nodeID));
+        var node = graph.entity(nodeID);
+        if (canDeleteNode(node, graph)) {
+          graph = graph.remove(node);
+        }
+      });
+      return graph.remove(way);
+    };
+    return action;
   }
-  var throttle_default = throttle;
-
-  // node_modules/lodash-es/_unescapeHtmlChar.js
-  var htmlUnescapes = {
-    "&amp;": "&",
-    "&lt;": "<",
-    "&gt;": ">",
-    "&quot;": '"',
-    "&#39;": "'"
-  };
-  var unescapeHtmlChar = basePropertyOf_default(htmlUnescapes);
-  var unescapeHtmlChar_default = unescapeHtmlChar;
 
-  // node_modules/lodash-es/unescape.js
-  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g;
-  var reHasEscapedHtml = RegExp(reEscapedHtml.source);
-  function unescape(string) {
-    string = toString_default(string);
-    return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar_default) : string;
+  // modules/actions/delete_multiple.js
+  function actionDeleteMultiple(ids) {
+    var actions = {
+      way: actionDeleteWay,
+      node: actionDeleteNode,
+      relation: actionDeleteRelation
+    };
+    var action = function(graph) {
+      ids.forEach(function(id2) {
+        if (graph.hasEntity(id2)) {
+          graph = actions[graph.entity(id2).type](id2)(graph);
+        }
+      });
+      return graph;
+    };
+    return action;
   }
-  var unescape_default = unescape;
 
-  // modules/util/detect.js
-  var _detected;
-  function utilDetect(refresh2) {
-    if (_detected && !refresh2) return _detected;
-    _detected = {};
-    const ua = navigator.userAgent;
-    let m2 = null;
-    m2 = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);
-    if (m2 !== null) {
-      _detected.browser = m2[1];
-      _detected.version = m2[2];
-    }
-    if (!_detected.browser) {
-      m2 = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);
-      if (m2 !== null) {
-        _detected.browser = "msie";
-        _detected.version = m2[1];
-      }
-    }
-    if (!_detected.browser) {
-      m2 = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);
-      if (m2 !== null) {
-        _detected.browser = "Opera";
-        _detected.version = m2[2];
-      }
-    }
-    if (!_detected.browser) {
-      m2 = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
-      if (m2 !== null) {
-        _detected.browser = m2[1];
-        _detected.version = m2[2];
-        m2 = ua.match(/version\/([\.\d]+)/i);
-        if (m2 !== null) _detected.version = m2[1];
-      }
-    }
-    if (!_detected.browser) {
-      _detected.browser = navigator.appName;
-      _detected.version = navigator.appVersion;
-    }
-    _detected.version = _detected.version.split(/\W/).slice(0, 2).join(".");
-    _detected.opera = _detected.browser.toLowerCase() === "opera" && Number(_detected.version) < 15;
-    if (_detected.browser.toLowerCase() === "msie") {
-      _detected.ie = true;
-      _detected.browser = "Internet Explorer";
-      _detected.support = false;
-    } else {
-      _detected.ie = false;
-      _detected.support = true;
-    }
-    _detected.filedrop = window.FileReader && "ondrop" in window;
-    if (/Win/.test(ua)) {
-      _detected.os = "win";
-      _detected.platform = "Windows";
-    } else if (/Mac/.test(ua)) {
-      _detected.os = "mac";
-      _detected.platform = "Macintosh";
-    } else if (/X11/.test(ua) || /Linux/.test(ua)) {
-      _detected.os = "linux";
-      _detected.platform = "Linux";
-    } else {
-      _detected.os = "win";
-      _detected.platform = "Unknown";
-    }
-    _detected.isMobileWebKit = (/\b(iPad|iPhone|iPod)\b/.test(ua) || // HACK: iPadOS 13+ requests desktop sites by default by using a Mac user agent,
-    // so assume any "mac" with multitouch is actually iOS
-    navigator.platform === "MacIntel" && "maxTouchPoints" in navigator && navigator.maxTouchPoints > 1) && /WebKit/.test(ua) && !/Edge/.test(ua) && !window.MSStream;
-    _detected.browserLocales = Array.from(new Set(
-      // remove duplicates
-      [navigator.language].concat(navigator.languages || []).concat([
-        // old property for backwards compatibility
-        navigator.userLanguage
-      ]).filter(Boolean)
-    ));
-    const loc = window.top.location;
-    let origin = loc.origin;
-    if (!origin) {
-      origin = loc.protocol + "//" + loc.hostname + (loc.port ? ":" + loc.port : "");
+  // modules/actions/delete_relation.js
+  function actionDeleteRelation(relationID, allowUntaggedMembers) {
+    function canDeleteEntity(entity, graph) {
+      return !graph.parentWays(entity).length && !graph.parentRelations(entity).length && (!entity.hasInterestingTags() && !allowUntaggedMembers);
     }
-    _detected.host = origin + loc.pathname;
-    return _detected;
-  }
-
-  // modules/util/aes.js
-  var import_aes_js = __toESM(require_aes_js());
-  var DEFAULT_128 = [250, 157, 60, 79, 142, 134, 229, 129, 138, 126, 210, 129, 29, 71, 160, 208];
-  function utilAesEncrypt(text, key) {
-    key = key || DEFAULT_128;
-    const textBytes = import_aes_js.default.utils.utf8.toBytes(text);
-    const aesCtr = new import_aes_js.default.ModeOfOperation.ctr(key);
-    const encryptedBytes = aesCtr.encrypt(textBytes);
-    const encryptedHex = import_aes_js.default.utils.hex.fromBytes(encryptedBytes);
-    return encryptedHex;
-  }
-  function utilAesDecrypt(encryptedHex, key) {
-    key = key || DEFAULT_128;
-    const encryptedBytes = import_aes_js.default.utils.hex.toBytes(encryptedHex);
-    const aesCtr = new import_aes_js.default.ModeOfOperation.ctr(key);
-    const decryptedBytes = aesCtr.decrypt(encryptedBytes);
-    const text = import_aes_js.default.utils.utf8.fromBytes(decryptedBytes);
-    return text;
+    var action = function(graph) {
+      var relation = graph.entity(relationID);
+      graph.parentRelations(relation).forEach(function(parent) {
+        parent = parent.removeMembersWithID(relationID);
+        graph = graph.replace(parent);
+        if (parent.isDegenerate()) {
+          graph = actionDeleteRelation(parent.id)(graph);
+        }
+      });
+      var memberIDs = utilArrayUniq(relation.members.map(function(m2) {
+        return m2.id;
+      }));
+      memberIDs.forEach(function(memberID) {
+        graph = graph.replace(relation.removeMembersWithID(memberID));
+        var entity = graph.entity(memberID);
+        if (canDeleteEntity(entity, graph)) {
+          graph = actionDeleteMultiple([memberID])(graph);
+        }
+      });
+      return graph.remove(relation);
+    };
+    return action;
   }
 
-  // modules/util/clean_tags.js
-  function utilCleanTags(tags) {
-    var out = {};
-    for (var k2 in tags) {
-      if (!k2) continue;
-      var v2 = tags[k2];
-      if (v2 !== void 0) {
-        out[k2] = cleanValue(k2, v2);
-      }
-    }
-    return out;
-    function cleanValue(k3, v3) {
-      function keepSpaces(k4) {
-        return /_hours|_times|:conditional$/.test(k4);
-      }
-      function skip(k4) {
-        return /^(description|note|fixme|inscription)$/.test(k4);
-      }
-      if (skip(k3)) return v3;
-      var cleaned = v3.split(";").map(function(s2) {
-        return s2.trim();
-      }).join(keepSpaces(k3) ? "; " : ";");
-      if (k3.indexOf("website") !== -1 || k3.indexOf("email") !== -1 || cleaned.indexOf("http") === 0) {
-        cleaned = cleaned.replace(/[\u200B-\u200F\uFEFF]/g, "");
-      }
-      return cleaned;
-    }
+  // modules/actions/delete_node.js
+  function actionDeleteNode(nodeId) {
+    var action = function(graph) {
+      var node = graph.entity(nodeId);
+      graph.parentWays(node).forEach(function(parent) {
+        parent = parent.removeNode(nodeId);
+        graph = graph.replace(parent);
+        if (parent.isDegenerate()) {
+          graph = actionDeleteWay(parent.id)(graph);
+        }
+      });
+      graph.parentRelations(node).forEach(function(parent) {
+        parent = parent.removeMembersWithID(nodeId);
+        graph = graph.replace(parent);
+        if (parent.isDegenerate()) {
+          graph = actionDeleteRelation(parent.id)(graph);
+        }
+      });
+      return graph.remove(node);
+    };
+    return action;
   }
 
-  // modules/util/get_set_value.js
-  function utilGetSetValue(selection2, value, shouldUpdate) {
-    function setValue(value2, shouldUpdate2) {
-      function valueNull() {
-        delete this.value;
-      }
-      function valueConstant() {
-        if (shouldUpdate2(this.value, value2)) {
-          this.value = value2;
+  // modules/actions/connect.js
+  function actionConnect(nodeIDs) {
+    var action = function(graph) {
+      var survivor;
+      var node;
+      var parents;
+      var i3, j2;
+      nodeIDs.reverse();
+      var interestingIDs = [];
+      for (i3 = 0; i3 < nodeIDs.length; i3++) {
+        node = graph.entity(nodeIDs[i3]);
+        if (node.hasInterestingTags()) {
+          if (!node.isNew()) {
+            interestingIDs.push(node.id);
+          }
         }
       }
-      function valueFunction() {
-        var x2 = value2.apply(this, arguments);
-        if (x2 === null || x2 === void 0) {
-          delete this.value;
-        } else if (shouldUpdate2(this.value, x2)) {
-          this.value = x2;
+      survivor = graph.entity(utilOldestID(interestingIDs.length > 0 ? interestingIDs : nodeIDs));
+      for (i3 = 0; i3 < nodeIDs.length; i3++) {
+        node = graph.entity(nodeIDs[i3]);
+        if (node.id === survivor.id) continue;
+        parents = graph.parentWays(node);
+        for (j2 = 0; j2 < parents.length; j2++) {
+          graph = graph.replace(parents[j2].replaceNode(node.id, survivor.id));
         }
-      }
-      return value2 === null || value2 === void 0 ? valueNull : typeof value2 === "function" ? valueFunction : valueConstant;
-    }
-    if (arguments.length === 1) {
-      return selection2.property("value");
-    }
-    if (shouldUpdate === void 0) {
-      shouldUpdate = (a2, b2) => a2 !== b2;
-    }
-    return selection2.each(setValue(value, shouldUpdate));
-  }
-
-  // modules/util/keybinding.js
-  function utilKeybinding(namespace) {
-    var _keybindings = {};
-    function testBindings(d3_event, isCapturing) {
-      var didMatch = false;
-      var bindings = Object.keys(_keybindings).map(function(id2) {
-        return _keybindings[id2];
-      });
-      var i3, binding;
-      for (i3 = 0; i3 < bindings.length; i3++) {
-        binding = bindings[i3];
-        if (!binding.event.modifiers.shiftKey) continue;
-        if (!!binding.capture !== isCapturing) continue;
-        if (matches(d3_event, binding, true)) {
-          binding.callback(d3_event);
-          didMatch = true;
-          break;
+        parents = graph.parentRelations(node);
+        for (j2 = 0; j2 < parents.length; j2++) {
+          graph = graph.replace(parents[j2].replaceMember(node, survivor));
         }
+        survivor = survivor.mergeTags(node.tags);
+        graph = actionDeleteNode(node.id)(graph);
       }
-      if (didMatch) return;
-      for (i3 = 0; i3 < bindings.length; i3++) {
-        binding = bindings[i3];
-        if (binding.event.modifiers.shiftKey) continue;
-        if (!!binding.capture !== isCapturing) continue;
-        if (matches(d3_event, binding, false)) {
-          binding.callback(d3_event);
-          break;
+      graph = graph.replace(survivor);
+      parents = graph.parentWays(survivor);
+      for (i3 = 0; i3 < parents.length; i3++) {
+        if (parents[i3].isDegenerate()) {
+          graph = actionDeleteWay(parents[i3].id)(graph);
         }
       }
-      function matches(d3_event2, binding2, testShift) {
-        var event = d3_event2;
-        var isMatch = false;
-        var tryKeyCode = true;
-        if (event.key !== void 0) {
-          tryKeyCode = event.key.charCodeAt(0) > 127;
-          isMatch = true;
-          if (binding2.event.key === void 0) {
-            isMatch = false;
-          } else if (Array.isArray(binding2.event.key)) {
-            if (binding2.event.key.map(function(s2) {
-              return s2.toLowerCase();
-            }).indexOf(event.key.toLowerCase()) === -1) {
-              isMatch = false;
-            }
+      return graph;
+    };
+    action.disabled = function(graph) {
+      var seen = {};
+      var restrictionIDs = [];
+      var survivor;
+      var node, way;
+      var relations, relation, role;
+      var i3, j2, k2;
+      survivor = graph.entity(utilOldestID(nodeIDs));
+      for (i3 = 0; i3 < nodeIDs.length; i3++) {
+        node = graph.entity(nodeIDs[i3]);
+        relations = graph.parentRelations(node);
+        for (j2 = 0; j2 < relations.length; j2++) {
+          relation = relations[j2];
+          role = relation.memberById(node.id).role || "";
+          if (relation.hasFromViaTo()) {
+            restrictionIDs.push(relation.id);
+          }
+          if (seen[relation.id] !== void 0 && seen[relation.id] !== role) {
+            return "relation";
           } else {
-            if (event.key.toLowerCase() !== binding2.event.key.toLowerCase()) {
-              isMatch = false;
+            seen[relation.id] = role;
+          }
+        }
+      }
+      for (i3 = 0; i3 < nodeIDs.length; i3++) {
+        node = graph.entity(nodeIDs[i3]);
+        var parents = graph.parentWays(node);
+        for (j2 = 0; j2 < parents.length; j2++) {
+          var parent = parents[j2];
+          relations = graph.parentRelations(parent);
+          for (k2 = 0; k2 < relations.length; k2++) {
+            relation = relations[k2];
+            if (relation.hasFromViaTo()) {
+              restrictionIDs.push(relation.id);
             }
           }
         }
-        if (!isMatch && (tryKeyCode || binding2.event.modifiers.altKey)) {
-          isMatch = event.keyCode === binding2.event.keyCode;
+      }
+      restrictionIDs = utilArrayUniq(restrictionIDs);
+      for (i3 = 0; i3 < restrictionIDs.length; i3++) {
+        relation = graph.entity(restrictionIDs[i3]);
+        if (!relation.isComplete(graph)) continue;
+        var memberWays = relation.members.filter(function(m2) {
+          return m2.type === "way";
+        }).map(function(m2) {
+          return graph.entity(m2.id);
+        });
+        memberWays = utilArrayUniq(memberWays);
+        var f2 = relation.memberByRole("from");
+        var t2 = relation.memberByRole("to");
+        var isUturn = f2.id === t2.id;
+        var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
+        for (j2 = 0; j2 < relation.members.length; j2++) {
+          collectNodes(relation.members[j2], nodes);
         }
-        if (!isMatch) return false;
-        if (!(event.ctrlKey && event.altKey)) {
-          if (event.ctrlKey !== binding2.event.modifiers.ctrlKey) return false;
-          if (event.altKey !== binding2.event.modifiers.altKey) return false;
+        nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
+        nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
+        var filter2 = keyNodeFilter(nodes.keyfrom, nodes.keyto);
+        nodes.from = nodes.from.filter(filter2);
+        nodes.via = nodes.via.filter(filter2);
+        nodes.to = nodes.to.filter(filter2);
+        var connectFrom = false;
+        var connectVia = false;
+        var connectTo = false;
+        var connectKeyFrom = false;
+        var connectKeyTo = false;
+        for (j2 = 0; j2 < nodeIDs.length; j2++) {
+          var n3 = nodeIDs[j2];
+          if (nodes.from.indexOf(n3) !== -1) {
+            connectFrom = true;
+          }
+          if (nodes.via.indexOf(n3) !== -1) {
+            connectVia = true;
+          }
+          if (nodes.to.indexOf(n3) !== -1) {
+            connectTo = true;
+          }
+          if (nodes.keyfrom.indexOf(n3) !== -1) {
+            connectKeyFrom = true;
+          }
+          if (nodes.keyto.indexOf(n3) !== -1) {
+            connectKeyTo = true;
+          }
         }
-        if (event.metaKey !== binding2.event.modifiers.metaKey) return false;
-        if (testShift && event.shiftKey !== binding2.event.modifiers.shiftKey) return false;
-        return true;
-      }
-    }
-    function capture(d3_event) {
-      testBindings(d3_event, true);
-    }
-    function bubble(d3_event) {
-      var tagName = select_default2(d3_event.target).node().tagName;
-      if (tagName === "INPUT" || tagName === "SELECT" || tagName === "TEXTAREA") {
-        return;
-      }
-      testBindings(d3_event, false);
-    }
-    function keybinding(selection2) {
-      selection2 = selection2 || select_default2(document);
-      selection2.on("keydown.capture." + namespace, capture, true);
-      selection2.on("keydown.bubble." + namespace, bubble, false);
-      return keybinding;
-    }
-    keybinding.unbind = function(selection2) {
-      _keybindings = [];
-      selection2 = selection2 || select_default2(document);
-      selection2.on("keydown.capture." + namespace, null);
-      selection2.on("keydown.bubble." + namespace, null);
-      return keybinding;
-    };
-    keybinding.clear = function() {
-      _keybindings = {};
-      return keybinding;
-    };
-    keybinding.off = function(codes, capture2) {
-      var arr = utilArrayUniq([].concat(codes));
-      for (var i3 = 0; i3 < arr.length; i3++) {
-        var id2 = arr[i3] + (capture2 ? "-capture" : "-bubble");
-        delete _keybindings[id2];
-      }
-      return keybinding;
-    };
-    keybinding.on = function(codes, callback, capture2) {
-      if (typeof callback !== "function") {
-        return keybinding.off(codes, capture2);
-      }
-      var arr = utilArrayUniq([].concat(codes));
-      for (var i3 = 0; i3 < arr.length; i3++) {
-        var id2 = arr[i3] + (capture2 ? "-capture" : "-bubble");
-        var binding = {
-          id: id2,
-          capture: capture2,
-          callback,
-          event: {
-            key: void 0,
-            // preferred
-            keyCode: 0,
-            // fallback
-            modifiers: {
-              shiftKey: false,
-              ctrlKey: false,
-              altKey: false,
-              metaKey: false
+        if (connectFrom && connectTo && !isUturn) {
+          return "restriction";
+        }
+        if (connectFrom && connectVia) {
+          return "restriction";
+        }
+        if (connectTo && connectVia) {
+          return "restriction";
+        }
+        if (connectKeyFrom || connectKeyTo) {
+          if (nodeIDs.length !== 2) {
+            return "restriction";
+          }
+          var n0 = null;
+          var n1 = null;
+          for (j2 = 0; j2 < memberWays.length; j2++) {
+            way = memberWays[j2];
+            if (way.contains(nodeIDs[0])) {
+              n0 = nodeIDs[0];
+            }
+            if (way.contains(nodeIDs[1])) {
+              n1 = nodeIDs[1];
+            }
+          }
+          if (n0 && n1) {
+            var ok = false;
+            for (j2 = 0; j2 < memberWays.length; j2++) {
+              way = memberWays[j2];
+              if (way.areAdjacent(n0, n1)) {
+                ok = true;
+                break;
+              }
+            }
+            if (!ok) {
+              return "restriction";
             }
           }
-        };
-        if (_keybindings[id2]) {
-          console.warn('warning: duplicate keybinding for "' + id2 + '"');
         }
-        _keybindings[id2] = binding;
-        var matches = arr[i3].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
-        for (var j2 = 0; j2 < matches.length; j2++) {
-          if (matches[j2] === "++") matches[j2] = "+";
-          if (matches[j2] in utilKeybinding.modifierCodes) {
-            var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j2]]];
-            binding.event.modifiers[prop] = true;
-          } else {
-            binding.event.key = utilKeybinding.keys[matches[j2]] || matches[j2];
-            if (matches[j2] in utilKeybinding.keyCodes) {
-              binding.event.keyCode = utilKeybinding.keyCodes[matches[j2]];
+        for (j2 = 0; j2 < memberWays.length; j2++) {
+          way = memberWays[j2].update({});
+          for (k2 = 0; k2 < nodeIDs.length; k2++) {
+            if (nodeIDs[k2] === survivor.id) continue;
+            if (way.areAdjacent(nodeIDs[k2], survivor.id)) {
+              way = way.removeNode(nodeIDs[k2]);
+            } else {
+              way = way.replaceNode(nodeIDs[k2], survivor.id);
             }
           }
+          if (way.isDegenerate()) {
+            return "restriction";
+          }
         }
       }
-      return keybinding;
-    };
-    return keybinding;
-  }
-  utilKeybinding.modifierCodes = {
-    // Shift key, ⇧
-    "\u21E7": 16,
-    shift: 16,
-    // CTRL key, on Mac: ⌃
-    "\u2303": 17,
-    ctrl: 17,
-    // ALT key, on Mac: ⌥ (Alt)
-    "\u2325": 18,
-    alt: 18,
-    option: 18,
-    // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
-    "\u2318": 91,
-    meta: 91,
-    cmd: 91,
-    "super": 91,
-    win: 91
-  };
-  utilKeybinding.modifierProperties = {
-    16: "shiftKey",
-    17: "ctrlKey",
-    18: "altKey",
-    91: "metaKey"
-  };
-  utilKeybinding.plusKeys = ["plus", "ffplus", "=", "ffequals", "\u2260", "\xB1"];
-  utilKeybinding.minusKeys = ["_", "-", "ffminus", "dash", "\u2013", "\u2014"];
-  utilKeybinding.keys = {
-    // Backspace key, on Mac: ⌫ (Backspace)
-    "\u232B": "Backspace",
-    backspace: "Backspace",
-    // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
-    "\u21E5": "Tab",
-    "\u21C6": "Tab",
-    tab: "Tab",
-    // Return key, ↩
-    "\u21A9": "Enter",
-    "\u21B5": "Enter",
-    "\u23CE": "Enter",
-    "return": "Enter",
-    enter: "Enter",
-    "\u2305": "Enter",
-    // Pause/Break key
-    "pause": "Pause",
-    "pause-break": "Pause",
-    // Caps Lock key, ⇪
-    "\u21EA": "CapsLock",
-    caps: "CapsLock",
-    "caps-lock": "CapsLock",
-    // Escape key, on Mac: ⎋, on Windows: Esc
-    "\u238B": ["Escape", "Esc"],
-    escape: ["Escape", "Esc"],
-    esc: ["Escape", "Esc"],
-    // Space key
-    space: [" ", "Spacebar"],
-    // Page-Up key, or pgup, on Mac: ↖
-    "\u2196": "PageUp",
-    pgup: "PageUp",
-    "page-up": "PageUp",
-    // Page-Down key, or pgdown, on Mac: ↘
-    "\u2198": "PageDown",
-    pgdown: "PageDown",
-    "page-down": "PageDown",
-    // END key, on Mac: ⇟
-    "\u21DF": "End",
-    end: "End",
-    // HOME key, on Mac: ⇞
-    "\u21DE": "Home",
-    home: "Home",
-    // Insert key, or ins
-    ins: "Insert",
-    insert: "Insert",
-    // Delete key, on Mac: ⌦ (Delete)
-    "\u2326": ["Delete", "Del"],
-    del: ["Delete", "Del"],
-    "delete": ["Delete", "Del"],
-    // Left Arrow Key, or ←
-    "\u2190": ["ArrowLeft", "Left"],
-    left: ["ArrowLeft", "Left"],
-    "arrow-left": ["ArrowLeft", "Left"],
-    // Up Arrow Key, or ↑
-    "\u2191": ["ArrowUp", "Up"],
-    up: ["ArrowUp", "Up"],
-    "arrow-up": ["ArrowUp", "Up"],
-    // Right Arrow Key, or →
-    "\u2192": ["ArrowRight", "Right"],
-    right: ["ArrowRight", "Right"],
-    "arrow-right": ["ArrowRight", "Right"],
-    // Up Arrow Key, or ↓
-    "\u2193": ["ArrowDown", "Down"],
-    down: ["ArrowDown", "Down"],
-    "arrow-down": ["ArrowDown", "Down"],
-    // odities, stuff for backward compatibility (browsers and code):
-    // Num-Multiply, or *
-    "*": ["*", "Multiply"],
-    star: ["*", "Multiply"],
-    asterisk: ["*", "Multiply"],
-    multiply: ["*", "Multiply"],
-    // Num-Plus or +
-    "+": ["+", "Add"],
-    "plus": ["+", "Add"],
-    // Num-Subtract, or -
-    "-": ["-", "Subtract"],
-    subtract: ["-", "Subtract"],
-    "dash": ["-", "Subtract"],
-    // Semicolon
-    semicolon: ";",
-    // = or equals
-    equals: "=",
-    // Comma, or ,
-    comma: ",",
-    // Period, or ., or full-stop
-    period: ".",
-    "full-stop": ".",
-    // Slash, or /, or forward-slash
-    slash: "/",
-    "forward-slash": "/",
-    // Tick, or `, or back-quote
-    tick: "`",
-    "back-quote": "`",
-    // Open bracket, or [
-    "open-bracket": "[",
-    // Back slash, or \
-    "back-slash": "\\",
-    // Close bracket, or ]
-    "close-bracket": "]",
-    // Apostrophe, or Quote, or '
-    quote: "'",
-    apostrophe: "'",
-    // NUMPAD 0-9
-    "num-0": "0",
-    "num-1": "1",
-    "num-2": "2",
-    "num-3": "3",
-    "num-4": "4",
-    "num-5": "5",
-    "num-6": "6",
-    "num-7": "7",
-    "num-8": "8",
-    "num-9": "9",
-    // F1-F25
-    f1: "F1",
-    f2: "F2",
-    f3: "F3",
-    f4: "F4",
-    f5: "F5",
-    f6: "F6",
-    f7: "F7",
-    f8: "F8",
-    f9: "F9",
-    f10: "F10",
-    f11: "F11",
-    f12: "F12",
-    f13: "F13",
-    f14: "F14",
-    f15: "F15",
-    f16: "F16",
-    f17: "F17",
-    f18: "F18",
-    f19: "F19",
-    f20: "F20",
-    f21: "F21",
-    f22: "F22",
-    f23: "F23",
-    f24: "F24",
-    f25: "F25"
-  };
-  utilKeybinding.keyCodes = {
-    // Backspace key, on Mac: ⌫ (Backspace)
-    "\u232B": 8,
-    backspace: 8,
-    // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
-    "\u21E5": 9,
-    "\u21C6": 9,
-    tab: 9,
-    // Return key, ↩
-    "\u21A9": 13,
-    "\u21B5": 13,
-    "\u23CE": 13,
-    "return": 13,
-    enter: 13,
-    "\u2305": 13,
-    // Pause/Break key
-    "pause": 19,
-    "pause-break": 19,
-    // Caps Lock key, ⇪
-    "\u21EA": 20,
-    caps: 20,
-    "caps-lock": 20,
-    // Escape key, on Mac: ⎋, on Windows: Esc
-    "\u238B": 27,
-    escape: 27,
-    esc: 27,
-    // Space key
-    space: 32,
-    // Page-Up key, or pgup, on Mac: ↖
-    "\u2196": 33,
-    pgup: 33,
-    "page-up": 33,
-    // Page-Down key, or pgdown, on Mac: ↘
-    "\u2198": 34,
-    pgdown: 34,
-    "page-down": 34,
-    // END key, on Mac: ⇟
-    "\u21DF": 35,
-    end: 35,
-    // HOME key, on Mac: ⇞
-    "\u21DE": 36,
-    home: 36,
-    // Insert key, or ins
-    ins: 45,
-    insert: 45,
-    // Delete key, on Mac: ⌦ (Delete)
-    "\u2326": 46,
-    del: 46,
-    "delete": 46,
-    // Left Arrow Key, or ←
-    "\u2190": 37,
-    left: 37,
-    "arrow-left": 37,
-    // Up Arrow Key, or ↑
-    "\u2191": 38,
-    up: 38,
-    "arrow-up": 38,
-    // Right Arrow Key, or →
-    "\u2192": 39,
-    right: 39,
-    "arrow-right": 39,
-    // Up Arrow Key, or ↓
-    "\u2193": 40,
-    down: 40,
-    "arrow-down": 40,
-    // odities, printing characters that come out wrong:
-    // Firefox Equals
-    "ffequals": 61,
-    // Num-Multiply, or *
-    "*": 106,
-    star: 106,
-    asterisk: 106,
-    multiply: 106,
-    // Num-Plus or +
-    "+": 107,
-    "plus": 107,
-    // Num-Subtract, or -
-    "-": 109,
-    subtract: 109,
-    // Vertical Bar / Pipe
-    "|": 124,
-    // Firefox Plus
-    "ffplus": 171,
-    // Firefox Minus
-    "ffminus": 173,
-    // Semicolon
-    ";": 186,
-    semicolon: 186,
-    // = or equals
-    "=": 187,
-    "equals": 187,
-    // Comma, or ,
-    ",": 188,
-    comma: 188,
-    // Dash / Underscore key
-    "dash": 189,
-    // Period, or ., or full-stop
-    ".": 190,
-    period: 190,
-    "full-stop": 190,
-    // Slash, or /, or forward-slash
-    "/": 191,
-    slash: 191,
-    "forward-slash": 191,
-    // Tick, or `, or back-quote
-    "`": 192,
-    tick: 192,
-    "back-quote": 192,
-    // Open bracket, or [
-    "[": 219,
-    "open-bracket": 219,
-    // Back slash, or \
-    "\\": 220,
-    "back-slash": 220,
-    // Close bracket, or ]
-    "]": 221,
-    "close-bracket": 221,
-    // Apostrophe, or Quote, or '
-    "'": 222,
-    quote: 222,
-    apostrophe: 222
-  };
-  var i = 95;
-  var n = 0;
-  while (++i < 106) {
-    utilKeybinding.keyCodes["num-" + n] = i;
-    ++n;
-  }
-  i = 47;
-  n = 0;
-  while (++i < 58) {
-    utilKeybinding.keyCodes[n] = i;
-    ++n;
-  }
-  i = 111;
-  n = 1;
-  while (++i < 136) {
-    utilKeybinding.keyCodes["f" + n] = i;
-    ++n;
-  }
-  i = 64;
-  while (++i < 91) {
-    utilKeybinding.keyCodes[String.fromCharCode(i).toLowerCase()] = i;
-  }
-
-  // modules/util/object.js
-  function utilObjectOmit(obj, omitKeys) {
-    return Object.keys(obj).reduce(function(result, key) {
-      if (omitKeys.indexOf(key) === -1) {
-        result[key] = obj[key];
+      return false;
+      function hasDuplicates(n4, i4, arr) {
+        return arr.indexOf(n4) !== arr.lastIndexOf(n4);
+      }
+      function keyNodeFilter(froms, tos) {
+        return function(n4) {
+          return froms.indexOf(n4) === -1 && tos.indexOf(n4) === -1;
+        };
+      }
+      function collectNodes(member, collection) {
+        var entity = graph.hasEntity(member.id);
+        if (!entity) return;
+        var role2 = member.role || "";
+        if (!collection[role2]) {
+          collection[role2] = [];
+        }
+        if (member.type === "node") {
+          collection[role2].push(member.id);
+          if (role2 === "via") {
+            collection.keyfrom.push(member.id);
+            collection.keyto.push(member.id);
+          }
+        } else if (member.type === "way") {
+          collection[role2].push.apply(collection[role2], entity.nodes);
+          if (role2 === "from" || role2 === "via") {
+            collection.keyfrom.push(entity.first());
+            collection.keyfrom.push(entity.last());
+          }
+          if (role2 === "to" || role2 === "via") {
+            collection.keyto.push(entity.first());
+            collection.keyto.push(entity.last());
+          }
+        }
       }
-      return result;
-    }, {});
-  }
-
-  // modules/util/rebind.js
-  function utilRebind(target, source) {
-    var i3 = 1, n3 = arguments.length, method;
-    while (++i3 < n3) {
-      target[method = arguments[i3]] = d3_rebind(target, source, source[method]);
-    }
-    return target;
-  }
-  function d3_rebind(target, source, method) {
-    return function() {
-      var value = method.apply(source, arguments);
-      return value === source ? target : value;
     };
+    return action;
   }
 
-  // modules/util/session_mutex.js
-  function utilSessionMutex(name) {
-    var mutex = {};
-    var intervalID;
-    function renew() {
-      var expires = /* @__PURE__ */ new Date();
-      expires.setSeconds(expires.getSeconds() + 5);
-      document.cookie = name + "=1; expires=" + expires.toUTCString() + "; sameSite=strict";
-    }
-    mutex.lock = function() {
-      if (intervalID) return true;
-      var cookie = document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + name + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1");
-      if (cookie) return false;
-      renew();
-      intervalID = window.setInterval(renew, 4e3);
-      return true;
-    };
-    mutex.unlock = function() {
-      if (!intervalID) return;
-      document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; sameSite=strict";
-      clearInterval(intervalID);
-      intervalID = null;
+  // modules/actions/copy_entities.js
+  function actionCopyEntities(ids, fromGraph) {
+    var _copies = {};
+    var action = function(graph) {
+      ids.forEach(function(id3) {
+        fromGraph.entity(id3).copy(fromGraph, _copies);
+      });
+      for (var id2 in _copies) {
+        graph = graph.replace(_copies[id2]);
+      }
+      return graph;
     };
-    mutex.locked = function() {
-      return !!intervalID;
+    action.copies = function() {
+      return _copies;
     };
-    return mutex;
+    return action;
   }
 
-  // modules/util/tiler.js
-  function utilTiler() {
-    var _size = [256, 256];
-    var _scale = 256;
-    var _tileSize = 256;
-    var _zoomExtent = [0, 20];
-    var _translate = [_size[0] / 2, _size[1] / 2];
-    var _margin = 0;
-    var _skipNullIsland = false;
-    function clamp3(num, min3, max3) {
-      return Math.max(min3, Math.min(num, max3));
-    }
-    function nearNullIsland(tile) {
-      var x2 = tile[0];
-      var y2 = tile[1];
-      var z2 = tile[2];
-      if (z2 >= 7) {
-        var center = Math.pow(2, z2 - 1);
-        var width = Math.pow(2, z2 - 6);
-        var min3 = center - width / 2;
-        var max3 = center + width / 2 - 1;
-        return x2 >= min3 && x2 <= max3 && y2 >= min3 && y2 <= max3;
+  // modules/actions/delete_member.js
+  function actionDeleteMember(relationId, memberIndex) {
+    return function(graph) {
+      var relation = graph.entity(relationId).removeMember(memberIndex);
+      graph = graph.replace(relation);
+      if (relation.isDegenerate()) {
+        graph = actionDeleteRelation(relation.id)(graph);
       }
-      return false;
-    }
-    function tiler8() {
-      var z2 = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
-      var z0 = clamp3(Math.round(z2), _zoomExtent[0], _zoomExtent[1]);
-      var tileMin = 0;
-      var tileMax = Math.pow(2, z0) - 1;
-      var log2ts = Math.log(_tileSize) * Math.LOG2E;
-      var k2 = Math.pow(2, z2 - z0 + log2ts);
-      var origin = [
-        (_translate[0] - _scale / 2) / k2,
-        (_translate[1] - _scale / 2) / k2
-      ];
-      var cols = range(
-        clamp3(Math.floor(-origin[0]) - _margin, tileMin, tileMax + 1),
-        clamp3(Math.ceil(_size[0] / k2 - origin[0]) + _margin, tileMin, tileMax + 1)
-      );
-      var rows = range(
-        clamp3(Math.floor(-origin[1]) - _margin, tileMin, tileMax + 1),
-        clamp3(Math.ceil(_size[1] / k2 - origin[1]) + _margin, tileMin, tileMax + 1)
-      );
-      var tiles = [];
-      for (var i3 = 0; i3 < rows.length; i3++) {
-        var y2 = rows[i3];
-        for (var j2 = 0; j2 < cols.length; j2++) {
-          var x2 = cols[j2];
-          if (i3 >= _margin && i3 <= rows.length - _margin && j2 >= _margin && j2 <= cols.length - _margin) {
-            tiles.unshift([x2, y2, z0]);
+      return graph;
+    };
+  }
+
+  // modules/actions/discard_tags.js
+  function actionDiscardTags(difference2, discardTags) {
+    discardTags = discardTags || {};
+    return (graph) => {
+      difference2.modified().forEach(checkTags);
+      difference2.created().forEach(checkTags);
+      return graph;
+      function checkTags(entity) {
+        const keys2 = Object.keys(entity.tags);
+        let didDiscard = false;
+        let tags = {};
+        for (let i3 = 0; i3 < keys2.length; i3++) {
+          const k2 = keys2[i3];
+          if (discardTags[k2] || !entity.tags[k2]) {
+            didDiscard = true;
           } else {
-            tiles.push([x2, y2, z0]);
+            tags[k2] = entity.tags[k2];
           }
         }
+        if (didDiscard) {
+          graph = graph.replace(entity.update({ tags }));
+        }
       }
-      tiles.translate = origin;
-      tiles.scale = k2;
-      return tiles;
-    }
-    tiler8.getTiles = function(projection2) {
-      var origin = [
-        projection2.scale() * Math.PI - projection2.translate()[0],
-        projection2.scale() * Math.PI - projection2.translate()[1]
-      ];
-      this.size(projection2.clipExtent()[1]).scale(projection2.scale() * 2 * Math.PI).translate(projection2.translate());
-      var tiles = tiler8();
-      var ts = tiles.scale;
-      return tiles.map(function(tile) {
-        if (_skipNullIsland && nearNullIsland(tile)) {
-          return false;
+    };
+  }
+
+  // modules/actions/disconnect.js
+  function actionDisconnect(nodeId, newNodeId) {
+    var wayIds;
+    var disconnectableRelationTypes = {
+      "associatedStreet": true,
+      "enforcement": true,
+      "site": true
+    };
+    var action = function(graph) {
+      var node = graph.entity(nodeId);
+      var connections = action.connections(graph);
+      connections.forEach(function(connection) {
+        var way = graph.entity(connection.wayID);
+        var newNode = osmNode({ id: newNodeId, loc: node.loc, tags: node.tags });
+        graph = graph.replace(newNode);
+        if (connection.index === 0 && way.isArea()) {
+          graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
+        } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
+          graph = graph.replace(way.unclose().addNode(newNode.id));
+        } else {
+          graph = graph.replace(way.updateNode(newNode.id, connection.index));
         }
-        var x2 = tile[0] * ts - origin[0];
-        var y2 = tile[1] * ts - origin[1];
-        return {
-          id: tile.toString(),
-          xyz: tile,
-          extent: geoExtent(
-            projection2.invert([x2, y2 + ts]),
-            projection2.invert([x2 + ts, y2])
-          )
-        };
-      }).filter(Boolean);
+      });
+      return graph;
     };
-    tiler8.getGeoJSON = function(projection2) {
-      var features = tiler8.getTiles(projection2).map(function(tile) {
-        return {
-          type: "Feature",
-          properties: {
-            id: tile.id,
-            name: tile.id
-          },
-          geometry: {
-            type: "Polygon",
-            coordinates: [tile.extent.polygon()]
+    action.connections = function(graph) {
+      var candidates = [];
+      var keeping = false;
+      var parentWays = graph.parentWays(graph.entity(nodeId));
+      var way, waynode;
+      for (var i3 = 0; i3 < parentWays.length; i3++) {
+        way = parentWays[i3];
+        if (wayIds && wayIds.indexOf(way.id) === -1) {
+          keeping = true;
+          continue;
+        }
+        if (way.isArea() && way.nodes[0] === nodeId) {
+          candidates.push({ wayID: way.id, index: 0 });
+        } else {
+          for (var j2 = 0; j2 < way.nodes.length; j2++) {
+            waynode = way.nodes[j2];
+            if (waynode === nodeId) {
+              if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && j2 === way.nodes.length - 1) {
+                continue;
+              }
+              candidates.push({ wayID: way.id, index: j2 });
+            }
           }
-        };
-      });
-      return {
-        type: "FeatureCollection",
-        features
-      };
+        }
+      }
+      return keeping ? candidates : candidates.slice(1);
     };
-    tiler8.tileSize = function(val) {
-      if (!arguments.length) return _tileSize;
-      _tileSize = val;
-      return tiler8;
+    action.disabled = function(graph) {
+      var connections = action.connections(graph);
+      if (connections.length === 0) return "not_connected";
+      var parentWays = graph.parentWays(graph.entity(nodeId));
+      var seenRelationIds = {};
+      var sharedRelation;
+      parentWays.forEach(function(way) {
+        var relations = graph.parentRelations(way);
+        relations.filter((relation) => !disconnectableRelationTypes[relation.tags.type]).forEach(function(relation) {
+          if (relation.id in seenRelationIds) {
+            if (wayIds) {
+              if (wayIds.indexOf(way.id) !== -1 || wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
+                sharedRelation = relation;
+              }
+            } else {
+              sharedRelation = relation;
+            }
+          } else {
+            seenRelationIds[relation.id] = way.id;
+          }
+        });
+      });
+      if (sharedRelation) return "relation";
     };
-    tiler8.zoomExtent = function(val) {
-      if (!arguments.length) return _zoomExtent;
-      _zoomExtent = val;
-      return tiler8;
+    action.limitWays = function(val) {
+      if (!arguments.length) return wayIds;
+      wayIds = val;
+      return action;
     };
-    tiler8.size = function(val) {
-      if (!arguments.length) return _size;
-      _size = val;
-      return tiler8;
+    return action;
+  }
+
+  // modules/actions/extract.js
+  function actionExtract(entityID, projection2) {
+    var extractedNodeID;
+    var action = function(graph, shiftKeyPressed) {
+      var entity = graph.entity(entityID);
+      if (entity.type === "node") {
+        return extractFromNode(entity, graph, shiftKeyPressed);
+      }
+      return extractFromWayOrRelation(entity, graph);
     };
-    tiler8.scale = function(val) {
-      if (!arguments.length) return _scale;
-      _scale = val;
-      return tiler8;
+    function extractFromNode(node, graph, shiftKeyPressed) {
+      extractedNodeID = node.id;
+      var replacement = osmNode({ loc: node.loc });
+      graph = graph.replace(replacement);
+      graph = graph.parentWays(node).reduce(function(accGraph, parentWay) {
+        return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
+      }, graph);
+      if (!shiftKeyPressed) return graph;
+      return graph.parentRelations(node).reduce(function(accGraph, parentRel) {
+        return accGraph.replace(parentRel.replaceMember(node, replacement));
+      }, graph);
+    }
+    function extractFromWayOrRelation(entity, graph) {
+      var fromGeometry = entity.geometry(graph);
+      var keysToCopyAndRetain = ["source", "wheelchair"];
+      var keysToRetain = ["area"];
+      var buildingKeysToRetain = ["architect", "building", "height", "layer", "nycdoitt:bin"];
+      var extractedLoc = path_default(projection2).centroid(entity.asGeoJSON(graph));
+      extractedLoc = extractedLoc && projection2.invert(extractedLoc);
+      if (!extractedLoc || !isFinite(extractedLoc[0]) || !isFinite(extractedLoc[1])) {
+        extractedLoc = entity.extent(graph).center();
+      }
+      var indoorAreaValues = {
+        area: true,
+        corridor: true,
+        elevator: true,
+        level: true,
+        room: true
+      };
+      var isBuilding = entity.tags.building && entity.tags.building !== "no" || entity.tags["building:part"] && entity.tags["building:part"] !== "no";
+      var isIndoorArea = fromGeometry === "area" && entity.tags.indoor && indoorAreaValues[entity.tags.indoor];
+      var entityTags = Object.assign({}, entity.tags);
+      var pointTags = {};
+      for (var key in entityTags) {
+        if (entity.type === "relation" && key === "type") {
+          continue;
+        }
+        if (keysToRetain.indexOf(key) !== -1) {
+          continue;
+        }
+        if (isBuilding) {
+          if (buildingKeysToRetain.indexOf(key) !== -1 || key.match(/^building:.{1,}/) || key.match(/^roof:.{1,}/)) continue;
+        }
+        if (isIndoorArea && key === "indoor") {
+          continue;
+        }
+        pointTags[key] = entityTags[key];
+        if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
+          continue;
+        } else if (isIndoorArea && key === "level") {
+          continue;
+        }
+        delete entityTags[key];
+      }
+      if (!isBuilding && !isIndoorArea && fromGeometry === "area") {
+        entityTags.area = "yes";
+      }
+      var replacement = osmNode({ loc: extractedLoc, tags: pointTags });
+      graph = graph.replace(replacement);
+      extractedNodeID = replacement.id;
+      return graph.replace(entity.update({ tags: entityTags }));
+    }
+    action.getExtractedNodeID = function() {
+      return extractedNodeID;
     };
-    tiler8.translate = function(val) {
-      if (!arguments.length) return _translate;
-      _translate = val;
-      return tiler8;
+    return action;
+  }
+
+  // modules/actions/join.js
+  function actionJoin(ids) {
+    function groupEntitiesByGeometry(graph) {
+      var entities = ids.map(function(id2) {
+        return graph.entity(id2);
+      });
+      return Object.assign(
+        { line: [] },
+        utilArrayGroupBy(entities, function(entity) {
+          return entity.geometry(graph);
+        })
+      );
+    }
+    var action = function(graph) {
+      var ways = ids.map(graph.entity, graph);
+      var survivorID = utilOldestID(ways.map((way) => way.id));
+      ways.sort(function(a2, b2) {
+        var aSided = a2.isSided();
+        var bSided = b2.isSided();
+        return aSided && !bSided ? -1 : bSided && !aSided ? 1 : 0;
+      });
+      var sequences = osmJoinWays(ways, graph);
+      var joined = sequences[0];
+      graph = sequences.actions.reduce(function(g3, action2) {
+        return action2(g3);
+      }, graph);
+      var survivor = graph.entity(survivorID);
+      survivor = survivor.update({ nodes: joined.nodes.map(function(n3) {
+        return n3.id;
+      }) });
+      graph = graph.replace(survivor);
+      joined.forEach(function(way) {
+        if (way.id === survivorID) return;
+        graph.parentRelations(way).forEach(function(parent) {
+          graph = graph.replace(parent.replaceMember(way, survivor));
+        });
+        survivor = survivor.mergeTags(way.tags);
+        graph = graph.replace(survivor);
+        graph = actionDeleteWay(way.id)(graph);
+      });
+      function checkForSimpleMultipolygon() {
+        if (!survivor.isClosed()) return;
+        var multipolygons = graph.parentMultipolygons(survivor).filter(function(multipolygon2) {
+          return multipolygon2.members.length === 1;
+        });
+        if (multipolygons.length !== 1) return;
+        var multipolygon = multipolygons[0];
+        for (var key in survivor.tags) {
+          if (multipolygon.tags[key] && // don't collapse if tags cannot be cleanly merged
+          multipolygon.tags[key] !== survivor.tags[key]) return;
+        }
+        survivor = survivor.mergeTags(multipolygon.tags);
+        graph = graph.replace(survivor);
+        graph = actionDeleteRelation(
+          multipolygon.id,
+          true
+          /* allow untagged members */
+        )(graph);
+        var tags = Object.assign({}, survivor.tags);
+        if (survivor.geometry(graph) !== "area") {
+          tags.area = "yes";
+        }
+        delete tags.type;
+        survivor = survivor.update({ tags });
+        graph = graph.replace(survivor);
+      }
+      checkForSimpleMultipolygon();
+      return graph;
     };
-    tiler8.margin = function(val) {
-      if (!arguments.length) return _margin;
-      _margin = +val;
-      return tiler8;
+    action.resultingWayNodesLength = function(graph) {
+      return ids.reduce(function(count, id2) {
+        return count + graph.entity(id2).nodes.length;
+      }, 0) - ids.length - 1;
     };
-    tiler8.skipNullIsland = function(val) {
-      if (!arguments.length) return _skipNullIsland;
-      _skipNullIsland = val;
-      return tiler8;
+    action.disabled = function(graph) {
+      var geometries = groupEntitiesByGeometry(graph);
+      if (ids.length < 2 || ids.length !== geometries.line.length) {
+        return "not_eligible";
+      }
+      var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
+      if (joined.length > 1) {
+        return "not_adjacent";
+      }
+      var i3;
+      var sortedParentRelations = function(id2) {
+        return graph.parentRelations(graph.entity(id2)).filter((rel) => !rel.isRestriction() && !rel.isConnectivity()).sort((a2, b2) => a2.id - b2.id);
+      };
+      var relsA = sortedParentRelations(ids[0]);
+      for (i3 = 1; i3 < ids.length; i3++) {
+        var relsB = sortedParentRelations(ids[i3]);
+        if (!utilArrayIdentical(relsA, relsB)) {
+          return "conflicting_relations";
+        }
+      }
+      for (i3 = 0; i3 < ids.length - 1; i3++) {
+        for (var j2 = i3 + 1; j2 < ids.length; j2++) {
+          var path1 = graph.childNodes(graph.entity(ids[i3])).map(function(e3) {
+            return e3.loc;
+          });
+          var path2 = graph.childNodes(graph.entity(ids[j2])).map(function(e3) {
+            return e3.loc;
+          });
+          var intersections = geoPathIntersections(path1, path2);
+          var common = utilArrayIntersection(
+            joined[0].nodes.map(function(n3) {
+              return n3.loc.toString();
+            }),
+            intersections.map(function(n3) {
+              return n3.toString();
+            })
+          );
+          if (common.length !== intersections.length) {
+            return "paths_intersect";
+          }
+        }
+      }
+      var nodeIds = joined[0].nodes.map(function(n3) {
+        return n3.id;
+      }).slice(1, -1);
+      var relation;
+      var tags = {};
+      var conflicting = false;
+      joined[0].forEach(function(way) {
+        var parents = graph.parentRelations(way);
+        parents.forEach(function(parent) {
+          if ((parent.isRestriction() || parent.isConnectivity()) && parent.members.some(function(m2) {
+            return nodeIds.indexOf(m2.id) >= 0;
+          })) {
+            relation = parent;
+          }
+        });
+        for (var k2 in way.tags) {
+          if (!(k2 in tags)) {
+            tags[k2] = way.tags[k2];
+          } else if (tags[k2] && osmIsInterestingTag(k2) && tags[k2] !== way.tags[k2]) {
+            conflicting = true;
+          }
+        }
+      });
+      if (relation) {
+        return relation.isRestriction() ? "restriction" : "connectivity";
+      }
+      if (conflicting) {
+        return "conflicting_tags";
+      }
     };
-    return tiler8;
+    return action;
   }
 
-  // modules/util/trigger_event.js
-  function utilTriggerEvent(target, type2, eventProperties) {
-    target.each(function() {
-      var evt = document.createEvent("HTMLEvents");
-      evt.initEvent(type2, true, true);
-      for (var prop in eventProperties) {
-        evt[prop] = eventProperties[prop];
+  // modules/actions/merge.js
+  function actionMerge(ids) {
+    function groupEntitiesByGeometry(graph) {
+      var entities = ids.map(function(id2) {
+        return graph.entity(id2);
+      });
+      return Object.assign(
+        { point: [], area: [], line: [], relation: [] },
+        utilArrayGroupBy(entities, function(entity) {
+          return entity.geometry(graph);
+        })
+      );
+    }
+    var action = function(graph) {
+      var geometries = groupEntitiesByGeometry(graph);
+      var target = geometries.area[0] || geometries.line[0];
+      var points = geometries.point;
+      points.forEach(function(point) {
+        target = target.mergeTags(point.tags);
+        graph = graph.replace(target);
+        graph.parentRelations(point).forEach(function(parent) {
+          graph = graph.replace(parent.replaceMember(point, target));
+        });
+        var nodes = utilArrayUniq(graph.childNodes(target));
+        var removeNode = point;
+        if (!point.isNew()) {
+          var inserted = false;
+          var canBeReplaced = function(node2) {
+            return !(graph.parentWays(node2).length > 1 || graph.parentRelations(node2).length);
+          };
+          var replaceNode = function(node2) {
+            graph = graph.replace(point.update({ tags: node2.tags, loc: node2.loc }));
+            target = target.replaceNode(node2.id, point.id);
+            graph = graph.replace(target);
+            removeNode = node2;
+            inserted = true;
+          };
+          var i3;
+          var node;
+          for (i3 = 0; i3 < nodes.length; i3++) {
+            node = nodes[i3];
+            if (canBeReplaced(node) && node.isNew()) {
+              replaceNode(node);
+              break;
+            }
+          }
+          if (!inserted && point.hasInterestingTags()) {
+            for (i3 = 0; i3 < nodes.length; i3++) {
+              node = nodes[i3];
+              if (canBeReplaced(node) && !node.hasInterestingTags()) {
+                replaceNode(node);
+                break;
+              }
+            }
+            if (!inserted) {
+              for (i3 = 0; i3 < nodes.length; i3++) {
+                node = nodes[i3];
+                if (canBeReplaced(node) && utilCompareIDs(point.id, node.id) < 0) {
+                  replaceNode(node);
+                  break;
+                }
+              }
+            }
+          }
+        }
+        graph = graph.remove(removeNode);
+      });
+      if (target.tags.area === "yes") {
+        var tags = Object.assign({}, target.tags);
+        delete tags.area;
+        if (osmTagSuggestingArea(tags)) {
+          target = target.update({ tags });
+          graph = graph.replace(target);
+        }
       }
-      this.dispatchEvent(evt);
-    });
+      return graph;
+    };
+    action.disabled = function(graph) {
+      var geometries = groupEntitiesByGeometry(graph);
+      if (geometries.point.length === 0 || geometries.area.length + geometries.line.length !== 1 || geometries.relation.length !== 0) {
+        return "not_eligible";
+      }
+    };
+    return action;
   }
 
-  // modules/util/units.js
-  var OSM_PRECISION = 7;
-  function displayLength(m2, isImperial) {
-    var d2 = m2 * (isImperial ? 3.28084 : 1);
-    var unit2;
-    if (isImperial) {
-      if (d2 >= 5280) {
-        d2 /= 5280;
-        unit2 = "miles";
-      } else {
-        unit2 = "feet";
-      }
-    } else {
-      if (d2 >= 1e3) {
-        d2 /= 1e3;
-        unit2 = "kilometers";
-      } else {
-        unit2 = "meters";
+  // modules/actions/merge_nodes.js
+  function actionMergeNodes(nodeIDs, loc) {
+    function chooseLoc(graph) {
+      if (!nodeIDs.length) return null;
+      var sum = [0, 0];
+      var interestingCount = 0;
+      var interestingLoc;
+      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
+        var node = graph.entity(nodeIDs[i3]);
+        if (node.hasInterestingTags()) {
+          interestingLoc = ++interestingCount === 1 ? node.loc : null;
+        }
+        sum = geoVecAdd(sum, node.loc);
       }
+      return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
     }
-    return _t("units." + unit2, {
-      quantity: d2.toLocaleString(_mainLocalizer.localeCode(), {
-        maximumSignificantDigits: 4
-      })
-    });
-  }
-  function displayArea(m2, isImperial) {
-    var locale2 = _mainLocalizer.localeCode();
-    var d2 = m2 * (isImperial ? 10.7639111056 : 1);
-    var d1, d22, area;
-    var unit1 = "";
-    var unit2 = "";
-    if (isImperial) {
-      if (d2 >= 6969600) {
-        d1 = d2 / 27878400;
-        unit1 = "square_miles";
-      } else {
-        d1 = d2;
-        unit1 = "square_feet";
-      }
-      if (d2 > 4356 && d2 < 4356e4) {
-        d22 = d2 / 43560;
-        unit2 = "acres";
+    var action = function(graph) {
+      if (nodeIDs.length < 2) return graph;
+      var toLoc = loc;
+      if (!toLoc) {
+        toLoc = chooseLoc(graph);
       }
-    } else {
-      if (d2 >= 25e4) {
-        d1 = d2 / 1e6;
-        unit1 = "square_kilometers";
-      } else {
-        d1 = d2;
-        unit1 = "square_meters";
+      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
+        var node = graph.entity(nodeIDs[i3]);
+        if (node.loc !== toLoc) {
+          graph = graph.replace(node.move(toLoc));
+        }
       }
-      if (d2 > 1e3 && d2 < 1e7) {
-        d22 = d2 / 1e4;
-        unit2 = "hectares";
+      return actionConnect(nodeIDs)(graph);
+    };
+    action.disabled = function(graph) {
+      if (nodeIDs.length < 2) return "not_eligible";
+      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
+        var entity = graph.entity(nodeIDs[i3]);
+        if (entity.type !== "node") return "not_eligible";
       }
-    }
-    area = _t("units." + unit1, {
-      quantity: d1.toLocaleString(locale2, {
-        maximumSignificantDigits: 4
-      })
-    });
-    if (d22) {
-      return _t("units.area_pair", {
-        area1: area,
-        area2: _t("units." + unit2, {
-          quantity: d22.toLocaleString(locale2, {
-            maximumSignificantDigits: 2
-          })
-        })
-      });
-    } else {
-      return area;
-    }
-  }
-  function wrap(x2, min3, max3) {
-    var d2 = max3 - min3;
-    return ((x2 - min3) % d2 + d2) % d2 + min3;
-  }
-  function clamp(x2, min3, max3) {
-    return Math.max(min3, Math.min(x2, max3));
+      return actionConnect(nodeIDs).disabled(graph);
+    };
+    return action;
   }
-  function roundToDecimal(target, decimalPlace) {
-    target = Number(target);
-    decimalPlace = Number(decimalPlace);
-    const factor = Math.pow(10, decimalPlace);
-    return Math.round(target * factor) / factor;
+
+  // modules/osm/changeset.js
+  function osmChangeset() {
+    if (!(this instanceof osmChangeset)) {
+      return new osmChangeset().initialize(arguments);
+    } else if (arguments.length) {
+      this.initialize(arguments);
+    }
   }
-  function displayCoordinate(deg, pos, neg) {
-    var displayCoordinate2;
-    var locale2 = _mainLocalizer.localeCode();
-    var degreesFloor = Math.floor(Math.abs(deg));
-    var min3 = (Math.abs(deg) - degreesFloor) * 60;
-    var minFloor = Math.floor(min3);
-    var sec = (min3 - minFloor) * 60;
-    var fix = roundToDecimal(sec, 8);
-    var secRounded = roundToDecimal(fix, 0);
-    if (secRounded === 60) {
-      secRounded = 0;
-      minFloor += 1;
-      if (minFloor === 60) {
-        minFloor = 0;
-        degreesFloor += 1;
+  osmEntity.changeset = osmChangeset;
+  osmChangeset.prototype = Object.create(osmEntity.prototype);
+  Object.assign(osmChangeset.prototype, {
+    type: "changeset",
+    extent: function() {
+      return new geoExtent();
+    },
+    geometry: function() {
+      return "changeset";
+    },
+    asJXON: function() {
+      return {
+        osm: {
+          changeset: {
+            tag: Object.keys(this.tags).map(function(k2) {
+              return { "@k": k2, "@v": this.tags[k2] };
+            }, this),
+            "@version": 0.6,
+            "@generator": "iD"
+          }
+        }
+      };
+    },
+    // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
+    // XML. Returns a string.
+    osmChangeJXON: function(changes) {
+      var changeset_id = this.id;
+      function nest(x2, order) {
+        var groups = {};
+        for (var i3 = 0; i3 < x2.length; i3++) {
+          var tagName = Object.keys(x2[i3])[0];
+          if (!groups[tagName]) groups[tagName] = [];
+          groups[tagName].push(x2[i3][tagName]);
+        }
+        var ordered = {};
+        order.forEach(function(o2) {
+          if (groups[o2]) ordered[o2] = groups[o2];
+        });
+        return ordered;
+      }
+      function sort(changes2) {
+        function resolve(item) {
+          return relations.find(function(relation2) {
+            return item.keyAttributes.type === "relation" && item.keyAttributes.ref === relation2["@id"];
+          });
+        }
+        function isNew(item) {
+          return !sorted[item["@id"]] && !processing.find(function(proc) {
+            return proc["@id"] === item["@id"];
+          });
+        }
+        var processing = [];
+        var sorted = {};
+        var relations = changes2.relation;
+        if (!relations) return changes2;
+        for (var i3 = 0; i3 < relations.length; i3++) {
+          var relation = relations[i3];
+          if (!sorted[relation["@id"]]) {
+            processing.push(relation);
+          }
+          while (processing.length > 0) {
+            var next = processing[0], deps = next.member.map(resolve).filter(Boolean).filter(isNew);
+            if (deps.length === 0) {
+              sorted[next["@id"]] = next;
+              processing.shift();
+            } else {
+              processing = deps.concat(processing);
+            }
+          }
+        }
+        changes2.relation = Object.values(sorted);
+        return changes2;
+      }
+      function rep(entity) {
+        return entity.asJXON(changeset_id);
       }
+      return {
+        osmChange: {
+          "@version": 0.6,
+          "@generator": "iD",
+          "create": sort(nest(changes.created.map(rep), ["node", "way", "relation"])),
+          "modify": nest(changes.modified.map(rep), ["node", "way", "relation"]),
+          "delete": Object.assign(nest(changes.deleted.map(rep), ["relation", "way", "node"]), { "@if-unused": true })
+        }
+      };
+    },
+    asGeoJSON: function() {
+      return {};
     }
-    displayCoordinate2 = _t("units.arcdegrees", {
-      quantity: degreesFloor.toLocaleString(locale2)
-    }) + (minFloor !== 0 || secRounded !== 0 ? _t("units.arcminutes", {
-      quantity: minFloor.toLocaleString(locale2)
-    }) : "") + (secRounded !== 0 ? _t("units.arcseconds", {
-      quantity: secRounded.toLocaleString(locale2)
-    }) : "");
-    if (deg === 0) {
-      return displayCoordinate2;
-    } else {
-      return _t("units.coordinate", {
-        coordinate: displayCoordinate2,
-        direction: _t("units." + (deg > 0 ? pos : neg))
-      });
+  });
+
+  // modules/osm/note.js
+  function osmNote() {
+    if (!(this instanceof osmNote)) {
+      return new osmNote().initialize(arguments);
+    } else if (arguments.length) {
+      this.initialize(arguments);
     }
   }
-  function dmsCoordinatePair(coord2) {
-    return _t("units.coordinate_pair", {
-      latitude: displayCoordinate(clamp(coord2[1], -90, 90), "north", "south"),
-      longitude: displayCoordinate(wrap(coord2[0], -180, 180), "east", "west")
-    });
-  }
-  function decimalCoordinatePair(coord2) {
-    return _t("units.coordinate_pair", {
-      latitude: clamp(coord2[1], -90, 90).toFixed(OSM_PRECISION),
-      longitude: wrap(coord2[0], -180, 180).toFixed(OSM_PRECISION)
-    });
-  }
-  function dmsMatcher(q2) {
-    const matchers = [
-      // D M SS , D M SS  ex: 35 11 10.1 , 136 49 53.8
-      {
-        condition: /^\s*(-?)\s*(\d+)\s+(\d+)\s+(\d+\.?\d*)\s*\,\s*(-?)\s*(\d+)\s+(\d+)\s+(\d+\.?\d*)\s*$/,
-        parser: function(q3) {
-          const match = this.condition.exec(q3);
-          const lat = +match[2] + +match[3] / 60 + +match[4] / 3600;
-          const lng = +match[6] + +match[7] / 60 + +match[8] / 3600;
-          const isNegLat = match[1] === "-" ? -lat : lat;
-          const isNegLng = match[5] === "-" ? -lng : lng;
-          const d2 = [isNegLat, isNegLng];
-          return d2;
-        }
-      },
-      // D MM , D MM ex: 35 11.1683 , 136 49.8966
-      {
-        condition: /^\s*(-?)\s*(\d+)\s+(\d+\.?\d*)\s*\,\s*(-?)\s*(\d+)\s+(\d+\.?\d*)\s*$/,
-        parser: function(q3) {
-          const match = this.condition.exec(q3);
-          const lat = +match[2] + +match[3] / 60;
-          const lng = +match[5] + +match[6] / 60;
-          const isNegLat = match[1] === "-" ? -lat : lat;
-          const isNegLng = match[4] === "-" ? -lng : lng;
-          const d2 = [isNegLat, isNegLng];
-          return d2;
+  osmNote.id = function() {
+    return osmNote.id.next--;
+  };
+  osmNote.id.next = -1;
+  Object.assign(osmNote.prototype, {
+    type: "note",
+    initialize: function(sources) {
+      for (var i3 = 0; i3 < sources.length; ++i3) {
+        var source = sources[i3];
+        for (var prop in source) {
+          if (Object.prototype.hasOwnProperty.call(source, prop)) {
+            if (source[prop] === void 0) {
+              delete this[prop];
+            } else {
+              this[prop] = source[prop];
+            }
+          }
         }
       }
-    ];
-    for (const matcher of matchers) {
-      if (matcher.condition.test(q2)) {
-        return matcher.parser(q2);
+      if (!this.id) {
+        this.id = osmNote.id().toString();
       }
+      return this;
+    },
+    extent: function() {
+      return new geoExtent(this.loc);
+    },
+    update: function(attrs) {
+      return osmNote(this, attrs);
+    },
+    isNew: function() {
+      return this.id < 0;
+    },
+    move: function(loc) {
+      return this.update({ loc });
     }
-    return null;
-  }
+  });
 
-  // modules/core/localizer.js
-  var _mainLocalizer = coreLocalizer();
-  var _t = _mainLocalizer.t;
-  function coreLocalizer() {
-    let localizer = {};
-    let _dataLanguages = {};
-    let _dataLocales = {};
-    let _localeStrings = {};
-    let _localeCode = "en-US";
-    let _localeCodes = ["en-US", "en"];
-    let _languageCode = "en";
-    let _textDirection = "ltr";
-    let _usesMetric = false;
-    let _languageNames = {};
-    let _scriptNames = {};
-    localizer.localeCode = () => _localeCode;
-    localizer.localeCodes = () => _localeCodes;
-    localizer.languageCode = () => _languageCode;
-    localizer.textDirection = () => _textDirection;
-    localizer.usesMetric = () => _usesMetric;
-    localizer.languageNames = () => _languageNames;
-    localizer.scriptNames = () => _scriptNames;
-    let _preferredLocaleCodes = [];
-    localizer.preferredLocaleCodes = function(codes) {
-      if (!arguments.length) return _preferredLocaleCodes;
-      if (typeof codes === "string") {
-        _preferredLocaleCodes = codes.split(/,|;| /gi).filter(Boolean);
-      } else {
-        _preferredLocaleCodes = codes;
-      }
-      return localizer;
-    };
-    var _loadPromise;
-    localizer.ensureLoaded = () => {
-      if (_loadPromise) return _loadPromise;
-      let filesToFetch = [
-        "languages",
-        // load the list of languages
-        "locales"
-        // load the list of supported locales
-      ];
-      const localeDirs = {
-        general: "locales",
-        tagging: presetsCdnUrl + "dist/translations"
-      };
-      let fileMap = _mainFileFetcher.fileMap();
-      for (let scopeId in localeDirs) {
-        const key = "locales_index_".concat(scopeId);
-        if (!fileMap[key]) {
-          fileMap[key] = localeDirs[scopeId] + "/index.min.json";
+  // modules/osm/relation.js
+  function osmRelation() {
+    if (!(this instanceof osmRelation)) {
+      return new osmRelation().initialize(arguments);
+    } else if (arguments.length) {
+      this.initialize(arguments);
+    }
+  }
+  osmEntity.relation = osmRelation;
+  osmRelation.prototype = Object.create(osmEntity.prototype);
+  osmRelation.creationOrder = function(a2, b2) {
+    var aId = parseInt(osmEntity.id.toOSM(a2.id), 10);
+    var bId = parseInt(osmEntity.id.toOSM(b2.id), 10);
+    if (aId < 0 || bId < 0) return aId - bId;
+    return bId - aId;
+  };
+  Object.assign(osmRelation.prototype, {
+    type: "relation",
+    members: [],
+    copy: function(resolver, copies) {
+      if (copies[this.id]) return copies[this.id];
+      var copy2 = osmEntity.prototype.copy.call(this, resolver, copies);
+      var members = this.members.map(function(member) {
+        return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
+      });
+      copy2 = copy2.update({ members });
+      copies[this.id] = copy2;
+      return copy2;
+    },
+    extent: function(resolver, memo) {
+      return resolver.transient(this, "extent", function() {
+        if (memo && memo[this.id]) return geoExtent();
+        memo = memo || {};
+        memo[this.id] = true;
+        var extent = geoExtent();
+        for (var i3 = 0; i3 < this.members.length; i3++) {
+          var member = resolver.hasEntity(this.members[i3].id);
+          if (member) {
+            extent._extend(member.extent(resolver, memo));
+          }
         }
-        filesToFetch.push(key);
+        return extent;
+      });
+    },
+    geometry: function(graph) {
+      return graph.transient(this, "geometry", function() {
+        return this.isMultipolygon() ? "area" : "relation";
+      });
+    },
+    isDegenerate: function() {
+      return this.members.length === 0;
+    },
+    // Return an array of members, each extended with an 'index' property whose value
+    // is the member index.
+    indexedMembers: function() {
+      var result = new Array(this.members.length);
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        result[i3] = Object.assign({}, this.members[i3], { index: i3 });
       }
-      return _loadPromise = Promise.all(filesToFetch.map((key) => _mainFileFetcher.get(key))).then((results) => {
-        _dataLanguages = results[0];
-        _dataLocales = results[1];
-        let indexes = results.slice(2);
-        let requestedLocales = (_preferredLocaleCodes || []).concat(utilDetect().browserLocales).concat(["en"]);
-        _localeCodes = localesToUseFrom(requestedLocales);
-        _localeCode = _localeCodes[0];
-        let loadStringsPromises = [];
-        indexes.forEach((index, i3) => {
-          const fullCoverageIndex = _localeCodes.findIndex(function(locale2) {
-            return index[locale2] && index[locale2].pct === 1;
-          });
-          _localeCodes.slice(0, fullCoverageIndex + 1).forEach(function(code) {
-            let scopeId = Object.keys(localeDirs)[i3];
-            let directory = Object.values(localeDirs)[i3];
-            if (index[code]) loadStringsPromises.push(localizer.loadLocale(code, scopeId, directory));
-          });
-        });
-        return Promise.all(loadStringsPromises);
-      }).then(() => {
-        updateForCurrentLocale();
-      }).catch((err) => console.error(err));
-    };
-    function localesToUseFrom(requestedLocales) {
-      let supportedLocales = _dataLocales;
-      let toUse = [];
-      for (let i3 in requestedLocales) {
-        let locale2 = requestedLocales[i3];
-        if (supportedLocales[locale2]) toUse.push(locale2);
-        if (locale2.includes("-")) {
-          let langPart = locale2.split("-")[0];
-          if (supportedLocales[langPart]) toUse.push(langPart);
+      return result;
+    },
+    // Return the first member with the given role. A copy of the member object
+    // is returned, extended with an 'index' property whose value is the member index.
+    memberByRole: function(role) {
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        if (this.members[i3].role === role) {
+          return Object.assign({}, this.members[i3], { index: i3 });
         }
       }
-      return utilArrayUniq(toUse);
-    }
-    function updateForCurrentLocale() {
-      if (!_localeCode) return;
-      _languageCode = _localeCode.split("-")[0];
-      const currentData = _dataLocales[_localeCode] || _dataLocales[_languageCode];
-      const hash = utilStringQs(window.location.hash);
-      if (hash.rtl === "true") {
-        _textDirection = "rtl";
-      } else if (hash.rtl === "false") {
-        _textDirection = "ltr";
-      } else {
-        _textDirection = currentData && currentData.rtl ? "rtl" : "ltr";
+    },
+    // Same as memberByRole, but returns all members with the given role
+    membersByRole: function(role) {
+      var result = [];
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        if (this.members[i3].role === role) {
+          result.push(Object.assign({}, this.members[i3], { index: i3 }));
+        }
       }
-      let locale2 = _localeCode;
-      if (locale2.toLowerCase() === "en-us") locale2 = "en";
-      _languageNames = _localeStrings.general[locale2].languageNames || _localeStrings.general[_languageCode].languageNames;
-      _scriptNames = _localeStrings.general[locale2].scriptNames || _localeStrings.general[_languageCode].scriptNames;
-      _usesMetric = _localeCode.slice(-3).toLowerCase() !== "-us";
-    }
-    localizer.loadLocale = (locale2, scopeId, directory) => {
-      if (locale2.toLowerCase() === "en-us") locale2 = "en";
-      if (_localeStrings[scopeId] && _localeStrings[scopeId][locale2]) {
-        return Promise.resolve(locale2);
+      return result;
+    },
+    // Return the first member with the given id. A copy of the member object
+    // is returned, extended with an 'index' property whose value is the member index.
+    memberById: function(id2) {
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        if (this.members[i3].id === id2) {
+          return Object.assign({}, this.members[i3], { index: i3 });
+        }
       }
-      let fileMap = _mainFileFetcher.fileMap();
-      const key = "locale_".concat(scopeId, "_").concat(locale2);
-      if (!fileMap[key]) {
-        fileMap[key] = "".concat(directory, "/").concat(locale2, ".min.json");
+    },
+    // Return the first member with the given id and role. A copy of the member object
+    // is returned, extended with an 'index' property whose value is the member index.
+    memberByIdAndRole: function(id2, role) {
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        if (this.members[i3].id === id2 && this.members[i3].role === role) {
+          return Object.assign({}, this.members[i3], { index: i3 });
+        }
       }
-      return _mainFileFetcher.get(key).then((d2) => {
-        if (!_localeStrings[scopeId]) _localeStrings[scopeId] = {};
-        _localeStrings[scopeId][locale2] = d2[locale2];
-        return locale2;
+    },
+    addMember: function(member, index) {
+      var members = this.members.slice();
+      members.splice(index === void 0 ? members.length : index, 0, member);
+      return this.update({ members });
+    },
+    updateMember: function(member, index) {
+      var members = this.members.slice();
+      members.splice(index, 1, Object.assign({}, members[index], member));
+      return this.update({ members });
+    },
+    removeMember: function(index) {
+      var members = this.members.slice();
+      members.splice(index, 1);
+      return this.update({ members });
+    },
+    removeMembersWithID: function(id2) {
+      var members = this.members.filter(function(m2) {
+        return m2.id !== id2;
       });
-    };
-    localizer.pluralRule = function(number3) {
-      return pluralRule(number3, _localeCode);
-    };
-    function pluralRule(number3, localeCode) {
-      const rules = "Intl" in window && Intl.PluralRules && new Intl.PluralRules(localeCode);
-      if (rules) {
-        return rules.select(number3);
-      }
-      if (number3 === 1) return "one";
-      return "other";
-    }
-    localizer.tInfo = function(origStringId, replacements, locale2) {
-      let stringId = origStringId.trim();
-      let scopeId = "general";
-      if (stringId[0] === "_") {
-        let split = stringId.split(".");
-        scopeId = split[0].slice(1);
-        stringId = split.slice(1).join(".");
-      }
-      locale2 = locale2 || _localeCode;
-      let path = stringId.split(".").map((s2) => s2.replace(/<TX_DOT>/g, ".")).reverse();
-      let stringsKey = locale2;
-      if (stringsKey.toLowerCase() === "en-us") stringsKey = "en";
-      let result = _localeStrings && _localeStrings[scopeId] && _localeStrings[scopeId][stringsKey];
-      while (result !== void 0 && path.length) {
-        result = result[path.pop()];
+      return this.update({ members });
+    },
+    moveMember: function(fromIndex, toIndex) {
+      var members = this.members.slice();
+      members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
+      return this.update({ members });
+    },
+    // Wherever a member appears with id `needle.id`, replace it with a member
+    // with id `replacement.id`, type `replacement.type`, and the original role,
+    // By default, adding a duplicate member (by id and role) is prevented.
+    // Return an updated relation.
+    replaceMember: function(needle, replacement, keepDuplicates) {
+      if (!this.memberById(needle.id)) return this;
+      var members = [];
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        var member = this.members[i3];
+        if (member.id !== needle.id) {
+          members.push(member);
+        } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
+          members.push({ id: replacement.id, type: replacement.type, role: member.role });
+        }
       }
-      if (result !== void 0) {
-        if (replacements) {
-          if (typeof result === "object" && Object.keys(result).length) {
-            const number3 = Object.values(replacements).find(function(value) {
-              return typeof value === "number";
-            });
-            if (number3 !== void 0) {
-              const rule = pluralRule(number3, locale2);
-              if (result[rule]) {
-                result = result[rule];
-              } else {
-                result = Object.values(result)[0];
-              }
-            }
-          }
-          if (typeof result === "string") {
-            for (let key in replacements) {
-              let value = replacements[key];
-              if (typeof value === "number") {
-                if (value.toLocaleString) {
-                  value = value.toLocaleString(locale2, {
-                    style: "decimal",
-                    useGrouping: true,
-                    minimumFractionDigits: 0
-                  });
-                } else {
-                  value = value.toString();
-                }
+      return this.update({ members });
+    },
+    asJXON: function(changeset_id) {
+      var r2 = {
+        relation: {
+          "@id": this.osmId(),
+          "@version": this.version || 0,
+          member: this.members.map(function(member) {
+            return {
+              keyAttributes: {
+                type: member.type,
+                role: member.role,
+                ref: osmEntity.id.toOSM(member.id)
               }
-              const token = "{".concat(key, "}");
-              const regex = new RegExp(token, "g");
-              result = result.replace(regex, value);
-            }
-          }
+            };
+          }, this),
+          tag: Object.keys(this.tags).map(function(k2) {
+            return { keyAttributes: { k: k2, v: this.tags[k2] } };
+          }, this)
         }
-        if (typeof result === "string") {
+      };
+      if (changeset_id) {
+        r2.relation["@changeset"] = changeset_id;
+      }
+      return r2;
+    },
+    asGeoJSON: function(resolver) {
+      return resolver.transient(this, "GeoJSON", function() {
+        if (this.isMultipolygon()) {
           return {
-            text: result,
-            locale: locale2
+            type: "MultiPolygon",
+            coordinates: this.multipolygon(resolver)
+          };
+        } else {
+          return {
+            type: "FeatureCollection",
+            properties: this.tags,
+            features: this.members.map(function(member) {
+              return Object.assign({ role: member.role }, resolver.entity(member.id).asGeoJSON(resolver));
+            })
           };
         }
+      });
+    },
+    area: function(resolver) {
+      return resolver.transient(this, "area", function() {
+        return area_default(this.asGeoJSON(resolver));
+      });
+    },
+    isMultipolygon: function() {
+      return this.tags.type === "multipolygon";
+    },
+    isComplete: function(resolver) {
+      for (var i3 = 0; i3 < this.members.length; i3++) {
+        if (!resolver.hasEntity(this.members[i3].id)) {
+          return false;
+        }
       }
-      let index = _localeCodes.indexOf(locale2);
-      if (index >= 0 && index < _localeCodes.length - 1) {
-        let fallback = _localeCodes[index + 1];
-        return localizer.tInfo(origStringId, replacements, fallback);
-      }
-      if (replacements && "default" in replacements) {
-        return {
-          text: replacements.default,
-          locale: null
-        };
-      }
-      const missing = "Missing ".concat(locale2, " translation: ").concat(origStringId);
-      if (typeof console !== "undefined") console.error(missing);
-      return {
-        text: missing,
-        locale: "en"
+      return true;
+    },
+    hasFromViaTo: function() {
+      return this.members.some(function(m2) {
+        return m2.role === "from";
+      }) && this.members.some(function(m2) {
+        return m2.role === "via";
+      }) && this.members.some(function(m2) {
+        return m2.role === "to";
+      });
+    },
+    isRestriction: function() {
+      return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
+    },
+    isValidRestriction: function() {
+      if (!this.isRestriction()) return false;
+      var froms = this.members.filter(function(m2) {
+        return m2.role === "from";
+      });
+      var vias = this.members.filter(function(m2) {
+        return m2.role === "via";
+      });
+      var tos = this.members.filter(function(m2) {
+        return m2.role === "to";
+      });
+      if (froms.length !== 1 && this.tags.restriction !== "no_entry") return false;
+      if (froms.some(function(m2) {
+        return m2.type !== "way";
+      })) return false;
+      if (tos.length !== 1 && this.tags.restriction !== "no_exit") return false;
+      if (tos.some(function(m2) {
+        return m2.type !== "way";
+      })) return false;
+      if (vias.length === 0) return false;
+      if (vias.length > 1 && vias.some(function(m2) {
+        return m2.type !== "way";
+      })) return false;
+      return true;
+    },
+    isConnectivity: function() {
+      return !!(this.tags.type && this.tags.type.match(/^connectivity:?/));
+    },
+    // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
+    // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
+    //
+    // This corresponds to the structure needed for rendering a multipolygon path using a
+    // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
+    //
+    // In the case of invalid geometries, this function will still return a result which
+    // includes the nodes of all way members, but some Nds may be unclosed and some inner
+    // rings not matched with the intended outer ring.
+    //
+    multipolygon: function(resolver) {
+      var outers = this.members.filter(function(m2) {
+        return "outer" === (m2.role || "outer");
+      });
+      var inners = this.members.filter(function(m2) {
+        return "inner" === m2.role;
+      });
+      outers = osmJoinWays(outers, resolver);
+      inners = osmJoinWays(inners, resolver);
+      var sequenceToLineString = function(sequence) {
+        if (sequence.nodes.length > 2 && sequence.nodes[0] !== sequence.nodes[sequence.nodes.length - 1]) {
+          sequence.nodes.push(sequence.nodes[0]);
+        }
+        return sequence.nodes.map(function(node) {
+          return node.loc;
+        });
       };
-    };
-    localizer.hasTextForStringId = function(stringId) {
-      return !!localizer.tInfo(stringId, { default: "nothing found" }).locale;
-    };
-    localizer.t = function(stringId, replacements, locale2) {
-      return localizer.tInfo(stringId, replacements, locale2).text;
-    };
-    localizer.t.html = function(stringId, replacements, locale2) {
-      replacements = Object.assign({}, replacements);
-      for (var k2 in replacements) {
-        if (typeof replacements[k2] === "string") {
-          replacements[k2] = escape_default(replacements[k2]);
+      outers = outers.map(sequenceToLineString);
+      inners = inners.map(sequenceToLineString);
+      var result = outers.map(function(o3) {
+        return [area_default({ type: "Polygon", coordinates: [o3] }) > 2 * Math.PI ? o3.reverse() : o3];
+      });
+      function findOuter(inner2) {
+        var o3, outer;
+        for (o3 = 0; o3 < outers.length; o3++) {
+          outer = outers[o3];
+          if (geoPolygonContainsPolygon(outer, inner2)) {
+            return o3;
+          }
         }
-        if (typeof replacements[k2] === "object" && typeof replacements[k2].html === "string") {
-          replacements[k2] = replacements[k2].html;
+        for (o3 = 0; o3 < outers.length; o3++) {
+          outer = outers[o3];
+          if (geoPolygonIntersectsPolygon(outer, inner2, false)) {
+            return o3;
+          }
         }
       }
-      const info = localizer.tInfo(stringId, replacements, locale2);
-      if (info.text) {
-        return '<span class="localized-text" lang="'.concat(info.locale || "und", '">').concat(info.text, "</span>");
-      } else {
-        return "";
+      for (var i3 = 0; i3 < inners.length; i3++) {
+        var inner = inners[i3];
+        if (area_default({ type: "Polygon", coordinates: [inner] }) < 2 * Math.PI) {
+          inner = inner.reverse();
+        }
+        var o2 = findOuter(inners[i3]);
+        if (o2 !== void 0) {
+          result[o2].push(inners[i3]);
+        } else {
+          result.push([inners[i3]]);
+        }
       }
-    };
-    localizer.t.append = function(stringId, replacements, locale2) {
-      const ret = function(selection2) {
-        const info = localizer.tInfo(stringId, replacements, locale2);
-        return selection2.append("span").attr("class", "localized-text").attr("lang", info.locale || "und").text((replacements && replacements.prefix || "") + info.text + (replacements && replacements.suffix || ""));
-      };
-      ret.stringId = stringId;
-      return ret;
-    };
-    localizer.t.addOrUpdate = function(stringId, replacements, locale2) {
-      const ret = function(selection2) {
-        const info = localizer.tInfo(stringId, replacements, locale2);
-        const span = selection2.selectAll("span.localized-text").data([info]);
-        const enter = span.enter().append("span").classed("localized-text", true);
-        span.merge(enter).attr("lang", info.locale || "und").text((replacements && replacements.prefix || "") + info.text + (replacements && replacements.suffix || ""));
-      };
-      ret.stringId = stringId;
-      return ret;
-    };
-    localizer.languageName = (code, options2) => {
-      if (_languageNames && _languageNames[code]) {
-        return _languageNames[code];
+      return result;
+    }
+  });
+
+  // modules/osm/qa_item.js
+  var QAItem = class _QAItem {
+    constructor(loc, service, itemType, id2, props) {
+      this.loc = loc;
+      this.service = service.title;
+      this.itemType = itemType;
+      this.id = id2 ? id2 : "".concat(_QAItem.id());
+      this.update(props);
+      if (service && typeof service.getIcon === "function") {
+        this.icon = service.getIcon(itemType);
       }
-      if (options2 && options2.localOnly) return null;
-      const langInfo = _dataLanguages[code];
-      if (langInfo) {
-        if (langInfo.nativeName) {
-          return localizer.t("translate.language_and_code", { language: langInfo.nativeName, code });
-        } else if (langInfo.base && langInfo.script) {
-          const base = langInfo.base;
-          if (_languageNames && _languageNames[base]) {
-            const scriptCode = langInfo.script;
-            const script = _scriptNames && _scriptNames[scriptCode] || scriptCode;
-            return localizer.t("translate.language_and_code", { language: _languageNames[base], code: script });
-          } else if (_dataLanguages[base] && _dataLanguages[base].nativeName) {
-            return localizer.t("translate.language_and_code", { language: _dataLanguages[base].nativeName, code });
-          }
+    }
+    update(props) {
+      const { loc, service, itemType, id: id2 } = this;
+      Object.keys(props).forEach((prop) => this[prop] = props[prop]);
+      this.loc = loc;
+      this.service = service;
+      this.itemType = itemType;
+      this.id = id2;
+      return this;
+    }
+    // Generic handling for newly created QAItems
+    static id() {
+      return this.nextId--;
+    }
+  };
+  QAItem.nextId = -1;
+
+  // modules/actions/split.js
+  function actionSplit(nodeIds, newWayIds) {
+    if (typeof nodeIds === "string") nodeIds = [nodeIds];
+    var _wayIDs;
+    var _keepHistoryOn = "longest";
+    const circularJunctions = ["roundabout", "circular"];
+    var _createdWayIDs = [];
+    function dist(graph, nA, nB) {
+      var locA = graph.entity(nA).loc;
+      var locB = graph.entity(nB).loc;
+      var epsilon3 = 1e-6;
+      return locA && locB ? geoSphericalDistance(locA, locB) : epsilon3;
+    }
+    function splitArea(nodes, idxA, graph) {
+      var lengths = new Array(nodes.length);
+      var length2;
+      var i3;
+      var best = 0;
+      var idxB;
+      function wrap2(index) {
+        return utilWrap(index, nodes.length);
+      }
+      length2 = 0;
+      for (i3 = wrap2(idxA + 1); i3 !== idxA; i3 = wrap2(i3 + 1)) {
+        length2 += dist(graph, nodes[i3], nodes[wrap2(i3 - 1)]);
+        lengths[i3] = length2;
+      }
+      length2 = 0;
+      for (i3 = wrap2(idxA - 1); i3 !== idxA; i3 = wrap2(i3 - 1)) {
+        length2 += dist(graph, nodes[i3], nodes[wrap2(i3 + 1)]);
+        if (length2 < lengths[i3]) {
+          lengths[i3] = length2;
+        }
+      }
+      for (i3 = 0; i3 < nodes.length; i3++) {
+        var cost = lengths[i3] / dist(graph, nodes[idxA], nodes[i3]);
+        if (cost > best) {
+          idxB = i3;
+          best = cost;
+        }
+      }
+      return idxB;
+    }
+    function totalLengthBetweenNodes(graph, nodes) {
+      var totalLength = 0;
+      for (var i3 = 0; i3 < nodes.length - 1; i3++) {
+        totalLength += dist(graph, nodes[i3], nodes[i3 + 1]);
+      }
+      return totalLength;
+    }
+    function split(graph, nodeId, wayA, newWayId) {
+      var wayB = osmWay({ id: newWayId, tags: wayA.tags });
+      var nodesA;
+      var nodesB;
+      var isArea = wayA.isArea();
+      if (wayA.isClosed()) {
+        var nodes = wayA.nodes.slice(0, -1);
+        var idxA = nodes.indexOf(nodeId);
+        var idxB = splitArea(nodes, idxA, graph);
+        if (idxB < idxA) {
+          nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
+          nodesB = nodes.slice(idxB, idxA + 1);
+        } else {
+          nodesA = nodes.slice(idxA, idxB + 1);
+          nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
         }
+      } else {
+        var idx = wayA.nodes.indexOf(nodeId, 1);
+        nodesA = wayA.nodes.slice(0, idx + 1);
+        nodesB = wayA.nodes.slice(idx);
       }
-      return code;
-    };
-    localizer.floatFormatter = (locale2) => {
-      if (!("Intl" in window && "NumberFormat" in Intl && "formatToParts" in Intl.NumberFormat.prototype)) {
-        return (number3, fractionDigits) => {
-          return fractionDigits === void 0 ? number3.toString() : number3.toFixed(fractionDigits);
-        };
+      var lengthA = totalLengthBetweenNodes(graph, nodesA);
+      var lengthB = totalLengthBetweenNodes(graph, nodesB);
+      if (_keepHistoryOn === "longest" && lengthB > lengthA) {
+        wayA = wayA.update({ nodes: nodesB });
+        wayB = wayB.update({ nodes: nodesA });
+        var temp = lengthA;
+        lengthA = lengthB;
+        lengthB = temp;
       } else {
-        return (number3, fractionDigits) => number3.toLocaleString(locale2, {
-          minimumFractionDigits: fractionDigits,
-          maximumFractionDigits: fractionDigits === void 0 ? 20 : fractionDigits
-        });
+        wayA = wayA.update({ nodes: nodesA });
+        wayB = wayB.update({ nodes: nodesB });
       }
-    };
-    localizer.floatParser = (locale2) => {
-      const polyfill = (string) => +string.trim();
-      if (!("Intl" in window && "NumberFormat" in Intl)) return polyfill;
-      const format2 = new Intl.NumberFormat(locale2, { maximumFractionDigits: 20 });
-      if (!("formatToParts" in format2)) return polyfill;
-      const parts = format2.formatToParts(-12345.6);
-      const numerals = Array.from({ length: 10 }).map((_2, i3) => format2.format(i3));
-      const index = new Map(numerals.map((d2, i3) => [d2, i3]));
-      const literalPart = parts.find((d2) => d2.type === "literal");
-      const literal = literalPart && new RegExp("[".concat(literalPart.value, "]"), "g");
-      const groupPart = parts.find((d2) => d2.type === "group");
-      const group = groupPart && new RegExp("[".concat(groupPart.value, "]"), "g");
-      const decimalPart = parts.find((d2) => d2.type === "decimal");
-      const decimal = decimalPart && new RegExp("[".concat(decimalPart.value, "]"));
-      const numeral = new RegExp("[".concat(numerals.join(""), "]"), "g");
-      const getIndex = (d2) => index.get(d2);
-      return (string) => {
-        string = string.trim();
-        if (literal) string = string.replace(literal, "");
-        if (group) string = string.replace(group, "");
-        if (decimal) string = string.replace(decimal, ".");
-        string = string.replace(numeral, getIndex);
-        return string ? +string : NaN;
-      };
-    };
-    localizer.decimalPlaceCounter = (locale2) => {
-      var literal, group, decimal;
-      if ("Intl" in window && "NumberFormat" in Intl) {
-        const format2 = new Intl.NumberFormat(locale2, { maximumFractionDigits: 20 });
-        if ("formatToParts" in format2) {
-          const parts = format2.formatToParts(-12345.6);
-          const literalPart = parts.find((d2) => d2.type === "literal");
-          literal = literalPart && new RegExp("[".concat(literalPart.value, "]"), "g");
-          const groupPart = parts.find((d2) => d2.type === "group");
-          group = groupPart && new RegExp("[".concat(groupPart.value, "]"), "g");
-          const decimalPart = parts.find((d2) => d2.type === "decimal");
-          decimal = decimalPart && new RegExp("[".concat(decimalPart.value, "]"));
+      if (wayA.tags.step_count) {
+        var stepCount = Number(wayA.tags.step_count);
+        if (stepCount && // ensure a number
+        isFinite(stepCount) && // ensure positive
+        stepCount > 0 && // ensure integer
+        Math.round(stepCount) === stepCount) {
+          var tagsA = Object.assign({}, wayA.tags);
+          var tagsB = Object.assign({}, wayB.tags);
+          var ratioA = lengthA / (lengthA + lengthB);
+          var countA = Math.round(stepCount * ratioA);
+          tagsA.step_count = countA.toString();
+          tagsB.step_count = (stepCount - countA).toString();
+          wayA = wayA.update({ tags: tagsA });
+          wayB = wayB.update({ tags: tagsB });
         }
       }
-      return (string) => {
-        string = string.trim();
-        if (literal) string = string.replace(literal, "");
-        if (group) string = string.replace(group, "");
-        const parts = string.split(decimal || ".");
-        return parts && parts[1] && parts[1].length || 0;
-      };
-    };
-    return localizer;
-  }
-
-  // modules/presets/collection.js
-  function presetCollection(collection) {
-    const MAXRESULTS = 50;
-    let _this = {};
-    let _memo = {};
-    _this.collection = collection;
-    _this.item = (id2) => {
-      if (_memo[id2]) return _memo[id2];
-      const found = _this.collection.find((d2) => d2.id === id2);
-      if (found) _memo[id2] = found;
-      return found;
-    };
-    _this.index = (id2) => _this.collection.findIndex((d2) => d2.id === id2);
-    _this.matchGeometry = (geometry) => {
-      return presetCollection(
-        _this.collection.filter((d2) => d2.matchGeometry(geometry))
-      );
-    };
-    _this.matchAllGeometry = (geometries) => {
-      return presetCollection(
-        _this.collection.filter((d2) => d2 && d2.matchAllGeometry(geometries))
-      );
-    };
-    _this.matchAnyGeometry = (geometries) => {
-      return presetCollection(
-        _this.collection.filter((d2) => geometries.some((geom) => d2.matchGeometry(geom)))
-      );
-    };
-    _this.fallback = (geometry) => {
-      let id2 = geometry;
-      if (id2 === "vertex") id2 = "point";
-      return _this.item(id2);
-    };
-    _this.search = (value, geometry, loc) => {
-      if (!value) return _this;
-      value = value.toLowerCase().trim();
-      function leading(a2) {
-        const index = a2.indexOf(value);
-        return index === 0 || a2[index - 1] === " ";
-      }
-      function leadingStrict(a2) {
-        const index = a2.indexOf(value);
-        return index === 0;
-      }
-      function sortPresets(nameProp, aliasesProp) {
-        return function sortNames(a2, b2) {
-          let aCompare = a2[nameProp]();
-          let bCompare = b2[nameProp]();
-          if (aliasesProp) {
-            const findMatchingAlias = (strings) => {
-              if (strings.some((s2) => s2 === value)) {
-                return strings.find((s2) => s2 === value);
-              } else {
-                return strings.filter((s2) => s2.includes(value)).sort((a3, b3) => a3.length - b3.length)[0];
+      graph = graph.replace(wayA);
+      graph = graph.replace(wayB);
+      graph.parentRelations(wayA).forEach(function(relation) {
+        if (relation.hasFromViaTo()) {
+          var f2 = relation.memberByRole("from");
+          var v2 = relation.membersByRole("via");
+          var t2 = relation.memberByRole("to");
+          var i3;
+          if (f2.id === wayA.id || t2.id === wayA.id) {
+            var keepB = false;
+            if (v2.length === 1 && v2[0].type === "node") {
+              keepB = wayB.contains(v2[0].id);
+            } else {
+              for (i3 = 0; i3 < v2.length; i3++) {
+                if (v2[i3].type === "way") {
+                  var wayVia = graph.hasEntity(v2[i3].id);
+                  if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
+                    keepB = true;
+                    break;
+                  }
+                }
               }
-            };
-            aCompare = findMatchingAlias([aCompare].concat(a2[aliasesProp]()));
-            bCompare = findMatchingAlias([bCompare].concat(b2[aliasesProp]()));
+            }
+            if (keepB) {
+              relation = relation.replaceMember(wayA, wayB);
+              graph = graph.replace(relation);
+            }
+          } else {
+            for (i3 = 0; i3 < v2.length; i3++) {
+              if (v2[i3].type === "way" && v2[i3].id === wayA.id) {
+                graph = splitWayMember(graph, relation.id, wayA, wayB);
+              }
+            }
           }
-          if (value === aCompare) return -1;
-          if (value === bCompare) return 1;
-          let i3 = b2.originalScore - a2.originalScore;
-          if (i3 !== 0) return i3;
-          i3 = aCompare.indexOf(value) - bCompare.indexOf(value);
-          if (i3 !== 0) return i3;
-          return aCompare.length - bCompare.length;
-        };
-      }
-      let pool = _this.collection;
-      if (Array.isArray(loc)) {
-        const validHere = _sharedLocationManager.locationSetsAt(loc);
-        pool = pool.filter((a2) => !a2.locationSetID || validHere[a2.locationSetID]);
-      }
-      const searchable = pool.filter((a2) => a2.searchable !== false && a2.suggestion !== true);
-      const suggestions = pool.filter((a2) => a2.suggestion === true);
-      const leadingNames = searchable.filter((a2) => leading(a2.searchName()) || a2.searchAliases().some(leading)).sort(sortPresets("searchName", "searchAliases"));
-      const leadingSuggestions = suggestions.filter((a2) => leadingStrict(a2.searchName())).sort(sortPresets("searchName"));
-      const leadingNamesStripped = searchable.filter((a2) => leading(a2.searchNameStripped()) || a2.searchAliasesStripped().some(leading)).sort(sortPresets("searchNameStripped", "searchAliasesStripped"));
-      const leadingSuggestionsStripped = suggestions.filter((a2) => leadingStrict(a2.searchNameStripped())).sort(sortPresets("searchNameStripped"));
-      const leadingTerms = searchable.filter((a2) => (a2.terms() || []).some(leading));
-      const leadingSuggestionTerms = suggestions.filter((a2) => (a2.terms() || []).some(leading));
-      const leadingTagValues = searchable.filter((a2) => Object.values(a2.tags || {}).filter((val) => val !== "*").some(leading));
-      const similarName = searchable.map((a2) => ({ preset: a2, dist: utilEditDistance(value, a2.searchName()) })).filter((a2) => a2.dist + Math.min(value.length - a2.preset.searchName().length, 0) < 3).sort((a2, b2) => a2.dist - b2.dist).map((a2) => a2.preset);
-      const similarSuggestions = suggestions.map((a2) => ({ preset: a2, dist: utilEditDistance(value, a2.searchName()) })).filter((a2) => a2.dist + Math.min(value.length - a2.preset.searchName().length, 0) < 1).sort((a2, b2) => a2.dist - b2.dist).map((a2) => a2.preset);
-      const similarTerms = searchable.filter((a2) => {
-        return (a2.terms() || []).some((b2) => {
-          return utilEditDistance(value, b2) + Math.min(value.length - b2.length, 0) < 3;
-        });
-      });
-      let leadingTagKeyValues = [];
-      if (value.includes("=")) {
-        leadingTagKeyValues = searchable.filter((a2) => a2.tags && Object.keys(a2.tags).some((key) => key + "=" + a2.tags[key] === value)).concat(searchable.filter((a2) => a2.tags && Object.keys(a2.tags).some((key) => leading(key + "=" + a2.tags[key]))));
-      }
-      let results = leadingNames.concat(
-        leadingSuggestions,
-        leadingNamesStripped,
-        leadingSuggestionsStripped,
-        leadingTerms,
-        leadingSuggestionTerms,
-        leadingTagValues,
-        similarName,
-        similarSuggestions,
-        similarTerms,
-        leadingTagKeyValues
-      ).slice(0, MAXRESULTS - 1);
-      if (geometry) {
-        if (typeof geometry === "string") {
-          results.push(_this.fallback(geometry));
         } else {
-          geometry.forEach((geom) => results.push(_this.fallback(geom)));
+          graph = splitWayMember(graph, relation.id, wayA, wayB);
         }
+      });
+      if (isArea) {
+        var multipolygon = osmRelation({
+          tags: Object.assign({}, wayA.tags, { type: "multipolygon" }),
+          members: [
+            { id: wayA.id, role: "outer", type: "way" },
+            { id: wayB.id, role: "outer", type: "way" }
+          ]
+        });
+        graph = graph.replace(multipolygon);
+        graph = graph.replace(wayA.update({ tags: {} }));
+        graph = graph.replace(wayB.update({ tags: {} }));
       }
-      return presetCollection(utilArrayUniq(results));
-    };
-    return _this;
-  }
-
-  // modules/presets/category.js
-  function presetCategory(categoryID, category, allPresets) {
-    let _this = Object.assign({}, category);
-    let _searchName;
-    let _searchNameStripped;
-    _this.id = categoryID;
-    _this.members = presetCollection(
-      (category.members || []).map((presetID) => allPresets[presetID]).filter(Boolean)
-    );
-    _this.geometry = _this.members.collection.reduce((acc, preset) => {
-      for (let i3 in preset.geometry) {
-        const geometry = preset.geometry[i3];
-        if (acc.indexOf(geometry) === -1) {
-          acc.push(geometry);
+      _createdWayIDs.push(wayB.id);
+      return graph;
+    }
+    function splitWayMember(graph, relationId, wayA, wayB) {
+      function connects(way1, way2) {
+        if (way1.nodes.length < 2 || way2.nodes.length < 2) return false;
+        if (circularJunctions.includes(way1.tags.junction) && way1.isClosed()) {
+          return way1.nodes.some((nodeId) => nodeId === way2.nodes[0] || nodeId === way2.nodes[way2.nodes.length - 1]);
+        } else if (circularJunctions.includes(way2.tags.junction) && way2.isClosed()) {
+          return way2.nodes.some((nodeId) => nodeId === way1.nodes[0] || nodeId === way1.nodes[way1.nodes.length - 1]);
         }
+        if (way1.nodes[0] === way2.nodes[0]) return true;
+        if (way1.nodes[0] === way2.nodes[way2.nodes.length - 1]) return true;
+        if (way1.nodes[way1.nodes.length - 1] === way2.nodes[way2.nodes.length - 1]) return true;
+        if (way1.nodes[way1.nodes.length - 1] === way2.nodes[0]) return true;
+        return false;
       }
-      return acc;
-    }, []);
-    _this.matchGeometry = (geom) => _this.geometry.indexOf(geom) >= 0;
-    _this.matchAllGeometry = (geometries) => _this.members.collection.some((preset) => preset.matchAllGeometry(geometries));
-    _this.matchScore = () => -1;
-    _this.name = () => _t("_tagging.presets.categories.".concat(categoryID, ".name"), { "default": categoryID });
-    _this.nameLabel = () => _t.append("_tagging.presets.categories.".concat(categoryID, ".name"), { "default": categoryID });
-    _this.terms = () => [];
-    _this.searchName = () => {
-      if (!_searchName) {
-        _searchName = (_this.suggestion ? _this.originalName : _this.name()).toLowerCase();
+      let relation = graph.entity(relationId);
+      const insertMembers = [];
+      const members = relation.members;
+      for (let i3 = 0; i3 < members.length; i3++) {
+        const member = members[i3];
+        if (member.id === wayA.id) {
+          let wayAconnectsPrev = false;
+          let wayAconnectsNext = false;
+          let wayBconnectsPrev = false;
+          let wayBconnectsNext = false;
+          if (i3 > 0 && graph.hasEntity(members[i3 - 1].id)) {
+            const prevEntity = graph.entity(members[i3 - 1].id);
+            if (prevEntity.type === "way") {
+              wayAconnectsPrev = connects(prevEntity, wayA);
+              wayBconnectsPrev = connects(prevEntity, wayB);
+            }
+          }
+          if (i3 < members.length - 1 && graph.hasEntity(members[i3 + 1].id)) {
+            const nextEntity = graph.entity(members[i3 + 1].id);
+            if (nextEntity.type === "way") {
+              wayAconnectsNext = connects(nextEntity, wayA);
+              wayBconnectsNext = connects(nextEntity, wayB);
+            }
+          }
+          if (wayAconnectsPrev && !wayAconnectsNext || !wayBconnectsPrev && wayBconnectsNext && !(!wayAconnectsPrev && wayAconnectsNext)) {
+            insertMembers.push({ at: i3 + 1, role: member.role });
+            continue;
+          }
+          if (!wayAconnectsPrev && wayAconnectsNext || wayBconnectsPrev && !wayBconnectsNext && !(wayAconnectsPrev && !wayAconnectsNext)) {
+            insertMembers.push({ at: i3, role: member.role });
+            continue;
+          }
+          if (wayAconnectsPrev && wayBconnectsPrev && wayAconnectsNext && wayBconnectsNext) {
+            if (i3 > 2 && graph.hasEntity(members[i3 - 2].id)) {
+              const prev2Entity = graph.entity(members[i3 - 2].id);
+              if (connects(prev2Entity, wayA) && !connects(prev2Entity, wayB)) {
+                insertMembers.push({ at: i3, role: member.role });
+                continue;
+              }
+              if (connects(prev2Entity, wayB) && !connects(prev2Entity, wayA)) {
+                insertMembers.push({ at: i3 + 1, role: member.role });
+                continue;
+              }
+            }
+            if (i3 < members.length - 2 && graph.hasEntity(members[i3 + 2].id)) {
+              const next2Entity = graph.entity(members[i3 + 2].id);
+              if (connects(next2Entity, wayA) && !connects(next2Entity, wayB)) {
+                insertMembers.push({ at: i3 + 1, role: member.role });
+                continue;
+              }
+              if (connects(next2Entity, wayB) && !connects(next2Entity, wayA)) {
+                insertMembers.push({ at: i3, role: member.role });
+                continue;
+              }
+            }
+          }
+          if (wayA.nodes[wayA.nodes.length - 1] === wayB.nodes[0]) {
+            insertMembers.push({ at: i3 + 1, role: member.role });
+          } else {
+            insertMembers.push({ at: i3, role: member.role });
+          }
+        }
       }
-      return _searchName;
-    };
-    _this.searchNameStripped = () => {
-      if (!_searchNameStripped) {
-        _searchNameStripped = _this.searchName();
-        if (_searchNameStripped.normalize) _searchNameStripped = _searchNameStripped.normalize("NFD");
-        _searchNameStripped = _searchNameStripped.replace(/[\u0300-\u036f]/g, "");
+      insertMembers.reverse().forEach((item) => {
+        graph = graph.replace(relation.addMember({
+          id: wayB.id,
+          type: "way",
+          role: item.role
+        }, item.at));
+        relation = graph.entity(relation.id);
+      });
+      return graph;
+    }
+    var action = function(graph) {
+      _createdWayIDs = [];
+      var newWayIndex = 0;
+      for (var i3 = 0; i3 < nodeIds.length; i3++) {
+        var nodeId = nodeIds[i3];
+        var candidates = action.waysForNode(nodeId, graph);
+        for (var j2 = 0; j2 < candidates.length; j2++) {
+          graph = split(graph, nodeId, candidates[j2], newWayIds && newWayIds[newWayIndex]);
+          newWayIndex += 1;
+        }
       }
-      return _searchNameStripped;
+      return graph;
     };
-    _this.searchAliases = () => [];
-    _this.searchAliasesStripped = () => [];
-    return _this;
-  }
-
-  // modules/presets/field.js
-  function presetField(fieldID, field, allFields) {
-    allFields = allFields || {};
-    let _this = Object.assign({}, field);
-    _this.id = fieldID;
-    _this.safeid = utilSafeClassName(fieldID);
-    _this.matchGeometry = (geom) => !_this.geometry || _this.geometry.indexOf(geom) !== -1;
-    _this.matchAllGeometry = (geometries) => {
-      return !_this.geometry || geometries.every((geom) => _this.geometry.indexOf(geom) !== -1);
+    action.getCreatedWayIDs = function() {
+      return _createdWayIDs;
     };
-    _this.t = (scope, options2) => _t("_tagging.presets.fields.".concat(fieldID, ".").concat(scope), options2);
-    _this.t.html = (scope, options2) => _t.html("_tagging.presets.fields.".concat(fieldID, ".").concat(scope), options2);
-    _this.t.append = (scope, options2) => _t.append("_tagging.presets.fields.".concat(fieldID, ".").concat(scope), options2);
-    _this.hasTextForStringId = (scope) => _mainLocalizer.hasTextForStringId("_tagging.presets.fields.".concat(fieldID, ".").concat(scope));
-    _this.resolveReference = (which) => {
-      const referenceRegex = /^\{(.*)\}$/;
-      const match = (field[which] || "").match(referenceRegex);
-      if (match) {
-        const field2 = allFields[match[1]];
-        if (field2) {
-          return field2;
+    action.waysForNode = function(nodeId, graph) {
+      var node = graph.entity(nodeId);
+      var splittableParents = graph.parentWays(node).filter(isSplittable);
+      if (!_wayIDs) {
+        var hasLine = splittableParents.some(function(parent) {
+          return parent.geometry(graph) === "line";
+        });
+        if (hasLine) {
+          return splittableParents.filter(function(parent) {
+            return parent.geometry(graph) === "line";
+          });
         }
-        console.error("Unable to resolve referenced field: ".concat(match[1]));
       }
-      return _this;
-    };
-    _this.title = () => _this.overrideLabel || _this.resolveReference("label").t("label", { "default": fieldID });
-    _this.label = () => _this.overrideLabel ? (selection2) => selection2.text(_this.overrideLabel) : _this.resolveReference("label").t.append("label", { "default": fieldID });
-    _this.placeholder = () => _this.resolveReference("placeholder").t("placeholder", { "default": "" });
-    _this.originalTerms = (_this.terms || []).join();
-    _this.terms = () => _this.resolveReference("label").t("terms", { "default": _this.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
-    _this.increment = _this.type === "number" ? _this.increment || 1 : void 0;
-    return _this;
-  }
-
-  // modules/presets/preset.js
-  var import_lodash = __toESM(require_lodash());
-  function presetPreset(presetID, preset, addable, allFields, allPresets) {
-    allFields = allFields || {};
-    allPresets = allPresets || {};
-    let _this = Object.assign({}, preset);
-    let _addable = addable || false;
-    let _searchName;
-    let _searchNameStripped;
-    let _searchAliases;
-    let _searchAliasesStripped;
-    const referenceRegex = /^\{(.*)\}$/;
-    _this.id = presetID;
-    _this.safeid = utilSafeClassName(presetID);
-    _this.originalTerms = (_this.terms || []).join();
-    _this.originalName = _this.name || "";
-    _this.originalAliases = (_this.aliases || []).join("\n");
-    _this.originalScore = _this.matchScore || 1;
-    _this.originalReference = _this.reference || {};
-    _this.originalFields = _this.fields || [];
-    _this.originalMoreFields = _this.moreFields || [];
-    _this.fields = (loc) => resolveFields("fields", loc);
-    _this.moreFields = (loc) => resolveFields("moreFields", loc);
-    _this.tags = _this.tags || {};
-    _this.addTags = _this.addTags || _this.tags;
-    _this.removeTags = _this.removeTags || _this.addTags;
-    _this.geometry = _this.geometry || [];
-    _this.matchGeometry = (geom) => _this.geometry.indexOf(geom) >= 0;
-    _this.matchAllGeometry = (geoms) => geoms.every(_this.matchGeometry);
-    _this.matchScore = (entityTags) => {
-      const tags = _this.tags;
-      let seen = {};
-      let score = 0;
-      for (let k2 in tags) {
-        seen[k2] = true;
-        if (entityTags[k2] === tags[k2]) {
-          score += _this.originalScore;
-        } else if (tags[k2] === "*" && k2 in entityTags) {
-          score += _this.originalScore / 2;
-        } else {
-          return -1;
+      return splittableParents;
+      function isSplittable(parent) {
+        if (_wayIDs && _wayIDs.indexOf(parent.id) === -1) return false;
+        if (parent.isClosed()) return true;
+        for (var i3 = 1; i3 < parent.nodes.length - 1; i3++) {
+          if (parent.nodes[i3] === nodeId) return true;
         }
+        return false;
       }
-      const addTags = _this.addTags;
-      for (let k2 in addTags) {
-        if (!seen[k2] && entityTags[k2] === addTags[k2]) {
-          score += _this.originalScore;
+    };
+    action.ways = function(graph) {
+      return utilArrayUniq([].concat.apply([], nodeIds.map(function(nodeId) {
+        return action.waysForNode(nodeId, graph);
+      })));
+    };
+    action.disabled = function(graph) {
+      for (const nodeId of nodeIds) {
+        const candidates = action.waysForNode(nodeId, graph);
+        if (candidates.length === 0 || _wayIDs && _wayIDs.length !== candidates.length) {
+          return "not_eligible";
+        }
+        for (const way of candidates) {
+          const parentRelations = graph.parentRelations(way);
+          for (const parentRelation of parentRelations) {
+            if (parentRelation.hasFromViaTo()) {
+              const vias = parentRelation.membersByRole("via");
+              if (!vias.every((via) => graph.hasEntity(via.id))) {
+                return "parent_incomplete";
+              }
+            } else {
+              for (let i3 = 0; i3 < parentRelation.members.length; i3++) {
+                if (parentRelation.members[i3].id === way.id) {
+                  const memberBeforePresent = i3 > 0 && graph.hasEntity(parentRelation.members[i3 - 1].id);
+                  const memberAfterPresent = i3 < parentRelation.members.length - 1 && graph.hasEntity(parentRelation.members[i3 + 1].id);
+                  if (!memberBeforePresent && !memberAfterPresent && parentRelation.members.length > 1) {
+                    return "parent_incomplete";
+                  }
+                }
+              }
+            }
+            const relTypesExceptions = ["junction", "enforcement"];
+            if (circularJunctions.includes(way.tags.junction) && way.isClosed() && !relTypesExceptions.includes(parentRelation.tags.type)) {
+              return "simple_roundabout";
+            }
+          }
         }
       }
-      if (_this.searchable === false) {
-        score *= 0.999;
-      }
-      return score;
     };
-    _this.t = (scope, options2) => {
-      const textID = "_tagging.presets.presets.".concat(presetID, ".").concat(scope);
-      return _t(textID, options2);
+    action.limitWays = function(val) {
+      if (!arguments.length) return _wayIDs;
+      _wayIDs = val;
+      return action;
     };
-    _this.t.append = (scope, options2) => {
-      const textID = "_tagging.presets.presets.".concat(presetID, ".").concat(scope);
-      return _t.append(textID, options2);
+    action.keepHistoryOn = function(val) {
+      if (!arguments.length) return _keepHistoryOn;
+      _keepHistoryOn = val;
+      return action;
     };
-    function resolveReference(which) {
-      const match = (_this[which] || "").match(referenceRegex);
-      if (match) {
-        const preset2 = allPresets[match[1]];
-        if (preset2) {
-          return preset2;
+    return action;
+  }
+
+  // modules/core/graph.js
+  function coreGraph(other2, mutable) {
+    if (!(this instanceof coreGraph)) return new coreGraph(other2, mutable);
+    if (other2 instanceof coreGraph) {
+      var base = other2.base();
+      this.entities = Object.assign(Object.create(base.entities), other2.entities);
+      this._parentWays = Object.assign(Object.create(base.parentWays), other2._parentWays);
+      this._parentRels = Object.assign(Object.create(base.parentRels), other2._parentRels);
+    } else {
+      this.entities = /* @__PURE__ */ Object.create({});
+      this._parentWays = /* @__PURE__ */ Object.create({});
+      this._parentRels = /* @__PURE__ */ Object.create({});
+      this.rebase(other2 || [], [this]);
+    }
+    this.transients = {};
+    this._childNodes = {};
+    this.frozen = !mutable;
+  }
+  coreGraph.prototype = {
+    hasEntity: function(id2) {
+      return this.entities[id2];
+    },
+    entity: function(id2) {
+      var entity = this.entities[id2];
+      if (!entity) {
+        entity = this.entities.__proto__[id2];
+      }
+      if (!entity) {
+        throw new Error("entity " + id2 + " not found");
+      }
+      return entity;
+    },
+    geometry: function(id2) {
+      return this.entity(id2).geometry(this);
+    },
+    transient: function(entity, key, fn) {
+      var id2 = entity.id;
+      var transients = this.transients[id2] || (this.transients[id2] = {});
+      if (transients[key] !== void 0) {
+        return transients[key];
+      }
+      transients[key] = fn.call(entity);
+      return transients[key];
+    },
+    parentWays: function(entity) {
+      var parents = this._parentWays[entity.id];
+      var result = [];
+      if (parents) {
+        parents.forEach(function(id2) {
+          result.push(this.entity(id2));
+        }, this);
+      }
+      return result;
+    },
+    isPoi: function(entity) {
+      var parents = this._parentWays[entity.id];
+      return !parents || parents.size === 0;
+    },
+    isShared: function(entity) {
+      var parents = this._parentWays[entity.id];
+      return parents && parents.size > 1;
+    },
+    parentRelations: function(entity) {
+      var parents = this._parentRels[entity.id];
+      var result = [];
+      if (parents) {
+        parents.forEach(function(id2) {
+          result.push(this.entity(id2));
+        }, this);
+      }
+      return result;
+    },
+    parentMultipolygons: function(entity) {
+      return this.parentRelations(entity).filter(function(relation) {
+        return relation.isMultipolygon();
+      });
+    },
+    childNodes: function(entity) {
+      if (this._childNodes[entity.id]) return this._childNodes[entity.id];
+      if (!entity.nodes) return [];
+      var nodes = [];
+      for (var i3 = 0; i3 < entity.nodes.length; i3++) {
+        nodes[i3] = this.entity(entity.nodes[i3]);
+      }
+      if (debug) Object.freeze(nodes);
+      this._childNodes[entity.id] = nodes;
+      return this._childNodes[entity.id];
+    },
+    base: function() {
+      return {
+        "entities": Object.getPrototypeOf(this.entities),
+        "parentWays": Object.getPrototypeOf(this._parentWays),
+        "parentRels": Object.getPrototypeOf(this._parentRels)
+      };
+    },
+    // Unlike other graph methods, rebase mutates in place. This is because it
+    // is used only during the history operation that merges newly downloaded
+    // data into each state. To external consumers, it should appear as if the
+    // graph always contained the newly downloaded data.
+    rebase: function(entities, stack, force) {
+      var base = this.base();
+      var i3, j2, k2, id2;
+      for (i3 = 0; i3 < entities.length; i3++) {
+        var entity = entities[i3];
+        if (!entity.visible || !force && base.entities[entity.id]) continue;
+        base.entities[entity.id] = entity;
+        this._updateCalculated(void 0, entity, base.parentWays, base.parentRels);
+        if (entity.type === "way") {
+          for (j2 = 0; j2 < entity.nodes.length; j2++) {
+            id2 = entity.nodes[j2];
+            for (k2 = 1; k2 < stack.length; k2++) {
+              var ents = stack[k2].entities;
+              if (ents.hasOwnProperty(id2) && ents[id2] === void 0) {
+                delete ents[id2];
+              }
+            }
+          }
         }
-        console.error("Unable to resolve referenced preset: ".concat(match[1]));
       }
-      return _this;
-    }
-    _this.name = () => {
-      return resolveReference("originalName").t("name", { "default": _this.originalName || presetID });
-    };
-    _this.nameLabel = () => {
-      return resolveReference("originalName").t.append("name", { "default": _this.originalName || presetID });
-    };
-    _this.subtitle = () => {
-      if (_this.suggestion) {
-        let path = presetID.split("/");
-        path.pop();
-        return _t("_tagging.presets.presets." + path.join("/") + ".name");
+      for (i3 = 0; i3 < stack.length; i3++) {
+        stack[i3]._updateRebased();
       }
-      return null;
-    };
-    _this.subtitleLabel = () => {
-      if (_this.suggestion) {
-        let path = presetID.split("/");
-        path.pop();
-        return _t.append("_tagging.presets.presets." + path.join("/") + ".name");
+    },
+    _updateRebased: function() {
+      var base = this.base();
+      Object.keys(this._parentWays).forEach(function(child) {
+        if (base.parentWays[child]) {
+          base.parentWays[child].forEach(function(id2) {
+            if (!this.entities.hasOwnProperty(id2)) {
+              this._parentWays[child].add(id2);
+            }
+          }, this);
+        }
+      }, this);
+      Object.keys(this._parentRels).forEach(function(child) {
+        if (base.parentRels[child]) {
+          base.parentRels[child].forEach(function(id2) {
+            if (!this.entities.hasOwnProperty(id2)) {
+              this._parentRels[child].add(id2);
+            }
+          }, this);
+        }
+      }, this);
+      this.transients = {};
+    },
+    // Updates calculated properties (parentWays, parentRels) for the specified change
+    _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
+      parentWays = parentWays || this._parentWays;
+      parentRels = parentRels || this._parentRels;
+      var type2 = entity && entity.type || oldentity && oldentity.type;
+      var removed, added, i3;
+      if (type2 === "way") {
+        if (oldentity && entity) {
+          removed = utilArrayDifference(oldentity.nodes, entity.nodes);
+          added = utilArrayDifference(entity.nodes, oldentity.nodes);
+        } else if (oldentity) {
+          removed = oldentity.nodes;
+          added = [];
+        } else if (entity) {
+          removed = [];
+          added = entity.nodes;
+        }
+        for (i3 = 0; i3 < removed.length; i3++) {
+          parentWays[removed[i3]] = new Set(parentWays[removed[i3]]);
+          parentWays[removed[i3]].delete(oldentity.id);
+        }
+        for (i3 = 0; i3 < added.length; i3++) {
+          parentWays[added[i3]] = new Set(parentWays[added[i3]]);
+          parentWays[added[i3]].add(entity.id);
+        }
+      } else if (type2 === "relation") {
+        var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m2) {
+          return m2.id;
+        }) : [];
+        var entityMemberIDs = entity ? entity.members.map(function(m2) {
+          return m2.id;
+        }) : [];
+        if (oldentity && entity) {
+          removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
+          added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
+        } else if (oldentity) {
+          removed = oldentityMemberIDs;
+          added = [];
+        } else if (entity) {
+          removed = [];
+          added = entityMemberIDs;
+        }
+        for (i3 = 0; i3 < removed.length; i3++) {
+          parentRels[removed[i3]] = new Set(parentRels[removed[i3]]);
+          parentRels[removed[i3]].delete(oldentity.id);
+        }
+        for (i3 = 0; i3 < added.length; i3++) {
+          parentRels[added[i3]] = new Set(parentRels[added[i3]]);
+          parentRels[added[i3]].add(entity.id);
+        }
       }
-      return null;
-    };
-    _this.aliases = () => {
-      return resolveReference("originalName").t("aliases", { "default": _this.originalAliases }).trim().split(/\s*[\r\n]+\s*/);
-    };
-    _this.terms = () => {
-      return resolveReference("originalName").t("terms", { "default": _this.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
-    };
-    _this.searchName = () => {
-      if (!_searchName) {
-        _searchName = (_this.suggestion ? _this.originalName : _this.name()).toLowerCase();
+    },
+    replace: function(entity) {
+      if (this.entities[entity.id] === entity) return this;
+      return this.update(function() {
+        this._updateCalculated(this.entities[entity.id], entity);
+        this.entities[entity.id] = entity;
+      });
+    },
+    remove: function(entity) {
+      return this.update(function() {
+        this._updateCalculated(entity, void 0);
+        this.entities[entity.id] = void 0;
+      });
+    },
+    revert: function(id2) {
+      var baseEntity = this.base().entities[id2];
+      var headEntity = this.entities[id2];
+      if (headEntity === baseEntity) return this;
+      return this.update(function() {
+        this._updateCalculated(headEntity, baseEntity);
+        delete this.entities[id2];
+      });
+    },
+    update: function() {
+      var graph = this.frozen ? coreGraph(this, true) : this;
+      for (var i3 = 0; i3 < arguments.length; i3++) {
+        arguments[i3].call(graph, graph);
       }
-      return _searchName;
-    };
-    _this.searchNameStripped = () => {
-      if (!_searchNameStripped) {
-        _searchNameStripped = stripDiacritics(_this.searchName());
+      if (this.frozen) graph.frozen = true;
+      return graph;
+    },
+    // Obliterates any existing entities
+    load: function(entities) {
+      var base = this.base();
+      this.entities = Object.create(base.entities);
+      for (var i3 in entities) {
+        this.entities[i3] = entities[i3];
+        this._updateCalculated(base.entities[i3], this.entities[i3]);
       }
-      return _searchNameStripped;
-    };
-    _this.searchAliases = () => {
-      if (!_searchAliases) {
-        _searchAliases = _this.aliases().map((alias) => alias.toLowerCase());
+      return this;
+    }
+  };
+
+  // modules/osm/intersection.js
+  function osmTurn(turn) {
+    if (!(this instanceof osmTurn)) {
+      return new osmTurn(turn);
+    }
+    Object.assign(this, turn);
+  }
+  function osmIntersection(graph, startVertexId, maxDistance) {
+    maxDistance = maxDistance || 30;
+    var vgraph = coreGraph();
+    var i3, j2, k2;
+    function memberOfRestriction(entity) {
+      return graph.parentRelations(entity).some(function(r2) {
+        return r2.isRestriction();
+      });
+    }
+    function isRoad(way2) {
+      if (way2.isArea() || way2.isDegenerate()) return false;
+      var roads = {
+        "motorway": true,
+        "motorway_link": true,
+        "trunk": true,
+        "trunk_link": true,
+        "primary": true,
+        "primary_link": true,
+        "secondary": true,
+        "secondary_link": true,
+        "tertiary": true,
+        "tertiary_link": true,
+        "residential": true,
+        "unclassified": true,
+        "living_street": true,
+        "service": true,
+        "busway": true,
+        "road": true,
+        "track": true
+      };
+      return roads[way2.tags.highway];
+    }
+    var startNode = graph.entity(startVertexId);
+    var checkVertices = [startNode];
+    var checkWays;
+    var vertices = [];
+    var vertexIds = [];
+    var vertex;
+    var ways = [];
+    var wayIds = [];
+    var way;
+    var nodes = [];
+    var node;
+    var parents = [];
+    var parent;
+    var actions = [];
+    while (checkVertices.length) {
+      vertex = checkVertices.pop();
+      checkWays = graph.parentWays(vertex);
+      var hasWays = false;
+      for (i3 = 0; i3 < checkWays.length; i3++) {
+        way = checkWays[i3];
+        if (!isRoad(way) && !memberOfRestriction(way)) continue;
+        ways.push(way);
+        hasWays = true;
+        nodes = utilArrayUniq(graph.childNodes(way));
+        for (j2 = 0; j2 < nodes.length; j2++) {
+          node = nodes[j2];
+          if (node === vertex) continue;
+          if (vertices.indexOf(node) !== -1) continue;
+          if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue;
+          var hasParents = false;
+          parents = graph.parentWays(node);
+          for (k2 = 0; k2 < parents.length; k2++) {
+            parent = parents[k2];
+            if (parent === way) continue;
+            if (ways.indexOf(parent) !== -1) continue;
+            if (!isRoad(parent)) continue;
+            hasParents = true;
+            break;
+          }
+          if (hasParents) {
+            checkVertices.push(node);
+          }
+        }
       }
-      return _searchAliases;
-    };
-    _this.searchAliasesStripped = () => {
-      if (!_searchAliasesStripped) {
-        _searchAliasesStripped = _this.searchAliases();
-        _searchAliasesStripped = _searchAliasesStripped.map(stripDiacritics);
+      if (hasWays) {
+        vertices.push(vertex);
       }
-      return _searchAliasesStripped;
-    };
-    _this.isFallback = () => {
-      const tagCount = Object.keys(_this.tags).length;
-      return tagCount === 0 || tagCount === 1 && _this.tags.hasOwnProperty("area");
-    };
-    _this.addable = function(val) {
-      if (!arguments.length) return _addable;
-      _addable = val;
-      return _this;
-    };
-    _this.reference = () => {
-      const qid = _this.tags.wikidata || _this.tags["flag:wikidata"] || _this.tags["brand:wikidata"] || _this.tags["network:wikidata"] || _this.tags["operator:wikidata"];
-      if (qid) {
-        return { qid };
+    }
+    vertices = utilArrayUniq(vertices);
+    ways = utilArrayUniq(ways);
+    ways.forEach(function(way2) {
+      graph.childNodes(way2).forEach(function(node2) {
+        vgraph = vgraph.replace(node2);
+      });
+      vgraph = vgraph.replace(way2);
+      graph.parentRelations(way2).forEach(function(relation) {
+        if (relation.isRestriction()) {
+          if (relation.isValidRestriction(graph)) {
+            vgraph = vgraph.replace(relation);
+          } else if (relation.isComplete(graph)) {
+            actions.push(actionDeleteRelation(relation.id));
+          }
+        }
+      });
+    });
+    ways.forEach(function(w2) {
+      var way2 = vgraph.entity(w2.id);
+      if (way2.tags.oneway === "-1") {
+        var action = actionReverse(way2.id, { reverseOneway: true });
+        actions.push(action);
+        vgraph = action(vgraph);
       }
-      let key = _this.originalReference.key || Object.keys(utilObjectOmit(_this.tags, "name"))[0];
-      let value = _this.originalReference.value || _this.tags[key];
-      if (value === "*") {
-        return { key };
-      } else {
-        return { key, value };
+    });
+    var origCount = osmEntity.id.next.way;
+    vertices.forEach(function(v2) {
+      var splitAll = actionSplit([v2.id]).keepHistoryOn("first");
+      if (!splitAll.disabled(vgraph)) {
+        splitAll.ways(vgraph).forEach(function(way2) {
+          var splitOne = actionSplit([v2.id]).limitWays([way2.id]).keepHistoryOn("first");
+          actions.push(splitOne);
+          vgraph = splitOne(vgraph);
+        });
       }
-    };
-    _this.unsetTags = (tags, geometry, ignoringKeys, skipFieldDefaults, loc) => {
-      let removeTags = ignoringKeys ? utilObjectOmit(_this.removeTags, ignoringKeys) : _this.removeTags;
-      tags = utilObjectOmit(tags, Object.keys(removeTags));
-      if (geometry && !skipFieldDefaults) {
-        _this.fields(loc).forEach((field) => {
-          if (field.matchGeometry(geometry) && field.key && field.default === tags[field.key] && (!ignoringKeys || ignoringKeys.indexOf(field.key) === -1)) {
-            delete tags[field.key];
+    });
+    osmEntity.id.next.way = origCount;
+    vertexIds = vertices.map(function(v2) {
+      return v2.id;
+    });
+    vertices = [];
+    ways = [];
+    vertexIds.forEach(function(id2) {
+      var vertex2 = vgraph.entity(id2);
+      var parents2 = vgraph.parentWays(vertex2);
+      vertices.push(vertex2);
+      ways = ways.concat(parents2);
+    });
+    vertices = utilArrayUniq(vertices);
+    ways = utilArrayUniq(ways);
+    vertexIds = vertices.map(function(v2) {
+      return v2.id;
+    });
+    wayIds = ways.map(function(w2) {
+      return w2.id;
+    });
+    function withMetadata(way2, vertexIds2) {
+      var __oneWay = way2.isOneWay();
+      var __first = vertexIds2.indexOf(way2.first()) !== -1;
+      var __last = vertexIds2.indexOf(way2.last()) !== -1;
+      var __via = __first && __last;
+      var __from = __first && !__oneWay || __last;
+      var __to = __first || __last && !__oneWay;
+      return way2.update({
+        __first,
+        __last,
+        __from,
+        __via,
+        __to,
+        __oneWay
+      });
+    }
+    ways = [];
+    wayIds.forEach(function(id2) {
+      var way2 = withMetadata(vgraph.entity(id2), vertexIds);
+      vgraph = vgraph.replace(way2);
+      ways.push(way2);
+    });
+    var keepGoing;
+    var removeWayIds = [];
+    var removeVertexIds = [];
+    do {
+      keepGoing = false;
+      checkVertices = vertexIds.slice();
+      for (i3 = 0; i3 < checkVertices.length; i3++) {
+        var vertexId = checkVertices[i3];
+        vertex = vgraph.hasEntity(vertexId);
+        if (!vertex) {
+          if (vertexIds.indexOf(vertexId) !== -1) {
+            vertexIds.splice(vertexIds.indexOf(vertexId), 1);
           }
-        });
-      }
-      delete tags.area;
-      return tags;
-    };
-    _this.setTags = (tags, geometry, skipFieldDefaults, loc) => {
-      const addTags = _this.addTags;
-      tags = Object.assign({}, tags);
-      for (let k2 in addTags) {
-        if (addTags[k2] === "*") {
-          if (_this.tags[k2] || !tags[k2]) {
-            tags[k2] = "yes";
+          removeVertexIds.push(vertexId);
+          continue;
+        }
+        parents = vgraph.parentWays(vertex);
+        if (parents.length < 3) {
+          if (vertexIds.indexOf(vertexId) !== -1) {
+            vertexIds.splice(vertexIds.indexOf(vertexId), 1);
           }
-        } else {
-          tags[k2] = addTags[k2];
         }
-      }
-      if (!addTags.hasOwnProperty("area")) {
-        delete tags.area;
-        if (geometry === "area") {
-          let needsAreaTag = true;
-          for (let k2 in addTags) {
-            if (_this.geometry.indexOf("line") === -1 && k2 in osmAreaKeys || k2 in osmAreaKeysExceptions && addTags[k2] in osmAreaKeysExceptions[k2]) {
-              needsAreaTag = false;
-              break;
-            }
+        if (parents.length === 2) {
+          var a2 = parents[0];
+          var b2 = parents[1];
+          var aIsLeaf = a2 && !a2.__via;
+          var bIsLeaf = b2 && !b2.__via;
+          var leaf, survivor;
+          if (aIsLeaf && !bIsLeaf) {
+            leaf = a2;
+            survivor = b2;
+          } else if (!aIsLeaf && bIsLeaf) {
+            leaf = b2;
+            survivor = a2;
           }
-          if (needsAreaTag) {
-            tags.area = "yes";
+          if (leaf && survivor) {
+            survivor = withMetadata(survivor, vertexIds);
+            vgraph = vgraph.replace(survivor).remove(leaf);
+            removeWayIds.push(leaf.id);
+            keepGoing = true;
           }
         }
-      }
-      if (geometry && !skipFieldDefaults) {
-        _this.fields(loc).forEach((field) => {
-          if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
-            tags[field.key] = field.default;
+        parents = vgraph.parentWays(vertex);
+        if (parents.length < 2) {
+          if (vertexIds.indexOf(vertexId) !== -1) {
+            vertexIds.splice(vertexIds.indexOf(vertexId), 1);
           }
-        });
-      }
-      return tags;
-    };
-    function resolveFields(which, loc) {
-      const fieldIDs = which === "fields" ? _this.originalFields : _this.originalMoreFields;
-      let resolved = [];
-      fieldIDs.forEach((fieldID) => {
-        const match = fieldID.match(referenceRegex);
-        if (match !== null) {
-          resolved = resolved.concat(inheritFields(allPresets[match[1]], which));
-        } else if (allFields[fieldID]) {
-          resolved.push(allFields[fieldID]);
-        } else {
-          console.log('Cannot resolve "'.concat(fieldID, '" found in ').concat(_this.id, ".").concat(which));
+          removeVertexIds.push(vertexId);
+          keepGoing = true;
         }
-      });
-      if (!resolved.length) {
-        const endIndex = _this.id.lastIndexOf("/");
-        const parentID = endIndex && _this.id.substring(0, endIndex);
-        if (parentID) {
-          let parent = allPresets[parentID];
-          if (loc) {
-            const validHere = _sharedLocationManager.locationSetsAt(loc);
-            if ((parent == null ? void 0 : parent.locationSetID) && !validHere[parent.locationSetID]) {
-              const candidateIDs = Object.keys(allPresets).filter((k2) => k2.startsWith(parentID));
-              parent = allPresets[candidateIDs.find((candidateID) => {
-                const candidate = allPresets[candidateID];
-                return validHere[candidate.locationSetID] && (0, import_lodash.isEqual)(candidate.tags, parent.tags);
-              })];
-            }
-          }
-          resolved = inheritFields(parent, which);
+        if (parents.length < 1) {
+          vgraph = vgraph.remove(vertex);
         }
       }
-      return utilArrayUniq(resolved);
-      function inheritFields(parent, which2) {
-        if (!parent) return [];
-        if (which2 === "fields") {
-          return parent.fields().filter(shouldInherit);
-        } else if (which2 === "moreFields") {
-          return parent.moreFields();
+    } while (keepGoing);
+    vertices = vertices.filter(function(vertex2) {
+      return removeVertexIds.indexOf(vertex2.id) === -1;
+    }).map(function(vertex2) {
+      return vgraph.entity(vertex2.id);
+    });
+    ways = ways.filter(function(way2) {
+      return removeWayIds.indexOf(way2.id) === -1;
+    }).map(function(way2) {
+      return vgraph.entity(way2.id);
+    });
+    var intersection2 = {
+      graph: vgraph,
+      actions,
+      vertices,
+      ways
+    };
+    intersection2.turns = function(fromWayId, maxViaWay) {
+      if (!fromWayId) return [];
+      if (!maxViaWay) maxViaWay = 0;
+      var vgraph2 = intersection2.graph;
+      var keyVertexIds = intersection2.vertices.map(function(v2) {
+        return v2.id;
+      });
+      var start2 = vgraph2.entity(fromWayId);
+      if (!start2 || !(start2.__from || start2.__via)) return [];
+      var maxPathLength = maxViaWay * 2 + 3;
+      var turns = [];
+      step(start2);
+      return turns;
+      function step(entity, currPath, currRestrictions, matchedRestriction) {
+        currPath = (currPath || []).slice();
+        if (currPath.length >= maxPathLength) return;
+        currPath.push(entity.id);
+        currRestrictions = (currRestrictions || []).slice();
+        if (entity.type === "node") {
+          stepNode(entity, currPath, currRestrictions);
         } else {
-          return [];
+          stepWay(entity, currPath, currRestrictions, matchedRestriction);
         }
       }
-      function shouldInherit(f2) {
-        if (f2.key && _this.tags[f2.key] !== void 0 && // inherit anyway if multiple values are allowed or just a checkbox
-        f2.type !== "multiCombo" && f2.type !== "semiCombo" && f2.type !== "manyCombo" && f2.type !== "check") return false;
-        return true;
-      }
-    }
-    function stripDiacritics(s2) {
-      if (s2.normalize) s2 = s2.normalize("NFD");
-      s2 = s2.replace(/[\u0300-\u036f]/g, "");
-      return s2;
-    }
-    return _this;
-  }
-
-  // modules/presets/index.js
-  var _mainPresetIndex = presetIndex();
-  function presetIndex() {
-    const dispatch14 = dispatch_default("favoritePreset", "recentsChange");
-    const MAXRECENTS = 30;
-    const POINT = presetPreset("point", { name: "Point", tags: {}, geometry: ["point", "vertex"], matchScore: 0.1 });
-    const LINE = presetPreset("line", { name: "Line", tags: {}, geometry: ["line"], matchScore: 0.1 });
-    const AREA = presetPreset("area", { name: "Area", tags: { area: "yes" }, geometry: ["area"], matchScore: 0.1 });
-    const RELATION = presetPreset("relation", { name: "Relation", tags: {}, geometry: ["relation"], matchScore: 0.1 });
-    let _this = presetCollection([POINT, LINE, AREA, RELATION]);
-    let _presets = { point: POINT, line: LINE, area: AREA, relation: RELATION };
-    let _defaults2 = {
-      point: presetCollection([POINT]),
-      vertex: presetCollection([POINT]),
-      line: presetCollection([LINE]),
-      area: presetCollection([AREA]),
-      relation: presetCollection([RELATION])
-    };
-    let _fields = {};
-    let _categories = {};
-    let _universal = [];
-    let _addablePresetIDs = null;
-    let _recents;
-    let _favorites;
-    let _geometryIndex = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
-    let _loadPromise;
-    _this.ensureLoaded = () => {
-      if (_loadPromise) return _loadPromise;
-      return _loadPromise = Promise.all([
-        _mainFileFetcher.get("preset_categories"),
-        _mainFileFetcher.get("preset_defaults"),
-        _mainFileFetcher.get("preset_presets"),
-        _mainFileFetcher.get("preset_fields")
-      ]).then((vals) => {
-        _this.merge({
-          categories: vals[0],
-          defaults: vals[1],
-          presets: vals[2],
-          fields: vals[3]
-        });
-        osmSetAreaKeys(_this.areaKeys());
-        osmSetLineTags(_this.lineTags());
-        osmSetPointTags(_this.pointTags());
-        osmSetVertexTags(_this.vertexTags());
-      });
-    };
-    _this.merge = (d2) => {
-      let newLocationSets = [];
-      if (d2.fields) {
-        Object.keys(d2.fields).forEach((fieldID) => {
-          let f2 = d2.fields[fieldID];
-          if (f2) {
-            f2 = presetField(fieldID, f2, _fields);
-            if (f2.locationSet) newLocationSets.push(f2);
-            _fields[fieldID] = f2;
-          } else {
-            delete _fields[fieldID];
+      function stepNode(entity, currPath, currRestrictions) {
+        var i4, j3;
+        var parents2 = vgraph2.parentWays(entity);
+        var nextWays = [];
+        for (i4 = 0; i4 < parents2.length; i4++) {
+          var way2 = parents2[i4];
+          if (way2.__oneWay && way2.nodes[0] !== entity.id) continue;
+          if (currPath.indexOf(way2.id) !== -1 && currPath.length >= 3) continue;
+          var restrict = null;
+          for (j3 = 0; j3 < currRestrictions.length; j3++) {
+            var restriction = currRestrictions[j3];
+            var f2 = restriction.memberByRole("from");
+            var v2 = restriction.membersByRole("via");
+            var t2 = restriction.memberByRole("to");
+            var isNo = /^no_/.test(restriction.tags.restriction);
+            var isOnly = /^only_/.test(restriction.tags.restriction);
+            if (!(isNo || isOnly)) {
+              continue;
+            }
+            var matchesFrom = f2.id === fromWayId;
+            var matchesViaTo = false;
+            var isAlongOnlyPath = false;
+            if (t2.id === way2.id) {
+              if (v2.length === 1 && v2[0].type === "node") {
+                matchesViaTo = v2[0].id === entity.id && (matchesFrom && currPath.length === 2 || !matchesFrom && currPath.length > 2);
+              } else {
+                var pathVias = [];
+                for (k2 = 2; k2 < currPath.length; k2 += 2) {
+                  pathVias.push(currPath[k2]);
+                }
+                var restrictionVias = [];
+                for (k2 = 0; k2 < v2.length; k2++) {
+                  if (v2[k2].type === "way") {
+                    restrictionVias.push(v2[k2].id);
+                  }
+                }
+                var diff = utilArrayDifference(pathVias, restrictionVias);
+                matchesViaTo = !diff.length;
+              }
+            } else if (isOnly) {
+              for (k2 = 0; k2 < v2.length; k2++) {
+                if (v2[k2].type === "way" && v2[k2].id === way2.id) {
+                  isAlongOnlyPath = true;
+                  break;
+                }
+              }
+            }
+            if (matchesViaTo) {
+              if (isOnly) {
+                restrict = { id: restriction.id, direct: matchesFrom, from: f2.id, only: true, end: true };
+              } else {
+                restrict = { id: restriction.id, direct: matchesFrom, from: f2.id, no: true, end: true };
+              }
+            } else {
+              if (isAlongOnlyPath) {
+                restrict = { id: restriction.id, direct: false, from: f2.id, only: true, end: false };
+              } else if (isOnly) {
+                restrict = { id: restriction.id, direct: false, from: f2.id, no: true, end: true };
+              }
+            }
+            if (restrict && restrict.direct) break;
           }
+          nextWays.push({ way: way2, restrict });
+        }
+        nextWays.forEach(function(nextWay) {
+          step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
         });
       }
-      if (d2.presets) {
-        Object.keys(d2.presets).forEach((presetID) => {
-          let p2 = d2.presets[presetID];
-          if (p2) {
-            const isAddable = !_addablePresetIDs || _addablePresetIDs.has(presetID);
-            p2 = presetPreset(presetID, p2, isAddable, _fields, _presets);
-            if (p2.locationSet) newLocationSets.push(p2);
-            _presets[presetID] = p2;
-          } else {
-            const existing = _presets[presetID];
-            if (existing && !existing.isFallback()) {
-              delete _presets[presetID];
+      function stepWay(entity, currPath, currRestrictions, matchedRestriction) {
+        var i4;
+        if (currPath.length >= 3) {
+          var turnPath = currPath.slice();
+          if (matchedRestriction && matchedRestriction.direct === false) {
+            for (i4 = 0; i4 < turnPath.length; i4++) {
+              if (turnPath[i4] === matchedRestriction.from) {
+                turnPath = turnPath.slice(i4);
+                break;
+              }
             }
           }
-        });
-      }
-      if (d2.categories) {
-        Object.keys(d2.categories).forEach((categoryID) => {
-          let c2 = d2.categories[categoryID];
-          if (c2) {
-            c2 = presetCategory(categoryID, c2, _presets);
-            if (c2.locationSet) newLocationSets.push(c2);
-            _categories[categoryID] = c2;
-          } else {
-            delete _categories[categoryID];
+          var turn = pathToTurn(turnPath);
+          if (turn) {
+            if (matchedRestriction) {
+              turn.restrictionID = matchedRestriction.id;
+              turn.no = matchedRestriction.no;
+              turn.only = matchedRestriction.only;
+              turn.direct = matchedRestriction.direct;
+            }
+            turns.push(osmTurn(turn));
           }
+          if (currPath[0] === currPath[2]) return;
+        }
+        if (matchedRestriction && matchedRestriction.end) return;
+        var n1 = vgraph2.entity(entity.first());
+        var n22 = vgraph2.entity(entity.last());
+        var dist = geoSphericalDistance(n1.loc, n22.loc);
+        var nextNodes = [];
+        if (currPath.length > 1) {
+          if (dist > maxDistance) return;
+          if (!entity.__via) return;
+        }
+        if (!entity.__oneWay && // bidirectional..
+        keyVertexIds.indexOf(n1.id) !== -1 && // key vertex..
+        currPath.indexOf(n1.id) === -1) {
+          nextNodes.push(n1);
+        }
+        if (keyVertexIds.indexOf(n22.id) !== -1 && // key vertex..
+        currPath.indexOf(n22.id) === -1) {
+          nextNodes.push(n22);
+        }
+        nextNodes.forEach(function(nextNode) {
+          var fromRestrictions = vgraph2.parentRelations(entity).filter(function(r2) {
+            if (!r2.isRestriction()) return false;
+            var f2 = r2.memberByRole("from");
+            if (!f2 || f2.id !== entity.id) return false;
+            var isOnly = /^only_/.test(r2.tags.restriction);
+            if (!isOnly) return true;
+            var isOnlyVia = false;
+            var v2 = r2.membersByRole("via");
+            if (v2.length === 1 && v2[0].type === "node") {
+              isOnlyVia = v2[0].id === nextNode.id;
+            } else {
+              for (var i5 = 0; i5 < v2.length; i5++) {
+                if (v2[i5].type !== "way") continue;
+                var viaWay = vgraph2.entity(v2[i5].id);
+                if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
+                  isOnlyVia = true;
+                  break;
+                }
+              }
+            }
+            return isOnlyVia;
+          });
+          step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
         });
       }
-      _this.collection = Object.values(_presets).concat(Object.values(_categories));
-      if (d2.defaults) {
-        Object.keys(d2.defaults).forEach((geometry) => {
-          const def2 = d2.defaults[geometry];
-          if (Array.isArray(def2)) {
-            _defaults2[geometry] = presetCollection(
-              def2.map((id2) => _presets[id2] || _categories[id2]).filter(Boolean)
-            );
+      function pathToTurn(path) {
+        if (path.length < 3) return;
+        var fromWayId2, fromNodeId, fromVertexId;
+        var toWayId, toNodeId, toVertexId;
+        var viaWayIds, viaNodeId, isUturn;
+        fromWayId2 = path[0];
+        toWayId = path[path.length - 1];
+        if (path.length === 3 && fromWayId2 === toWayId) {
+          var way2 = vgraph2.entity(fromWayId2);
+          if (way2.__oneWay) return null;
+          isUturn = true;
+          viaNodeId = fromVertexId = toVertexId = path[1];
+          fromNodeId = toNodeId = adjacentNode(fromWayId2, viaNodeId);
+        } else {
+          isUturn = false;
+          fromVertexId = path[1];
+          fromNodeId = adjacentNode(fromWayId2, fromVertexId);
+          toVertexId = path[path.length - 2];
+          toNodeId = adjacentNode(toWayId, toVertexId);
+          if (path.length === 3) {
+            viaNodeId = path[1];
           } else {
-            delete _defaults2[geometry];
+            viaWayIds = path.filter(function(entityId) {
+              return entityId[0] === "w";
+            });
+            viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);
           }
-        });
+        }
+        return {
+          key: path.join("_"),
+          path,
+          from: { node: fromNodeId, way: fromWayId2, vertex: fromVertexId },
+          via: { node: viaNodeId, ways: viaWayIds },
+          to: { node: toNodeId, way: toWayId, vertex: toVertexId },
+          u: isUturn
+        };
+        function adjacentNode(wayId, affixId) {
+          var nodes2 = vgraph2.entity(wayId).nodes;
+          return affixId === nodes2[0] ? nodes2[1] : nodes2[nodes2.length - 2];
+        }
       }
-      _universal = Object.values(_fields).filter((field) => field.universal);
-      _geometryIndex = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
-      _this.collection.forEach((preset) => {
-        (preset.geometry || []).forEach((geometry) => {
-          let g3 = _geometryIndex[geometry];
-          for (let key in preset.tags) {
-            g3[key] = g3[key] || {};
-            let value = preset.tags[key];
-            (g3[key][value] = g3[key][value] || []).push(preset);
-          }
+    };
+    return intersection2;
+  }
+  function osmInferRestriction(graph, turn, projection2) {
+    var fromWay = graph.entity(turn.from.way);
+    var fromNode = graph.entity(turn.from.node);
+    var fromVertex = graph.entity(turn.from.vertex);
+    var toWay = graph.entity(turn.to.way);
+    var toNode = graph.entity(turn.to.node);
+    var toVertex = graph.entity(turn.to.vertex);
+    var fromOneWay = fromWay.tags.oneway === "yes";
+    var toOneWay = toWay.tags.oneway === "yes";
+    var angle2 = (geoAngle(fromVertex, fromNode, projection2) - geoAngle(toVertex, toNode, projection2)) * 180 / Math.PI;
+    while (angle2 < 0) {
+      angle2 += 360;
+    }
+    if (fromNode === toNode) {
+      return "no_u_turn";
+    }
+    if ((angle2 < 23 || angle2 > 336) && fromOneWay && toOneWay) {
+      return "no_u_turn";
+    }
+    if ((angle2 < 40 || angle2 > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex) {
+      return "no_u_turn";
+    }
+    if (angle2 < 158) {
+      return "no_right_turn";
+    }
+    if (angle2 > 202) {
+      return "no_left_turn";
+    }
+    return "no_straight_on";
+  }
+
+  // modules/actions/merge_polygon.js
+  function actionMergePolygon(ids, newRelationId) {
+    function groupEntities(graph) {
+      var entities = ids.map(function(id2) {
+        return graph.entity(id2);
+      });
+      var geometryGroups = utilArrayGroupBy(entities, function(entity) {
+        if (entity.type === "way" && entity.isClosed()) {
+          return "closedWay";
+        } else if (entity.type === "relation" && entity.isMultipolygon()) {
+          return "multipolygon";
+        } else {
+          return "other";
+        }
+      });
+      return Object.assign(
+        { closedWay: [], multipolygon: [], other: [] },
+        geometryGroups
+      );
+    }
+    var action = function(graph) {
+      var entities = groupEntities(graph);
+      var polygons = entities.multipolygon.reduce(function(polygons2, m2) {
+        return polygons2.concat(osmJoinWays(m2.members, graph));
+      }, []).concat(entities.closedWay.map(function(d2) {
+        var member = [{ id: d2.id }];
+        member.nodes = graph.childNodes(d2);
+        return member;
+      }));
+      var contained = polygons.map(function(w2, i3) {
+        return polygons.map(function(d2, n3) {
+          if (i3 === n3) return null;
+          return geoPolygonContainsPolygon(
+            d2.nodes.map(function(n4) {
+              return n4.loc;
+            }),
+            w2.nodes.map(function(n4) {
+              return n4.loc;
+            })
+          );
+        });
+      });
+      var members = [];
+      var outer = true;
+      while (polygons.length) {
+        extractUncontained(polygons);
+        polygons = polygons.filter(isContained);
+        contained = contained.filter(isContained).map(filterContained);
+      }
+      function isContained(d2, i3) {
+        return contained[i3].some(function(val) {
+          return val;
         });
-      });
-      if (d2.featureCollection && Array.isArray(d2.featureCollection.features)) {
-        _sharedLocationManager.mergeCustomGeoJSON(d2.featureCollection);
       }
-      if (newLocationSets.length) {
-        _sharedLocationManager.mergeLocationSets(newLocationSets);
+      function filterContained(d2) {
+        return d2.filter(isContained);
       }
-      return _this;
-    };
-    _this.match = (entity, resolver) => {
-      return resolver.transient(entity, "presetMatch", () => {
-        let geometry = entity.geometry(resolver);
-        if (geometry === "vertex" && entity.isOnAddressLine(resolver)) {
-          geometry = "point";
-        }
-        const entityExtent = entity.extent(resolver);
-        return _this.matchTags(entity.tags, geometry, entityExtent.center());
-      });
-    };
-    _this.matchTags = (tags, geometry, loc) => {
-      const keyIndex = _geometryIndex[geometry];
-      let bestScore = -1;
-      let bestMatch;
-      let matchCandidates = [];
-      for (let k2 in tags) {
-        let indexMatches = [];
-        let valueIndex = keyIndex[k2];
-        if (!valueIndex) continue;
-        let keyValueMatches = valueIndex[tags[k2]];
-        if (keyValueMatches) indexMatches.push(...keyValueMatches);
-        let keyStarMatches = valueIndex["*"];
-        if (keyStarMatches) indexMatches.push(...keyStarMatches);
-        if (indexMatches.length === 0) continue;
-        for (let i3 = 0; i3 < indexMatches.length; i3++) {
-          const candidate = indexMatches[i3];
-          const score = candidate.matchScore(tags);
-          if (score === -1) {
-            continue;
-          }
-          matchCandidates.push({ score, candidate });
-          if (score > bestScore) {
-            bestScore = score;
-            bestMatch = candidate;
+      function extractUncontained(polygons2) {
+        polygons2.forEach(function(d2, i3) {
+          if (!isContained(d2, i3)) {
+            d2.forEach(function(member) {
+              members.push({
+                type: "way",
+                id: member.id,
+                role: outer ? "outer" : "inner"
+              });
+            });
           }
-        }
+        });
+        outer = !outer;
       }
-      if (bestMatch && bestMatch.locationSetID && bestMatch.locationSetID !== "+[Q2]" && Array.isArray(loc)) {
-        const validHere = _sharedLocationManager.locationSetsAt(loc);
-        if (!validHere[bestMatch.locationSetID]) {
-          matchCandidates.sort((a2, b2) => a2.score < b2.score ? 1 : -1);
-          for (let i3 = 0; i3 < matchCandidates.length; i3++) {
-            const candidateScore = matchCandidates[i3];
-            if (!candidateScore.candidate.locationSetID || validHere[candidateScore.candidate.locationSetID]) {
-              bestMatch = candidateScore.candidate;
-              bestScore = candidateScore.score;
-              break;
-            }
-          }
-        }
+      var relation;
+      if (entities.multipolygon.length > 0) {
+        var oldestID = utilOldestID(entities.multipolygon.map((entity) => entity.id));
+        relation = entities.multipolygon.find((entity) => entity.id === oldestID);
+      } else {
+        relation = osmRelation({ id: newRelationId, tags: { type: "multipolygon" } });
       }
-      if (!bestMatch || bestMatch.isFallback()) {
-        for (let k2 in tags) {
-          if (/^addr:/.test(k2) && keyIndex["addr:*"] && keyIndex["addr:*"]["*"]) {
-            bestMatch = keyIndex["addr:*"]["*"][0];
-            break;
-          }
+      entities.multipolygon.forEach(function(m2) {
+        if (m2.id !== relation.id) {
+          relation = relation.mergeTags(m2.tags);
+          graph = graph.remove(m2);
         }
-      }
-      return bestMatch || _this.fallback(geometry);
-    };
-    _this.allowsVertex = (entity, resolver) => {
-      if (entity.type !== "node") return false;
-      if (Object.keys(entity.tags).length === 0) return true;
-      return resolver.transient(entity, "vertexMatch", () => {
-        if (entity.isOnAddressLine(resolver)) return true;
-        const geometries = osmNodeGeometriesForTags(entity.tags);
-        if (geometries.vertex) return true;
-        if (geometries.point) return false;
-        return true;
       });
-    };
-    _this.areaKeys = () => {
-      const ignore = {
-        barrier: true,
-        highway: true,
-        footway: true,
-        railway: true,
-        junction: true,
-        type: true
-      };
-      let areaKeys = {};
-      const presets = _this.collection.filter((p2) => !p2.suggestion && !p2.replacement);
-      presets.forEach((p2) => {
-        const keys2 = p2.tags && Object.keys(p2.tags);
-        const key = keys2 && keys2.length && keys2[0];
-        if (!key) return;
-        if (ignore[key]) return;
-        if (p2.geometry.indexOf("area") !== -1) {
-          areaKeys[key] = areaKeys[key] || {};
+      entities.closedWay.forEach(function(way) {
+        function isThisOuter(m2) {
+          return m2.id === way.id && m2.role !== "inner";
         }
-      });
-      presets.forEach((p2) => {
-        let key;
-        for (key in p2.addTags) {
-          const value = p2.addTags[key];
-          if (key in areaKeys && // probably an area...
-          p2.geometry.indexOf("line") !== -1 && // but sometimes a line
-          value !== "*") {
-            areaKeys[key][value] = true;
-          }
+        if (members.some(isThisOuter)) {
+          relation = relation.mergeTags(way.tags);
+          graph = graph.replace(way.update({ tags: {} }));
         }
       });
-      return areaKeys;
-    };
-    _this.lineTags = () => {
-      return _this.collection.filter((lineTags, d2) => {
-        if (d2.suggestion || d2.replacement || d2.searchable === false) return lineTags;
-        const keys2 = d2.tags && Object.keys(d2.tags);
-        const key = keys2 && keys2.length && keys2[0];
-        if (!key) return lineTags;
-        if (d2.geometry.indexOf("line") !== -1) {
-          lineTags[key] = lineTags[key] || [];
-          lineTags[key].push(d2.tags);
-        }
-        return lineTags;
-      }, {});
-    };
-    _this.pointTags = () => {
-      return _this.collection.reduce((pointTags, d2) => {
-        if (d2.suggestion || d2.replacement || d2.searchable === false) return pointTags;
-        const keys2 = d2.tags && Object.keys(d2.tags);
-        const key = keys2 && keys2.length && keys2[0];
-        if (!key) return pointTags;
-        if (d2.geometry.indexOf("point") !== -1) {
-          pointTags[key] = pointTags[key] || {};
-          pointTags[key][d2.tags[key]] = true;
-        }
-        return pointTags;
-      }, {});
-    };
-    _this.vertexTags = () => {
-      return _this.collection.reduce((vertexTags, d2) => {
-        if (d2.suggestion || d2.replacement || d2.searchable === false) return vertexTags;
-        const keys2 = d2.tags && Object.keys(d2.tags);
-        const key = keys2 && keys2.length && keys2[0];
-        if (!key) return vertexTags;
-        if (d2.geometry.indexOf("vertex") !== -1) {
-          vertexTags[key] = vertexTags[key] || {};
-          vertexTags[key][d2.tags[key]] = true;
-        }
-        return vertexTags;
-      }, {});
+      return graph.replace(relation.update({
+        members,
+        tags: utilObjectOmit(relation.tags, ["area"])
+      }));
     };
-    _this.field = (id2) => _fields[id2];
-    _this.universal = () => _universal;
-    _this.defaults = (geometry, n3, startWithRecents, loc, extraPresets) => {
-      let recents = [];
-      if (startWithRecents) {
-        recents = _this.recent().matchGeometry(geometry).collection.slice(0, 4);
-      }
-      let defaults;
-      if (_addablePresetIDs) {
-        defaults = Array.from(_addablePresetIDs).map(function(id2) {
-          var preset = _this.item(id2);
-          if (preset && preset.matchGeometry(geometry)) return preset;
-          return null;
-        }).filter(Boolean);
-      } else {
-        defaults = _defaults2[geometry].collection.concat(_this.fallback(geometry));
+    action.disabled = function(graph) {
+      var entities = groupEntities(graph);
+      if (entities.other.length > 0 || entities.closedWay.length + entities.multipolygon.length < 2) {
+        return "not_eligible";
       }
-      let result = presetCollection(
-        utilArrayUniq(recents.concat(defaults).concat(extraPresets || [])).slice(0, n3 - 1)
-      );
-      if (Array.isArray(loc)) {
-        const validHere = _sharedLocationManager.locationSetsAt(loc);
-        result.collection = result.collection.filter((a2) => !a2.locationSetID || validHere[a2.locationSetID]);
+      if (!entities.multipolygon.every(function(r2) {
+        return r2.isComplete(graph);
+      })) {
+        return "incomplete_relation";
       }
-      return result;
-    };
-    _this.addablePresetIDs = function(val) {
-      if (!arguments.length) return _addablePresetIDs;
-      if (Array.isArray(val)) val = new Set(val);
-      _addablePresetIDs = val;
-      if (_addablePresetIDs) {
-        _this.collection.forEach((p2) => {
-          if (p2.addable) p2.addable(_addablePresetIDs.has(p2.id));
+      if (!entities.multipolygon.length) {
+        var sharedMultipolygons = [];
+        entities.closedWay.forEach(function(way, i3) {
+          if (i3 === 0) {
+            sharedMultipolygons = graph.parentMultipolygons(way);
+          } else {
+            sharedMultipolygons = utilArrayIntersection(sharedMultipolygons, graph.parentMultipolygons(way));
+          }
         });
-      } else {
-        _this.collection.forEach((p2) => {
-          if (p2.addable) p2.addable(true);
+        sharedMultipolygons = sharedMultipolygons.filter(function(relation) {
+          return relation.members.length === entities.closedWay.length;
         });
+        if (sharedMultipolygons.length) {
+          return "not_eligible";
+        }
+      } else if (entities.closedWay.some(function(way) {
+        return utilArrayIntersection(graph.parentMultipolygons(way), entities.multipolygon).length;
+      })) {
+        return "not_eligible";
       }
-      return _this;
-    };
-    _this.recent = () => {
-      return presetCollection(
-        utilArrayUniq(_this.getRecents().map((d2) => d2.preset).filter((d2) => d2.searchable !== false))
-      );
     };
-    function RibbonItem(preset, source) {
-      let item = {};
-      item.preset = preset;
-      item.source = source;
-      item.isFavorite = () => item.source === "favorite";
-      item.isRecent = () => item.source === "recent";
-      item.matches = (preset2) => item.preset.id === preset2.id;
-      item.minified = () => ({ pID: item.preset.id });
-      return item;
-    }
-    function ribbonItemForMinified(d2, source) {
-      if (d2 && d2.pID) {
-        const preset = _this.item(d2.pID);
-        if (!preset) return null;
-        return RibbonItem(preset, source);
+    return action;
+  }
+
+  // modules/actions/merge_remote_changes.js
+  var import_fast_deep_equal = __toESM(require_fast_deep_equal());
+
+  // node_modules/node-diff3/index.mjs
+  function LCS(buffer1, buffer2) {
+    let equivalenceClasses = {};
+    for (let j2 = 0; j2 < buffer2.length; j2++) {
+      const item = buffer2[j2];
+      if (equivalenceClasses[item]) {
+        equivalenceClasses[item].push(j2);
+      } else {
+        equivalenceClasses[item] = [j2];
       }
-      return null;
-    }
-    _this.getGenericRibbonItems = () => {
-      return ["point", "line", "area"].map((id2) => RibbonItem(_this.item(id2), "generic"));
-    };
-    _this.getAddable = () => {
-      if (!_addablePresetIDs) return [];
-      return _addablePresetIDs.map((id2) => {
-        const preset = _this.item(id2);
-        if (preset) return RibbonItem(preset, "addable");
-        return null;
-      }).filter(Boolean);
-    };
-    function setRecents(items) {
-      _recents = items;
-      const minifiedItems = items.map((d2) => d2.minified());
-      corePreferences("preset_recents", JSON.stringify(minifiedItems));
-      dispatch14.call("recentsChange");
     }
-    _this.getRecents = () => {
-      if (!_recents) {
-        _recents = (JSON.parse(corePreferences("preset_recents")) || []).reduce((acc, d2) => {
-          let item = ribbonItemForMinified(d2, "recent");
-          if (item && item.preset.addable()) acc.push(item);
-          return acc;
-        }, []);
-      }
-      return _recents;
-    };
-    _this.addRecent = (preset, besidePreset, after) => {
-      const recents = _this.getRecents();
-      const beforeItem = _this.recentMatching(besidePreset);
-      let toIndex = recents.indexOf(beforeItem);
-      if (after) toIndex += 1;
-      const newItem = RibbonItem(preset, "recent");
-      recents.splice(toIndex, 0, newItem);
-      setRecents(recents);
-    };
-    _this.removeRecent = (preset) => {
-      const item = _this.recentMatching(preset);
-      if (item) {
-        let items = _this.getRecents();
-        items.splice(items.indexOf(item), 1);
-        setRecents(items);
-      }
-    };
-    _this.recentMatching = (preset) => {
-      const items = _this.getRecents();
-      for (let i3 in items) {
-        if (items[i3].matches(preset)) {
-          return items[i3];
+    const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };
+    let candidates = [NULLRESULT];
+    for (let i3 = 0; i3 < buffer1.length; i3++) {
+      const item = buffer1[i3];
+      const buffer2indices = equivalenceClasses[item] || [];
+      let r2 = 0;
+      let c2 = candidates[0];
+      for (let jx = 0; jx < buffer2indices.length; jx++) {
+        const j2 = buffer2indices[jx];
+        let s2;
+        for (s2 = r2; s2 < candidates.length; s2++) {
+          if (candidates[s2].buffer2index < j2 && (s2 === candidates.length - 1 || candidates[s2 + 1].buffer2index > j2)) {
+            break;
+          }
+        }
+        if (s2 < candidates.length) {
+          const newCandidate = { buffer1index: i3, buffer2index: j2, chain: candidates[s2] };
+          if (r2 === candidates.length) {
+            candidates.push(c2);
+          } else {
+            candidates[r2] = c2;
+          }
+          r2 = s2 + 1;
+          c2 = newCandidate;
+          if (r2 === candidates.length) {
+            break;
+          }
         }
       }
-      return null;
-    };
-    _this.moveItem = (items, fromIndex, toIndex) => {
-      if (fromIndex === toIndex || fromIndex < 0 || toIndex < 0 || fromIndex >= items.length || toIndex >= items.length) return null;
-      items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
-      return items;
-    };
-    _this.moveRecent = (item, beforeItem) => {
-      const recents = _this.getRecents();
-      const fromIndex = recents.indexOf(item);
-      const toIndex = recents.indexOf(beforeItem);
-      const items = _this.moveItem(recents, fromIndex, toIndex);
-      if (items) setRecents(items);
-    };
-    _this.setMostRecent = (preset) => {
-      if (preset.searchable === false) return;
-      let items = _this.getRecents();
-      let item = _this.recentMatching(preset);
-      if (item) {
-        items.splice(items.indexOf(item), 1);
-      } else {
-        item = RibbonItem(preset, "recent");
+      candidates[r2] = c2;
+    }
+    return candidates[candidates.length - 1];
+  }
+  function diffIndices(buffer1, buffer2) {
+    const lcs = LCS(buffer1, buffer2);
+    let result = [];
+    let tail1 = buffer1.length;
+    let tail2 = buffer2.length;
+    for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
+      const mismatchLength1 = tail1 - candidate.buffer1index - 1;
+      const mismatchLength2 = tail2 - candidate.buffer2index - 1;
+      tail1 = candidate.buffer1index;
+      tail2 = candidate.buffer2index;
+      if (mismatchLength1 || mismatchLength2) {
+        result.push({
+          buffer1: [tail1 + 1, mismatchLength1],
+          buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),
+          buffer2: [tail2 + 1, mismatchLength2],
+          buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)
+        });
       }
-      while (items.length >= MAXRECENTS) {
-        items.pop();
+    }
+    result.reverse();
+    return result;
+  }
+  function diff3MergeRegions(a2, o2, b2) {
+    let hunks = [];
+    function addHunk(h2, ab) {
+      hunks.push({
+        ab,
+        oStart: h2.buffer1[0],
+        oLength: h2.buffer1[1],
+        // length of o to remove
+        abStart: h2.buffer2[0],
+        abLength: h2.buffer2[1]
+        // length of a/b to insert
+        // abContent: (ab === 'a' ? a : b).slice(h.buffer2[0], h.buffer2[0] + h.buffer2[1])
+      });
+    }
+    diffIndices(o2, a2).forEach((item) => addHunk(item, "a"));
+    diffIndices(o2, b2).forEach((item) => addHunk(item, "b"));
+    hunks.sort((x2, y2) => x2.oStart - y2.oStart);
+    let results = [];
+    let currOffset = 0;
+    function advanceTo(endOffset) {
+      if (endOffset > currOffset) {
+        results.push({
+          stable: true,
+          buffer: "o",
+          bufferStart: currOffset,
+          bufferLength: endOffset - currOffset,
+          bufferContent: o2.slice(currOffset, endOffset)
+        });
+        currOffset = endOffset;
       }
-      items.unshift(item);
-      setRecents(items);
-    };
-    function setFavorites(items) {
-      _favorites = items;
-      const minifiedItems = items.map((d2) => d2.minified());
-      corePreferences("preset_favorites", JSON.stringify(minifiedItems));
-      dispatch14.call("favoritePreset");
     }
-    _this.addFavorite = (preset, besidePreset, after) => {
-      const favorites = _this.getFavorites();
-      const beforeItem = _this.favoriteMatching(besidePreset);
-      let toIndex = favorites.indexOf(beforeItem);
-      if (after) toIndex += 1;
-      const newItem = RibbonItem(preset, "favorite");
-      favorites.splice(toIndex, 0, newItem);
-      setFavorites(favorites);
-    };
-    _this.toggleFavorite = (preset) => {
-      const favs = _this.getFavorites();
-      const favorite = _this.favoriteMatching(preset);
-      if (favorite) {
-        favs.splice(favs.indexOf(favorite), 1);
+    while (hunks.length) {
+      let hunk = hunks.shift();
+      let regionStart = hunk.oStart;
+      let regionEnd = hunk.oStart + hunk.oLength;
+      let regionHunks = [hunk];
+      advanceTo(regionStart);
+      while (hunks.length) {
+        const nextHunk = hunks[0];
+        const nextHunkStart = nextHunk.oStart;
+        if (nextHunkStart > regionEnd) break;
+        regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);
+        regionHunks.push(hunks.shift());
+      }
+      if (regionHunks.length === 1) {
+        if (hunk.abLength > 0) {
+          const buffer = hunk.ab === "a" ? a2 : b2;
+          results.push({
+            stable: true,
+            buffer: hunk.ab,
+            bufferStart: hunk.abStart,
+            bufferLength: hunk.abLength,
+            bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)
+          });
+        }
       } else {
-        if (favs.length === 10) {
-          favs.pop();
+        let bounds = {
+          a: [a2.length, -1, o2.length, -1],
+          b: [b2.length, -1, o2.length, -1]
+        };
+        while (regionHunks.length) {
+          hunk = regionHunks.shift();
+          const oStart = hunk.oStart;
+          const oEnd = oStart + hunk.oLength;
+          const abStart = hunk.abStart;
+          const abEnd = abStart + hunk.abLength;
+          let b3 = bounds[hunk.ab];
+          b3[0] = Math.min(abStart, b3[0]);
+          b3[1] = Math.max(abEnd, b3[1]);
+          b3[2] = Math.min(oStart, b3[2]);
+          b3[3] = Math.max(oEnd, b3[3]);
         }
-        favs.push(RibbonItem(preset, "favorite"));
+        const aStart = bounds.a[0] + (regionStart - bounds.a[2]);
+        const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);
+        const bStart = bounds.b[0] + (regionStart - bounds.b[2]);
+        const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);
+        let result = {
+          stable: false,
+          aStart,
+          aLength: aEnd - aStart,
+          aContent: a2.slice(aStart, aEnd),
+          oStart: regionStart,
+          oLength: regionEnd - regionStart,
+          oContent: o2.slice(regionStart, regionEnd),
+          bStart,
+          bLength: bEnd - bStart,
+          bContent: b2.slice(bStart, bEnd)
+        };
+        results.push(result);
       }
-      setFavorites(favs);
+      currOffset = regionEnd;
+    }
+    advanceTo(o2.length);
+    return results;
+  }
+  function diff3Merge(a2, o2, b2, options2) {
+    let defaults = {
+      excludeFalseConflicts: true,
+      stringSeparator: /\s+/
     };
-    _this.removeFavorite = (preset) => {
-      const item = _this.favoriteMatching(preset);
-      if (item) {
-        const items = _this.getFavorites();
-        items.splice(items.indexOf(item), 1);
-        setFavorites(items);
+    options2 = Object.assign(defaults, options2);
+    if (typeof a2 === "string") a2 = a2.split(options2.stringSeparator);
+    if (typeof o2 === "string") o2 = o2.split(options2.stringSeparator);
+    if (typeof b2 === "string") b2 = b2.split(options2.stringSeparator);
+    let results = [];
+    const regions = diff3MergeRegions(a2, o2, b2);
+    let okBuffer = [];
+    function flushOk() {
+      if (okBuffer.length) {
+        results.push({ ok: okBuffer });
       }
-    };
-    _this.getFavorites = () => {
-      if (!_favorites) {
-        let rawFavorites = JSON.parse(corePreferences("preset_favorites"));
-        if (!rawFavorites) {
-          rawFavorites = [];
-          corePreferences("preset_favorites", JSON.stringify(rawFavorites));
-        }
-        _favorites = rawFavorites.reduce((output, d2) => {
-          const item = ribbonItemForMinified(d2, "favorite");
-          if (item && item.preset.addable()) output.push(item);
-          return output;
-        }, []);
+      okBuffer = [];
+    }
+    function isFalseConflict(a3, b3) {
+      if (a3.length !== b3.length) return false;
+      for (let i3 = 0; i3 < a3.length; i3++) {
+        if (a3[i3] !== b3[i3]) return false;
       }
-      return _favorites;
-    };
-    _this.favoriteMatching = (preset) => {
-      const favs = _this.getFavorites();
-      for (let index in favs) {
-        if (favs[index].matches(preset)) {
-          return favs[index];
+      return true;
+    }
+    regions.forEach((region) => {
+      if (region.stable) {
+        okBuffer.push(...region.bufferContent);
+      } else {
+        if (options2.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {
+          okBuffer.push(...region.aContent);
+        } else {
+          flushOk();
+          results.push({
+            conflict: {
+              a: region.aContent,
+              aIndex: region.aStart,
+              o: region.oContent,
+              oIndex: region.oStart,
+              b: region.bContent,
+              bIndex: region.bStart
+            }
+          });
         }
       }
-      return null;
-    };
-    return utilRebind(_this, dispatch14, "on");
+    });
+    flushOk();
+    return results;
   }
 
-  // modules/util/util.js
-  function utilTagText(entity) {
-    var obj = entity && entity.tags || {};
-    return Object.keys(obj).map(function(k2) {
-      return k2 + "=" + obj[k2];
-    }).join(", ");
-  }
-  function utilTotalExtent(array2, graph) {
-    var extent = geoExtent();
-    var val, entity;
-    for (var i3 = 0; i3 < array2.length; i3++) {
-      val = array2[i3];
-      entity = typeof val === "string" ? graph.hasEntity(val) : val;
-      if (entity) {
-        extent._extend(entity.extent(graph));
-      }
+  // modules/actions/merge_remote_changes.js
+  var import_lodash = __toESM(require_lodash());
+  function actionMergeRemoteChanges(id2, localGraph, remoteGraph, discardTags, formatUser) {
+    discardTags = discardTags || {};
+    var _option = "safe";
+    var _conflicts = [];
+    function user(d2) {
+      return typeof formatUser === "function" ? formatUser(d2) : (0, import_lodash.escape)(d2);
     }
-    return extent;
-  }
-  function utilTagDiff(oldTags, newTags) {
-    var tagDiff = [];
-    var keys2 = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
-    keys2.forEach(function(k2) {
-      var oldVal = oldTags[k2];
-      var newVal = newTags[k2];
-      if ((oldVal || oldVal === "") && (newVal === void 0 || newVal !== oldVal)) {
-        tagDiff.push({
-          type: "-",
-          key: k2,
-          oldVal,
-          newVal,
-          display: "- " + k2 + "=" + oldVal
-        });
+    function mergeLocation(remote, target) {
+      function pointEqual(a2, b2) {
+        var epsilon3 = 1e-6;
+        return Math.abs(a2[0] - b2[0]) < epsilon3 && Math.abs(a2[1] - b2[1]) < epsilon3;
       }
-      if ((newVal || newVal === "") && (oldVal === void 0 || newVal !== oldVal)) {
-        tagDiff.push({
-          type: "+",
-          key: k2,
-          oldVal,
-          newVal,
-          display: "+ " + k2 + "=" + newVal
-        });
+      if (_option === "force_local" || pointEqual(target.loc, remote.loc)) {
+        return target;
       }
-    });
-    return tagDiff;
-  }
-  function utilEntitySelector(ids) {
-    return ids.length ? "." + ids.join(",.") : "nothing";
-  }
-  function utilEntityOrMemberSelector(ids, graph) {
-    var seen = new Set(ids);
-    ids.forEach(collectShallowDescendants);
-    return utilEntitySelector(Array.from(seen));
-    function collectShallowDescendants(id2) {
-      var entity = graph.hasEntity(id2);
-      if (!entity || entity.type !== "relation") return;
-      entity.members.map(function(member) {
-        return member.id;
-      }).forEach(function(id3) {
-        seen.add(id3);
-      });
-    }
-  }
-  function utilEntityOrDeepMemberSelector(ids, graph) {
-    return utilEntitySelector(utilEntityAndDeepMemberIDs(ids, graph));
-  }
-  function utilEntityAndDeepMemberIDs(ids, graph) {
-    var seen = /* @__PURE__ */ new Set();
-    ids.forEach(collectDeepDescendants);
-    return Array.from(seen);
-    function collectDeepDescendants(id2) {
-      if (seen.has(id2)) return;
-      seen.add(id2);
-      var entity = graph.hasEntity(id2);
-      if (!entity || entity.type !== "relation") return;
-      entity.members.map(function(member) {
-        return member.id;
-      }).forEach(collectDeepDescendants);
-    }
-  }
-  function utilDeepMemberSelector(ids, graph, skipMultipolgonMembers) {
-    var idsSet = new Set(ids);
-    var seen = /* @__PURE__ */ new Set();
-    var returners = /* @__PURE__ */ new Set();
-    ids.forEach(collectDeepDescendants);
-    return utilEntitySelector(Array.from(returners));
-    function collectDeepDescendants(id2) {
-      if (seen.has(id2)) return;
-      seen.add(id2);
-      if (!idsSet.has(id2)) {
-        returners.add(id2);
+      if (_option === "force_remote") {
+        return target.update({ loc: remote.loc });
       }
-      var entity = graph.hasEntity(id2);
-      if (!entity || entity.type !== "relation") return;
-      if (skipMultipolgonMembers && entity.isMultipolygon()) return;
-      entity.members.map(function(member) {
-        return member.id;
-      }).forEach(collectDeepDescendants);
+      _conflicts.push(_t.html("merge_remote_changes.conflict.location", { user: { html: user(remote.user) } }));
+      return target;
     }
-  }
-  function utilHighlightEntities(ids, highlighted, context) {
-    context.surface().selectAll(utilEntityOrDeepMemberSelector(ids, context.graph())).classed("highlighted", highlighted);
-  }
-  function utilGetAllNodes(ids, graph) {
-    var seen = /* @__PURE__ */ new Set();
-    var nodes = /* @__PURE__ */ new Set();
-    ids.forEach(collectNodes);
-    return Array.from(nodes);
-    function collectNodes(id2) {
-      if (seen.has(id2)) return;
-      seen.add(id2);
-      var entity = graph.hasEntity(id2);
-      if (!entity) return;
-      if (entity.type === "node") {
-        nodes.add(entity);
-      } else if (entity.type === "way") {
-        entity.nodes.forEach(collectNodes);
-      } else {
-        entity.members.map(function(member) {
-          return member.id;
-        }).forEach(collectNodes);
+    function mergeNodes(base, remote, target) {
+      if (_option === "force_local" || (0, import_fast_deep_equal.default)(target.nodes, remote.nodes)) {
+        return target;
       }
-    }
-  }
-  function utilDisplayName(entity) {
-    var localizedNameKey = "name:" + _mainLocalizer.languageCode().toLowerCase();
-    var name = entity.tags[localizedNameKey] || entity.tags.name || "";
-    if (name) return name;
-    var tags = {
-      direction: entity.tags.direction,
-      from: entity.tags.from,
-      network: entity.tags.cycle_network || entity.tags.network,
-      ref: entity.tags.ref,
-      to: entity.tags.to,
-      via: entity.tags.via
-    };
-    var keyComponents = [];
-    if (tags.network) {
-      keyComponents.push("network");
-    }
-    if (tags.ref) {
-      keyComponents.push("ref");
-    }
-    if (entity.tags.route) {
-      if (tags.direction) {
-        keyComponents.push("direction");
-      } else if (tags.from && tags.to) {
-        keyComponents.push("from");
-        keyComponents.push("to");
-        if (tags.via) {
-          keyComponents.push("via");
+      if (_option === "force_remote") {
+        return target.update({ nodes: remote.nodes });
+      }
+      var ccount = _conflicts.length;
+      var o2 = base.nodes || [];
+      var a2 = target.nodes || [];
+      var b2 = remote.nodes || [];
+      var nodes = [];
+      var hunks = diff3Merge(a2, o2, b2, { excludeFalseConflicts: true });
+      for (var i3 = 0; i3 < hunks.length; i3++) {
+        var hunk = hunks[i3];
+        if (hunk.ok) {
+          nodes.push.apply(nodes, hunk.ok);
+        } else {
+          var c2 = hunk.conflict;
+          if ((0, import_fast_deep_equal.default)(c2.o, c2.a)) {
+            nodes.push.apply(nodes, c2.b);
+          } else if ((0, import_fast_deep_equal.default)(c2.o, c2.b)) {
+            nodes.push.apply(nodes, c2.a);
+          } else {
+            _conflicts.push(_t.html("merge_remote_changes.conflict.nodelist", { user: { html: user(remote.user) } }));
+            break;
+          }
         }
       }
+      return _conflicts.length === ccount ? target.update({ nodes }) : target;
     }
-    if (keyComponents.length) {
-      name = _t("inspector.display_name." + keyComponents.join("_"), tags);
+    function mergeChildren(targetWay, children2, updates, graph) {
+      function isUsed(node2, targetWay2) {
+        var hasInterestingParent = graph.parentWays(node2).some(function(way) {
+          return way.id !== targetWay2.id;
+        });
+        return node2.hasInterestingTags() || hasInterestingParent || graph.parentRelations(node2).length > 0;
+      }
+      var ccount = _conflicts.length;
+      for (var i3 = 0; i3 < children2.length; i3++) {
+        var id3 = children2[i3];
+        var node = graph.hasEntity(id3);
+        if (targetWay.nodes.indexOf(id3) === -1) {
+          if (node && !isUsed(node, targetWay)) {
+            updates.removeIds.push(id3);
+          }
+          continue;
+        }
+        var local = localGraph.hasEntity(id3);
+        var remote = remoteGraph.hasEntity(id3);
+        var target;
+        if (_option === "force_remote" && remote && remote.visible) {
+          updates.replacements.push(remote);
+        } else if (_option === "force_local" && local) {
+          target = osmEntity(local);
+          if (remote) {
+            target = target.update({ version: remote.version });
+          }
+          updates.replacements.push(target);
+        } else if (_option === "safe" && local && remote && local.version !== remote.version) {
+          target = osmEntity(local, { version: remote.version });
+          if (remote.visible) {
+            target = mergeLocation(remote, target);
+          } else {
+            _conflicts.push(_t.html("merge_remote_changes.conflict.deleted", { user: { html: user(remote.user) } }));
+          }
+          if (_conflicts.length !== ccount) break;
+          updates.replacements.push(target);
+        }
+      }
+      return targetWay;
     }
-    return name;
-  }
-  function utilDisplayNameForPath(entity) {
-    var name = utilDisplayName(entity);
-    var isFirefox = utilDetect().browser.toLowerCase().indexOf("firefox") > -1;
-    var isNewChromium = Number(utilDetect().version.split(".")[0]) >= 96;
-    if (!isFirefox && !isNewChromium && name && rtlRegex.test(name)) {
-      name = fixRTLTextForSvg(name);
+    function updateChildren(updates, graph) {
+      for (var i3 = 0; i3 < updates.replacements.length; i3++) {
+        graph = graph.replace(updates.replacements[i3]);
+      }
+      if (updates.removeIds.length) {
+        graph = actionDeleteMultiple(updates.removeIds)(graph);
+      }
+      return graph;
     }
-    return name;
-  }
-  function utilDisplayType(id2) {
-    return {
-      n: _t("inspector.node"),
-      w: _t("inspector.way"),
-      r: _t("inspector.relation")
-    }[id2.charAt(0)];
-  }
-  function utilDisplayLabel(entity, graphOrGeometry, verbose) {
-    var result;
-    var displayName = utilDisplayName(entity);
-    var preset = typeof graphOrGeometry === "string" ? _mainPresetIndex.matchTags(entity.tags, graphOrGeometry) : _mainPresetIndex.match(entity, graphOrGeometry);
-    var presetName = preset && (preset.suggestion ? preset.subtitle() : preset.name());
-    if (verbose) {
-      result = [presetName, displayName].filter(Boolean).join(" ");
-    } else {
-      result = displayName || presetName;
+    function mergeMembers(remote, target) {
+      if (_option === "force_local" || (0, import_fast_deep_equal.default)(target.members, remote.members)) {
+        return target;
+      }
+      if (_option === "force_remote") {
+        return target.update({ members: remote.members });
+      }
+      _conflicts.push(_t.html("merge_remote_changes.conflict.memberlist", { user: { html: user(remote.user) } }));
+      return target;
     }
-    return result || utilDisplayType(entity.id);
-  }
-  function utilEntityRoot(entityType) {
-    return {
-      node: "n",
-      way: "w",
-      relation: "r"
-    }[entityType];
-  }
-  function utilCombinedTags(entityIDs, graph) {
-    var tags = {};
-    var tagCounts = {};
-    var allKeys = /* @__PURE__ */ new Set();
-    var entities = entityIDs.map(function(entityID) {
-      return graph.hasEntity(entityID);
-    }).filter(Boolean);
-    entities.forEach(function(entity) {
-      var keys2 = Object.keys(entity.tags).filter(Boolean);
-      keys2.forEach(function(key2) {
-        allKeys.add(key2);
+    function mergeTags(base, remote, target) {
+      if (_option === "force_local" || (0, import_fast_deep_equal.default)(target.tags, remote.tags)) {
+        return target;
+      }
+      if (_option === "force_remote") {
+        return target.update({ tags: remote.tags });
+      }
+      var ccount = _conflicts.length;
+      var o2 = base.tags || {};
+      var a2 = target.tags || {};
+      var b2 = remote.tags || {};
+      var keys2 = utilArrayUnion(utilArrayUnion(Object.keys(o2), Object.keys(a2)), Object.keys(b2)).filter(function(k3) {
+        return !discardTags[k3];
       });
-    });
-    entities.forEach(function(entity) {
-      allKeys.forEach(function(key2) {
-        var value = entity.tags[key2];
-        if (!tags.hasOwnProperty(key2)) {
-          tags[key2] = value;
-        } else {
-          if (!Array.isArray(tags[key2])) {
-            if (tags[key2] !== value) {
-              tags[key2] = [tags[key2], value];
+      var tags = Object.assign({}, a2);
+      var changed = false;
+      for (var i3 = 0; i3 < keys2.length; i3++) {
+        var k2 = keys2[i3];
+        if (o2[k2] !== b2[k2] && a2[k2] !== b2[k2]) {
+          if (o2[k2] !== a2[k2]) {
+            _conflicts.push(_t.html(
+              "merge_remote_changes.conflict.tags",
+              { tag: k2, local: a2[k2], remote: b2[k2], user: { html: user(remote.user) } }
+            ));
+          } else {
+            if (b2.hasOwnProperty(k2)) {
+              tags[k2] = b2[k2];
+            } else {
+              delete tags[k2];
             }
+            changed = true;
+          }
+        }
+      }
+      return changed && _conflicts.length === ccount ? target.update({ tags }) : target;
+    }
+    var action = function(graph) {
+      var updates = { replacements: [], removeIds: [] };
+      var base = graph.base().entities[id2];
+      var local = localGraph.entity(id2);
+      var remote = remoteGraph.entity(id2);
+      var target = osmEntity(local, { version: remote.version });
+      if (!remote.visible) {
+        if (_option === "force_remote") {
+          return actionDeleteMultiple([id2])(graph);
+        } else if (_option === "force_local") {
+          if (target.type === "way") {
+            target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
+            graph = updateChildren(updates, graph);
+          }
+          return graph.replace(target);
+        } else {
+          _conflicts.push(_t.html("merge_remote_changes.conflict.deleted", { user: { html: user(remote.user) } }));
+          return graph;
+        }
+      }
+      if (target.type === "node") {
+        target = mergeLocation(remote, target);
+      } else if (target.type === "way") {
+        graph.rebase(remoteGraph.childNodes(remote), [graph], false);
+        target = mergeNodes(base, remote, target);
+        target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
+      } else if (target.type === "relation") {
+        target = mergeMembers(remote, target);
+      }
+      target = mergeTags(base, remote, target);
+      if (!_conflicts.length) {
+        graph = updateChildren(updates, graph).replace(target);
+      }
+      return graph;
+    };
+    action.withOption = function(opt) {
+      _option = opt;
+      return action;
+    };
+    action.conflicts = function() {
+      return _conflicts;
+    };
+    return action;
+  }
+
+  // modules/actions/move.js
+  function actionMove(moveIDs, tryDelta, projection2, cache) {
+    var _delta = tryDelta;
+    function setupCache(graph) {
+      function canMove(nodeID) {
+        if (moveIDs.indexOf(nodeID) !== -1) return true;
+        var parents = graph.parentWays(graph.entity(nodeID));
+        if (parents.length < 3) return true;
+        var parentsMoving = parents.every(function(way) {
+          return cache.moving[way.id];
+        });
+        if (!parentsMoving) delete cache.moving[nodeID];
+        return parentsMoving;
+      }
+      function cacheEntities(ids) {
+        for (var i3 = 0; i3 < ids.length; i3++) {
+          var id2 = ids[i3];
+          if (cache.moving[id2]) continue;
+          cache.moving[id2] = true;
+          var entity = graph.hasEntity(id2);
+          if (!entity) continue;
+          if (entity.type === "node") {
+            cache.nodes.push(id2);
+            cache.startLoc[id2] = entity.loc;
+          } else if (entity.type === "way") {
+            cache.ways.push(id2);
+            cacheEntities(entity.nodes);
           } else {
-            if (tags[key2].indexOf(value) === -1) {
-              tags[key2].push(value);
+            cacheEntities(entity.members.map(function(member) {
+              return member.id;
+            }));
+          }
+        }
+      }
+      function cacheIntersections(ids) {
+        function isEndpoint(way2, id3) {
+          return !way2.isClosed() && !!way2.affix(id3);
+        }
+        for (var i3 = 0; i3 < ids.length; i3++) {
+          var id2 = ids[i3];
+          var childNodes = graph.childNodes(graph.entity(id2));
+          for (var j2 = 0; j2 < childNodes.length; j2++) {
+            var node = childNodes[j2];
+            var parents = graph.parentWays(node);
+            if (parents.length !== 2) continue;
+            var moved = graph.entity(id2);
+            var unmoved = null;
+            for (var k2 = 0; k2 < parents.length; k2++) {
+              var way = parents[k2];
+              if (!cache.moving[way.id]) {
+                unmoved = way;
+                break;
+              }
             }
+            if (!unmoved) continue;
+            if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) continue;
+            if (moved.isArea() || unmoved.isArea()) continue;
+            cache.intersections.push({
+              nodeId: node.id,
+              movedId: moved.id,
+              unmovedId: unmoved.id,
+              movedIsEP: isEndpoint(moved, node.id),
+              unmovedIsEP: isEndpoint(unmoved, node.id)
+            });
           }
         }
-        var tagHash = key2 + "=" + value;
-        if (!tagCounts[tagHash]) tagCounts[tagHash] = 0;
-        tagCounts[tagHash] += 1;
-      });
-    });
-    for (var key in tags) {
-      if (!Array.isArray(tags[key])) continue;
-      tags[key] = tags[key].sort(function(val12, val2) {
-        var key2 = key2;
-        var count2 = tagCounts[key2 + "=" + val2];
-        var count1 = tagCounts[key2 + "=" + val12];
-        if (count2 !== count1) {
-          return count2 - count1;
-        }
-        if (val2 && val12) {
-          return val12.localeCompare(val2);
-        }
-        return val12 ? 1 : -1;
-      });
-    }
-    return tags;
-  }
-  function utilStringQs(str) {
-    var i3 = 0;
-    while (i3 < str.length && (str[i3] === "?" || str[i3] === "#")) i3++;
-    str = str.slice(i3);
-    return str.split("&").reduce(function(obj, pair3) {
-      var parts = pair3.split("=");
-      if (parts.length === 2) {
-        obj[parts[0]] = null === parts[1] ? "" : decodeURIComponent(parts[1]);
       }
-      return obj;
-    }, {});
-  }
-  function utilQsString(obj, noencode) {
-    function softEncode(s2) {
-      return encodeURIComponent(s2).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
-    }
-    return Object.keys(obj).sort().map(function(key) {
-      return encodeURIComponent(key) + "=" + (noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
-    }).join("&");
-  }
-  function utilPrefixDOMProperty(property) {
-    var prefixes2 = ["webkit", "ms", "moz", "o"];
-    var i3 = -1;
-    var n3 = prefixes2.length;
-    var s2 = document.body;
-    if (property in s2) return property;
-    property = property.slice(0, 1).toUpperCase() + property.slice(1);
-    while (++i3 < n3) {
-      if (prefixes2[i3] + property in s2) {
-        return prefixes2[i3] + property;
+      if (!cache) {
+        cache = {};
+      }
+      if (!cache.ok) {
+        cache.moving = {};
+        cache.intersections = [];
+        cache.replacedVertex = {};
+        cache.startLoc = {};
+        cache.nodes = [];
+        cache.ways = [];
+        cacheEntities(moveIDs);
+        cacheIntersections(cache.ways);
+        cache.nodes = cache.nodes.filter(canMove);
+        cache.ok = true;
       }
     }
-    return false;
-  }
-  function utilPrefixCSSProperty(property) {
-    var prefixes2 = ["webkit", "ms", "Moz", "O"];
-    var i3 = -1;
-    var n3 = prefixes2.length;
-    var s2 = document.body.style;
-    if (property.toLowerCase() in s2) {
-      return property.toLowerCase();
+    function replaceMovedVertex(nodeId, wayId, graph, delta) {
+      var way = graph.entity(wayId);
+      var moved = graph.entity(nodeId);
+      var movedIndex = way.nodes.indexOf(nodeId);
+      var len, prevIndex, nextIndex;
+      if (way.isClosed()) {
+        len = way.nodes.length - 1;
+        prevIndex = (movedIndex + len - 1) % len;
+        nextIndex = (movedIndex + len + 1) % len;
+      } else {
+        len = way.nodes.length;
+        prevIndex = movedIndex - 1;
+        nextIndex = movedIndex + 1;
+      }
+      var prev = graph.hasEntity(way.nodes[prevIndex]);
+      var next = graph.hasEntity(way.nodes[nextIndex]);
+      if (!prev || !next) return graph;
+      var key = wayId + "_" + nodeId;
+      var orig = cache.replacedVertex[key];
+      if (!orig) {
+        orig = osmNode();
+        cache.replacedVertex[key] = orig;
+        cache.startLoc[orig.id] = cache.startLoc[nodeId];
+      }
+      var start2, end;
+      if (delta) {
+        start2 = projection2(cache.startLoc[nodeId]);
+        end = projection2.invert(geoVecAdd(start2, delta));
+      } else {
+        end = cache.startLoc[nodeId];
+      }
+      orig = orig.move(end);
+      var angle2 = Math.abs(geoAngle(orig, prev, projection2) - geoAngle(orig, next, projection2)) * 180 / Math.PI;
+      if (angle2 > 175 && angle2 < 185) return graph;
+      var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection2);
+      var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection2);
+      var d1 = geoPathLength(p1);
+      var d2 = geoPathLength(p2);
+      var insertAt = d1 <= d2 ? movedIndex : nextIndex;
+      if (way.isClosed() && insertAt === 0) insertAt = len;
+      way = way.addNode(orig.id, insertAt);
+      return graph.replace(orig).replace(way);
     }
-    while (++i3 < n3) {
-      if (prefixes2[i3] + property in s2) {
-        return "-" + prefixes2[i3].toLowerCase() + property.replace(/([A-Z])/g, "-$1").toLowerCase();
+    function removeDuplicateVertices(wayId, graph) {
+      var way = graph.entity(wayId);
+      var epsilon3 = 1e-6;
+      var prev, curr;
+      function isInteresting(node, graph2) {
+        return graph2.parentWays(node).length > 1 || graph2.parentRelations(node).length || node.hasInterestingTags();
+      }
+      for (var i3 = 0; i3 < way.nodes.length; i3++) {
+        curr = graph.entity(way.nodes[i3]);
+        if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon3)) {
+          if (!isInteresting(prev, graph)) {
+            way = way.removeNode(prev.id);
+            graph = graph.replace(way).remove(prev);
+          } else if (!isInteresting(curr, graph)) {
+            way = way.removeNode(curr.id);
+            graph = graph.replace(way).remove(curr);
+          }
+        }
+        prev = curr;
       }
+      return graph;
     }
-    return false;
-  }
-  var transformProperty;
-  function utilSetTransform(el, x2, y2, scale) {
-    var prop = transformProperty = transformProperty || utilPrefixCSSProperty("Transform");
-    var translate = utilDetect().opera ? "translate(" + x2 + "px," + y2 + "px)" : "translate3d(" + x2 + "px," + y2 + "px,0)";
-    return el.style(prop, translate + (scale ? " scale(" + scale + ")" : ""));
-  }
-  function utilEditDistance(a2, b2) {
-    a2 = (0, import_diacritics.remove)(a2.toLowerCase());
-    b2 = (0, import_diacritics.remove)(b2.toLowerCase());
-    if (a2.length === 0) return b2.length;
-    if (b2.length === 0) return a2.length;
-    var matrix = [];
-    var i3, j2;
-    for (i3 = 0; i3 <= b2.length; i3++) {
-      matrix[i3] = [i3];
+    function unZorroIntersection(intersection2, graph) {
+      var vertex = graph.entity(intersection2.nodeId);
+      var way1 = graph.entity(intersection2.movedId);
+      var way2 = graph.entity(intersection2.unmovedId);
+      var isEP1 = intersection2.movedIsEP;
+      var isEP2 = intersection2.unmovedIsEP;
+      if (isEP1 && isEP2) return graph;
+      var nodes1 = graph.childNodes(way1).filter(function(n3) {
+        return n3 !== vertex;
+      });
+      var nodes2 = graph.childNodes(way2).filter(function(n3) {
+        return n3 !== vertex;
+      });
+      if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]);
+      if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]);
+      var edge1 = !isEP1 && geoChooseEdge(nodes1, projection2(vertex.loc), projection2);
+      var edge2 = !isEP2 && geoChooseEdge(nodes2, projection2(vertex.loc), projection2);
+      var loc;
+      if (!isEP1 && !isEP2) {
+        var epsilon3 = 1e-6, maxIter = 10;
+        for (var i3 = 0; i3 < maxIter; i3++) {
+          loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
+          edge1 = geoChooseEdge(nodes1, projection2(loc), projection2);
+          edge2 = geoChooseEdge(nodes2, projection2(loc), projection2);
+          if (Math.abs(edge1.distance - edge2.distance) < epsilon3) break;
+        }
+      } else if (!isEP1) {
+        loc = edge1.loc;
+      } else {
+        loc = edge2.loc;
+      }
+      graph = graph.replace(vertex.move(loc));
+      if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
+        way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
+        graph = graph.replace(way1);
+      }
+      if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
+        way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
+        graph = graph.replace(way2);
+      }
+      return graph;
     }
-    for (j2 = 0; j2 <= a2.length; j2++) {
-      matrix[0][j2] = j2;
+    function cleanupIntersections(graph) {
+      for (var i3 = 0; i3 < cache.intersections.length; i3++) {
+        var obj = cache.intersections[i3];
+        graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
+        graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
+        graph = unZorroIntersection(obj, graph);
+        graph = removeDuplicateVertices(obj.movedId, graph);
+        graph = removeDuplicateVertices(obj.unmovedId, graph);
+      }
+      return graph;
     }
-    for (i3 = 1; i3 <= b2.length; i3++) {
-      for (j2 = 1; j2 <= a2.length; j2++) {
-        if (b2.charAt(i3 - 1) === a2.charAt(j2 - 1)) {
-          matrix[i3][j2] = matrix[i3 - 1][j2 - 1];
-        } else {
-          matrix[i3][j2] = Math.min(
-            matrix[i3 - 1][j2 - 1] + 1,
-            // substitution
-            Math.min(
-              matrix[i3][j2 - 1] + 1,
-              // insertion
-              matrix[i3 - 1][j2] + 1
-            )
-          );
+    function limitDelta(graph) {
+      function moveNode(loc) {
+        return geoVecAdd(projection2(loc), _delta);
+      }
+      for (var i3 = 0; i3 < cache.intersections.length; i3++) {
+        var obj = cache.intersections[i3];
+        if (obj.movedIsEP && obj.unmovedIsEP) continue;
+        if (!obj.movedIsEP) continue;
+        var node = graph.entity(obj.nodeId);
+        var start2 = projection2(node.loc);
+        var end = geoVecAdd(start2, _delta);
+        var movedNodes = graph.childNodes(graph.entity(obj.movedId));
+        var movedPath = movedNodes.map(function(n3) {
+          return moveNode(n3.loc);
+        });
+        var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
+        var unmovedPath = unmovedNodes.map(function(n3) {
+          return projection2(n3.loc);
+        });
+        var hits = geoPathIntersections(movedPath, unmovedPath);
+        for (var j2 = 0; i3 < hits.length; i3++) {
+          if (geoVecEqual(hits[j2], end)) continue;
+          var edge = geoChooseEdge(unmovedNodes, end, projection2);
+          _delta = geoVecSubtract(projection2(edge.loc), start2);
         }
       }
     }
-    return matrix[b2.length][a2.length];
-  }
-  function utilFastMouse(container) {
-    var rect = container.getBoundingClientRect();
-    var rectLeft = rect.left;
-    var rectTop = rect.top;
-    var clientLeft = +container.clientLeft;
-    var clientTop = +container.clientTop;
-    return function(e3) {
-      return [
-        e3.clientX - rectLeft - clientLeft,
-        e3.clientY - rectTop - clientTop
-      ];
+    var action = function(graph) {
+      if (_delta[0] === 0 && _delta[1] === 0) return graph;
+      setupCache(graph);
+      if (cache.intersections.length) {
+        limitDelta(graph);
+      }
+      for (var i3 = 0; i3 < cache.nodes.length; i3++) {
+        var node = graph.entity(cache.nodes[i3]);
+        var start2 = projection2(node.loc);
+        var end = geoVecAdd(start2, _delta);
+        graph = graph.replace(node.move(projection2.invert(end)));
+      }
+      if (cache.intersections.length) {
+        graph = cleanupIntersections(graph);
+      }
+      return graph;
     };
-  }
-  function utilAsyncMap(inputs, func, callback) {
-    var remaining = inputs.length;
-    var results = [];
-    var errors = [];
-    inputs.forEach(function(d2, i3) {
-      func(d2, function done(err, data) {
-        errors[i3] = err;
-        results[i3] = data;
-        remaining--;
-        if (!remaining) callback(errors, results);
-      });
-    });
-  }
-  function utilWrap(index, length2) {
-    if (index < 0) {
-      index += Math.ceil(-index / length2) * length2;
-    }
-    return index % length2;
-  }
-  function utilFunctor(value) {
-    if (typeof value === "function") return value;
-    return function() {
-      return value;
+    action.delta = function() {
+      return _delta;
     };
+    return action;
   }
-  function utilNoAuto(selection2) {
-    var isText = selection2.size() && selection2.node().tagName.toLowerCase() === "textarea";
-    return selection2.attr("autocomplete", "new-password").attr("autocorrect", "off").attr("autocapitalize", "off").attr("spellcheck", isText ? "true" : "false");
-  }
-  function utilHashcode(str) {
-    var hash = 0;
-    if (str.length === 0) {
-      return hash;
-    }
-    for (var i3 = 0; i3 < str.length; i3++) {
-      var char = str.charCodeAt(i3);
-      hash = (hash << 5) - hash + char;
-      hash = hash & hash;
-    }
-    return hash;
-  }
-  function utilSafeClassName(str) {
-    return str.toLowerCase().replace(/[^a-z0-9]+/g, "_");
-  }
-  function utilUniqueDomId(val) {
-    return "ideditor-" + utilSafeClassName(val.toString()) + "-" + (/* @__PURE__ */ new Date()).getTime().toString();
-  }
-  function utilUnicodeCharsCount(str) {
-    return Array.from(str).length;
-  }
-  function utilUnicodeCharsTruncated(str, limit) {
-    return Array.from(str).slice(0, limit).join("");
-  }
-  function toNumericID(id2) {
-    var match = id2.match(/^[cnwr](-?\d+)$/);
-    if (match) {
-      return parseInt(match[1], 10);
-    }
-    return NaN;
-  }
-  function compareNumericIDs(left, right) {
-    if (isNaN(left) && isNaN(right)) return -1;
-    if (isNaN(left)) return 1;
-    if (isNaN(right)) return -1;
-    if (Math.sign(left) !== Math.sign(right)) return -Math.sign(left);
-    if (Math.sign(left) < 0) return Math.sign(right - left);
-    return Math.sign(left - right);
-  }
-  function utilCompareIDs(left, right) {
-    return compareNumericIDs(toNumericID(left), toNumericID(right));
-  }
-  function utilOldestID(ids) {
-    if (ids.length === 0) {
-      return void 0;
-    }
-    var oldestIDIndex = 0;
-    var oldestID = toNumericID(ids[0]);
-    for (var i3 = 1; i3 < ids.length; i3++) {
-      var num = toNumericID(ids[i3]);
-      if (compareNumericIDs(oldestID, num) === 1) {
-        oldestIDIndex = i3;
-        oldestID = num;
-      }
-    }
-    return ids[oldestIDIndex];
+
+  // modules/actions/move_member.js
+  function actionMoveMember(relationId, fromIndex, toIndex) {
+    return function(graph) {
+      return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
+    };
   }
-  function utilCleanOsmString(val, maxChars) {
-    if (val === void 0 || val === null) {
-      val = "";
-    } else {
-      val = val.toString();
-    }
-    val = val.trim();
-    if (val.normalize) val = val.normalize("NFC");
-    return utilUnicodeCharsTruncated(val, maxChars);
+
+  // modules/actions/move_node.js
+  function actionMoveNode(nodeID, toLoc) {
+    var action = function(graph, t2) {
+      if (t2 === null || !isFinite(t2)) t2 = 1;
+      t2 = Math.min(Math.max(+t2, 0), 1);
+      var node = graph.entity(nodeID);
+      return graph.replace(
+        node.move(geoVecInterp(node.loc, toLoc, t2))
+      );
+    };
+    action.transitionable = true;
+    return action;
   }
 
-  // modules/osm/entity.js
-  function osmEntity(attrs) {
-    if (this instanceof osmEntity) return;
-    if (attrs && attrs.type) {
-      return osmEntity[attrs.type].apply(this, arguments);
-    } else if (attrs && attrs.id) {
-      return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
-    }
-    return new osmEntity().initialize(arguments);
+  // modules/actions/noop.js
+  function actionNoop() {
+    return function(graph) {
+      return graph;
+    };
   }
-  osmEntity.id = function(type2) {
-    return osmEntity.id.fromOSM(type2, osmEntity.id.next[type2]--);
-  };
-  osmEntity.id.next = {
-    changeset: -1,
-    node: -1,
-    way: -1,
-    relation: -1
-  };
-  osmEntity.id.fromOSM = function(type2, id2) {
-    return type2[0] + id2;
-  };
-  osmEntity.id.toOSM = function(id2) {
-    var match = id2.match(/^[cnwr](-?\d+)$/);
-    if (match) {
-      return match[1];
-    }
-    return "";
-  };
-  osmEntity.id.type = function(id2) {
-    return { "c": "changeset", "n": "node", "w": "way", "r": "relation" }[id2[0]];
-  };
-  osmEntity.key = function(entity) {
-    return entity.id + "v" + (entity.v || 0);
-  };
-  var _deprecatedTagValuesByKey;
-  osmEntity.deprecatedTagValuesByKey = function(dataDeprecated) {
-    if (!_deprecatedTagValuesByKey) {
-      _deprecatedTagValuesByKey = {};
-      dataDeprecated.forEach(function(d2) {
-        var oldKeys = Object.keys(d2.old);
-        if (oldKeys.length === 1) {
-          var oldKey = oldKeys[0];
-          var oldValue = d2.old[oldKey];
-          if (oldValue !== "*") {
-            if (!_deprecatedTagValuesByKey[oldKey]) {
-              _deprecatedTagValuesByKey[oldKey] = [oldValue];
-            } else {
-              _deprecatedTagValuesByKey[oldKey].push(oldValue);
-            }
+
+  // modules/actions/orthogonalize.js
+  function actionOrthogonalize(wayID, projection2, vertexID, degThresh, ep) {
+    var epsilon3 = ep || 1e-4;
+    var threshold = degThresh || 13;
+    var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
+    var upperThreshold = Math.cos(threshold * Math.PI / 180);
+    var action = function(graph, t2) {
+      if (t2 === null || !isFinite(t2)) t2 = 1;
+      t2 = Math.min(Math.max(+t2, 0), 1);
+      var way = graph.entity(wayID);
+      way = way.removeNode("");
+      if (way.tags.nonsquare) {
+        var tags = Object.assign({}, way.tags);
+        delete tags.nonsquare;
+        way = way.update({ tags });
+      }
+      graph = graph.replace(way);
+      var isClosed = way.isClosed();
+      var nodes = graph.childNodes(way).slice();
+      if (isClosed) nodes.pop();
+      if (vertexID !== void 0) {
+        nodes = nodeSubset(nodes, vertexID, isClosed);
+        if (nodes.length !== 3) return graph;
+      }
+      var nodeCount = {};
+      var points = [];
+      var corner = { i: 0, dotp: 1 };
+      var node, point, loc, score, motions, i3, j2;
+      for (i3 = 0; i3 < nodes.length; i3++) {
+        node = nodes[i3];
+        nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
+        points.push({ id: node.id, coord: projection2(node.loc) });
+      }
+      if (points.length === 3) {
+        for (i3 = 0; i3 < 1e3; i3++) {
+          motions = points.map(calcMotion);
+          points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
+          score = corner.dotp;
+          if (score < epsilon3) {
+            break;
           }
         }
-      });
-    }
-    return _deprecatedTagValuesByKey;
-  };
-  osmEntity.prototype = {
-    tags: {},
-    initialize: function(sources) {
-      for (var i3 = 0; i3 < sources.length; ++i3) {
-        var source = sources[i3];
-        for (var prop in source) {
-          if (Object.prototype.hasOwnProperty.call(source, prop)) {
-            if (source[prop] === void 0) {
-              delete this[prop];
-            } else {
-              this[prop] = source[prop];
-            }
+        node = graph.entity(nodes[corner.i].id);
+        loc = projection2.invert(points[corner.i].coord);
+        graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t2)));
+      } else {
+        var straights = [];
+        var simplified = [];
+        for (i3 = 0; i3 < points.length; i3++) {
+          point = points[i3];
+          var dotp = 0;
+          if (isClosed || i3 > 0 && i3 < points.length - 1) {
+            var a2 = points[(i3 - 1 + points.length) % points.length];
+            var b2 = points[(i3 + 1) % points.length];
+            dotp = Math.abs(geoOrthoNormalizedDotProduct(a2.coord, b2.coord, point.coord));
+          }
+          if (dotp > upperThreshold) {
+            straights.push(point);
+          } else {
+            simplified.push(point);
           }
         }
-      }
-      if (!this.id && this.type) {
-        this.id = osmEntity.id(this.type);
-      }
-      if (!this.hasOwnProperty("visible")) {
-        this.visible = true;
-      }
-      if (debug) {
-        Object.freeze(this);
-        Object.freeze(this.tags);
-        if (this.loc) Object.freeze(this.loc);
-        if (this.nodes) Object.freeze(this.nodes);
-        if (this.members) Object.freeze(this.members);
-      }
-      return this;
-    },
-    copy: function(resolver, copies) {
-      if (copies[this.id]) return copies[this.id];
-      var copy2 = osmEntity(this, { id: void 0, user: void 0, version: void 0 });
-      copies[this.id] = copy2;
-      return copy2;
-    },
-    osmId: function() {
-      return osmEntity.id.toOSM(this.id);
-    },
-    isNew: function() {
-      var osmId = osmEntity.id.toOSM(this.id);
-      return osmId.length === 0 || osmId[0] === "-";
-    },
-    update: function(attrs) {
-      return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
-    },
-    mergeTags: function(tags) {
-      var merged = Object.assign({}, this.tags);
-      var changed = false;
-      for (var k2 in tags) {
-        var t1 = merged[k2];
-        var t2 = tags[k2];
-        if (!t1) {
-          changed = true;
-          merged[k2] = t2;
-        } else if (t1 !== t2) {
-          changed = true;
-          merged[k2] = utilUnicodeCharsTruncated(
-            utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(";"),
-            255
-            // avoid exceeding character limit; see also context.maxCharsForTagValue()
-          );
+        var bestPoints = clonePoints(simplified);
+        var originalPoints = clonePoints(simplified);
+        score = Infinity;
+        for (i3 = 0; i3 < 1e3; i3++) {
+          motions = simplified.map(calcMotion);
+          for (j2 = 0; j2 < motions.length; j2++) {
+            simplified[j2].coord = geoVecAdd(simplified[j2].coord, motions[j2]);
+          }
+          var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon3, threshold);
+          if (newScore < score) {
+            bestPoints = clonePoints(simplified);
+            score = newScore;
+          }
+          if (score < epsilon3) {
+            break;
+          }
         }
-      }
-      return changed ? this.update({ tags: merged }) : this;
-    },
-    intersects: function(extent, resolver) {
-      return this.extent(resolver).intersects(extent);
-    },
-    hasNonGeometryTags: function() {
-      return Object.keys(this.tags).some(function(k2) {
-        return k2 !== "area";
-      });
-    },
-    hasParentRelations: function(resolver) {
-      return resolver.parentRelations(this).length > 0;
-    },
-    hasInterestingTags: function() {
-      return Object.keys(this.tags).some(osmIsInterestingTag);
-    },
-    isHighwayIntersection: function() {
-      return false;
-    },
-    isDegenerate: function() {
-      return true;
-    },
-    deprecatedTags: function(dataDeprecated) {
-      var tags = this.tags;
-      if (Object.keys(tags).length === 0) return [];
-      var deprecated = [];
-      dataDeprecated.forEach(function(d2) {
-        var oldKeys = Object.keys(d2.old);
-        if (d2.replace) {
-          var hasExistingValues = Object.keys(d2.replace).some(function(replaceKey) {
-            if (!tags[replaceKey] || d2.old[replaceKey]) return false;
-            var replaceValue = d2.replace[replaceKey];
-            if (replaceValue === "*") return false;
-            if (replaceValue === tags[replaceKey]) return false;
-            return true;
-          });
-          if (hasExistingValues) return;
+        var bestCoords = bestPoints.map(function(p2) {
+          return p2.coord;
+        });
+        if (isClosed) bestCoords.push(bestCoords[0]);
+        for (i3 = 0; i3 < bestPoints.length; i3++) {
+          point = bestPoints[i3];
+          if (!geoVecEqual(originalPoints[i3].coord, point.coord)) {
+            node = graph.entity(point.id);
+            loc = projection2.invert(point.coord);
+            graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t2)));
+          }
         }
-        var matchesDeprecatedTags = oldKeys.every(function(oldKey) {
-          if (!tags[oldKey]) return false;
-          if (d2.old[oldKey] === "*") return true;
-          if (d2.old[oldKey] === tags[oldKey]) return true;
-          var vals = tags[oldKey].split(";").filter(Boolean);
-          if (vals.length === 0) {
-            return false;
-          } else if (vals.length > 1) {
-            return vals.indexOf(d2.old[oldKey]) !== -1;
+        for (i3 = 0; i3 < straights.length; i3++) {
+          point = straights[i3];
+          if (nodeCount[point.id] > 1) continue;
+          node = graph.entity(point.id);
+          if (t2 === 1 && graph.parentWays(node).length === 1 && graph.parentRelations(node).length === 0 && !node.hasInterestingTags()) {
+            graph = actionDeleteNode(node.id)(graph);
           } else {
-            if (tags[oldKey] === d2.old[oldKey]) {
-              if (d2.replace && d2.old[oldKey] === d2.replace[oldKey]) {
-                var replaceKeys = Object.keys(d2.replace);
-                return !replaceKeys.every(function(replaceKey) {
-                  return tags[replaceKey] === d2.replace[replaceKey];
-                });
-              } else {
-                return true;
-              }
+            var choice = geoVecProject(point.coord, bestCoords);
+            if (choice) {
+              loc = projection2.invert(choice.target);
+              graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t2)));
             }
           }
-          return false;
+        }
+      }
+      return graph;
+      function clonePoints(array2) {
+        return array2.map(function(p2) {
+          return { id: p2.id, coord: [p2.coord[0], p2.coord[1]] };
         });
-        if (matchesDeprecatedTags) {
-          deprecated.push(d2);
+      }
+      function calcMotion(point2, i4, array2) {
+        if (!isClosed && (i4 === 0 || i4 === array2.length - 1)) return [0, 0];
+        if (nodeCount[array2[i4].id] > 1) return [0, 0];
+        var a3 = array2[(i4 - 1 + array2.length) % array2.length].coord;
+        var origin = point2.coord;
+        var b3 = array2[(i4 + 1) % array2.length].coord;
+        var p2 = geoVecSubtract(a3, origin);
+        var q2 = geoVecSubtract(b3, origin);
+        var scale = 2 * Math.min(geoVecLength(p2), geoVecLength(q2));
+        p2 = geoVecNormalize(p2);
+        q2 = geoVecNormalize(q2);
+        var dotp2 = p2[0] * q2[0] + p2[1] * q2[1];
+        var val = Math.abs(dotp2);
+        if (val < lowerThreshold) {
+          corner.i = i4;
+          corner.dotp = val;
+          var vec = geoVecNormalize(geoVecAdd(p2, q2));
+          return geoVecScale(vec, 0.1 * dotp2 * scale);
         }
-      });
-      return deprecated;
-    }
-  };
-
-  // modules/osm/lanes.js
-  function osmLanes(entity) {
-    if (entity.type !== "way") return null;
-    if (!entity.tags.highway) return null;
-    var tags = entity.tags;
-    var isOneWay = entity.isOneWay();
-    var laneCount = getLaneCount(tags, isOneWay);
-    var maxspeed = parseMaxspeed(tags);
-    var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
-    var forward = laneDirections.forward;
-    var backward = laneDirections.backward;
-    var bothways = laneDirections.bothways;
-    var turnLanes = {};
-    turnLanes.unspecified = parseTurnLanes(tags["turn:lanes"]);
-    turnLanes.forward = parseTurnLanes(tags["turn:lanes:forward"]);
-    turnLanes.backward = parseTurnLanes(tags["turn:lanes:backward"]);
-    var maxspeedLanes = {};
-    maxspeedLanes.unspecified = parseMaxspeedLanes(tags["maxspeed:lanes"], maxspeed);
-    maxspeedLanes.forward = parseMaxspeedLanes(tags["maxspeed:lanes:forward"], maxspeed);
-    maxspeedLanes.backward = parseMaxspeedLanes(tags["maxspeed:lanes:backward"], maxspeed);
-    var psvLanes = {};
-    psvLanes.unspecified = parseMiscLanes(tags["psv:lanes"]);
-    psvLanes.forward = parseMiscLanes(tags["psv:lanes:forward"]);
-    psvLanes.backward = parseMiscLanes(tags["psv:lanes:backward"]);
-    var busLanes = {};
-    busLanes.unspecified = parseMiscLanes(tags["bus:lanes"]);
-    busLanes.forward = parseMiscLanes(tags["bus:lanes:forward"]);
-    busLanes.backward = parseMiscLanes(tags["bus:lanes:backward"]);
-    var taxiLanes = {};
-    taxiLanes.unspecified = parseMiscLanes(tags["taxi:lanes"]);
-    taxiLanes.forward = parseMiscLanes(tags["taxi:lanes:forward"]);
-    taxiLanes.backward = parseMiscLanes(tags["taxi:lanes:backward"]);
-    var hovLanes = {};
-    hovLanes.unspecified = parseMiscLanes(tags["hov:lanes"]);
-    hovLanes.forward = parseMiscLanes(tags["hov:lanes:forward"]);
-    hovLanes.backward = parseMiscLanes(tags["hov:lanes:backward"]);
-    var hgvLanes = {};
-    hgvLanes.unspecified = parseMiscLanes(tags["hgv:lanes"]);
-    hgvLanes.forward = parseMiscLanes(tags["hgv:lanes:forward"]);
-    hgvLanes.backward = parseMiscLanes(tags["hgv:lanes:backward"]);
-    var bicyclewayLanes = {};
-    bicyclewayLanes.unspecified = parseBicycleWay(tags["bicycleway:lanes"]);
-    bicyclewayLanes.forward = parseBicycleWay(tags["bicycleway:lanes:forward"]);
-    bicyclewayLanes.backward = parseBicycleWay(tags["bicycleway:lanes:backward"]);
-    var lanesObj = {
-      forward: [],
-      backward: [],
-      unspecified: []
-    };
-    mapToLanesObj(lanesObj, turnLanes, "turnLane");
-    mapToLanesObj(lanesObj, maxspeedLanes, "maxspeed");
-    mapToLanesObj(lanesObj, psvLanes, "psv");
-    mapToLanesObj(lanesObj, busLanes, "bus");
-    mapToLanesObj(lanesObj, taxiLanes, "taxi");
-    mapToLanesObj(lanesObj, hovLanes, "hov");
-    mapToLanesObj(lanesObj, hgvLanes, "hgv");
-    mapToLanesObj(lanesObj, bicyclewayLanes, "bicycleway");
-    return {
-      metadata: {
-        count: laneCount,
-        oneway: isOneWay,
-        forward,
-        backward,
-        bothways,
-        turnLanes,
-        maxspeed,
-        maxspeedLanes,
-        psvLanes,
-        busLanes,
-        taxiLanes,
-        hovLanes,
-        hgvLanes,
-        bicyclewayLanes
-      },
-      lanes: lanesObj
+        return [0, 0];
+      }
     };
-  }
-  function getLaneCount(tags, isOneWay) {
-    var count;
-    if (tags.lanes) {
-      count = parseInt(tags.lanes, 10);
-      if (count > 0) {
-        return count;
+    function nodeSubset(nodes, vertexID2, isClosed) {
+      var first = isClosed ? 0 : 1;
+      var last = isClosed ? nodes.length : nodes.length - 1;
+      for (var i3 = first; i3 < last; i3++) {
+        if (nodes[i3].id === vertexID2) {
+          return [
+            nodes[(i3 - 1 + nodes.length) % nodes.length],
+            nodes[i3],
+            nodes[(i3 + 1) % nodes.length]
+          ];
+        }
       }
+      return [];
     }
-    switch (tags.highway) {
-      case "trunk":
-      case "motorway":
-        count = isOneWay ? 2 : 4;
-        break;
-      default:
-        count = isOneWay ? 1 : 2;
-        break;
-    }
-    return count;
-  }
-  function parseMaxspeed(tags) {
-    var maxspeed = tags.maxspeed;
-    if (!maxspeed) return;
-    var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
-    if (!maxspeedRegex.test(maxspeed)) return;
-    return parseInt(maxspeed, 10);
-  }
-  function parseLaneDirections(tags, isOneWay, laneCount) {
-    var forward = parseInt(tags["lanes:forward"], 10);
-    var backward = parseInt(tags["lanes:backward"], 10);
-    var bothways = parseInt(tags["lanes:both_ways"], 10) > 0 ? 1 : 0;
-    if (parseInt(tags.oneway, 10) === -1) {
-      forward = 0;
-      bothways = 0;
-      backward = laneCount;
-    } else if (isOneWay) {
-      forward = laneCount;
-      bothways = 0;
-      backward = 0;
-    } else if (isNaN(forward) && isNaN(backward)) {
-      backward = Math.floor((laneCount - bothways) / 2);
-      forward = laneCount - bothways - backward;
-    } else if (isNaN(forward)) {
-      if (backward > laneCount - bothways) {
-        backward = laneCount - bothways;
+    action.disabled = function(graph) {
+      var way = graph.entity(wayID);
+      way = way.removeNode("");
+      graph = graph.replace(way);
+      var isClosed = way.isClosed();
+      var nodes = graph.childNodes(way).slice();
+      if (isClosed) nodes.pop();
+      var allowStraightAngles = false;
+      if (vertexID !== void 0) {
+        allowStraightAngles = true;
+        nodes = nodeSubset(nodes, vertexID, isClosed);
+        if (nodes.length !== 3) return "end_vertex";
       }
-      forward = laneCount - bothways - backward;
-    } else if (isNaN(backward)) {
-      if (forward > laneCount - bothways) {
-        forward = laneCount - bothways;
+      var coords = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon3, threshold, allowStraightAngles);
+      if (score === null) {
+        return "not_squarish";
+      } else if (score === 0) {
+        return "square_enough";
+      } else {
+        return false;
       }
-      backward = laneCount - bothways - forward;
-    }
-    return {
-      forward,
-      backward,
-      bothways
     };
+    action.transitionable = true;
+    return action;
   }
-  function parseTurnLanes(tag2) {
-    if (!tag2) return;
-    var validValues = [
-      "left",
-      "slight_left",
-      "sharp_left",
-      "through",
-      "right",
-      "slight_right",
-      "sharp_right",
-      "reverse",
-      "merge_to_left",
-      "merge_to_right",
-      "none"
-    ];
-    return tag2.split("|").map(function(s2) {
-      if (s2 === "") s2 = "none";
-      return s2.split(";").map(function(d2) {
-        return validValues.indexOf(d2) === -1 ? "unknown" : d2;
+
+  // modules/actions/restrict_turn.js
+  function actionRestrictTurn(turn, restrictionType, restrictionID) {
+    return function(graph) {
+      var fromWay = graph.entity(turn.from.way);
+      var toWay = graph.entity(turn.to.way);
+      var viaNode = turn.via.node && graph.entity(turn.via.node);
+      var viaWays = turn.via.ways && turn.via.ways.map(function(id2) {
+        return graph.entity(id2);
       });
-    });
-  }
-  function parseMaxspeedLanes(tag2, maxspeed) {
-    if (!tag2) return;
-    return tag2.split("|").map(function(s2) {
-      if (s2 === "none") return s2;
-      var m2 = parseInt(s2, 10);
-      if (s2 === "" || m2 === maxspeed) return null;
-      return isNaN(m2) ? "unknown" : m2;
-    });
+      var members = [];
+      members.push({ id: fromWay.id, type: "way", role: "from" });
+      if (viaNode) {
+        members.push({ id: viaNode.id, type: "node", role: "via" });
+      } else if (viaWays) {
+        viaWays.forEach(function(viaWay) {
+          members.push({ id: viaWay.id, type: "way", role: "via" });
+        });
+      }
+      members.push({ id: toWay.id, type: "way", role: "to" });
+      return graph.replace(osmRelation({
+        id: restrictionID,
+        tags: {
+          type: "restriction",
+          restriction: restrictionType
+        },
+        members
+      }));
+    };
   }
-  function parseMiscLanes(tag2) {
-    if (!tag2) return;
-    var validValues = [
-      "yes",
-      "no",
-      "designated"
-    ];
-    return tag2.split("|").map(function(s2) {
-      if (s2 === "") s2 = "no";
-      return validValues.indexOf(s2) === -1 ? "unknown" : s2;
-    });
+
+  // modules/actions/revert.js
+  function actionRevert(id2) {
+    var action = function(graph) {
+      var entity = graph.hasEntity(id2), base = graph.base().entities[id2];
+      if (entity && !base) {
+        if (entity.type === "node") {
+          graph.parentWays(entity).forEach(function(parent) {
+            parent = parent.removeNode(id2);
+            graph = graph.replace(parent);
+            if (parent.isDegenerate()) {
+              graph = actionDeleteWay(parent.id)(graph);
+            }
+          });
+        }
+        graph.parentRelations(entity).forEach(function(parent) {
+          parent = parent.removeMembersWithID(id2);
+          graph = graph.replace(parent);
+          if (parent.isDegenerate()) {
+            graph = actionDeleteRelation(parent.id)(graph);
+          }
+        });
+      }
+      return graph.revert(id2);
+    };
+    return action;
   }
-  function parseBicycleWay(tag2) {
-    if (!tag2) return;
-    var validValues = [
-      "yes",
-      "no",
-      "designated",
-      "lane"
-    ];
-    return tag2.split("|").map(function(s2) {
-      if (s2 === "") s2 = "no";
-      return validValues.indexOf(s2) === -1 ? "unknown" : s2;
-    });
+
+  // modules/actions/rotate.js
+  function actionRotate(rotateIds, pivot, angle2, projection2) {
+    var action = function(graph) {
+      return graph.update(function(graph2) {
+        utilGetAllNodes(rotateIds, graph2).forEach(function(node) {
+          var point = geoRotate([projection2(node.loc)], angle2, pivot)[0];
+          graph2 = graph2.replace(node.move(projection2.invert(point)));
+        });
+      });
+    };
+    return action;
   }
-  function mapToLanesObj(lanesObj, data, key) {
-    if (data.forward) {
-      data.forward.forEach(function(l2, i3) {
-        if (!lanesObj.forward[i3]) lanesObj.forward[i3] = {};
-        lanesObj.forward[i3][key] = l2;
+
+  // modules/actions/scale.js
+  function actionScale(ids, pivotLoc, scaleFactor, projection2) {
+    return function(graph) {
+      return graph.update(function(graph2) {
+        let point, radial;
+        utilGetAllNodes(ids, graph2).forEach(function(node) {
+          point = projection2(node.loc);
+          radial = [
+            point[0] - pivotLoc[0],
+            point[1] - pivotLoc[1]
+          ];
+          point = [
+            pivotLoc[0] + scaleFactor * radial[0],
+            pivotLoc[1] + scaleFactor * radial[1]
+          ];
+          graph2 = graph2.replace(node.move(projection2.invert(point)));
+        });
       });
+    };
+  }
+
+  // modules/actions/straighten_nodes.js
+  function actionStraightenNodes(nodeIDs, projection2) {
+    function positionAlongWay(a2, o2, b2) {
+      return geoVecDot(a2, b2, o2) / geoVecDot(b2, b2, o2);
+    }
+    function getEndpoints(points) {
+      var ssr = geoGetSmallestSurroundingRectangle(points);
+      var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2];
+      var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2];
+      var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2];
+      var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2];
+      var isLong = geoVecLength(p1, q1) > geoVecLength(p2, q2);
+      if (isLong) {
+        return [p1, q1];
+      }
+      return [p2, q2];
     }
-    if (data.backward) {
-      data.backward.forEach(function(l2, i3) {
-        if (!lanesObj.backward[i3]) lanesObj.backward[i3] = {};
-        lanesObj.backward[i3][key] = l2;
+    var action = function(graph, t2) {
+      if (t2 === null || !isFinite(t2)) t2 = 1;
+      t2 = Math.min(Math.max(+t2, 0), 1);
+      var nodes = nodeIDs.map(function(id2) {
+        return graph.entity(id2);
       });
-    }
-    if (data.unspecified) {
-      data.unspecified.forEach(function(l2, i3) {
-        if (!lanesObj.unspecified[i3]) lanesObj.unspecified[i3] = {};
-        lanesObj.unspecified[i3][key] = l2;
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
       });
-    }
+      var endpoints = getEndpoints(points);
+      var startPoint = endpoints[0];
+      var endPoint = endpoints[1];
+      for (var i3 = 0; i3 < points.length; i3++) {
+        var node = nodes[i3];
+        var point = points[i3];
+        var u2 = positionAlongWay(point, startPoint, endPoint);
+        var point2 = geoVecInterp(startPoint, endPoint, u2);
+        var loc2 = projection2.invert(point2);
+        graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t2)));
+      }
+      return graph;
+    };
+    action.disabled = function(graph) {
+      var nodes = nodeIDs.map(function(id2) {
+        return graph.entity(id2);
+      });
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var endpoints = getEndpoints(points);
+      var startPoint = endpoints[0];
+      var endPoint = endpoints[1];
+      var maxDistance = 0;
+      for (var i3 = 0; i3 < points.length; i3++) {
+        var point = points[i3];
+        var u2 = positionAlongWay(point, startPoint, endPoint);
+        var p2 = geoVecInterp(startPoint, endPoint, u2);
+        var dist = geoVecLength(p2, point);
+        if (!isNaN(dist) && dist > maxDistance) {
+          maxDistance = dist;
+        }
+      }
+      if (maxDistance < 1e-4) {
+        return "straight_enough";
+      }
+    };
+    action.transitionable = true;
+    return action;
   }
 
-  // modules/osm/way.js
-  function osmWay() {
-    if (!(this instanceof osmWay)) {
-      return new osmWay().initialize(arguments);
-    } else if (arguments.length) {
-      this.initialize(arguments);
+  // modules/actions/straighten_way.js
+  function actionStraightenWay(selectedIDs, projection2) {
+    function positionAlongWay(a2, o2, b2) {
+      return geoVecDot(a2, b2, o2) / geoVecDot(b2, b2, o2);
     }
-  }
-  osmEntity.way = osmWay;
-  osmWay.prototype = Object.create(osmEntity.prototype);
-  Object.assign(osmWay.prototype, {
-    type: "way",
-    nodes: [],
-    copy: function(resolver, copies) {
-      if (copies[this.id]) return copies[this.id];
-      var copy2 = osmEntity.prototype.copy.call(this, resolver, copies);
-      var nodes = this.nodes.map(function(id2) {
-        return resolver.entity(id2).copy(resolver, copies).id;
+    function allNodes(graph) {
+      var nodes = [];
+      var startNodes = [];
+      var endNodes = [];
+      var remainingWays = [];
+      var selectedWays = selectedIDs.filter(function(w2) {
+        return graph.entity(w2).type === "way";
       });
-      copy2 = copy2.update({ nodes });
-      copies[this.id] = copy2;
-      return copy2;
-    },
-    extent: function(resolver) {
-      return resolver.transient(this, "extent", function() {
-        var extent = geoExtent();
-        for (var i3 = 0; i3 < this.nodes.length; i3++) {
-          var node = resolver.hasEntity(this.nodes[i3]);
-          if (node) {
-            extent._extend(node.extent());
-          }
-        }
-        return extent;
+      var selectedNodes = selectedIDs.filter(function(n3) {
+        return graph.entity(n3).type === "node";
       });
-    },
-    first: function() {
-      return this.nodes[0];
-    },
-    last: function() {
-      return this.nodes[this.nodes.length - 1];
-    },
-    contains: function(node) {
-      return this.nodes.indexOf(node) >= 0;
-    },
-    affix: function(node) {
-      if (this.nodes[0] === node) return "prefix";
-      if (this.nodes[this.nodes.length - 1] === node) return "suffix";
-    },
-    layer: function() {
-      if (isFinite(this.tags.layer)) {
-        return Math.max(-10, Math.min(+this.tags.layer, 10));
+      for (var i3 = 0; i3 < selectedWays.length; i3++) {
+        var way = graph.entity(selectedWays[i3]);
+        nodes = way.nodes.slice(0);
+        remainingWays.push(nodes);
+        startNodes.push(nodes[0]);
+        endNodes.push(nodes[nodes.length - 1]);
       }
-      if (this.tags.covered === "yes") return -1;
-      if (this.tags.location === "overground") return 1;
-      if (this.tags.location === "underground") return -1;
-      if (this.tags.location === "underwater") return -10;
-      if (this.tags.power === "line") return 10;
-      if (this.tags.power === "minor_line") return 10;
-      if (this.tags.aerialway) return 10;
-      if (this.tags.bridge) return 1;
-      if (this.tags.cutting) return -1;
-      if (this.tags.tunnel) return -1;
-      if (this.tags.waterway) return -1;
-      if (this.tags.man_made === "pipeline") return -10;
-      if (this.tags.boundary) return -10;
-      return 0;
-    },
-    // the approximate width of the line based on its tags except its `width` tag
-    impliedLineWidthMeters: function() {
-      var averageWidths = {
-        highway: {
-          // width is for single lane
-          motorway: 5,
-          motorway_link: 5,
-          trunk: 4.5,
-          trunk_link: 4.5,
-          primary: 4,
-          secondary: 4,
-          tertiary: 4,
-          primary_link: 4,
-          secondary_link: 4,
-          tertiary_link: 4,
-          unclassified: 4,
-          road: 4,
-          living_street: 4,
-          bus_guideway: 4,
-          busway: 4,
-          pedestrian: 4,
-          residential: 3.5,
-          service: 3.5,
-          track: 3,
-          cycleway: 2.5,
-          bridleway: 2,
-          corridor: 2,
-          steps: 2,
-          path: 1.5,
-          footway: 1.5,
-          ladder: 0.5
-        },
-        railway: {
-          // width includes ties and rail bed, not just track gauge
-          rail: 2.5,
-          light_rail: 2.5,
-          tram: 2.5,
-          subway: 2.5,
-          monorail: 2.5,
-          funicular: 2.5,
-          disused: 2.5,
-          preserved: 2.5,
-          miniature: 1.5,
-          narrow_gauge: 1.5
-        },
-        waterway: {
-          river: 50,
-          canal: 25,
-          stream: 5,
-          tidal_channel: 5,
-          fish_pass: 2.5,
-          drain: 2.5,
-          ditch: 1.5
-        }
+      startNodes = startNodes.filter(function(n3) {
+        return startNodes.indexOf(n3) === startNodes.lastIndexOf(n3);
+      });
+      endNodes = endNodes.filter(function(n3) {
+        return endNodes.indexOf(n3) === endNodes.lastIndexOf(n3);
+      });
+      var currNode = utilArrayDifference(startNodes, endNodes).concat(utilArrayDifference(endNodes, startNodes))[0];
+      var nextWay = [];
+      nodes = [];
+      var getNextWay = function(currNode2, remainingWays2) {
+        return remainingWays2.filter(function(way2) {
+          return way2[0] === currNode2 || way2[way2.length - 1] === currNode2;
+        })[0];
       };
-      for (var key in averageWidths) {
-        if (this.tags[key] && averageWidths[key][this.tags[key]]) {
-          var width = averageWidths[key][this.tags[key]];
-          if (key === "highway") {
-            var laneCount = this.tags.lanes && parseInt(this.tags.lanes, 10);
-            if (!laneCount) laneCount = this.isOneWay() ? 1 : 2;
-            return width * laneCount;
-          }
-          return width;
+      while (remainingWays.length) {
+        nextWay = getNextWay(currNode, remainingWays);
+        remainingWays = utilArrayDifference(remainingWays, [nextWay]);
+        if (nextWay[0] !== currNode) {
+          nextWay.reverse();
         }
+        nodes = nodes.concat(nextWay);
+        currNode = nodes[nodes.length - 1];
       }
-      return null;
-    },
-    isOneWay: function() {
-      var values = {
-        "yes": true,
-        "1": true,
-        "-1": true,
-        "reversible": true,
-        "alternating": true,
-        "no": false,
-        "0": false
-      };
-      if (values[this.tags.oneway] !== void 0) {
-        return values[this.tags.oneway];
-      }
-      for (var key in this.tags) {
-        if (key in osmOneWayTags && this.tags[key] in osmOneWayTags[key]) {
-          return true;
-        }
+      if (selectedNodes.length === 2) {
+        var startNodeIdx = nodes.indexOf(selectedNodes[0]);
+        var endNodeIdx = nodes.indexOf(selectedNodes[1]);
+        var sortedStartEnd = [startNodeIdx, endNodeIdx];
+        sortedStartEnd.sort(function(a2, b2) {
+          return a2 - b2;
+        });
+        nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1] + 1);
       }
-      return false;
-    },
-    // Some identifier for tag that implies that this way is "sided",
-    // i.e. the right side is the 'inside' (e.g. the right side of a
-    // natural=cliff is lower).
-    sidednessIdentifier: function() {
-      for (const realKey in this.tags) {
-        const value = this.tags[realKey];
-        const key = osmRemoveLifecyclePrefix(realKey);
-        if (key in osmRightSideIsInsideTags && value in osmRightSideIsInsideTags[key]) {
-          if (osmRightSideIsInsideTags[key][value] === true) {
-            return key;
-          } else {
-            return osmRightSideIsInsideTags[key][value];
+      return nodes.map(function(n3) {
+        return graph.entity(n3);
+      });
+    }
+    function shouldKeepNode(node, graph) {
+      return graph.parentWays(node).length > 1 || graph.parentRelations(node).length || node.hasInterestingTags();
+    }
+    var action = function(graph, t2) {
+      if (t2 === null || !isFinite(t2)) t2 = 1;
+      t2 = Math.min(Math.max(+t2, 0), 1);
+      var nodes = allNodes(graph);
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var startPoint = points[0];
+      var endPoint = points[points.length - 1];
+      var toDelete = [];
+      var i3;
+      for (i3 = 1; i3 < points.length - 1; i3++) {
+        var node = nodes[i3];
+        var point = points[i3];
+        if (t2 < 1 || shouldKeepNode(node, graph)) {
+          var u2 = positionAlongWay(point, startPoint, endPoint);
+          var p2 = geoVecInterp(startPoint, endPoint, u2);
+          var loc2 = projection2.invert(p2);
+          graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t2)));
+        } else {
+          if (toDelete.indexOf(node) === -1) {
+            toDelete.push(node);
           }
         }
       }
-      return null;
-    },
-    isSided: function() {
-      if (this.tags.two_sided === "yes") {
-        return false;
+      for (i3 = 0; i3 < toDelete.length; i3++) {
+        graph = actionDeleteNode(toDelete[i3].id)(graph);
       }
-      return this.sidednessIdentifier() !== null;
-    },
-    lanes: function() {
-      return osmLanes(this);
-    },
-    isClosed: function() {
-      return this.nodes.length > 1 && this.first() === this.last();
-    },
-    isConvex: function(resolver) {
-      if (!this.isClosed() || this.isDegenerate()) return null;
-      var nodes = utilArrayUniq(resolver.childNodes(this));
-      var coords = nodes.map(function(n3) {
-        return n3.loc;
+      return graph;
+    };
+    action.disabled = function(graph) {
+      var nodes = allNodes(graph);
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
       });
-      var curr = 0;
-      var prev = 0;
-      for (var i3 = 0; i3 < coords.length; i3++) {
-        var o2 = coords[(i3 + 1) % coords.length];
-        var a2 = coords[i3];
-        var b2 = coords[(i3 + 2) % coords.length];
-        var res = geoVecCross(a2, b2, o2);
-        curr = res > 0 ? 1 : res < 0 ? -1 : 0;
-        if (curr === 0) {
-          continue;
-        } else if (prev && curr !== prev) {
-          return false;
-        }
-        prev = curr;
+      var startPoint = points[0];
+      var endPoint = points[points.length - 1];
+      var threshold = 0.2 * geoVecLength(startPoint, endPoint);
+      var i3;
+      if (threshold === 0) {
+        return "too_bendy";
       }
-      return true;
-    },
-    // returns an object with the tag that implies this is an area, if any
-    tagSuggestingArea: function() {
-      return osmTagSuggestingArea(this.tags);
-    },
-    isArea: function() {
-      if (this.tags.area === "yes") return true;
-      if (!this.isClosed() || this.tags.area === "no") return false;
-      return this.tagSuggestingArea() !== null;
-    },
-    isDegenerate: function() {
-      return new Set(this.nodes).size < (this.isArea() ? 3 : 2);
-    },
-    areAdjacent: function(n1, n22) {
-      for (var i3 = 0; i3 < this.nodes.length; i3++) {
-        if (this.nodes[i3] === n1) {
-          if (this.nodes[i3 - 1] === n22) return true;
-          if (this.nodes[i3 + 1] === n22) return true;
+      var maxDistance = 0;
+      for (i3 = 1; i3 < points.length - 1; i3++) {
+        var point = points[i3];
+        var u2 = positionAlongWay(point, startPoint, endPoint);
+        var p2 = geoVecInterp(startPoint, endPoint, u2);
+        var dist = geoVecLength(p2, point);
+        if (isNaN(dist) || dist > threshold) {
+          return "too_bendy";
+        } else if (dist > maxDistance) {
+          maxDistance = dist;
         }
       }
-      return false;
-    },
-    geometry: function(graph) {
-      return graph.transient(this, "geometry", function() {
-        return this.isArea() ? "area" : "line";
+      var keepingAllNodes = nodes.every(function(node, i4) {
+        return i4 === 0 || i4 === nodes.length - 1 || shouldKeepNode(node, graph);
       });
-    },
-    // returns an array of objects representing the segments between the nodes in this way
-    segments: function(graph) {
-      function segmentExtent(graph2) {
-        var n1 = graph2.hasEntity(this.nodes[0]);
-        var n22 = graph2.hasEntity(this.nodes[1]);
-        return n1 && n22 && geoExtent([
-          [
-            Math.min(n1.loc[0], n22.loc[0]),
-            Math.min(n1.loc[1], n22.loc[1])
-          ],
-          [
-            Math.max(n1.loc[0], n22.loc[0]),
-            Math.max(n1.loc[1], n22.loc[1])
-          ]
-        ]);
+      if (maxDistance < 1e-4 && // Allow straightening even if already straight in order to remove extraneous nodes
+      keepingAllNodes) {
+        return "straight_enough";
       }
-      return graph.transient(this, "segments", function() {
-        var segments = [];
-        for (var i3 = 0; i3 < this.nodes.length - 1; i3++) {
-          segments.push({
-            id: this.id + "-" + i3,
-            wayId: this.id,
-            index: i3,
-            nodes: [this.nodes[i3], this.nodes[i3 + 1]],
-            extent: segmentExtent
-          });
+    };
+    action.transitionable = true;
+    return action;
+  }
+
+  // modules/actions/unrestrict_turn.js
+  function actionUnrestrictTurn(turn) {
+    return function(graph) {
+      return actionDeleteRelation(turn.restrictionID)(graph);
+    };
+  }
+
+  // modules/actions/reflect.js
+  function actionReflect(reflectIds, projection2) {
+    var _useLongAxis = true;
+    var action = function(graph, t2) {
+      if (t2 === null || !isFinite(t2)) t2 = 1;
+      t2 = Math.min(Math.max(+t2, 0), 1);
+      var nodes = utilGetAllNodes(reflectIds, graph);
+      var points = nodes.map(function(n3) {
+        return projection2(n3.loc);
+      });
+      var ssr = geoGetSmallestSurroundingRectangle(points);
+      var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2];
+      var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2];
+      var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2];
+      var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2];
+      var p3, q3;
+      var isLong = geoVecLength(p1, q1) > geoVecLength(p2, q2);
+      if (_useLongAxis && isLong || !_useLongAxis && !isLong) {
+        p3 = p1;
+        q3 = q1;
+      } else {
+        p3 = p2;
+        q3 = q2;
+      }
+      var dx = q3[0] - p3[0];
+      var dy = q3[1] - p3[1];
+      var a2 = (dx * dx - dy * dy) / (dx * dx + dy * dy);
+      var b2 = 2 * dx * dy / (dx * dx + dy * dy);
+      for (var i3 = 0; i3 < nodes.length; i3++) {
+        var node = nodes[i3];
+        var c2 = projection2(node.loc);
+        var c22 = [
+          a2 * (c2[0] - p3[0]) + b2 * (c2[1] - p3[1]) + p3[0],
+          b2 * (c2[0] - p3[0]) - a2 * (c2[1] - p3[1]) + p3[1]
+        ];
+        var loc2 = projection2.invert(c22);
+        node = node.move(geoVecInterp(node.loc, loc2, t2));
+        graph = graph.replace(node);
+      }
+      return graph;
+    };
+    action.useLongAxis = function(val) {
+      if (!arguments.length) return _useLongAxis;
+      _useLongAxis = val;
+      return action;
+    };
+    action.transitionable = true;
+    return action;
+  }
+
+  // modules/actions/upgrade_tags.js
+  function actionUpgradeTags(entityId, oldTags, replaceTags) {
+    return function(graph) {
+      var entity = graph.entity(entityId);
+      var tags = Object.assign({}, entity.tags);
+      var transferValue;
+      var semiIndex;
+      for (var oldTagKey in oldTags) {
+        if (!(oldTagKey in tags)) continue;
+        if (oldTags[oldTagKey] === "*") {
+          transferValue = tags[oldTagKey];
+          delete tags[oldTagKey];
+        } else if (oldTags[oldTagKey] === tags[oldTagKey]) {
+          delete tags[oldTagKey];
+        } else {
+          var vals = tags[oldTagKey].split(";").filter(Boolean);
+          var oldIndex = vals.indexOf(oldTags[oldTagKey]);
+          if (vals.length === 1 || oldIndex === -1) {
+            delete tags[oldTagKey];
+          } else {
+            if (replaceTags && replaceTags[oldTagKey]) {
+              semiIndex = oldIndex;
+            }
+            vals.splice(oldIndex, 1);
+            tags[oldTagKey] = vals.join(";");
+          }
+        }
+      }
+      if (replaceTags) {
+        for (var replaceKey in replaceTags) {
+          var replaceValue = replaceTags[replaceKey];
+          if (replaceValue === "*") {
+            if (tags[replaceKey] && tags[replaceKey] !== "no") {
+              continue;
+            } else {
+              tags[replaceKey] = "yes";
+            }
+          } else if (replaceValue === "$1") {
+            tags[replaceKey] = transferValue;
+          } else {
+            if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== void 0) {
+              var existingVals = tags[replaceKey].split(";").filter(Boolean);
+              if (existingVals.indexOf(replaceValue) === -1) {
+                existingVals.splice(semiIndex, 0, replaceValue);
+                tags[replaceKey] = existingVals.join(";");
+              }
+            } else {
+              tags[replaceKey] = replaceValue;
+            }
+          }
         }
-        return segments;
-      });
-    },
-    // If this way is not closed, append the beginning node to the end of the nodelist to close it.
-    close: function() {
-      if (this.isClosed() || !this.nodes.length) return this;
-      var nodes = this.nodes.slice();
-      nodes = nodes.filter(noRepeatNodes);
-      nodes.push(nodes[0]);
-      return this.update({ nodes });
-    },
-    // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
-    unclose: function() {
-      if (!this.isClosed()) return this;
-      var nodes = this.nodes.slice();
-      var connector = this.first();
-      var i3 = nodes.length - 1;
-      while (i3 > 0 && nodes.length > 1 && nodes[i3] === connector) {
-        nodes.splice(i3, 1);
-        i3 = nodes.length - 1;
       }
-      nodes = nodes.filter(noRepeatNodes);
-      return this.update({ nodes });
-    },
-    // Adds a node (id) in front of the node which is currently at position index.
-    // If index is undefined, the node will be added to the end of the way for linear ways,
-    //   or just before the final connecting node for circular ways.
-    // Consecutive duplicates are eliminated including existing ones.
-    // Circularity is always preserved when adding a node.
-    addNode: function(id2, index) {
-      var nodes = this.nodes.slice();
-      var isClosed = this.isClosed();
-      var max3 = isClosed ? nodes.length - 1 : nodes.length;
-      if (index === void 0) {
-        index = max3;
+      return graph.replace(entity.update({ tags }));
+    };
+  }
+
+  // modules/core/preferences.js
+  var _storage;
+  try {
+    _storage = localStorage;
+  } catch (e3) {
+  }
+  _storage = _storage || /* @__PURE__ */ (() => {
+    let s2 = {};
+    return {
+      getItem: (k2) => s2[k2],
+      setItem: (k2, v2) => s2[k2] = v2,
+      removeItem: (k2) => delete s2[k2]
+    };
+  })();
+  var _listeners = {};
+  function corePreferences(k2, v2) {
+    try {
+      if (v2 === void 0) return _storage.getItem(k2);
+      else if (v2 === null) _storage.removeItem(k2);
+      else _storage.setItem(k2, v2);
+      if (_listeners[k2]) {
+        _listeners[k2].forEach((handler) => handler(v2));
       }
-      if (index < 0 || index > max3) {
-        throw new RangeError("index " + index + " out of range 0.." + max3);
+      return true;
+    } catch (e3) {
+      if (typeof console !== "undefined") {
+        console.error("localStorage quota exceeded");
       }
-      if (isClosed) {
-        var connector = this.first();
-        var i3 = 1;
-        while (i3 < nodes.length && nodes.length > 2 && nodes[i3] === connector) {
-          nodes.splice(i3, 1);
-          if (index > i3) index--;
-        }
-        i3 = nodes.length - 1;
-        while (i3 > 0 && nodes.length > 1 && nodes[i3] === connector) {
-          nodes.splice(i3, 1);
-          if (index > i3) index--;
-          i3 = nodes.length - 1;
-        }
+      return false;
+    }
+  }
+  corePreferences.onChange = function(k2, handler) {
+    _listeners[k2] = _listeners[k2] || [];
+    _listeners[k2].push(handler);
+  };
+
+  // node_modules/@rapideditor/country-coder/dist/country-coder.mjs
+  var import_which_polygon = __toESM(require_which_polygon(), 1);
+  var borders_default = { type: "FeatureCollection", features: [
+    { type: "Feature", properties: { wikidata: "Q21", nameEn: "England", aliases: ["GB-ENG"], country: "GB", groups: ["Q23666", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-6.03913, 51.13217], [-7.74976, 48.64773], [1.17405, 50.74239], [2.18458, 51.52087], [2.56575, 51.85301], [0.792, 57.56437], [-2.30613, 55.62698], [-2.17058, 55.45916], [-2.6095, 55.28488], [-2.63532, 55.19452], [-3.02906, 55.04606], [-3.09361, 54.94924], [-3.38407, 54.94278], [-4.1819, 54.57861], [-3.5082, 53.54318], [-3.08228, 53.25526], [-3.03675, 53.25092], [-2.92329, 53.19383], [-2.92022, 53.17685], [-2.98598, 53.15589], [-2.90649, 53.10964], [-2.87469, 53.12337], [-2.89131, 53.09374], [-2.83133, 52.99184], [-2.7251, 52.98389], [-2.72221, 52.92969], [-2.80549, 52.89428], [-2.85897, 52.94487], [-2.92401, 52.93836], [-2.97243, 52.9651], [-3.13576, 52.895], [-3.15744, 52.84947], [-3.16105, 52.79599], [-3.08734, 52.77504], [-3.01001, 52.76636], [-2.95581, 52.71794], [-3.01724, 52.72083], [-3.04398, 52.65435], [-3.13648, 52.58208], [-3.12926, 52.5286], [-3.09746, 52.53077], [-3.08662, 52.54811], [-3.00929, 52.57774], [-2.99701, 52.551], [-3.03603, 52.49969], [-3.13359, 52.49174], [-3.22971, 52.45344], [-3.22754, 52.42526], [-3.04687, 52.34504], [-2.95364, 52.3501], [-2.99701, 52.323], [-3.00785, 52.2753], [-3.09289, 52.20546], [-3.12638, 52.08114], [-2.97111, 51.90456], [-2.8818, 51.93196], [-2.78742, 51.88833], [-2.74277, 51.84367], [-2.66234, 51.83555], [-2.66336, 51.59504], [-3.20563, 51.31615], [-6.03913, 51.13217]]]] } },
+    { type: "Feature", properties: { wikidata: "Q22", nameEn: "Scotland", aliases: ["GB-SCT"], country: "GB", groups: ["Q23666", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[0.792, 57.56437], [-0.3751, 61.32236], [-14.78497, 57.60709], [-6.82333, 55.83103], [-4.69044, 54.3629], [-3.38407, 54.94278], [-3.09361, 54.94924], [-3.02906, 55.04606], [-2.63532, 55.19452], [-2.6095, 55.28488], [-2.17058, 55.45916], [-2.30613, 55.62698], [0.792, 57.56437]]]] } },
+    { type: "Feature", properties: { wikidata: "Q25", nameEn: "Wales", aliases: ["GB-WLS"], country: "GB", groups: ["Q23666", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-3.5082, 53.54318], [-5.37267, 53.63269], [-6.03913, 51.13217], [-3.20563, 51.31615], [-2.66336, 51.59504], [-2.66234, 51.83555], [-2.74277, 51.84367], [-2.78742, 51.88833], [-2.8818, 51.93196], [-2.97111, 51.90456], [-3.12638, 52.08114], [-3.09289, 52.20546], [-3.00785, 52.2753], [-2.99701, 52.323], [-2.95364, 52.3501], [-3.04687, 52.34504], [-3.22754, 52.42526], [-3.22971, 52.45344], [-3.13359, 52.49174], [-3.03603, 52.49969], [-2.99701, 52.551], [-3.00929, 52.57774], [-3.08662, 52.54811], [-3.09746, 52.53077], [-3.12926, 52.5286], [-3.13648, 52.58208], [-3.04398, 52.65435], [-3.01724, 52.72083], [-2.95581, 52.71794], [-3.01001, 52.76636], [-3.08734, 52.77504], [-3.16105, 52.79599], [-3.15744, 52.84947], [-3.13576, 52.895], [-2.97243, 52.9651], [-2.92401, 52.93836], [-2.85897, 52.94487], [-2.80549, 52.89428], [-2.72221, 52.92969], [-2.7251, 52.98389], [-2.83133, 52.99184], [-2.89131, 53.09374], [-2.87469, 53.12337], [-2.90649, 53.10964], [-2.98598, 53.15589], [-2.92022, 53.17685], [-2.92329, 53.19383], [-3.03675, 53.25092], [-3.08228, 53.25526], [-3.5082, 53.54318]]]] } },
+    { type: "Feature", properties: { wikidata: "Q26", nameEn: "Northern Ireland", aliases: ["GB-NIR"], country: "GB", groups: ["Q22890", "Q3336843", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-6.34755, 55.49206], [-7.2471, 55.06933], [-7.34464, 55.04688], [-7.4033, 55.00391], [-7.40004, 54.94498], [-7.44404, 54.9403], [-7.4473, 54.87003], [-7.47626, 54.83084], [-7.54508, 54.79401], [-7.54671, 54.74606], [-7.64449, 54.75265], [-7.75041, 54.7103], [-7.83352, 54.73854], [-7.93293, 54.66603], [-7.70315, 54.62077], [-7.8596, 54.53671], [-7.99812, 54.54427], [-8.04538, 54.48941], [-8.179, 54.46763], [-8.04555, 54.36292], [-7.87101, 54.29299], [-7.8596, 54.21779], [-7.81397, 54.20159], [-7.69501, 54.20731], [-7.55812, 54.12239], [-7.4799, 54.12239], [-7.44567, 54.1539], [-7.32834, 54.11475], [-7.30553, 54.11869], [-7.34005, 54.14698], [-7.29157, 54.17191], [-7.28017, 54.16714], [-7.29687, 54.1354], [-7.29493, 54.12013], [-7.26316, 54.13863], [-7.25012, 54.20063], [-7.14908, 54.22732], [-7.19145, 54.31296], [-7.02034, 54.4212], [-6.87775, 54.34682], [-6.85179, 54.29176], [-6.81583, 54.22791], [-6.74575, 54.18788], [-6.70175, 54.20218], [-6.6382, 54.17071], [-6.66264, 54.0666], [-6.62842, 54.03503], [-6.47849, 54.06947], [-6.36605, 54.07234], [-6.36279, 54.11248], [-6.32694, 54.09337], [-6.29003, 54.11278], [-6.26218, 54.09785], [-5.83481, 53.87749], [-4.69044, 54.3629], [-6.34755, 55.49206]]]] } },
+    { type: "Feature", properties: { wikidata: "Q35", nameEn: "Denmark", country: "DK", groups: ["EU", "154", "150", "UN"], callingCodes: ["45"] }, geometry: { type: "MultiPolygon", coordinates: [[[[12.16597, 56.60205], [10.40861, 58.38489], [7.28637, 57.35913], [8.02459, 55.09613], [8.45719, 55.06747], [8.55769, 54.91837], [8.63979, 54.91069], [8.76387, 54.8948], [8.81178, 54.90518], [8.92795, 54.90452], [9.04629, 54.87249], [9.14275, 54.87421], [9.20571, 54.85841], [9.24631, 54.84726], [9.23445, 54.83432], [9.2474, 54.8112], [9.32771, 54.80602], [9.33849, 54.80233], [9.36496, 54.81749], [9.38532, 54.83968], [9.41213, 54.84254], [9.43155, 54.82586], [9.4659, 54.83131], [9.58937, 54.88785], [9.62734, 54.88057], [9.61187, 54.85548], [9.73563, 54.8247], [9.89314, 54.84171], [10.16755, 54.73883], [10.31111, 54.65968], [11.00303, 54.63689], [11.90309, 54.38543], [12.85844, 54.82438], [13.93395, 54.84044], [15.36991, 54.73263], [15.79951, 55.54655], [14.89259, 55.5623], [14.28399, 55.1553], [12.84405, 55.13257], [12.60345, 55.42675], [12.88472, 55.63369], [12.6372, 55.91371], [12.65312, 56.04345], [12.07466, 56.29488], [12.16597, 56.60205]]]] } },
+    { type: "Feature", properties: { wikidata: "Q55", nameEn: "Netherlands", country: "NL", groups: ["EU", "155", "150", "UN"], callingCodes: ["31"] }, geometry: { type: "MultiPolygon", coordinates: [[[[5.45168, 54.20039], [2.56575, 51.85301], [3.36263, 51.37112], [3.38696, 51.33436], [3.35847, 51.31572], [3.38289, 51.27331], [3.41704, 51.25933], [3.43488, 51.24135], [3.52698, 51.2458], [3.51502, 51.28697], [3.58939, 51.30064], [3.78999, 51.25766], [3.78783, 51.2151], [3.90125, 51.20371], [3.97889, 51.22537], [4.01957, 51.24504], [4.05165, 51.24171], [4.16721, 51.29348], [4.24024, 51.35371], [4.21923, 51.37443], [4.33265, 51.37687], [4.34086, 51.35738], [4.39292, 51.35547], [4.43777, 51.36989], [4.38064, 51.41965], [4.39747, 51.43316], [4.38122, 51.44905], [4.47736, 51.4778], [4.5388, 51.48184], [4.54675, 51.47265], [4.52846, 51.45002], [4.53521, 51.4243], [4.57489, 51.4324], [4.65442, 51.42352], [4.72935, 51.48424], [4.74578, 51.48937], [4.77321, 51.50529], [4.78803, 51.50284], [4.84139, 51.4799], [4.82409, 51.44736], [4.82946, 51.4213], [4.78314, 51.43319], [4.76577, 51.43046], [4.77229, 51.41337], [4.78941, 51.41102], [4.84988, 51.41502], [4.90016, 51.41404], [4.92152, 51.39487], [5.00393, 51.44406], [5.0106, 51.47167], [5.03281, 51.48679], [5.04774, 51.47022], [5.07891, 51.4715], [5.10456, 51.43163], [5.07102, 51.39469], [5.13105, 51.34791], [5.13377, 51.31592], [5.16222, 51.31035], [5.2002, 51.32243], [5.24244, 51.30495], [5.22542, 51.26888], [5.23814, 51.26064], [5.26461, 51.26693], [5.29716, 51.26104], [5.33886, 51.26314], [5.347, 51.27502], [5.41672, 51.26248], [5.4407, 51.28169], [5.46519, 51.2849], [5.48476, 51.30053], [5.515, 51.29462], [5.5569, 51.26544], [5.5603, 51.22249], [5.65145, 51.19788], [5.65528, 51.18736], [5.70344, 51.1829], [5.74617, 51.18928], [5.77735, 51.17845], [5.77697, 51.1522], [5.82564, 51.16753], [5.85508, 51.14445], [5.80798, 51.11661], [5.8109, 51.10861], [5.83226, 51.10585], [5.82921, 51.09328], [5.79903, 51.09371], [5.79835, 51.05834], [5.77258, 51.06196], [5.75961, 51.03113], [5.77688, 51.02483], [5.76242, 50.99703], [5.71864, 50.96092], [5.72875, 50.95428], [5.74752, 50.96202], [5.75927, 50.95601], [5.74644, 50.94723], [5.72545, 50.92312], [5.72644, 50.91167], [5.71626, 50.90796], [5.69858, 50.91046], [5.67886, 50.88142], [5.64504, 50.87107], [5.64009, 50.84742], [5.65259, 50.82309], [5.70118, 50.80764], [5.68995, 50.79641], [5.70107, 50.7827], [5.68091, 50.75804], [5.69469, 50.75529], [5.72216, 50.76398], [5.73904, 50.75674], [5.74356, 50.7691], [5.76533, 50.78159], [5.77513, 50.78308], [5.80673, 50.7558], [5.84548, 50.76542], [5.84888, 50.75448], [5.88734, 50.77092], [5.89129, 50.75125], [5.89132, 50.75124], [5.95942, 50.7622], [5.97545, 50.75441], [6.01976, 50.75398], [6.02624, 50.77453], [5.97497, 50.79992], [5.98404, 50.80988], [6.00462, 50.80065], [6.02328, 50.81694], [6.01921, 50.84435], [6.05623, 50.8572], [6.05702, 50.85179], [6.07431, 50.84674], [6.07693, 50.86025], [6.08805, 50.87223], [6.07486, 50.89307], [6.09297, 50.92066], [6.01615, 50.93367], [6.02697, 50.98303], [5.95282, 50.98728], [5.90296, 50.97356], [5.90493, 51.00198], [5.87849, 51.01969], [5.86735, 51.05182], [5.9134, 51.06736], [5.9541, 51.03496], [5.98292, 51.07469], [6.16706, 51.15677], [6.17384, 51.19589], [6.07889, 51.17038], [6.07889, 51.24432], [6.16977, 51.33169], [6.22674, 51.36135], [6.22641, 51.39948], [6.20654, 51.40049], [6.21724, 51.48568], [6.18017, 51.54096], [6.09055, 51.60564], [6.11759, 51.65609], [6.02767, 51.6742], [6.04091, 51.71821], [5.95003, 51.7493], [5.98665, 51.76944], [5.94568, 51.82786], [5.99848, 51.83195], [6.06705, 51.86136], [6.10337, 51.84829], [6.16902, 51.84094], [6.11551, 51.89769], [6.15349, 51.90439], [6.21443, 51.86801], [6.29872, 51.86801], [6.30593, 51.84998], [6.40704, 51.82771], [6.38815, 51.87257], [6.47179, 51.85395], [6.50231, 51.86313], [6.58556, 51.89386], [6.68386, 51.91861], [6.72319, 51.89518], [6.82357, 51.96711], [6.83035, 51.9905], [6.68128, 52.05052], [6.76117, 52.11895], [6.83984, 52.11728], [6.97189, 52.20329], [6.9897, 52.2271], [7.03729, 52.22695], [7.06365, 52.23789], [7.02703, 52.27941], [7.07044, 52.37805], [7.03417, 52.40237], [6.99041, 52.47235], [6.94293, 52.43597], [6.69507, 52.488], [6.71641, 52.62905], [6.77307, 52.65375], [7.04557, 52.63318], [7.07253, 52.81083], [7.21694, 53.00742], [7.17898, 53.13817], [7.22681, 53.18165], [7.21679, 53.20058], [7.19052, 53.31866], [7.00198, 53.32672], [6.91025, 53.44221], [5.45168, 54.20039]], [[4.93295, 51.44945], [4.95244, 51.45207], [4.9524, 51.45014], [4.93909, 51.44632], [4.93295, 51.44945]], [[4.91493, 51.4353], [4.91935, 51.43634], [4.92227, 51.44252], [4.91811, 51.44621], [4.92287, 51.44741], [4.92811, 51.4437], [4.92566, 51.44273], [4.92815, 51.43856], [4.92879, 51.44161], [4.93544, 51.44634], [4.94025, 51.44193], [4.93416, 51.44185], [4.93471, 51.43861], [4.94265, 51.44003], [4.93986, 51.43064], [4.92952, 51.42984], [4.92652, 51.43329], [4.91493, 51.4353]]]] } },
+    { type: "Feature", properties: { wikidata: "Q782", nameEn: "Hawaii", aliases: ["US-HI"], country: "US", groups: ["Q35657", "061", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-177.8563, 29.18961], [-179.49839, 27.86265], [-151.6784, 9.55515], [-154.05867, 45.51124], [-177.5224, 27.7635], [-177.8563, 29.18961]]]] } },
+    { type: "Feature", properties: { wikidata: "Q797", nameEn: "Alaska", aliases: ["US-AK"], country: "US", groups: ["Q35657", "021", "003", "019", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169.34848, 52.47228], [180, 51.0171], [179.84401, 55.10087], [169.34848, 52.47228]]], [[[-168.95635, 65.98512], [-169.03888, 65.48473], [-172.76104, 63.77445], [-179.55295, 57.62081], [-179.55295, 50.81807], [-133.92876, 54.62289], [-130.61931, 54.70835], [-130.64499, 54.76912], [-130.44184, 54.85377], [-130.27203, 54.97174], [-130.18765, 55.07744], [-130.08035, 55.21556], [-129.97513, 55.28029], [-130.15373, 55.74895], [-130.00857, 55.91344], [-130.00093, 56.00325], [-130.10173, 56.12178], [-130.33965, 56.10849], [-130.77769, 56.36185], [-131.8271, 56.62247], [-133.38523, 58.42773], [-133.84645, 58.73543], [-134.27175, 58.8634], [-134.48059, 59.13231], [-134.55699, 59.1297], [-134.7047, 59.2458], [-135.00267, 59.28745], [-135.03069, 59.56208], [-135.48007, 59.79937], [-136.31566, 59.59083], [-136.22381, 59.55526], [-136.33727, 59.44466], [-136.47323, 59.46617], [-136.52365, 59.16752], [-136.82619, 59.16198], [-137.4925, 58.89415], [-137.60623, 59.24465], [-138.62145, 59.76431], [-138.71149, 59.90728], [-139.05365, 59.99655], [-139.20603, 60.08896], [-139.05831, 60.35205], [-139.68991, 60.33693], [-139.98024, 60.18027], [-140.45648, 60.30919], [-140.5227, 60.22077], [-141.00116, 60.30648], [-140.97446, 84.39275], [-168.25765, 71.99091], [-168.95635, 65.98512]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3492", nameEn: "Sumatra", aliases: ["ID-SM"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[109.82788, 2.86812], [110.90339, 7.52694], [105.01437, 3.24936], [104.56723, 1.44271], [104.34728, 1.33529], [104.12282, 1.27714], [104.03085, 1.26954], [103.74084, 1.12902], [103.66049, 1.18825], [103.56591, 1.19719], [103.03657, 1.30383], [96.11174, 6.69841], [74.28481, -3.17525], [102.92489, -8.17146], [106.32259, -5.50116], [106.38511, -5.16715], [109.17017, -4.07401], [109.3962, -2.07276], [108.50935, -2.01066], [107.94791, 1.06924], [109.82788, 2.86812]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3757", nameEn: "Java", aliases: ["ID-JW"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[109.17017, -4.07401], [106.38511, -5.16715], [106.32259, -5.50116], [102.92489, -8.17146], [116.22542, -10.49172], [114.39575, -8.2889], [114.42235, -8.09762], [114.92859, -7.49253], [116.33992, -7.56171], [116.58433, -5.30385], [109.17017, -4.07401]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3795", nameEn: "Kalimantan", aliases: ["ID-KA"], country: "ID", groups: ["Q36117", "035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[120.02464, 2.83703], [118.06469, 4.16638], [117.67641, 4.16535], [117.47313, 4.18857], [117.25801, 4.35108], [115.90217, 4.37708], [115.58276, 3.93499], [115.53713, 3.14776], [115.11343, 2.82879], [115.1721, 2.49671], [114.80706, 2.21665], [114.80706, 1.92351], [114.57892, 1.5], [114.03788, 1.44787], [113.64677, 1.23933], [113.01448, 1.42832], [113.021, 1.57819], [112.48648, 1.56516], [112.2127, 1.44135], [112.15679, 1.17004], [111.94553, 1.12016], [111.82846, 0.99349], [111.55434, 0.97864], [111.22979, 1.08326], [110.62374, 0.873], [110.49182, 0.88088], [110.35354, 0.98869], [109.66397, 1.60425], [109.66397, 1.79972], [109.57923, 1.80624], [109.53794, 1.91771], [109.62558, 1.99182], [109.82788, 2.86812], [107.94791, 1.06924], [108.50935, -2.01066], [109.3962, -2.07276], [109.17017, -4.07401], [116.58433, -5.30385], [120.02464, 2.83703]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3803", nameEn: "Lesser Sunda Islands", aliases: ["ID-NU"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[116.96967, -8.01483], [114.92859, -7.49253], [114.42235, -8.09762], [114.39575, -8.2889], [116.22542, -10.49172], [122.14954, -11.52517], [125.68138, -9.85176], [125.09025, -9.46406], [124.97892, -9.19281], [125.04044, -9.17093], [125.09434, -9.19669], [125.18907, -9.16434], [125.18632, -9.03142], [125.11764, -8.96359], [124.97742, -9.08128], [124.94011, -8.85617], [124.46701, -9.13002], [124.45971, -9.30263], [124.38554, -9.3582], [124.35258, -9.43002], [124.3535, -9.48493], [124.28115, -9.50453], [124.28115, -9.42189], [124.21247, -9.36904], [124.14517, -9.42324], [124.10539, -9.41206], [124.04286, -9.34243], [124.04628, -9.22671], [124.33472, -9.11416], [124.92337, -8.75859], [125.87688, -7.49892], [116.96967, -8.01483]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3812", nameEn: "Sulawesi", aliases: ["ID-SL"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[128.34321, 3.90322], [126.69413, 6.02692], [119.56457, 0.90759], [116.58433, -5.30385], [116.33992, -7.56171], [116.96967, -8.01483], [125.87688, -7.49892], [123.78965, -0.86805], [128.34321, 3.90322]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3827", nameEn: "Maluku Islands", aliases: ["ID-ML"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[129.63187, 2.21409], [128.34321, 3.90322], [123.78965, -0.86805], [125.87688, -7.49892], [125.58506, -7.95311], [125.87691, -8.31789], [127.42116, -8.22471], [127.55165, -9.05052], [135.49042, -9.2276], [135.35517, -5.01442], [132.8312, -4.70282], [130.8468, -2.61103], [128.40647, -2.30349], [129.71519, -0.24692], [129.63187, 2.21409]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3845", nameEn: "Western New Guinea", aliases: ["ID-PP"], country: "ID", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["62"] }, geometry: { type: "MultiPolygon", coordinates: [[[[135.49042, -9.2276], [141.01842, -9.35091], [141.01763, -6.90181], [140.90448, -6.85033], [140.85295, -6.72996], [140.99813, -6.3233], [141.02352, 0.08993], [129.63187, 2.21409], [129.71519, -0.24692], [128.40647, -2.30349], [130.8468, -2.61103], [132.8312, -4.70282], [135.35517, -5.01442], [135.49042, -9.2276]]]] } },
+    { type: "Feature", properties: { wikidata: "Q5765", nameEn: "Balearic Islands", aliases: ["ES-IB"], country: "ES", groups: ["EU", "039", "150", "UN"], callingCodes: ["34 971"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.27707, 35.35051], [5.10072, 39.89531], [3.75438, 42.33445], [-2.27707, 35.35051]]]] } },
+    { type: "Feature", properties: { wikidata: "Q5823", nameEn: "Ceuta", aliases: ["ES-CE"], country: "ES", groups: ["EA", "EU", "015", "002", "UN"], level: "subterritory", callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-5.38491, 35.92591], [-5.37338, 35.88417], [-5.35844, 35.87375], [-5.34379, 35.8711], [-5.21179, 35.90091], [-5.38491, 35.92591]]]] } },
+    { type: "Feature", properties: { wikidata: "Q5831", nameEn: "Melilla", aliases: ["ES-ML"], country: "ES", groups: ["EA", "EU", "015", "002", "UN"], level: "subterritory", callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.91909, 35.33927], [-2.96038, 35.31609], [-2.96648, 35.30475], [-2.96978, 35.29459], [-2.97035, 35.28852], [-2.96507, 35.28801], [-2.96826, 35.28296], [-2.96516, 35.27967], [-2.95431, 35.2728], [-2.95065, 35.26576], [-2.93893, 35.26737], [-2.92272, 35.27509], [-2.91909, 35.33927]]]] } },
+    { type: "Feature", properties: { wikidata: "Q7835", nameEn: "Crimea", country: "RU", groups: ["151", "150", "UN"], level: "subterritory", callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.5, 44], [36.4883, 45.0488], [36.475, 45.2411], [36.5049, 45.3136], [36.6545, 45.3417], [36.6645, 45.4514], [35.0498, 45.7683], [34.9601, 45.7563], [34.7991, 45.8101], [34.8015, 45.9005], [34.7548, 45.907], [34.6668, 45.9714], [34.6086, 45.9935], [34.5589, 45.9935], [34.5201, 45.951], [34.4873, 45.9427], [34.4415, 45.9599], [34.4122, 46.0025], [34.3391, 46.0611], [34.2511, 46.0532], [34.181, 46.068], [34.1293, 46.1049], [34.0731, 46.1177], [34.0527, 46.1084], [33.9155, 46.1594], [33.8523, 46.1986], [33.7972, 46.2048], [33.7405, 46.1855], [33.646, 46.2303], [33.6152, 46.2261], [33.6385, 46.1415], [33.6147, 46.1356], [33.5732, 46.1032], [33.5909, 46.0601], [33.5597, 46.0307], [31.5, 45.5], [33.5, 44]]]] } },
+    { type: "Feature", properties: { wikidata: "Q12837", nameEn: "Iberia", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q14056", nameEn: "Jan Mayen", aliases: ["NO-22"], country: "NO", groups: ["SJ", "154", "150", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-9.18243, 72.23144], [-10.71459, 70.09565], [-5.93364, 70.76368], [-9.18243, 72.23144]]]] } },
+    { type: "Feature", properties: { wikidata: "Q19188", nameEn: "Mainland China", country: "CN", groups: ["030", "142", "UN"], callingCodes: ["86"] }, geometry: { type: "MultiPolygon", coordinates: [[[[125.6131, 53.07229], [125.17522, 53.20225], [124.46078, 53.21881], [123.86158, 53.49391], [123.26989, 53.54843], [122.85966, 53.47395], [122.35063, 53.49565], [121.39213, 53.31888], [120.85633, 53.28499], [120.0451, 52.7359], [120.04049, 52.58773], [120.46454, 52.63811], [120.71673, 52.54099], [120.61346, 52.32447], [120.77337, 52.20805], [120.65907, 51.93544], [120.10963, 51.671], [119.13553, 50.37412], [119.38598, 50.35162], [119.27996, 50.13348], [119.11003, 50.00276], [118.61623, 49.93809], [117.82343, 49.52696], [117.48208, 49.62324], [117.27597, 49.62544], [116.71193, 49.83813], [116.03781, 48.87014], [116.06565, 48.81716], [115.78876, 48.51781], [115.811, 48.25699], [115.52082, 48.15367], [115.57128, 47.91988], [115.94296, 47.67741], [116.21879, 47.88505], [116.4465, 47.83662], [116.67405, 47.89039], [116.9723, 47.87285], [117.37875, 47.63627], [117.50181, 47.77216], [117.80196, 48.01661], [118.03676, 48.00982], [118.11009, 48.04], [118.22677, 48.03853], [118.29654, 48.00246], [118.55766, 47.99277], [118.7564, 47.76947], [119.12343, 47.66458], [119.13995, 47.53997], [119.35892, 47.48104], [119.31964, 47.42617], [119.54918, 47.29505], [119.56019, 47.24874], [119.62403, 47.24575], [119.71209, 47.19192], [119.85518, 46.92196], [119.91242, 46.90091], [119.89261, 46.66423], [119.80455, 46.67631], [119.77373, 46.62947], [119.68127, 46.59015], [119.65265, 46.62342], [119.42827, 46.63783], [119.32827, 46.61433], [119.24978, 46.64761], [119.10448, 46.65516], [119.00541, 46.74273], [118.92616, 46.72765], [118.89974, 46.77139], [118.8337, 46.77742], [118.78747, 46.68689], [118.30534, 46.73519], [117.69554, 46.50991], [117.60748, 46.59771], [117.41782, 46.57862], [117.36609, 46.36335], [116.83166, 46.38637], [116.75551, 46.33083], [116.58612, 46.30211], [116.26678, 45.96479], [116.24012, 45.8778], [116.27366, 45.78637], [116.16989, 45.68603], [115.60329, 45.44717], [114.94546, 45.37377], [114.74612, 45.43585], [114.54801, 45.38337], [114.5166, 45.27189], [113.70918, 44.72891], [112.74662, 44.86297], [112.4164, 45.06858], [111.98695, 45.09074], [111.76275, 44.98032], [111.40498, 44.3461], [111.96289, 43.81596], [111.93776, 43.68709], [111.79758, 43.6637], [111.59087, 43.51207], [111.0149, 43.3289], [110.4327, 42.78293], [110.08401, 42.6411], [109.89402, 42.63111], [109.452, 42.44842], [109.00679, 42.45302], [108.84489, 42.40246], [107.57258, 42.40898], [107.49681, 42.46221], [107.29755, 42.41395], [107.24774, 42.36107], [106.76517, 42.28741], [105.0123, 41.63188], [104.51667, 41.66113], [104.52258, 41.8706], [103.92804, 41.78246], [102.72403, 42.14675], [102.07645, 42.22519], [101.80515, 42.50074], [100.84979, 42.67087], [100.33297, 42.68231], [99.50671, 42.56535], [97.1777, 42.7964], [96.37926, 42.72055], [96.35658, 42.90363], [95.89543, 43.2528], [95.52594, 43.99353], [95.32891, 44.02407], [95.39772, 44.2805], [95.01191, 44.25274], [94.71959, 44.35284], [94.10003, 44.71016], [93.51161, 44.95964], [91.64048, 45.07408], [90.89169, 45.19667], [90.65114, 45.49314], [90.70907, 45.73437], [91.03026, 46.04194], [90.99672, 46.14207], [90.89639, 46.30711], [91.07696, 46.57315], [91.0147, 46.58171], [91.03649, 46.72916], [90.84035, 46.99525], [90.76108, 46.99399], [90.48542, 47.30438], [90.48854, 47.41826], [90.33598, 47.68303], [90.10871, 47.7375], [90.06512, 47.88177], [89.76624, 47.82745], [89.55453, 48.0423], [89.0711, 47.98528], [88.93186, 48.10263], [88.8011, 48.11302], [88.58316, 48.21893], [88.58939, 48.34531], [87.96361, 48.58478], [88.0788, 48.71436], [87.73822, 48.89582], [87.88171, 48.95853], [87.81333, 49.17354], [87.48983, 49.13794], [87.478, 49.07403], [87.28386, 49.11626], [86.87238, 49.12432], [86.73568, 48.99918], [86.75343, 48.70331], [86.38069, 48.46064], [85.73581, 48.3939], [85.5169, 48.05493], [85.61067, 47.49753], [85.69696, 47.2898], [85.54294, 47.06171], [85.22443, 47.04816], [84.93995, 46.87399], [84.73077, 47.01394], [83.92184, 46.98912], [83.04622, 47.19053], [82.21792, 45.56619], [82.58474, 45.40027], [82.51374, 45.1755], [81.73278, 45.3504], [80.11169, 45.03352], [79.8987, 44.89957], [80.38384, 44.63073], [80.40229, 44.23319], [80.40031, 44.10986], [80.75156, 43.44948], [80.69718, 43.32589], [80.77771, 43.30065], [80.78817, 43.14235], [80.62913, 43.141], [80.3735, 43.01557], [80.58999, 42.9011], [80.38169, 42.83142], [80.26886, 42.8366], [80.16892, 42.61137], [80.26841, 42.23797], [80.17807, 42.21166], [80.17842, 42.03211], [79.92977, 42.04113], [78.3732, 41.39603], [78.15757, 41.38565], [78.12873, 41.23091], [77.81287, 41.14307], [77.76206, 41.01574], [77.52723, 41.00227], [77.3693, 41.0375], [77.28004, 41.0033], [76.99302, 41.0696], [76.75681, 40.95354], [76.5261, 40.46114], [76.33659, 40.3482], [75.96168, 40.38064], [75.91361, 40.2948], [75.69663, 40.28642], [75.5854, 40.66874], [75.22834, 40.45382], [75.08243, 40.43945], [74.82013, 40.52197], [74.78168, 40.44886], [74.85996, 40.32857], [74.69875, 40.34668], [74.35063, 40.09742], [74.25533, 40.13191], [73.97049, 40.04378], [73.83006, 39.76136], [73.9051, 39.75073], [73.92354, 39.69565], [73.94683, 39.60733], [73.87018, 39.47879], [73.59831, 39.46425], [73.59241, 39.40843], [73.5004, 39.38402], [73.55396, 39.3543], [73.54572, 39.27567], [73.60638, 39.24534], [73.75823, 39.023], [73.81728, 39.04007], [73.82964, 38.91517], [73.7445, 38.93867], [73.7033, 38.84782], [73.80656, 38.66449], [73.79806, 38.61106], [73.97933, 38.52945], [74.17022, 38.65504], [74.51217, 38.47034], [74.69619, 38.42947], [74.69894, 38.22155], [74.80331, 38.19889], [74.82665, 38.07359], [74.9063, 38.03033], [74.92416, 37.83428], [75.00935, 37.77486], [74.8912, 37.67576], [74.94338, 37.55501], [75.06011, 37.52779], [75.15899, 37.41443], [75.09719, 37.37297], [75.12328, 37.31839], [74.88887, 37.23275], [74.80605, 37.21565], [74.49981, 37.24518], [74.56453, 37.03023], [75.13839, 37.02622], [75.40481, 36.95382], [75.45562, 36.71971], [75.72737, 36.7529], [75.92391, 36.56986], [76.0324, 36.41198], [76.00906, 36.17511], [75.93028, 36.13136], [76.15325, 35.9264], [76.14913, 35.82848], [76.33453, 35.84296], [76.50961, 35.8908], [76.77323, 35.66062], [76.84539, 35.67356], [76.96624, 35.5932], [77.44277, 35.46132], [77.70232, 35.46244], [77.80532, 35.52058], [78.11664, 35.48022], [78.03466, 35.3785], [78.00033, 35.23954], [78.22692, 34.88771], [78.18435, 34.7998], [78.27781, 34.61484], [78.54964, 34.57283], [78.56475, 34.50835], [78.74465, 34.45174], [79.05364, 34.32482], [78.99802, 34.3027], [78.91769, 34.15452], [78.66225, 34.08858], [78.65657, 34.03195], [78.73367, 34.01121], [78.77349, 33.73871], [78.67599, 33.66445], [78.73636, 33.56521], [79.15252, 33.17156], [79.14016, 33.02545], [79.46562, 32.69668], [79.26768, 32.53277], [79.13174, 32.47766], [79.0979, 32.38051], [78.99322, 32.37948], [78.96713, 32.33655], [78.7831, 32.46873], [78.73916, 32.69438], [78.38897, 32.53938], [78.4645, 32.45367], [78.49609, 32.2762], [78.68754, 32.10256], [78.74404, 32.00384], [78.78036, 31.99478], [78.69933, 31.78723], [78.84516, 31.60631], [78.71032, 31.50197], [78.77898, 31.31209], [78.89344, 31.30481], [79.01931, 31.42817], [79.14016, 31.43403], [79.30694, 31.17357], [79.59884, 30.93943], [79.93255, 30.88288], [80.20721, 30.58541], [80.54504, 30.44936], [80.83343, 30.32023], [81.03953, 30.20059], [81.12842, 30.01395], [81.24362, 30.0126], [81.29032, 30.08806], [81.2623, 30.14596], [81.33355, 30.15303], [81.39928, 30.21862], [81.41018, 30.42153], [81.5459, 30.37688], [81.62033, 30.44703], [81.99082, 30.33423], [82.10135, 30.35439], [82.10757, 30.23745], [82.19475, 30.16884], [82.16984, 30.0692], [82.38622, 30.02608], [82.5341, 29.9735], [82.73024, 29.81695], [83.07116, 29.61957], [83.28131, 29.56813], [83.44787, 29.30513], [83.63156, 29.16249], [83.82303, 29.30513], [83.97559, 29.33091], [84.18107, 29.23451], [84.24801, 29.02783], [84.2231, 28.89571], [84.47528, 28.74023], [84.62317, 28.73887], [84.85511, 28.58041], [85.06059, 28.68562], [85.19135, 28.62825], [85.18668, 28.54076], [85.10729, 28.34092], [85.38127, 28.28336], [85.4233, 28.32996], [85.59765, 28.30529], [85.60854, 28.25045], [85.69105, 28.38475], [85.71907, 28.38064], [85.74864, 28.23126], [85.84672, 28.18187], [85.90743, 28.05144], [85.97813, 27.99023], [85.94946, 27.9401], [86.06309, 27.90021], [86.12069, 27.93047], [86.08333, 28.02121], [86.088, 28.09264], [86.18607, 28.17364], [86.22966, 27.9786], [86.42736, 27.91122], [86.51609, 27.96623], [86.56265, 28.09569], [86.74181, 28.10638], [86.75582, 28.04182], [87.03757, 27.94835], [87.11696, 27.84104], [87.56996, 27.84517], [87.72718, 27.80938], [87.82681, 27.95248], [88.13378, 27.88015], [88.1278, 27.95417], [88.25332, 27.9478], [88.54858, 28.06057], [88.63235, 28.12356], [88.83559, 28.01936], [88.88091, 27.85192], [88.77517, 27.45415], [88.82981, 27.38814], [88.91901, 27.32483], [88.93678, 27.33777], [88.96947, 27.30319], [89.00216, 27.32532], [88.95355, 27.4106], [88.97213, 27.51671], [89.0582, 27.60985], [89.12825, 27.62502], [89.59525, 28.16433], [89.79762, 28.23979], [90.13387, 28.19178], [90.58842, 28.02838], [90.69894, 28.07784], [91.20019, 27.98715], [91.25779, 28.07509], [91.46327, 28.0064], [91.48973, 27.93903], [91.5629, 27.84823], [91.6469, 27.76358], [91.84722, 27.76325], [91.87057, 27.7195], [92.27432, 27.89077], [92.32101, 27.79363], [92.42538, 27.80092], [92.7275, 27.98662], [92.73025, 28.05814], [92.65472, 28.07632], [92.67486, 28.15018], [92.93075, 28.25671], [93.14635, 28.37035], [93.18069, 28.50319], [93.44621, 28.67189], [93.72797, 28.68821], [94.35897, 29.01965], [94.2752, 29.11687], [94.69318, 29.31739], [94.81353, 29.17804], [95.0978, 29.14446], [95.11291, 29.09527], [95.2214, 29.10727], [95.26122, 29.07727], [95.3038, 29.13847], [95.41091, 29.13007], [95.50842, 29.13487], [95.72086, 29.20797], [95.75149, 29.32063], [95.84899, 29.31464], [96.05361, 29.38167], [96.31316, 29.18643], [96.18682, 29.11087], [96.20467, 29.02325], [96.3626, 29.10607], [96.61391, 28.72742], [96.40929, 28.51526], [96.48895, 28.42955], [96.6455, 28.61657], [96.85561, 28.4875], [96.88445, 28.39452], [96.98882, 28.32564], [97.1289, 28.3619], [97.34547, 28.21385], [97.41729, 28.29783], [97.47085, 28.2688], [97.50518, 28.49716], [97.56835, 28.55628], [97.70705, 28.5056], [97.79632, 28.33168], [97.90069, 28.3776], [98.15337, 28.12114], [98.13964, 27.9478], [98.32641, 27.51385], [98.42529, 27.55404], [98.43353, 27.67086], [98.69582, 27.56499], [98.7333, 26.85615], [98.77547, 26.61994], [98.72741, 26.36183], [98.67797, 26.24487], [98.7329, 26.17218], [98.66884, 26.09165], [98.63128, 26.15492], [98.57085, 26.11547], [98.60763, 26.01512], [98.70818, 25.86241], [98.63128, 25.79937], [98.54064, 25.85129], [98.40606, 25.61129], [98.31268, 25.55307], [98.25774, 25.6051], [98.16848, 25.62739], [98.18084, 25.56298], [98.12591, 25.50722], [98.14925, 25.41547], [97.92541, 25.20815], [97.83614, 25.2715], [97.77023, 25.11492], [97.72216, 25.08508], [97.72903, 24.91332], [97.79949, 24.85655], [97.76481, 24.8289], [97.73127, 24.83015], [97.70181, 24.84557], [97.64354, 24.79171], [97.56648, 24.76475], [97.56383, 24.75535], [97.5542, 24.74943], [97.54675, 24.74202], [97.56525, 24.72838], [97.56286, 24.54535], [97.52757, 24.43748], [97.60029, 24.4401], [97.66998, 24.45288], [97.7098, 24.35658], [97.65624, 24.33781], [97.66723, 24.30027], [97.71941, 24.29652], [97.76799, 24.26365], [97.72998, 24.2302], [97.72799, 24.18883], [97.75305, 24.16902], [97.72903, 24.12606], [97.62363, 24.00506], [97.5247, 23.94032], [97.64667, 23.84574], [97.72302, 23.89288], [97.79456, 23.94836], [97.79416, 23.95663], [97.84328, 23.97603], [97.86545, 23.97723], [97.88811, 23.97446], [97.8955, 23.97758], [97.89676, 23.97931], [97.89683, 23.98389], [97.88814, 23.98605], [97.88414, 23.99405], [97.88616, 24.00463], [97.90998, 24.02094], [97.93951, 24.01953], [97.98691, 24.03897], [97.99583, 24.04932], [98.04709, 24.07616], [98.05302, 24.07408], [98.05671, 24.07961], [98.0607, 24.07812], [98.06703, 24.08028], [98.07806, 24.07988], [98.20666, 24.11406], [98.54476, 24.13119], [98.59256, 24.08371], [98.85319, 24.13042], [98.87998, 24.15624], [98.89632, 24.10612], [98.67797, 23.9644], [98.68209, 23.80492], [98.79607, 23.77947], [98.82933, 23.72921], [98.81775, 23.694], [98.88396, 23.59555], [98.80294, 23.5345], [98.82877, 23.47908], [98.87683, 23.48995], [98.92104, 23.36946], [98.87573, 23.33038], [98.93958, 23.31414], [98.92515, 23.29535], [98.88597, 23.18656], [99.05975, 23.16382], [99.04601, 23.12215], [99.25741, 23.09025], [99.34127, 23.13099], [99.52214, 23.08218], [99.54218, 22.90014], [99.43537, 22.94086], [99.45654, 22.85726], [99.31243, 22.73893], [99.38247, 22.57544], [99.37972, 22.50188], [99.28771, 22.4105], [99.17318, 22.18025], [99.19176, 22.16983], [99.1552, 22.15874], [99.33166, 22.09656], [99.47585, 22.13345], [99.85351, 22.04183], [99.96612, 22.05965], [99.99084, 21.97053], [99.94003, 21.82782], [99.98654, 21.71064], [100.04956, 21.66843], [100.12679, 21.70539], [100.17486, 21.65306], [100.10757, 21.59945], [100.12542, 21.50365], [100.1625, 21.48704], [100.18447, 21.51898], [100.25863, 21.47043], [100.35201, 21.53176], [100.42892, 21.54325], [100.4811, 21.46148], [100.57861, 21.45637], [100.72143, 21.51898], [100.87265, 21.67396], [101.11744, 21.77659], [101.15156, 21.56129], [101.2124, 21.56422], [101.19349, 21.41959], [101.26912, 21.36482], [101.2229, 21.23271], [101.29326, 21.17254], [101.54563, 21.25668], [101.6068, 21.23329], [101.59491, 21.18621], [101.60886, 21.17947], [101.66977, 21.20004], [101.70548, 21.14911], [101.7622, 21.14813], [101.79266, 21.19025], [101.76745, 21.21571], [101.83887, 21.20983], [101.84412, 21.25291], [101.74014, 21.30967], [101.74224, 21.48276], [101.7727, 21.51794], [101.7475, 21.5873], [101.80001, 21.57461], [101.83257, 21.61562], [101.74555, 21.72852], [101.7791, 21.83019], [101.62566, 21.96574], [101.57525, 22.13026], [101.60675, 22.13513], [101.53638, 22.24794], [101.56789, 22.28876], [101.61306, 22.27515], [101.68973, 22.46843], [101.7685, 22.50337], [101.86828, 22.38397], [101.90714, 22.38688], [101.91344, 22.44417], [101.98487, 22.42766], [102.03633, 22.46164], [102.1245, 22.43372], [102.14099, 22.40092], [102.16621, 22.43336], [102.26428, 22.41321], [102.25339, 22.4607], [102.41061, 22.64184], [102.38415, 22.67919], [102.42618, 22.69212], [102.46665, 22.77108], [102.51802, 22.77969], [102.57095, 22.7036], [102.60675, 22.73376], [102.8636, 22.60735], [102.9321, 22.48659], [103.0722, 22.44775], [103.07843, 22.50097], [103.17961, 22.55705], [103.15782, 22.59873], [103.18895, 22.64471], [103.28079, 22.68063], [103.32282, 22.8127], [103.43179, 22.75816], [103.43646, 22.70648], [103.52675, 22.59155], [103.57812, 22.65764], [103.56255, 22.69499], [103.64506, 22.79979], [103.87904, 22.56683], [103.93286, 22.52703], [103.94513, 22.52553], [103.95191, 22.5134], [103.96352, 22.50584], [103.96783, 22.51173], [103.97384, 22.50634], [103.99247, 22.51958], [104.01088, 22.51823], [104.03734, 22.72945], [104.11384, 22.80363], [104.27084, 22.8457], [104.25683, 22.76534], [104.35593, 22.69353], [104.47225, 22.75813], [104.58122, 22.85571], [104.60457, 22.81841], [104.65283, 22.83419], [104.72755, 22.81984], [104.77114, 22.90017], [104.84942, 22.93631], [104.86765, 22.95178], [104.8334, 23.01484], [104.79478, 23.12934], [104.87382, 23.12854], [104.87992, 23.17141], [104.91435, 23.18666], [104.9486, 23.17235], [104.96532, 23.20463], [104.98712, 23.19176], [105.07002, 23.26248], [105.11672, 23.25247], [105.17276, 23.28679], [105.22569, 23.27249], [105.32376, 23.39684], [105.40782, 23.28107], [105.42805, 23.30824], [105.49966, 23.20669], [105.56037, 23.16806], [105.57594, 23.075], [105.72382, 23.06641], [105.8726, 22.92756], [105.90119, 22.94168], [105.99568, 22.94178], [106.00179, 22.99049], [106.19705, 22.98475], [106.27022, 22.87722], [106.34961, 22.86718], [106.49749, 22.91164], [106.51306, 22.94891], [106.55976, 22.92311], [106.60179, 22.92884], [106.6516, 22.86862], [106.6734, 22.89587], [106.71387, 22.88296], [106.71128, 22.85982], [106.78422, 22.81532], [106.81271, 22.8226], [106.83685, 22.8098], [106.82404, 22.7881], [106.76293, 22.73491], [106.72321, 22.63606], [106.71698, 22.58432], [106.65316, 22.5757], [106.61269, 22.60301], [106.58395, 22.474], [106.55665, 22.46498], [106.57221, 22.37], [106.55976, 22.34841], [106.6516, 22.33977], [106.69986, 22.22309], [106.67495, 22.1885], [106.6983, 22.15102], [106.70142, 22.02409], [106.68274, 21.99811], [106.69276, 21.96013], [106.72551, 21.97923], [106.74345, 22.00965], [106.81038, 21.97934], [106.9178, 21.97357], [106.92714, 21.93459], [106.97228, 21.92592], [106.99252, 21.95191], [107.05634, 21.92303], [107.06101, 21.88982], [107.00964, 21.85948], [107.02615, 21.81981], [107.10771, 21.79879], [107.20734, 21.71493], [107.24625, 21.7077], [107.29296, 21.74674], [107.35834, 21.6672], [107.35989, 21.60063], [107.38636, 21.59774], [107.41593, 21.64839], [107.47197, 21.6672], [107.49532, 21.62958], [107.49065, 21.59774], [107.54047, 21.5934], [107.56537, 21.61945], [107.66967, 21.60787], [107.80355, 21.66141], [107.86114, 21.65128], [107.90006, 21.5905], [107.92652, 21.58906], [107.95232, 21.5388], [107.96774, 21.53601], [107.97074, 21.54072], [107.97383, 21.53961], [107.97932, 21.54503], [108.02926, 21.54997], [108.0569, 21.53604], [108.10003, 21.47338], [108.00365, 17.98159], [111.60491, 13.57105], [118.41371, 24.06775], [118.11703, 24.39734], [118.28244, 24.51231], [118.35291, 24.51645], [118.42453, 24.54644], [118.6333, 24.46259], [119.42295, 25.0886], [119.98511, 25.37624], [119.78816, 26.2348], [120.0693, 26.3959], [120.5128, 26.536], [121.03532, 26.8787], [123.5458, 31.01942], [122.29378, 31.76513], [122.80525, 33.30571], [123.85601, 37.49093], [123.90497, 38.79949], [124.17532, 39.8232], [124.23201, 39.9248], [124.35029, 39.95639], [124.37089, 40.03004], [124.3322, 40.05573], [124.38556, 40.11047], [124.40719, 40.13655], [124.86913, 40.45387], [125.71172, 40.85223], [125.76869, 40.87908], [126.00335, 40.92835], [126.242, 41.15454], [126.53189, 41.35206], [126.60631, 41.65565], [126.90729, 41.79955], [127.17841, 41.59714], [127.29712, 41.49473], [127.92943, 41.44291], [128.02633, 41.42103], [128.03311, 41.39232], [128.12967, 41.37931], [128.18546, 41.41279], [128.20061, 41.40895], [128.30716, 41.60322], [128.15119, 41.74568], [128.04487, 42.01769], [128.94007, 42.03537], [128.96068, 42.06657], [129.15178, 42.17224], [129.22285, 42.26491], [129.22423, 42.3553], [129.28541, 42.41574], [129.42882, 42.44702], [129.54701, 42.37254], [129.60482, 42.44461], [129.72541, 42.43739], [129.75294, 42.59409], [129.77183, 42.69435], [129.7835, 42.76521], [129.80719, 42.79218], [129.83277, 42.86746], [129.85261, 42.96494], [129.8865, 43.00395], [129.95082, 43.01051], [129.96409, 42.97306], [130.12957, 42.98361], [130.09764, 42.91425], [130.26095, 42.9027], [130.23068, 42.80125], [130.2385, 42.71127], [130.41826, 42.6011], [130.44361, 42.54849], [130.50123, 42.61636], [130.55143, 42.52158], [130.62107, 42.58413], [130.56576, 42.68925], [130.40213, 42.70788], [130.44361, 42.76205], [130.66524, 42.84753], [131.02438, 42.86518], [131.02668, 42.91246], [131.135, 42.94114], [131.10274, 43.04734], [131.20414, 43.13654], [131.19031, 43.21385], [131.30324, 43.39498], [131.29402, 43.46695], [131.19492, 43.53047], [131.21105, 43.82383], [131.26176, 43.94011], [131.23583, 43.96085], [131.25484, 44.03131], [131.30365, 44.04262], [131.1108, 44.70266], [130.95639, 44.85154], [131.48415, 44.99513], [131.68466, 45.12374], [131.66852, 45.2196], [131.76532, 45.22609], [131.86903, 45.33636], [131.99417, 45.2567], [132.83978, 45.05916], [132.96373, 45.0212], [133.12293, 45.1332], [133.09279, 45.25693], [133.19419, 45.51913], [133.41083, 45.57723], [133.48457, 45.86203], [133.60442, 45.90053], [133.67569, 45.9759], [133.72695, 46.05576], [133.68047, 46.14697], [133.88097, 46.25066], [133.91496, 46.4274], [133.84104, 46.46681], [134.03538, 46.75668], [134.20016, 47.33458], [134.50898, 47.4812], [134.7671, 47.72051], [134.55508, 47.98651], [134.67098, 48.1564], [134.75328, 48.36763], [134.49516, 48.42884], [132.66989, 47.96491], [132.57309, 47.71741], [131.90448, 47.68011], [131.2635, 47.73325], [131.09871, 47.6852], [130.95985, 47.6957], [130.90915, 47.90623], [130.65103, 48.10052], [130.84462, 48.30942], [130.52147, 48.61745], [130.66946, 48.88251], [130.43232, 48.90844], [130.2355, 48.86741], [129.85416, 49.11067], [129.67598, 49.29596], [129.50685, 49.42398], [129.40398, 49.44194], [129.35317, 49.3481], [129.23232, 49.40353], [129.11153, 49.36813], [128.72896, 49.58676], [127.83476, 49.5748], [127.53516, 49.84306], [127.49299, 50.01251], [127.60515, 50.23503], [127.37384, 50.28393], [127.36009, 50.43787], [127.28765, 50.46585], [127.36335, 50.58306], [127.28165, 50.72075], [127.14586, 50.91152], [126.93135, 51.0841], [126.90369, 51.3238], [126.68349, 51.70607], [126.44606, 51.98254], [126.558, 52.13738], [125.6131, 53.07229]], [[113.56865, 22.20973], [113.57123, 22.20416], [113.60504, 22.20464], [113.63011, 22.10782], [113.57191, 22.07696], [113.54839, 22.10909], [113.54942, 22.14519], [113.54093, 22.15497], [113.52659, 22.18271], [113.53552, 22.20607], [113.53301, 22.21235], [113.53591, 22.21369], [113.54093, 22.21314], [113.54333, 22.21688], [113.5508, 22.21672], [113.56865, 22.20973]], [[114.50148, 22.15017], [113.92195, 22.13873], [113.83338, 22.1826], [113.81621, 22.2163], [113.86771, 22.42972], [114.03113, 22.5065], [114.05438, 22.5026], [114.05729, 22.51104], [114.06272, 22.51617], [114.07267, 22.51855], [114.07817, 22.52997], [114.08606, 22.53276], [114.09048, 22.53716], [114.09692, 22.53435], [114.1034, 22.5352], [114.11181, 22.52878], [114.11656, 22.53415], [114.12665, 22.54003], [114.13823, 22.54319], [114.1482, 22.54091], [114.15123, 22.55163], [114.1597, 22.56041], [114.17247, 22.55944], [114.18338, 22.55444], [114.20655, 22.55706], [114.22185, 22.55343], [114.22888, 22.5436], [114.25154, 22.55977], [114.44998, 22.55977], [114.50148, 22.15017]]]] } },
+    { type: "Feature", properties: { wikidata: "Q22890", nameEn: "Ireland", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q23666", nameEn: "Great Britain", country: "GB", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q23681", nameEn: "Northern Cyprus", groups: ["Q644636", "145", "142"], driveSide: "left", callingCodes: ["90 392"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.67678, 35.03866], [33.67742, 35.05963], [33.68474, 35.06602], [33.69095, 35.06237], [33.70861, 35.07644], [33.7161, 35.07279], [33.70209, 35.04882], [33.71482, 35.03722], [33.73824, 35.05321], [33.76106, 35.04253], [33.78581, 35.05104], [33.82067, 35.07826], [33.84168, 35.06823], [33.8541, 35.07201], [33.87479, 35.08881], [33.87097, 35.09389], [33.87622, 35.10457], [33.87224, 35.12293], [33.88561, 35.12449], [33.88943, 35.12007], [33.88737, 35.11408], [33.89853, 35.11377], [33.91789, 35.08688], [33.90247, 35.07686], [33.92495, 35.06789], [33.94869, 35.07277], [33.99999, 35.07016], [34.23164, 35.1777], [35.51152, 36.10954], [32.82353, 35.70297], [32.46489, 35.48584], [32.60361, 35.16647], [32.64864, 35.19967], [32.70947, 35.18328], [32.70779, 35.14127], [32.85733, 35.07742], [32.86406, 35.1043], [32.94471, 35.09422], [33.01192, 35.15639], [33.08249, 35.17319], [33.11105, 35.15639], [33.15138, 35.19504], [33.27068, 35.16815], [33.3072, 35.16816], [33.31955, 35.18096], [33.35056, 35.18328], [33.34964, 35.17803], [33.35596, 35.17942], [33.35612, 35.17402], [33.36569, 35.17479], [33.3717, 35.1788], [33.37248, 35.18698], [33.38575, 35.2018], [33.4076, 35.20062], [33.41675, 35.16325], [33.46813, 35.10564], [33.48136, 35.0636], [33.47825, 35.04103], [33.45178, 35.02078], [33.45256, 35.00288], [33.47666, 35.00701], [33.48915, 35.06594], [33.53975, 35.08151], [33.57478, 35.06049], [33.567, 35.04803], [33.59658, 35.03635], [33.61215, 35.0527], [33.63765, 35.03869], [33.67678, 35.03866]]]] } },
+    { type: "Feature", properties: { wikidata: "Q25231", nameEn: "Svalbard", aliases: ["NO-21"], country: "NO", groups: ["SJ", "154", "150", "UN"], level: "subterritory", callingCodes: ["47 79"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-7.49892, 77.24208], [32.07813, 72.01005], [36.85549, 84.09565], [-7.49892, 77.24208]]]] } },
+    { type: "Feature", properties: { wikidata: "Q25263", nameEn: "Azores", aliases: ["PT-20"], country: "PT", groups: ["Q3320166", "Q2914565", "Q105472", "EU", "039", "150", "UN"], callingCodes: ["351"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-23.12984, 40.26428], [-36.43765, 41.39418], [-22.54767, 33.34416], [-23.12984, 40.26428]]]] } },
+    { type: "Feature", properties: { wikidata: "Q25359", nameEn: "Navassa Island", aliases: ["UM-76"], country: "US", groups: ["UM", "Q1352230", "029", "003", "419", "019", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-74.7289, 18.71009], [-75.71816, 18.46438], [-74.76465, 18.06252], [-74.7289, 18.71009]]]] } },
+    { type: "Feature", properties: { wikidata: "Q25396", nameEn: "Bonaire", aliases: ["BQ-BO", "NL-BQ1"], country: "NL", groups: ["Q1451600", "BQ", "029", "003", "419", "019", "UN"], level: "subterritory", callingCodes: ["599 7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-67.89186, 12.4116], [-68.90012, 12.62309], [-68.33524, 11.78151], [-68.01417, 11.77722], [-67.89186, 12.4116]]]] } },
+    { type: "Feature", properties: { wikidata: "Q25528", nameEn: "Saba", aliases: ["BQ-SA", "NL-BQ2"], country: "NL", groups: ["Q1451600", "BQ", "029", "003", "419", "019", "UN"], level: "subterritory", callingCodes: ["599 4"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.07669, 17.79659], [-63.81314, 17.95045], [-63.22932, 17.32592], [-63.07669, 17.79659]]]] } },
+    { type: "Feature", properties: { wikidata: "Q26180", nameEn: "Sint Eustatius", aliases: ["BQ-SE", "NL-BQ3"], country: "NL", groups: ["Q1451600", "BQ", "029", "003", "419", "019", "UN"], level: "subterritory", callingCodes: ["599 3"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.07669, 17.79659], [-63.34999, 16.94218], [-62.76692, 17.64353], [-63.07669, 17.79659]]]] } },
+    { type: "Feature", properties: { wikidata: "Q26253", nameEn: "Madeira", aliases: ["PT-30"], country: "PT", groups: ["Q3320166", "Q2914565", "Q105472", "EU", "039", "150", "UN"], callingCodes: ["351"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-19.30302, 33.65304], [-16.04789, 29.65076], [-11.68307, 33.12333], [-19.30302, 33.65304]]]] } },
+    { type: "Feature", properties: { wikidata: "Q26927", nameEn: "Lakshadweep", aliases: ["IN-LD"], country: "IN", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["91"] }, geometry: { type: "MultiPolygon", coordinates: [[[[67.64074, 11.57295], [76.59015, 5.591], [72.67494, 13.58102], [67.64074, 11.57295]]]] } },
+    { type: "Feature", properties: { wikidata: "Q27329", nameEn: "Asian Russia", country: "RU", groups: ["142", "UN"], callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-179.99933, 64.74703], [-172.76104, 63.77445], [-169.03888, 65.48473], [-168.95635, 65.98512], [-168.25765, 71.99091], [-179.9843, 71.90735], [-179.99933, 64.74703]]], [[[59.99809, 51.98263], [60.19925, 51.99173], [60.48915, 52.15175], [60.72581, 52.15538], [60.78201, 52.22067], [61.05417, 52.35096], [60.98021, 52.50068], [60.84709, 52.52228], [60.84118, 52.63912], [60.71693, 52.66245], [60.71989, 52.75923], [61.05842, 52.92217], [61.23462, 53.03227], [62.0422, 52.96105], [62.12799, 52.99133], [62.14574, 53.09626], [61.19024, 53.30536], [61.14291, 53.41481], [61.29082, 53.50992], [61.37957, 53.45887], [61.57185, 53.50112], [61.55706, 53.57144], [60.90626, 53.62937], [61.22574, 53.80268], [61.14283, 53.90063], [60.99796, 53.93699], [61.26863, 53.92797], [61.3706, 54.08464], [61.47603, 54.08048], [61.56941, 53.95703], [61.65318, 54.02445], [62.03913, 53.94768], [62.00966, 54.04134], [62.38535, 54.03961], [62.45931, 53.90737], [62.56876, 53.94047], [62.58651, 54.05871], [63.80604, 54.27079], [63.91224, 54.20013], [64.02715, 54.22679], [63.97686, 54.29763], [64.97216, 54.4212], [65.11033, 54.33028], [65.24663, 54.35721], [65.20174, 54.55216], [68.21308, 54.98645], [68.26661, 55.09226], [68.19206, 55.18823], [68.90865, 55.38148], [69.34224, 55.36344], [69.74917, 55.35545], [70.19179, 55.1476], [70.76493, 55.3027], [70.96009, 55.10558], [71.08288, 54.71253], [71.24185, 54.64965], [71.08706, 54.33376], [71.10379, 54.13326], [71.96141, 54.17736], [72.17477, 54.36303], [72.43415, 53.92685], [72.71026, 54.1161], [73.37963, 53.96132], [73.74778, 54.07194], [73.68921, 53.86522], [73.25412, 53.61532], [73.39218, 53.44623], [75.07405, 53.80831], [75.43398, 53.98652], [75.3668, 54.07439], [76.91052, 54.4677], [76.82266, 54.1798], [76.44076, 54.16017], [76.54243, 53.99329], [77.90383, 53.29807], [79.11255, 52.01171], [80.08138, 50.77658], [80.4127, 50.95581], [80.44819, 51.20855], [80.80318, 51.28262], [81.16999, 51.15662], [81.06091, 50.94833], [81.41248, 50.97524], [81.46581, 50.77658], [81.94999, 50.79307], [82.55443, 50.75412], [83.14607, 51.00796], [83.8442, 50.87375], [84.29385, 50.27257], [84.99198, 50.06793], [85.24047, 49.60239], [86.18709, 49.50259], [86.63674, 49.80136], [86.79056, 49.74787], [86.61307, 49.60239], [86.82606, 49.51796], [87.03071, 49.25142], [87.31465, 49.23603], [87.28386, 49.11626], [87.478, 49.07403], [87.48983, 49.13794], [87.81333, 49.17354], [87.98977, 49.18147], [88.15543, 49.30314], [88.17223, 49.46934], [88.42449, 49.48821], [88.82499, 49.44808], [89.70687, 49.72535], [89.59711, 49.90851], [91.86048, 50.73734], [92.07173, 50.69585], [92.44714, 50.78762], [93.01109, 50.79001], [92.99595, 50.63183], [94.30823, 50.57498], [94.39258, 50.22193], [94.49477, 50.17832], [94.6121, 50.04239], [94.97166, 50.04725], [95.02465, 49.96941], [95.74757, 49.97915], [95.80056, 50.04239], [96.97388, 49.88413], [97.24639, 49.74737], [97.56811, 49.84265], [97.56432, 49.92801], [97.76871, 49.99861], [97.85197, 49.91339], [98.29481, 50.33561], [98.31373, 50.4996], [98.06393, 50.61262], [97.9693, 50.78044], [98.01472, 50.86652], [97.83305, 51.00248], [98.05257, 51.46696], [98.22053, 51.46579], [98.33222, 51.71832], [98.74142, 51.8637], [98.87768, 52.14563], [99.27888, 51.96876], [99.75578, 51.90108], [99.89203, 51.74903], [100.61116, 51.73028], [101.39085, 51.45753], [101.5044, 51.50467], [102.14032, 51.35566], [102.32194, 50.67982], [102.71178, 50.38873], [103.70343, 50.13952], [105.32528, 50.4648], [106.05562, 50.40582], [106.07865, 50.33474], [106.47156, 50.31909], [106.49628, 50.32436], [106.51122, 50.34408], [106.58373, 50.34044], [106.80326, 50.30177], [107.00007, 50.1977], [107.1174, 50.04239], [107.36407, 49.97612], [107.96116, 49.93191], [107.95387, 49.66659], [108.27937, 49.53167], [108.53969, 49.32325], [109.18017, 49.34709], [109.51325, 49.22859], [110.24373, 49.16676], [110.39891, 49.25083], [110.64493, 49.1816], [113.02647, 49.60772], [113.20216, 49.83356], [114.325, 50.28098], [114.9703, 50.19254], [115.26068, 49.97367], [115.73602, 49.87688], [116.22402, 50.04477], [116.62502, 49.92919], [116.71193, 49.83813], [117.27597, 49.62544], [117.48208, 49.62324], [117.82343, 49.52696], [118.61623, 49.93809], [119.11003, 50.00276], [119.27996, 50.13348], [119.38598, 50.35162], [119.13553, 50.37412], [120.10963, 51.671], [120.65907, 51.93544], [120.77337, 52.20805], [120.61346, 52.32447], [120.71673, 52.54099], [120.46454, 52.63811], [120.04049, 52.58773], [120.0451, 52.7359], [120.85633, 53.28499], [121.39213, 53.31888], [122.35063, 53.49565], [122.85966, 53.47395], [123.26989, 53.54843], [123.86158, 53.49391], [124.46078, 53.21881], [125.17522, 53.20225], [125.6131, 53.07229], [126.558, 52.13738], [126.44606, 51.98254], [126.68349, 51.70607], [126.90369, 51.3238], [126.93135, 51.0841], [127.14586, 50.91152], [127.28165, 50.72075], [127.36335, 50.58306], [127.28765, 50.46585], [127.36009, 50.43787], [127.37384, 50.28393], [127.60515, 50.23503], [127.49299, 50.01251], [127.53516, 49.84306], [127.83476, 49.5748], [128.72896, 49.58676], [129.11153, 49.36813], [129.23232, 49.40353], [129.35317, 49.3481], [129.40398, 49.44194], [129.50685, 49.42398], [129.67598, 49.29596], [129.85416, 49.11067], [130.2355, 48.86741], [130.43232, 48.90844], [130.66946, 48.88251], [130.52147, 48.61745], [130.84462, 48.30942], [130.65103, 48.10052], [130.90915, 47.90623], [130.95985, 47.6957], [131.09871, 47.6852], [131.2635, 47.73325], [131.90448, 47.68011], [132.57309, 47.71741], [132.66989, 47.96491], [134.49516, 48.42884], [134.75328, 48.36763], [134.67098, 48.1564], [134.55508, 47.98651], [134.7671, 47.72051], [134.50898, 47.4812], [134.20016, 47.33458], [134.03538, 46.75668], [133.84104, 46.46681], [133.91496, 46.4274], [133.88097, 46.25066], [133.68047, 46.14697], [133.72695, 46.05576], [133.67569, 45.9759], [133.60442, 45.90053], [133.48457, 45.86203], [133.41083, 45.57723], [133.19419, 45.51913], [133.09279, 45.25693], [133.12293, 45.1332], [132.96373, 45.0212], [132.83978, 45.05916], [131.99417, 45.2567], [131.86903, 45.33636], [131.76532, 45.22609], [131.66852, 45.2196], [131.68466, 45.12374], [131.48415, 44.99513], [130.95639, 44.85154], [131.1108, 44.70266], [131.30365, 44.04262], [131.25484, 44.03131], [131.23583, 43.96085], [131.26176, 43.94011], [131.21105, 43.82383], [131.19492, 43.53047], [131.29402, 43.46695], [131.30324, 43.39498], [131.19031, 43.21385], [131.20414, 43.13654], [131.10274, 43.04734], [131.135, 42.94114], [131.02668, 42.91246], [131.02438, 42.86518], [130.66524, 42.84753], [130.44361, 42.76205], [130.40213, 42.70788], [130.56576, 42.68925], [130.62107, 42.58413], [130.55143, 42.52158], [130.56835, 42.43281], [130.60805, 42.4317], [130.64181, 42.41422], [130.66367, 42.38024], [130.65022, 42.32281], [131.95041, 41.5445], [140.9182, 45.92937], [145.82343, 44.571], [145.23667, 43.76813], [153.94307, 38.42848], [180, 62.52334], [180, 71.53642], [155.31937, 81.93282], [76.13964, 83.37843], [64.18965, 69.94255], [66.1708, 67.61252], [61.98014, 65.72191], [60.74386, 64.95767], [59.63945, 64.78384], [59.80579, 64.13948], [59.24834, 63.01859], [59.61398, 62.44915], [59.36223, 61.3882], [59.50685, 60.91162], [58.3853, 59.487], [59.15636, 59.14682], [59.40376, 58.45822], [58.71104, 58.07475], [58.81412, 57.71602], [58.13789, 57.68097], [58.07604, 57.08308], [57.28024, 56.87898], [57.51527, 56.08729], [59.28419, 56.15739], [59.49035, 55.60486], [58.81825, 55.03378], [57.25137, 55.26262], [57.14829, 54.84204], [57.95234, 54.39672], [59.95217, 54.85853], [59.70487, 54.14846], [58.94336, 53.953], [58.79644, 52.43392], [59.22409, 52.28437], [59.25033, 52.46803], [60.17516, 52.39457], [60.17253, 52.25814], [59.91279, 52.06924], [59.99809, 51.98263]]]] } },
+    { type: "Feature", properties: { wikidata: "Q34366", nameEn: "Tasmania", aliases: ["AU-TAS"], country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[123.64533, -39.13605], [159.69067, -56.28945], [159.74028, -39.1978], [123.64533, -39.13605]]]] } },
+    { type: "Feature", properties: { wikidata: "Q34497", nameEn: "Saint Helena", aliases: ["SH-HL"], country: "GB", groups: ["SH", "BOTS", "011", "202", "002", "UN"], level: "subterritory", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["290"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.3824, -13.9131], [-6.17428, -19.07236], [-3.29308, -15.22647], [-8.3824, -13.9131]]]] } },
+    { type: "Feature", properties: { wikidata: "Q35657", nameEn: "US States", country: "US", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q36117", nameEn: "Borneo", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q36678", nameEn: "West Bank", country: "PS", groups: ["145", "142"], callingCodes: ["970"] }, geometry: { type: "MultiPolygon", coordinates: [[[[35.47672, 31.49578], [35.55941, 31.76535], [35.52758, 31.9131], [35.54375, 31.96587], [35.52012, 32.04076], [35.57111, 32.21877], [35.55807, 32.38674], [35.42078, 32.41562], [35.41048, 32.43706], [35.41598, 32.45593], [35.42034, 32.46009], [35.40224, 32.50136], [35.35212, 32.52047], [35.30685, 32.51024], [35.29306, 32.50947], [35.25049, 32.52453], [35.2244, 32.55289], [35.15937, 32.50466], [35.10882, 32.4757], [35.10024, 32.47856], [35.09236, 32.47614], [35.08564, 32.46948], [35.07059, 32.4585], [35.05423, 32.41754], [35.05311, 32.4024], [35.0421, 32.38242], [35.05142, 32.3667], [35.04243, 32.35008], [35.01772, 32.33863], [35.01119, 32.28684], [35.02939, 32.2671], [35.01841, 32.23981], [34.98885, 32.20758], [34.95703, 32.19522], [34.96009, 32.17503], [34.99039, 32.14626], [34.98507, 32.12606], [34.99437, 32.10962], [34.9863, 32.09551], [35.00261, 32.027], [34.98682, 31.96935], [35.00124, 31.93264], [35.03489, 31.92448], [35.03978, 31.89276], [35.03489, 31.85919], [34.99712, 31.85569], [34.9724, 31.83352], [35.01978, 31.82944], [35.05617, 31.85685], [35.07677, 31.85627], [35.14174, 31.81325], [35.18603, 31.80901], [35.18169, 31.82542], [35.19461, 31.82687], [35.21469, 31.81835], [35.216, 31.83894], [35.21128, 31.863], [35.20381, 31.86716], [35.20673, 31.88151], [35.20791, 31.8821], [35.20945, 31.8815], [35.21016, 31.88237], [35.21276, 31.88153], [35.2136, 31.88241], [35.22014, 31.88264], [35.22294, 31.87889], [35.22567, 31.86745], [35.22817, 31.8638], [35.2249, 31.85433], [35.2304, 31.84222], [35.24816, 31.8458], [35.25753, 31.8387], [35.251, 31.83085], [35.26404, 31.82567], [35.25573, 31.81362], [35.26058, 31.79064], [35.25225, 31.7678], [35.26319, 31.74846], [35.25182, 31.73945], [35.24981, 31.72543], [35.2438, 31.7201], [35.24315, 31.71244], [35.23972, 31.70896], [35.22392, 31.71899], [35.21937, 31.71578], [35.20538, 31.72388], [35.18023, 31.72067], [35.16478, 31.73242], [35.15474, 31.73352], [35.15119, 31.73634], [35.13931, 31.73012], [35.12933, 31.7325], [35.11895, 31.71454], [35.10782, 31.71594], [35.08226, 31.69107], [35.00879, 31.65426], [34.95249, 31.59813], [34.9415, 31.55601], [34.94356, 31.50743], [34.93258, 31.47816], [34.89756, 31.43891], [34.87833, 31.39321], [34.88932, 31.37093], [34.92571, 31.34337], [35.02459, 31.35979], [35.13033, 31.3551], [35.22921, 31.37445], [35.39675, 31.49572], [35.47672, 31.49578]]]] } },
+    { type: "Feature", properties: { wikidata: "Q37362", nameEn: "Akrotiri and Dhekelia", aliases: ["SBA"], country: "GB" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q38095", nameEn: "Gal\xE1pagos Islands", aliases: ["EC-W"], country: "EC", groups: ["005", "419", "019", "UN"], callingCodes: ["593"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-93.12365, 2.64343], [-92.46744, -2.52874], [-87.07749, -0.8849], [-93.12365, 2.64343]]]] } },
+    { type: "Feature", properties: { wikidata: "Q39760", nameEn: "Gaza Strip", country: "PS", groups: ["145", "142"], callingCodes: ["970"] }, geometry: { type: "MultiPolygon", coordinates: [[[[34.052, 31.46619], [34.21853, 31.32363], [34.23572, 31.2966], [34.24012, 31.29591], [34.26742, 31.21998], [34.29417, 31.24194], [34.36523, 31.28963], [34.37381, 31.30598], [34.36505, 31.36404], [34.40077, 31.40926], [34.48892, 31.48365], [34.56797, 31.54197], [34.48681, 31.59711], [34.29262, 31.70393], [34.052, 31.46619]]]] } },
+    { type: "Feature", properties: { wikidata: "Q40888", nameEn: "Andaman and Nicobar Islands", aliases: ["IN-AN"], country: "IN", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["91"] }, geometry: { type: "MultiPolygon", coordinates: [[[[94.42132, 5.96581], [94.6371, 13.81803], [86.7822, 13.41052], [94.42132, 5.96581]]]] } },
+    { type: "Feature", properties: { wikidata: "Q41684", nameEn: "Stewart Island", country: "NZ", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[166.59185, -47.61313], [169.70504, -47.56021], [167.52103, -46.41337], [166.59185, -47.61313]]]] } },
+    { type: "Feature", properties: { wikidata: "Q43296", nameEn: "Wake Island", aliases: ["WK", "WAK", "WKUM", "872", "UM-79"], country: "US", groups: ["UM", "Q1352230", "057", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[167.34779, 18.97692], [166.67967, 20.14834], [165.82549, 18.97692], [167.34779, 18.97692]]]] } },
+    { type: "Feature", properties: { wikidata: "Q46275", nameEn: "New Zealand Subantarctic Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[164.30551, -47.88072], [161.96603, -56.07661], [179.49541, -50.04657], [179.49541, -47.2902], [169.91032, -47.66283], [164.30551, -47.88072]]]] } },
+    { type: "Feature", properties: { wikidata: "Q46395", nameEn: "British Overseas Territories", aliases: ["BOTS", "UKOTS"], country: "GB", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q46772", nameEn: "Kerguelen Islands", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[61.9216, -49.39746], [70.67507, -51.14192], [74.25129, -45.45074], [61.9216, -49.39746]]]] } },
+    { type: "Feature", properties: { wikidata: "Q46879", nameEn: "Baker Island", aliases: ["UM-81"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-175.33482, -1.40631], [-175.31323, 0.5442], [-177.91421, 0.39582], [-175.33482, -1.40631]]]] } },
+    { type: "Feature", properties: { wikidata: "Q47863", nameEn: "Midway Atoll", aliases: ["MI", "MID", "MIUM", "488", "UM-71"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-176.29741, 29.09786], [-177.77531, 29.29793], [-177.5224, 27.7635], [-176.29741, 29.09786]]]] } },
+    { type: "Feature", properties: { wikidata: "Q62218", nameEn: "Jarvis Island", aliases: ["UM-86"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-160.42921, -1.4364], [-159.12443, 0.19975], [-160.38779, 0.30331], [-160.42921, -1.4364]]]] } },
+    { type: "Feature", properties: { wikidata: "Q105472", nameEn: "Macaronesia", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q114935", nameEn: "Kermadec Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-174.40891, -29.09438], [-180, -24.21376], [-179.96512, -35.00791], [-174.40891, -29.09438]]]] } },
+    { type: "Feature", properties: { wikidata: "Q115459", nameEn: "Chatham Islands", aliases: ["NZ-CIT"], country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-179.93224, -45.18423], [-172.47015, -45.17912], [-176.30998, -41.38382], [-179.93224, -45.18423]]]] } },
+    { type: "Feature", properties: { wikidata: "Q118863", nameEn: "North Island", country: "NZ", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[179.49541, -47.2902], [179.49541, -36.79303], [174.17679, -32.62487], [170.27492, -36.38133], [174.58663, -40.80446], [174.46634, -41.55028], [179.49541, -47.2902]]]] } },
+    { type: "Feature", properties: { wikidata: "Q120755", nameEn: "South Island", country: "NZ", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169.70504, -47.56021], [179.49541, -47.2902], [174.46634, -41.55028], [174.58663, -40.80446], [170.27492, -36.38133], [166.56976, -39.94841], [164.8365, -46.0205], [167.52103, -46.41337], [169.70504, -47.56021]]]] } },
+    { type: "Feature", properties: { wikidata: "Q123076", nameEn: "Palmyra Atoll", aliases: ["UM-95"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-161.06795, 5.2462], [-161.0731, 7.1291], [-163.24478, 5.24198], [-161.06795, 5.2462]]]] } },
+    { type: "Feature", properties: { wikidata: "Q130574", nameEn: "Chafarinas Islands", country: "ES", groups: ["EU", "Q191011", "015", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.40316, 35.16893], [-2.43262, 35.20652], [-2.45965, 35.16527], [-2.40316, 35.16893]]]] } },
+    { type: "Feature", properties: { wikidata: "Q130895", nameEn: "Kingman Reef", aliases: ["UM-89"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-161.0731, 7.1291], [-163.16627, 7.15036], [-163.24478, 5.24198], [-161.0731, 7.1291]]]] } },
+    { type: "Feature", properties: { wikidata: "Q131008", nameEn: "Johnston Atoll", aliases: ["JT", "JTN", "JTUM", "396", "UM-67"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-170.65691, 16.57199], [-168.87689, 16.01159], [-169.2329, 17.4933], [-170.65691, 16.57199]]]] } },
+    { type: "Feature", properties: { wikidata: "Q131305", nameEn: "Howland Island", aliases: ["UM-84"], country: "US", groups: ["UM", "Q1352230", "061", "009", "UN"], level: "subterritory", roadSpeedUnit: "mph", roadHeightUnit: "ft" }, geometry: { type: "MultiPolygon", coordinates: [[[[-177.91421, 0.39582], [-175.31323, 0.5442], [-176.74464, 2.28109], [-177.91421, 0.39582]]]] } },
+    { type: "Feature", properties: { wikidata: "Q133888", nameEn: "Ashmore and Cartier Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[123.7463, -11.1783], [120.6877, -13.59408], [125.29076, -12.33139], [123.7463, -11.1783]]]] } },
+    { type: "Feature", properties: { wikidata: "Q153732", nameEn: "Mariana Islands", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q172216", nameEn: "Coral Sea Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[159.77159, -28.41151], [156.73836, -14.50464], [145.2855, -9.62524], [147.69992, -17.5933], [152.93188, -20.92631], [154.02855, -24.43238], [159.77159, -28.41151]]]] } },
+    { type: "Feature", properties: { wikidata: "Q179313", nameEn: "Alderney", country: "GB", groups: ["GG", "830", "Q185086", "154", "150", "UN"], level: "subterritory", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01481"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.36485, 49.48223], [-2.09454, 49.46288], [-2.02963, 49.91866], [-2.49556, 49.79012], [-2.36485, 49.48223]]]] } },
+    { type: "Feature", properties: { wikidata: "Q185086", nameEn: "Crown Dependencies", country: "GB", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q190571", nameEn: "Scattered Islands", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[53.53458, -16.36909], [54.96649, -16.28353], [54.61476, -15.02273], [53.53458, -16.36909]]], [[[38.55969, -20.75596], [40.68027, -23.38889], [43.52893, -15.62903], [38.55969, -20.75596]]], [[[47.03092, -11.05648], [47.11593, -12.08552], [47.96702, -11.46447], [47.03092, -11.05648]]]] } },
+    { type: "Feature", properties: { wikidata: "Q191011", nameEn: "Plazas de soberan\xEDa", country: "ES" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q191146", nameEn: "Pe\xF1\xF3n de V\xE9lez de la Gomera", country: "ES", groups: ["EU", "Q191011", "015", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-4.30191, 35.17419], [-4.30112, 35.17058], [-4.29436, 35.17149], [-4.30191, 35.17419]]]] } },
+    { type: "Feature", properties: { wikidata: "Q201698", nameEn: "Crozet Islands", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[55.03425, -43.65017], [46.31615, -46.28749], [54.5587, -47.93013], [55.03425, -43.65017]]]] } },
+    { type: "Feature", properties: { wikidata: "Q578170", nameEn: "Contiguous United States", aliases: ["CONUS"], country: "US", groups: ["Q35657", "021", "003", "019", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-97.13927, 25.96583], [-96.92418, 25.97377], [-80.57035, 24.0565], [-78.91214, 27.76553], [-61.98255, 37.34815], [-67.16117, 44.20069], [-66.93432, 44.82597], [-66.96824, 44.83078], [-66.98249, 44.87071], [-66.96824, 44.90965], [-67.0216, 44.95333], [-67.11316, 45.11176], [-67.15965, 45.16179], [-67.19603, 45.16771], [-67.20349, 45.1722], [-67.22751, 45.16344], [-67.27039, 45.1934], [-67.29748, 45.18173], [-67.29754, 45.14865], [-67.34927, 45.122], [-67.48201, 45.27351], [-67.42394, 45.37969], [-67.50578, 45.48971], [-67.42144, 45.50584], [-67.43815, 45.59162], [-67.6049, 45.60725], [-67.80705, 45.69528], [-67.80653, 45.80022], [-67.75654, 45.82324], [-67.80961, 45.87531], [-67.75196, 45.91814], [-67.78111, 45.9392], [-67.78578, 47.06473], [-67.87993, 47.10377], [-67.94843, 47.1925], [-68.23244, 47.35712], [-68.37458, 47.35851], [-68.38332, 47.28723], [-68.57914, 47.28431], [-68.60575, 47.24659], [-68.70125, 47.24399], [-68.89222, 47.1807], [-69.05039, 47.2456], [-69.05073, 47.30076], [-69.05148, 47.42012], [-69.22119, 47.46461], [-69.99966, 46.69543], [-70.05812, 46.41768], [-70.18547, 46.35357], [-70.29078, 46.18832], [-70.23855, 46.1453], [-70.31025, 45.96424], [-70.24694, 45.95138], [-70.25976, 45.89675], [-70.41523, 45.79497], [-70.38934, 45.73215], [-70.54019, 45.67291], [-70.68516, 45.56964], [-70.72651, 45.49771], [-70.62518, 45.42286], [-70.65383, 45.37592], [-70.78372, 45.43269], [-70.82638, 45.39828], [-70.80236, 45.37444], [-70.84816, 45.22698], [-70.89864, 45.2398], [-70.91169, 45.29849], [-70.95193, 45.33895], [-71.0107, 45.34819], [-71.01866, 45.31573], [-71.08364, 45.30623], [-71.14568, 45.24128], [-71.19723, 45.25438], [-71.22338, 45.25184], [-71.29371, 45.29996], [-71.37133, 45.24624], [-71.44252, 45.2361], [-71.40364, 45.21382], [-71.42778, 45.12624], [-71.48735, 45.07784], [-71.50067, 45.01357], [-73.35025, 45.00942], [-74.32699, 44.99029], [-74.66689, 45.00646], [-74.8447, 45.00606], [-74.99101, 44.98051], [-75.01363, 44.95608], [-75.2193, 44.87821], [-75.41441, 44.76614], [-75.76813, 44.51537], [-75.8217, 44.43176], [-75.95947, 44.34463], [-76.00018, 44.34896], [-76.16285, 44.28262], [-76.1664, 44.23051], [-76.244, 44.19643], [-76.31222, 44.19894], [-76.35324, 44.13493], [-76.43859, 44.09393], [-76.79706, 43.63099], [-79.25796, 43.54052], [-79.06921, 43.26183], [-79.05512, 43.25375], [-79.05544, 43.21224], [-79.05002, 43.20133], [-79.05384, 43.17418], [-79.04652, 43.16396], [-79.0427, 43.13934], [-79.06881, 43.12029], [-79.05671, 43.10937], [-79.07486, 43.07845], [-79.01055, 43.06659], [-78.99941, 43.05612], [-79.02424, 43.01983], [-79.02074, 42.98444], [-78.98126, 42.97], [-78.96312, 42.95509], [-78.93224, 42.95229], [-78.90905, 42.93022], [-78.90712, 42.89733], [-78.93684, 42.82887], [-82.67862, 41.67615], [-83.11184, 41.95671], [-83.14962, 42.04089], [-83.12724, 42.2376], [-83.09837, 42.28877], [-83.07837, 42.30978], [-83.02253, 42.33045], [-82.82964, 42.37355], [-82.64242, 42.55594], [-82.58873, 42.54984], [-82.57583, 42.5718], [-82.51858, 42.611], [-82.51063, 42.66025], [-82.46613, 42.76615], [-82.4826, 42.8068], [-82.45331, 42.93139], [-82.4253, 42.95423], [-82.4146, 42.97626], [-82.42469, 42.992], [-82.48419, 45.30225], [-83.59589, 45.82131], [-83.43746, 45.99749], [-83.57017, 46.105], [-83.83329, 46.12169], [-83.90453, 46.05922], [-83.95399, 46.05634], [-84.1096, 46.23987], [-84.09756, 46.25512], [-84.11615, 46.2681], [-84.11254, 46.32329], [-84.13451, 46.39218], [-84.11196, 46.50248], [-84.12885, 46.53068], [-84.17723, 46.52753], [-84.1945, 46.54061], [-84.2264, 46.53337], [-84.26351, 46.49508], [-84.29893, 46.49127], [-84.34174, 46.50683], [-84.42101, 46.49853], [-84.4481, 46.48972], [-84.47607, 46.45225], [-84.55635, 46.45974], [-84.85871, 46.88881], [-88.37033, 48.30586], [-89.48837, 48.01412], [-89.57972, 48.00023], [-89.77248, 48.02607], [-89.89974, 47.98109], [-90.07418, 48.11043], [-90.56312, 48.09488], [-90.56444, 48.12184], [-90.75045, 48.09143], [-90.87588, 48.2484], [-91.08016, 48.18096], [-91.25025, 48.08522], [-91.43248, 48.04912], [-91.45829, 48.07454], [-91.58025, 48.04339], [-91.55649, 48.10611], [-91.70451, 48.11805], [-91.71231, 48.19875], [-91.86125, 48.21278], [-91.98929, 48.25409], [-92.05339, 48.35958], [-92.14732, 48.36578], [-92.202, 48.35252], [-92.26662, 48.35651], [-92.30939, 48.31251], [-92.27167, 48.25046], [-92.37185, 48.22259], [-92.48147, 48.36609], [-92.45588, 48.40624], [-92.50712, 48.44921], [-92.65606, 48.43471], [-92.71323, 48.46081], [-92.69927, 48.49573], [-92.62747, 48.50278], [-92.6342, 48.54133], [-92.7287, 48.54005], [-92.94973, 48.60866], [-93.25391, 48.64266], [-93.33946, 48.62787], [-93.3712, 48.60599], [-93.39758, 48.60364], [-93.40693, 48.60948], [-93.44472, 48.59147], [-93.47022, 48.54357], [-93.66382, 48.51845], [-93.79267, 48.51631], [-93.80939, 48.52439], [-93.80676, 48.58232], [-93.83288, 48.62745], [-93.85769, 48.63284], [-94.23215, 48.65202], [-94.25104, 48.65729], [-94.25172, 48.68404], [-94.27153, 48.70232], [-94.4174, 48.71049], [-94.44258, 48.69223], [-94.53826, 48.70216], [-94.54885, 48.71543], [-94.58903, 48.71803], [-94.69335, 48.77883], [-94.69669, 48.80918], [-94.70486, 48.82365], [-94.70087, 48.8339], [-94.687, 48.84077], [-94.75017, 49.09931], [-94.77355, 49.11998], [-94.82487, 49.29483], [-94.8159, 49.32299], [-94.85381, 49.32492], [-94.95681, 49.37035], [-94.99532, 49.36579], [-95.01419, 49.35647], [-95.05825, 49.35311], [-95.12903, 49.37056], [-95.15357, 49.384], [-95.15355, 48.9996], [-123.32163, 49.00419], [-123.0093, 48.83186], [-123.0093, 48.76586], [-123.26565, 48.6959], [-123.15614, 48.35395], [-123.50039, 48.21223], [-125.03842, 48.53282], [-133.98258, 38.06389], [-118.48109, 32.5991], [-117.1243, 32.53427], [-115.88053, 32.63624], [-114.71871, 32.71894], [-114.76736, 32.64094], [-114.80584, 32.62028], [-114.81141, 32.55543], [-114.79524, 32.55731], [-114.82011, 32.49609], [-111.07523, 31.33232], [-108.20979, 31.33316], [-108.20899, 31.78534], [-106.529, 31.784], [-106.52266, 31.77509], [-106.51251, 31.76922], [-106.50962, 31.76155], [-106.50111, 31.75714], [-106.48815, 31.74769], [-106.47298, 31.75054], [-106.46726, 31.75998], [-106.45244, 31.76523], [-106.43419, 31.75478], [-106.41773, 31.75196], [-106.38003, 31.73151], [-106.3718, 31.71165], [-106.34864, 31.69663], [-106.33419, 31.66303], [-106.30305, 31.62154], [-106.28084, 31.56173], [-106.24612, 31.54193], [-106.23711, 31.51262], [-106.20346, 31.46305], [-106.09025, 31.40569], [-106.00363, 31.39181], [-104.77674, 30.4236], [-104.5171, 29.64671], [-104.3969, 29.57105], [-104.39363, 29.55396], [-104.37752, 29.54255], [-103.15787, 28.93865], [-102.60596, 29.8192], [-101.47277, 29.7744], [-101.05686, 29.44738], [-101.01128, 29.36947], [-100.96725, 29.3477], [-100.94579, 29.34523], [-100.94056, 29.33371], [-100.87982, 29.296], [-100.79696, 29.24688], [-100.67294, 29.09744], [-100.63689, 28.90812], [-100.59809, 28.88197], [-100.52313, 28.75598], [-100.5075, 28.74066], [-100.51222, 28.70679], [-100.50029, 28.66117], [-99.55409, 27.61314], [-99.51478, 27.55836], [-99.52955, 27.49747], [-99.50208, 27.50021], [-99.48045, 27.49016], [-99.482, 27.47128], [-99.49744, 27.43746], [-99.53573, 27.30926], [-99.08477, 26.39849], [-99.03053, 26.41249], [-99.00546, 26.3925], [-98.35126, 26.15129], [-98.30491, 26.10475], [-98.27075, 26.09457], [-98.24603, 26.07191], [-97.97017, 26.05232], [-97.95155, 26.0625], [-97.66511, 26.01708], [-97.52025, 25.88518], [-97.49828, 25.89877], [-97.45669, 25.86874], [-97.42511, 25.83969], [-97.37332, 25.83854], [-97.35946, 25.92189], [-97.13927, 25.96583]]]] } },
+    { type: "Feature", properties: { wikidata: "Q620634", nameEn: "Bir Tawil", groups: ["015", "002"], level: "territory" }, geometry: { type: "MultiPolygon", coordinates: [[[[33.17563, 22.00405], [33.57251, 21.72406], [33.99686, 21.76784], [34.0765, 22.00501], [33.17563, 22.00405]]]] } },
+    { type: "Feature", properties: { wikidata: "Q639185", nameEn: "Peros Banhos", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[72.12587, -4.02588], [70.1848, -6.37445], [72.09518, -5.61768], [72.12587, -4.02588]]]] } },
+    { type: "Feature", properties: { wikidata: "Q644636", nameEn: "Cyprus", level: "sharedLandform" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q851132", nameEn: "New Zealand Outlying Islands", country: "NZ", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q875134", nameEn: "European Russia", country: "RU", groups: ["151", "150", "UN"], callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[18.57853, 55.25302], [19.64312, 54.45423], [19.8038, 54.44203], [20.63871, 54.3706], [21.41123, 54.32395], [22.79705, 54.36264], [22.7253, 54.41732], [22.70208, 54.45312], [22.67788, 54.532], [22.71293, 54.56454], [22.68021, 54.58486], [22.7522, 54.63525], [22.74225, 54.64339], [22.75467, 54.6483], [22.73397, 54.66604], [22.73631, 54.72952], [22.87317, 54.79492], [22.85083, 54.88711], [22.76422, 54.92521], [22.68723, 54.9811], [22.65451, 54.97037], [22.60075, 55.01863], [22.58907, 55.07085], [22.47688, 55.04408], [22.31562, 55.0655], [22.14267, 55.05345], [22.11697, 55.02131], [22.06087, 55.02935], [22.02582, 55.05078], [22.03984, 55.07888], [21.99543, 55.08691], [21.96505, 55.07353], [21.85521, 55.09493], [21.64954, 55.1791], [21.55605, 55.20311], [21.51095, 55.18507], [21.46766, 55.21115], [21.38446, 55.29348], [21.35465, 55.28427], [21.26425, 55.24456], [20.95181, 55.27994], [20.60454, 55.40986], [18.57853, 55.25302]]], [[[26.32936, 60.00121], [26.90044, 59.63819], [27.85643, 59.58538], [28.04187, 59.47017], [28.19061, 59.39962], [28.21137, 59.38058], [28.20537, 59.36491], [28.19284, 59.35791], [28.14215, 59.28934], [28.00689, 59.28351], [27.90911, 59.24353], [27.87978, 59.18097], [27.80482, 59.1116], [27.74429, 58.98351], [27.36366, 58.78381], [27.55489, 58.39525], [27.48541, 58.22615], [27.62393, 58.09462], [27.67282, 57.92627], [27.81841, 57.89244], [27.78526, 57.83963], [27.56689, 57.83356], [27.50171, 57.78842], [27.52615, 57.72843], [27.3746, 57.66834], [27.40393, 57.62125], [27.31919, 57.57672], [27.34698, 57.52242], [27.56832, 57.53728], [27.52453, 57.42826], [27.86101, 57.29402], [27.66511, 56.83921], [27.86101, 56.88204], [28.04768, 56.59004], [28.13526, 56.57989], [28.10069, 56.524], [28.19057, 56.44637], [28.16599, 56.37806], [28.23716, 56.27588], [28.15217, 56.16964], [28.30571, 56.06035], [28.36888, 56.05805], [28.37987, 56.11399], [28.43068, 56.09407], [28.5529, 56.11705], [28.68337, 56.10173], [28.63668, 56.07262], [28.73418, 55.97131], [29.08299, 56.03427], [29.21717, 55.98971], [29.44692, 55.95978], [29.3604, 55.75862], [29.51283, 55.70294], [29.61446, 55.77716], [29.80672, 55.79569], [29.97975, 55.87281], [30.12136, 55.8358], [30.27776, 55.86819], [30.30987, 55.83592], [30.48257, 55.81066], [30.51346, 55.78982], [30.51037, 55.76568], [30.63344, 55.73079], [30.67464, 55.64176], [30.72957, 55.66268], [30.7845, 55.58514], [30.86003, 55.63169], [30.93419, 55.6185], [30.95204, 55.50667], [30.90123, 55.46621], [30.93144, 55.3914], [30.8257, 55.3313], [30.81946, 55.27931], [30.87944, 55.28223], [30.97369, 55.17134], [31.02071, 55.06167], [31.00972, 55.02783], [30.94243, 55.03964], [30.9081, 55.02232], [30.95754, 54.98609], [30.93144, 54.9585], [30.81759, 54.94064], [30.8264, 54.90062], [30.75165, 54.80699], [30.95479, 54.74346], [30.97127, 54.71967], [31.0262, 54.70698], [30.98226, 54.68872], [30.99187, 54.67046], [31.19339, 54.66947], [31.21399, 54.63113], [31.08543, 54.50361], [31.22945, 54.46585], [31.3177, 54.34067], [31.30791, 54.25315], [31.57002, 54.14535], [31.89599, 54.0837], [31.88744, 54.03653], [31.85019, 53.91801], [31.77028, 53.80015], [31.89137, 53.78099], [32.12621, 53.81586], [32.36663, 53.7166], [32.45717, 53.74039], [32.50112, 53.68594], [32.40499, 53.6656], [32.47777, 53.5548], [32.74968, 53.45597], [32.73257, 53.33494], [32.51725, 53.28431], [32.40773, 53.18856], [32.15368, 53.07594], [31.82373, 53.10042], [31.787, 53.18033], [31.62496, 53.22886], [31.56316, 53.19432], [31.40523, 53.21406], [31.36403, 53.13504], [31.3915, 53.09712], [31.33519, 53.08805], [31.32283, 53.04101], [31.24147, 53.031], [31.35667, 52.97854], [31.592, 52.79011], [31.57277, 52.71613], [31.50406, 52.69707], [31.63869, 52.55361], [31.56316, 52.51518], [31.61397, 52.48843], [31.62084, 52.33849], [31.57971, 52.32146], [31.70735, 52.26711], [31.6895, 52.1973], [31.77877, 52.18636], [31.7822, 52.11406], [31.81722, 52.09955], [31.85018, 52.11305], [31.96141, 52.08015], [31.92159, 52.05144], [32.08813, 52.03319], [32.23331, 52.08085], [32.2777, 52.10266], [32.34044, 52.1434], [32.33083, 52.23685], [32.38988, 52.24946], [32.3528, 52.32842], [32.54781, 52.32423], [32.69475, 52.25535], [32.85405, 52.27888], [32.89937, 52.2461], [33.18913, 52.3754], [33.51323, 52.35779], [33.48027, 52.31499], [33.55718, 52.30324], [33.78789, 52.37204], [34.05239, 52.20132], [34.11199, 52.14087], [34.09413, 52.00835], [34.41136, 51.82793], [34.42922, 51.72852], [34.07765, 51.67065], [34.17599, 51.63253], [34.30562, 51.5205], [34.22048, 51.4187], [34.33446, 51.363], [34.23009, 51.26429], [34.31661, 51.23936], [34.38802, 51.2746], [34.6613, 51.25053], [34.6874, 51.18], [34.82472, 51.17483], [34.97304, 51.2342], [35.14058, 51.23162], [35.12685, 51.16191], [35.20375, 51.04723], [35.31774, 51.08434], [35.40837, 51.04119], [35.32598, 50.94524], [35.39307, 50.92145], [35.41367, 50.80227], [35.47704, 50.77274], [35.48116, 50.66405], [35.39464, 50.64751], [35.47463, 50.49247], [35.58003, 50.45117], [35.61711, 50.35707], [35.73659, 50.35489], [35.80388, 50.41356], [35.8926, 50.43829], [36.06893, 50.45205], [36.20763, 50.3943], [36.30101, 50.29088], [36.47817, 50.31457], [36.58371, 50.28563], [36.56655, 50.2413], [36.64571, 50.218], [36.69377, 50.26982], [36.91762, 50.34963], [37.08468, 50.34935], [37.48204, 50.46079], [37.47243, 50.36277], [37.62486, 50.29966], [37.62879, 50.24481], [37.61113, 50.21976], [37.75807, 50.07896], [37.79515, 50.08425], [37.90776, 50.04194], [38.02999, 49.94482], [38.02999, 49.90592], [38.21675, 49.98104], [38.18517, 50.08161], [38.32524, 50.08866], [38.35408, 50.00664], [38.65688, 49.97176], [38.68677, 50.00904], [38.73311, 49.90238], [38.90477, 49.86787], [38.9391, 49.79524], [39.1808, 49.88911], [39.27968, 49.75976], [39.44496, 49.76067], [39.59142, 49.73758], [39.65047, 49.61761], [39.84548, 49.56064], [40.13249, 49.61672], [40.16683, 49.56865], [40.03636, 49.52321], [40.03087, 49.45452], [40.1141, 49.38798], [40.14912, 49.37681], [40.18331, 49.34996], [40.22176, 49.25683], [40.01988, 49.1761], [39.93437, 49.05709], [39.6836, 49.05121], [39.6683, 48.99454], [39.71353, 48.98959], [39.72649, 48.9754], [39.74874, 48.98675], [39.78368, 48.91596], [39.98967, 48.86901], [40.03636, 48.91957], [40.08168, 48.87443], [39.97182, 48.79398], [39.79466, 48.83739], [39.73104, 48.7325], [39.71765, 48.68673], [39.67226, 48.59368], [39.79764, 48.58668], [39.84548, 48.57821], [39.86196, 48.46633], [39.88794, 48.44226], [39.94847, 48.35055], [39.84136, 48.33321], [39.84273, 48.30947], [39.90041, 48.3049], [39.91465, 48.26743], [39.95248, 48.29972], [39.9693, 48.29904], [39.97325, 48.31399], [39.99241, 48.31768], [40.00752, 48.22445], [39.94847, 48.22811], [39.83724, 48.06501], [39.88256, 48.04482], [39.77544, 48.04206], [39.82213, 47.96396], [39.73935, 47.82876], [38.87979, 47.87719], [38.79628, 47.81109], [38.76379, 47.69346], [38.35062, 47.61631], [38.28679, 47.53552], [38.28954, 47.39255], [38.22225, 47.30788], [38.33074, 47.30508], [38.32112, 47.2585], [38.23049, 47.2324], [38.22955, 47.12069], [38.3384, 46.98085], [38.12112, 46.86078], [37.62608, 46.82615], [35.23066, 45.79231], [35.04991, 45.76827], [36.6645, 45.4514], [36.6545, 45.3417], [36.5049, 45.3136], [36.475, 45.2411], [36.4883, 45.0488], [33.5943, 44.03313], [39.81147, 43.06294], [40.0078, 43.38551], [40.00853, 43.40578], [40.01552, 43.42025], [40.01007, 43.42411], [40.03312, 43.44262], [40.04445, 43.47776], [40.10657, 43.57344], [40.65957, 43.56212], [41.64935, 43.22331], [42.40563, 43.23226], [42.66667, 43.13917], [42.75889, 43.19651], [43.03322, 43.08883], [43.0419, 43.02413], [43.81453, 42.74297], [43.73119, 42.62043], [43.95517, 42.55396], [44.54202, 42.75699], [44.70002, 42.74679], [44.80941, 42.61277], [44.88754, 42.74934], [45.15318, 42.70598], [45.36501, 42.55268], [45.78692, 42.48358], [45.61676, 42.20768], [46.42738, 41.91323], [46.5332, 41.87389], [46.58924, 41.80547], [46.75269, 41.8623], [46.8134, 41.76252], [47.00955, 41.63583], [46.99554, 41.59743], [47.03757, 41.55434], [47.10762, 41.59044], [47.34579, 41.27884], [47.49004, 41.26366], [47.54504, 41.20275], [47.62288, 41.22969], [47.75831, 41.19455], [47.87973, 41.21798], [48.07587, 41.49957], [48.22064, 41.51472], [48.2878, 41.56221], [48.40277, 41.60441], [48.42301, 41.65444], [48.55078, 41.77917], [48.5867, 41.84306], [48.80971, 41.95365], [49.2134, 44.84989], [49.88945, 46.04554], [49.32259, 46.26944], [49.16518, 46.38542], [48.54988, 46.56267], [48.51142, 46.69268], [49.01136, 46.72716], [48.52326, 47.4102], [48.45173, 47.40818], [48.15348, 47.74545], [47.64973, 47.76559], [47.41689, 47.83687], [47.38731, 47.68176], [47.12107, 47.83687], [47.11516, 48.27188], [46.49011, 48.43019], [46.78392, 48.95352], [47.00857, 49.04921], [47.04658, 49.19834], [46.78398, 49.34026], [46.9078, 49.86707], [47.18319, 49.93721], [47.34589, 50.09308], [47.30448, 50.30894], [47.58551, 50.47867], [48.10044, 50.09242], [48.24519, 49.86099], [48.42564, 49.82283], [48.68352, 49.89546], [48.90782, 50.02281], [48.57946, 50.63278], [48.86936, 50.61589], [49.12673, 50.78639], [49.41959, 50.85927], [49.39001, 51.09396], [49.76866, 51.11067], [49.97277, 51.2405], [50.26859, 51.28677], [50.59695, 51.61859], [51.26254, 51.68466], [51.301, 51.48799], [51.77431, 51.49536], [51.8246, 51.67916], [52.36119, 51.74161], [52.54329, 51.48444], [53.46165, 51.49445], [53.69299, 51.23466], [54.12248, 51.11542], [54.46331, 50.85554], [54.41894, 50.61214], [54.55797, 50.52006], [54.71476, 50.61214], [54.56685, 51.01958], [54.72067, 51.03261], [55.67774, 50.54508], [56.11398, 50.7471], [56.17906, 50.93204], [57.17302, 51.11253], [57.44221, 50.88354], [57.74986, 50.93017], [57.75578, 51.13852], [58.3208, 51.15151], [58.87974, 50.70852], [59.48928, 50.64216], [59.51886, 50.49937], [59.81172, 50.54451], [60.01288, 50.8163], [60.17262, 50.83312], [60.31914, 50.67705], [60.81833, 50.6629], [61.4431, 50.80679], [61.56889, 51.23679], [61.6813, 51.25716], [61.55114, 51.32746], [61.50677, 51.40687], [60.95655, 51.48615], [60.92401, 51.61124], [60.5424, 51.61675], [60.36787, 51.66815], [60.50986, 51.7964], [60.09867, 51.87135], [59.99809, 51.98263], [59.91279, 52.06924], [60.17253, 52.25814], [60.17516, 52.39457], [59.25033, 52.46803], [59.22409, 52.28437], [58.79644, 52.43392], [58.94336, 53.953], [59.70487, 54.14846], [59.95217, 54.85853], [57.95234, 54.39672], [57.14829, 54.84204], [57.25137, 55.26262], [58.81825, 55.03378], [59.49035, 55.60486], [59.28419, 56.15739], [57.51527, 56.08729], [57.28024, 56.87898], [58.07604, 57.08308], [58.13789, 57.68097], [58.81412, 57.71602], [58.71104, 58.07475], [59.40376, 58.45822], [59.15636, 59.14682], [58.3853, 59.487], [59.50685, 60.91162], [59.36223, 61.3882], [59.61398, 62.44915], [59.24834, 63.01859], [59.80579, 64.13948], [59.63945, 64.78384], [60.74386, 64.95767], [61.98014, 65.72191], [66.1708, 67.61252], [64.18965, 69.94255], [76.13964, 83.37843], [36.85549, 84.09565], [32.07813, 72.01005], [31.59909, 70.16571], [30.84095, 69.80584], [30.95011, 69.54699], [30.52662, 69.54699], [30.16363, 69.65244], [29.97205, 69.41623], [29.27631, 69.2811], [29.26623, 69.13794], [29.0444, 69.0119], [28.91738, 69.04774], [28.45957, 68.91417], [28.78224, 68.86696], [28.43941, 68.53366], [28.62982, 68.19816], [29.34179, 68.06655], [29.66955, 67.79872], [30.02041, 67.67523], [29.91155, 67.51507], [28.9839, 66.94139], [29.91155, 66.13863], [30.16363, 65.66935], [29.97205, 65.70256], [29.74013, 65.64025], [29.84096, 65.56945], [29.68972, 65.31803], [29.61914, 65.23791], [29.8813, 65.22101], [29.84096, 65.1109], [29.61914, 65.05993], [29.68972, 64.80789], [30.05271, 64.79072], [30.12329, 64.64862], [30.01238, 64.57513], [30.06279, 64.35782], [30.4762, 64.25728], [30.55687, 64.09036], [30.25437, 63.83364], [29.98213, 63.75795], [30.49637, 63.46666], [31.23244, 63.22239], [31.29294, 63.09035], [31.58535, 62.91642], [31.38369, 62.66284], [31.10136, 62.43042], [29.01829, 61.17448], [28.82816, 61.1233], [28.47974, 60.93365], [27.77352, 60.52722], [27.71177, 60.3893], [27.44953, 60.22766], [26.32936, 60.00121]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1083368", nameEn: "Mainland Finland", country: "FI", groups: ["EU", "154", "150", "UN"], callingCodes: ["358"] }, geometry: { type: "MultiPolygon", coordinates: [[[[29.12697, 69.69193], [28.36883, 69.81658], [28.32849, 69.88605], [27.97558, 69.99671], [27.95542, 70.0965], [27.57226, 70.06215], [27.05802, 69.92069], [26.64461, 69.96565], [26.40261, 69.91377], [25.96904, 69.68397], [25.69679, 69.27039], [25.75729, 68.99383], [25.61613, 68.89602], [25.42455, 68.90328], [25.12206, 68.78684], [25.10189, 68.63307], [24.93048, 68.61102], [24.90023, 68.55579], [24.74898, 68.65143], [24.18432, 68.73936], [24.02299, 68.81601], [23.781, 68.84514], [23.68017, 68.70276], [23.13064, 68.64684], [22.53321, 68.74393], [22.38367, 68.71561], [22.27276, 68.89514], [21.63833, 69.27485], [21.27827, 69.31281], [21.00732, 69.22755], [20.98641, 69.18809], [21.11099, 69.10291], [21.05775, 69.0356], [20.72171, 69.11874], [20.55258, 69.06069], [20.78802, 69.03087], [20.91658, 68.96764], [20.85104, 68.93142], [20.90649, 68.89696], [21.03001, 68.88969], [22.00429, 68.50692], [22.73028, 68.40881], [23.10336, 68.26551], [23.15377, 68.14759], [23.26469, 68.15134], [23.40081, 68.05545], [23.65793, 67.9497], [23.45627, 67.85297], [23.54701, 67.59306], [23.39577, 67.46974], [23.75372, 67.43688], [23.75372, 67.29914], [23.54701, 67.25435], [23.58735, 67.20752], [23.56214, 67.17038], [23.98563, 66.84149], [23.98059, 66.79585], [23.89488, 66.772], [23.85959, 66.56434], [23.63776, 66.43568], [23.67591, 66.3862], [23.64982, 66.30603], [23.71339, 66.21299], [23.90497, 66.15802], [24.15791, 65.85385], [24.14798, 65.83466], [24.15107, 65.81427], [24.14112, 65.39731], [20.15877, 63.06556], [19.23413, 60.61414], [20.96741, 60.71528], [21.15143, 60.54555], [21.08159, 60.20167], [21.02509, 60.12142], [21.35468, 59.67511], [20.5104, 59.15546], [26.32936, 60.00121], [27.44953, 60.22766], [27.71177, 60.3893], [27.77352, 60.52722], [28.47974, 60.93365], [28.82816, 61.1233], [29.01829, 61.17448], [31.10136, 62.43042], [31.38369, 62.66284], [31.58535, 62.91642], [31.29294, 63.09035], [31.23244, 63.22239], [30.49637, 63.46666], [29.98213, 63.75795], [30.25437, 63.83364], [30.55687, 64.09036], [30.4762, 64.25728], [30.06279, 64.35782], [30.01238, 64.57513], [30.12329, 64.64862], [30.05271, 64.79072], [29.68972, 64.80789], [29.61914, 65.05993], [29.84096, 65.1109], [29.8813, 65.22101], [29.61914, 65.23791], [29.68972, 65.31803], [29.84096, 65.56945], [29.74013, 65.64025], [29.97205, 65.70256], [30.16363, 65.66935], [29.91155, 66.13863], [28.9839, 66.94139], [29.91155, 67.51507], [30.02041, 67.67523], [29.66955, 67.79872], [29.34179, 68.06655], [28.62982, 68.19816], [28.43941, 68.53366], [28.78224, 68.86696], [28.45957, 68.91417], [28.91738, 69.04774], [28.81248, 69.11997], [28.8629, 69.22395], [29.31664, 69.47994], [29.12697, 69.69193]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1184963", nameEn: "Alhucemas Islands", country: "ES", groups: ["EU", "Q191011", "015", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[-3.90602, 35.21494], [-3.88372, 35.20767], [-3.89343, 35.22728], [-3.90602, 35.21494]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1298289", nameEn: "Egmont Islands", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[70.1848, -6.37445], [70.67958, -8.2663], [72.17991, -6.68509], [70.1848, -6.37445]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1352230", nameEn: "US Territories", country: "US", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q1451600", nameEn: "Overseas Countries and Territories of the EU", aliases: ["OCT"], level: "subunion" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q1544253", nameEn: "Great Chagos Bank", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[70.1848, -6.37445], [72.17991, -6.68509], [73.20573, -5.20727], [70.1848, -6.37445]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1585511", nameEn: "Salomon Atoll", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[72.09518, -5.61768], [73.20573, -5.20727], [72.12587, -4.02588], [72.09518, -5.61768]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1681727", nameEn: "Saint-Paul and Amsterdam", country: "FR", groups: ["EU", "TF", "Q1451600", "014", "202", "002", "UN"], level: "subterritory" }, geometry: { type: "MultiPolygon", coordinates: [[[[76.31747, -42.16264], [80.15867, -36.04977], [71.22311, -38.75287], [76.31747, -42.16264]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1901211", nameEn: "East Malaysia", country: "MY", groups: ["Q36117", "035", "142", "UN"], driveSide: "left", callingCodes: ["60"] }, geometry: { type: "MultiPolygon", coordinates: [[[[110.90339, 7.52694], [109.82788, 2.86812], [109.62558, 1.99182], [109.53794, 1.91771], [109.57923, 1.80624], [109.66397, 1.79972], [109.66397, 1.60425], [110.35354, 0.98869], [110.49182, 0.88088], [110.62374, 0.873], [111.22979, 1.08326], [111.55434, 0.97864], [111.82846, 0.99349], [111.94553, 1.12016], [112.15679, 1.17004], [112.2127, 1.44135], [112.48648, 1.56516], [113.021, 1.57819], [113.01448, 1.42832], [113.64677, 1.23933], [114.03788, 1.44787], [114.57892, 1.5], [114.80706, 1.92351], [114.80706, 2.21665], [115.1721, 2.49671], [115.11343, 2.82879], [115.53713, 3.14776], [115.58276, 3.93499], [115.90217, 4.37708], [117.25801, 4.35108], [117.47313, 4.18857], [117.67641, 4.16535], [118.06469, 4.16638], [118.93936, 4.09009], [119.52945, 5.35672], [117.98544, 6.27477], [117.93857, 6.89845], [117.17735, 7.52841], [116.79524, 7.43869], [115.02521, 5.35005], [115.16236, 5.01011], [115.15092, 4.87604], [115.20737, 4.8256], [115.27819, 4.63661], [115.2851, 4.42295], [115.36346, 4.33563], [115.31275, 4.30806], [115.09978, 4.39123], [115.07737, 4.53418], [115.04064, 4.63706], [115.02278, 4.74137], [115.02955, 4.82087], [115.05038, 4.90275], [114.99417, 4.88201], [114.96982, 4.81146], [114.88841, 4.81905], [114.8266, 4.75062], [114.77303, 4.72871], [114.83189, 4.42387], [114.88039, 4.4257], [114.78539, 4.12205], [114.64211, 4.00694], [114.49922, 4.13108], [114.4416, 4.27588], [114.32176, 4.2552], [114.32176, 4.34942], [114.26876, 4.49878], [114.15813, 4.57], [114.07448, 4.58441], [114.10166, 4.76112], [110.90339, 7.52694]]]] } },
+    { type: "Feature", properties: { wikidata: "Q1973345", nameEn: "Peninsular Malaysia", country: "MY", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["60"] }, geometry: { type: "MultiPolygon", coordinates: [[[[102.46318, 7.22462], [102.09086, 6.23546], [102.08127, 6.22679], [102.07732, 6.193], [102.09182, 6.14161], [102.01835, 6.05407], [101.99209, 6.04075], [101.97114, 6.01992], [101.9714, 6.00575], [101.94712, 5.98421], [101.92819, 5.85511], [101.91776, 5.84269], [101.89188, 5.8386], [101.80144, 5.74505], [101.75074, 5.79091], [101.69773, 5.75881], [101.58019, 5.93534], [101.25524, 5.78633], [101.25755, 5.71065], [101.14062, 5.61613], [100.98815, 5.79464], [101.02708, 5.91013], [101.087, 5.9193], [101.12388, 6.11411], [101.06165, 6.14161], [101.12618, 6.19431], [101.10313, 6.25617], [100.85884, 6.24929], [100.81045, 6.45086], [100.74822, 6.46231], [100.74361, 6.50811], [100.66986, 6.45086], [100.43027, 6.52389], [100.42351, 6.51762], [100.41791, 6.5189], [100.41152, 6.52299], [100.35413, 6.54932], [100.31929, 6.65413], [100.32607, 6.65933], [100.32671, 6.66526], [100.31884, 6.66423], [100.31618, 6.66781], [100.30828, 6.66462], [100.29651, 6.68439], [100.19511, 6.72559], [100.12, 6.42105], [100.0756, 6.4045], [99.91873, 6.50233], [99.50117, 6.44501], [99.31854, 5.99868], [99.75778, 3.86466], [103.03657, 1.30383], [103.56591, 1.19719], [103.62738, 1.35255], [103.67468, 1.43166], [103.7219, 1.46108], [103.74161, 1.4502], [103.76395, 1.45183], [103.81181, 1.47953], [103.86383, 1.46288], [103.89565, 1.42841], [103.93384, 1.42926], [104.00131, 1.42405], [104.02277, 1.4438], [104.04622, 1.44691], [104.07348, 1.43322], [104.08871, 1.42015], [104.09162, 1.39694], [104.08072, 1.35998], [104.12282, 1.27714], [104.34728, 1.33529], [104.56723, 1.44271], [105.01437, 3.24936], [102.46318, 7.22462]]]] } },
+    { type: "Feature", properties: { wikidata: "Q2093907", nameEn: "Three Kings Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[174.17679, -32.62487], [170.93268, -32.97889], [171.97383, -34.64644], [174.17679, -32.62487]]]] } },
+    { type: "Feature", properties: { wikidata: "Q2298216", nameEn: "Solander Islands", country: "NZ", groups: ["Q851132", "053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[167.39068, -46.49187], [166.5534, -46.39484], [166.84561, -46.84889], [167.39068, -46.49187]]]] } },
+    { type: "Feature", properties: { wikidata: "Q2872203", nameEn: "Mainland Australia", country: "AU", groups: ["053", "009", "UN"], level: "subcountryGroup", driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[88.16419, -23.49578], [123.64533, -39.13605], [159.74028, -39.1978], [159.76765, -29.76946], [154.02855, -24.43238], [152.93188, -20.92631], [147.69992, -17.5933], [145.2855, -9.62524], [143.87386, -9.02382], [143.29772, -9.33993], [142.48658, -9.36754], [142.19246, -9.15378], [141.88934, -9.36111], [141.01842, -9.35091], [135.49042, -9.2276], [127.55165, -9.05052], [125.29076, -12.33139], [88.16419, -23.49578]]]] } },
+    { type: "Feature", properties: { wikidata: "Q2914565", nameEn: "Autonomous Regions of Portugal", country: "PT", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q2915956", nameEn: "Mainland Portugal", country: "PT", groups: ["Q12837", "EU", "039", "150", "UN"], level: "subcountryGroup", callingCodes: ["351"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-10.39881, 36.12218], [-7.37282, 36.96896], [-7.39769, 37.16868], [-7.41133, 37.20314], [-7.41854, 37.23813], [-7.43227, 37.25152], [-7.43974, 37.38913], [-7.46878, 37.47127], [-7.51759, 37.56119], [-7.41981, 37.75729], [-7.33441, 37.81193], [-7.27314, 37.90145], [-7.24544, 37.98884], [-7.12648, 38.00296], [-7.10366, 38.04404], [-7.05966, 38.01966], [-7.00375, 38.01914], [-6.93418, 38.21454], [-7.09389, 38.17227], [-7.15581, 38.27597], [-7.32529, 38.44336], [-7.265, 38.61674], [-7.26174, 38.72107], [-7.03848, 38.87221], [-7.051, 38.907], [-6.95211, 39.0243], [-6.97004, 39.07619], [-7.04011, 39.11919], [-7.10692, 39.10275], [-7.14929, 39.11287], [-7.12811, 39.17101], [-7.23566, 39.20132], [-7.23403, 39.27579], [-7.3149, 39.34857], [-7.2927, 39.45847], [-7.49477, 39.58794], [-7.54121, 39.66717], [-7.33507, 39.64569], [-7.24707, 39.66576], [-7.01613, 39.66877], [-6.97492, 39.81488], [-6.91463, 39.86618], [-6.86737, 40.01986], [-6.94233, 40.10716], [-7.00589, 40.12087], [-7.02544, 40.18564], [-7.00426, 40.23169], [-6.86085, 40.26776], [-6.86085, 40.2976], [-6.80218, 40.33239], [-6.78426, 40.36468], [-6.84618, 40.42177], [-6.84944, 40.46394], [-6.7973, 40.51723], [-6.80218, 40.55067], [-6.84292, 40.56801], [-6.79567, 40.65955], [-6.82826, 40.74603], [-6.82337, 40.84472], [-6.79892, 40.84842], [-6.80707, 40.88047], [-6.84292, 40.89771], [-6.8527, 40.93958], [-6.9357, 41.02888], [-6.913, 41.03922], [-6.88843, 41.03027], [-6.84781, 41.02692], [-6.80942, 41.03629], [-6.79241, 41.05397], [-6.75655, 41.10187], [-6.77319, 41.13049], [-6.69711, 41.1858], [-6.68286, 41.21641], [-6.65046, 41.24725], [-6.55937, 41.24417], [-6.38551, 41.35274], [-6.38553, 41.38655], [-6.3306, 41.37677], [-6.26777, 41.48796], [-6.19128, 41.57638], [-6.29863, 41.66432], [-6.44204, 41.68258], [-6.49907, 41.65823], [-6.54633, 41.68623], [-6.56426, 41.74219], [-6.51374, 41.8758], [-6.56752, 41.88429], [-6.5447, 41.94371], [-6.58544, 41.96674], [-6.61967, 41.94008], [-6.75004, 41.94129], [-6.76959, 41.98734], [-6.81196, 41.99097], [-6.82174, 41.94493], [-6.94396, 41.94403], [-6.95537, 41.96553], [-6.98144, 41.9728], [-7.01078, 41.94977], [-7.07596, 41.94977], [-7.08574, 41.97401], [-7.14115, 41.98855], [-7.18549, 41.97515], [-7.18677, 41.88793], [-7.32366, 41.8406], [-7.37092, 41.85031], [-7.42864, 41.80589], [-7.42854, 41.83262], [-7.44759, 41.84451], [-7.45566, 41.86488], [-7.49803, 41.87095], [-7.52737, 41.83939], [-7.62188, 41.83089], [-7.58603, 41.87944], [-7.65774, 41.88308], [-7.69848, 41.90977], [-7.84188, 41.88065], [-7.88055, 41.84571], [-7.88751, 41.92553], [-7.90707, 41.92432], [-7.92336, 41.8758], [-7.9804, 41.87337], [-8.01136, 41.83453], [-8.0961, 41.81024], [-8.16455, 41.81753], [-8.16944, 41.87944], [-8.19551, 41.87459], [-8.2185, 41.91237], [-8.16232, 41.9828], [-8.08796, 42.01398], [-8.08847, 42.05767], [-8.11729, 42.08537], [-8.18178, 42.06436], [-8.19406, 42.12141], [-8.18947, 42.13853], [-8.1986, 42.15402], [-8.22406, 42.1328], [-8.24681, 42.13993], [-8.2732, 42.12396], [-8.29809, 42.106], [-8.32161, 42.10218], [-8.33912, 42.08358], [-8.36353, 42.09065], [-8.38323, 42.07683], [-8.40143, 42.08052], [-8.42512, 42.07199], [-8.44123, 42.08218], [-8.48185, 42.0811], [-8.52837, 42.07658], [-8.5252, 42.06264], [-8.54563, 42.0537], [-8.58086, 42.05147], [-8.59493, 42.05708], [-8.63791, 42.04691], [-8.64626, 42.03668], [-8.65832, 42.02972], [-8.6681, 41.99703], [-8.69071, 41.98862], [-8.7478, 41.96282], [-8.74606, 41.9469], [-8.75712, 41.92833], [-8.81794, 41.90375], [-8.87157, 41.86488], [-11.19304, 41.83075], [-10.39881, 36.12218]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3311985", nameEn: "Guernsey", country: "GB", groups: ["GG", "830", "Q185086", "154", "150", "UN"], level: "subterritory", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01481"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.49556, 49.79012], [-3.28154, 49.57329], [-2.65349, 49.15373], [-2.36485, 49.48223], [-2.49556, 49.79012]]]] } },
+    { type: "Feature", properties: { wikidata: "Q3320166", nameEn: "Outermost Regions of the EU", aliases: ["OMR"], level: "subunion" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q3336843", nameEn: "Countries of the United Kingdom", aliases: ["GB-UKM"], country: "GB", level: "subcountryGroup" }, geometry: null },
+    { type: "Feature", properties: { wikidata: "Q6736667", nameEn: "Mainland India", country: "IN", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["91"] }, geometry: { type: "MultiPolygon", coordinates: [[[[89.08044, 21.41871], [89.07114, 22.15335], [88.9367, 22.58527], [88.94614, 22.66941], [88.9151, 22.75228], [88.96713, 22.83346], [88.87063, 22.95235], [88.88327, 23.03885], [88.86377, 23.08759], [88.99148, 23.21134], [88.71133, 23.2492], [88.79254, 23.46028], [88.79351, 23.50535], [88.74841, 23.47361], [88.56507, 23.64044], [88.58087, 23.87105], [88.66189, 23.87607], [88.73743, 23.91751], [88.6976, 24.14703], [88.74841, 24.1959], [88.68801, 24.31464], [88.50934, 24.32474], [88.12296, 24.51301], [88.08786, 24.63232], [88.00683, 24.66477], [88.15515, 24.85806], [88.14004, 24.93529], [88.21832, 24.96642], [88.27325, 24.88796], [88.33917, 24.86803], [88.46277, 25.07468], [88.44766, 25.20149], [88.94067, 25.18534], [89.00463, 25.26583], [89.01105, 25.30303], [88.85278, 25.34679], [88.81296, 25.51546], [88.677, 25.46959], [88.4559, 25.59227], [88.45103, 25.66245], [88.242, 25.80811], [88.13138, 25.78773], [88.08804, 25.91334], [88.16581, 26.0238], [88.1844, 26.14417], [88.34757, 26.22216], [88.35153, 26.29123], [88.51649, 26.35923], [88.48749, 26.45855], [88.36938, 26.48683], [88.35153, 26.45241], [88.33093, 26.48929], [88.41196, 26.63837], [88.4298, 26.54489], [88.62144, 26.46783], [88.69485, 26.38353], [88.67837, 26.26291], [88.78961, 26.31093], [88.85004, 26.23211], [89.05328, 26.2469], [88.91321, 26.37984], [88.92357, 26.40711], [88.95612, 26.4564], [89.08899, 26.38845], [89.15869, 26.13708], [89.35953, 26.0077], [89.53515, 26.00382], [89.57101, 25.9682], [89.63968, 26.22595], [89.70201, 26.15138], [89.73581, 26.15818], [89.77865, 26.08387], [89.77728, 26.04254], [89.86592, 25.93115], [89.80585, 25.82489], [89.84388, 25.70042], [89.86129, 25.61714], [89.81208, 25.37244], [89.84086, 25.31854], [89.83371, 25.29548], [89.87629, 25.28337], [89.90478, 25.31038], [90.1155, 25.22686], [90.40034, 25.1534], [90.65042, 25.17788], [90.87427, 25.15799], [91.25517, 25.20677], [91.63648, 25.12846], [92.0316, 25.1834], [92.33957, 25.07593], [92.39147, 25.01471], [92.49887, 24.88796], [92.38626, 24.86055], [92.25854, 24.9191], [92.15796, 24.54435], [92.11662, 24.38997], [91.96603, 24.3799], [91.89258, 24.14674], [91.82596, 24.22345], [91.76004, 24.23848], [91.73257, 24.14703], [91.65292, 24.22095], [91.63782, 24.1132], [91.55542, 24.08687], [91.37414, 24.10693], [91.35741, 23.99072], [91.29587, 24.0041], [91.22308, 23.89616], [91.25192, 23.83463], [91.15579, 23.6599], [91.28293, 23.37538], [91.36453, 23.06612], [91.40848, 23.07117], [91.4035, 23.27522], [91.46615, 23.2328], [91.54993, 23.01051], [91.61571, 22.93929], [91.7324, 23.00043], [91.81634, 23.08001], [91.76417, 23.26619], [91.84789, 23.42235], [91.95642, 23.47361], [91.95093, 23.73284], [92.04706, 23.64229], [92.15417, 23.73409], [92.26541, 23.70392], [92.38214, 23.28705], [92.37665, 22.9435], [92.5181, 22.71441], [92.60029, 22.1522], [92.56616, 22.13554], [92.60949, 21.97638], [92.67532, 22.03547], [92.70416, 22.16017], [92.86208, 22.05456], [92.89504, 21.95143], [92.93899, 22.02656], [92.99804, 21.98964], [92.99255, 22.05965], [93.04885, 22.20595], [93.15734, 22.18687], [93.14224, 22.24535], [93.19991, 22.25425], [93.18206, 22.43716], [93.13537, 22.45873], [93.11477, 22.54374], [93.134, 22.59573], [93.09417, 22.69459], [93.134, 22.92498], [93.12988, 23.05772], [93.2878, 23.00464], [93.38478, 23.13698], [93.36862, 23.35426], [93.38781, 23.36139], [93.39981, 23.38828], [93.38805, 23.4728], [93.43475, 23.68299], [93.3908, 23.7622], [93.3908, 23.92925], [93.36059, 23.93176], [93.32351, 24.04468], [93.34735, 24.10151], [93.41415, 24.07854], [93.46633, 23.97067], [93.50616, 23.94432], [93.62871, 24.00922], [93.75952, 24.0003], [93.80279, 23.92549], [93.92089, 23.95812], [94.14081, 23.83333], [94.30215, 24.23752], [94.32362, 24.27692], [94.45279, 24.56656], [94.50729, 24.59281], [94.5526, 24.70764], [94.60204, 24.70889], [94.73937, 25.00545], [94.74212, 25.13606], [94.57458, 25.20318], [94.68032, 25.47003], [94.80117, 25.49359], [95.18556, 26.07338], [95.11428, 26.1019], [95.12801, 26.38397], [95.05798, 26.45408], [95.23513, 26.68499], [95.30339, 26.65372], [95.437, 26.7083], [95.81603, 27.01335], [95.93002, 27.04149], [96.04949, 27.19428], [96.15591, 27.24572], [96.40779, 27.29818], [96.55761, 27.29928], [96.73888, 27.36638], [96.88445, 27.25046], [96.85287, 27.2065], [96.89132, 27.17474], [97.14675, 27.09041], [97.17422, 27.14052], [96.91431, 27.45752], [96.90112, 27.62149], [97.29919, 27.92233], [97.35824, 27.87256], [97.38845, 28.01329], [97.35412, 28.06663], [97.31292, 28.06784], [97.34547, 28.21385], [97.1289, 28.3619], [96.98882, 28.32564], [96.88445, 28.39452], [96.85561, 28.4875], [96.6455, 28.61657], [96.48895, 28.42955], [96.40929, 28.51526], [96.61391, 28.72742], [96.3626, 29.10607], [96.20467, 29.02325], [96.18682, 29.11087], [96.31316, 29.18643], [96.05361, 29.38167], [95.84899, 29.31464], [95.75149, 29.32063], [95.72086, 29.20797], [95.50842, 29.13487], [95.41091, 29.13007], [95.3038, 29.13847], [95.26122, 29.07727], [95.2214, 29.10727], [95.11291, 29.09527], [95.0978, 29.14446], [94.81353, 29.17804], [94.69318, 29.31739], [94.2752, 29.11687], [94.35897, 29.01965], [93.72797, 28.68821], [93.44621, 28.67189], [93.18069, 28.50319], [93.14635, 28.37035], [92.93075, 28.25671], [92.67486, 28.15018], [92.65472, 28.07632], [92.73025, 28.05814], [92.7275, 27.98662], [92.42538, 27.80092], [92.32101, 27.79363], [92.27432, 27.89077], [91.87057, 27.7195], [91.84722, 27.76325], [91.6469, 27.76358], [91.55819, 27.6144], [91.65007, 27.48287], [92.01132, 27.47352], [92.12019, 27.27829], [92.04702, 27.26861], [92.03457, 27.07334], [92.11863, 26.893], [92.05523, 26.8692], [91.83181, 26.87318], [91.50067, 26.79223], [90.67715, 26.77215], [90.48504, 26.8594], [90.39271, 26.90704], [90.30402, 26.85098], [90.04535, 26.72422], [89.86124, 26.73307], [89.63369, 26.74402], [89.42349, 26.83727], [89.3901, 26.84225], [89.38319, 26.85963], [89.37913, 26.86224], [89.1926, 26.81329], [89.12825, 26.81661], [89.09554, 26.89089], [88.95807, 26.92668], [88.92301, 26.99286], [88.8714, 26.97488], [88.86984, 27.10937], [88.74219, 27.144], [88.91901, 27.32483], [88.82981, 27.38814], [88.77517, 27.45415], [88.88091, 27.85192], [88.83559, 28.01936], [88.63235, 28.12356], [88.54858, 28.06057], [88.25332, 27.9478], [88.1278, 27.95417], [88.13378, 27.88015], [88.1973, 27.85067], [88.19107, 27.79285], [88.04008, 27.49223], [88.07277, 27.43007], [88.01646, 27.21612], [88.01587, 27.21388], [87.9887, 27.11045], [88.11719, 26.98758], [88.13422, 26.98705], [88.12302, 26.95324], [88.19107, 26.75516], [88.1659, 26.68177], [88.16452, 26.64111], [88.09963, 26.54195], [88.09414, 26.43732], [88.00895, 26.36029], [87.90115, 26.44923], [87.89085, 26.48565], [87.84193, 26.43663], [87.7918, 26.46737], [87.76004, 26.40711], [87.67893, 26.43501], [87.66803, 26.40294], [87.59175, 26.38342], [87.55274, 26.40596], [87.51571, 26.43106], [87.46566, 26.44058], [87.37314, 26.40815], [87.34568, 26.34787], [87.26568, 26.37294], [87.26587, 26.40592], [87.24682, 26.4143], [87.18863, 26.40558], [87.14751, 26.40542], [87.09147, 26.45039], [87.0707, 26.58571], [87.04691, 26.58685], [87.01559, 26.53228], [86.95912, 26.52076], [86.94543, 26.52076], [86.82898, 26.43919], [86.76797, 26.45892], [86.74025, 26.42386], [86.69124, 26.45169], [86.62686, 26.46891], [86.61313, 26.48658], [86.57073, 26.49825], [86.54258, 26.53819], [86.49726, 26.54218], [86.31564, 26.61925], [86.26235, 26.61886], [86.22513, 26.58863], [86.13596, 26.60651], [86.02729, 26.66756], [85.8492, 26.56667], [85.85126, 26.60866], [85.83126, 26.61134], [85.76907, 26.63076], [85.72315, 26.67471], [85.73483, 26.79613], [85.66239, 26.84822], [85.61621, 26.86721], [85.59461, 26.85161], [85.5757, 26.85955], [85.56471, 26.84133], [85.47752, 26.79292], [85.34302, 26.74954], [85.21159, 26.75933], [85.18046, 26.80519], [85.19291, 26.86909], [85.15883, 26.86966], [85.02635, 26.85381], [85.05592, 26.88991], [85.00536, 26.89523], [84.97186, 26.9149], [84.96687, 26.95599], [84.85754, 26.98984], [84.82913, 27.01989], [84.793, 26.9968], [84.64496, 27.04669], [84.69166, 27.21294], [84.62161, 27.33885], [84.29315, 27.39], [84.25735, 27.44941], [84.21376, 27.45218], [84.10791, 27.52399], [84.02229, 27.43836], [83.93306, 27.44939], [83.86182, 27.4241], [83.85595, 27.35797], [83.61288, 27.47013], [83.39495, 27.4798], [83.38872, 27.39276], [83.35136, 27.33885], [83.29999, 27.32778], [83.2673, 27.36235], [83.27197, 27.38309], [83.19413, 27.45632], [82.94938, 27.46036], [82.93261, 27.50328], [82.74119, 27.49838], [82.70378, 27.72122], [82.46405, 27.6716], [82.06554, 27.92222], [81.97214, 27.93322], [81.91223, 27.84995], [81.47867, 28.08303], [81.48179, 28.12148], [81.38683, 28.17638], [81.32923, 28.13521], [81.19847, 28.36284], [81.03471, 28.40054], [80.55142, 28.69182], [80.50575, 28.6706], [80.52443, 28.54897], [80.44504, 28.63098], [80.37188, 28.63371], [80.12125, 28.82346], [80.06957, 28.82763], [80.05743, 28.91479], [80.18085, 29.13649], [80.23178, 29.11626], [80.26602, 29.13938], [80.24112, 29.21414], [80.28626, 29.20327], [80.31428, 29.30784], [80.24322, 29.44299], [80.37939, 29.57098], [80.41858, 29.63581], [80.38428, 29.68513], [80.36803, 29.73865], [80.41554, 29.79451], [80.43458, 29.80466], [80.48997, 29.79566], [80.56247, 29.86661], [80.57179, 29.91422], [80.60226, 29.95732], [80.67076, 29.95732], [80.8778, 30.13384], [80.86673, 30.17321], [80.91143, 30.22173], [80.92547, 30.17193], [81.03953, 30.20059], [80.83343, 30.32023], [80.54504, 30.44936], [80.20721, 30.58541], [79.93255, 30.88288], [79.59884, 30.93943], [79.30694, 31.17357], [79.14016, 31.43403], [79.01931, 31.42817], [78.89344, 31.30481], [78.77898, 31.31209], [78.71032, 31.50197], [78.84516, 31.60631], [78.69933, 31.78723], [78.78036, 31.99478], [78.74404, 32.00384], [78.68754, 32.10256], [78.49609, 32.2762], [78.4645, 32.45367], [78.38897, 32.53938], [78.73916, 32.69438], [78.7831, 32.46873], [78.96713, 32.33655], [78.99322, 32.37948], [79.0979, 32.38051], [79.13174, 32.47766], [79.26768, 32.53277], [79.46562, 32.69668], [79.14016, 33.02545], [79.15252, 33.17156], [78.73636, 33.56521], [78.67599, 33.66445], [78.77349, 33.73871], [78.73367, 34.01121], [78.65657, 34.03195], [78.66225, 34.08858], [78.91769, 34.15452], [78.99802, 34.3027], [79.05364, 34.32482], [78.74465, 34.45174], [78.56475, 34.50835], [78.54964, 34.57283], [78.27781, 34.61484], [78.18435, 34.7998], [78.22692, 34.88771], [78.00033, 35.23954], [78.03466, 35.3785], [78.11664, 35.48022], [77.80532, 35.52058], [77.70232, 35.46244], [77.44277, 35.46132], [76.96624, 35.5932], [76.84539, 35.67356], [76.77323, 35.66062], [76.75475, 35.52617], [76.85088, 35.39754], [76.93465, 35.39866], [77.11796, 35.05419], [76.99251, 34.93349], [76.87193, 34.96906], [76.74514, 34.92488], [76.74377, 34.84039], [76.67648, 34.76371], [76.47186, 34.78965], [76.15463, 34.6429], [76.04614, 34.67566], [75.75438, 34.51827], [75.38009, 34.55021], [75.01479, 34.64629], [74.6663, 34.703], [74.58083, 34.77386], [74.31239, 34.79626], [74.12897, 34.70073], [73.96423, 34.68244], [73.93401, 34.63386], [73.93951, 34.57169], [73.89419, 34.54568], [73.88732, 34.48911], [73.74999, 34.3781], [73.74862, 34.34183], [73.8475, 34.32935], [73.90517, 34.35317], [73.98208, 34.2522], [73.90677, 34.10504], [73.88732, 34.05105], [73.91341, 34.01235], [74.21554, 34.03853], [74.25262, 34.01577], [74.26086, 33.92237], [74.14001, 33.83002], [74.05898, 33.82089], [74.00891, 33.75437], [73.96423, 33.73071], [73.98968, 33.66155], [73.97367, 33.64061], [74.03576, 33.56718], [74.10115, 33.56392], [74.18121, 33.4745], [74.17983, 33.3679], [74.08782, 33.26232], [74.01366, 33.25199], [74.02144, 33.18908], [74.15374, 33.13477], [74.17571, 33.07495], [74.31854, 33.02891], [74.34875, 32.97823], [74.31227, 32.92795], [74.41467, 32.90563], [74.45312, 32.77755], [74.6289, 32.75561], [74.64675, 32.82604], [74.7113, 32.84219], [74.65345, 32.71225], [74.69542, 32.66792], [74.64424, 32.60985], [74.65251, 32.56416], [74.67431, 32.56676], [74.68362, 32.49298], [74.84725, 32.49075], [74.97634, 32.45367], [75.03265, 32.49538], [75.28259, 32.36556], [75.38046, 32.26836], [75.25649, 32.10187], [75.00793, 32.03786], [74.9269, 32.0658], [74.86236, 32.04485], [74.79919, 31.95983], [74.58907, 31.87824], [74.47771, 31.72227], [74.57498, 31.60382], [74.61517, 31.55698], [74.59319, 31.50197], [74.64713, 31.45605], [74.59773, 31.4136], [74.53223, 31.30321], [74.51629, 31.13829], [74.56023, 31.08303], [74.60281, 31.10419], [74.60006, 31.13711], [74.6852, 31.12771], [74.67971, 31.05479], [74.5616, 31.04153], [73.88993, 30.36305], [73.95736, 30.28466], [73.97225, 30.19829], [73.80299, 30.06969], [73.58665, 30.01848], [73.3962, 29.94707], [73.28094, 29.56646], [73.05886, 29.1878], [73.01337, 29.16422], [72.94272, 29.02487], [72.40402, 28.78283], [72.29495, 28.66367], [72.20329, 28.3869], [71.9244, 28.11555], [71.89921, 27.96035], [70.79054, 27.68423], [70.60927, 28.02178], [70.37307, 28.01208], [70.12502, 27.8057], [70.03136, 27.56627], [69.58519, 27.18109], [69.50904, 26.74892], [69.88555, 26.56836], [70.05584, 26.60398], [70.17532, 26.55362], [70.17532, 26.24118], [70.08193, 26.08094], [70.0985, 25.93238], [70.2687, 25.71156], [70.37444, 25.67443], [70.53649, 25.68928], [70.60378, 25.71898], [70.67382, 25.68186], [70.66695, 25.39314], [70.89148, 25.15064], [70.94002, 24.92843], [71.09405, 24.69017], [70.97594, 24.60904], [71.00341, 24.46038], [71.12838, 24.42662], [71.04461, 24.34657], [70.94985, 24.3791], [70.85784, 24.30903], [70.88393, 24.27398], [70.71502, 24.23517], [70.57906, 24.27774], [70.5667, 24.43787], [70.11712, 24.30915], [70.03428, 24.172], [69.73335, 24.17007], [69.59579, 24.29777], [69.29778, 24.28712], [69.19341, 24.25646], [69.07806, 24.29777], [68.97781, 24.26021], [68.90914, 24.33156], [68.7416, 24.31904], [68.74643, 23.97027], [68.39339, 23.96838], [68.20763, 23.85849], [68.11329, 23.53945], [76.59015, 5.591], [79.50447, 8.91876], [79.42124, 9.80115], [80.48418, 10.20786], [89.08044, 21.41871]]]] } },
+    { type: "Feature", properties: { wikidata: "Q9143535", nameEn: "Akrotiri", country: "GB", groups: ["Q644636", "Q37362", "BOTS", "145", "142", "UN"], level: "subterritory", driveSide: "left", callingCodes: ["357"] }, geometry: { type: "MultiPolygon", coordinates: [[[[32.86014, 34.70585], [32.82717, 34.70622], [32.79433, 34.67883], [32.76136, 34.68318], [32.75515, 34.64985], [32.74412, 34.43926], [33.26744, 34.49942], [33.0138, 34.64424], [32.96968, 34.64046], [32.96718, 34.63446], [32.96312, 34.63236], [32.95516, 34.63541], [32.95323, 34.64075], [32.95471, 34.64528], [32.95277, 34.65104], [32.96154, 34.65587], [32.9639, 34.65866], [32.969, 34.6549], [32.98046, 34.65336], [32.99014, 34.65518], [32.98668, 34.67268], [32.98967, 34.67981], [32.95567, 34.6839], [32.94127, 34.67426], [32.93989, 34.67034], [32.93756, 34.67072], [32.93535, 34.66317], [32.92824, 34.66821], [32.93043, 34.67091], [32.91398, 34.67343], [32.9068, 34.66102], [32.86167, 34.68734], [32.86014, 34.70585]]]] } },
+    { type: "Feature", properties: { wikidata: "Q9206745", nameEn: "Dhekelia", country: "GB", groups: ["Q644636", "Q37362", "BOTS", "145", "142", "UN"], level: "subterritory", driveSide: "left", callingCodes: ["357"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.70575, 34.97947], [33.83531, 34.73974], [33.98684, 34.76642], [33.90146, 34.96458], [33.86018, 34.97381], [33.84741, 34.97167], [33.84028, 34.97179], [33.83459, 34.97448], [33.84616, 34.98511], [33.85488, 34.98462], [33.85891, 35.001], [33.85216, 35.00579], [33.84045, 35.00616], [33.82875, 35.01685], [33.83055, 35.02865], [33.81524, 35.04192], [33.8012, 35.04786], [33.82051, 35.0667], [33.8355, 35.05777], [33.85261, 35.0574], [33.87438, 35.08118], [33.89322, 35.06789], [33.90247, 35.07686], [33.91789, 35.08688], [33.89853, 35.11377], [33.88737, 35.11408], [33.88943, 35.12007], [33.88561, 35.12449], [33.87224, 35.12293], [33.87622, 35.10457], [33.87097, 35.09389], [33.87479, 35.08881], [33.8541, 35.07201], [33.84168, 35.06823], [33.82067, 35.07826], [33.78581, 35.05104], [33.76106, 35.04253], [33.73824, 35.05321], [33.71482, 35.03722], [33.70209, 35.04882], [33.7161, 35.07279], [33.70861, 35.07644], [33.69095, 35.06237], [33.68474, 35.06602], [33.67742, 35.05963], [33.67678, 35.03866], [33.69938, 35.03123], [33.69731, 35.01754], [33.71514, 35.00294], [33.70639, 34.99303], [33.70575, 34.97947]], [[33.77312, 34.9976], [33.77553, 34.99518], [33.78516, 34.99582], [33.79191, 34.98914], [33.78917, 34.98854], [33.78571, 34.98951], [33.78318, 34.98699], [33.78149, 34.98854], [33.77843, 34.988], [33.7778, 34.98981], [33.76738, 34.99188], [33.76605, 34.99543], [33.75682, 34.99916], [33.75994, 35.00113], [33.77312, 34.9976]], [[33.74144, 35.01053], [33.7343, 35.01178], [33.73781, 35.02181], [33.74265, 35.02329], [33.74983, 35.02274], [33.7492, 35.01319], [33.74144, 35.01053]]]] } },
+    { type: "Feature", properties: { wikidata: "Q16390686", nameEn: "Peninsular Spain", country: "ES", groups: ["Q12837", "EU", "039", "150", "UN"], callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[3.75438, 42.33445], [3.17156, 42.43545], [3.11379, 42.43646], [3.10027, 42.42621], [3.08167, 42.42748], [3.03734, 42.47363], [2.96518, 42.46692], [2.94283, 42.48174], [2.92107, 42.4573], [2.88413, 42.45938], [2.86983, 42.46843], [2.85675, 42.45444], [2.84335, 42.45724], [2.77464, 42.41046], [2.75497, 42.42578], [2.72056, 42.42298], [2.65311, 42.38771], [2.6747, 42.33974], [2.57934, 42.35808], [2.55516, 42.35351], [2.54382, 42.33406], [2.48457, 42.33933], [2.43508, 42.37568], [2.43299, 42.39423], [2.38504, 42.39977], [2.25551, 42.43757], [2.20578, 42.41633], [2.16599, 42.42314], [2.12789, 42.41291], [2.11621, 42.38393], [2.06241, 42.35906], [2.00488, 42.35399], [1.96482, 42.37787], [1.9574, 42.42401], [1.94084, 42.43039], [1.94061, 42.43333], [1.94292, 42.44316], [1.93663, 42.45439], [1.88853, 42.4501], [1.83037, 42.48395], [1.76335, 42.48863], [1.72515, 42.50338], [1.70571, 42.48867], [1.66826, 42.50779], [1.65674, 42.47125], [1.58933, 42.46275], [1.57953, 42.44957], [1.55937, 42.45808], [1.55073, 42.43299], [1.5127, 42.42959], [1.44529, 42.43724], [1.43838, 42.47848], [1.41648, 42.48315], [1.46661, 42.50949], [1.44759, 42.54431], [1.41245, 42.53539], [1.4234, 42.55959], [1.44529, 42.56722], [1.42512, 42.58292], [1.44197, 42.60217], [1.35562, 42.71944], [1.15928, 42.71407], [1.0804, 42.78569], [0.98292, 42.78754], [0.96166, 42.80629], [0.93089, 42.79154], [0.711, 42.86372], [0.66121, 42.84021], [0.65421, 42.75872], [0.67873, 42.69458], [0.40214, 42.69779], [0.36251, 42.72282], [0.29407, 42.67431], [0.25336, 42.7174], [0.17569, 42.73424], [-0.02468, 42.68513], [-0.10519, 42.72761], [-0.16141, 42.79535], [-0.17939, 42.78974], [-0.3122, 42.84788], [-0.38833, 42.80132], [-0.41319, 42.80776], [-0.44334, 42.79939], [-0.50863, 42.82713], [-0.55497, 42.77846], [-0.67637, 42.88303], [-0.69837, 42.87945], [-0.72608, 42.89318], [-0.73422, 42.91228], [-0.72037, 42.92541], [-0.75478, 42.96916], [-0.81652, 42.95166], [-0.97133, 42.96239], [-1.00963, 42.99279], [-1.10333, 43.0059], [-1.22881, 43.05534], [-1.25244, 43.04164], [-1.30531, 43.06859], [-1.30052, 43.09581], [-1.27118, 43.11961], [-1.32209, 43.1127], [-1.34419, 43.09665], [-1.35272, 43.02658], [-1.44067, 43.047], [-1.47555, 43.08372], [-1.41562, 43.12815], [-1.3758, 43.24511], [-1.40942, 43.27272], [-1.45289, 43.27049], [-1.50992, 43.29481], [-1.55963, 43.28828], [-1.57674, 43.25269], [-1.61341, 43.25269], [-1.63052, 43.28591], [-1.62481, 43.30726], [-1.69407, 43.31378], [-1.73074, 43.29481], [-1.7397, 43.32979], [-1.75079, 43.3317], [-1.75334, 43.34107], [-1.77068, 43.34396], [-1.78714, 43.35476], [-1.78332, 43.36399], [-1.79319, 43.37497], [-1.77289, 43.38957], [-1.81005, 43.59738], [-10.14298, 44.17365], [-11.19304, 41.83075], [-8.87157, 41.86488], [-8.81794, 41.90375], [-8.75712, 41.92833], [-8.74606, 41.9469], [-8.7478, 41.96282], [-8.69071, 41.98862], [-8.6681, 41.99703], [-8.65832, 42.02972], [-8.64626, 42.03668], [-8.63791, 42.04691], [-8.59493, 42.05708], [-8.58086, 42.05147], [-8.54563, 42.0537], [-8.5252, 42.06264], [-8.52837, 42.07658], [-8.48185, 42.0811], [-8.44123, 42.08218], [-8.42512, 42.07199], [-8.40143, 42.08052], [-8.38323, 42.07683], [-8.36353, 42.09065], [-8.33912, 42.08358], [-8.32161, 42.10218], [-8.29809, 42.106], [-8.2732, 42.12396], [-8.24681, 42.13993], [-8.22406, 42.1328], [-8.1986, 42.15402], [-8.18947, 42.13853], [-8.19406, 42.12141], [-8.18178, 42.06436], [-8.11729, 42.08537], [-8.08847, 42.05767], [-8.08796, 42.01398], [-8.16232, 41.9828], [-8.2185, 41.91237], [-8.19551, 41.87459], [-8.16944, 41.87944], [-8.16455, 41.81753], [-8.0961, 41.81024], [-8.01136, 41.83453], [-7.9804, 41.87337], [-7.92336, 41.8758], [-7.90707, 41.92432], [-7.88751, 41.92553], [-7.88055, 41.84571], [-7.84188, 41.88065], [-7.69848, 41.90977], [-7.65774, 41.88308], [-7.58603, 41.87944], [-7.62188, 41.83089], [-7.52737, 41.83939], [-7.49803, 41.87095], [-7.45566, 41.86488], [-7.44759, 41.84451], [-7.42854, 41.83262], [-7.42864, 41.80589], [-7.37092, 41.85031], [-7.32366, 41.8406], [-7.18677, 41.88793], [-7.18549, 41.97515], [-7.14115, 41.98855], [-7.08574, 41.97401], [-7.07596, 41.94977], [-7.01078, 41.94977], [-6.98144, 41.9728], [-6.95537, 41.96553], [-6.94396, 41.94403], [-6.82174, 41.94493], [-6.81196, 41.99097], [-6.76959, 41.98734], [-6.75004, 41.94129], [-6.61967, 41.94008], [-6.58544, 41.96674], [-6.5447, 41.94371], [-6.56752, 41.88429], [-6.51374, 41.8758], [-6.56426, 41.74219], [-6.54633, 41.68623], [-6.49907, 41.65823], [-6.44204, 41.68258], [-6.29863, 41.66432], [-6.19128, 41.57638], [-6.26777, 41.48796], [-6.3306, 41.37677], [-6.38553, 41.38655], [-6.38551, 41.35274], [-6.55937, 41.24417], [-6.65046, 41.24725], [-6.68286, 41.21641], [-6.69711, 41.1858], [-6.77319, 41.13049], [-6.75655, 41.10187], [-6.79241, 41.05397], [-6.80942, 41.03629], [-6.84781, 41.02692], [-6.88843, 41.03027], [-6.913, 41.03922], [-6.9357, 41.02888], [-6.8527, 40.93958], [-6.84292, 40.89771], [-6.80707, 40.88047], [-6.79892, 40.84842], [-6.82337, 40.84472], [-6.82826, 40.74603], [-6.79567, 40.65955], [-6.84292, 40.56801], [-6.80218, 40.55067], [-6.7973, 40.51723], [-6.84944, 40.46394], [-6.84618, 40.42177], [-6.78426, 40.36468], [-6.80218, 40.33239], [-6.86085, 40.2976], [-6.86085, 40.26776], [-7.00426, 40.23169], [-7.02544, 40.18564], [-7.00589, 40.12087], [-6.94233, 40.10716], [-6.86737, 40.01986], [-6.91463, 39.86618], [-6.97492, 39.81488], [-7.01613, 39.66877], [-7.24707, 39.66576], [-7.33507, 39.64569], [-7.54121, 39.66717], [-7.49477, 39.58794], [-7.2927, 39.45847], [-7.3149, 39.34857], [-7.23403, 39.27579], [-7.23566, 39.20132], [-7.12811, 39.17101], [-7.14929, 39.11287], [-7.10692, 39.10275], [-7.04011, 39.11919], [-6.97004, 39.07619], [-6.95211, 39.0243], [-7.051, 38.907], [-7.03848, 38.87221], [-7.26174, 38.72107], [-7.265, 38.61674], [-7.32529, 38.44336], [-7.15581, 38.27597], [-7.09389, 38.17227], [-6.93418, 38.21454], [-7.00375, 38.01914], [-7.05966, 38.01966], [-7.10366, 38.04404], [-7.12648, 38.00296], [-7.24544, 37.98884], [-7.27314, 37.90145], [-7.33441, 37.81193], [-7.41981, 37.75729], [-7.51759, 37.56119], [-7.46878, 37.47127], [-7.43974, 37.38913], [-7.43227, 37.25152], [-7.41854, 37.23813], [-7.41133, 37.20314], [-7.39769, 37.16868], [-7.37282, 36.96896], [-7.2725, 35.73269], [-5.10878, 36.05227], [-2.27707, 35.35051], [3.75438, 42.33445]], [[-5.27801, 36.14942], [-5.34064, 36.03744], [-5.40526, 36.15488], [-5.34536, 36.15501], [-5.33822, 36.15272], [-5.27801, 36.14942]]], [[[1.99838, 42.44682], [2.01564, 42.45171], [1.99216, 42.46208], [1.98579, 42.47486], [1.99766, 42.4858], [1.98916, 42.49351], [1.98022, 42.49569], [1.97697, 42.48568], [1.97227, 42.48487], [1.97003, 42.48081], [1.96215, 42.47854], [1.95606, 42.45785], [1.96125, 42.45364], [1.98378, 42.44697], [1.99838, 42.44682]]]] } },
+    { type: "Feature", properties: { wikidata: "Q98059339", nameEn: "Mainland Norway", country: "NO", groups: ["154", "150", "UN"], callingCodes: ["47"] }, geometry: { type: "MultiPolygon", coordinates: [[[[10.40861, 58.38489], [10.64958, 58.89391], [11.08911, 58.98745], [11.15367, 59.07862], [11.34459, 59.11672], [11.4601, 58.99022], [11.45199, 58.89604], [11.65732, 58.90177], [11.8213, 59.24985], [11.69297, 59.59442], [11.92112, 59.69531], [11.87121, 59.86039], [12.15641, 59.8926], [12.36317, 59.99259], [12.52003, 60.13846], [12.59133, 60.50559], [12.2277, 61.02442], [12.69115, 61.06584], [12.86939, 61.35427], [12.57707, 61.56547], [12.40595, 61.57226], [12.14746, 61.7147], [12.29187, 62.25699], [12.07085, 62.6297], [12.19919, 63.00104], [11.98529, 63.27487], [12.19919, 63.47935], [12.14928, 63.59373], [12.74105, 64.02171], [13.23411, 64.09087], [13.98222, 64.00953], [14.16051, 64.18725], [14.11117, 64.46674], [13.64276, 64.58402], [14.50926, 65.31786], [14.53778, 66.12399], [15.05113, 66.15572], [15.49318, 66.28509], [15.37197, 66.48217], [16.35589, 67.06419], [16.39154, 67.21653], [16.09922, 67.4364], [16.12774, 67.52106], [16.38441, 67.52923], [16.7409, 67.91037], [17.30416, 68.11591], [17.90787, 67.96537], [18.13836, 68.20874], [18.1241, 68.53721], [18.39503, 68.58672], [18.63032, 68.50849], [18.97255, 68.52416], [19.93508, 68.35911], [20.22027, 68.48759], [19.95647, 68.55546], [20.22027, 68.67246], [20.33435, 68.80174], [20.28444, 68.93283], [20.0695, 69.04469], [20.55258, 69.06069], [20.72171, 69.11874], [21.05775, 69.0356], [21.11099, 69.10291], [20.98641, 69.18809], [21.00732, 69.22755], [21.27827, 69.31281], [21.63833, 69.27485], [22.27276, 68.89514], [22.38367, 68.71561], [22.53321, 68.74393], [23.13064, 68.64684], [23.68017, 68.70276], [23.781, 68.84514], [24.02299, 68.81601], [24.18432, 68.73936], [24.74898, 68.65143], [24.90023, 68.55579], [24.93048, 68.61102], [25.10189, 68.63307], [25.12206, 68.78684], [25.42455, 68.90328], [25.61613, 68.89602], [25.75729, 68.99383], [25.69679, 69.27039], [25.96904, 69.68397], [26.40261, 69.91377], [26.64461, 69.96565], [27.05802, 69.92069], [27.57226, 70.06215], [27.95542, 70.0965], [27.97558, 69.99671], [28.32849, 69.88605], [28.36883, 69.81658], [29.12697, 69.69193], [29.31664, 69.47994], [28.8629, 69.22395], [28.81248, 69.11997], [28.91738, 69.04774], [29.0444, 69.0119], [29.26623, 69.13794], [29.27631, 69.2811], [29.97205, 69.41623], [30.16363, 69.65244], [30.52662, 69.54699], [30.95011, 69.54699], [30.84095, 69.80584], [31.59909, 70.16571], [32.07813, 72.01005], [-11.60274, 67.73467], [7.28637, 57.35913], [10.40861, 58.38489]]]] } },
+    { type: "Feature", properties: { wikidata: "Q98543636", nameEn: "Mainland Ecuador", country: "EC", groups: ["005", "419", "019", "UN"], callingCodes: ["593"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-84.52388, -3.36941], [-80.30602, -3.39149], [-80.20647, -3.431], [-80.24123, -3.46124], [-80.24586, -3.48677], [-80.23651, -3.48652], [-80.22629, -3.501], [-80.20535, -3.51667], [-80.21642, -3.5888], [-80.19848, -3.59249], [-80.18741, -3.63994], [-80.19926, -3.68894], [-80.13232, -3.90317], [-80.46386, -4.01342], [-80.4822, -4.05477], [-80.45023, -4.20938], [-80.32114, -4.21323], [-80.46386, -4.41516], [-80.39256, -4.48269], [-80.13945, -4.29786], [-79.79722, -4.47558], [-79.59402, -4.46848], [-79.26248, -4.95167], [-79.1162, -4.97774], [-79.01659, -5.01481], [-78.85149, -4.66795], [-78.68394, -4.60754], [-78.34362, -3.38633], [-78.24589, -3.39907], [-78.22642, -3.51113], [-78.14324, -3.47653], [-78.19369, -3.36431], [-77.94147, -3.05454], [-76.6324, -2.58397], [-76.05203, -2.12179], [-75.57429, -1.55961], [-75.3872, -0.9374], [-75.22862, -0.95588], [-75.22862, -0.60048], [-75.53615, -0.19213], [-75.60169, -0.18708], [-75.61997, -0.10012], [-75.40192, -0.17196], [-75.25764, -0.11943], [-75.82927, 0.09578], [-76.23441, 0.42294], [-76.41215, 0.38228], [-76.4094, 0.24015], [-76.89177, 0.24736], [-77.52001, 0.40782], [-77.49984, 0.64476], [-77.67815, 0.73863], [-77.66416, 0.81604], [-77.68613, 0.83029], [-77.7148, 0.85003], [-77.85677, 0.80197], [-78.42749, 1.15389], [-78.87137, 1.47457], [-82.12561, 4.00341], [-84.52388, -3.36941]]]] } },
+    { type: "Feature", properties: { m49: "001", wikidata: "Q2", nameEn: "World", aliases: ["Earth", "Planet"], level: "world" }, geometry: null },
+    { type: "Feature", properties: { m49: "002", wikidata: "Q15", nameEn: "Africa", level: "region" }, geometry: null },
+    { type: "Feature", properties: { m49: "003", wikidata: "Q49", nameEn: "North America", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "005", wikidata: "Q18", nameEn: "South America", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "009", wikidata: "Q538", nameEn: "Oceania", level: "region" }, geometry: null },
+    { type: "Feature", properties: { m49: "011", wikidata: "Q4412", nameEn: "Western Africa", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "013", wikidata: "Q27611", nameEn: "Central America", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "014", wikidata: "Q27407", nameEn: "Eastern Africa", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "015", wikidata: "Q27381", nameEn: "Northern Africa", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "017", wikidata: "Q27433", nameEn: "Middle Africa", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "018", wikidata: "Q27394", nameEn: "Southern Africa", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "019", wikidata: "Q828", nameEn: "Americas", level: "region" }, geometry: null },
+    { type: "Feature", properties: { m49: "021", wikidata: "Q2017699", nameEn: "Northern America", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "029", wikidata: "Q664609", nameEn: "Caribbean", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { m49: "030", wikidata: "Q27231", nameEn: "Eastern Asia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "034", wikidata: "Q771405", nameEn: "Southern Asia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "035", wikidata: "Q11708", nameEn: "South-eastern Asia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "039", wikidata: "Q27449", nameEn: "Southern Europe", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "053", wikidata: "Q45256", nameEn: "Australia and New Zealand", aliases: ["Australasia"], level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "054", wikidata: "Q37394", nameEn: "Melanesia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "057", wikidata: "Q3359409", nameEn: "Micronesia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "061", wikidata: "Q35942", nameEn: "Polynesia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "142", wikidata: "Q48", nameEn: "Asia", level: "region" }, geometry: null },
+    { type: "Feature", properties: { m49: "143", wikidata: "Q27275", nameEn: "Central Asia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "145", wikidata: "Q27293", nameEn: "Western Asia", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "150", wikidata: "Q46", nameEn: "Europe", level: "region" }, geometry: null },
+    { type: "Feature", properties: { m49: "151", wikidata: "Q27468", nameEn: "Eastern Europe", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "154", wikidata: "Q27479", nameEn: "Northern Europe", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "155", wikidata: "Q27496", nameEn: "Western Europe", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "202", wikidata: "Q132959", nameEn: "Sub-Saharan Africa", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "419", wikidata: "Q72829598", nameEn: "Latin America and the Caribbean", level: "subregion" }, geometry: null },
+    { type: "Feature", properties: { m49: "830", wikidata: "Q42314", nameEn: "Channel Islands", level: "intermediateRegion" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "AC", iso1A3: "ASC", wikidata: "Q46197", nameEn: "Ascension Island", aliases: ["SH-AC"], country: "GB", groups: ["SH", "BOTS", "011", "202", "002", "UN"], isoStatus: "excRes", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["247"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-14.82771, -8.70814], [-13.33271, -8.07391], [-14.91926, -6.63386], [-14.82771, -8.70814]]]] } },
+    { type: "Feature", properties: { iso1A2: "AD", iso1A3: "AND", iso1N3: "020", wikidata: "Q228", nameEn: "Andorra", groups: ["Q12837", "039", "150", "UN"], callingCodes: ["376"] }, geometry: { type: "MultiPolygon", coordinates: [[[[1.72515, 42.50338], [1.73683, 42.55492], [1.7858, 42.57698], [1.72588, 42.59098], [1.73452, 42.61515], [1.68267, 42.62533], [1.6625, 42.61982], [1.63485, 42.62957], [1.60085, 42.62703], [1.55418, 42.65669], [1.50867, 42.64483], [1.48043, 42.65203], [1.46718, 42.63296], [1.47986, 42.61346], [1.44197, 42.60217], [1.42512, 42.58292], [1.44529, 42.56722], [1.4234, 42.55959], [1.41245, 42.53539], [1.44759, 42.54431], [1.46661, 42.50949], [1.41648, 42.48315], [1.43838, 42.47848], [1.44529, 42.43724], [1.5127, 42.42959], [1.55073, 42.43299], [1.55937, 42.45808], [1.57953, 42.44957], [1.58933, 42.46275], [1.65674, 42.47125], [1.66826, 42.50779], [1.70571, 42.48867], [1.72515, 42.50338]]]] } },
+    { type: "Feature", properties: { iso1A2: "AE", iso1A3: "ARE", iso1N3: "784", wikidata: "Q878", nameEn: "United Arab Emirates", groups: ["145", "142", "UN"], callingCodes: ["971"] }, geometry: { type: "MultiPolygon", coordinates: [[[[56.26534, 25.62825], [56.25341, 25.61443], [56.26636, 25.60643], [56.25365, 25.60211], [56.20473, 25.61119], [56.18363, 25.65508], [56.14826, 25.66351], [56.13579, 25.73524], [56.17416, 25.77239], [56.13963, 25.82765], [56.19334, 25.9795], [56.15498, 26.06828], [56.08666, 26.05038], [55.81777, 26.18798], [55.14145, 25.62624], [53.97892, 24.64436], [52.82259, 25.51697], [52.35509, 25.00368], [52.02277, 24.75635], [51.83108, 24.71675], [51.58834, 24.66608], [51.41644, 24.39615], [51.58871, 24.27256], [51.59617, 24.12041], [52.56622, 22.94341], [55.13599, 22.63334], [55.2137, 22.71065], [55.22634, 23.10378], [55.57358, 23.669], [55.48677, 23.94946], [55.73301, 24.05994], [55.8308, 24.01633], [56.01799, 24.07426], [55.95472, 24.2172], [55.83367, 24.20193], [55.77658, 24.23476], [55.76558, 24.23227], [55.75257, 24.23466], [55.75382, 24.2466], [55.75939, 24.26114], [55.76781, 24.26209], [55.79145, 24.27914], [55.80747, 24.31069], [55.83395, 24.32776], [55.83271, 24.41521], [55.76461, 24.5287], [55.83271, 24.68567], [55.83408, 24.77858], [55.81348, 24.80102], [55.81116, 24.9116], [55.85094, 24.96858], [55.90849, 24.96771], [55.96316, 25.00857], [56.05715, 24.95727], [56.05106, 24.87461], [55.97467, 24.89639], [55.97836, 24.87673], [56.03535, 24.81161], [56.06128, 24.74457], [56.13684, 24.73699], [56.20062, 24.78565], [56.20568, 24.85063], [56.30269, 24.88334], [56.34873, 24.93205], [56.3227, 24.97284], [56.86325, 25.03856], [56.82555, 25.7713], [56.26534, 25.62825]], [[56.26062, 25.33108], [56.3005, 25.31815], [56.3111, 25.30107], [56.35172, 25.30681], [56.34438, 25.26653], [56.27628, 25.23404], [56.24341, 25.22867], [56.20872, 25.24104], [56.20838, 25.25668], [56.24465, 25.27505], [56.25008, 25.28843], [56.23362, 25.31253], [56.26062, 25.33108]]], [[[56.28423, 25.26344], [56.29379, 25.2754], [56.28102, 25.28486], [56.2716, 25.27916], [56.27086, 25.26128], [56.28423, 25.26344]]]] } },
+    { type: "Feature", properties: { iso1A2: "AF", iso1A3: "AFG", iso1N3: "004", wikidata: "Q889", nameEn: "Afghanistan", groups: ["034", "142", "UN"], callingCodes: ["93"] }, geometry: { type: "MultiPolygon", coordinates: [[[[70.61526, 38.34774], [70.60407, 38.28046], [70.54673, 38.24541], [70.4898, 38.12546], [70.17206, 37.93276], [70.1863, 37.84296], [70.27694, 37.81258], [70.28243, 37.66706], [70.15015, 37.52519], [69.95971, 37.5659], [69.93362, 37.61378], [69.84435, 37.60616], [69.80041, 37.5746], [69.51888, 37.5844], [69.44954, 37.4869], [69.36645, 37.40462], [69.45022, 37.23315], [69.39529, 37.16752], [69.25152, 37.09426], [69.03274, 37.25174], [68.96407, 37.32603], [68.88168, 37.33368], [68.91189, 37.26704], [68.80889, 37.32494], [68.81438, 37.23862], [68.6798, 37.27906], [68.61851, 37.19815], [68.41888, 37.13906], [68.41201, 37.10402], [68.29253, 37.10621], [68.27605, 37.00977], [68.18542, 37.02074], [68.02194, 36.91923], [67.87917, 37.0591], [67.7803, 37.08978], [67.78329, 37.1834], [67.51868, 37.26102], [67.2581, 37.17216], [67.2224, 37.24545], [67.13039, 37.27168], [67.08232, 37.35469], [66.95598, 37.40162], [66.64699, 37.32958], [66.55743, 37.35409], [66.30993, 37.32409], [65.72274, 37.55438], [65.64137, 37.45061], [65.64263, 37.34388], [65.51778, 37.23881], [64.97945, 37.21913], [64.61141, 36.6351], [64.62514, 36.44311], [64.57295, 36.34362], [64.43288, 36.24401], [64.05385, 36.10433], [63.98519, 36.03773], [63.56496, 35.95106], [63.53475, 35.90881], [63.29579, 35.85985], [63.12276, 35.86208], [63.10318, 35.81782], [63.23262, 35.67487], [63.10079, 35.63024], [63.12276, 35.53196], [63.0898, 35.43131], [62.90853, 35.37086], [62.74098, 35.25432], [62.62288, 35.22067], [62.48006, 35.28796], [62.29878, 35.13312], [62.29191, 35.25964], [62.15871, 35.33278], [62.05709, 35.43803], [61.97743, 35.4604], [61.77693, 35.41341], [61.58742, 35.43803], [61.27371, 35.61482], [61.18187, 35.30249], [61.0991, 35.27845], [61.12831, 35.09938], [61.06926, 34.82139], [61.00197, 34.70631], [60.99922, 34.63064], [60.72316, 34.52857], [60.91321, 34.30411], [60.66502, 34.31539], [60.50209, 34.13992], [60.5838, 33.80793], [60.5485, 33.73422], [60.57762, 33.59772], [60.69573, 33.56054], [60.91133, 33.55596], [60.88908, 33.50219], [60.56485, 33.12944], [60.86191, 32.22565], [60.84541, 31.49561], [61.70929, 31.37391], [61.80569, 31.16167], [61.80957, 31.12576], [61.83257, 31.0452], [61.8335, 30.97669], [61.78268, 30.92724], [61.80829, 30.84224], [60.87231, 29.86514], [62.47751, 29.40782], [63.5876, 29.50456], [64.12966, 29.39157], [64.19796, 29.50407], [64.62116, 29.58903], [65.04005, 29.53957], [66.24175, 29.85181], [66.36042, 29.9583], [66.23609, 30.06321], [66.34869, 30.404], [66.28413, 30.57001], [66.39194, 30.9408], [66.42645, 30.95309], [66.58175, 30.97532], [66.68166, 31.07597], [66.72561, 31.20526], [66.83273, 31.26867], [67.04147, 31.31561], [67.03323, 31.24519], [67.29964, 31.19586], [67.78854, 31.33203], [67.7748, 31.4188], [67.62374, 31.40473], [67.58323, 31.52772], [67.72056, 31.52304], [67.86887, 31.63536], [68.00071, 31.6564], [68.1655, 31.82691], [68.25614, 31.80357], [68.27605, 31.75863], [68.44222, 31.76446], [68.57475, 31.83158], [68.6956, 31.75687], [68.79997, 31.61665], [68.91078, 31.59687], [68.95995, 31.64822], [69.00939, 31.62249], [69.11514, 31.70782], [69.20577, 31.85957], [69.3225, 31.93186], [69.27032, 32.14141], [69.27932, 32.29119], [69.23599, 32.45946], [69.2868, 32.53938], [69.38155, 32.56601], [69.44747, 32.6678], [69.43649, 32.7302], [69.38018, 32.76601], [69.47082, 32.85834], [69.5436, 32.8768], [69.49854, 32.88843], [69.49004, 33.01509], [69.57656, 33.09911], [69.71526, 33.09911], [69.79766, 33.13247], [69.85259, 33.09451], [70.02563, 33.14282], [70.07369, 33.22557], [70.13686, 33.21064], [70.32775, 33.34496], [70.17062, 33.53535], [70.20141, 33.64387], [70.14785, 33.6553], [70.14236, 33.71701], [70.00503, 33.73528], [69.85671, 33.93719], [69.87307, 33.9689], [69.90203, 34.04194], [70.54336, 33.9463], [70.88119, 33.97933], [71.07345, 34.06242], [71.06933, 34.10564], [71.09307, 34.11961], [71.09453, 34.13524], [71.13078, 34.16503], [71.12815, 34.26619], [71.17662, 34.36769], [71.02401, 34.44835], [71.0089, 34.54568], [71.11602, 34.63047], [71.08718, 34.69034], [71.28356, 34.80882], [71.29472, 34.87728], [71.50329, 34.97328], [71.49917, 35.00478], [71.55273, 35.02615], [71.52938, 35.09023], [71.67495, 35.21262], [71.5541, 35.28776], [71.54294, 35.31037], [71.65435, 35.4479], [71.49917, 35.6267], [71.55273, 35.71483], [71.37969, 35.95865], [71.19505, 36.04134], [71.60491, 36.39429], [71.80267, 36.49924], [72.18135, 36.71838], [72.6323, 36.84601], [73.82685, 36.91421], [74.04856, 36.82648], [74.43389, 37.00977], [74.53739, 36.96224], [74.56453, 37.03023], [74.49981, 37.24518], [74.80605, 37.21565], [74.88887, 37.23275], [74.8294, 37.3435], [74.68383, 37.3948], [74.56161, 37.37734], [74.41055, 37.3948], [74.23339, 37.41116], [74.20308, 37.34208], [73.8564, 37.26158], [73.82552, 37.22659], [73.64974, 37.23643], [73.61129, 37.27469], [73.76647, 37.33913], [73.77197, 37.4417], [73.29633, 37.46495], [73.06884, 37.31729], [72.79693, 37.22222], [72.66381, 37.02014], [72.54095, 37.00007], [72.31676, 36.98115], [71.83229, 36.68084], [71.67083, 36.67346], [71.57195, 36.74943], [71.51502, 36.89128], [71.48481, 36.93218], [71.46923, 36.99925], [71.45578, 37.03094], [71.43097, 37.05855], [71.44127, 37.11856], [71.4494, 37.18137], [71.4555, 37.21418], [71.47386, 37.2269], [71.48339, 37.23937], [71.4824, 37.24921], [71.48536, 37.26017], [71.50674, 37.31502], [71.49821, 37.31975], [71.4862, 37.33405], [71.47685, 37.40281], [71.49612, 37.4279], [71.5256, 37.47971], [71.50616, 37.50733], [71.49693, 37.53527], [71.5065, 37.60912], [71.51972, 37.61945], [71.54186, 37.69691], [71.55234, 37.73209], [71.53053, 37.76534], [71.54324, 37.77104], [71.55752, 37.78677], [71.59255, 37.79956], [71.58843, 37.92425], [71.51565, 37.95349], [71.32871, 37.88564], [71.296, 37.93403], [71.2809, 37.91995], [71.24969, 37.93031], [71.27278, 37.96496], [71.27622, 37.99946], [71.28922, 38.01272], [71.29878, 38.04429], [71.36444, 38.15358], [71.37803, 38.25641], [71.33869, 38.27335], [71.33114, 38.30339], [71.21291, 38.32797], [71.1451, 38.40106], [71.10957, 38.40671], [71.10592, 38.42077], [71.09542, 38.42517], [71.0556, 38.40176], [71.03545, 38.44779], [70.98693, 38.48862], [70.92728, 38.43021], [70.88719, 38.46826], [70.84376, 38.44688], [70.82538, 38.45394], [70.81697, 38.44507], [70.80521, 38.44447], [70.79766, 38.44944], [70.78702, 38.45031], [70.78581, 38.45502], [70.77132, 38.45548], [70.75455, 38.4252], [70.72485, 38.4131], [70.69807, 38.41861], [70.67438, 38.40597], [70.6761, 38.39144], [70.69189, 38.37031], [70.64966, 38.34999], [70.61526, 38.34774]]]] } },
+    { type: "Feature", properties: { iso1A2: "AG", iso1A3: "ATG", iso1N3: "028", wikidata: "Q781", nameEn: "Antigua and Barbuda", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 268"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.66959, 18.6782], [-62.58307, 16.68909], [-62.1023, 16.97277], [-61.23098, 16.62484], [-61.66959, 18.6782]]]] } },
+    { type: "Feature", properties: { iso1A2: "AI", iso1A3: "AIA", iso1N3: "660", wikidata: "Q25228", nameEn: "Anguilla", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 264"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.79029, 19.11219], [-63.35989, 18.06012], [-62.62718, 18.26185], [-63.79029, 19.11219]]]] } },
+    { type: "Feature", properties: { iso1A2: "AL", iso1A3: "ALB", iso1N3: "008", wikidata: "Q222", nameEn: "Albania", groups: ["039", "150", "UN"], callingCodes: ["355"] }, geometry: { type: "MultiPolygon", coordinates: [[[[20.07761, 42.55582], [20.01834, 42.54622], [20.00842, 42.5109], [19.9324, 42.51699], [19.82333, 42.46581], [19.76549, 42.50237], [19.74731, 42.57422], [19.77375, 42.58517], [19.73244, 42.66299], [19.65972, 42.62774], [19.4836, 42.40831], [19.42352, 42.36546], [19.42, 42.33019], [19.28623, 42.17745], [19.40687, 42.10024], [19.37548, 42.06835], [19.36867, 42.02564], [19.37691, 41.96977], [19.34601, 41.95675], [19.33812, 41.90669], [19.37451, 41.8842], [19.37597, 41.84849], [19.26406, 41.74971], [19.0384, 40.35325], [19.95905, 39.82857], [19.97622, 39.78684], [19.92466, 39.69533], [19.98042, 39.6504], [20.00957, 39.69227], [20.05189, 39.69112], [20.12956, 39.65805], [20.15988, 39.652], [20.22376, 39.64532], [20.22707, 39.67459], [20.27412, 39.69884], [20.31961, 39.72799], [20.29152, 39.80421], [20.30804, 39.81563], [20.38572, 39.78516], [20.41475, 39.81437], [20.41546, 39.82832], [20.31135, 39.99438], [20.37911, 39.99058], [20.42373, 40.06777], [20.48487, 40.06271], [20.51297, 40.08168], [20.55593, 40.06524], [20.61081, 40.07866], [20.62566, 40.0897], [20.67162, 40.09433], [20.71789, 40.27739], [20.78234, 40.35803], [20.7906, 40.42726], [20.83688, 40.47882], [20.94925, 40.46625], [20.96908, 40.51526], [21.03932, 40.56299], [21.05833, 40.66586], [20.98134, 40.76046], [20.95752, 40.76982], [20.98396, 40.79109], [20.97887, 40.85475], [20.97693, 40.90103], [20.94305, 40.92399], [20.83671, 40.92752], [20.81567, 40.89662], [20.73504, 40.9081], [20.71634, 40.91781], [20.65558, 41.08009], [20.63454, 41.0889], [20.59832, 41.09066], [20.58546, 41.11179], [20.59715, 41.13644], [20.51068, 41.2323], [20.49432, 41.33679], [20.52119, 41.34381], [20.55976, 41.4087], [20.51301, 41.442], [20.49039, 41.49277], [20.45331, 41.51436], [20.45809, 41.5549], [20.52103, 41.56473], [20.55508, 41.58113], [20.51769, 41.65975], [20.52937, 41.69292], [20.51301, 41.72433], [20.53405, 41.78099], [20.57144, 41.7897], [20.55976, 41.87068], [20.59524, 41.8818], [20.57946, 41.91593], [20.63069, 41.94913], [20.59434, 42.03879], [20.55633, 42.08173], [20.56955, 42.12097], [20.48857, 42.25444], [20.3819, 42.3029], [20.34479, 42.32656], [20.24399, 42.32168], [20.21797, 42.41237], [20.17127, 42.50469], [20.07761, 42.55582]]]] } },
+    { type: "Feature", properties: { iso1A2: "AM", iso1A3: "ARM", iso1N3: "051", wikidata: "Q399", nameEn: "Armenia", groups: ["145", "142", "UN"], callingCodes: ["374"] }, geometry: { type: "MultiPolygon", coordinates: [[[[45.0133, 41.29747], [44.93493, 41.25685], [44.81437, 41.30371], [44.80053, 41.25949], [44.81749, 41.23488], [44.84358, 41.23088], [44.89911, 41.21366], [44.87887, 41.20195], [44.82084, 41.21513], [44.72814, 41.20338], [44.61462, 41.24018], [44.59322, 41.1933], [44.46791, 41.18204], [44.34417, 41.2382], [44.34337, 41.20312], [44.32139, 41.2079], [44.18148, 41.24644], [44.16591, 41.19141], [43.84835, 41.16329], [43.74717, 41.1117], [43.67712, 41.13398], [43.4717, 41.12611], [43.44984, 41.0988], [43.47319, 41.02251], [43.58683, 40.98961], [43.67712, 40.93084], [43.67712, 40.84846], [43.74872, 40.7365], [43.7425, 40.66805], [43.63664, 40.54159], [43.54791, 40.47413], [43.60862, 40.43267], [43.59928, 40.34019], [43.71136, 40.16673], [43.65221, 40.14889], [43.65688, 40.11199], [43.92307, 40.01787], [44.1057, 40.03555], [44.1778, 40.02845], [44.26973, 40.04866], [44.46635, 39.97733], [44.61845, 39.8281], [44.75779, 39.7148], [44.88354, 39.74432], [44.92869, 39.72157], [45.06604, 39.79277], [45.18554, 39.67846], [45.17464, 39.58614], [45.21784, 39.58074], [45.23535, 39.61373], [45.30385, 39.61373], [45.29606, 39.57654], [45.46992, 39.49888], [45.70547, 39.60174], [45.80804, 39.56716], [45.83, 39.46487], [45.79225, 39.3695], [45.99774, 39.28931], [46.02303, 39.09978], [46.06973, 39.0744], [46.14785, 38.84206], [46.20601, 38.85262], [46.34059, 38.92076], [46.53497, 38.86548], [46.51805, 38.94982], [46.54296, 39.07078], [46.44022, 39.19636], [46.52584, 39.18912], [46.54141, 39.15895], [46.58032, 39.21204], [46.63481, 39.23013], [46.56476, 39.24942], [46.50093, 39.33736], [46.43244, 39.35181], [46.37795, 39.42039], [46.4013, 39.45405], [46.53051, 39.47809], [46.51027, 39.52373], [46.57721, 39.54414], [46.57098, 39.56694], [46.52117, 39.58734], [46.42465, 39.57534], [46.40286, 39.63651], [46.18493, 39.60533], [45.96543, 39.78859], [45.82533, 39.82925], [45.7833, 39.9475], [45.60895, 39.97733], [45.59806, 40.0131], [45.78642, 40.03218], [45.83779, 39.98925], [45.97944, 40.181], [45.95609, 40.27846], [45.65098, 40.37696], [45.42994, 40.53804], [45.45484, 40.57707], [45.35366, 40.65979], [45.4206, 40.7424], [45.55914, 40.78366], [45.60584, 40.87436], [45.40814, 40.97904], [45.44083, 41.01663], [45.39725, 41.02603], [45.35677, 40.99784], [45.28859, 41.03757], [45.26162, 41.0228], [45.25897, 41.0027], [45.1994, 41.04518], [45.16493, 41.05068], [45.1634, 41.08082], [45.1313, 41.09369], [45.12923, 41.06059], [45.06784, 41.05379], [45.08028, 41.10917], [45.19942, 41.13299], [45.1969, 41.168], [45.11811, 41.19967], [45.05201, 41.19211], [45.02932, 41.2101], [45.05497, 41.2464], [45.0133, 41.29747]], [[45.21324, 40.9817], [45.21219, 40.99001], [45.20518, 40.99348], [45.19312, 40.98998], [45.18382, 41.0066], [45.20625, 41.01484], [45.23487, 41.00226], [45.23095, 40.97828], [45.21324, 40.9817]], [[45.00864, 41.03411], [44.9903, 41.05657], [44.96031, 41.06345], [44.95383, 41.07553], [44.97169, 41.09176], [45.00864, 41.09407], [45.03406, 41.07931], [45.04517, 41.06653], [45.03792, 41.03938], [45.00864, 41.03411]]], [[[45.50279, 40.58424], [45.56071, 40.64765], [45.51825, 40.67382], [45.47927, 40.65023], [45.50279, 40.58424]]]] } },
+    { type: "Feature", properties: { iso1A2: "AO", iso1A3: "AGO", iso1N3: "024", wikidata: "Q916", nameEn: "Angola", groups: ["017", "202", "002", "UN"], callingCodes: ["244"] }, geometry: { type: "MultiPolygon", coordinates: [[[[16.55507, -5.85631], [13.04371, -5.87078], [12.42245, -6.07585], [11.95767, -5.94705], [12.20376, -5.76338], [12.26557, -5.74031], [12.52318, -5.74353], [12.52301, -5.17481], [12.53599, -5.1618], [12.53586, -5.14658], [12.51589, -5.1332], [12.49815, -5.14058], [12.46297, -5.09408], [12.60251, -5.01715], [12.63465, -4.94632], [12.70868, -4.95505], [12.8733, -4.74346], [13.11195, -4.67745], [13.09648, -4.63739], [12.91489, -4.47907], [12.87096, -4.40315], [12.76844, -4.38709], [12.64835, -4.55937], [12.40964, -4.60609], [12.32324, -4.78415], [12.25587, -4.79437], [12.20901, -4.75642], [12.16068, -4.90089], [12.00924, -5.02627], [11.50888, -5.33417], [10.5065, -17.25284], [11.75063, -17.25013], [12.07076, -17.15165], [12.52111, -17.24495], [12.97145, -16.98567], [13.36212, -16.98048], [13.95896, -17.43141], [14.28743, -17.38814], [18.39229, -17.38927], [18.84226, -17.80375], [21.14283, -17.94318], [21.42741, -18.02787], [23.47474, -17.62877], [23.20038, -17.47563], [22.17217, -16.50269], [22.00323, -16.18028], [21.97988, -13.00148], [24.03339, -12.99091], [23.90937, -12.844], [24.06672, -12.29058], [23.98804, -12.13149], [24.02603, -11.15368], [24.00027, -10.89356], [23.86868, -11.02856], [23.45631, -10.946], [23.16602, -11.10577], [22.54205, -11.05784], [22.25951, -11.24911], [22.17954, -10.85884], [22.32604, -10.76291], [22.19039, -9.94628], [21.84856, -9.59871], [21.79824, -7.29628], [20.56263, -7.28566], [20.61689, -6.90876], [20.31846, -6.91953], [20.30218, -6.98955], [19.5469, -7.00195], [19.33698, -7.99743], [18.33635, -8.00126], [17.5828, -8.13784], [16.96282, -7.21787], [16.55507, -5.85631]]]] } },
+    { type: "Feature", properties: { iso1A2: "AQ", iso1A3: "ATA", iso1N3: "010", wikidata: "Q51", nameEn: "Antarctica", level: "region", callingCodes: ["672"] }, geometry: { type: "MultiPolygon", coordinates: [[[[180, -60], [-180, -60], [-180, -90], [180, -90], [180, -60]]]] } },
+    { type: "Feature", properties: { iso1A2: "AR", iso1A3: "ARG", iso1N3: "032", wikidata: "Q414", nameEn: "Argentina", aliases: ["RA"], groups: ["005", "419", "019", "UN"], callingCodes: ["54"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-72.31343, -50.58411], [-72.33873, -51.59954], [-71.99889, -51.98018], [-69.97824, -52.00845], [-68.41683, -52.33516], [-68.60702, -52.65781], [-68.60733, -54.9125], [-68.01394, -54.8753], [-67.46182, -54.92205], [-67.11046, -54.94199], [-66.07313, -55.19618], [-63.67376, -55.11859], [-54.78916, -36.21945], [-57.83001, -34.69099], [-58.34425, -34.15035], [-58.44442, -33.84033], [-58.40475, -33.11777], [-58.1224, -32.98842], [-58.22362, -32.52416], [-58.10036, -32.25338], [-58.20252, -31.86966], [-58.00076, -31.65016], [-58.0023, -31.53084], [-58.07569, -31.44916], [-57.98127, -31.3872], [-57.9908, -31.34924], [-57.86729, -31.06352], [-57.89476, -30.95994], [-57.8024, -30.77193], [-57.89115, -30.49572], [-57.64859, -30.35095], [-57.61478, -30.25165], [-57.65132, -30.19229], [-57.09386, -29.74211], [-56.81251, -29.48154], [-56.62789, -29.18073], [-56.57295, -29.11357], [-56.54171, -29.11447], [-56.05265, -28.62651], [-56.00458, -28.60421], [-56.01729, -28.51223], [-55.65418, -28.18304], [-55.6262, -28.17124], [-55.33303, -27.94661], [-55.16872, -27.86224], [-55.1349, -27.89759], [-54.90805, -27.73149], [-54.90159, -27.63132], [-54.67657, -27.57214], [-54.50416, -27.48232], [-54.41888, -27.40882], [-54.19268, -27.30751], [-54.19062, -27.27639], [-54.15978, -27.2889], [-53.80144, -27.09844], [-53.73372, -26.6131], [-53.68269, -26.33359], [-53.64505, -26.28089], [-53.64186, -26.25976], [-53.64632, -26.24798], [-53.63881, -26.25075], [-53.63739, -26.2496], [-53.65237, -26.23289], [-53.65018, -26.19501], [-53.73968, -26.10012], [-53.73391, -26.07006], [-53.7264, -26.0664], [-53.73086, -26.05842], [-53.73511, -26.04211], [-53.83691, -25.94849], [-53.90831, -25.55513], [-54.52926, -25.62846], [-54.5502, -25.58915], [-54.59398, -25.59224], [-54.62063, -25.91213], [-54.60664, -25.9691], [-54.67359, -25.98607], [-54.69333, -26.37705], [-54.70732, -26.45099], [-54.80868, -26.55669], [-55.00584, -26.78754], [-55.06351, -26.80195], [-55.16948, -26.96068], [-55.25243, -26.93808], [-55.39611, -26.97679], [-55.62322, -27.1941], [-55.59094, -27.32444], [-55.74475, -27.44485], [-55.89195, -27.3467], [-56.18313, -27.29851], [-56.85337, -27.5165], [-58.04205, -27.2387], [-58.59549, -27.29973], [-58.65321, -27.14028], [-58.3198, -26.83443], [-58.1188, -26.16704], [-57.87176, -25.93604], [-57.57431, -25.47269], [-57.80821, -25.13863], [-58.25492, -24.92528], [-58.33055, -24.97099], [-59.33886, -24.49935], [-59.45482, -24.34787], [-60.03367, -24.00701], [-60.28163, -24.04436], [-60.99754, -23.80934], [-61.0782, -23.62932], [-61.9756, -23.0507], [-62.22768, -22.55807], [-62.51761, -22.37684], [-62.64455, -22.25091], [-62.8078, -22.12534], [-62.81124, -21.9987], [-63.66482, -21.99918], [-63.68113, -22.0544], [-63.70963, -21.99934], [-63.93287, -21.99934], [-64.22918, -22.55807], [-64.31489, -22.88824], [-64.35108, -22.73282], [-64.4176, -22.67692], [-64.58888, -22.25035], [-64.67174, -22.18957], [-64.90014, -22.12136], [-64.99524, -22.08255], [-65.47435, -22.08908], [-65.57743, -22.07675], [-65.58694, -22.09794], [-65.61166, -22.09504], [-65.7467, -22.10105], [-65.9261, -21.93335], [-66.04832, -21.9187], [-66.03836, -21.84829], [-66.24077, -21.77837], [-66.29714, -22.08741], [-66.7298, -22.23644], [-67.18382, -22.81525], [-66.99632, -22.99839], [-67.33563, -24.04237], [-68.24825, -24.42596], [-68.56909, -24.69831], [-68.38372, -25.08636], [-68.57622, -25.32505], [-68.38372, -26.15353], [-68.56909, -26.28146], [-68.59048, -26.49861], [-68.27677, -26.90626], [-68.43363, -27.08414], [-68.77586, -27.16029], [-69.22504, -27.95042], [-69.66709, -28.44055], [-69.80969, -29.07185], [-69.99507, -29.28351], [-69.8596, -30.26131], [-70.14479, -30.36595], [-70.55832, -31.51559], [-69.88099, -33.34489], [-69.87386, -34.13344], [-70.49416, -35.24145], [-70.38008, -36.02375], [-70.95047, -36.4321], [-71.24279, -37.20264], [-70.89532, -38.6923], [-71.37826, -38.91474], [-71.92726, -40.72714], [-71.74901, -42.11711], [-72.15541, -42.15941], [-72.14828, -42.85321], [-71.64206, -43.64774], [-71.81318, -44.38097], [-71.16436, -44.46244], [-71.26418, -44.75684], [-72.06985, -44.81756], [-71.35687, -45.22075], [-71.75614, -45.61611], [-71.68577, -46.55385], [-71.94152, -47.13595], [-72.50478, -47.80586], [-72.27662, -48.28727], [-72.54042, -48.52392], [-72.56894, -48.81116], [-73.09655, -49.14342], [-73.45156, -49.79461], [-73.55259, -49.92488], [-73.15765, -50.78337], [-72.31343, -50.58411]]]] } },
+    { type: "Feature", properties: { iso1A2: "AS", iso1A3: "ASM", iso1N3: "016", wikidata: "Q16641", nameEn: "American Samoa", aliases: ["US-AS"], country: "US", groups: ["Q1352230", "061", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 684"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-171.39864, -10.21587], [-170.99605, -15.1275], [-166.32598, -15.26169], [-171.39864, -10.21587]]]] } },
+    { type: "Feature", properties: { iso1A2: "AT", iso1A3: "AUT", iso1N3: "040", wikidata: "Q40", nameEn: "Austria", groups: ["EU", "155", "150", "UN"], callingCodes: ["43"] }, geometry: { type: "MultiPolygon", coordinates: [[[[15.34823, 48.98444], [15.28305, 48.98831], [15.26177, 48.95766], [15.16358, 48.94278], [15.15534, 48.99056], [14.99878, 49.01444], [14.97612, 48.96983], [14.98917, 48.90082], [14.95072, 48.79101], [14.98032, 48.77959], [14.9782, 48.7766], [14.98112, 48.77524], [14.9758, 48.76857], [14.95641, 48.75915], [14.94773, 48.76268], [14.81545, 48.7874], [14.80821, 48.77711], [14.80584, 48.73489], [14.72756, 48.69502], [14.71794, 48.59794], [14.66762, 48.58215], [14.60808, 48.62881], [14.56139, 48.60429], [14.4587, 48.64695], [14.43076, 48.58855], [14.33909, 48.55852], [14.20691, 48.5898], [14.09104, 48.5943], [14.01482, 48.63788], [14.06151, 48.66873], [13.84023, 48.76988], [13.82266, 48.75544], [13.81863, 48.73257], [13.79337, 48.71375], [13.81791, 48.69832], [13.81283, 48.68426], [13.81901, 48.6761], [13.82609, 48.62345], [13.80038, 48.59487], [13.80519, 48.58026], [13.76921, 48.55324], [13.7513, 48.5624], [13.74816, 48.53058], [13.72802, 48.51208], [13.66113, 48.53558], [13.65186, 48.55092], [13.62508, 48.55501], [13.59705, 48.57013], [13.57535, 48.55912], [13.51291, 48.59023], [13.50131, 48.58091], [13.50663, 48.57506], [13.46967, 48.55157], [13.45214, 48.56472], [13.43695, 48.55776], [13.45727, 48.51092], [13.42527, 48.45711], [13.43929, 48.43386], [13.40709, 48.37292], [13.30897, 48.31575], [13.26039, 48.29422], [13.18093, 48.29577], [13.126, 48.27867], [13.0851, 48.27711], [13.02083, 48.25689], [12.95306, 48.20629], [12.87126, 48.20318], [12.84475, 48.16556], [12.836, 48.1647], [12.8362, 48.15876], [12.82673, 48.15245], [12.80676, 48.14979], [12.78595, 48.12445], [12.7617, 48.12796], [12.74973, 48.10885], [12.76141, 48.07373], [12.8549, 48.01122], [12.87476, 47.96195], [12.91683, 47.95647], [12.9211, 47.95135], [12.91985, 47.94069], [12.92668, 47.93879], [12.93419, 47.94063], [12.93642, 47.94436], [12.93886, 47.94046], [12.94163, 47.92927], [13.00588, 47.84374], [12.98543, 47.82896], [12.96311, 47.79957], [12.93202, 47.77302], [12.94371, 47.76281], [12.9353, 47.74788], [12.91711, 47.74026], [12.90274, 47.72513], [12.91333, 47.7178], [12.92969, 47.71094], [12.98578, 47.7078], [13.01382, 47.72116], [13.07692, 47.68814], [13.09562, 47.63304], [13.06407, 47.60075], [13.06641, 47.58577], [13.04537, 47.58183], [13.05355, 47.56291], [13.03252, 47.53373], [13.04537, 47.49426], [12.9998, 47.46267], [12.98344, 47.48716], [12.9624, 47.47452], [12.85256, 47.52741], [12.84672, 47.54556], [12.80699, 47.54477], [12.77427, 47.58025], [12.82101, 47.61493], [12.76492, 47.64485], [12.77777, 47.66689], [12.7357, 47.6787], [12.6071, 47.6741], [12.57438, 47.63238], [12.53816, 47.63553], [12.50076, 47.62293], [12.44117, 47.6741], [12.43883, 47.6977], [12.37222, 47.68433], [12.336, 47.69534], [12.27991, 47.68827], [12.26004, 47.67725], [12.24017, 47.69534], [12.26238, 47.73544], [12.2542, 47.7433], [12.22571, 47.71776], [12.18303, 47.70065], [12.16217, 47.70105], [12.16769, 47.68167], [12.18347, 47.66663], [12.18507, 47.65984], [12.19895, 47.64085], [12.20801, 47.61082], [12.20398, 47.60667], [12.18568, 47.6049], [12.17737, 47.60121], [12.18145, 47.61019], [12.17824, 47.61506], [12.13734, 47.60639], [12.05788, 47.61742], [12.02282, 47.61033], [12.0088, 47.62451], [11.85572, 47.60166], [11.84052, 47.58354], [11.63934, 47.59202], [11.60681, 47.57881], [11.58811, 47.55515], [11.58578, 47.52281], [11.52618, 47.50939], [11.4362, 47.51413], [11.38128, 47.47465], [11.4175, 47.44621], [11.33804, 47.44937], [11.29597, 47.42566], [11.27844, 47.39956], [11.22002, 47.3964], [11.25157, 47.43277], [11.20482, 47.43198], [11.12536, 47.41222], [11.11835, 47.39719], [10.97111, 47.39561], [10.97111, 47.41617], [10.98513, 47.42882], [10.92437, 47.46991], [10.93839, 47.48018], [10.90918, 47.48571], [10.87061, 47.4786], [10.86945, 47.5015], [10.91268, 47.51334], [10.88814, 47.53701], [10.77596, 47.51729], [10.7596, 47.53228], [10.6965, 47.54253], [10.68832, 47.55752], [10.63456, 47.5591], [10.60337, 47.56755], [10.56912, 47.53584], [10.48849, 47.54057], [10.47329, 47.58552], [10.43473, 47.58394], [10.44992, 47.5524], [10.4324, 47.50111], [10.44291, 47.48453], [10.46278, 47.47901], [10.47446, 47.43318], [10.4359, 47.41183], [10.4324, 47.38494], [10.39851, 47.37623], [10.33424, 47.30813], [10.23257, 47.27088], [10.17531, 47.27167], [10.17648, 47.29149], [10.2147, 47.31014], [10.19998, 47.32832], [10.23757, 47.37609], [10.22774, 47.38904], [10.2127, 47.38019], [10.17648, 47.38889], [10.16362, 47.36674], [10.11805, 47.37228], [10.09819, 47.35724], [10.06897, 47.40709], [10.1052, 47.4316], [10.09001, 47.46005], [10.07131, 47.45531], [10.03859, 47.48927], [10.00003, 47.48216], [9.96029, 47.53899], [9.92407, 47.53111], [9.87733, 47.54688], [9.87499, 47.52953], [9.8189, 47.54688], [9.82591, 47.58158], [9.80254, 47.59419], [9.76748, 47.5934], [9.72736, 47.53457], [9.55125, 47.53629], [9.56312, 47.49495], [9.58208, 47.48344], [9.59482, 47.46305], [9.60205, 47.46165], [9.60484, 47.46358], [9.60841, 47.47178], [9.62158, 47.45858], [9.62475, 47.45685], [9.6423, 47.45599], [9.65728, 47.45383], [9.65863, 47.44847], [9.64483, 47.43842], [9.6446, 47.43233], [9.65043, 47.41937], [9.65136, 47.40504], [9.6629, 47.39591], [9.67334, 47.39191], [9.67445, 47.38429], [9.6711, 47.37824], [9.66243, 47.37136], [9.65427, 47.36824], [9.62476, 47.36639], [9.59978, 47.34671], [9.58513, 47.31334], [9.55857, 47.29919], [9.54773, 47.2809], [9.53116, 47.27029], [9.56766, 47.24281], [9.55176, 47.22585], [9.56981, 47.21926], [9.58264, 47.20673], [9.56539, 47.17124], [9.62623, 47.14685], [9.63395, 47.08443], [9.61216, 47.07732], [9.60717, 47.06091], [9.87935, 47.01337], [9.88266, 46.93343], [9.98058, 46.91434], [10.10715, 46.84296], [10.22675, 46.86942], [10.24128, 46.93147], [10.30031, 46.92093], [10.36933, 47.00212], [10.48376, 46.93891], [10.47197, 46.85698], [10.54783, 46.84505], [10.66405, 46.87614], [10.75753, 46.82258], [10.72974, 46.78972], [11.00764, 46.76896], [11.10618, 46.92966], [11.33355, 46.99862], [11.50739, 47.00644], [11.74789, 46.98484], [12.19254, 47.09331], [12.21781, 47.03996], [12.11675, 47.01241], [12.2006, 46.88854], [12.27591, 46.88651], [12.38708, 46.71529], [12.59992, 46.6595], [12.94445, 46.60401], [13.27627, 46.56059], [13.64088, 46.53438], [13.7148, 46.5222], [13.89837, 46.52331], [14.00422, 46.48474], [14.04002, 46.49117], [14.12097, 46.47724], [14.15989, 46.43327], [14.28326, 46.44315], [14.314, 46.43327], [14.42608, 46.44614], [14.45877, 46.41717], [14.52176, 46.42617], [14.56463, 46.37208], [14.5942, 46.43434], [14.66892, 46.44936], [14.72185, 46.49974], [14.81836, 46.51046], [14.83549, 46.56614], [14.86419, 46.59411], [14.87129, 46.61], [14.92283, 46.60848], [14.96002, 46.63459], [14.98024, 46.6009], [15.01451, 46.641], [15.14215, 46.66131], [15.23711, 46.63994], [15.41235, 46.65556], [15.45514, 46.63697], [15.46906, 46.61321], [15.54431, 46.6312], [15.55333, 46.64988], [15.54533, 46.66985], [15.59826, 46.68908], [15.62317, 46.67947], [15.63255, 46.68069], [15.6365, 46.6894], [15.6543, 46.69228], [15.6543, 46.70616], [15.67411, 46.70735], [15.69523, 46.69823], [15.72279, 46.69548], [15.73823, 46.70011], [15.76771, 46.69863], [15.78518, 46.70712], [15.8162, 46.71897], [15.87691, 46.7211], [15.94864, 46.68769], [15.98512, 46.68463], [15.99988, 46.67947], [16.04036, 46.6549], [16.04347, 46.68694], [16.02808, 46.71094], [15.99769, 46.7266], [15.98432, 46.74991], [15.99126, 46.78199], [15.99054, 46.82772], [16.05786, 46.83927], [16.10983, 46.867], [16.19904, 46.94134], [16.22403, 46.939], [16.27594, 46.9643], [16.28202, 47.00159], [16.51369, 47.00084], [16.43936, 47.03548], [16.52176, 47.05747], [16.46134, 47.09395], [16.52863, 47.13974], [16.44932, 47.14418], [16.46442, 47.16845], [16.4523, 47.18812], [16.42801, 47.18422], [16.41739, 47.20649], [16.43663, 47.21127], [16.44142, 47.25079], [16.47782, 47.25918], [16.45104, 47.41181], [16.49908, 47.39416], [16.52414, 47.41007], [16.57152, 47.40868], [16.6718, 47.46139], [16.64821, 47.50155], [16.71059, 47.52692], [16.64193, 47.63114], [16.58699, 47.61772], [16.4222, 47.66537], [16.55129, 47.72268], [16.53514, 47.73837], [16.54779, 47.75074], [16.61183, 47.76171], [16.65679, 47.74197], [16.72089, 47.73469], [16.7511, 47.67878], [16.82938, 47.68432], [16.86509, 47.72268], [16.87538, 47.68895], [17.08893, 47.70928], [17.05048, 47.79377], [17.07039, 47.81129], [17.00997, 47.86245], [17.08275, 47.87719], [17.11022, 47.92461], [17.09786, 47.97336], [17.16001, 48.00636], [17.07039, 48.0317], [17.09168, 48.09366], [17.05735, 48.14179], [17.02919, 48.13996], [16.97701, 48.17385], [16.89461, 48.31332], [16.90903, 48.32519], [16.84243, 48.35258], [16.83317, 48.38138], [16.83588, 48.3844], [16.8497, 48.38321], [16.85204, 48.44968], [16.94611, 48.53614], [16.93955, 48.60371], [16.90354, 48.71541], [16.79779, 48.70998], [16.71883, 48.73806], [16.68518, 48.7281], [16.67008, 48.77699], [16.46134, 48.80865], [16.40915, 48.74576], [16.37345, 48.729], [16.06034, 48.75436], [15.84404, 48.86921], [15.78087, 48.87644], [15.75341, 48.8516], [15.6921, 48.85973], [15.61622, 48.89541], [15.51357, 48.91549], [15.48027, 48.94481], [15.34823, 48.98444]]]] } },
+    { type: "Feature", properties: { iso1A2: "AU", iso1A3: "AUS", iso1N3: "036", wikidata: "Q408", nameEn: "Australia" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "AW", iso1A3: "ABW", iso1N3: "533", wikidata: "Q21203", nameEn: "Aruba", aliases: ["NL-AW"], country: "NL", groups: ["Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["297"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-70.00823, 12.98375], [-70.35625, 12.58277], [-69.60231, 12.17], [-70.00823, 12.98375]]]] } },
+    { type: "Feature", properties: { iso1A2: "AX", iso1A3: "ALA", iso1N3: "248", wikidata: "Q5689", nameEn: "\xC5land Islands", country: "FI", groups: ["EU", "154", "150", "UN"], callingCodes: ["358 18", "358 457"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.08191, 60.19152], [20.5104, 59.15546], [21.35468, 59.67511], [21.02509, 60.12142], [21.08159, 60.20167], [21.15143, 60.54555], [20.96741, 60.71528], [19.23413, 60.61414], [19.08191, 60.19152]]]] } },
+    { type: "Feature", properties: { iso1A2: "AZ", iso1A3: "AZE", iso1N3: "031", wikidata: "Q227", nameEn: "Azerbaijan", groups: ["145", "142", "UN"], callingCodes: ["994"] }, geometry: { type: "MultiPolygon", coordinates: [[[[46.42738, 41.91323], [46.3984, 41.84399], [46.30863, 41.79133], [46.23962, 41.75811], [46.20538, 41.77205], [46.17891, 41.72094], [46.19759, 41.62327], [46.24429, 41.59883], [46.26531, 41.63339], [46.28182, 41.60089], [46.3253, 41.60912], [46.34039, 41.5947], [46.34126, 41.57454], [46.29794, 41.5724], [46.33925, 41.4963], [46.40307, 41.48464], [46.4669, 41.43331], [46.63658, 41.37727], [46.72375, 41.28609], [46.66148, 41.20533], [46.63969, 41.09515], [46.55096, 41.1104], [46.48558, 41.0576], [46.456, 41.09984], [46.37661, 41.10805], [46.27698, 41.19011], [46.13221, 41.19479], [45.95786, 41.17956], [45.80842, 41.2229], [45.69946, 41.29545], [45.75705, 41.35157], [45.71035, 41.36208], [45.68389, 41.3539], [45.45973, 41.45898], [45.4006, 41.42402], [45.31352, 41.47168], [45.26285, 41.46433], [45.1797, 41.42231], [45.09867, 41.34065], [45.0133, 41.29747], [45.05497, 41.2464], [45.02932, 41.2101], [45.05201, 41.19211], [45.11811, 41.19967], [45.1969, 41.168], [45.19942, 41.13299], [45.08028, 41.10917], [45.06784, 41.05379], [45.12923, 41.06059], [45.1313, 41.09369], [45.1634, 41.08082], [45.16493, 41.05068], [45.1994, 41.04518], [45.25897, 41.0027], [45.26162, 41.0228], [45.28859, 41.03757], [45.35677, 40.99784], [45.39725, 41.02603], [45.44083, 41.01663], [45.40814, 40.97904], [45.60584, 40.87436], [45.55914, 40.78366], [45.4206, 40.7424], [45.35366, 40.65979], [45.45484, 40.57707], [45.42994, 40.53804], [45.65098, 40.37696], [45.95609, 40.27846], [45.97944, 40.181], [45.83779, 39.98925], [45.78642, 40.03218], [45.59806, 40.0131], [45.60895, 39.97733], [45.7833, 39.9475], [45.82533, 39.82925], [45.96543, 39.78859], [46.18493, 39.60533], [46.40286, 39.63651], [46.42465, 39.57534], [46.52117, 39.58734], [46.57098, 39.56694], [46.57721, 39.54414], [46.51027, 39.52373], [46.53051, 39.47809], [46.4013, 39.45405], [46.37795, 39.42039], [46.43244, 39.35181], [46.50093, 39.33736], [46.56476, 39.24942], [46.63481, 39.23013], [46.58032, 39.21204], [46.54141, 39.15895], [46.52584, 39.18912], [46.44022, 39.19636], [46.54296, 39.07078], [46.51805, 38.94982], [46.53497, 38.86548], [46.75752, 39.03231], [46.83822, 39.13143], [46.92539, 39.16644], [46.95341, 39.13505], [47.05771, 39.20143], [47.05927, 39.24846], [47.31301, 39.37492], [47.38978, 39.45999], [47.50099, 39.49615], [47.84774, 39.66285], [47.98977, 39.70999], [48.34264, 39.42935], [48.37385, 39.37584], [48.15984, 39.30028], [48.12404, 39.25208], [48.15361, 39.19419], [48.31239, 39.09278], [48.33884, 39.03022], [48.28437, 38.97186], [48.08627, 38.94434], [48.07734, 38.91616], [48.01409, 38.90333], [48.02581, 38.82705], [48.24773, 38.71883], [48.3146, 38.59958], [48.45084, 38.61013], [48.58793, 38.45076], [48.62217, 38.40198], [48.70001, 38.40564], [48.78979, 38.45026], [48.81072, 38.44853], [48.84969, 38.45015], [48.88288, 38.43975], [52.39847, 39.43556], [48.80971, 41.95365], [48.5867, 41.84306], [48.55078, 41.77917], [48.42301, 41.65444], [48.40277, 41.60441], [48.2878, 41.56221], [48.22064, 41.51472], [48.07587, 41.49957], [47.87973, 41.21798], [47.75831, 41.19455], [47.62288, 41.22969], [47.54504, 41.20275], [47.49004, 41.26366], [47.34579, 41.27884], [47.10762, 41.59044], [47.03757, 41.55434], [46.99554, 41.59743], [47.00955, 41.63583], [46.8134, 41.76252], [46.75269, 41.8623], [46.58924, 41.80547], [46.5332, 41.87389], [46.42738, 41.91323]], [[45.50279, 40.58424], [45.47927, 40.65023], [45.51825, 40.67382], [45.56071, 40.64765], [45.50279, 40.58424]]], [[[45.00864, 41.03411], [45.03792, 41.03938], [45.04517, 41.06653], [45.03406, 41.07931], [45.00864, 41.09407], [44.97169, 41.09176], [44.95383, 41.07553], [44.96031, 41.06345], [44.9903, 41.05657], [45.00864, 41.03411]]], [[[45.21324, 40.9817], [45.23095, 40.97828], [45.23487, 41.00226], [45.20625, 41.01484], [45.18382, 41.0066], [45.19312, 40.98998], [45.20518, 40.99348], [45.21219, 40.99001], [45.21324, 40.9817]]], [[[45.46992, 39.49888], [45.29606, 39.57654], [45.30385, 39.61373], [45.23535, 39.61373], [45.21784, 39.58074], [45.17464, 39.58614], [45.18554, 39.67846], [45.06604, 39.79277], [44.92869, 39.72157], [44.88354, 39.74432], [44.75779, 39.7148], [44.80977, 39.65768], [44.81043, 39.62677], [44.88916, 39.59653], [44.96746, 39.42998], [45.05932, 39.36435], [45.08751, 39.35052], [45.16168, 39.21952], [45.30489, 39.18333], [45.40148, 39.09007], [45.40452, 39.07224], [45.44811, 39.04927], [45.44966, 38.99243], [45.6131, 38.964], [45.6155, 38.94304], [45.65172, 38.95199], [45.83883, 38.90768], [45.90266, 38.87739], [45.94624, 38.89072], [46.00228, 38.87376], [46.06766, 38.87861], [46.14785, 38.84206], [46.06973, 39.0744], [46.02303, 39.09978], [45.99774, 39.28931], [45.79225, 39.3695], [45.83, 39.46487], [45.80804, 39.56716], [45.70547, 39.60174], [45.46992, 39.49888]]]] } },
+    { type: "Feature", properties: { iso1A2: "BA", iso1A3: "BIH", iso1N3: "070", wikidata: "Q225", nameEn: "Bosnia and Herzegovina", groups: ["039", "150", "UN"], callingCodes: ["387"] }, geometry: { type: "MultiPolygon", coordinates: [[[[17.84826, 45.04489], [17.66571, 45.13408], [17.59104, 45.10816], [17.51469, 45.10791], [17.47589, 45.12656], [17.45615, 45.12523], [17.4498, 45.16119], [17.41229, 45.13335], [17.33573, 45.14521], [17.32092, 45.16246], [17.26815, 45.18444], [17.25131, 45.14957], [17.24325, 45.146], [17.18438, 45.14764], [17.0415, 45.20759], [16.9385, 45.22742], [16.92405, 45.27607], [16.83804, 45.18951], [16.81137, 45.18434], [16.78219, 45.19002], [16.74845, 45.20393], [16.64962, 45.20714], [16.60194, 45.23042], [16.56559, 45.22307], [16.5501, 45.2212], [16.52982, 45.22713], [16.49155, 45.21153], [16.4634, 45.14522], [16.40023, 45.1147], [16.38309, 45.05955], [16.38219, 45.05139], [16.3749, 45.05206], [16.35863, 45.03529], [16.35404, 45.00241], [16.29036, 44.99732], [16.12153, 45.09616], [15.98412, 45.23088], [15.83512, 45.22459], [15.76371, 45.16508], [15.78842, 45.11519], [15.74585, 45.0638], [15.78568, 44.97401], [15.74723, 44.96818], [15.76096, 44.87045], [15.79472, 44.8455], [15.72584, 44.82334], [15.8255, 44.71501], [15.89348, 44.74964], [16.05828, 44.61538], [16.00884, 44.58605], [16.03012, 44.55572], [16.10566, 44.52586], [16.16814, 44.40679], [16.12969, 44.38275], [16.21346, 44.35231], [16.18688, 44.27012], [16.36864, 44.08263], [16.43662, 44.07523], [16.43629, 44.02826], [16.50528, 44.0244], [16.55472, 43.95326], [16.70922, 43.84887], [16.75316, 43.77157], [16.80736, 43.76011], [17.00585, 43.58037], [17.15828, 43.49376], [17.24411, 43.49376], [17.29699, 43.44542], [17.25579, 43.40353], [17.286, 43.33065], [17.46986, 43.16559], [17.64268, 43.08595], [17.70879, 42.97223], [17.5392, 42.92787], [17.6444, 42.88641], [17.68151, 42.92725], [17.7948, 42.89556], [17.80854, 42.9182], [17.88201, 42.83668], [18.24318, 42.6112], [18.36197, 42.61423], [18.43735, 42.55921], [18.49778, 42.58409], [18.53751, 42.57376], [18.55504, 42.58409], [18.52232, 42.62279], [18.57373, 42.64429], [18.54841, 42.68328], [18.54603, 42.69171], [18.55221, 42.69045], [18.56789, 42.72074], [18.47324, 42.74992], [18.45921, 42.81682], [18.47633, 42.85829], [18.4935, 42.86433], [18.49661, 42.89306], [18.49076, 42.95553], [18.52232, 43.01451], [18.66254, 43.03928], [18.64735, 43.14766], [18.66605, 43.2056], [18.71747, 43.2286], [18.6976, 43.25243], [18.76538, 43.29838], [18.85342, 43.32426], [18.84794, 43.33735], [18.83912, 43.34795], [18.90911, 43.36383], [18.95819, 43.32899], [18.95001, 43.29327], [19.00844, 43.24988], [19.04233, 43.30008], [19.08206, 43.29668], [19.08673, 43.31453], [19.04071, 43.397], [19.01078, 43.43854], [18.96053, 43.45042], [18.95469, 43.49367], [18.91379, 43.50299], [19.01078, 43.55806], [19.04934, 43.50384], [19.13933, 43.5282], [19.15685, 43.53943], [19.22807, 43.5264], [19.24774, 43.53061], [19.2553, 43.5938], [19.33426, 43.58833], [19.36653, 43.60921], [19.41941, 43.54056], [19.42696, 43.57987], [19.50455, 43.58385], [19.5176, 43.71403], [19.3986, 43.79668], [19.23465, 43.98764], [19.24363, 44.01502], [19.38439, 43.96611], [19.52515, 43.95573], [19.56498, 43.99922], [19.61836, 44.01464], [19.61991, 44.05254], [19.57467, 44.04716], [19.55999, 44.06894], [19.51167, 44.08158], [19.47321, 44.1193], [19.48386, 44.14332], [19.47338, 44.15034], [19.43905, 44.13088], [19.40927, 44.16722], [19.3588, 44.18353], [19.34773, 44.23244], [19.32464, 44.27185], [19.26945, 44.26957], [19.23306, 44.26097], [19.20508, 44.2917], [19.18328, 44.28383], [19.16741, 44.28648], [19.13332, 44.31492], [19.13556, 44.338], [19.11547, 44.34218], [19.1083, 44.3558], [19.11865, 44.36712], [19.10298, 44.36924], [19.10365, 44.37795], [19.10704, 44.38249], [19.10749, 44.39421], [19.11785, 44.40313], [19.14681, 44.41463], [19.14837, 44.45253], [19.12278, 44.50132], [19.13369, 44.52521], [19.16699, 44.52197], [19.26388, 44.65412], [19.32543, 44.74058], [19.36722, 44.88164], [19.18183, 44.92055], [19.01994, 44.85493], [18.8704, 44.85097], [18.76347, 44.90669], [18.76369, 44.93707], [18.80661, 44.93561], [18.78357, 44.97741], [18.65723, 45.07544], [18.47939, 45.05871], [18.41896, 45.11083], [18.32077, 45.1021], [18.24387, 45.13699], [18.1624, 45.07654], [18.03121, 45.12632], [18.01594, 45.15163], [17.99479, 45.14958], [17.97834, 45.13831], [17.97336, 45.12245], [17.93706, 45.08016], [17.87148, 45.04645], [17.84826, 45.04489]]]] } },
+    { type: "Feature", properties: { iso1A2: "BB", iso1A3: "BRB", iso1N3: "052", wikidata: "Q244", nameEn: "Barbados", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", callingCodes: ["1 246"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-58.56442, 13.24471], [-59.80731, 13.87556], [-59.82929, 12.70644], [-58.56442, 13.24471]]]] } },
+    { type: "Feature", properties: { iso1A2: "BD", iso1A3: "BGD", iso1N3: "050", wikidata: "Q902", nameEn: "Bangladesh", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["880"] }, geometry: { type: "MultiPolygon", coordinates: [[[[89.15869, 26.13708], [89.08899, 26.38845], [88.95612, 26.4564], [88.92357, 26.40711], [88.91321, 26.37984], [89.05328, 26.2469], [88.85004, 26.23211], [88.78961, 26.31093], [88.67837, 26.26291], [88.69485, 26.38353], [88.62144, 26.46783], [88.4298, 26.54489], [88.41196, 26.63837], [88.33093, 26.48929], [88.35153, 26.45241], [88.36938, 26.48683], [88.48749, 26.45855], [88.51649, 26.35923], [88.35153, 26.29123], [88.34757, 26.22216], [88.1844, 26.14417], [88.16581, 26.0238], [88.08804, 25.91334], [88.13138, 25.78773], [88.242, 25.80811], [88.45103, 25.66245], [88.4559, 25.59227], [88.677, 25.46959], [88.81296, 25.51546], [88.85278, 25.34679], [89.01105, 25.30303], [89.00463, 25.26583], [88.94067, 25.18534], [88.44766, 25.20149], [88.46277, 25.07468], [88.33917, 24.86803], [88.27325, 24.88796], [88.21832, 24.96642], [88.14004, 24.93529], [88.15515, 24.85806], [88.00683, 24.66477], [88.08786, 24.63232], [88.12296, 24.51301], [88.50934, 24.32474], [88.68801, 24.31464], [88.74841, 24.1959], [88.6976, 24.14703], [88.73743, 23.91751], [88.66189, 23.87607], [88.58087, 23.87105], [88.56507, 23.64044], [88.74841, 23.47361], [88.79351, 23.50535], [88.79254, 23.46028], [88.71133, 23.2492], [88.99148, 23.21134], [88.86377, 23.08759], [88.88327, 23.03885], [88.87063, 22.95235], [88.96713, 22.83346], [88.9151, 22.75228], [88.94614, 22.66941], [88.9367, 22.58527], [89.07114, 22.15335], [89.08044, 21.41871], [92.47409, 20.38654], [92.26071, 21.05697], [92.17752, 21.17445], [92.20087, 21.337], [92.37939, 21.47764], [92.43158, 21.37025], [92.55105, 21.3856], [92.60187, 21.24615], [92.68152, 21.28454], [92.59775, 21.6092], [92.62187, 21.87037], [92.60949, 21.97638], [92.56616, 22.13554], [92.60029, 22.1522], [92.5181, 22.71441], [92.37665, 22.9435], [92.38214, 23.28705], [92.26541, 23.70392], [92.15417, 23.73409], [92.04706, 23.64229], [91.95093, 23.73284], [91.95642, 23.47361], [91.84789, 23.42235], [91.76417, 23.26619], [91.81634, 23.08001], [91.7324, 23.00043], [91.61571, 22.93929], [91.54993, 23.01051], [91.46615, 23.2328], [91.4035, 23.27522], [91.40848, 23.07117], [91.36453, 23.06612], [91.28293, 23.37538], [91.15579, 23.6599], [91.25192, 23.83463], [91.22308, 23.89616], [91.29587, 24.0041], [91.35741, 23.99072], [91.37414, 24.10693], [91.55542, 24.08687], [91.63782, 24.1132], [91.65292, 24.22095], [91.73257, 24.14703], [91.76004, 24.23848], [91.82596, 24.22345], [91.89258, 24.14674], [91.96603, 24.3799], [92.11662, 24.38997], [92.15796, 24.54435], [92.25854, 24.9191], [92.38626, 24.86055], [92.49887, 24.88796], [92.39147, 25.01471], [92.33957, 25.07593], [92.0316, 25.1834], [91.63648, 25.12846], [91.25517, 25.20677], [90.87427, 25.15799], [90.65042, 25.17788], [90.40034, 25.1534], [90.1155, 25.22686], [89.90478, 25.31038], [89.87629, 25.28337], [89.83371, 25.29548], [89.84086, 25.31854], [89.81208, 25.37244], [89.86129, 25.61714], [89.84388, 25.70042], [89.80585, 25.82489], [89.86592, 25.93115], [89.77728, 26.04254], [89.77865, 26.08387], [89.73581, 26.15818], [89.70201, 26.15138], [89.63968, 26.22595], [89.57101, 25.9682], [89.53515, 26.00382], [89.35953, 26.0077], [89.15869, 26.13708]]]] } },
+    { type: "Feature", properties: { iso1A2: "BE", iso1A3: "BEL", iso1N3: "056", wikidata: "Q31", nameEn: "Belgium", groups: ["EU", "155", "150", "UN"], callingCodes: ["32"] }, geometry: { type: "MultiPolygon", coordinates: [[[[4.93295, 51.44945], [4.93909, 51.44632], [4.9524, 51.45014], [4.95244, 51.45207], [4.93295, 51.44945]]], [[[4.91493, 51.4353], [4.92652, 51.43329], [4.92952, 51.42984], [4.93986, 51.43064], [4.94265, 51.44003], [4.93471, 51.43861], [4.93416, 51.44185], [4.94025, 51.44193], [4.93544, 51.44634], [4.92879, 51.44161], [4.92815, 51.43856], [4.92566, 51.44273], [4.92811, 51.4437], [4.92287, 51.44741], [4.91811, 51.44621], [4.92227, 51.44252], [4.91935, 51.43634], [4.91493, 51.4353]]], [[[4.82946, 51.4213], [4.82409, 51.44736], [4.84139, 51.4799], [4.78803, 51.50284], [4.77321, 51.50529], [4.74578, 51.48937], [4.72935, 51.48424], [4.65442, 51.42352], [4.57489, 51.4324], [4.53521, 51.4243], [4.52846, 51.45002], [4.54675, 51.47265], [4.5388, 51.48184], [4.47736, 51.4778], [4.38122, 51.44905], [4.39747, 51.43316], [4.38064, 51.41965], [4.43777, 51.36989], [4.39292, 51.35547], [4.34086, 51.35738], [4.33265, 51.37687], [4.21923, 51.37443], [4.24024, 51.35371], [4.16721, 51.29348], [4.05165, 51.24171], [4.01957, 51.24504], [3.97889, 51.22537], [3.90125, 51.20371], [3.78783, 51.2151], [3.78999, 51.25766], [3.58939, 51.30064], [3.51502, 51.28697], [3.52698, 51.2458], [3.43488, 51.24135], [3.41704, 51.25933], [3.38289, 51.27331], [3.35847, 51.31572], [3.38696, 51.33436], [3.36263, 51.37112], [2.56575, 51.85301], [2.18458, 51.52087], [2.55904, 51.07014], [2.57551, 51.00326], [2.63074, 50.94746], [2.59093, 50.91751], [2.63331, 50.81457], [2.71165, 50.81295], [2.81056, 50.71773], [2.8483, 50.72276], [2.86985, 50.7033], [2.87937, 50.70298], [2.88504, 50.70656], [2.90069, 50.69263], [2.91036, 50.6939], [2.90873, 50.702], [2.95019, 50.75138], [2.96778, 50.75242], [3.00537, 50.76588], [3.04314, 50.77674], [3.09163, 50.77717], [3.10614, 50.78303], [3.11206, 50.79416], [3.11987, 50.79188], [3.1257, 50.78603], [3.15017, 50.79031], [3.16476, 50.76843], [3.18339, 50.74981], [3.18811, 50.74025], [3.20064, 50.73547], [3.19017, 50.72569], [3.20845, 50.71662], [3.22042, 50.71019], [3.24593, 50.71389], [3.26063, 50.70086], [3.26141, 50.69151], [3.2536, 50.68977], [3.264, 50.67668], [3.23951, 50.6585], [3.2729, 50.60718], [3.28575, 50.52724], [3.37693, 50.49538], [3.44629, 50.51009], [3.47385, 50.53397], [3.51564, 50.5256], [3.49509, 50.48885], [3.5683, 50.50192], [3.58361, 50.49049], [3.61014, 50.49568], [3.64426, 50.46275], [3.66153, 50.45165], [3.67494, 50.40239], [3.67262, 50.38663], [3.65709, 50.36873], [3.66976, 50.34563], [3.71009, 50.30305], [3.70987, 50.3191], [3.73911, 50.34809], [3.84314, 50.35219], [3.90781, 50.32814], [3.96771, 50.34989], [4.0268, 50.35793], [4.0689, 50.3254], [4.10237, 50.31247], [4.10957, 50.30234], [4.11954, 50.30425], [4.13665, 50.25609], [4.16808, 50.25786], [4.15524, 50.2833], [4.17347, 50.28838], [4.17861, 50.27443], [4.20651, 50.27333], [4.21945, 50.25539], [4.15524, 50.21103], [4.16014, 50.19239], [4.13561, 50.13078], [4.20147, 50.13535], [4.23101, 50.06945], [4.16294, 50.04719], [4.13508, 50.01976], [4.14239, 49.98034], [4.20532, 49.95803], [4.31963, 49.97043], [4.35051, 49.95315], [4.43488, 49.94122], [4.51098, 49.94659], [4.5414, 49.96911], [4.68695, 49.99685], [4.70064, 50.09384], [4.75237, 50.11314], [4.82438, 50.16878], [4.83279, 50.15331], [4.88602, 50.15182], [4.8382, 50.06738], [4.78827, 49.95609], [4.88529, 49.9236], [4.85134, 49.86457], [4.86965, 49.82271], [4.85464, 49.78995], [4.96714, 49.79872], [5.09249, 49.76193], [5.14545, 49.70287], [5.26232, 49.69456], [5.31465, 49.66846], [5.33039, 49.6555], [5.30214, 49.63055], [5.3137, 49.61225], [5.33851, 49.61599], [5.34837, 49.62889], [5.3974, 49.61596], [5.43713, 49.5707], [5.46734, 49.52648], [5.46541, 49.49825], [5.55001, 49.52729], [5.60909, 49.51228], [5.64505, 49.55146], [5.75649, 49.54321], [5.7577, 49.55915], [5.77435, 49.56298], [5.79195, 49.55228], [5.81838, 49.54777], [5.84143, 49.5533], [5.84692, 49.55663], [5.8424, 49.56082], [5.87256, 49.57539], [5.86986, 49.58756], [5.84971, 49.58674], [5.84826, 49.5969], [5.8762, 49.60898], [5.87609, 49.62047], [5.88393, 49.62802], [5.88552, 49.63507], [5.90599, 49.63853], [5.90164, 49.6511], [5.9069, 49.66377], [5.86175, 49.67862], [5.86527, 49.69291], [5.88677, 49.70951], [5.86503, 49.72739], [5.84193, 49.72161], [5.82562, 49.72395], [5.83149, 49.74729], [5.82245, 49.75048], [5.78871, 49.7962], [5.75409, 49.79239], [5.74953, 49.81428], [5.74364, 49.82058], [5.74844, 49.82435], [5.7404, 49.83452], [5.74076, 49.83823], [5.74975, 49.83933], [5.74953, 49.84709], [5.75884, 49.84811], [5.74567, 49.85368], [5.75861, 49.85631], [5.75269, 49.8711], [5.78415, 49.87922], [5.73621, 49.89796], [5.77314, 49.93646], [5.77291, 49.96056], [5.80833, 49.96451], [5.81163, 49.97142], [5.83467, 49.97823], [5.83968, 49.9892], [5.82331, 49.99662], [5.81866, 50.01286], [5.8551, 50.02683], [5.86904, 50.04614], [5.85474, 50.06342], [5.8857, 50.07824], [5.89488, 50.11476], [5.95929, 50.13295], [5.96453, 50.17259], [6.02488, 50.18283], [6.03093, 50.16362], [6.06406, 50.15344], [6.08577, 50.17246], [6.12028, 50.16374], [6.1137, 50.13668], [6.1379, 50.12964], [6.15298, 50.14126], [6.14132, 50.14971], [6.14588, 50.17106], [6.18739, 50.1822], [6.18364, 50.20815], [6.16853, 50.2234], [6.208, 50.25179], [6.28797, 50.27458], [6.29949, 50.30887], [6.32488, 50.32333], [6.35701, 50.31139], [6.40641, 50.32425], [6.40785, 50.33557], [6.3688, 50.35898], [6.34406, 50.37994], [6.36852, 50.40776], [6.37219, 50.45397], [6.34005, 50.46083], [6.3465, 50.48833], [6.30809, 50.50058], [6.26637, 50.50272], [6.22335, 50.49578], [6.20599, 50.52089], [6.19193, 50.5212], [6.18716, 50.52653], [6.19579, 50.5313], [6.19735, 50.53576], [6.17802, 50.54179], [6.17739, 50.55875], [6.20281, 50.56952], [6.22581, 50.5907], [6.24005, 50.58732], [6.24888, 50.59869], [6.2476, 50.60392], [6.26957, 50.62444], [6.17852, 50.6245], [6.11707, 50.72231], [6.04428, 50.72861], [6.0406, 50.71848], [6.0326, 50.72647], [6.03889, 50.74618], [6.01976, 50.75398], [5.97545, 50.75441], [5.95942, 50.7622], [5.89132, 50.75124], [5.89129, 50.75125], [5.88734, 50.77092], [5.84888, 50.75448], [5.84548, 50.76542], [5.80673, 50.7558], [5.77513, 50.78308], [5.76533, 50.78159], [5.74356, 50.7691], [5.73904, 50.75674], [5.72216, 50.76398], [5.69469, 50.75529], [5.68091, 50.75804], [5.70107, 50.7827], [5.68995, 50.79641], [5.70118, 50.80764], [5.65259, 50.82309], [5.64009, 50.84742], [5.64504, 50.87107], [5.67886, 50.88142], [5.69858, 50.91046], [5.71626, 50.90796], [5.72644, 50.91167], [5.72545, 50.92312], [5.74644, 50.94723], [5.75927, 50.95601], [5.74752, 50.96202], [5.72875, 50.95428], [5.71864, 50.96092], [5.76242, 50.99703], [5.77688, 51.02483], [5.75961, 51.03113], [5.77258, 51.06196], [5.79835, 51.05834], [5.79903, 51.09371], [5.82921, 51.09328], [5.83226, 51.10585], [5.8109, 51.10861], [5.80798, 51.11661], [5.85508, 51.14445], [5.82564, 51.16753], [5.77697, 51.1522], [5.77735, 51.17845], [5.74617, 51.18928], [5.70344, 51.1829], [5.65528, 51.18736], [5.65145, 51.19788], [5.5603, 51.22249], [5.5569, 51.26544], [5.515, 51.29462], [5.48476, 51.30053], [5.46519, 51.2849], [5.4407, 51.28169], [5.41672, 51.26248], [5.347, 51.27502], [5.33886, 51.26314], [5.29716, 51.26104], [5.26461, 51.26693], [5.23814, 51.26064], [5.22542, 51.26888], [5.24244, 51.30495], [5.2002, 51.32243], [5.16222, 51.31035], [5.13377, 51.31592], [5.13105, 51.34791], [5.07102, 51.39469], [5.10456, 51.43163], [5.07891, 51.4715], [5.04774, 51.47022], [5.03281, 51.48679], [5.0106, 51.47167], [5.00393, 51.44406], [4.92152, 51.39487], [4.90016, 51.41404], [4.84988, 51.41502], [4.78941, 51.41102], [4.77229, 51.41337], [4.76577, 51.43046], [4.78314, 51.43319], [4.82946, 51.4213]]]] } },
+    { type: "Feature", properties: { iso1A2: "BF", iso1A3: "BFA", iso1N3: "854", wikidata: "Q965", nameEn: "Burkina Faso", groups: ["011", "202", "002", "UN"], callingCodes: ["226"] }, geometry: { type: "MultiPolygon", coordinates: [[[[0.23859, 15.00135], [0.06588, 14.96961], [-0.24673, 15.07805], [-0.72004, 15.08655], [-1.05875, 14.7921], [-1.32166, 14.72774], [-1.68083, 14.50023], [-1.97945, 14.47709], [-1.9992, 14.19011], [-2.10223, 14.14878], [-2.47587, 14.29671], [-2.66175, 14.14713], [-2.84667, 14.05532], [-2.90831, 13.81174], [-2.88189, 13.64921], [-3.26407, 13.70699], [-3.28396, 13.5422], [-3.23599, 13.29035], [-3.43507, 13.27272], [-3.4313, 13.1588], [-3.54454, 13.1781], [-3.7911, 13.36665], [-3.96282, 13.38164], [-3.90558, 13.44375], [-3.96501, 13.49778], [-4.34477, 13.12927], [-4.21819, 12.95722], [-4.238, 12.71467], [-4.47356, 12.71252], [-4.41412, 12.31922], [-4.57703, 12.19875], [-4.54841, 12.1385], [-4.62546, 12.13204], [-4.62987, 12.06531], [-4.70692, 12.06746], [-4.72893, 12.01579], [-5.07897, 11.97918], [-5.26389, 11.84778], [-5.40258, 11.8327], [-5.26389, 11.75728], [-5.29251, 11.61715], [-5.22867, 11.60421], [-5.20665, 11.43811], [-5.25509, 11.36905], [-5.25949, 11.24816], [-5.32553, 11.21578], [-5.32994, 11.13371], [-5.49284, 11.07538], [-5.41579, 10.84628], [-5.47083, 10.75329], [-5.46643, 10.56074], [-5.51058, 10.43177], [-5.39602, 10.2929], [-5.12465, 10.29788], [-4.96453, 9.99923], [-4.96621, 9.89132], [-4.6426, 9.70696], [-4.31392, 9.60062], [-4.25999, 9.76012], [-3.69703, 9.94279], [-3.31779, 9.91125], [-3.27228, 9.84981], [-3.19306, 9.93781], [-3.16609, 9.85147], [-3.00765, 9.74019], [-2.93012, 9.57403], [-2.76494, 9.40778], [-2.68802, 9.49343], [-2.76534, 9.56589], [-2.74174, 9.83172], [-2.83108, 10.40252], [-2.94232, 10.64281], [-2.83373, 11.0067], [-0.67143, 10.99811], [-0.61937, 10.91305], [-0.44298, 11.04292], [-0.42391, 11.11661], [-0.38219, 11.12596], [-0.35955, 11.07801], [-0.28566, 11.12713], [-0.27374, 11.17157], [-0.13493, 11.14075], [0.50388, 11.01011], [0.48852, 10.98561], [0.50521, 10.98035], [0.4958, 10.93269], [0.66104, 10.99964], [0.91245, 10.99597], [0.9813, 11.08876], [1.03409, 11.04719], [1.42823, 11.46822], [2.00988, 11.42227], [2.29983, 11.68254], [2.39723, 11.89473], [2.05785, 12.35539], [2.26349, 12.41915], [0.99167, 13.10727], [0.99253, 13.37515], [1.18873, 13.31771], [1.21217, 13.37853], [1.24516, 13.33968], [1.28509, 13.35488], [1.24429, 13.39373], [1.20088, 13.38951], [1.02813, 13.46635], [0.99514, 13.5668], [0.77637, 13.64442], [0.77377, 13.6866], [0.61924, 13.68491], [0.38051, 14.05575], [0.16936, 14.51654], [0.23859, 15.00135]]]] } },
+    { type: "Feature", properties: { iso1A2: "BG", iso1A3: "BGR", iso1N3: "100", wikidata: "Q219", nameEn: "Bulgaria", groups: ["EU", "151", "150", "UN"], callingCodes: ["359"] }, geometry: { type: "MultiPolygon", coordinates: [[[[23.05288, 43.79494], [22.85314, 43.84452], [22.83753, 43.88055], [22.87873, 43.9844], [23.01674, 44.01946], [23.04988, 44.07694], [22.67173, 44.21564], [22.61711, 44.16938], [22.61688, 44.06534], [22.41449, 44.00514], [22.35558, 43.81281], [22.41043, 43.69566], [22.47582, 43.6558], [22.53397, 43.47225], [22.82036, 43.33665], [22.89727, 43.22417], [23.00806, 43.19279], [22.98104, 43.11199], [22.89521, 43.03625], [22.78397, 42.98253], [22.74826, 42.88701], [22.54302, 42.87774], [22.43309, 42.82057], [22.4997, 42.74144], [22.43983, 42.56851], [22.55669, 42.50144], [22.51961, 42.3991], [22.47498, 42.3915], [22.45919, 42.33822], [22.34773, 42.31725], [22.38136, 42.30339], [22.47251, 42.20393], [22.50289, 42.19527], [22.51224, 42.15457], [22.67701, 42.06614], [22.86749, 42.02275], [22.90254, 41.87587], [22.96682, 41.77137], [23.01239, 41.76527], [23.03342, 41.71034], [22.95513, 41.63265], [22.96331, 41.35782], [22.93334, 41.34104], [23.1833, 41.31755], [23.21953, 41.33773], [23.22771, 41.37106], [23.31301, 41.40525], [23.33639, 41.36317], [23.40416, 41.39999], [23.52453, 41.40262], [23.63203, 41.37632], [23.67644, 41.41139], [23.76525, 41.40175], [23.80148, 41.43943], [23.89613, 41.45257], [23.91483, 41.47971], [23.96975, 41.44118], [24.06908, 41.46132], [24.06323, 41.53222], [24.10063, 41.54796], [24.18126, 41.51735], [24.27124, 41.57682], [24.30513, 41.51297], [24.52599, 41.56808], [24.61129, 41.42278], [24.71529, 41.41928], [24.8041, 41.34913], [24.82514, 41.4035], [24.86136, 41.39298], [24.90928, 41.40876], [24.942, 41.38685], [25.11611, 41.34212], [25.28322, 41.23411], [25.48187, 41.28506], [25.52394, 41.2798], [25.55082, 41.31667], [25.61042, 41.30614], [25.66183, 41.31316], [25.70507, 41.29209], [25.8266, 41.34563], [25.87919, 41.30526], [26.12926, 41.35878], [26.16548, 41.42278], [26.20288, 41.43943], [26.14796, 41.47533], [26.176, 41.50072], [26.17951, 41.55409], [26.14328, 41.55496], [26.15146, 41.60828], [26.07083, 41.64584], [26.06148, 41.70345], [26.16841, 41.74858], [26.21325, 41.73223], [26.22888, 41.74139], [26.2654, 41.71544], [26.30255, 41.70925], [26.35957, 41.71149], [26.32952, 41.73637], [26.33589, 41.76802], [26.36952, 41.82265], [26.53968, 41.82653], [26.57961, 41.90024], [26.56051, 41.92995], [26.62996, 41.97644], [26.79143, 41.97386], [26.95638, 42.00741], [27.03277, 42.0809], [27.08486, 42.08735], [27.19251, 42.06028], [27.22376, 42.10152], [27.27411, 42.10409], [27.45478, 41.96591], [27.52379, 41.93756], [27.55191, 41.90928], [27.69949, 41.97515], [27.81235, 41.94803], [27.83492, 41.99709], [27.91479, 41.97902], [28.02971, 41.98066], [28.32297, 41.98371], [29.24336, 43.70874], [28.23293, 43.76], [27.99558, 43.84193], [27.92008, 44.00761], [27.73468, 43.95326], [27.64542, 44.04958], [27.60834, 44.01206], [27.39757, 44.0141], [27.26845, 44.12602], [26.95141, 44.13555], [26.62712, 44.05698], [26.38764, 44.04356], [26.10115, 43.96908], [26.05584, 43.90925], [25.94911, 43.85745], [25.72792, 43.69263], [25.39528, 43.61866], [25.17144, 43.70261], [25.10718, 43.6831], [24.96682, 43.72693], [24.73542, 43.68523], [24.62281, 43.74082], [24.50264, 43.76314], [24.35364, 43.70211], [24.18149, 43.68218], [23.73978, 43.80627], [23.61687, 43.79289], [23.4507, 43.84936], [23.26772, 43.84843], [23.05288, 43.79494]]]] } },
+    { type: "Feature", properties: { iso1A2: "BH", iso1A3: "BHR", iso1N3: "048", wikidata: "Q398", nameEn: "Bahrain", groups: ["145", "142", "UN"], callingCodes: ["973"] }, geometry: { type: "MultiPolygon", coordinates: [[[[50.93865, 26.30758], [50.71771, 26.73086], [50.38162, 26.53976], [50.26923, 26.08243], [50.302, 25.87592], [50.57069, 25.57887], [50.80824, 25.54641], [50.7801, 25.595], [50.86149, 25.6965], [50.81266, 25.88946], [50.93865, 26.30758]]]] } },
+    { type: "Feature", properties: { iso1A2: "BI", iso1A3: "BDI", iso1N3: "108", wikidata: "Q967", nameEn: "Burundi", groups: ["014", "202", "002", "UN"], callingCodes: ["257"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.54501, -2.41404], [30.42933, -2.31064], [30.14034, -2.43626], [29.95911, -2.33348], [29.88237, -2.75105], [29.36805, -2.82933], [29.32234, -2.6483], [29.0562, -2.58632], [29.04081, -2.7416], [29.00167, -2.78523], [29.00404, -2.81978], [29.0505, -2.81774], [29.09119, -2.87871], [29.09797, -2.91935], [29.16037, -2.95457], [29.17258, -2.99385], [29.25633, -3.05471], [29.21463, -3.3514], [29.23708, -3.75856], [29.43673, -4.44845], [29.63827, -4.44681], [29.75109, -4.45836], [29.77289, -4.41733], [29.82885, -4.36153], [29.88172, -4.35743], [30.03323, -4.26631], [30.22042, -4.01738], [30.45915, -3.56532], [30.84165, -3.25152], [30.83823, -2.97837], [30.6675, -2.98987], [30.57926, -2.89791], [30.4987, -2.9573], [30.40662, -2.86151], [30.52747, -2.65841], [30.41789, -2.66266], [30.54501, -2.41404]]]] } },
+    { type: "Feature", properties: { iso1A2: "BJ", iso1A3: "BEN", iso1N3: "204", wikidata: "Q962", nameEn: "Benin", aliases: ["DY"], groups: ["011", "202", "002", "UN"], callingCodes: ["229"] }, geometry: { type: "MultiPolygon", coordinates: [[[[3.59375, 11.70269], [3.48187, 11.86092], [3.31613, 11.88495], [3.25352, 12.01467], [2.83978, 12.40585], [2.6593, 12.30631], [2.37783, 12.24804], [2.39657, 12.10952], [2.45824, 11.98672], [2.39723, 11.89473], [2.29983, 11.68254], [2.00988, 11.42227], [1.42823, 11.46822], [1.03409, 11.04719], [0.9813, 11.08876], [0.91245, 10.99597], [0.8804, 10.803], [0.80358, 10.71459], [0.77666, 10.37665], [1.35507, 9.99525], [1.36624, 9.5951], [1.33675, 9.54765], [1.41746, 9.3226], [1.5649, 9.16941], [1.61838, 9.0527], [1.64249, 6.99562], [1.55877, 6.99737], [1.61812, 6.74843], [1.58105, 6.68619], [1.76906, 6.43189], [1.79826, 6.28221], [1.62913, 6.24075], [1.67336, 6.02702], [2.74181, 6.13349], [2.70566, 6.38038], [2.70464, 6.50831], [2.74334, 6.57291], [2.7325, 6.64057], [2.78204, 6.70514], [2.78823, 6.76356], [2.73405, 6.78508], [2.74024, 6.92802], [2.71702, 6.95722], [2.76965, 7.13543], [2.74489, 7.42565], [2.79442, 7.43486], [2.78668, 7.5116], [2.73405, 7.5423], [2.73095, 7.7755], [2.67523, 7.87825], [2.77907, 9.06924], [3.08017, 9.10006], [3.14147, 9.28375], [3.13928, 9.47167], [3.25093, 9.61632], [3.34726, 9.70696], [3.32099, 9.78032], [3.35383, 9.83641], [3.54429, 9.87739], [3.66908, 10.18136], [3.57275, 10.27185], [3.6844, 10.46351], [3.78292, 10.40538], [3.84243, 10.59316], [3.71505, 11.13015], [3.49175, 11.29765], [3.59375, 11.70269]]]] } },
+    { type: "Feature", properties: { iso1A2: "BL", iso1A3: "BLM", iso1N3: "652", wikidata: "Q25362", nameEn: "Saint-Barth\xE9lemy", country: "FR", groups: ["EU", "Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["590"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.62718, 18.26185], [-63.1055, 17.86651], [-62.34423, 17.49165], [-62.62718, 18.26185]]]] } },
+    { type: "Feature", properties: { iso1A2: "BM", iso1A3: "BMU", iso1N3: "060", wikidata: "Q23635", nameEn: "Bermuda", country: "GB", groups: ["BOTS", "021", "003", "019", "UN"], driveSide: "left", callingCodes: ["1 441"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.20987, 32.6953], [-65.31453, 32.68437], [-65.63955, 31.43417], [-63.20987, 32.6953]]]] } },
+    { type: "Feature", properties: { iso1A2: "BN", iso1A3: "BRN", iso1N3: "096", wikidata: "Q921", nameEn: "Brunei", groups: ["Q36117", "035", "142", "UN"], driveSide: "left", callingCodes: ["673"] }, geometry: { type: "MultiPolygon", coordinates: [[[[115.16236, 5.01011], [115.02521, 5.35005], [114.10166, 4.76112], [114.07448, 4.58441], [114.15813, 4.57], [114.26876, 4.49878], [114.32176, 4.34942], [114.32176, 4.2552], [114.4416, 4.27588], [114.49922, 4.13108], [114.64211, 4.00694], [114.78539, 4.12205], [114.88039, 4.4257], [114.83189, 4.42387], [114.77303, 4.72871], [114.8266, 4.75062], [114.88841, 4.81905], [114.96982, 4.81146], [114.99417, 4.88201], [115.05038, 4.90275], [115.02955, 4.82087], [115.02278, 4.74137], [115.04064, 4.63706], [115.07737, 4.53418], [115.09978, 4.39123], [115.31275, 4.30806], [115.36346, 4.33563], [115.2851, 4.42295], [115.27819, 4.63661], [115.20737, 4.8256], [115.15092, 4.87604], [115.16236, 5.01011]]]] } },
+    { type: "Feature", properties: { iso1A2: "BO", iso1A3: "BOL", iso1N3: "068", wikidata: "Q750", nameEn: "Bolivia", groups: ["005", "419", "019", "UN"], callingCodes: ["591"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.90248, -12.52544], [-64.22539, -12.45267], [-64.30708, -12.46398], [-64.99778, -11.98604], [-65.30027, -11.48749], [-65.28141, -10.86289], [-65.35402, -10.78685], [-65.37923, -10.35141], [-65.29019, -9.86253], [-65.40615, -9.63894], [-65.56244, -9.84266], [-65.68343, -9.75323], [-67.17784, -10.34016], [-68.71533, -11.14749], [-68.7651, -11.0496], [-68.75179, -11.03688], [-68.75265, -11.02383], [-68.74802, -11.00891], [-69.42792, -10.93451], [-69.47839, -10.95254], [-69.57156, -10.94555], [-68.98115, -11.8979], [-68.65044, -12.50689], [-68.85615, -12.87769], [-68.8864, -13.40792], [-69.05265, -13.68546], [-68.88135, -14.18639], [-69.36254, -14.94634], [-69.14856, -15.23478], [-69.40336, -15.61358], [-69.20291, -16.16668], [-69.09986, -16.22693], [-68.96238, -16.194], [-68.79464, -16.33272], [-68.98358, -16.42165], [-69.04027, -16.57214], [-69.00853, -16.66769], [-69.16896, -16.72233], [-69.62883, -17.28142], [-69.46863, -17.37466], [-69.46897, -17.4988], [-69.46623, -17.60518], [-69.34126, -17.72753], [-69.28671, -17.94844], [-69.07496, -18.03715], [-69.14807, -18.16893], [-69.07432, -18.28259], [-68.94987, -18.93302], [-68.87082, -19.06003], [-68.80602, -19.08355], [-68.61989, -19.27584], [-68.41218, -19.40499], [-68.66761, -19.72118], [-68.54611, -19.84651], [-68.57132, -20.03134], [-68.74273, -20.08817], [-68.7276, -20.46178], [-68.44023, -20.62701], [-68.55383, -20.7355], [-68.53957, -20.91542], [-68.40403, -20.94562], [-68.18816, -21.28614], [-67.85114, -22.87076], [-67.54284, -22.89771], [-67.18382, -22.81525], [-66.7298, -22.23644], [-66.29714, -22.08741], [-66.24077, -21.77837], [-66.03836, -21.84829], [-66.04832, -21.9187], [-65.9261, -21.93335], [-65.7467, -22.10105], [-65.61166, -22.09504], [-65.58694, -22.09794], [-65.57743, -22.07675], [-65.47435, -22.08908], [-64.99524, -22.08255], [-64.90014, -22.12136], [-64.67174, -22.18957], [-64.58888, -22.25035], [-64.4176, -22.67692], [-64.35108, -22.73282], [-64.31489, -22.88824], [-64.22918, -22.55807], [-63.93287, -21.99934], [-63.70963, -21.99934], [-63.68113, -22.0544], [-63.66482, -21.99918], [-62.81124, -21.9987], [-62.8078, -22.12534], [-62.64455, -22.25091], [-62.2757, -21.06657], [-62.26883, -20.55311], [-61.93912, -20.10053], [-61.73723, -19.63958], [-60.00638, -19.2981], [-59.06965, -19.29148], [-58.23216, -19.80058], [-58.16225, -20.16193], [-57.8496, -19.98346], [-58.14215, -19.76276], [-57.78463, -19.03259], [-57.71113, -19.03161], [-57.69134, -19.00544], [-57.71995, -18.97546], [-57.71995, -18.89573], [-57.76764, -18.90087], [-57.56807, -18.25655], [-57.48237, -18.24219], [-57.69877, -17.8431], [-57.73949, -17.56095], [-57.90082, -17.44555], [-57.99661, -17.5273], [-58.32935, -17.28195], [-58.5058, -16.80958], [-58.30918, -16.3699], [-58.32431, -16.25861], [-58.41506, -16.32636], [-60.16069, -16.26479], [-60.23797, -15.50267], [-60.58224, -15.09887], [-60.23968, -15.09515], [-60.27887, -14.63021], [-60.46037, -14.22496], [-60.48053, -13.77981], [-61.05527, -13.50054], [-61.81151, -13.49564], [-63.76259, -12.42952], [-63.90248, -12.52544]]]] } },
+    { type: "Feature", properties: { iso1A2: "BQ", iso1A3: "BES", iso1N3: "535", wikidata: "Q27561", nameEn: "Caribbean Netherlands", country: "NL" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "BR", iso1A3: "BRA", iso1N3: "076", wikidata: "Q155", nameEn: "Brazil", groups: ["005", "419", "019", "UN"], callingCodes: ["55"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-59.69361, 4.34069], [-59.78878, 4.45637], [-60.15953, 4.53456], [-60.04189, 4.69801], [-59.98129, 5.07097], [-60.20944, 5.28754], [-60.32352, 5.21299], [-60.73204, 5.20931], [-60.5802, 4.94312], [-60.86539, 4.70512], [-60.98303, 4.54167], [-61.15703, 4.49839], [-61.31457, 4.54167], [-61.29675, 4.44216], [-61.48569, 4.43149], [-61.54629, 4.2822], [-62.13094, 4.08309], [-62.44822, 4.18621], [-62.57656, 4.04754], [-62.74411, 4.03331], [-62.7655, 3.73099], [-62.98296, 3.59935], [-63.21111, 3.96219], [-63.4464, 3.9693], [-63.42233, 3.89995], [-63.50611, 3.83592], [-63.67099, 4.01731], [-63.70218, 3.91417], [-63.86082, 3.94796], [-63.99183, 3.90172], [-64.14512, 4.12932], [-64.57648, 4.12576], [-64.72977, 4.28931], [-64.84028, 4.24665], [-64.48379, 3.7879], [-64.02908, 2.79797], [-64.0257, 2.48156], [-63.39114, 2.4317], [-63.39827, 2.16098], [-64.06135, 1.94722], [-64.08274, 1.64792], [-64.34654, 1.35569], [-64.38932, 1.5125], [-65.11657, 1.12046], [-65.57288, 0.62856], [-65.50158, 0.92086], [-65.6727, 1.01353], [-66.28507, 0.74585], [-66.85795, 1.22998], [-67.08222, 1.17441], [-67.15784, 1.80439], [-67.299, 1.87494], [-67.40488, 2.22258], [-67.9292, 1.82455], [-68.18632, 2.00091], [-68.26699, 1.83463], [-68.18128, 1.72881], [-69.38621, 1.70865], [-69.53746, 1.76408], [-69.83491, 1.69353], [-69.82987, 1.07864], [-69.26017, 1.06856], [-69.14422, 0.84172], [-69.20976, 0.57958], [-69.47696, 0.71065], [-70.04162, 0.55437], [-70.03658, -0.19681], [-69.603, -0.51947], [-69.59796, -0.75136], [-69.4215, -1.01853], [-69.43395, -1.42219], [-69.94708, -4.2431], [-70.00888, -4.37833], [-70.11305, -4.27281], [-70.19582, -4.3607], [-70.33236, -4.15214], [-70.77601, -4.15717], [-70.96814, -4.36915], [-71.87003, -4.51661], [-72.64391, -5.0391], [-72.83973, -5.14765], [-73.24579, -6.05764], [-73.12983, -6.43852], [-73.73986, -6.87919], [-73.77011, -7.28944], [-73.96938, -7.58465], [-73.65485, -7.77897], [-73.76576, -7.89884], [-72.92886, -9.04074], [-73.21498, -9.40904], [-72.72216, -9.41397], [-72.31883, -9.5184], [-72.14742, -9.98049], [-71.23394, -9.9668], [-70.53373, -9.42628], [-70.58453, -9.58303], [-70.55429, -9.76692], [-70.62487, -9.80666], [-70.64134, -11.0108], [-70.51395, -10.92249], [-70.38791, -11.07096], [-69.90896, -10.92744], [-69.57835, -10.94051], [-69.57156, -10.94555], [-69.47839, -10.95254], [-69.42792, -10.93451], [-68.74802, -11.00891], [-68.75265, -11.02383], [-68.75179, -11.03688], [-68.7651, -11.0496], [-68.71533, -11.14749], [-67.17784, -10.34016], [-65.68343, -9.75323], [-65.56244, -9.84266], [-65.40615, -9.63894], [-65.29019, -9.86253], [-65.37923, -10.35141], [-65.35402, -10.78685], [-65.28141, -10.86289], [-65.30027, -11.48749], [-64.99778, -11.98604], [-64.30708, -12.46398], [-64.22539, -12.45267], [-63.90248, -12.52544], [-63.76259, -12.42952], [-61.81151, -13.49564], [-61.05527, -13.50054], [-60.48053, -13.77981], [-60.46037, -14.22496], [-60.27887, -14.63021], [-60.23968, -15.09515], [-60.58224, -15.09887], [-60.23797, -15.50267], [-60.16069, -16.26479], [-58.41506, -16.32636], [-58.32431, -16.25861], [-58.30918, -16.3699], [-58.5058, -16.80958], [-58.32935, -17.28195], [-57.99661, -17.5273], [-57.90082, -17.44555], [-57.73949, -17.56095], [-57.69877, -17.8431], [-57.48237, -18.24219], [-57.56807, -18.25655], [-57.76764, -18.90087], [-57.71995, -18.89573], [-57.71995, -18.97546], [-57.69134, -19.00544], [-57.71113, -19.03161], [-57.78463, -19.03259], [-58.14215, -19.76276], [-57.8496, -19.98346], [-58.16225, -20.16193], [-57.84536, -20.93155], [-57.93492, -21.65505], [-57.88239, -21.6868], [-57.94642, -21.73799], [-57.98625, -22.09157], [-56.6508, -22.28387], [-56.5212, -22.11556], [-56.45893, -22.08072], [-56.23206, -22.25347], [-55.8331, -22.29008], [-55.74941, -22.46436], [-55.741, -22.52018], [-55.72366, -22.5519], [-55.6986, -22.56268], [-55.68742, -22.58407], [-55.62493, -22.62765], [-55.63849, -22.95122], [-55.5446, -23.22811], [-55.52288, -23.2595], [-55.5555, -23.28237], [-55.43585, -23.87157], [-55.44117, -23.9185], [-55.41784, -23.9657], [-55.12292, -23.99669], [-55.0518, -23.98666], [-55.02691, -23.97317], [-54.6238, -23.83078], [-54.32807, -24.01865], [-54.28207, -24.07305], [-54.4423, -25.13381], [-54.62033, -25.46026], [-54.60196, -25.48397], [-54.59509, -25.53696], [-54.59398, -25.59224], [-54.5502, -25.58915], [-54.52926, -25.62846], [-53.90831, -25.55513], [-53.83691, -25.94849], [-53.73511, -26.04211], [-53.73086, -26.05842], [-53.7264, -26.0664], [-53.73391, -26.07006], [-53.73968, -26.10012], [-53.65018, -26.19501], [-53.65237, -26.23289], [-53.63739, -26.2496], [-53.63881, -26.25075], [-53.64632, -26.24798], [-53.64186, -26.25976], [-53.64505, -26.28089], [-53.68269, -26.33359], [-53.73372, -26.6131], [-53.80144, -27.09844], [-54.15978, -27.2889], [-54.19062, -27.27639], [-54.19268, -27.30751], [-54.41888, -27.40882], [-54.50416, -27.48232], [-54.67657, -27.57214], [-54.90159, -27.63132], [-54.90805, -27.73149], [-55.1349, -27.89759], [-55.16872, -27.86224], [-55.33303, -27.94661], [-55.6262, -28.17124], [-55.65418, -28.18304], [-56.01729, -28.51223], [-56.00458, -28.60421], [-56.05265, -28.62651], [-56.54171, -29.11447], [-56.57295, -29.11357], [-56.62789, -29.18073], [-56.81251, -29.48154], [-57.09386, -29.74211], [-57.65132, -30.19229], [-57.22502, -30.26121], [-56.90236, -30.02578], [-56.49267, -30.39471], [-56.4795, -30.3899], [-56.4619, -30.38457], [-55.87388, -31.05053], [-55.58866, -30.84117], [-55.5634, -30.8686], [-55.55373, -30.8732], [-55.55218, -30.88193], [-55.54572, -30.89051], [-55.53431, -30.89714], [-55.53276, -30.90218], [-55.52712, -30.89997], [-55.51862, -30.89828], [-55.50841, -30.9027], [-55.50821, -30.91349], [-54.17384, -31.86168], [-53.76024, -32.0751], [-53.39572, -32.58596], [-53.37671, -32.57005], [-53.1111, -32.71147], [-53.53459, -33.16843], [-53.52794, -33.68908], [-53.44031, -33.69344], [-53.39593, -33.75169], [-53.37138, -33.74313], [-52.83257, -34.01481], [-28.34015, -20.99094], [-28.99601, 1.86593], [-51.35485, 4.8383], [-51.63798, 4.51394], [-51.61983, 4.14596], [-51.79599, 3.89336], [-51.82312, 3.85825], [-51.85573, 3.83427], [-52.31787, 3.17896], [-52.6906, 2.37298], [-52.96539, 2.1881], [-53.78743, 2.34412], [-54.16286, 2.10779], [-54.6084, 2.32856], [-55.01919, 2.564], [-55.71493, 2.40342], [-55.96292, 2.53188], [-56.13054, 2.27723], [-55.92159, 2.05236], [-55.89863, 1.89861], [-55.99278, 1.83137], [-56.47045, 1.95135], [-56.7659, 1.89509], [-57.07092, 1.95304], [-57.09109, 2.01854], [-57.23981, 1.95808], [-57.35073, 1.98327], [-57.55743, 1.69605], [-57.77281, 1.73344], [-57.97336, 1.64566], [-58.01873, 1.51966], [-58.33887, 1.58014], [-58.4858, 1.48399], [-58.53571, 1.29154], [-58.84229, 1.17749], [-58.92072, 1.31293], [-59.25583, 1.40559], [-59.74066, 1.87596], [-59.7264, 2.27497], [-59.91177, 2.36759], [-59.99733, 2.92312], [-59.79769, 3.37162], [-59.86899, 3.57089], [-59.51963, 3.91951], [-59.73353, 4.20399], [-59.69361, 4.34069]]]] } },
+    { type: "Feature", properties: { iso1A2: "BS", iso1A3: "BHS", iso1N3: "044", wikidata: "Q778", nameEn: "The Bahamas", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 242"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-72.98446, 20.4801], [-71.70065, 25.7637], [-78.91214, 27.76553], [-80.65727, 23.71953], [-72.98446, 20.4801]]]] } },
+    { type: "Feature", properties: { iso1A2: "BT", iso1A3: "BTN", iso1N3: "064", wikidata: "Q917", nameEn: "Bhutan", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["975"] }, geometry: { type: "MultiPolygon", coordinates: [[[[91.6469, 27.76358], [91.5629, 27.84823], [91.48973, 27.93903], [91.46327, 28.0064], [91.25779, 28.07509], [91.20019, 27.98715], [90.69894, 28.07784], [90.58842, 28.02838], [90.13387, 28.19178], [89.79762, 28.23979], [89.59525, 28.16433], [89.12825, 27.62502], [89.0582, 27.60985], [88.97213, 27.51671], [88.95355, 27.4106], [89.00216, 27.32532], [88.96947, 27.30319], [88.93678, 27.33777], [88.91901, 27.32483], [88.74219, 27.144], [88.86984, 27.10937], [88.8714, 26.97488], [88.92301, 26.99286], [88.95807, 26.92668], [89.09554, 26.89089], [89.12825, 26.81661], [89.1926, 26.81329], [89.37913, 26.86224], [89.38319, 26.85963], [89.3901, 26.84225], [89.42349, 26.83727], [89.63369, 26.74402], [89.86124, 26.73307], [90.04535, 26.72422], [90.30402, 26.85098], [90.39271, 26.90704], [90.48504, 26.8594], [90.67715, 26.77215], [91.50067, 26.79223], [91.83181, 26.87318], [92.05523, 26.8692], [92.11863, 26.893], [92.03457, 27.07334], [92.04702, 27.26861], [92.12019, 27.27829], [92.01132, 27.47352], [91.65007, 27.48287], [91.55819, 27.6144], [91.6469, 27.76358]]]] } },
+    { type: "Feature", properties: { iso1A2: "BV", iso1A3: "BVT", iso1N3: "074", wikidata: "Q23408", nameEn: "Bouvet Island", country: "NO", groups: ["005", "419", "019", "UN"] }, geometry: { type: "MultiPolygon", coordinates: [[[[4.54042, -54.0949], [2.28941, -54.13089], [3.35353, -55.17558], [4.54042, -54.0949]]]] } },
+    { type: "Feature", properties: { iso1A2: "BW", iso1A3: "BWA", iso1N3: "072", wikidata: "Q963", nameEn: "Botswana", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["267"] }, geometry: { type: "MultiPolygon", coordinates: [[[[25.26433, -17.79571], [25.16882, -17.78253], [25.05895, -17.84452], [24.95586, -17.79674], [24.73364, -17.89338], [24.71887, -17.9218], [24.6303, -17.9863], [24.57485, -18.07151], [24.40577, -17.95726], [24.19416, -18.01919], [23.61088, -18.4881], [23.29618, -17.99855], [23.0996, -18.00075], [21.45556, -18.31795], [20.99904, -18.31743], [20.99751, -22.00026], [19.99912, -21.99991], [19.99817, -24.76768], [20.02809, -24.78725], [20.03678, -24.81004], [20.29826, -24.94869], [20.64795, -25.47827], [20.86081, -26.14892], [20.61754, -26.4692], [20.63275, -26.78181], [20.68596, -26.9039], [20.87031, -26.80047], [21.13353, -26.86661], [21.37869, -26.82083], [21.69322, -26.86152], [21.7854, -26.79199], [21.77114, -26.69015], [21.83291, -26.65959], [21.90703, -26.66808], [22.06192, -26.61882], [22.21206, -26.3773], [22.41921, -26.23078], [22.56365, -26.19668], [22.70808, -25.99186], [22.86012, -25.50572], [23.03497, -25.29971], [23.47588, -25.29971], [23.9244, -25.64286], [24.18287, -25.62916], [24.36531, -25.773], [24.44703, -25.73021], [24.67319, -25.81749], [24.8946, -25.80723], [25.01718, -25.72507], [25.12266, -25.75931], [25.33076, -25.76616], [25.58543, -25.6343], [25.6643, -25.4491], [25.69661, -25.29284], [25.72702, -25.25503], [25.88571, -24.87802], [25.84295, -24.78661], [25.8515, -24.75727], [26.39409, -24.63468], [26.46346, -24.60358], [26.51667, -24.47219], [26.84165, -24.24885], [26.99749, -23.65486], [27.33768, -23.40917], [27.52393, -23.37952], [27.6066, -23.21894], [27.74154, -23.2137], [27.93539, -23.04941], [27.93729, -22.96194], [28.04752, -22.90243], [28.04562, -22.8394], [28.34874, -22.5694], [28.63287, -22.55887], [28.91889, -22.44299], [29.0151, -22.22907], [29.10881, -22.21202], [29.15268, -22.21399], [29.18974, -22.18599], [29.21955, -22.17771], [29.37703, -22.19581], [29.3533, -22.18363], [29.24648, -22.05967], [29.1974, -22.07472], [29.14501, -22.07275], [29.08495, -22.04867], [29.04108, -22.00563], [29.02191, -21.95665], [29.02191, -21.90647], [29.04023, -21.85864], [29.07763, -21.81877], [28.58114, -21.63455], [28.49942, -21.66634], [28.29416, -21.59037], [28.01669, -21.57624], [27.91407, -21.31621], [27.69171, -21.08409], [27.72972, -20.51735], [27.69361, -20.48531], [27.28865, -20.49873], [27.29831, -20.28935], [27.21278, -20.08244], [26.72246, -19.92707], [26.17227, -19.53709], [25.96226, -19.08152], [25.99837, -19.02943], [25.94326, -18.90362], [25.82353, -18.82808], [25.79217, -18.6355], [25.68859, -18.56165], [25.53465, -18.39041], [25.39972, -18.12691], [25.31799, -18.07091], [25.23909, -17.90832], [25.26433, -17.79571]]]] } },
+    { type: "Feature", properties: { iso1A2: "BY", iso1A3: "BLR", iso1N3: "112", wikidata: "Q184", nameEn: "Belarus", groups: ["151", "150", "UN"], callingCodes: ["375"] }, geometry: { type: "MultiPolygon", coordinates: [[[[28.15217, 56.16964], [27.97865, 56.11849], [27.63065, 55.89687], [27.61683, 55.78558], [27.3541, 55.8089], [27.27804, 55.78299], [27.1559, 55.85032], [26.97153, 55.8102], [26.87448, 55.7172], [26.76872, 55.67658], [26.71802, 55.70645], [26.64888, 55.70515], [26.63231, 55.67968], [26.63167, 55.57887], [26.55094, 55.5093], [26.5522, 55.40277], [26.44937, 55.34832], [26.5709, 55.32572], [26.6714, 55.33902], [26.80929, 55.31642], [26.83266, 55.30444], [26.835, 55.28182], [26.73017, 55.24226], [26.72983, 55.21788], [26.68075, 55.19787], [26.69243, 55.16718], [26.54753, 55.14181], [26.51481, 55.16051], [26.46249, 55.12814], [26.35121, 55.1525], [26.30628, 55.12536], [26.23202, 55.10439], [26.26941, 55.08032], [26.20397, 54.99729], [26.13386, 54.98924], [26.05907, 54.94631], [25.99129, 54.95705], [25.89462, 54.93438], [25.74122, 54.80108], [25.75977, 54.57252], [25.68045, 54.5321], [25.64813, 54.48704], [25.62203, 54.4656], [25.63371, 54.42075], [25.5376, 54.33158], [25.55425, 54.31591], [25.68513, 54.31727], [25.78553, 54.23327], [25.78563, 54.15747], [25.71084, 54.16704], [25.64875, 54.1259], [25.54724, 54.14925], [25.51452, 54.17799], [25.56823, 54.25212], [25.509, 54.30267], [25.35559, 54.26544], [25.22705, 54.26271], [25.19199, 54.219], [25.0728, 54.13419], [24.991, 54.14241], [24.96894, 54.17589], [24.77131, 54.11091], [24.85311, 54.02862], [24.74279, 53.96663], [24.69185, 53.96543], [24.69652, 54.01901], [24.62275, 54.00217], [24.44411, 53.90076], [24.34128, 53.90076], [24.19638, 53.96405], [23.98837, 53.92554], [23.95098, 53.9613], [23.81309, 53.94205], [23.80543, 53.89558], [23.71726, 53.93379], [23.61677, 53.92691], [23.51284, 53.95052], [23.62004, 53.60942], [23.81995, 53.24131], [23.85657, 53.22923], [23.91393, 53.16469], [23.87548, 53.0831], [23.92184, 53.02079], [23.94689, 52.95919], [23.91805, 52.94016], [23.93763, 52.71332], [23.73615, 52.6149], [23.58296, 52.59868], [23.45112, 52.53774], [23.34141, 52.44845], [23.18196, 52.28812], [23.20071, 52.22848], [23.47859, 52.18215], [23.54314, 52.12148], [23.61, 52.11264], [23.64066, 52.07626], [23.68733, 51.9906], [23.61523, 51.92066], [23.62691, 51.78208], [23.53198, 51.74298], [23.57053, 51.55938], [23.56236, 51.53673], [23.62751, 51.50512], [23.6736, 51.50255], [23.60906, 51.62122], [23.7766, 51.66809], [23.91118, 51.63316], [23.8741, 51.59734], [23.99907, 51.58369], [24.13075, 51.66979], [24.3163, 51.75063], [24.29021, 51.80841], [24.37123, 51.88222], [24.98784, 51.91273], [25.20228, 51.97143], [25.46163, 51.92205], [25.73673, 51.91973], [25.80574, 51.94556], [25.83217, 51.92587], [26.00408, 51.92967], [26.19084, 51.86781], [26.39367, 51.87315], [26.46962, 51.80501], [26.69759, 51.82284], [26.80043, 51.75777], [26.9489, 51.73788], [26.99422, 51.76933], [27.20602, 51.77291], [27.20948, 51.66713], [27.26613, 51.65957], [27.24828, 51.60161], [27.47212, 51.61184], [27.51058, 51.5854], [27.55727, 51.63486], [27.71932, 51.60672], [27.67125, 51.50854], [27.76052, 51.47604], [27.85253, 51.62293], [27.91844, 51.61952], [27.95827, 51.56065], [28.10658, 51.57857], [28.23452, 51.66988], [28.37592, 51.54505], [28.47051, 51.59734], [28.64429, 51.5664], [28.69161, 51.44695], [28.73143, 51.46236], [28.75615, 51.41442], [28.78224, 51.45294], [28.76027, 51.48802], [28.81795, 51.55552], [28.95528, 51.59222], [28.99098, 51.56833], [29.1187, 51.65872], [29.16402, 51.64679], [29.20659, 51.56918], [29.25603, 51.57089], [29.25191, 51.49828], [29.32881, 51.37843], [29.42357, 51.4187], [29.49773, 51.39814], [29.54372, 51.48372], [29.7408, 51.53417], [29.77376, 51.4461], [30.17888, 51.51025], [30.34642, 51.42555], [30.36153, 51.33984], [30.56203, 51.25655], [30.64992, 51.35014], [30.51946, 51.59649], [30.68804, 51.82806], [30.76443, 51.89739], [30.90897, 52.00699], [30.95589, 52.07775], [31.13332, 52.1004], [31.25142, 52.04131], [31.38326, 52.12991], [31.7822, 52.11406], [31.77877, 52.18636], [31.6895, 52.1973], [31.70735, 52.26711], [31.57971, 52.32146], [31.62084, 52.33849], [31.61397, 52.48843], [31.56316, 52.51518], [31.63869, 52.55361], [31.50406, 52.69707], [31.57277, 52.71613], [31.592, 52.79011], [31.35667, 52.97854], [31.24147, 53.031], [31.32283, 53.04101], [31.33519, 53.08805], [31.3915, 53.09712], [31.36403, 53.13504], [31.40523, 53.21406], [31.56316, 53.19432], [31.62496, 53.22886], [31.787, 53.18033], [31.82373, 53.10042], [32.15368, 53.07594], [32.40773, 53.18856], [32.51725, 53.28431], [32.73257, 53.33494], [32.74968, 53.45597], [32.47777, 53.5548], [32.40499, 53.6656], [32.50112, 53.68594], [32.45717, 53.74039], [32.36663, 53.7166], [32.12621, 53.81586], [31.89137, 53.78099], [31.77028, 53.80015], [31.85019, 53.91801], [31.88744, 54.03653], [31.89599, 54.0837], [31.57002, 54.14535], [31.30791, 54.25315], [31.3177, 54.34067], [31.22945, 54.46585], [31.08543, 54.50361], [31.21399, 54.63113], [31.19339, 54.66947], [30.99187, 54.67046], [30.98226, 54.68872], [31.0262, 54.70698], [30.97127, 54.71967], [30.95479, 54.74346], [30.75165, 54.80699], [30.8264, 54.90062], [30.81759, 54.94064], [30.93144, 54.9585], [30.95754, 54.98609], [30.9081, 55.02232], [30.94243, 55.03964], [31.00972, 55.02783], [31.02071, 55.06167], [30.97369, 55.17134], [30.87944, 55.28223], [30.81946, 55.27931], [30.8257, 55.3313], [30.93144, 55.3914], [30.90123, 55.46621], [30.95204, 55.50667], [30.93419, 55.6185], [30.86003, 55.63169], [30.7845, 55.58514], [30.72957, 55.66268], [30.67464, 55.64176], [30.63344, 55.73079], [30.51037, 55.76568], [30.51346, 55.78982], [30.48257, 55.81066], [30.30987, 55.83592], [30.27776, 55.86819], [30.12136, 55.8358], [29.97975, 55.87281], [29.80672, 55.79569], [29.61446, 55.77716], [29.51283, 55.70294], [29.3604, 55.75862], [29.44692, 55.95978], [29.21717, 55.98971], [29.08299, 56.03427], [28.73418, 55.97131], [28.63668, 56.07262], [28.68337, 56.10173], [28.5529, 56.11705], [28.43068, 56.09407], [28.37987, 56.11399], [28.36888, 56.05805], [28.30571, 56.06035], [28.15217, 56.16964]]]] } },
+    { type: "Feature", properties: { iso1A2: "BZ", iso1A3: "BLZ", iso1N3: "084", wikidata: "Q242", nameEn: "Belize", groups: ["013", "003", "419", "019", "UN"], roadSpeedUnit: "mph", callingCodes: ["501"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-88.3268, 18.49048], [-88.48242, 18.49164], [-88.71505, 18.0707], [-88.8716, 17.89535], [-89.03839, 18.0067], [-89.15105, 17.95104], [-89.14985, 17.81563], [-89.15025, 17.04813], [-89.22683, 15.88619], [-89.17418, 15.90898], [-89.02415, 15.9063], [-88.95358, 15.88698], [-88.40779, 16.09624], [-86.92368, 17.61462], [-87.84815, 18.18511], [-87.85693, 18.18266], [-87.86657, 18.19971], [-87.87604, 18.18313], [-87.90671, 18.15213], [-88.03165, 18.16657], [-88.03238, 18.41778], [-88.26593, 18.47617], [-88.29909, 18.47591], [-88.3268, 18.49048]]]] } },
+    { type: "Feature", properties: { iso1A2: "CA", iso1A3: "CAN", iso1N3: "124", wikidata: "Q16", nameEn: "Canada", groups: ["021", "003", "019", "UN"], callingCodes: ["1"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-67.20349, 45.1722], [-67.19603, 45.16771], [-67.15965, 45.16179], [-67.11316, 45.11176], [-67.0216, 44.95333], [-66.96824, 44.90965], [-66.98249, 44.87071], [-66.96824, 44.83078], [-66.93432, 44.82597], [-67.16117, 44.20069], [-61.98255, 37.34815], [-56.27503, 47.39728], [-53.12387, 41.40385], [-46.37635, 57.3249], [-77.52957, 77.23408], [-68.21821, 80.48551], [-49.33696, 84.57952], [-140.97446, 84.39275], [-141.00116, 60.30648], [-140.5227, 60.22077], [-140.45648, 60.30919], [-139.98024, 60.18027], [-139.68991, 60.33693], [-139.05831, 60.35205], [-139.20603, 60.08896], [-139.05365, 59.99655], [-138.71149, 59.90728], [-138.62145, 59.76431], [-137.60623, 59.24465], [-137.4925, 58.89415], [-136.82619, 59.16198], [-136.52365, 59.16752], [-136.47323, 59.46617], [-136.33727, 59.44466], [-136.22381, 59.55526], [-136.31566, 59.59083], [-135.48007, 59.79937], [-135.03069, 59.56208], [-135.00267, 59.28745], [-134.7047, 59.2458], [-134.55699, 59.1297], [-134.48059, 59.13231], [-134.27175, 58.8634], [-133.84645, 58.73543], [-133.38523, 58.42773], [-131.8271, 56.62247], [-130.77769, 56.36185], [-130.33965, 56.10849], [-130.10173, 56.12178], [-130.00093, 56.00325], [-130.00857, 55.91344], [-130.15373, 55.74895], [-129.97513, 55.28029], [-130.08035, 55.21556], [-130.18765, 55.07744], [-130.27203, 54.97174], [-130.44184, 54.85377], [-130.64499, 54.76912], [-130.61931, 54.70835], [-133.92876, 54.62289], [-133.36909, 48.51151], [-125.03842, 48.53282], [-123.50039, 48.21223], [-123.15614, 48.35395], [-123.26565, 48.6959], [-123.0093, 48.76586], [-123.0093, 48.83186], [-123.32163, 49.00419], [-95.15355, 48.9996], [-95.15357, 49.384], [-95.12903, 49.37056], [-95.05825, 49.35311], [-95.01419, 49.35647], [-94.99532, 49.36579], [-94.95681, 49.37035], [-94.85381, 49.32492], [-94.8159, 49.32299], [-94.82487, 49.29483], [-94.77355, 49.11998], [-94.75017, 49.09931], [-94.687, 48.84077], [-94.70087, 48.8339], [-94.70486, 48.82365], [-94.69669, 48.80918], [-94.69335, 48.77883], [-94.58903, 48.71803], [-94.54885, 48.71543], [-94.53826, 48.70216], [-94.44258, 48.69223], [-94.4174, 48.71049], [-94.27153, 48.70232], [-94.25172, 48.68404], [-94.25104, 48.65729], [-94.23215, 48.65202], [-93.85769, 48.63284], [-93.83288, 48.62745], [-93.80676, 48.58232], [-93.80939, 48.52439], [-93.79267, 48.51631], [-93.66382, 48.51845], [-93.47022, 48.54357], [-93.44472, 48.59147], [-93.40693, 48.60948], [-93.39758, 48.60364], [-93.3712, 48.60599], [-93.33946, 48.62787], [-93.25391, 48.64266], [-92.94973, 48.60866], [-92.7287, 48.54005], [-92.6342, 48.54133], [-92.62747, 48.50278], [-92.69927, 48.49573], [-92.71323, 48.46081], [-92.65606, 48.43471], [-92.50712, 48.44921], [-92.45588, 48.40624], [-92.48147, 48.36609], [-92.37185, 48.22259], [-92.27167, 48.25046], [-92.30939, 48.31251], [-92.26662, 48.35651], [-92.202, 48.35252], [-92.14732, 48.36578], [-92.05339, 48.35958], [-91.98929, 48.25409], [-91.86125, 48.21278], [-91.71231, 48.19875], [-91.70451, 48.11805], [-91.55649, 48.10611], [-91.58025, 48.04339], [-91.45829, 48.07454], [-91.43248, 48.04912], [-91.25025, 48.08522], [-91.08016, 48.18096], [-90.87588, 48.2484], [-90.75045, 48.09143], [-90.56444, 48.12184], [-90.56312, 48.09488], [-90.07418, 48.11043], [-89.89974, 47.98109], [-89.77248, 48.02607], [-89.57972, 48.00023], [-89.48837, 48.01412], [-88.37033, 48.30586], [-84.85871, 46.88881], [-84.55635, 46.45974], [-84.47607, 46.45225], [-84.4481, 46.48972], [-84.42101, 46.49853], [-84.34174, 46.50683], [-84.29893, 46.49127], [-84.26351, 46.49508], [-84.2264, 46.53337], [-84.1945, 46.54061], [-84.17723, 46.52753], [-84.12885, 46.53068], [-84.11196, 46.50248], [-84.13451, 46.39218], [-84.11254, 46.32329], [-84.11615, 46.2681], [-84.09756, 46.25512], [-84.1096, 46.23987], [-83.95399, 46.05634], [-83.90453, 46.05922], [-83.83329, 46.12169], [-83.57017, 46.105], [-83.43746, 45.99749], [-83.59589, 45.82131], [-82.48419, 45.30225], [-82.42469, 42.992], [-82.4146, 42.97626], [-82.4253, 42.95423], [-82.45331, 42.93139], [-82.4826, 42.8068], [-82.46613, 42.76615], [-82.51063, 42.66025], [-82.51858, 42.611], [-82.57583, 42.5718], [-82.58873, 42.54984], [-82.64242, 42.55594], [-82.82964, 42.37355], [-83.02253, 42.33045], [-83.07837, 42.30978], [-83.09837, 42.28877], [-83.12724, 42.2376], [-83.14962, 42.04089], [-83.11184, 41.95671], [-82.67862, 41.67615], [-78.93684, 42.82887], [-78.90712, 42.89733], [-78.90905, 42.93022], [-78.93224, 42.95229], [-78.96312, 42.95509], [-78.98126, 42.97], [-79.02074, 42.98444], [-79.02424, 43.01983], [-78.99941, 43.05612], [-79.01055, 43.06659], [-79.07486, 43.07845], [-79.05671, 43.10937], [-79.06881, 43.12029], [-79.0427, 43.13934], [-79.04652, 43.16396], [-79.05384, 43.17418], [-79.05002, 43.20133], [-79.05544, 43.21224], [-79.05512, 43.25375], [-79.06921, 43.26183], [-79.25796, 43.54052], [-76.79706, 43.63099], [-76.43859, 44.09393], [-76.35324, 44.13493], [-76.31222, 44.19894], [-76.244, 44.19643], [-76.1664, 44.23051], [-76.16285, 44.28262], [-76.00018, 44.34896], [-75.95947, 44.34463], [-75.8217, 44.43176], [-75.76813, 44.51537], [-75.41441, 44.76614], [-75.2193, 44.87821], [-75.01363, 44.95608], [-74.99101, 44.98051], [-74.8447, 45.00606], [-74.66689, 45.00646], [-74.32699, 44.99029], [-73.35025, 45.00942], [-71.50067, 45.01357], [-71.48735, 45.07784], [-71.42778, 45.12624], [-71.40364, 45.21382], [-71.44252, 45.2361], [-71.37133, 45.24624], [-71.29371, 45.29996], [-71.22338, 45.25184], [-71.19723, 45.25438], [-71.14568, 45.24128], [-71.08364, 45.30623], [-71.01866, 45.31573], [-71.0107, 45.34819], [-70.95193, 45.33895], [-70.91169, 45.29849], [-70.89864, 45.2398], [-70.84816, 45.22698], [-70.80236, 45.37444], [-70.82638, 45.39828], [-70.78372, 45.43269], [-70.65383, 45.37592], [-70.62518, 45.42286], [-70.72651, 45.49771], [-70.68516, 45.56964], [-70.54019, 45.67291], [-70.38934, 45.73215], [-70.41523, 45.79497], [-70.25976, 45.89675], [-70.24694, 45.95138], [-70.31025, 45.96424], [-70.23855, 46.1453], [-70.29078, 46.18832], [-70.18547, 46.35357], [-70.05812, 46.41768], [-69.99966, 46.69543], [-69.22119, 47.46461], [-69.05148, 47.42012], [-69.05073, 47.30076], [-69.05039, 47.2456], [-68.89222, 47.1807], [-68.70125, 47.24399], [-68.60575, 47.24659], [-68.57914, 47.28431], [-68.38332, 47.28723], [-68.37458, 47.35851], [-68.23244, 47.35712], [-67.94843, 47.1925], [-67.87993, 47.10377], [-67.78578, 47.06473], [-67.78111, 45.9392], [-67.75196, 45.91814], [-67.80961, 45.87531], [-67.75654, 45.82324], [-67.80653, 45.80022], [-67.80705, 45.69528], [-67.6049, 45.60725], [-67.43815, 45.59162], [-67.42144, 45.50584], [-67.50578, 45.48971], [-67.42394, 45.37969], [-67.48201, 45.27351], [-67.34927, 45.122], [-67.29754, 45.14865], [-67.29748, 45.18173], [-67.27039, 45.1934], [-67.22751, 45.16344], [-67.20349, 45.1722]]]] } },
+    { type: "Feature", properties: { iso1A2: "CC", iso1A3: "CCK", iso1N3: "166", wikidata: "Q36004", nameEn: "Cocos (Keeling) Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[96.61846, -10.82438], [96.02343, -12.68334], [97.93979, -12.33309], [96.61846, -10.82438]]]] } },
+    { type: "Feature", properties: { iso1A2: "CD", iso1A3: "COD", iso1N3: "180", wikidata: "Q974", nameEn: "Democratic Republic of the Congo", aliases: ["ZR"], groups: ["017", "202", "002", "UN"], callingCodes: ["243"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.44012, 5.07349], [27.09575, 5.22305], [26.93064, 5.13535], [26.85579, 5.03887], [26.74572, 5.10685], [26.48595, 5.04984], [26.13371, 5.25594], [25.86073, 5.19455], [25.53271, 5.37431], [25.34558, 5.29101], [25.31256, 5.03668], [24.71816, 4.90509], [24.46719, 5.0915], [23.38847, 4.60013], [22.94817, 4.82392], [22.89094, 4.79321], [22.84691, 4.69887], [22.78526, 4.71423], [22.6928, 4.47285], [22.60915, 4.48821], [22.5431, 4.22041], [22.45504, 4.13039], [22.27682, 4.11347], [22.10721, 4.20723], [21.6405, 4.317], [21.55904, 4.25553], [21.25744, 4.33676], [21.21341, 4.29285], [21.11214, 4.33895], [21.08793, 4.39603], [20.90383, 4.44877], [20.60184, 4.42394], [18.62755, 3.47564], [18.63857, 3.19342], [18.10683, 2.26876], [18.08034, 1.58553], [17.85887, 1.04327], [17.86989, 0.58873], [17.95255, 0.48128], [17.93877, 0.32424], [17.81204, 0.23884], [17.66051, -0.26535], [17.72112, -0.52707], [17.32438, -0.99265], [16.97999, -1.12762], [16.70724, -1.45815], [16.50336, -1.8795], [16.16173, -2.16586], [16.22785, -2.59528], [16.1755, -3.25014], [16.21407, -3.2969], [15.89448, -3.9513], [15.53081, -4.042], [15.48121, -4.22062], [15.41785, -4.28381], [15.32693, -4.27282], [15.25411, -4.31121], [15.1978, -4.32388], [14.83101, -4.80838], [14.67948, -4.92093], [14.5059, -4.84956], [14.41499, -4.8825], [14.37366, -4.56125], [14.47284, -4.42941], [14.3957, -4.36623], [14.40672, -4.28381], [13.9108, -4.50906], [13.81162, -4.41842], [13.71794, -4.44864], [13.70417, -4.72601], [13.50305, -4.77818], [13.41764, -4.89897], [13.11182, -4.5942], [13.09648, -4.63739], [13.11195, -4.67745], [12.8733, -4.74346], [12.70868, -4.95505], [12.63465, -4.94632], [12.60251, -5.01715], [12.46297, -5.09408], [12.49815, -5.14058], [12.51589, -5.1332], [12.53586, -5.14658], [12.53599, -5.1618], [12.52301, -5.17481], [12.52318, -5.74353], [12.26557, -5.74031], [12.20376, -5.76338], [11.95767, -5.94705], [12.42245, -6.07585], [13.04371, -5.87078], [16.55507, -5.85631], [16.96282, -7.21787], [17.5828, -8.13784], [18.33635, -8.00126], [19.33698, -7.99743], [19.5469, -7.00195], [20.30218, -6.98955], [20.31846, -6.91953], [20.61689, -6.90876], [20.56263, -7.28566], [21.79824, -7.29628], [21.84856, -9.59871], [22.19039, -9.94628], [22.32604, -10.76291], [22.17954, -10.85884], [22.25951, -11.24911], [22.54205, -11.05784], [23.16602, -11.10577], [23.45631, -10.946], [23.86868, -11.02856], [24.00027, -10.89356], [24.34528, -11.06816], [24.42612, -11.44975], [25.34069, -11.19707], [25.33058, -11.65767], [26.01777, -11.91488], [26.88687, -12.01868], [27.04351, -11.61312], [27.22541, -11.60323], [27.21025, -11.76157], [27.59932, -12.22123], [28.33199, -12.41375], [29.01918, -13.41353], [29.60531, -13.21685], [29.65078, -13.41844], [29.81551, -13.44683], [29.8139, -12.14898], [29.48404, -12.23604], [29.4992, -12.43843], [29.18592, -12.37921], [28.48357, -11.87532], [28.37241, -11.57848], [28.65032, -10.65133], [28.62795, -9.92942], [28.68532, -9.78], [28.56208, -9.49122], [28.51627, -9.44726], [28.52636, -9.35379], [28.36562, -9.30091], [28.38526, -9.23393], [28.9711, -8.66935], [28.88917, -8.4831], [30.79243, -8.27382], [30.2567, -7.14121], [29.52552, -6.2731], [29.43673, -4.44845], [29.23708, -3.75856], [29.21463, -3.3514], [29.25633, -3.05471], [29.17258, -2.99385], [29.16037, -2.95457], [29.09797, -2.91935], [29.09119, -2.87871], [29.0505, -2.81774], [29.00404, -2.81978], [29.00167, -2.78523], [29.04081, -2.7416], [29.00357, -2.70596], [28.94346, -2.69124], [28.89793, -2.66111], [28.90226, -2.62385], [28.89288, -2.55848], [28.87943, -2.55165], [28.86193, -2.53185], [28.86209, -2.5231], [28.87497, -2.50887], [28.88846, -2.50493], [28.89342, -2.49017], [28.89132, -2.47557], [28.86846, -2.44866], [28.86826, -2.41888], [28.89601, -2.37321], [28.95642, -2.37321], [29.00051, -2.29001], [29.105, -2.27043], [29.17562, -2.12278], [29.11847, -1.90576], [29.24458, -1.69663], [29.24323, -1.66826], [29.36322, -1.50887], [29.45038, -1.5054], [29.53062, -1.40499], [29.59061, -1.39016], [29.58388, -0.89821], [29.63006, -0.8997], [29.62708, -0.71055], [29.67176, -0.55714], [29.67474, -0.47969], [29.65091, -0.46777], [29.72687, -0.08051], [29.7224, 0.07291], [29.77454, 0.16675], [29.81922, 0.16824], [29.87284, 0.39166], [29.97413, 0.52124], [29.95477, 0.64486], [29.98307, 0.84295], [30.1484, 0.89805], [30.22139, 0.99635], [30.24671, 1.14974], [30.48503, 1.21675], [31.30127, 2.11006], [31.28042, 2.17853], [31.20148, 2.2217], [31.1985, 2.29462], [31.12104, 2.27676], [31.07934, 2.30207], [31.06593, 2.35862], [30.96911, 2.41071], [30.91102, 2.33332], [30.83059, 2.42559], [30.74271, 2.43601], [30.75612, 2.5863], [30.8857, 2.83923], [30.8574, 2.9508], [30.77101, 3.04897], [30.84251, 3.26908], [30.93486, 3.40737], [30.94081, 3.50847], [30.85153, 3.48867], [30.85997, 3.5743], [30.80713, 3.60506], [30.78512, 3.67097], [30.56277, 3.62703], [30.57378, 3.74567], [30.55396, 3.84451], [30.47691, 3.83353], [30.27658, 3.95653], [30.22374, 3.93896], [30.1621, 4.10586], [30.06964, 4.13221], [29.79666, 4.37809], [29.82087, 4.56246], [29.49726, 4.7007], [29.43341, 4.50101], [29.22207, 4.34297], [29.03054, 4.48784], [28.8126, 4.48784], [28.6651, 4.42638], [28.20719, 4.35614], [27.79551, 4.59976], [27.76469, 4.79284], [27.65462, 4.89375], [27.56656, 4.89375], [27.44012, 5.07349]]]] } },
+    { type: "Feature", properties: { iso1A2: "CF", iso1A3: "CAF", iso1N3: "140", wikidata: "Q929", nameEn: "Central African Republic", groups: ["017", "202", "002", "UN"], callingCodes: ["236"] }, geometry: { type: "MultiPolygon", coordinates: [[[[22.87758, 10.91915], [22.45889, 11.00246], [21.72139, 10.64136], [21.71479, 10.29932], [21.63553, 10.217], [21.52766, 10.2105], [21.34934, 9.95907], [21.26348, 9.97642], [20.82979, 9.44696], [20.36748, 9.11019], [19.06421, 9.00367], [18.86388, 8.87971], [19.11044, 8.68172], [18.79783, 8.25929], [18.67455, 8.22226], [18.62612, 8.14163], [18.64153, 8.08714], [18.6085, 8.05009], [18.02731, 8.01085], [17.93926, 7.95853], [17.67288, 7.98905], [16.8143, 7.53971], [16.6668, 7.67281], [16.658, 7.75353], [16.59415, 7.76444], [16.58315, 7.88657], [16.41583, 7.77971], [16.40703, 7.68809], [15.79942, 7.44149], [15.73118, 7.52006], [15.49743, 7.52179], [15.23397, 7.25135], [15.04717, 6.77085], [14.96311, 6.75693], [14.79966, 6.39043], [14.80122, 6.34866], [14.74206, 6.26356], [14.56149, 6.18928], [14.43073, 6.08867], [14.42917, 6.00508], [14.49455, 5.91683], [14.60974, 5.91838], [14.62375, 5.70466], [14.58951, 5.59777], [14.62531, 5.51411], [14.52724, 5.28319], [14.57083, 5.23979], [14.65489, 5.21343], [14.73383, 4.6135], [15.00825, 4.41458], [15.08609, 4.30282], [15.10644, 4.1362], [15.17482, 4.05131], [15.07686, 4.01805], [15.73522, 3.24348], [15.77725, 3.26835], [16.05449, 3.02306], [16.08252, 2.45708], [16.19357, 2.21537], [16.50126, 2.84739], [16.46701, 2.92512], [16.57598, 3.47999], [16.68283, 3.54257], [17.01746, 3.55136], [17.35649, 3.63045], [17.46876, 3.70515], [17.60966, 3.63705], [17.83421, 3.61068], [17.85842, 3.53378], [18.05656, 3.56893], [18.14902, 3.54476], [18.17323, 3.47665], [18.24148, 3.50302], [18.2723, 3.57992], [18.39558, 3.58212], [18.49245, 3.63924], [18.58711, 3.49423], [18.62755, 3.47564], [20.60184, 4.42394], [20.90383, 4.44877], [21.08793, 4.39603], [21.11214, 4.33895], [21.21341, 4.29285], [21.25744, 4.33676], [21.55904, 4.25553], [21.6405, 4.317], [22.10721, 4.20723], [22.27682, 4.11347], [22.45504, 4.13039], [22.5431, 4.22041], [22.60915, 4.48821], [22.6928, 4.47285], [22.78526, 4.71423], [22.84691, 4.69887], [22.89094, 4.79321], [22.94817, 4.82392], [23.38847, 4.60013], [24.46719, 5.0915], [24.71816, 4.90509], [25.31256, 5.03668], [25.34558, 5.29101], [25.53271, 5.37431], [25.86073, 5.19455], [26.13371, 5.25594], [26.48595, 5.04984], [26.74572, 5.10685], [26.85579, 5.03887], [26.93064, 5.13535], [27.09575, 5.22305], [27.44012, 5.07349], [27.26886, 5.25876], [27.23017, 5.37167], [27.28621, 5.56382], [27.22705, 5.62889], [27.22705, 5.71254], [26.51721, 6.09655], [26.58259, 6.1987], [26.32729, 6.36272], [26.38022, 6.63493], [25.90076, 7.09549], [25.37461, 7.33024], [25.35281, 7.42595], [25.20337, 7.50312], [25.20649, 7.61115], [25.29214, 7.66675], [25.25319, 7.8487], [24.98855, 7.96588], [24.85156, 8.16933], [24.35965, 8.26177], [24.13238, 8.36959], [24.25691, 8.69288], [23.51905, 8.71749], [23.59065, 8.99743], [23.44744, 8.99128], [23.4848, 9.16959], [23.56263, 9.19418], [23.64358, 9.28637], [23.64981, 9.44303], [23.62179, 9.53823], [23.69155, 9.67566], [23.67164, 9.86923], [23.3128, 10.45214], [23.02221, 10.69235], [22.87758, 10.91915]]]] } },
+    { type: "Feature", properties: { iso1A2: "CG", iso1A3: "COG", iso1N3: "178", wikidata: "Q971", nameEn: "Republic of the Congo", groups: ["017", "202", "002", "UN"], callingCodes: ["242"] }, geometry: { type: "MultiPolygon", coordinates: [[[[18.62755, 3.47564], [18.58711, 3.49423], [18.49245, 3.63924], [18.39558, 3.58212], [18.2723, 3.57992], [18.24148, 3.50302], [18.17323, 3.47665], [18.14902, 3.54476], [18.05656, 3.56893], [17.85842, 3.53378], [17.83421, 3.61068], [17.60966, 3.63705], [17.46876, 3.70515], [17.35649, 3.63045], [17.01746, 3.55136], [16.68283, 3.54257], [16.57598, 3.47999], [16.46701, 2.92512], [16.50126, 2.84739], [16.19357, 2.21537], [16.15568, 2.18955], [16.08563, 2.19733], [16.05294, 1.9811], [16.14634, 1.70259], [16.02647, 1.65591], [16.02959, 1.76483], [15.48942, 1.98265], [15.34776, 1.91264], [15.22634, 2.03243], [15.00996, 1.98887], [14.61145, 2.17866], [13.29457, 2.16106], [13.13461, 1.57238], [13.25447, 1.32339], [13.15519, 1.23368], [13.89582, 1.4261], [14.25186, 1.39842], [14.48179, 0.9152], [14.26066, 0.57255], [14.10909, 0.58563], [13.88648, 0.26652], [13.90632, -0.2287], [14.06862, -0.20826], [14.2165, -0.38261], [14.41887, -0.44799], [14.52569, -0.57818], [14.41838, -1.89412], [14.25932, -1.97624], [14.23518, -2.15671], [14.16202, -2.23916], [14.23829, -2.33715], [14.10442, -2.49268], [13.85846, -2.46935], [13.92073, -2.35581], [13.75884, -2.09293], [13.47977, -2.43224], [13.02759, -2.33098], [12.82172, -1.91091], [12.61312, -1.8129], [12.44656, -1.92025], [12.47925, -2.32626], [12.04895, -2.41704], [11.96866, -2.33559], [11.74605, -2.39936], [11.57637, -2.33379], [11.64487, -2.61865], [11.5359, -2.85654], [11.64798, -2.81146], [11.80365, -3.00424], [11.70558, -3.0773], [11.70227, -3.17465], [11.96554, -3.30267], [11.8318, -3.5812], [11.92719, -3.62768], [11.87083, -3.71571], [11.68608, -3.68942], [11.57949, -3.52798], [11.48764, -3.51089], [11.22301, -3.69888], [11.12647, -3.94169], [10.75913, -4.39519], [11.50888, -5.33417], [12.00924, -5.02627], [12.16068, -4.90089], [12.20901, -4.75642], [12.25587, -4.79437], [12.32324, -4.78415], [12.40964, -4.60609], [12.64835, -4.55937], [12.76844, -4.38709], [12.87096, -4.40315], [12.91489, -4.47907], [13.09648, -4.63739], [13.11182, -4.5942], [13.41764, -4.89897], [13.50305, -4.77818], [13.70417, -4.72601], [13.71794, -4.44864], [13.81162, -4.41842], [13.9108, -4.50906], [14.40672, -4.28381], [14.3957, -4.36623], [14.47284, -4.42941], [14.37366, -4.56125], [14.41499, -4.8825], [14.5059, -4.84956], [14.67948, -4.92093], [14.83101, -4.80838], [15.1978, -4.32388], [15.25411, -4.31121], [15.32693, -4.27282], [15.41785, -4.28381], [15.48121, -4.22062], [15.53081, -4.042], [15.89448, -3.9513], [16.21407, -3.2969], [16.1755, -3.25014], [16.22785, -2.59528], [16.16173, -2.16586], [16.50336, -1.8795], [16.70724, -1.45815], [16.97999, -1.12762], [17.32438, -0.99265], [17.72112, -0.52707], [17.66051, -0.26535], [17.81204, 0.23884], [17.93877, 0.32424], [17.95255, 0.48128], [17.86989, 0.58873], [17.85887, 1.04327], [18.08034, 1.58553], [18.10683, 2.26876], [18.63857, 3.19342], [18.62755, 3.47564]]]] } },
+    { type: "Feature", properties: { iso1A2: "CH", iso1A3: "CHE", iso1N3: "756", wikidata: "Q39", nameEn: "Switzerland", groups: ["155", "150", "UN"], callingCodes: ["41"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.72809, 47.69282], [8.72617, 47.69651], [8.73671, 47.7169], [8.70543, 47.73121], [8.74251, 47.75168], [8.71778, 47.76571], [8.68985, 47.75686], [8.68022, 47.78599], [8.65292, 47.80066], [8.64425, 47.76398], [8.62408, 47.7626], [8.61657, 47.79998], [8.56415, 47.80633], [8.56814, 47.78001], [8.48868, 47.77215], [8.45771, 47.7493], [8.44807, 47.72426], [8.40569, 47.69855], [8.4211, 47.68407], [8.40473, 47.67499], [8.41346, 47.66676], [8.42264, 47.66667], [8.44711, 47.65379], [8.4667, 47.65747], [8.46605, 47.64103], [8.49656, 47.64709], [8.5322, 47.64687], [8.52801, 47.66059], [8.56141, 47.67088], [8.57683, 47.66158], [8.6052, 47.67258], [8.61113, 47.66332], [8.62884, 47.65098], [8.62049, 47.63757], [8.60412, 47.63735], [8.61471, 47.64514], [8.60701, 47.65271], [8.59545, 47.64298], [8.60348, 47.61204], [8.57586, 47.59537], [8.55756, 47.62394], [8.51686, 47.63476], [8.50747, 47.61897], [8.45578, 47.60121], [8.46637, 47.58389], [8.48949, 47.588], [8.49431, 47.58107], [8.43235, 47.56617], [8.39477, 47.57826], [8.38273, 47.56608], [8.35512, 47.57014], [8.32735, 47.57133], [8.30277, 47.58607], [8.29524, 47.5919], [8.29722, 47.60603], [8.2824, 47.61225], [8.26313, 47.6103], [8.25863, 47.61571], [8.23809, 47.61204], [8.22577, 47.60385], [8.22011, 47.6181], [8.20617, 47.62141], [8.19378, 47.61636], [8.1652, 47.5945], [8.14947, 47.59558], [8.13823, 47.59147], [8.13662, 47.58432], [8.11543, 47.5841], [8.10395, 47.57918], [8.10002, 47.56504], [8.08557, 47.55768], [8.06663, 47.56374], [8.04383, 47.55443], [8.02136, 47.55096], [8.00113, 47.55616], [7.97581, 47.55493], [7.95682, 47.55789], [7.94494, 47.54511], [7.91251, 47.55031], [7.90673, 47.57674], [7.88664, 47.58854], [7.84412, 47.5841], [7.81901, 47.58798], [7.79486, 47.55691], [7.75261, 47.54599], [7.71961, 47.54219], [7.69642, 47.53297], [7.68101, 47.53232], [7.6656, 47.53752], [7.66174, 47.54554], [7.65083, 47.54662], [7.63338, 47.56256], [7.67655, 47.56435], [7.68904, 47.57133], [7.67115, 47.5871], [7.68486, 47.59601], [7.69385, 47.60099], [7.68229, 47.59905], [7.67395, 47.59212], [7.64599, 47.59695], [7.64213, 47.5944], [7.64309, 47.59151], [7.61929, 47.57683], [7.60459, 47.57869], [7.60523, 47.58519], [7.58945, 47.59017], [7.58386, 47.57536], [7.56684, 47.57785], [7.56548, 47.57617], [7.55689, 47.57232], [7.55652, 47.56779], [7.53634, 47.55553], [7.52831, 47.55347], [7.51723, 47.54578], [7.50873, 47.54546], [7.49691, 47.53821], [7.50588, 47.52856], [7.51904, 47.53515], [7.53199, 47.5284], [7.5229, 47.51644], [7.49804, 47.51798], [7.51076, 47.49651], [7.47534, 47.47932], [7.43356, 47.49712], [7.42923, 47.48628], [7.4583, 47.47216], [7.4462, 47.46264], [7.43088, 47.45846], [7.40308, 47.43638], [7.35603, 47.43432], [7.33526, 47.44186], [7.24669, 47.4205], [7.17026, 47.44312], [7.19583, 47.49455], [7.16249, 47.49025], [7.12781, 47.50371], [7.07425, 47.48863], [7.0231, 47.50522], [6.98425, 47.49432], [7.0024, 47.45264], [6.93953, 47.43388], [6.93744, 47.40714], [6.88542, 47.37262], [6.87959, 47.35335], [7.03125, 47.36996], [7.0564, 47.35134], [7.05305, 47.33304], [6.94316, 47.28747], [6.95108, 47.26428], [6.9508, 47.24338], [6.8489, 47.15933], [6.76788, 47.1208], [6.68823, 47.06616], [6.71531, 47.0494], [6.43341, 46.92703], [6.46456, 46.88865], [6.43216, 46.80336], [6.45209, 46.77502], [6.38351, 46.73171], [6.27135, 46.68251], [6.11084, 46.57649], [6.1567, 46.54402], [6.07269, 46.46244], [6.08427, 46.44305], [6.06407, 46.41676], [6.09926, 46.40768], [6.15016, 46.3778], [6.15985, 46.37721], [6.16987, 46.36759], [6.15738, 46.3491], [6.13876, 46.33844], [6.1198, 46.31157], [6.11697, 46.29547], [6.1013, 46.28512], [6.11926, 46.2634], [6.12446, 46.25059], [6.10071, 46.23772], [6.08563, 46.24651], [6.07072, 46.24085], [6.0633, 46.24583], [6.05029, 46.23518], [6.04602, 46.23127], [6.03342, 46.2383], [6.02461, 46.23313], [5.97542, 46.21525], [5.96515, 46.19638], [5.99573, 46.18587], [5.98846, 46.17046], [5.98188, 46.17392], [5.97508, 46.15863], [5.9641, 46.14412], [5.95781, 46.12925], [5.97893, 46.13303], [5.9871, 46.14499], [6.01791, 46.14228], [6.03614, 46.13712], [6.04564, 46.14031], [6.05203, 46.15191], [6.07491, 46.14879], [6.09199, 46.15191], [6.09926, 46.14373], [6.13397, 46.1406], [6.15305, 46.15194], [6.18116, 46.16187], [6.18871, 46.16644], [6.18707, 46.17999], [6.19552, 46.18401], [6.19807, 46.18369], [6.20539, 46.19163], [6.21114, 46.1927], [6.21273, 46.19409], [6.21603, 46.19507], [6.21844, 46.19837], [6.22222, 46.19888], [6.22175, 46.20045], [6.23544, 46.20714], [6.23913, 46.20511], [6.24821, 46.20531], [6.26007, 46.21165], [6.27694, 46.21566], [6.29663, 46.22688], [6.31041, 46.24417], [6.29474, 46.26221], [6.26749, 46.24745], [6.24952, 46.26255], [6.23775, 46.27822], [6.25137, 46.29014], [6.24826, 46.30175], [6.21981, 46.31304], [6.25432, 46.3632], [6.53358, 46.45431], [6.82312, 46.42661], [6.8024, 46.39171], [6.77152, 46.34784], [6.86052, 46.28512], [6.78968, 46.14058], [6.89321, 46.12548], [6.87868, 46.03855], [6.93862, 46.06502], [7.00946, 45.9944], [7.04151, 45.92435], [7.10685, 45.85653], [7.56343, 45.97421], [7.85949, 45.91485], [7.9049, 45.99945], [7.98881, 45.99867], [8.02906, 46.10331], [8.11383, 46.11577], [8.16866, 46.17817], [8.08814, 46.26692], [8.31162, 46.38044], [8.30648, 46.41587], [8.42464, 46.46367], [8.46317, 46.43712], [8.45032, 46.26869], [8.62242, 46.12112], [8.75697, 46.10395], [8.80778, 46.10085], [8.85617, 46.0748], [8.79414, 46.00913], [8.78585, 45.98973], [8.79362, 45.99207], [8.8319, 45.9879], [8.85121, 45.97239], [8.86688, 45.96135], [8.88904, 45.95465], [8.93649, 45.86775], [8.94372, 45.86587], [8.93504, 45.86245], [8.91129, 45.8388], [8.94737, 45.84285], [8.9621, 45.83707], [8.99663, 45.83466], [9.00324, 45.82055], [9.0298, 45.82127], [9.03279, 45.82865], [9.03793, 45.83548], [9.03505, 45.83976], [9.04059, 45.8464], [9.04546, 45.84968], [9.06642, 45.8761], [9.09065, 45.89906], [8.99257, 45.9698], [9.01618, 46.04928], [9.24503, 46.23616], [9.29226, 46.32717], [9.25502, 46.43743], [9.28136, 46.49685], [9.36128, 46.5081], [9.40487, 46.46621], [9.45936, 46.50873], [9.46117, 46.37481], [9.57015, 46.2958], [9.71273, 46.29266], [9.73086, 46.35071], [9.95249, 46.38045], [10.07055, 46.21668], [10.14439, 46.22992], [10.17862, 46.25626], [10.10506, 46.3372], [10.165, 46.41051], [10.03715, 46.44479], [10.10307, 46.61003], [10.23674, 46.63484], [10.25309, 46.57432], [10.46136, 46.53164], [10.49375, 46.62049], [10.44686, 46.64162], [10.40475, 46.63671], [10.38659, 46.67847], [10.47197, 46.85698], [10.48376, 46.93891], [10.36933, 47.00212], [10.30031, 46.92093], [10.24128, 46.93147], [10.22675, 46.86942], [10.10715, 46.84296], [9.98058, 46.91434], [9.88266, 46.93343], [9.87935, 47.01337], [9.60717, 47.06091], [9.55721, 47.04762], [9.54041, 47.06495], [9.47548, 47.05257], [9.47139, 47.06402], [9.51362, 47.08505], [9.52089, 47.10019], [9.51044, 47.13727], [9.48774, 47.17402], [9.4891, 47.19346], [9.50318, 47.22153], [9.52406, 47.24959], [9.53116, 47.27029], [9.54773, 47.2809], [9.55857, 47.29919], [9.58513, 47.31334], [9.59978, 47.34671], [9.62476, 47.36639], [9.65427, 47.36824], [9.66243, 47.37136], [9.6711, 47.37824], [9.67445, 47.38429], [9.67334, 47.39191], [9.6629, 47.39591], [9.65136, 47.40504], [9.65043, 47.41937], [9.6446, 47.43233], [9.64483, 47.43842], [9.65863, 47.44847], [9.65728, 47.45383], [9.6423, 47.45599], [9.62475, 47.45685], [9.62158, 47.45858], [9.60841, 47.47178], [9.60484, 47.46358], [9.60205, 47.46165], [9.59482, 47.46305], [9.58208, 47.48344], [9.56312, 47.49495], [9.55125, 47.53629], [9.25619, 47.65939], [9.18203, 47.65598], [9.17593, 47.65399], [9.1755, 47.65584], [9.1705, 47.65513], [9.15181, 47.66904], [9.13845, 47.66389], [9.09891, 47.67801], [9.02093, 47.6868], [8.94093, 47.65596], [8.89946, 47.64769], [8.87625, 47.65441], [8.87383, 47.67045], [8.85065, 47.68209], [8.86989, 47.70504], [8.82002, 47.71458], [8.80663, 47.73821], [8.77309, 47.72059], [8.76965, 47.7075], [8.79966, 47.70222], [8.79511, 47.67462], [8.75856, 47.68969], [8.72809, 47.69282]], [[8.95861, 45.96485], [8.96668, 45.98436], [8.97741, 45.98317], [8.97604, 45.96151], [8.95861, 45.96485]], [[8.70847, 47.68904], [8.68985, 47.69552], [8.66837, 47.68437], [8.65769, 47.68928], [8.67508, 47.6979], [8.66416, 47.71367], [8.70237, 47.71453], [8.71773, 47.69088], [8.70847, 47.68904]]]] } },
+    { type: "Feature", properties: { iso1A2: "CI", iso1A3: "CIV", iso1N3: "384", wikidata: "Q1008", nameEn: "C\xF4te d'Ivoire", groups: ["011", "202", "002", "UN"], callingCodes: ["225"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-7.52774, 3.7105], [-3.34019, 4.17519], [-3.10675, 5.08515], [-3.11073, 5.12675], [-3.063, 5.13665], [-2.96554, 5.10397], [-2.95261, 5.12477], [-2.75502, 5.10657], [-2.73074, 5.1364], [-2.77625, 5.34621], [-2.72737, 5.34789], [-2.76614, 5.60963], [-2.85378, 5.65156], [-2.93132, 5.62137], [-2.96671, 5.6415], [-2.95323, 5.71865], [-3.01896, 5.71697], [-3.25999, 6.62521], [-3.21954, 6.74407], [-3.23327, 6.81744], [-2.95438, 7.23737], [-2.97822, 7.27165], [-2.92339, 7.60847], [-2.79467, 7.86002], [-2.78395, 7.94974], [-2.74819, 7.92613], [-2.67787, 8.02055], [-2.61232, 8.02645], [-2.62901, 8.11495], [-2.49037, 8.20872], [-2.58243, 8.7789], [-2.66357, 9.01771], [-2.77799, 9.04949], [-2.69814, 9.22717], [-2.68802, 9.49343], [-2.76494, 9.40778], [-2.93012, 9.57403], [-3.00765, 9.74019], [-3.16609, 9.85147], [-3.19306, 9.93781], [-3.27228, 9.84981], [-3.31779, 9.91125], [-3.69703, 9.94279], [-4.25999, 9.76012], [-4.31392, 9.60062], [-4.6426, 9.70696], [-4.96621, 9.89132], [-4.96453, 9.99923], [-5.12465, 10.29788], [-5.39602, 10.2929], [-5.51058, 10.43177], [-5.65135, 10.46767], [-5.78124, 10.43952], [-5.99478, 10.19694], [-6.18851, 10.24244], [-6.1731, 10.46983], [-6.24795, 10.74248], [-6.325, 10.68624], [-6.40646, 10.69922], [-6.42847, 10.5694], [-6.52974, 10.59104], [-6.63541, 10.66893], [-6.68164, 10.35074], [-6.93921, 10.35291], [-7.01186, 10.25111], [-6.97444, 10.21644], [-7.00966, 10.15794], [-7.0603, 10.14711], [-7.13331, 10.24877], [-7.3707, 10.24677], [-7.44555, 10.44602], [-7.52261, 10.4655], [-7.54462, 10.40921], [-7.63048, 10.46334], [-7.92107, 10.15577], [-7.97971, 10.17117], [-8.01225, 10.1021], [-8.11921, 10.04577], [-8.15652, 9.94288], [-8.09434, 9.86936], [-8.14657, 9.55062], [-8.03463, 9.39604], [-7.85056, 9.41812], [-7.90777, 9.20456], [-7.73862, 9.08422], [-7.92518, 8.99332], [-7.95503, 8.81146], [-7.69882, 8.66148], [-7.65653, 8.36873], [-7.92518, 8.50652], [-8.22991, 8.48438], [-8.2411, 8.24196], [-8.062, 8.16071], [-7.98675, 8.20134], [-7.99919, 8.11023], [-7.94695, 8.00925], [-8.06449, 8.04989], [-8.13414, 7.87991], [-8.09931, 7.78626], [-8.21374, 7.54466], [-8.4003, 7.6285], [-8.47114, 7.55676], [-8.41935, 7.51203], [-8.37458, 7.25794], [-8.29249, 7.1691], [-8.31736, 6.82837], [-8.59456, 6.50612], [-8.48652, 6.43797], [-8.45666, 6.49977], [-8.38453, 6.35887], [-8.3298, 6.36381], [-8.17557, 6.28222], [-8.00642, 6.31684], [-7.90692, 6.27728], [-7.83478, 6.20309], [-7.8497, 6.08932], [-7.79747, 6.07696], [-7.78254, 5.99037], [-7.70294, 5.90625], [-7.67309, 5.94337], [-7.48155, 5.80974], [-7.46165, 5.84934], [-7.43677, 5.84687], [-7.43926, 5.74787], [-7.37209, 5.61173], [-7.43428, 5.42355], [-7.36463, 5.32944], [-7.46165, 5.26256], [-7.48901, 5.14118], [-7.55369, 5.08667], [-7.53876, 4.94294], [-7.59349, 4.8909], [-7.53259, 4.35145], [-7.52774, 3.7105]]]] } },
+    { type: "Feature", properties: { iso1A2: "CK", iso1A3: "COK", iso1N3: "184", wikidata: "Q26988", nameEn: "Cook Islands", country: "NZ", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["682"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-168.15106, -10.26955], [-156.45576, -31.75456], [-156.48634, -15.52824], [-156.50903, -7.4975], [-168.15106, -10.26955]]]] } },
+    { type: "Feature", properties: { iso1A2: "CL", iso1A3: "CHL", iso1N3: "152", wikidata: "Q298", nameEn: "Chile", groups: ["005", "419", "019", "UN"], callingCodes: ["56"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-68.60702, -52.65781], [-68.41683, -52.33516], [-69.97824, -52.00845], [-71.99889, -51.98018], [-72.33873, -51.59954], [-72.31343, -50.58411], [-73.15765, -50.78337], [-73.55259, -49.92488], [-73.45156, -49.79461], [-73.09655, -49.14342], [-72.56894, -48.81116], [-72.54042, -48.52392], [-72.27662, -48.28727], [-72.50478, -47.80586], [-71.94152, -47.13595], [-71.68577, -46.55385], [-71.75614, -45.61611], [-71.35687, -45.22075], [-72.06985, -44.81756], [-71.26418, -44.75684], [-71.16436, -44.46244], [-71.81318, -44.38097], [-71.64206, -43.64774], [-72.14828, -42.85321], [-72.15541, -42.15941], [-71.74901, -42.11711], [-71.92726, -40.72714], [-71.37826, -38.91474], [-70.89532, -38.6923], [-71.24279, -37.20264], [-70.95047, -36.4321], [-70.38008, -36.02375], [-70.49416, -35.24145], [-69.87386, -34.13344], [-69.88099, -33.34489], [-70.55832, -31.51559], [-70.14479, -30.36595], [-69.8596, -30.26131], [-69.99507, -29.28351], [-69.80969, -29.07185], [-69.66709, -28.44055], [-69.22504, -27.95042], [-68.77586, -27.16029], [-68.43363, -27.08414], [-68.27677, -26.90626], [-68.59048, -26.49861], [-68.56909, -26.28146], [-68.38372, -26.15353], [-68.57622, -25.32505], [-68.38372, -25.08636], [-68.56909, -24.69831], [-68.24825, -24.42596], [-67.33563, -24.04237], [-66.99632, -22.99839], [-67.18382, -22.81525], [-67.54284, -22.89771], [-67.85114, -22.87076], [-68.18816, -21.28614], [-68.40403, -20.94562], [-68.53957, -20.91542], [-68.55383, -20.7355], [-68.44023, -20.62701], [-68.7276, -20.46178], [-68.74273, -20.08817], [-68.57132, -20.03134], [-68.54611, -19.84651], [-68.66761, -19.72118], [-68.41218, -19.40499], [-68.61989, -19.27584], [-68.80602, -19.08355], [-68.87082, -19.06003], [-68.94987, -18.93302], [-69.07432, -18.28259], [-69.14807, -18.16893], [-69.07496, -18.03715], [-69.28671, -17.94844], [-69.34126, -17.72753], [-69.46623, -17.60518], [-69.46897, -17.4988], [-69.66483, -17.65083], [-69.79087, -17.65563], [-69.82868, -17.72048], [-69.75305, -17.94605], [-69.81607, -18.12582], [-69.96732, -18.25992], [-70.16394, -18.31737], [-70.31267, -18.31258], [-70.378, -18.3495], [-70.59118, -18.35072], [-113.52687, -26.52828], [-68.11646, -58.14883], [-66.07313, -55.19618], [-67.11046, -54.94199], [-67.46182, -54.92205], [-68.01394, -54.8753], [-68.60733, -54.9125], [-68.60702, -52.65781]]]] } },
+    { type: "Feature", properties: { iso1A2: "CM", iso1A3: "CMR", iso1N3: "120", wikidata: "Q1009", nameEn: "Cameroon", groups: ["017", "202", "002", "UN"], callingCodes: ["237"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.83314, 12.62963], [14.55058, 12.78256], [14.56101, 12.91036], [14.46881, 13.08259], [14.08251, 13.0797], [14.20204, 12.53405], [14.17523, 12.41916], [14.22215, 12.36533], [14.4843, 12.35223], [14.6474, 12.17466], [14.61612, 11.7798], [14.55207, 11.72001], [14.64591, 11.66166], [14.6124, 11.51283], [14.17821, 11.23831], [13.97489, 11.30258], [13.78945, 11.00154], [13.7403, 11.00593], [13.70753, 10.94451], [13.73434, 10.9255], [13.54964, 10.61236], [13.5705, 10.53183], [13.43644, 10.13326], [13.34111, 10.12299], [13.25025, 10.03647], [13.25323, 10.00127], [13.286, 9.9822], [13.27409, 9.93232], [13.24132, 9.91031], [13.25025, 9.86042], [13.29941, 9.8296], [13.25472, 9.76795], [13.22642, 9.57266], [13.02385, 9.49334], [12.85628, 9.36698], [12.91958, 9.33905], [12.90022, 9.11411], [12.81085, 8.91992], [12.79, 8.75361], [12.71701, 8.7595], [12.68722, 8.65938], [12.44146, 8.6152], [12.4489, 8.52536], [12.26123, 8.43696], [12.24782, 8.17904], [12.19271, 8.10826], [12.20909, 7.97553], [11.99908, 7.67302], [12.01844, 7.52981], [11.93205, 7.47812], [11.84864, 7.26098], [11.87396, 7.09398], [11.63117, 6.9905], [11.55818, 6.86186], [11.57755, 6.74059], [11.51499, 6.60892], [11.42264, 6.5882], [11.42041, 6.53789], [11.09495, 6.51717], [11.09644, 6.68437], [10.94302, 6.69325], [10.8179, 6.83377], [10.83727, 6.9358], [10.60789, 7.06885], [10.59746, 7.14719], [10.57214, 7.16345], [10.53639, 6.93432], [10.21466, 6.88996], [10.15135, 7.03781], [9.86314, 6.77756], [9.77824, 6.79088], [9.70674, 6.51717], [9.51757, 6.43874], [8.84209, 5.82562], [8.88156, 5.78857], [8.83687, 5.68483], [8.92029, 5.58403], [8.78027, 5.1243], [8.60302, 4.87353], [8.34397, 4.30689], [9.22018, 3.72052], [9.81162, 2.33797], [9.82123, 2.35097], [9.83754, 2.32428], [9.83238, 2.29079], [9.84716, 2.24676], [9.89012, 2.20457], [9.90749, 2.20049], [9.991, 2.16561], [11.3561, 2.17217], [11.37116, 2.29975], [13.28534, 2.25716], [13.29457, 2.16106], [14.61145, 2.17866], [15.00996, 1.98887], [15.22634, 2.03243], [15.34776, 1.91264], [15.48942, 1.98265], [16.02959, 1.76483], [16.02647, 1.65591], [16.14634, 1.70259], [16.05294, 1.9811], [16.08563, 2.19733], [16.15568, 2.18955], [16.19357, 2.21537], [16.08252, 2.45708], [16.05449, 3.02306], [15.77725, 3.26835], [15.73522, 3.24348], [15.07686, 4.01805], [15.17482, 4.05131], [15.10644, 4.1362], [15.08609, 4.30282], [15.00825, 4.41458], [14.73383, 4.6135], [14.65489, 5.21343], [14.57083, 5.23979], [14.52724, 5.28319], [14.62531, 5.51411], [14.58951, 5.59777], [14.62375, 5.70466], [14.60974, 5.91838], [14.49455, 5.91683], [14.42917, 6.00508], [14.43073, 6.08867], [14.56149, 6.18928], [14.74206, 6.26356], [14.80122, 6.34866], [14.79966, 6.39043], [14.96311, 6.75693], [15.04717, 6.77085], [15.23397, 7.25135], [15.49743, 7.52179], [15.56964, 7.58936], [15.59272, 7.7696], [15.50743, 7.79302], [15.20426, 8.50892], [15.09484, 8.65982], [14.83566, 8.80557], [14.35707, 9.19611], [14.37094, 9.2954], [13.97544, 9.6365], [14.01793, 9.73169], [14.1317, 9.82413], [14.20411, 10.00055], [14.4673, 10.00264], [14.80082, 9.93818], [14.95722, 9.97926], [15.05999, 9.94845], [15.14043, 9.99246], [15.24618, 9.99246], [15.41408, 9.92876], [15.68761, 9.99344], [15.50535, 10.1098], [15.30874, 10.31063], [15.23724, 10.47764], [15.14936, 10.53915], [15.15532, 10.62846], [15.06737, 10.80921], [15.09127, 10.87431], [15.04957, 11.02347], [15.10021, 11.04101], [15.0585, 11.40481], [15.13149, 11.5537], [15.06595, 11.71126], [15.11579, 11.79313], [15.04808, 11.8731], [15.05786, 12.0608], [15.0349, 12.10698], [15.00146, 12.1223], [14.96952, 12.0925], [14.89019, 12.16593], [14.90827, 12.3269], [14.83314, 12.62963]]]] } },
+    { type: "Feature", properties: { iso1A2: "CN", iso1A3: "CHN", iso1N3: "156", wikidata: "Q148", nameEn: "People's Republic of China" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "CO", iso1A3: "COL", iso1N3: "170", wikidata: "Q739", nameEn: "Colombia", groups: ["005", "419", "019", "UN"], callingCodes: ["57"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.19849, 12.65801], [-81.58685, 18.0025], [-82.06974, 14.49418], [-82.56142, 11.91792], [-78.79327, 9.93766], [-77.58292, 9.22278], [-77.32389, 8.81247], [-77.45064, 8.49991], [-77.17257, 7.97422], [-77.57185, 7.51147], [-77.72514, 7.72348], [-77.72157, 7.47612], [-77.81426, 7.48319], [-77.89178, 7.22681], [-78.06168, 7.07793], [-82.12561, 4.00341], [-78.87137, 1.47457], [-78.42749, 1.15389], [-77.85677, 0.80197], [-77.7148, 0.85003], [-77.68613, 0.83029], [-77.66416, 0.81604], [-77.67815, 0.73863], [-77.49984, 0.64476], [-77.52001, 0.40782], [-76.89177, 0.24736], [-76.4094, 0.24015], [-76.41215, 0.38228], [-76.23441, 0.42294], [-75.82927, 0.09578], [-75.25764, -0.11943], [-75.18513, -0.0308], [-74.42701, -0.50218], [-74.26675, -0.97229], [-73.65312, -1.26222], [-72.92587, -2.44514], [-71.75223, -2.15058], [-70.94377, -2.23142], [-70.04609, -2.73906], [-70.71396, -3.7921], [-70.52393, -3.87553], [-70.3374, -3.79505], [-69.94708, -4.2431], [-69.43395, -1.42219], [-69.4215, -1.01853], [-69.59796, -0.75136], [-69.603, -0.51947], [-70.03658, -0.19681], [-70.04162, 0.55437], [-69.47696, 0.71065], [-69.20976, 0.57958], [-69.14422, 0.84172], [-69.26017, 1.06856], [-69.82987, 1.07864], [-69.83491, 1.69353], [-69.53746, 1.76408], [-69.38621, 1.70865], [-68.18128, 1.72881], [-68.26699, 1.83463], [-68.18632, 2.00091], [-67.9292, 1.82455], [-67.40488, 2.22258], [-67.299, 1.87494], [-67.15784, 1.80439], [-67.08222, 1.17441], [-66.85795, 1.22998], [-67.21967, 2.35778], [-67.65696, 2.81691], [-67.85862, 2.79173], [-67.85862, 2.86727], [-67.30945, 3.38393], [-67.50067, 3.75812], [-67.62671, 3.74303], [-67.85358, 4.53249], [-67.83341, 5.31104], [-67.59141, 5.5369], [-67.63914, 5.64963], [-67.58558, 5.84537], [-67.43513, 5.98835], [-67.4625, 6.20625], [-67.60654, 6.2891], [-69.41843, 6.1072], [-70.10716, 6.96516], [-70.7596, 7.09799], [-71.03941, 6.98163], [-71.37234, 7.01588], [-71.42212, 7.03854], [-71.44118, 7.02116], [-71.82441, 7.04314], [-72.04895, 7.03837], [-72.19437, 7.37034], [-72.43132, 7.40034], [-72.47415, 7.48928], [-72.45321, 7.57232], [-72.47827, 7.65604], [-72.46763, 7.79518], [-72.44454, 7.86031], [-72.46183, 7.90682], [-72.45806, 7.91141], [-72.47042, 7.92306], [-72.48183, 7.92909], [-72.48801, 7.94329], [-72.47213, 7.96106], [-72.39137, 8.03534], [-72.35163, 8.01163], [-72.36987, 8.19976], [-72.4042, 8.36513], [-72.65474, 8.61428], [-72.77415, 9.10165], [-72.94052, 9.10663], [-73.02119, 9.27584], [-73.36905, 9.16636], [-72.98085, 9.85253], [-72.88002, 10.44309], [-72.4767, 11.1117], [-72.24983, 11.14138], [-71.9675, 11.65536], [-71.3275, 11.85], [-70.92579, 11.96275], [-71.19849, 12.65801]]]] } },
+    { type: "Feature", properties: { iso1A2: "CP", iso1A3: "CPT", wikidata: "Q161258", nameEn: "Clipperton Island", country: "FR", groups: ["EU", "013", "003", "019", "UN"], isoStatus: "excRes" }, geometry: { type: "MultiPolygon", coordinates: [[[[-110.36279, 9.79626], [-108.755, 9.84085], [-109.04145, 11.13245], [-110.36279, 9.79626]]]] } },
+    { type: "Feature", properties: { iso1A2: "CQ", iso1A3: "CRQ", iso1N3: "680", m49: "680", wikidata: "Q3405693", ccTLD: null, nameEn: "Sark", country: "GB", groups: ["GG", "830", "Q185086", "154", "150", "UN"], level: "subterritory", isoStatus: "excRes", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01481"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.36485, 49.48223], [-2.65349, 49.15373], [-2.09454, 49.46288], [-2.36485, 49.48223]]]] } },
+    { type: "Feature", properties: { iso1A2: "CR", iso1A3: "CRI", iso1N3: "188", wikidata: "Q800", nameEn: "Costa Rica", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["506"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-83.68276, 11.01562], [-83.66597, 10.79916], [-83.90838, 10.71161], [-84.68197, 11.07568], [-84.92439, 10.9497], [-85.60529, 11.22607], [-85.71223, 11.06868], [-86.14524, 11.09059], [-87.41779, 5.02401], [-82.94503, 7.93865], [-82.89978, 8.04083], [-82.89137, 8.05755], [-82.88641, 8.10219], [-82.9388, 8.26634], [-83.05209, 8.33394], [-82.93056, 8.43465], [-82.8679, 8.44042], [-82.8382, 8.48117], [-82.83322, 8.52464], [-82.83975, 8.54755], [-82.82739, 8.60153], [-82.8794, 8.6981], [-82.92068, 8.74832], [-82.91377, 8.774], [-82.88253, 8.83331], [-82.72126, 8.97125], [-82.93516, 9.07687], [-82.93516, 9.46741], [-82.84871, 9.4973], [-82.87919, 9.62645], [-82.77206, 9.59573], [-82.66667, 9.49746], [-82.61345, 9.49881], [-82.56507, 9.57279], [-82.51044, 9.65379], [-83.54024, 10.96805], [-83.68276, 11.01562]]]] } },
+    { type: "Feature", properties: { iso1A2: "CU", iso1A3: "CUB", iso1N3: "192", wikidata: "Q241", nameEn: "Cuba", groups: ["029", "003", "419", "019", "UN"], callingCodes: ["53"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-73.62304, 20.6935], [-82.02215, 24.23074], [-85.77883, 21.92705], [-74.81171, 18.82201], [-73.62304, 20.6935]]]] } },
+    { type: "Feature", properties: { iso1A2: "CV", iso1A3: "CPV", iso1N3: "132", wikidata: "Q1011", nameEn: "Cape Verde", groups: ["Q105472", "011", "202", "002", "UN"], callingCodes: ["238"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-28.81604, 14.57305], [-20.39702, 14.12816], [-23.37101, 19.134], [-28.81604, 14.57305]]]] } },
+    { type: "Feature", properties: { iso1A2: "CW", iso1A3: "CUW", iso1N3: "531", wikidata: "Q25279", nameEn: "Cura\xE7ao", aliases: ["NL-CW"], country: "NL", groups: ["Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["599"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-68.90012, 12.62309], [-69.59009, 12.46019], [-68.99639, 11.79035], [-68.33524, 11.78151], [-68.90012, 12.62309]]]] } },
+    { type: "Feature", properties: { iso1A2: "CX", iso1A3: "CXR", iso1N3: "162", wikidata: "Q31063", nameEn: "Christmas Island", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["61"] }, geometry: { type: "MultiPolygon", coordinates: [[[[105.66835, -9.31927], [104.67494, -11.2566], [106.66176, -11.14349], [105.66835, -9.31927]]]] } },
+    { type: "Feature", properties: { iso1A2: "CY", iso1A3: "CYP", iso1N3: "196", wikidata: "Q229", nameEn: "Republic of Cyprus", groups: ["Q644636", "EU", "145", "142", "UN"], driveSide: "left", callingCodes: ["357"] }, geometry: { type: "MultiPolygon", coordinates: [[[[32.60361, 35.16647], [32.46489, 35.48584], [30.15137, 34.08517], [32.74412, 34.43926], [32.75515, 34.64985], [32.76136, 34.68318], [32.79433, 34.67883], [32.82717, 34.70622], [32.86014, 34.70585], [32.86167, 34.68734], [32.9068, 34.66102], [32.91398, 34.67343], [32.93043, 34.67091], [32.92824, 34.66821], [32.93535, 34.66317], [32.93756, 34.67072], [32.93989, 34.67034], [32.94127, 34.67426], [32.95567, 34.6839], [32.98967, 34.67981], [32.98668, 34.67268], [32.99014, 34.65518], [32.98046, 34.65336], [32.969, 34.6549], [32.9639, 34.65866], [32.96154, 34.65587], [32.95277, 34.65104], [32.95471, 34.64528], [32.95323, 34.64075], [32.95516, 34.63541], [32.96312, 34.63236], [32.96718, 34.63446], [32.96968, 34.64046], [33.0138, 34.64424], [33.26744, 34.49942], [33.83531, 34.73974], [33.70575, 34.97947], [33.70639, 34.99303], [33.71514, 35.00294], [33.69731, 35.01754], [33.69938, 35.03123], [33.67678, 35.03866], [33.63765, 35.03869], [33.61215, 35.0527], [33.59658, 35.03635], [33.567, 35.04803], [33.57478, 35.06049], [33.53975, 35.08151], [33.48915, 35.06594], [33.47666, 35.00701], [33.45256, 35.00288], [33.45178, 35.02078], [33.47825, 35.04103], [33.48136, 35.0636], [33.46813, 35.10564], [33.41675, 35.16325], [33.4076, 35.20062], [33.38575, 35.2018], [33.37248, 35.18698], [33.3717, 35.1788], [33.36569, 35.17479], [33.35612, 35.17402], [33.35596, 35.17942], [33.34964, 35.17803], [33.35056, 35.18328], [33.31955, 35.18096], [33.3072, 35.16816], [33.27068, 35.16815], [33.15138, 35.19504], [33.11105, 35.15639], [33.08249, 35.17319], [33.01192, 35.15639], [32.94471, 35.09422], [32.86406, 35.1043], [32.85733, 35.07742], [32.70779, 35.14127], [32.70947, 35.18328], [32.64864, 35.19967], [32.60361, 35.16647]]], [[[33.7343, 35.01178], [33.74144, 35.01053], [33.7492, 35.01319], [33.74983, 35.02274], [33.74265, 35.02329], [33.73781, 35.02181], [33.7343, 35.01178]]], [[[33.77553, 34.99518], [33.77312, 34.9976], [33.75994, 35.00113], [33.75682, 34.99916], [33.76605, 34.99543], [33.76738, 34.99188], [33.7778, 34.98981], [33.77843, 34.988], [33.78149, 34.98854], [33.78318, 34.98699], [33.78571, 34.98951], [33.78917, 34.98854], [33.79191, 34.98914], [33.78516, 34.99582], [33.77553, 34.99518]]], [[[33.82051, 35.0667], [33.8012, 35.04786], [33.81524, 35.04192], [33.83055, 35.02865], [33.82875, 35.01685], [33.84045, 35.00616], [33.85216, 35.00579], [33.85891, 35.001], [33.85488, 34.98462], [33.84616, 34.98511], [33.83459, 34.97448], [33.84028, 34.97179], [33.84741, 34.97167], [33.86018, 34.97381], [33.90146, 34.96458], [33.98684, 34.76642], [35.48515, 34.70851], [35.51152, 36.10954], [34.23164, 35.1777], [33.99999, 35.07016], [33.94869, 35.07277], [33.92495, 35.06789], [33.90247, 35.07686], [33.89322, 35.06789], [33.87438, 35.08118], [33.85261, 35.0574], [33.8355, 35.05777], [33.82051, 35.0667]]]] } },
+    { type: "Feature", properties: { iso1A2: "CZ", iso1A3: "CZE", iso1N3: "203", wikidata: "Q213", nameEn: "Czechia", groups: ["EU", "151", "150", "UN"], callingCodes: ["420"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.82803, 50.86966], [14.79139, 50.81438], [14.70661, 50.84096], [14.61993, 50.86049], [14.63434, 50.8883], [14.65259, 50.90513], [14.64802, 50.93241], [14.58024, 50.91443], [14.56374, 50.922], [14.59702, 50.96148], [14.59908, 50.98685], [14.58215, 50.99306], [14.56432, 51.01008], [14.53438, 51.00374], [14.53321, 51.01679], [14.49873, 51.02242], [14.50809, 51.0427], [14.49991, 51.04692], [14.49154, 51.04382], [14.49202, 51.02286], [14.45827, 51.03712], [14.41335, 51.02086], [14.30098, 51.05515], [14.25665, 50.98935], [14.28776, 50.97718], [14.32353, 50.98556], [14.32793, 50.97379], [14.30251, 50.96606], [14.31422, 50.95243], [14.39848, 50.93866], [14.38691, 50.89907], [14.30098, 50.88448], [14.27123, 50.89386], [14.24314, 50.88761], [14.22331, 50.86049], [14.02982, 50.80662], [13.98864, 50.8177], [13.89113, 50.78533], [13.89444, 50.74142], [13.82942, 50.7251], [13.76316, 50.73487], [13.70204, 50.71771], [13.65977, 50.73096], [13.52474, 50.70394], [13.53748, 50.67654], [13.5226, 50.64721], [13.49742, 50.63133], [13.46413, 50.60102], [13.42189, 50.61243], [13.37485, 50.64931], [13.37805, 50.627], [13.32264, 50.60317], [13.32594, 50.58009], [13.29454, 50.57904], [13.25158, 50.59268], [13.19043, 50.50237], [13.13424, 50.51709], [13.08301, 50.50132], [13.0312, 50.50944], [13.02038, 50.4734], [13.02147, 50.44763], [12.98433, 50.42016], [12.94058, 50.40944], [12.82465, 50.45738], [12.73476, 50.43237], [12.73044, 50.42268], [12.70731, 50.39948], [12.67261, 50.41949], [12.51356, 50.39694], [12.48747, 50.37278], [12.49214, 50.35228], [12.48256, 50.34784], [12.46643, 50.35527], [12.43722, 50.33774], [12.43371, 50.32506], [12.39924, 50.32302], [12.40158, 50.29521], [12.36594, 50.28289], [12.35425, 50.23993], [12.33263, 50.24367], [12.32445, 50.20442], [12.33847, 50.19432], [12.32596, 50.17146], [12.29232, 50.17524], [12.28063, 50.19544], [12.28755, 50.22429], [12.23943, 50.24594], [12.24791, 50.25525], [12.26953, 50.25189], [12.25119, 50.27079], [12.20823, 50.2729], [12.18013, 50.32146], [12.10907, 50.32041], [12.13716, 50.27396], [12.09287, 50.25032], [12.19335, 50.19997], [12.21484, 50.16399], [12.1917, 50.13434], [12.2073, 50.10315], [12.23709, 50.10213], [12.27433, 50.0771], [12.26111, 50.06331], [12.30798, 50.05719], [12.49908, 49.97305], [12.47264, 49.94222], [12.55197, 49.92094], [12.48256, 49.83575], [12.46603, 49.78882], [12.40489, 49.76321], [12.4462, 49.70233], [12.52553, 49.68415], [12.53544, 49.61888], [12.56188, 49.6146], [12.60155, 49.52887], [12.64782, 49.52565], [12.64121, 49.47628], [12.669, 49.42935], [12.71227, 49.42363], [12.75854, 49.3989], [12.78168, 49.34618], [12.88414, 49.33541], [12.88249, 49.35479], [12.94859, 49.34079], [13.03618, 49.30417], [13.02957, 49.27399], [13.05883, 49.26259], [13.17665, 49.16713], [13.17019, 49.14339], [13.20405, 49.12303], [13.23689, 49.11412], [13.28242, 49.1228], [13.39479, 49.04812], [13.40802, 48.98851], [13.50221, 48.93752], [13.50552, 48.97441], [13.58319, 48.96899], [13.61624, 48.9462], [13.67739, 48.87886], [13.73854, 48.88538], [13.76994, 48.83537], [13.78977, 48.83319], [13.8096, 48.77877], [13.84023, 48.76988], [14.06151, 48.66873], [14.01482, 48.63788], [14.09104, 48.5943], [14.20691, 48.5898], [14.33909, 48.55852], [14.43076, 48.58855], [14.4587, 48.64695], [14.56139, 48.60429], [14.60808, 48.62881], [14.66762, 48.58215], [14.71794, 48.59794], [14.72756, 48.69502], [14.80584, 48.73489], [14.80821, 48.77711], [14.81545, 48.7874], [14.94773, 48.76268], [14.95641, 48.75915], [14.9758, 48.76857], [14.98112, 48.77524], [14.9782, 48.7766], [14.98032, 48.77959], [14.95072, 48.79101], [14.98917, 48.90082], [14.97612, 48.96983], [14.99878, 49.01444], [15.15534, 48.99056], [15.16358, 48.94278], [15.26177, 48.95766], [15.28305, 48.98831], [15.34823, 48.98444], [15.48027, 48.94481], [15.51357, 48.91549], [15.61622, 48.89541], [15.6921, 48.85973], [15.75341, 48.8516], [15.78087, 48.87644], [15.84404, 48.86921], [16.06034, 48.75436], [16.37345, 48.729], [16.40915, 48.74576], [16.46134, 48.80865], [16.67008, 48.77699], [16.68518, 48.7281], [16.71883, 48.73806], [16.79779, 48.70998], [16.90354, 48.71541], [16.93955, 48.60371], [17.00215, 48.70887], [17.11202, 48.82925], [17.19355, 48.87602], [17.29054, 48.85546], [17.3853, 48.80936], [17.45671, 48.85004], [17.5295, 48.81117], [17.7094, 48.86721], [17.73126, 48.87885], [17.77944, 48.92318], [17.87831, 48.92679], [17.91814, 49.01784], [18.06885, 49.03157], [18.1104, 49.08624], [18.15022, 49.24518], [18.18456, 49.28909], [18.36446, 49.3267], [18.4139, 49.36517], [18.4084, 49.40003], [18.44686, 49.39467], [18.54848, 49.47059], [18.53063, 49.49022], [18.57183, 49.51162], [18.6144, 49.49824], [18.67757, 49.50895], [18.74761, 49.492], [18.84521, 49.51672], [18.84786, 49.5446], [18.80479, 49.6815], [18.72838, 49.68163], [18.69817, 49.70473], [18.62676, 49.71983], [18.62943, 49.74603], [18.62645, 49.75002], [18.61368, 49.75426], [18.61278, 49.7618], [18.57183, 49.83334], [18.60341, 49.86256], [18.57045, 49.87849], [18.57697, 49.91565], [18.54299, 49.92537], [18.54495, 49.9079], [18.53423, 49.89906], [18.41604, 49.93498], [18.33562, 49.94747], [18.33278, 49.92415], [18.31914, 49.91565], [18.27794, 49.93863], [18.27107, 49.96779], [18.21752, 49.97309], [18.20241, 49.99958], [18.10628, 50.00223], [18.07898, 50.04535], [18.03212, 50.06574], [18.00396, 50.04954], [18.04585, 50.03311], [18.04585, 50.01194], [18.00191, 50.01723], [17.86886, 49.97452], [17.77669, 50.02253], [17.7506, 50.07896], [17.6888, 50.12037], [17.66683, 50.10275], [17.59404, 50.16437], [17.70528, 50.18812], [17.76296, 50.23382], [17.72176, 50.25665], [17.74648, 50.29966], [17.69292, 50.32859], [17.67764, 50.28977], [17.58889, 50.27837], [17.3702, 50.28123], [17.34548, 50.2628], [17.34273, 50.32947], [17.27681, 50.32246], [17.19991, 50.3654], [17.19579, 50.38817], [17.14498, 50.38117], [17.1224, 50.39494], [16.89229, 50.45117], [16.85933, 50.41093], [16.90877, 50.38642], [16.94448, 50.31281], [16.99803, 50.30316], [17.02138, 50.27772], [16.99803, 50.25753], [17.02825, 50.23118], [17.00353, 50.21449], [16.98018, 50.24172], [16.8456, 50.20834], [16.7014, 50.09659], [16.63137, 50.1142], [16.55446, 50.16613], [16.56407, 50.21009], [16.42674, 50.32509], [16.39379, 50.3207], [16.3622, 50.34875], [16.36495, 50.37679], [16.30289, 50.38292], [16.28118, 50.36891], [16.22821, 50.41054], [16.21585, 50.40627], [16.19526, 50.43291], [16.31413, 50.50274], [16.34572, 50.49575], [16.44597, 50.58041], [16.33611, 50.66579], [16.23174, 50.67101], [16.20839, 50.63096], [16.10265, 50.66405], [16.02437, 50.60046], [15.98317, 50.61528], [16.0175, 50.63009], [15.97219, 50.69799], [15.87331, 50.67188], [15.81683, 50.75666], [15.73186, 50.73885], [15.43798, 50.80833], [15.3803, 50.77187], [15.36656, 50.83956], [15.2773, 50.8907], [15.27043, 50.97724], [15.2361, 50.99886], [15.1743, 50.9833], [15.16744, 51.01959], [15.11937, 50.99021], [15.10152, 51.01095], [15.06218, 51.02269], [15.03895, 51.0123], [15.02433, 51.0242], [14.96419, 50.99108], [15.01088, 50.97984], [14.99852, 50.86817], [14.82803, 50.86966]]]] } },
+    { type: "Feature", properties: { iso1A2: "DE", iso1A3: "DEU", iso1N3: "276", wikidata: "Q183", nameEn: "Germany", groups: ["EU", "155", "150", "UN"], callingCodes: ["49"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.70847, 47.68904], [8.71773, 47.69088], [8.70237, 47.71453], [8.66416, 47.71367], [8.67508, 47.6979], [8.65769, 47.68928], [8.66837, 47.68437], [8.68985, 47.69552], [8.70847, 47.68904]]], [[[8.72617, 47.69651], [8.72809, 47.69282], [8.75856, 47.68969], [8.79511, 47.67462], [8.79966, 47.70222], [8.76965, 47.7075], [8.77309, 47.72059], [8.80663, 47.73821], [8.82002, 47.71458], [8.86989, 47.70504], [8.85065, 47.68209], [8.87383, 47.67045], [8.87625, 47.65441], [8.89946, 47.64769], [8.94093, 47.65596], [9.02093, 47.6868], [9.09891, 47.67801], [9.13845, 47.66389], [9.15181, 47.66904], [9.1705, 47.65513], [9.1755, 47.65584], [9.17593, 47.65399], [9.18203, 47.65598], [9.25619, 47.65939], [9.55125, 47.53629], [9.72736, 47.53457], [9.76748, 47.5934], [9.80254, 47.59419], [9.82591, 47.58158], [9.8189, 47.54688], [9.87499, 47.52953], [9.87733, 47.54688], [9.92407, 47.53111], [9.96029, 47.53899], [10.00003, 47.48216], [10.03859, 47.48927], [10.07131, 47.45531], [10.09001, 47.46005], [10.1052, 47.4316], [10.06897, 47.40709], [10.09819, 47.35724], [10.11805, 47.37228], [10.16362, 47.36674], [10.17648, 47.38889], [10.2127, 47.38019], [10.22774, 47.38904], [10.23757, 47.37609], [10.19998, 47.32832], [10.2147, 47.31014], [10.17648, 47.29149], [10.17531, 47.27167], [10.23257, 47.27088], [10.33424, 47.30813], [10.39851, 47.37623], [10.4324, 47.38494], [10.4359, 47.41183], [10.47446, 47.43318], [10.46278, 47.47901], [10.44291, 47.48453], [10.4324, 47.50111], [10.44992, 47.5524], [10.43473, 47.58394], [10.47329, 47.58552], [10.48849, 47.54057], [10.56912, 47.53584], [10.60337, 47.56755], [10.63456, 47.5591], [10.68832, 47.55752], [10.6965, 47.54253], [10.7596, 47.53228], [10.77596, 47.51729], [10.88814, 47.53701], [10.91268, 47.51334], [10.86945, 47.5015], [10.87061, 47.4786], [10.90918, 47.48571], [10.93839, 47.48018], [10.92437, 47.46991], [10.98513, 47.42882], [10.97111, 47.41617], [10.97111, 47.39561], [11.11835, 47.39719], [11.12536, 47.41222], [11.20482, 47.43198], [11.25157, 47.43277], [11.22002, 47.3964], [11.27844, 47.39956], [11.29597, 47.42566], [11.33804, 47.44937], [11.4175, 47.44621], [11.38128, 47.47465], [11.4362, 47.51413], [11.52618, 47.50939], [11.58578, 47.52281], [11.58811, 47.55515], [11.60681, 47.57881], [11.63934, 47.59202], [11.84052, 47.58354], [11.85572, 47.60166], [12.0088, 47.62451], [12.02282, 47.61033], [12.05788, 47.61742], [12.13734, 47.60639], [12.17824, 47.61506], [12.18145, 47.61019], [12.17737, 47.60121], [12.18568, 47.6049], [12.20398, 47.60667], [12.20801, 47.61082], [12.19895, 47.64085], [12.18507, 47.65984], [12.18347, 47.66663], [12.16769, 47.68167], [12.16217, 47.70105], [12.18303, 47.70065], [12.22571, 47.71776], [12.2542, 47.7433], [12.26238, 47.73544], [12.24017, 47.69534], [12.26004, 47.67725], [12.27991, 47.68827], [12.336, 47.69534], [12.37222, 47.68433], [12.43883, 47.6977], [12.44117, 47.6741], [12.50076, 47.62293], [12.53816, 47.63553], [12.57438, 47.63238], [12.6071, 47.6741], [12.7357, 47.6787], [12.77777, 47.66689], [12.76492, 47.64485], [12.82101, 47.61493], [12.77427, 47.58025], [12.80699, 47.54477], [12.84672, 47.54556], [12.85256, 47.52741], [12.9624, 47.47452], [12.98344, 47.48716], [12.9998, 47.46267], [13.04537, 47.49426], [13.03252, 47.53373], [13.05355, 47.56291], [13.04537, 47.58183], [13.06641, 47.58577], [13.06407, 47.60075], [13.09562, 47.63304], [13.07692, 47.68814], [13.01382, 47.72116], [12.98578, 47.7078], [12.92969, 47.71094], [12.91333, 47.7178], [12.90274, 47.72513], [12.91711, 47.74026], [12.9353, 47.74788], [12.94371, 47.76281], [12.93202, 47.77302], [12.96311, 47.79957], [12.98543, 47.82896], [13.00588, 47.84374], [12.94163, 47.92927], [12.93886, 47.94046], [12.93642, 47.94436], [12.93419, 47.94063], [12.92668, 47.93879], [12.91985, 47.94069], [12.9211, 47.95135], [12.91683, 47.95647], [12.87476, 47.96195], [12.8549, 48.01122], [12.76141, 48.07373], [12.74973, 48.10885], [12.7617, 48.12796], [12.78595, 48.12445], [12.80676, 48.14979], [12.82673, 48.15245], [12.8362, 48.15876], [12.836, 48.1647], [12.84475, 48.16556], [12.87126, 48.20318], [12.95306, 48.20629], [13.02083, 48.25689], [13.0851, 48.27711], [13.126, 48.27867], [13.18093, 48.29577], [13.26039, 48.29422], [13.30897, 48.31575], [13.40709, 48.37292], [13.43929, 48.43386], [13.42527, 48.45711], [13.45727, 48.51092], [13.43695, 48.55776], [13.45214, 48.56472], [13.46967, 48.55157], [13.50663, 48.57506], [13.50131, 48.58091], [13.51291, 48.59023], [13.57535, 48.55912], [13.59705, 48.57013], [13.62508, 48.55501], [13.65186, 48.55092], [13.66113, 48.53558], [13.72802, 48.51208], [13.74816, 48.53058], [13.7513, 48.5624], [13.76921, 48.55324], [13.80519, 48.58026], [13.80038, 48.59487], [13.82609, 48.62345], [13.81901, 48.6761], [13.81283, 48.68426], [13.81791, 48.69832], [13.79337, 48.71375], [13.81863, 48.73257], [13.82266, 48.75544], [13.84023, 48.76988], [13.8096, 48.77877], [13.78977, 48.83319], [13.76994, 48.83537], [13.73854, 48.88538], [13.67739, 48.87886], [13.61624, 48.9462], [13.58319, 48.96899], [13.50552, 48.97441], [13.50221, 48.93752], [13.40802, 48.98851], [13.39479, 49.04812], [13.28242, 49.1228], [13.23689, 49.11412], [13.20405, 49.12303], [13.17019, 49.14339], [13.17665, 49.16713], [13.05883, 49.26259], [13.02957, 49.27399], [13.03618, 49.30417], [12.94859, 49.34079], [12.88249, 49.35479], [12.88414, 49.33541], [12.78168, 49.34618], [12.75854, 49.3989], [12.71227, 49.42363], [12.669, 49.42935], [12.64121, 49.47628], [12.64782, 49.52565], [12.60155, 49.52887], [12.56188, 49.6146], [12.53544, 49.61888], [12.52553, 49.68415], [12.4462, 49.70233], [12.40489, 49.76321], [12.46603, 49.78882], [12.48256, 49.83575], [12.55197, 49.92094], [12.47264, 49.94222], [12.49908, 49.97305], [12.30798, 50.05719], [12.26111, 50.06331], [12.27433, 50.0771], [12.23709, 50.10213], [12.2073, 50.10315], [12.1917, 50.13434], [12.21484, 50.16399], [12.19335, 50.19997], [12.09287, 50.25032], [12.13716, 50.27396], [12.10907, 50.32041], [12.18013, 50.32146], [12.20823, 50.2729], [12.25119, 50.27079], [12.26953, 50.25189], [12.24791, 50.25525], [12.23943, 50.24594], [12.28755, 50.22429], [12.28063, 50.19544], [12.29232, 50.17524], [12.32596, 50.17146], [12.33847, 50.19432], [12.32445, 50.20442], [12.33263, 50.24367], [12.35425, 50.23993], [12.36594, 50.28289], [12.40158, 50.29521], [12.39924, 50.32302], [12.43371, 50.32506], [12.43722, 50.33774], [12.46643, 50.35527], [12.48256, 50.34784], [12.49214, 50.35228], [12.48747, 50.37278], [12.51356, 50.39694], [12.67261, 50.41949], [12.70731, 50.39948], [12.73044, 50.42268], [12.73476, 50.43237], [12.82465, 50.45738], [12.94058, 50.40944], [12.98433, 50.42016], [13.02147, 50.44763], [13.02038, 50.4734], [13.0312, 50.50944], [13.08301, 50.50132], [13.13424, 50.51709], [13.19043, 50.50237], [13.25158, 50.59268], [13.29454, 50.57904], [13.32594, 50.58009], [13.32264, 50.60317], [13.37805, 50.627], [13.37485, 50.64931], [13.42189, 50.61243], [13.46413, 50.60102], [13.49742, 50.63133], [13.5226, 50.64721], [13.53748, 50.67654], [13.52474, 50.70394], [13.65977, 50.73096], [13.70204, 50.71771], [13.76316, 50.73487], [13.82942, 50.7251], [13.89444, 50.74142], [13.89113, 50.78533], [13.98864, 50.8177], [14.02982, 50.80662], [14.22331, 50.86049], [14.24314, 50.88761], [14.27123, 50.89386], [14.30098, 50.88448], [14.38691, 50.89907], [14.39848, 50.93866], [14.31422, 50.95243], [14.30251, 50.96606], [14.32793, 50.97379], [14.32353, 50.98556], [14.28776, 50.97718], [14.25665, 50.98935], [14.30098, 51.05515], [14.41335, 51.02086], [14.45827, 51.03712], [14.49202, 51.02286], [14.49154, 51.04382], [14.49991, 51.04692], [14.50809, 51.0427], [14.49873, 51.02242], [14.53321, 51.01679], [14.53438, 51.00374], [14.56432, 51.01008], [14.58215, 50.99306], [14.59908, 50.98685], [14.59702, 50.96148], [14.56374, 50.922], [14.58024, 50.91443], [14.64802, 50.93241], [14.65259, 50.90513], [14.63434, 50.8883], [14.61993, 50.86049], [14.70661, 50.84096], [14.79139, 50.81438], [14.82803, 50.86966], [14.81664, 50.88148], [14.89681, 50.9422], [14.89252, 50.94999], [14.92942, 50.99744], [14.95529, 51.04552], [14.97938, 51.07742], [14.98229, 51.11354], [14.99689, 51.12205], [14.99079, 51.14284], [14.99646, 51.14365], [15.00083, 51.14974], [14.99414, 51.15813], [14.99311, 51.16249], [15.0047, 51.16874], [15.01242, 51.21285], [15.04288, 51.28387], [14.98008, 51.33449], [14.96899, 51.38367], [14.9652, 51.44793], [14.94749, 51.47155], [14.73219, 51.52922], [14.72652, 51.53902], [14.73047, 51.54606], [14.71125, 51.56209], [14.7727, 51.61263], [14.75759, 51.62318], [14.75392, 51.67445], [14.69065, 51.70842], [14.66386, 51.73282], [14.64625, 51.79472], [14.60493, 51.80473], [14.59089, 51.83302], [14.6588, 51.88359], [14.6933, 51.9044], [14.70601, 51.92944], [14.7177, 51.94048], [14.72163, 51.95188], [14.71836, 51.95606], [14.7139, 51.95643], [14.70488, 51.97679], [14.71339, 52.00337], [14.76026, 52.06624], [14.72971, 52.09167], [14.6917, 52.10283], [14.67683, 52.13936], [14.70616, 52.16927], [14.68344, 52.19612], [14.71319, 52.22144], [14.70139, 52.25038], [14.58149, 52.28007], [14.56378, 52.33838], [14.55228, 52.35264], [14.54423, 52.42568], [14.63056, 52.48993], [14.60081, 52.53116], [14.6289, 52.57136], [14.61073, 52.59847], [14.22071, 52.81175], [14.13806, 52.82392], [14.12256, 52.84311], [14.15873, 52.87715], [14.14056, 52.95786], [14.25954, 53.00264], [14.35044, 53.05829], [14.38679, 53.13669], [14.36696, 53.16444], [14.37853, 53.20405], [14.40662, 53.21098], [14.45125, 53.26241], [14.44133, 53.27427], [14.4215, 53.27724], [14.35209, 53.49506], [14.3273, 53.50587], [14.30416, 53.55499], [14.31904, 53.61581], [14.2853, 53.63392], [14.28477, 53.65955], [14.27133, 53.66613], [14.2836, 53.67721], [14.26782, 53.69866], [14.27249, 53.74464], [14.21323, 53.8664], [14.20823, 53.90776], [14.18544, 53.91258], [14.20647, 53.91671], [14.22634, 53.9291], [14.20811, 54.12784], [13.93395, 54.84044], [12.85844, 54.82438], [11.90309, 54.38543], [11.00303, 54.63689], [10.31111, 54.65968], [10.16755, 54.73883], [9.89314, 54.84171], [9.73563, 54.8247], [9.61187, 54.85548], [9.62734, 54.88057], [9.58937, 54.88785], [9.4659, 54.83131], [9.43155, 54.82586], [9.41213, 54.84254], [9.38532, 54.83968], [9.36496, 54.81749], [9.33849, 54.80233], [9.32771, 54.80602], [9.2474, 54.8112], [9.23445, 54.83432], [9.24631, 54.84726], [9.20571, 54.85841], [9.14275, 54.87421], [9.04629, 54.87249], [8.92795, 54.90452], [8.81178, 54.90518], [8.76387, 54.8948], [8.63979, 54.91069], [8.55769, 54.91837], [8.45719, 55.06747], [8.02459, 55.09613], [5.45168, 54.20039], [6.91025, 53.44221], [7.00198, 53.32672], [7.19052, 53.31866], [7.21679, 53.20058], [7.22681, 53.18165], [7.17898, 53.13817], [7.21694, 53.00742], [7.07253, 52.81083], [7.04557, 52.63318], [6.77307, 52.65375], [6.71641, 52.62905], [6.69507, 52.488], [6.94293, 52.43597], [6.99041, 52.47235], [7.03417, 52.40237], [7.07044, 52.37805], [7.02703, 52.27941], [7.06365, 52.23789], [7.03729, 52.22695], [6.9897, 52.2271], [6.97189, 52.20329], [6.83984, 52.11728], [6.76117, 52.11895], [6.68128, 52.05052], [6.83035, 51.9905], [6.82357, 51.96711], [6.72319, 51.89518], [6.68386, 51.91861], [6.58556, 51.89386], [6.50231, 51.86313], [6.47179, 51.85395], [6.38815, 51.87257], [6.40704, 51.82771], [6.30593, 51.84998], [6.29872, 51.86801], [6.21443, 51.86801], [6.15349, 51.90439], [6.11551, 51.89769], [6.16902, 51.84094], [6.10337, 51.84829], [6.06705, 51.86136], [5.99848, 51.83195], [5.94568, 51.82786], [5.98665, 51.76944], [5.95003, 51.7493], [6.04091, 51.71821], [6.02767, 51.6742], [6.11759, 51.65609], [6.09055, 51.60564], [6.18017, 51.54096], [6.21724, 51.48568], [6.20654, 51.40049], [6.22641, 51.39948], [6.22674, 51.36135], [6.16977, 51.33169], [6.07889, 51.24432], [6.07889, 51.17038], [6.17384, 51.19589], [6.16706, 51.15677], [5.98292, 51.07469], [5.9541, 51.03496], [5.9134, 51.06736], [5.86735, 51.05182], [5.87849, 51.01969], [5.90493, 51.00198], [5.90296, 50.97356], [5.95282, 50.98728], [6.02697, 50.98303], [6.01615, 50.93367], [6.09297, 50.92066], [6.07486, 50.89307], [6.08805, 50.87223], [6.07693, 50.86025], [6.07431, 50.84674], [6.05702, 50.85179], [6.05623, 50.8572], [6.01921, 50.84435], [6.02328, 50.81694], [6.00462, 50.80065], [5.98404, 50.80988], [5.97497, 50.79992], [6.02624, 50.77453], [6.01976, 50.75398], [6.03889, 50.74618], [6.0326, 50.72647], [6.0406, 50.71848], [6.04428, 50.72861], [6.11707, 50.72231], [6.17852, 50.6245], [6.26957, 50.62444], [6.2476, 50.60392], [6.24888, 50.59869], [6.24005, 50.58732], [6.22581, 50.5907], [6.20281, 50.56952], [6.17739, 50.55875], [6.17802, 50.54179], [6.19735, 50.53576], [6.19579, 50.5313], [6.18716, 50.52653], [6.19193, 50.5212], [6.20599, 50.52089], [6.22335, 50.49578], [6.26637, 50.50272], [6.30809, 50.50058], [6.3465, 50.48833], [6.34005, 50.46083], [6.37219, 50.45397], [6.36852, 50.40776], [6.34406, 50.37994], [6.3688, 50.35898], [6.40785, 50.33557], [6.40641, 50.32425], [6.35701, 50.31139], [6.32488, 50.32333], [6.29949, 50.30887], [6.28797, 50.27458], [6.208, 50.25179], [6.16853, 50.2234], [6.18364, 50.20815], [6.18739, 50.1822], [6.14588, 50.17106], [6.14132, 50.14971], [6.15298, 50.14126], [6.1379, 50.12964], [6.12055, 50.09171], [6.11274, 50.05916], [6.13458, 50.04141], [6.13044, 50.02929], [6.14666, 50.02207], [6.13794, 50.01466], [6.13273, 50.02019], [6.1295, 50.01849], [6.13806, 50.01056], [6.14948, 50.00908], [6.14147, 49.99563], [6.1701, 49.98518], [6.16466, 49.97086], [6.17872, 49.9537], [6.18554, 49.95622], [6.18045, 49.96611], [6.19089, 49.96991], [6.19856, 49.95053], [6.22094, 49.94955], [6.22608, 49.929], [6.21882, 49.92403], [6.22926, 49.92096], [6.23496, 49.89972], [6.26146, 49.88203], [6.28874, 49.87592], [6.29692, 49.86685], [6.30963, 49.87021], [6.32303, 49.85133], [6.32098, 49.83728], [6.33585, 49.83785], [6.34267, 49.84974], [6.36576, 49.85032], [6.40022, 49.82029], [6.42521, 49.81591], [6.42905, 49.81091], [6.44131, 49.81443], [6.45425, 49.81164], [6.47111, 49.82263], [6.48718, 49.81267], [6.50647, 49.80916], [6.51215, 49.80124], [6.52121, 49.81338], [6.53122, 49.80666], [6.52169, 49.79787], [6.50534, 49.78952], [6.51669, 49.78336], [6.51056, 49.77515], [6.51828, 49.76855], [6.51646, 49.75961], [6.50174, 49.75292], [6.50193, 49.73291], [6.51805, 49.72425], [6.51397, 49.72058], [6.50261, 49.72718], [6.49535, 49.72645], [6.49694, 49.72205], [6.5042, 49.71808], [6.50647, 49.71353], [6.49785, 49.71118], [6.48014, 49.69767], [6.46048, 49.69092], [6.44654, 49.67799], [6.42937, 49.66857], [6.42726, 49.66078], [6.43768, 49.66021], [6.4413, 49.65722], [6.41861, 49.61723], [6.39822, 49.60081], [6.385, 49.59946], [6.37464, 49.58886], [6.38342, 49.5799], [6.38024, 49.57593], [6.36676, 49.57813], [6.35825, 49.57053], [6.38228, 49.55855], [6.38072, 49.55171], [6.35666, 49.52931], [6.36788, 49.50377], [6.36907, 49.48931], [6.36778, 49.46937], [6.38352, 49.46463], [6.39168, 49.4667], [6.40274, 49.46546], [6.42432, 49.47683], [6.55404, 49.42464], [6.533, 49.40748], [6.60091, 49.36864], [6.58807, 49.35358], [6.572, 49.35027], [6.60186, 49.31055], [6.66583, 49.28065], [6.69274, 49.21661], [6.71843, 49.2208], [6.73256, 49.20486], [6.71137, 49.18808], [6.73765, 49.16375], [6.78265, 49.16793], [6.83385, 49.15162], [6.84703, 49.15734], [6.86225, 49.18185], [6.85016, 49.19354], [6.85119, 49.20038], [6.83555, 49.21249], [6.85939, 49.22376], [6.89298, 49.20863], [6.91875, 49.22261], [6.93831, 49.2223], [6.94028, 49.21641], [6.95963, 49.203], [6.97273, 49.2099], [7.01318, 49.19018], [7.03459, 49.19096], [7.0274, 49.17042], [7.03178, 49.15734], [7.04662, 49.13724], [7.04409, 49.12123], [7.04843, 49.11422], [7.05548, 49.11185], [7.06642, 49.11415], [7.07162, 49.1255], [7.09007, 49.13094], [7.07859, 49.15031], [7.10715, 49.15631], [7.10384, 49.13787], [7.12504, 49.14253], [7.1358, 49.1282], [7.1593, 49.1204], [7.23473, 49.12971], [7.29514, 49.11426], [7.3195, 49.14231], [7.35995, 49.14399], [7.3662, 49.17308], [7.44052, 49.18354], [7.44455, 49.16765], [7.49473, 49.17], [7.49172, 49.13915], [7.53012, 49.09818], [7.56416, 49.08136], [7.62575, 49.07654], [7.63618, 49.05428], [7.75948, 49.04562], [7.79557, 49.06583], [7.86386, 49.03499], [7.93641, 49.05544], [7.97783, 49.03161], [8.14189, 48.97833], [8.22604, 48.97352], [8.20031, 48.95856], [8.19989, 48.95825], [8.12813, 48.87985], [8.10253, 48.81829], [8.06802, 48.78957], [8.0326, 48.79017], [8.01534, 48.76085], [7.96994, 48.75606], [7.96812, 48.72491], [7.89002, 48.66317], [7.84098, 48.64217], [7.80057, 48.5857], [7.80167, 48.54758], [7.80647, 48.51239], [7.76833, 48.48945], [7.73109, 48.39192], [7.74562, 48.32736], [7.69022, 48.30018], [7.6648, 48.22219], [7.57137, 48.12292], [7.56966, 48.03265], [7.62302, 47.97898], [7.55673, 47.87371], [7.52921, 47.77747], [7.54761, 47.72912], [7.53722, 47.71635], [7.51266, 47.70197], [7.51915, 47.68335], [7.52067, 47.66437], [7.53384, 47.65115], [7.5591, 47.63849], [7.57423, 47.61628], [7.58851, 47.60794], [7.59301, 47.60058], [7.58945, 47.59017], [7.60523, 47.58519], [7.60459, 47.57869], [7.61929, 47.57683], [7.64309, 47.59151], [7.64213, 47.5944], [7.64599, 47.59695], [7.67395, 47.59212], [7.68229, 47.59905], [7.69385, 47.60099], [7.68486, 47.59601], [7.67115, 47.5871], [7.68904, 47.57133], [7.67655, 47.56435], [7.63338, 47.56256], [7.65083, 47.54662], [7.66174, 47.54554], [7.6656, 47.53752], [7.68101, 47.53232], [7.69642, 47.53297], [7.71961, 47.54219], [7.75261, 47.54599], [7.79486, 47.55691], [7.81901, 47.58798], [7.84412, 47.5841], [7.88664, 47.58854], [7.90673, 47.57674], [7.91251, 47.55031], [7.94494, 47.54511], [7.95682, 47.55789], [7.97581, 47.55493], [8.00113, 47.55616], [8.02136, 47.55096], [8.04383, 47.55443], [8.06663, 47.56374], [8.08557, 47.55768], [8.10002, 47.56504], [8.10395, 47.57918], [8.11543, 47.5841], [8.13662, 47.58432], [8.13823, 47.59147], [8.14947, 47.59558], [8.1652, 47.5945], [8.19378, 47.61636], [8.20617, 47.62141], [8.22011, 47.6181], [8.22577, 47.60385], [8.23809, 47.61204], [8.25863, 47.61571], [8.26313, 47.6103], [8.2824, 47.61225], [8.29722, 47.60603], [8.29524, 47.5919], [8.30277, 47.58607], [8.32735, 47.57133], [8.35512, 47.57014], [8.38273, 47.56608], [8.39477, 47.57826], [8.43235, 47.56617], [8.49431, 47.58107], [8.48949, 47.588], [8.46637, 47.58389], [8.45578, 47.60121], [8.50747, 47.61897], [8.51686, 47.63476], [8.55756, 47.62394], [8.57586, 47.59537], [8.60348, 47.61204], [8.59545, 47.64298], [8.60701, 47.65271], [8.61471, 47.64514], [8.60412, 47.63735], [8.62049, 47.63757], [8.62884, 47.65098], [8.61113, 47.66332], [8.6052, 47.67258], [8.57683, 47.66158], [8.56141, 47.67088], [8.52801, 47.66059], [8.5322, 47.64687], [8.49656, 47.64709], [8.46605, 47.64103], [8.4667, 47.65747], [8.44711, 47.65379], [8.42264, 47.66667], [8.41346, 47.66676], [8.40473, 47.67499], [8.4211, 47.68407], [8.40569, 47.69855], [8.44807, 47.72426], [8.45771, 47.7493], [8.48868, 47.77215], [8.56814, 47.78001], [8.56415, 47.80633], [8.61657, 47.79998], [8.62408, 47.7626], [8.64425, 47.76398], [8.65292, 47.80066], [8.68022, 47.78599], [8.68985, 47.75686], [8.71778, 47.76571], [8.74251, 47.75168], [8.70543, 47.73121], [8.73671, 47.7169], [8.72617, 47.69651]]]] } },
+    { type: "Feature", properties: { iso1A2: "DG", iso1A3: "DGA", wikidata: "Q184851", nameEn: "Diego Garcia", country: "GB", groups: ["IO", "BOTS", "014", "202", "002", "UN"], isoStatus: "excRes", callingCodes: ["246"] }, geometry: { type: "MultiPolygon", coordinates: [[[[73.14823, -7.76302], [73.09982, -6.07324], [71.43792, -7.73904], [73.14823, -7.76302]]]] } },
+    { type: "Feature", properties: { iso1A2: "DJ", iso1A3: "DJI", iso1N3: "262", wikidata: "Q977", nameEn: "Djibouti", groups: ["014", "202", "002", "UN"], callingCodes: ["253"] }, geometry: { type: "MultiPolygon", coordinates: [[[[43.90659, 12.3823], [43.90659, 12.3823], [43.32909, 12.59711], [43.29075, 12.79154], [42.86195, 12.58747], [42.7996, 12.42629], [42.6957, 12.36201], [42.46941, 12.52661], [42.4037, 12.46478], [41.95461, 11.81157], [41.82878, 11.72361], [41.77727, 11.49902], [41.8096, 11.33606], [41.80056, 10.97127], [42.06302, 10.92599], [42.13691, 10.97586], [42.42669, 10.98493], [42.62989, 11.09711], [42.75111, 11.06992], [42.79037, 10.98493], [42.95776, 10.98533], [43.90659, 12.3823]]]] } },
+    { type: "Feature", properties: { iso1A2: "DK", iso1A3: "DNK", iso1N3: "208", wikidata: "Q756617", nameEn: "Kingdom of Denmark" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "DM", iso1A3: "DMA", iso1N3: "212", wikidata: "Q784", nameEn: "Dominica", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 767"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.32485, 14.91445], [-60.86656, 15.82603], [-61.95646, 15.5094], [-61.32485, 14.91445]]]] } },
+    { type: "Feature", properties: { iso1A2: "DO", iso1A3: "DOM", iso1N3: "214", wikidata: "Q786", nameEn: "Dominican Republic", groups: ["029", "003", "419", "019", "UN"], callingCodes: ["1 809", "1 829", "1 849"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-67.87844, 21.7938], [-72.38946, 20.27111], [-71.77419, 19.73128], [-71.75865, 19.70231], [-71.7429, 19.58445], [-71.71449, 19.55364], [-71.71268, 19.53374], [-71.6802, 19.45008], [-71.69448, 19.37866], [-71.77766, 19.33823], [-71.73229, 19.26686], [-71.62642, 19.21212], [-71.65337, 19.11759], [-71.69938, 19.10916], [-71.71088, 19.08353], [-71.74088, 19.0437], [-71.88102, 18.95007], [-71.77766, 18.95007], [-71.72624, 18.87802], [-71.71885, 18.78423], [-71.82556, 18.62551], [-71.95412, 18.64939], [-72.00201, 18.62312], [-71.88102, 18.50125], [-71.90875, 18.45821], [-71.69952, 18.34101], [-71.78271, 18.18302], [-71.75465, 18.14405], [-71.74994, 18.11115], [-71.73783, 18.07177], [-71.75671, 18.03456], [-72.29523, 17.48026], [-68.39466, 16.14167], [-67.87844, 21.7938]]]] } },
+    { type: "Feature", properties: { iso1A2: "DZ", iso1A3: "DZA", iso1N3: "012", wikidata: "Q262", nameEn: "Algeria", groups: ["015", "002", "UN"], callingCodes: ["213"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.59123, 37.14286], [5.10072, 39.89531], [-2.27707, 35.35051], [-2.21248, 35.08532], [-2.21445, 35.04378], [-2.04734, 34.93218], [-1.97833, 34.93218], [-1.97469, 34.886], [-1.73707, 34.74226], [-1.84569, 34.61907], [-1.69788, 34.48056], [-1.78042, 34.39018], [-1.64666, 34.10405], [-1.73494, 33.71721], [-1.59508, 33.59929], [-1.67067, 33.27084], [-1.46249, 33.0499], [-1.54244, 32.95499], [-1.37794, 32.73628], [-0.9912, 32.52467], [-1.24998, 32.32993], [-1.24453, 32.1917], [-1.15735, 32.12096], [-1.22829, 32.07832], [-2.46166, 32.16603], [-2.93873, 32.06557], [-2.82784, 31.79459], [-3.66314, 31.6339], [-3.66386, 31.39202], [-3.77647, 31.31912], [-3.77103, 31.14984], [-3.54944, 31.0503], [-3.65418, 30.85566], [-3.64735, 30.67539], [-4.31774, 30.53229], [-4.6058, 30.28343], [-5.21671, 29.95253], [-5.58831, 29.48103], [-5.72121, 29.52322], [-5.75616, 29.61407], [-6.69965, 29.51623], [-6.78351, 29.44634], [-6.95824, 29.50924], [-7.61585, 29.36252], [-8.6715, 28.71194], [-8.66879, 27.6666], [-8.66674, 27.31569], [-4.83423, 24.99935], [1.15698, 21.12843], [1.20992, 20.73533], [3.24648, 19.81703], [3.12501, 19.1366], [3.36082, 18.9745], [4.26651, 19.14224], [5.8153, 19.45101], [7.38361, 20.79165], [7.48273, 20.87258], [11.96886, 23.51735], [11.62498, 24.26669], [11.41061, 24.21456], [10.85323, 24.5595], [10.33159, 24.5465], [10.02432, 24.98124], [10.03146, 25.35635], [9.38834, 26.19288], [9.51696, 26.39148], [9.89569, 26.57696], [9.78136, 29.40961], [9.3876, 30.16738], [9.55544, 30.23971], [9.07483, 32.07865], [8.35999, 32.50101], [8.31895, 32.83483], [8.1179, 33.05086], [8.11433, 33.10175], [7.83028, 33.18851], [7.73687, 33.42114], [7.54088, 33.7726], [7.52851, 34.06493], [7.66174, 34.20167], [7.74207, 34.16492], [7.81242, 34.21841], [7.86264, 34.3987], [8.20482, 34.57575], [8.29655, 34.72798], [8.25189, 34.92009], [8.30727, 34.95378], [8.3555, 35.10007], [8.47318, 35.23376], [8.30329, 35.29884], [8.36086, 35.47774], [8.35371, 35.66373], [8.26472, 35.73669], [8.2626, 35.91733], [8.40731, 36.42208], [8.18936, 36.44939], [8.16167, 36.48817], [8.47609, 36.66607], [8.46537, 36.7706], [8.57613, 36.78062], [8.67706, 36.8364], [8.62972, 36.86499], [8.64044, 36.9401], [8.59123, 37.14286]]]] } },
+    { type: "Feature", properties: { iso1A2: "EA", wikidata: "Q28868874", nameEn: "Ceuta, Melilla", country: "ES", level: "territory", isoStatus: "excRes" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "EC", iso1A3: "ECU", iso1N3: "218", wikidata: "Q736", nameEn: "Ecuador" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "EE", iso1A3: "EST", iso1N3: "233", wikidata: "Q191", nameEn: "Estonia", aliases: ["EW"], groups: ["EU", "154", "150", "UN"], callingCodes: ["372"] }, geometry: { type: "MultiPolygon", coordinates: [[[[26.32936, 60.00121], [20.5104, 59.15546], [19.84909, 57.57876], [22.80496, 57.87798], [23.20055, 57.56697], [24.26221, 57.91787], [24.3579, 57.87471], [25.19484, 58.0831], [25.28237, 57.98539], [25.29581, 58.08288], [25.73499, 57.90193], [26.05949, 57.84744], [26.0324, 57.79037], [26.02456, 57.78342], [26.027, 57.78158], [26.0266, 57.77441], [26.02069, 57.77169], [26.02415, 57.76865], [26.03332, 57.7718], [26.0543, 57.76105], [26.08098, 57.76619], [26.2029, 57.7206], [26.1866, 57.6849], [26.29253, 57.59244], [26.46527, 57.56885], [26.54675, 57.51813], [26.90364, 57.62823], [27.34698, 57.52242], [27.31919, 57.57672], [27.40393, 57.62125], [27.3746, 57.66834], [27.52615, 57.72843], [27.50171, 57.78842], [27.56689, 57.83356], [27.78526, 57.83963], [27.81841, 57.89244], [27.67282, 57.92627], [27.62393, 58.09462], [27.48541, 58.22615], [27.55489, 58.39525], [27.36366, 58.78381], [27.74429, 58.98351], [27.80482, 59.1116], [27.87978, 59.18097], [27.90911, 59.24353], [28.00689, 59.28351], [28.14215, 59.28934], [28.19284, 59.35791], [28.20537, 59.36491], [28.21137, 59.38058], [28.19061, 59.39962], [28.04187, 59.47017], [27.85643, 59.58538], [26.90044, 59.63819], [26.32936, 60.00121]]]] } },
+    { type: "Feature", properties: { iso1A2: "EG", iso1A3: "EGY", iso1N3: "818", wikidata: "Q79", nameEn: "Egypt", groups: ["015", "002", "UN"], callingCodes: ["20"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.62659, 31.82938], [26.92891, 33.39516], [24.8458, 31.39877], [25.01077, 30.73861], [24.71117, 30.17441], [24.99968, 29.24574], [24.99885, 21.99535], [33.17563, 22.00405], [34.0765, 22.00501], [37.8565, 22.00903], [34.4454, 27.91479], [34.8812, 29.36878], [34.92298, 29.45305], [34.26742, 31.21998], [34.24012, 31.29591], [34.23572, 31.2966], [34.21853, 31.32363], [34.052, 31.46619], [33.62659, 31.82938]]]] } },
+    { type: "Feature", properties: { iso1A2: "EH", iso1A3: "ESH", iso1N3: "732", wikidata: "Q6250", nameEn: "Western Sahara", groups: ["015", "002"], callingCodes: ["212"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.66879, 27.6666], [-8.77527, 27.66663], [-8.71787, 26.9898], [-9.08698, 26.98639], [-9.56957, 26.90042], [-9.81998, 26.71379], [-10.68417, 26.90984], [-11.35695, 26.8505], [-11.23622, 26.72023], [-11.38635, 26.611], [-11.62052, 26.05229], [-12.06001, 26.04442], [-12.12281, 25.13682], [-12.92147, 24.39502], [-13.00628, 24.01923], [-13.75627, 23.77231], [-14.10361, 22.75501], [-14.1291, 22.41636], [-14.48112, 22.00886], [-14.47329, 21.63839], [-14.78487, 21.36587], [-16.44269, 21.39745], [-16.9978, 21.36239], [-17.02707, 21.34022], [-17.21511, 21.34226], [-17.35589, 20.80492], [-17.0471, 20.76408], [-17.0695, 20.85742], [-17.06781, 20.92697], [-17.0396, 20.9961], [-17.0357, 21.05368], [-16.99806, 21.12142], [-16.95474, 21.33997], [-13.01525, 21.33343], [-13.08438, 22.53866], [-13.15313, 22.75649], [-13.10753, 22.89493], [-13.00412, 23.02297], [-12.5741, 23.28975], [-12.36213, 23.3187], [-12.14969, 23.41935], [-12.00251, 23.4538], [-12.0002, 25.9986], [-8.66721, 25.99918], [-8.66674, 27.31569], [-8.66879, 27.6666]]]] } },
+    { type: "Feature", properties: { iso1A2: "ER", iso1A3: "ERI", iso1N3: "232", wikidata: "Q986", nameEn: "Eritrea", groups: ["014", "202", "002", "UN"], callingCodes: ["291"] }, geometry: { type: "MultiPolygon", coordinates: [[[[40.99158, 15.81743], [39.63762, 18.37348], [38.57727, 17.98125], [38.45916, 17.87167], [38.37133, 17.66269], [38.13362, 17.53906], [37.50967, 17.32199], [37.42694, 17.04041], [36.99777, 17.07172], [36.92193, 16.23451], [36.76371, 15.80831], [36.69761, 15.75323], [36.54276, 15.23478], [36.44337, 15.14963], [36.54376, 14.25597], [36.56536, 14.26177], [36.55659, 14.28237], [36.63364, 14.31172], [36.85787, 14.32201], [37.01622, 14.2561], [37.09486, 14.27155], [37.13206, 14.40746], [37.3106, 14.44657], [37.47319, 14.2149], [37.528, 14.18413], [37.91287, 14.89447], [38.0364, 14.72745], [38.25562, 14.67287], [38.3533, 14.51323], [38.45748, 14.41445], [38.78306, 14.4754], [38.98058, 14.54895], [39.02834, 14.63717], [39.16074, 14.65187], [39.14772, 14.61827], [39.19547, 14.56996], [39.23888, 14.56365], [39.26927, 14.48801], [39.2302, 14.44598], [39.2519, 14.40393], [39.37685, 14.54402], [39.52756, 14.49011], [39.50585, 14.55735], [39.58182, 14.60987], [39.76632, 14.54264], [39.9443, 14.41024], [40.07236, 14.54264], [40.14649, 14.53969], [40.21128, 14.39342], [40.25686, 14.41445], [40.9167, 14.11152], [41.25097, 13.60787], [41.62864, 13.38626], [42.05841, 12.80912], [42.21469, 12.75832], [42.2798, 12.6355], [42.4037, 12.46478], [42.46941, 12.52661], [42.6957, 12.36201], [42.7996, 12.42629], [42.86195, 12.58747], [43.29075, 12.79154], [40.99158, 15.81743]]]] } },
+    { type: "Feature", properties: { iso1A2: "ES", iso1A3: "ESP", iso1N3: "724", wikidata: "Q29", nameEn: "Spain" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "ET", iso1A3: "ETH", iso1N3: "231", wikidata: "Q115", nameEn: "Ethiopia", groups: ["014", "202", "002", "UN"], callingCodes: ["251"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.4037, 12.46478], [42.2798, 12.6355], [42.21469, 12.75832], [42.05841, 12.80912], [41.62864, 13.38626], [41.25097, 13.60787], [40.9167, 14.11152], [40.25686, 14.41445], [40.21128, 14.39342], [40.14649, 14.53969], [40.07236, 14.54264], [39.9443, 14.41024], [39.76632, 14.54264], [39.58182, 14.60987], [39.50585, 14.55735], [39.52756, 14.49011], [39.37685, 14.54402], [39.2519, 14.40393], [39.2302, 14.44598], [39.26927, 14.48801], [39.23888, 14.56365], [39.19547, 14.56996], [39.14772, 14.61827], [39.16074, 14.65187], [39.02834, 14.63717], [38.98058, 14.54895], [38.78306, 14.4754], [38.45748, 14.41445], [38.3533, 14.51323], [38.25562, 14.67287], [38.0364, 14.72745], [37.91287, 14.89447], [37.528, 14.18413], [37.47319, 14.2149], [37.3106, 14.44657], [37.13206, 14.40746], [37.09486, 14.27155], [37.01622, 14.2561], [36.85787, 14.32201], [36.63364, 14.31172], [36.55659, 14.28237], [36.56536, 14.26177], [36.54376, 14.25597], [36.44653, 13.95666], [36.48824, 13.83954], [36.38993, 13.56459], [36.24545, 13.36759], [36.13374, 12.92665], [36.16651, 12.88019], [36.14268, 12.70879], [36.01458, 12.72478], [35.70476, 12.67101], [35.24302, 11.91132], [35.11492, 11.85156], [35.05832, 11.71158], [35.09556, 11.56278], [34.95704, 11.24448], [35.01215, 11.19626], [34.93172, 10.95946], [34.97789, 10.91559], [34.97491, 10.86147], [34.86916, 10.78832], [34.86618, 10.74588], [34.77532, 10.69027], [34.77383, 10.74588], [34.59062, 10.89072], [34.4372, 10.781], [34.2823, 10.53508], [34.34783, 10.23914], [34.32102, 10.11599], [34.22718, 10.02506], [34.20484, 9.9033], [34.13186, 9.7492], [34.08717, 9.55243], [34.10229, 9.50238], [34.14304, 9.04654], [34.14453, 8.60204], [34.01346, 8.50041], [33.89579, 8.4842], [33.87195, 8.41938], [33.71407, 8.3678], [33.66938, 8.44442], [33.54575, 8.47094], [33.3119, 8.45474], [33.19721, 8.40317], [33.1853, 8.29264], [33.18083, 8.13047], [33.08401, 8.05822], [33.0006, 7.90333], [33.04944, 7.78989], [33.24637, 7.77939], [33.32531, 7.71297], [33.44745, 7.7543], [33.71407, 7.65983], [33.87642, 7.5491], [34.02984, 7.36449], [34.03878, 7.27437], [34.01495, 7.25664], [34.19369, 7.12807], [34.19369, 7.04382], [34.35753, 6.91963], [34.47669, 6.91076], [34.53925, 6.82794], [34.53776, 6.74808], [34.65096, 6.72589], [34.77459, 6.5957], [34.87736, 6.60161], [35.01738, 6.46991], [34.96227, 6.26415], [35.00546, 5.89387], [35.12611, 5.68937], [35.13058, 5.62118], [35.31188, 5.50106], [35.29938, 5.34042], [35.50792, 5.42431], [35.8576, 5.33413], [35.81968, 5.10757], [35.82118, 4.77382], [35.9419, 4.61933], [35.95449, 4.53244], [36.03924, 4.44406], [36.84474, 4.44518], [37.07724, 4.33503], [38.14168, 3.62487], [38.45812, 3.60445], [38.52336, 3.62551], [38.91938, 3.51198], [39.07736, 3.5267], [39.19954, 3.47834], [39.49444, 3.45521], [39.51551, 3.40895], [39.55132, 3.39634], [39.58339, 3.47434], [39.76808, 3.67058], [39.86043, 3.86974], [40.77498, 4.27683], [41.1754, 3.94079], [41.89488, 3.97375], [42.07619, 4.17667], [42.55853, 4.20518], [42.84526, 4.28357], [42.97746, 4.44032], [43.04177, 4.57923], [43.40263, 4.79289], [44.02436, 4.9451], [44.98104, 4.91821], [47.97917, 8.00124], [47.92477, 8.00111], [46.99339, 7.9989], [44.19222, 8.93028], [43.32613, 9.59205], [43.23518, 9.84605], [43.0937, 9.90579], [42.87643, 10.18441], [42.69452, 10.62672], [42.95776, 10.98533], [42.79037, 10.98493], [42.75111, 11.06992], [42.62989, 11.09711], [42.42669, 10.98493], [42.13691, 10.97586], [42.06302, 10.92599], [41.80056, 10.97127], [41.8096, 11.33606], [41.77727, 11.49902], [41.82878, 11.72361], [41.95461, 11.81157], [42.4037, 12.46478]]]] } },
+    { type: "Feature", properties: { iso1A2: "EU", iso1A3: "EUE", wikidata: "Q458", nameEn: "European Union", level: "union", isoStatus: "excRes" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "FI", iso1A3: "FIN", iso1N3: "246", wikidata: "Q33", nameEn: "Finland", aliases: ["SF"] }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "FJ", iso1A3: "FJI", iso1N3: "242", wikidata: "Q712", nameEn: "Fiji", groups: ["054", "009", "UN"], driveSide: "left", callingCodes: ["679"] }, geometry: { type: "MultiPolygon", coordinates: [[[[174.245, -23.1974], [179.99999, -22.5], [179.99999, -11.5], [174, -11.5], [174.245, -23.1974]]], [[[-176.76826, -14.95183], [-180, -14.96041], [-180, -22.90585], [-176.74538, -22.89767], [-176.76826, -14.95183]]]] } },
+    { type: "Feature", properties: { iso1A2: "FK", iso1A3: "FLK", iso1N3: "238", wikidata: "Q9648", nameEn: "Falkland Islands", country: "GB", groups: ["BOTS", "005", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["500"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.67376, -55.11859], [-54.56126, -51.26248], [-61.26735, -50.63919], [-63.67376, -55.11859]]]] } },
+    { type: "Feature", properties: { iso1A2: "FM", iso1A3: "FSM", iso1N3: "583", wikidata: "Q702", nameEn: "Federated States of Micronesia", groups: ["057", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["691"] }, geometry: { type: "MultiPolygon", coordinates: [[[[138.20583, 13.3783], [136.27107, 6.73747], [156.88247, -1.39237], [165.19726, 6.22546], [138.20583, 13.3783]]]] } },
+    { type: "Feature", properties: { iso1A2: "FO", iso1A3: "FRO", iso1N3: "234", wikidata: "Q4628", nameEn: "Faroe Islands", country: "DK", groups: ["154", "150", "UN"], callingCodes: ["298"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.51774, 62.35338], [-6.51083, 60.95272], [-5.70102, 62.77194], [-8.51774, 62.35338]]]] } },
+    { type: "Feature", properties: { iso1A2: "FR", iso1A3: "FRA", iso1N3: "250", wikidata: "Q142", nameEn: "France" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "FX", iso1A3: "FXX", iso1N3: "249", wikidata: "Q212429", nameEn: "Metropolitan France", country: "FR", groups: ["EU", "155", "150", "UN"], isoStatus: "excRes", callingCodes: ["33"] }, geometry: { type: "MultiPolygon", coordinates: [[[[2.55904, 51.07014], [2.18458, 51.52087], [1.17405, 50.74239], [-2.02963, 49.91866], [-2.09454, 49.46288], [-1.83944, 49.23037], [-2.00491, 48.86706], [-2.65349, 49.15373], [-6.28985, 48.93406], [-1.81005, 43.59738], [-1.77289, 43.38957], [-1.79319, 43.37497], [-1.78332, 43.36399], [-1.78714, 43.35476], [-1.77068, 43.34396], [-1.75334, 43.34107], [-1.75079, 43.3317], [-1.7397, 43.32979], [-1.73074, 43.29481], [-1.69407, 43.31378], [-1.62481, 43.30726], [-1.63052, 43.28591], [-1.61341, 43.25269], [-1.57674, 43.25269], [-1.55963, 43.28828], [-1.50992, 43.29481], [-1.45289, 43.27049], [-1.40942, 43.27272], [-1.3758, 43.24511], [-1.41562, 43.12815], [-1.47555, 43.08372], [-1.44067, 43.047], [-1.35272, 43.02658], [-1.34419, 43.09665], [-1.32209, 43.1127], [-1.27118, 43.11961], [-1.30052, 43.09581], [-1.30531, 43.06859], [-1.25244, 43.04164], [-1.22881, 43.05534], [-1.10333, 43.0059], [-1.00963, 42.99279], [-0.97133, 42.96239], [-0.81652, 42.95166], [-0.75478, 42.96916], [-0.72037, 42.92541], [-0.73422, 42.91228], [-0.72608, 42.89318], [-0.69837, 42.87945], [-0.67637, 42.88303], [-0.55497, 42.77846], [-0.50863, 42.82713], [-0.44334, 42.79939], [-0.41319, 42.80776], [-0.38833, 42.80132], [-0.3122, 42.84788], [-0.17939, 42.78974], [-0.16141, 42.79535], [-0.10519, 42.72761], [-0.02468, 42.68513], [0.17569, 42.73424], [0.25336, 42.7174], [0.29407, 42.67431], [0.36251, 42.72282], [0.40214, 42.69779], [0.67873, 42.69458], [0.65421, 42.75872], [0.66121, 42.84021], [0.711, 42.86372], [0.93089, 42.79154], [0.96166, 42.80629], [0.98292, 42.78754], [1.0804, 42.78569], [1.15928, 42.71407], [1.35562, 42.71944], [1.44197, 42.60217], [1.47986, 42.61346], [1.46718, 42.63296], [1.48043, 42.65203], [1.50867, 42.64483], [1.55418, 42.65669], [1.60085, 42.62703], [1.63485, 42.62957], [1.6625, 42.61982], [1.68267, 42.62533], [1.73452, 42.61515], [1.72588, 42.59098], [1.7858, 42.57698], [1.73683, 42.55492], [1.72515, 42.50338], [1.76335, 42.48863], [1.83037, 42.48395], [1.88853, 42.4501], [1.93663, 42.45439], [1.94292, 42.44316], [1.94061, 42.43333], [1.94084, 42.43039], [1.9574, 42.42401], [1.96482, 42.37787], [2.00488, 42.35399], [2.06241, 42.35906], [2.11621, 42.38393], [2.12789, 42.41291], [2.16599, 42.42314], [2.20578, 42.41633], [2.25551, 42.43757], [2.38504, 42.39977], [2.43299, 42.39423], [2.43508, 42.37568], [2.48457, 42.33933], [2.54382, 42.33406], [2.55516, 42.35351], [2.57934, 42.35808], [2.6747, 42.33974], [2.65311, 42.38771], [2.72056, 42.42298], [2.75497, 42.42578], [2.77464, 42.41046], [2.84335, 42.45724], [2.85675, 42.45444], [2.86983, 42.46843], [2.88413, 42.45938], [2.92107, 42.4573], [2.94283, 42.48174], [2.96518, 42.46692], [3.03734, 42.47363], [3.08167, 42.42748], [3.10027, 42.42621], [3.11379, 42.43646], [3.17156, 42.43545], [3.75438, 42.33445], [7.60802, 41.05927], [10.09675, 41.44089], [9.56115, 43.20816], [7.50102, 43.51859], [7.42422, 43.72209], [7.40903, 43.7296], [7.41113, 43.73156], [7.41291, 43.73168], [7.41298, 43.73311], [7.41233, 43.73439], [7.42062, 43.73977], [7.42299, 43.74176], [7.42443, 43.74087], [7.42809, 43.74396], [7.43013, 43.74895], [7.43624, 43.75014], [7.43708, 43.75197], [7.4389, 43.75151], [7.4379, 43.74963], [7.47823, 43.73341], [7.53006, 43.78405], [7.50423, 43.84345], [7.49355, 43.86551], [7.51162, 43.88301], [7.56075, 43.89932], [7.56858, 43.94506], [7.60771, 43.95772], [7.65266, 43.9763], [7.66848, 43.99943], [7.6597, 44.03009], [7.72508, 44.07578], [7.66878, 44.12795], [7.68694, 44.17487], [7.63245, 44.17877], [7.62155, 44.14881], [7.36364, 44.11882], [7.34547, 44.14359], [7.27827, 44.1462], [7.16929, 44.20352], [7.00764, 44.23736], [6.98221, 44.28289], [6.89171, 44.36637], [6.88784, 44.42043], [6.94504, 44.43112], [6.86233, 44.49834], [6.85507, 44.53072], [6.96042, 44.62129], [6.95133, 44.66264], [7.00582, 44.69364], [7.07484, 44.68073], [7.00401, 44.78782], [7.02217, 44.82519], [6.93499, 44.8664], [6.90774, 44.84322], [6.75518, 44.89915], [6.74519, 44.93661], [6.74791, 45.01939], [6.66981, 45.02324], [6.62803, 45.11175], [6.7697, 45.16044], [6.85144, 45.13226], [6.96706, 45.20841], [7.07074, 45.21228], [7.13115, 45.25386], [7.10572, 45.32924], [7.18019, 45.40071], [7.00037, 45.509], [6.98948, 45.63869], [6.80785, 45.71864], [6.80785, 45.83265], [6.95315, 45.85163], [7.04151, 45.92435], [7.00946, 45.9944], [6.93862, 46.06502], [6.87868, 46.03855], [6.89321, 46.12548], [6.78968, 46.14058], [6.86052, 46.28512], [6.77152, 46.34784], [6.8024, 46.39171], [6.82312, 46.42661], [6.53358, 46.45431], [6.25432, 46.3632], [6.21981, 46.31304], [6.24826, 46.30175], [6.25137, 46.29014], [6.23775, 46.27822], [6.24952, 46.26255], [6.26749, 46.24745], [6.29474, 46.26221], [6.31041, 46.24417], [6.29663, 46.22688], [6.27694, 46.21566], [6.26007, 46.21165], [6.24821, 46.20531], [6.23913, 46.20511], [6.23544, 46.20714], [6.22175, 46.20045], [6.22222, 46.19888], [6.21844, 46.19837], [6.21603, 46.19507], [6.21273, 46.19409], [6.21114, 46.1927], [6.20539, 46.19163], [6.19807, 46.18369], [6.19552, 46.18401], [6.18707, 46.17999], [6.18871, 46.16644], [6.18116, 46.16187], [6.15305, 46.15194], [6.13397, 46.1406], [6.09926, 46.14373], [6.09199, 46.15191], [6.07491, 46.14879], [6.05203, 46.15191], [6.04564, 46.14031], [6.03614, 46.13712], [6.01791, 46.14228], [5.9871, 46.14499], [5.97893, 46.13303], [5.95781, 46.12925], [5.9641, 46.14412], [5.97508, 46.15863], [5.98188, 46.17392], [5.98846, 46.17046], [5.99573, 46.18587], [5.96515, 46.19638], [5.97542, 46.21525], [6.02461, 46.23313], [6.03342, 46.2383], [6.04602, 46.23127], [6.05029, 46.23518], [6.0633, 46.24583], [6.07072, 46.24085], [6.08563, 46.24651], [6.10071, 46.23772], [6.12446, 46.25059], [6.11926, 46.2634], [6.1013, 46.28512], [6.11697, 46.29547], [6.1198, 46.31157], [6.13876, 46.33844], [6.15738, 46.3491], [6.16987, 46.36759], [6.15985, 46.37721], [6.15016, 46.3778], [6.09926, 46.40768], [6.06407, 46.41676], [6.08427, 46.44305], [6.07269, 46.46244], [6.1567, 46.54402], [6.11084, 46.57649], [6.27135, 46.68251], [6.38351, 46.73171], [6.45209, 46.77502], [6.43216, 46.80336], [6.46456, 46.88865], [6.43341, 46.92703], [6.71531, 47.0494], [6.68823, 47.06616], [6.76788, 47.1208], [6.8489, 47.15933], [6.9508, 47.24338], [6.95108, 47.26428], [6.94316, 47.28747], [7.05305, 47.33304], [7.0564, 47.35134], [7.03125, 47.36996], [6.87959, 47.35335], [6.88542, 47.37262], [6.93744, 47.40714], [6.93953, 47.43388], [7.0024, 47.45264], [6.98425, 47.49432], [7.0231, 47.50522], [7.07425, 47.48863], [7.12781, 47.50371], [7.16249, 47.49025], [7.19583, 47.49455], [7.17026, 47.44312], [7.24669, 47.4205], [7.33526, 47.44186], [7.35603, 47.43432], [7.40308, 47.43638], [7.43088, 47.45846], [7.4462, 47.46264], [7.4583, 47.47216], [7.42923, 47.48628], [7.43356, 47.49712], [7.47534, 47.47932], [7.51076, 47.49651], [7.49804, 47.51798], [7.5229, 47.51644], [7.53199, 47.5284], [7.51904, 47.53515], [7.50588, 47.52856], [7.49691, 47.53821], [7.50873, 47.54546], [7.51723, 47.54578], [7.52831, 47.55347], [7.53634, 47.55553], [7.55652, 47.56779], [7.55689, 47.57232], [7.56548, 47.57617], [7.56684, 47.57785], [7.58386, 47.57536], [7.58945, 47.59017], [7.59301, 47.60058], [7.58851, 47.60794], [7.57423, 47.61628], [7.5591, 47.63849], [7.53384, 47.65115], [7.52067, 47.66437], [7.51915, 47.68335], [7.51266, 47.70197], [7.53722, 47.71635], [7.54761, 47.72912], [7.52921, 47.77747], [7.55673, 47.87371], [7.62302, 47.97898], [7.56966, 48.03265], [7.57137, 48.12292], [7.6648, 48.22219], [7.69022, 48.30018], [7.74562, 48.32736], [7.73109, 48.39192], [7.76833, 48.48945], [7.80647, 48.51239], [7.80167, 48.54758], [7.80057, 48.5857], [7.84098, 48.64217], [7.89002, 48.66317], [7.96812, 48.72491], [7.96994, 48.75606], [8.01534, 48.76085], [8.0326, 48.79017], [8.06802, 48.78957], [8.10253, 48.81829], [8.12813, 48.87985], [8.19989, 48.95825], [8.20031, 48.95856], [8.22604, 48.97352], [8.14189, 48.97833], [7.97783, 49.03161], [7.93641, 49.05544], [7.86386, 49.03499], [7.79557, 49.06583], [7.75948, 49.04562], [7.63618, 49.05428], [7.62575, 49.07654], [7.56416, 49.08136], [7.53012, 49.09818], [7.49172, 49.13915], [7.49473, 49.17], [7.44455, 49.16765], [7.44052, 49.18354], [7.3662, 49.17308], [7.35995, 49.14399], [7.3195, 49.14231], [7.29514, 49.11426], [7.23473, 49.12971], [7.1593, 49.1204], [7.1358, 49.1282], [7.12504, 49.14253], [7.10384, 49.13787], [7.10715, 49.15631], [7.07859, 49.15031], [7.09007, 49.13094], [7.07162, 49.1255], [7.06642, 49.11415], [7.05548, 49.11185], [7.04843, 49.11422], [7.04409, 49.12123], [7.04662, 49.13724], [7.03178, 49.15734], [7.0274, 49.17042], [7.03459, 49.19096], [7.01318, 49.19018], [6.97273, 49.2099], [6.95963, 49.203], [6.94028, 49.21641], [6.93831, 49.2223], [6.91875, 49.22261], [6.89298, 49.20863], [6.85939, 49.22376], [6.83555, 49.21249], [6.85119, 49.20038], [6.85016, 49.19354], [6.86225, 49.18185], [6.84703, 49.15734], [6.83385, 49.15162], [6.78265, 49.16793], [6.73765, 49.16375], [6.71137, 49.18808], [6.73256, 49.20486], [6.71843, 49.2208], [6.69274, 49.21661], [6.66583, 49.28065], [6.60186, 49.31055], [6.572, 49.35027], [6.58807, 49.35358], [6.60091, 49.36864], [6.533, 49.40748], [6.55404, 49.42464], [6.42432, 49.47683], [6.40274, 49.46546], [6.39168, 49.4667], [6.38352, 49.46463], [6.36778, 49.46937], [6.3687, 49.4593], [6.28818, 49.48465], [6.27875, 49.503], [6.25029, 49.50609], [6.2409, 49.51408], [6.19543, 49.50536], [6.17386, 49.50934], [6.15366, 49.50226], [6.16115, 49.49297], [6.14321, 49.48796], [6.12814, 49.49365], [6.12346, 49.4735], [6.10325, 49.4707], [6.09845, 49.46351], [6.10072, 49.45268], [6.08373, 49.45594], [6.07887, 49.46399], [6.05553, 49.46663], [6.04176, 49.44801], [6.02743, 49.44845], [6.02648, 49.45451], [5.97693, 49.45513], [5.96876, 49.49053], [5.94224, 49.49608], [5.94128, 49.50034], [5.86571, 49.50015], [5.83389, 49.52152], [5.83467, 49.52717], [5.84466, 49.53027], [5.83648, 49.5425], [5.81664, 49.53775], [5.80871, 49.5425], [5.81838, 49.54777], [5.79195, 49.55228], [5.77435, 49.56298], [5.7577, 49.55915], [5.75649, 49.54321], [5.64505, 49.55146], [5.60909, 49.51228], [5.55001, 49.52729], [5.46541, 49.49825], [5.46734, 49.52648], [5.43713, 49.5707], [5.3974, 49.61596], [5.34837, 49.62889], [5.33851, 49.61599], [5.3137, 49.61225], [5.30214, 49.63055], [5.33039, 49.6555], [5.31465, 49.66846], [5.26232, 49.69456], [5.14545, 49.70287], [5.09249, 49.76193], [4.96714, 49.79872], [4.85464, 49.78995], [4.86965, 49.82271], [4.85134, 49.86457], [4.88529, 49.9236], [4.78827, 49.95609], [4.8382, 50.06738], [4.88602, 50.15182], [4.83279, 50.15331], [4.82438, 50.16878], [4.75237, 50.11314], [4.70064, 50.09384], [4.68695, 49.99685], [4.5414, 49.96911], [4.51098, 49.94659], [4.43488, 49.94122], [4.35051, 49.95315], [4.31963, 49.97043], [4.20532, 49.95803], [4.14239, 49.98034], [4.13508, 50.01976], [4.16294, 50.04719], [4.23101, 50.06945], [4.20147, 50.13535], [4.13561, 50.13078], [4.16014, 50.19239], [4.15524, 50.21103], [4.21945, 50.25539], [4.20651, 50.27333], [4.17861, 50.27443], [4.17347, 50.28838], [4.15524, 50.2833], [4.16808, 50.25786], [4.13665, 50.25609], [4.11954, 50.30425], [4.10957, 50.30234], [4.10237, 50.31247], [4.0689, 50.3254], [4.0268, 50.35793], [3.96771, 50.34989], [3.90781, 50.32814], [3.84314, 50.35219], [3.73911, 50.34809], [3.70987, 50.3191], [3.71009, 50.30305], [3.66976, 50.34563], [3.65709, 50.36873], [3.67262, 50.38663], [3.67494, 50.40239], [3.66153, 50.45165], [3.64426, 50.46275], [3.61014, 50.49568], [3.58361, 50.49049], [3.5683, 50.50192], [3.49509, 50.48885], [3.51564, 50.5256], [3.47385, 50.53397], [3.44629, 50.51009], [3.37693, 50.49538], [3.28575, 50.52724], [3.2729, 50.60718], [3.23951, 50.6585], [3.264, 50.67668], [3.2536, 50.68977], [3.26141, 50.69151], [3.26063, 50.70086], [3.24593, 50.71389], [3.22042, 50.71019], [3.20845, 50.71662], [3.19017, 50.72569], [3.20064, 50.73547], [3.18811, 50.74025], [3.18339, 50.74981], [3.16476, 50.76843], [3.15017, 50.79031], [3.1257, 50.78603], [3.11987, 50.79188], [3.11206, 50.79416], [3.10614, 50.78303], [3.09163, 50.77717], [3.04314, 50.77674], [3.00537, 50.76588], [2.96778, 50.75242], [2.95019, 50.75138], [2.90873, 50.702], [2.91036, 50.6939], [2.90069, 50.69263], [2.88504, 50.70656], [2.87937, 50.70298], [2.86985, 50.7033], [2.8483, 50.72276], [2.81056, 50.71773], [2.71165, 50.81295], [2.63331, 50.81457], [2.59093, 50.91751], [2.63074, 50.94746], [2.57551, 51.00326], [2.55904, 51.07014]], [[1.99838, 42.44682], [1.98378, 42.44697], [1.96125, 42.45364], [1.95606, 42.45785], [1.96215, 42.47854], [1.97003, 42.48081], [1.97227, 42.48487], [1.97697, 42.48568], [1.98022, 42.49569], [1.98916, 42.49351], [1.99766, 42.4858], [1.98579, 42.47486], [1.99216, 42.46208], [2.01564, 42.45171], [1.99838, 42.44682]]]] } },
+    { type: "Feature", properties: { iso1A2: "GA", iso1A3: "GAB", iso1N3: "266", wikidata: "Q1000", nameEn: "Gabon", groups: ["017", "202", "002", "UN"], callingCodes: ["241"] }, geometry: { type: "MultiPolygon", coordinates: [[[[13.29457, 2.16106], [13.28534, 2.25716], [11.37116, 2.29975], [11.3561, 2.17217], [11.35307, 1.00251], [9.79648, 1.0019], [9.75065, 1.06753], [9.66433, 1.06723], [7.24416, -0.64092], [10.75913, -4.39519], [11.12647, -3.94169], [11.22301, -3.69888], [11.48764, -3.51089], [11.57949, -3.52798], [11.68608, -3.68942], [11.87083, -3.71571], [11.92719, -3.62768], [11.8318, -3.5812], [11.96554, -3.30267], [11.70227, -3.17465], [11.70558, -3.0773], [11.80365, -3.00424], [11.64798, -2.81146], [11.5359, -2.85654], [11.64487, -2.61865], [11.57637, -2.33379], [11.74605, -2.39936], [11.96866, -2.33559], [12.04895, -2.41704], [12.47925, -2.32626], [12.44656, -1.92025], [12.61312, -1.8129], [12.82172, -1.91091], [13.02759, -2.33098], [13.47977, -2.43224], [13.75884, -2.09293], [13.92073, -2.35581], [13.85846, -2.46935], [14.10442, -2.49268], [14.23829, -2.33715], [14.16202, -2.23916], [14.23518, -2.15671], [14.25932, -1.97624], [14.41838, -1.89412], [14.52569, -0.57818], [14.41887, -0.44799], [14.2165, -0.38261], [14.06862, -0.20826], [13.90632, -0.2287], [13.88648, 0.26652], [14.10909, 0.58563], [14.26066, 0.57255], [14.48179, 0.9152], [14.25186, 1.39842], [13.89582, 1.4261], [13.15519, 1.23368], [13.25447, 1.32339], [13.13461, 1.57238], [13.29457, 2.16106]]]] } },
+    { type: "Feature", properties: { iso1A2: "GB", iso1A3: "GBR", iso1N3: "826", wikidata: "Q145", ccTLD: ".uk", nameEn: "United Kingdom", aliases: ["UK"] }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "GD", iso1A3: "GRD", iso1N3: "308", wikidata: "Q769", nameEn: "Grenada", aliases: ["WG"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 473"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.64026, 12.69984], [-61.77886, 11.36496], [-59.94058, 12.34011], [-62.64026, 12.69984]]]] } },
+    { type: "Feature", properties: { iso1A2: "GE", iso1A3: "GEO", iso1N3: "268", wikidata: "Q230", nameEn: "Georgia", groups: ["145", "142", "UN"], callingCodes: ["995"] }, geometry: { type: "MultiPolygon", coordinates: [[[[46.42738, 41.91323], [45.61676, 42.20768], [45.78692, 42.48358], [45.36501, 42.55268], [45.15318, 42.70598], [44.88754, 42.74934], [44.80941, 42.61277], [44.70002, 42.74679], [44.54202, 42.75699], [43.95517, 42.55396], [43.73119, 42.62043], [43.81453, 42.74297], [43.0419, 43.02413], [43.03322, 43.08883], [42.75889, 43.19651], [42.66667, 43.13917], [42.40563, 43.23226], [41.64935, 43.22331], [40.65957, 43.56212], [40.10657, 43.57344], [40.04445, 43.47776], [40.03312, 43.44262], [40.01007, 43.42411], [40.01552, 43.42025], [40.00853, 43.40578], [40.0078, 43.38551], [39.81147, 43.06294], [40.89217, 41.72528], [41.54366, 41.52185], [41.7148, 41.4932], [41.7124, 41.47417], [41.81939, 41.43621], [41.95134, 41.52466], [42.26387, 41.49346], [42.51772, 41.43606], [42.59202, 41.58183], [42.72794, 41.59714], [42.84471, 41.58912], [42.78995, 41.50126], [42.84899, 41.47265], [42.8785, 41.50516], [43.02956, 41.37891], [43.21707, 41.30331], [43.13373, 41.25503], [43.1945, 41.25242], [43.23096, 41.17536], [43.36118, 41.2028], [43.44973, 41.17666], [43.4717, 41.12611], [43.67712, 41.13398], [43.74717, 41.1117], [43.84835, 41.16329], [44.16591, 41.19141], [44.18148, 41.24644], [44.32139, 41.2079], [44.34337, 41.20312], [44.34417, 41.2382], [44.46791, 41.18204], [44.59322, 41.1933], [44.61462, 41.24018], [44.72814, 41.20338], [44.82084, 41.21513], [44.87887, 41.20195], [44.89911, 41.21366], [44.84358, 41.23088], [44.81749, 41.23488], [44.80053, 41.25949], [44.81437, 41.30371], [44.93493, 41.25685], [45.0133, 41.29747], [45.09867, 41.34065], [45.1797, 41.42231], [45.26285, 41.46433], [45.31352, 41.47168], [45.4006, 41.42402], [45.45973, 41.45898], [45.68389, 41.3539], [45.71035, 41.36208], [45.75705, 41.35157], [45.69946, 41.29545], [45.80842, 41.2229], [45.95786, 41.17956], [46.13221, 41.19479], [46.27698, 41.19011], [46.37661, 41.10805], [46.456, 41.09984], [46.48558, 41.0576], [46.55096, 41.1104], [46.63969, 41.09515], [46.66148, 41.20533], [46.72375, 41.28609], [46.63658, 41.37727], [46.4669, 41.43331], [46.40307, 41.48464], [46.33925, 41.4963], [46.29794, 41.5724], [46.34126, 41.57454], [46.34039, 41.5947], [46.3253, 41.60912], [46.28182, 41.60089], [46.26531, 41.63339], [46.24429, 41.59883], [46.19759, 41.62327], [46.17891, 41.72094], [46.20538, 41.77205], [46.23962, 41.75811], [46.30863, 41.79133], [46.3984, 41.84399], [46.42738, 41.91323]]]] } },
+    { type: "Feature", properties: { iso1A2: "GF", iso1A3: "GUF", iso1N3: "254", wikidata: "Q3769", nameEn: "French Guiana", country: "FR", groups: ["Q3320166", "EU", "005", "419", "019", "UN"], callingCodes: ["594"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-51.35485, 4.8383], [-53.7094, 6.2264], [-54.01074, 5.68785], [-54.01877, 5.52789], [-54.26916, 5.26909], [-54.4717, 4.91964], [-54.38444, 4.13222], [-54.19367, 3.84387], [-54.05128, 3.63557], [-53.98914, 3.627], [-53.9849, 3.58697], [-54.28534, 2.67798], [-54.42864, 2.42442], [-54.6084, 2.32856], [-54.16286, 2.10779], [-53.78743, 2.34412], [-52.96539, 2.1881], [-52.6906, 2.37298], [-52.31787, 3.17896], [-51.85573, 3.83427], [-51.82312, 3.85825], [-51.79599, 3.89336], [-51.61983, 4.14596], [-51.63798, 4.51394], [-51.35485, 4.8383]]]] } },
+    { type: "Feature", properties: { iso1A2: "GG", iso1A3: "GGY", iso1N3: "831", wikidata: "Q25230", nameEn: "Bailiwick of Guernsey", country: "GB" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "GH", iso1A3: "GHA", iso1N3: "288", wikidata: "Q117", nameEn: "Ghana", groups: ["011", "202", "002", "UN"], callingCodes: ["233"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-0.13493, 11.14075], [-0.27374, 11.17157], [-0.28566, 11.12713], [-0.35955, 11.07801], [-0.38219, 11.12596], [-0.42391, 11.11661], [-0.44298, 11.04292], [-0.61937, 10.91305], [-0.67143, 10.99811], [-2.83373, 11.0067], [-2.94232, 10.64281], [-2.83108, 10.40252], [-2.74174, 9.83172], [-2.76534, 9.56589], [-2.68802, 9.49343], [-2.69814, 9.22717], [-2.77799, 9.04949], [-2.66357, 9.01771], [-2.58243, 8.7789], [-2.49037, 8.20872], [-2.62901, 8.11495], [-2.61232, 8.02645], [-2.67787, 8.02055], [-2.74819, 7.92613], [-2.78395, 7.94974], [-2.79467, 7.86002], [-2.92339, 7.60847], [-2.97822, 7.27165], [-2.95438, 7.23737], [-3.23327, 6.81744], [-3.21954, 6.74407], [-3.25999, 6.62521], [-3.01896, 5.71697], [-2.95323, 5.71865], [-2.96671, 5.6415], [-2.93132, 5.62137], [-2.85378, 5.65156], [-2.76614, 5.60963], [-2.72737, 5.34789], [-2.77625, 5.34621], [-2.73074, 5.1364], [-2.75502, 5.10657], [-2.95261, 5.12477], [-2.96554, 5.10397], [-3.063, 5.13665], [-3.11073, 5.12675], [-3.10675, 5.08515], [-3.34019, 4.17519], [1.07031, 5.15655], [1.27574, 5.93551], [1.19771, 6.11522], [1.19966, 6.17069], [1.09187, 6.17074], [1.05969, 6.22998], [1.03108, 6.24064], [0.99652, 6.33779], [0.89283, 6.33779], [0.71048, 6.53083], [0.74862, 6.56517], [0.63659, 6.63857], [0.6497, 6.73682], [0.58176, 6.76049], [0.57406, 6.80348], [0.52853, 6.82921], [0.56508, 6.92971], [0.52098, 6.94391], [0.52217, 6.9723], [0.59606, 7.01252], [0.65327, 7.31643], [0.62943, 7.41099], [0.57223, 7.39326], [0.52455, 7.45354], [0.51979, 7.58706], [0.58295, 7.62368], [0.62943, 7.85751], [0.58891, 8.12779], [0.6056, 8.13959], [0.61156, 8.18324], [0.5913, 8.19622], [0.63897, 8.25873], [0.73432, 8.29529], [0.64731, 8.48866], [0.47211, 8.59945], [0.37319, 8.75262], [0.52455, 8.87746], [0.45424, 9.04581], [0.56388, 9.40697], [0.49118, 9.48339], [0.36485, 9.49749], [0.33148, 9.44812], [0.25758, 9.42696], [0.2254, 9.47869], [0.31241, 9.50337], [0.30406, 9.521], [0.2409, 9.52335], [0.23851, 9.57389], [0.38153, 9.58682], [0.36008, 9.6256], [0.29334, 9.59387], [0.26712, 9.66437], [0.28261, 9.69022], [0.32313, 9.6491], [0.34816, 9.66907], [0.34816, 9.71607], [0.32075, 9.72781], [0.36366, 10.03309], [0.41252, 10.02018], [0.41371, 10.06361], [0.35293, 10.09412], [0.39584, 10.31112], [0.33028, 10.30408], [0.29453, 10.41546], [0.18846, 10.4096], [0.12886, 10.53149], [-0.05945, 10.63458], [-0.09141, 10.7147], [-0.07327, 10.71845], [-0.07183, 10.76794], [-0.0228, 10.81916], [-0.02685, 10.8783], [-908e-5, 10.91644], [-63e-4, 10.96417], [0.03355, 10.9807], [0.02395, 11.06229], [342e-5, 11.08317], [-514e-5, 11.10763], [-0.0275, 11.11202], [-0.05733, 11.08628], [-0.14462, 11.10811], [-0.13493, 11.14075]]]] } },
+    { type: "Feature", properties: { iso1A2: "GI", iso1A3: "GIB", iso1N3: "292", wikidata: "Q1410", nameEn: "Gibraltar", country: "GB", groups: ["Q12837", "BOTS", "039", "150", "UN"], callingCodes: ["350"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-5.34064, 36.03744], [-5.27801, 36.14942], [-5.33822, 36.15272], [-5.34536, 36.15501], [-5.40526, 36.15488], [-5.34064, 36.03744]]]] } },
+    { type: "Feature", properties: { iso1A2: "GL", iso1A3: "GRL", iso1N3: "304", wikidata: "Q223", nameEn: "Greenland", country: "DK", groups: ["Q1451600", "021", "003", "019", "UN"], callingCodes: ["299"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-49.33696, 84.57952], [-68.21821, 80.48551], [-77.52957, 77.23408], [-46.37635, 57.3249], [-9.68082, 72.73731], [-5.7106, 84.28058], [-49.33696, 84.57952]]]] } },
+    { type: "Feature", properties: { iso1A2: "GM", iso1A3: "GMB", iso1N3: "270", wikidata: "Q1005", nameEn: "The Gambia", groups: ["011", "202", "002", "UN"], callingCodes: ["220"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-15.14917, 13.57989], [-14.36795, 13.23033], [-13.79409, 13.34472], [-13.8955, 13.59126], [-14.34721, 13.46578], [-14.93719, 13.80173], [-15.36504, 13.79313], [-15.47902, 13.58758], [-17.43598, 13.59273], [-17.43966, 13.04579], [-16.74676, 13.06025], [-16.69343, 13.16791], [-15.80355, 13.16729], [-15.80478, 13.34832], [-15.26908, 13.37768], [-15.14917, 13.57989]]]] } },
+    { type: "Feature", properties: { iso1A2: "GN", iso1A3: "GIN", iso1N3: "324", wikidata: "Q1006", nameEn: "Guinea", groups: ["011", "202", "002", "UN"], callingCodes: ["224"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-11.37536, 12.40788], [-11.46267, 12.44559], [-11.91331, 12.42008], [-12.35415, 12.32758], [-12.87336, 12.51892], [-13.06603, 12.49342], [-13.05296, 12.64003], [-13.70523, 12.68013], [-13.7039, 12.60313], [-13.65089, 12.49515], [-13.64168, 12.42764], [-13.70851, 12.24978], [-13.92745, 12.24077], [-13.94589, 12.16869], [-13.7039, 12.00869], [-13.7039, 11.70195], [-14.09799, 11.63649], [-14.26623, 11.67486], [-14.31513, 11.60713], [-14.51173, 11.49708], [-14.66677, 11.51188], [-14.77786, 11.36323], [-14.95993, 10.99244], [-15.07174, 10.89557], [-15.96748, 10.162], [-14.36218, 8.64107], [-13.29911, 9.04245], [-13.18586, 9.0925], [-13.08953, 9.0409], [-12.94095, 9.26335], [-12.76788, 9.3133], [-12.47254, 9.86834], [-12.24262, 9.92386], [-12.12634, 9.87203], [-11.91023, 9.93927], [-11.89624, 9.99763], [-11.2118, 10.00098], [-10.6534, 9.29919], [-10.74484, 9.07998], [-10.5783, 9.06386], [-10.56197, 8.81225], [-10.47707, 8.67669], [-10.61422, 8.5314], [-10.70565, 8.29235], [-10.63934, 8.35326], [-10.54891, 8.31174], [-10.37257, 8.48941], [-10.27575, 8.48711], [-10.203, 8.47991], [-10.14579, 8.52665], [-10.05375, 8.50697], [-10.05873, 8.42578], [-9.77763, 8.54633], [-9.47415, 8.35195], [-9.50898, 8.18455], [-9.41445, 8.02448], [-9.44928, 7.9284], [-9.35724, 7.74111], [-9.37465, 7.62032], [-9.48161, 7.37122], [-9.41943, 7.41809], [-9.305, 7.42056], [-9.20798, 7.38109], [-9.18311, 7.30461], [-9.09107, 7.1985], [-8.93435, 7.2824], [-8.85724, 7.26019], [-8.8448, 7.35149], [-8.72789, 7.51429], [-8.67814, 7.69428], [-8.55874, 7.70167], [-8.55874, 7.62525], [-8.47114, 7.55676], [-8.4003, 7.6285], [-8.21374, 7.54466], [-8.09931, 7.78626], [-8.13414, 7.87991], [-8.06449, 8.04989], [-7.94695, 8.00925], [-7.99919, 8.11023], [-7.98675, 8.20134], [-8.062, 8.16071], [-8.2411, 8.24196], [-8.22991, 8.48438], [-7.92518, 8.50652], [-7.65653, 8.36873], [-7.69882, 8.66148], [-7.95503, 8.81146], [-7.92518, 8.99332], [-7.73862, 9.08422], [-7.90777, 9.20456], [-7.85056, 9.41812], [-8.03463, 9.39604], [-8.14657, 9.55062], [-8.09434, 9.86936], [-8.15652, 9.94288], [-8.11921, 10.04577], [-8.01225, 10.1021], [-7.97971, 10.17117], [-7.9578, 10.2703], [-8.10207, 10.44649], [-8.22711, 10.41722], [-8.32614, 10.69273], [-8.2667, 10.91762], [-8.35083, 11.06234], [-8.66923, 10.99397], [-8.40058, 11.37466], [-8.80854, 11.66715], [-8.94784, 12.34842], [-9.13689, 12.50875], [-9.38067, 12.48446], [-9.32097, 12.29009], [-9.63938, 12.18312], [-9.714, 12.0226], [-10.30604, 12.24634], [-10.71897, 11.91552], [-10.80355, 12.1053], [-10.99758, 12.24634], [-11.24136, 12.01286], [-11.50006, 12.17826], [-11.37536, 12.40788]]]] } },
+    { type: "Feature", properties: { iso1A2: "GP", iso1A3: "GLP", iso1N3: "312", wikidata: "Q17012", nameEn: "Guadeloupe", country: "FR", groups: ["Q3320166", "EU", "029", "003", "419", "019", "UN"], callingCodes: ["590"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-60.03183, 16.1129], [-61.60296, 16.73066], [-63.00549, 15.26166], [-60.03183, 16.1129]]]] } },
+    { type: "Feature", properties: { iso1A2: "GQ", iso1A3: "GNQ", iso1N3: "226", wikidata: "Q983", nameEn: "Equatorial Guinea", groups: ["017", "202", "002", "UN"], callingCodes: ["240"] }, geometry: { type: "MultiPolygon", coordinates: [[[[9.22018, 3.72052], [8.34397, 4.30689], [7.71762, 0.6674], [3.35016, -3.29031], [9.66433, 1.06723], [9.75065, 1.06753], [9.79648, 1.0019], [11.35307, 1.00251], [11.3561, 2.17217], [9.991, 2.16561], [9.90749, 2.20049], [9.89012, 2.20457], [9.84716, 2.24676], [9.83238, 2.29079], [9.83754, 2.32428], [9.82123, 2.35097], [9.81162, 2.33797], [9.22018, 3.72052]]]] } },
+    { type: "Feature", properties: { iso1A2: "GR", iso1A3: "GRC", iso1N3: "300", wikidata: "Q41", nameEn: "Greece", aliases: ["EL"], groups: ["EU", "039", "150", "UN"], callingCodes: ["30"] }, geometry: { type: "MultiPolygon", coordinates: [[[[26.03489, 40.73051], [26.0754, 40.72772], [26.08638, 40.73214], [26.12495, 40.74283], [26.12854, 40.77339], [26.15685, 40.80709], [26.21351, 40.83298], [26.20856, 40.86048], [26.26169, 40.9168], [26.29441, 40.89119], [26.28623, 40.93005], [26.32259, 40.94042], [26.35894, 40.94292], [26.33297, 40.98388], [26.3606, 41.02027], [26.31928, 41.07386], [26.32259, 41.24929], [26.39861, 41.25053], [26.5209, 41.33993], [26.5837, 41.32131], [26.62997, 41.34613], [26.61767, 41.42281], [26.59742, 41.48058], [26.59196, 41.60491], [26.5209, 41.62592], [26.47958, 41.67037], [26.35957, 41.71149], [26.30255, 41.70925], [26.2654, 41.71544], [26.22888, 41.74139], [26.21325, 41.73223], [26.16841, 41.74858], [26.06148, 41.70345], [26.07083, 41.64584], [26.15146, 41.60828], [26.14328, 41.55496], [26.17951, 41.55409], [26.176, 41.50072], [26.14796, 41.47533], [26.20288, 41.43943], [26.16548, 41.42278], [26.12926, 41.35878], [25.87919, 41.30526], [25.8266, 41.34563], [25.70507, 41.29209], [25.66183, 41.31316], [25.61042, 41.30614], [25.55082, 41.31667], [25.52394, 41.2798], [25.48187, 41.28506], [25.28322, 41.23411], [25.11611, 41.34212], [24.942, 41.38685], [24.90928, 41.40876], [24.86136, 41.39298], [24.82514, 41.4035], [24.8041, 41.34913], [24.71529, 41.41928], [24.61129, 41.42278], [24.52599, 41.56808], [24.30513, 41.51297], [24.27124, 41.57682], [24.18126, 41.51735], [24.10063, 41.54796], [24.06323, 41.53222], [24.06908, 41.46132], [23.96975, 41.44118], [23.91483, 41.47971], [23.89613, 41.45257], [23.80148, 41.43943], [23.76525, 41.40175], [23.67644, 41.41139], [23.63203, 41.37632], [23.52453, 41.40262], [23.40416, 41.39999], [23.33639, 41.36317], [23.31301, 41.40525], [23.22771, 41.37106], [23.21953, 41.33773], [23.1833, 41.31755], [22.93334, 41.34104], [22.81199, 41.3398], [22.76408, 41.32225], [22.74538, 41.16321], [22.71266, 41.13945], [22.65306, 41.18168], [22.62852, 41.14385], [22.58295, 41.11568], [22.5549, 41.13065], [22.42285, 41.11921], [22.26744, 41.16409], [22.17629, 41.15969], [22.1424, 41.12449], [22.06527, 41.15617], [21.90869, 41.09191], [21.91102, 41.04786], [21.7556, 40.92525], [21.69601, 40.9429], [21.57448, 40.86076], [21.53007, 40.90759], [21.41555, 40.9173], [21.35595, 40.87578], [21.25779, 40.86165], [21.21105, 40.8855], [21.15262, 40.85546], [20.97887, 40.85475], [20.98396, 40.79109], [20.95752, 40.76982], [20.98134, 40.76046], [21.05833, 40.66586], [21.03932, 40.56299], [20.96908, 40.51526], [20.94925, 40.46625], [20.83688, 40.47882], [20.7906, 40.42726], [20.78234, 40.35803], [20.71789, 40.27739], [20.67162, 40.09433], [20.62566, 40.0897], [20.61081, 40.07866], [20.55593, 40.06524], [20.51297, 40.08168], [20.48487, 40.06271], [20.42373, 40.06777], [20.37911, 39.99058], [20.31135, 39.99438], [20.41546, 39.82832], [20.41475, 39.81437], [20.38572, 39.78516], [20.30804, 39.81563], [20.29152, 39.80421], [20.31961, 39.72799], [20.27412, 39.69884], [20.22707, 39.67459], [20.22376, 39.64532], [20.15988, 39.652], [20.12956, 39.65805], [20.05189, 39.69112], [20.00957, 39.69227], [19.98042, 39.6504], [19.92466, 39.69533], [19.97622, 39.78684], [19.95905, 39.82857], [19.0384, 40.35325], [19.20409, 39.7532], [22.5213, 33.45682], [29.73302, 35.92555], [29.69611, 36.10365], [29.61805, 36.14179], [29.61002, 36.1731], [29.48192, 36.18377], [29.30783, 36.01033], [28.23708, 36.56812], [27.95037, 36.46155], [27.89482, 36.69898], [27.46117, 36.53789], [27.24613, 36.71622], [27.45627, 36.9008], [27.20312, 36.94571], [27.14757, 37.32], [26.95583, 37.64989], [26.99377, 37.69034], [27.16428, 37.72343], [27.05537, 37.9131], [26.21136, 38.17558], [26.24183, 38.44695], [26.32173, 38.48731], [26.21136, 38.65436], [26.61814, 38.81372], [26.70773, 39.0312], [26.43357, 39.43096], [25.94257, 39.39358], [25.61285, 40.17161], [26.04292, 40.3958], [25.94795, 40.72797], [26.03489, 40.73051]]]] } },
+    { type: "Feature", properties: { iso1A2: "GS", iso1A3: "SGS", iso1N3: "239", wikidata: "Q35086", nameEn: "South Georgia and South Sandwich Islands", country: "GB", groups: ["BOTS", "005", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["500"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-35.26394, -43.68272], [-53.39656, -59.87088], [-22.31757, -59.85974], [-35.26394, -43.68272]]]] } },
+    { type: "Feature", properties: { iso1A2: "GT", iso1A3: "GTM", iso1N3: "320", wikidata: "Q774", nameEn: "Guatemala", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["502"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-89.14985, 17.81563], [-90.98678, 17.81655], [-90.99199, 17.25192], [-91.43809, 17.25373], [-91.04436, 16.92175], [-90.69064, 16.70697], [-90.61212, 16.49832], [-90.40499, 16.40524], [-90.44567, 16.07573], [-91.73182, 16.07371], [-92.20983, 15.26077], [-92.0621, 15.07406], [-92.1454, 14.98143], [-92.1423, 14.88647], [-92.18161, 14.84147], [-92.1454, 14.6804], [-92.2261, 14.53423], [-92.37213, 14.39277], [-90.55276, 12.8866], [-90.11344, 13.73679], [-90.10505, 13.85104], [-89.88937, 14.0396], [-89.81807, 14.07073], [-89.76103, 14.02923], [-89.73251, 14.04133], [-89.75569, 14.07073], [-89.70756, 14.1537], [-89.61844, 14.21937], [-89.52397, 14.22628], [-89.50614, 14.26084], [-89.58814, 14.33165], [-89.57441, 14.41637], [-89.39028, 14.44561], [-89.34776, 14.43013], [-89.35189, 14.47553], [-89.23719, 14.58046], [-89.15653, 14.57802], [-89.13132, 14.71582], [-89.23467, 14.85596], [-89.15149, 14.97775], [-89.18048, 14.99967], [-89.15149, 15.07392], [-88.97343, 15.14039], [-88.32467, 15.63665], [-88.31459, 15.66942], [-88.24022, 15.69247], [-88.22552, 15.72294], [-88.20359, 16.03858], [-88.40779, 16.09624], [-88.95358, 15.88698], [-89.02415, 15.9063], [-89.17418, 15.90898], [-89.22683, 15.88619], [-89.15025, 17.04813], [-89.14985, 17.81563]]]] } },
+    { type: "Feature", properties: { iso1A2: "GU", iso1A3: "GUM", iso1N3: "316", wikidata: "Q16635", nameEn: "Guam", aliases: ["US-GU"], country: "US", groups: ["Q1352230", "Q153732", "057", "009", "UN"], roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 671"] }, geometry: { type: "MultiPolygon", coordinates: [[[[146.25931, 13.85876], [143.82485, 13.92273], [144.61642, 12.82462], [146.25931, 13.85876]]]] } },
+    { type: "Feature", properties: { iso1A2: "GW", iso1A3: "GNB", iso1N3: "624", wikidata: "Q1007", nameEn: "Guinea-Bissau", groups: ["011", "202", "002", "UN"], callingCodes: ["245"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-14.31513, 11.60713], [-14.26623, 11.67486], [-14.09799, 11.63649], [-13.7039, 11.70195], [-13.7039, 12.00869], [-13.94589, 12.16869], [-13.92745, 12.24077], [-13.70851, 12.24978], [-13.64168, 12.42764], [-13.65089, 12.49515], [-13.7039, 12.60313], [-13.70523, 12.68013], [-15.17582, 12.6847], [-15.67302, 12.42974], [-16.20591, 12.46157], [-16.38191, 12.36449], [-16.70562, 12.34803], [-17.4623, 11.92379], [-15.96748, 10.162], [-15.07174, 10.89557], [-14.95993, 10.99244], [-14.77786, 11.36323], [-14.66677, 11.51188], [-14.51173, 11.49708], [-14.31513, 11.60713]]]] } },
+    { type: "Feature", properties: { iso1A2: "GY", iso1A3: "GUY", iso1N3: "328", wikidata: "Q734", nameEn: "Guyana", groups: ["005", "419", "019", "UN"], driveSide: "left", callingCodes: ["592"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-56.84822, 6.73257], [-59.54058, 8.6862], [-59.98508, 8.53046], [-59.85562, 8.35213], [-59.80661, 8.28906], [-59.83156, 8.23261], [-59.97059, 8.20791], [-60.02407, 8.04557], [-60.38056, 7.8302], [-60.51959, 7.83373], [-60.64793, 7.56877], [-60.71923, 7.55817], [-60.59802, 7.33194], [-60.63367, 7.25061], [-60.54098, 7.14804], [-60.44116, 7.20817], [-60.28074, 7.1162], [-60.39419, 6.94847], [-60.54873, 6.8631], [-61.13632, 6.70922], [-61.20762, 6.58174], [-61.15058, 6.19558], [-61.4041, 5.95304], [-60.73204, 5.20931], [-60.32352, 5.21299], [-60.20944, 5.28754], [-59.98129, 5.07097], [-60.04189, 4.69801], [-60.15953, 4.53456], [-59.78878, 4.45637], [-59.69361, 4.34069], [-59.73353, 4.20399], [-59.51963, 3.91951], [-59.86899, 3.57089], [-59.79769, 3.37162], [-59.99733, 2.92312], [-59.91177, 2.36759], [-59.7264, 2.27497], [-59.74066, 1.87596], [-59.25583, 1.40559], [-58.92072, 1.31293], [-58.84229, 1.17749], [-58.53571, 1.29154], [-58.4858, 1.48399], [-58.33887, 1.58014], [-58.01873, 1.51966], [-57.97336, 1.64566], [-57.77281, 1.73344], [-57.55743, 1.69605], [-57.35073, 1.98327], [-57.23981, 1.95808], [-57.09109, 2.01854], [-57.07092, 1.95304], [-56.7659, 1.89509], [-56.47045, 1.95135], [-56.55439, 2.02003], [-56.70519, 2.02964], [-57.35891, 3.32121], [-58.0307, 3.95513], [-57.8699, 4.89394], [-57.37442, 5.0208], [-57.22536, 5.15605], [-57.31629, 5.33714], [-56.84822, 6.73257]]]] } },
+    { type: "Feature", properties: { iso1A2: "HK", iso1A3: "HKG", iso1N3: "344", wikidata: "Q8646", nameEn: "Hong Kong", country: "CN", groups: ["030", "142", "UN"], driveSide: "left", callingCodes: ["852"] }, geometry: { type: "MultiPolygon", coordinates: [[[[113.92195, 22.13873], [114.50148, 22.15017], [114.44998, 22.55977], [114.25154, 22.55977], [114.22888, 22.5436], [114.22185, 22.55343], [114.20655, 22.55706], [114.18338, 22.55444], [114.17247, 22.55944], [114.1597, 22.56041], [114.15123, 22.55163], [114.1482, 22.54091], [114.13823, 22.54319], [114.12665, 22.54003], [114.11656, 22.53415], [114.11181, 22.52878], [114.1034, 22.5352], [114.09692, 22.53435], [114.09048, 22.53716], [114.08606, 22.53276], [114.07817, 22.52997], [114.07267, 22.51855], [114.06272, 22.51617], [114.05729, 22.51104], [114.05438, 22.5026], [114.03113, 22.5065], [113.86771, 22.42972], [113.81621, 22.2163], [113.83338, 22.1826], [113.92195, 22.13873]]]] } },
+    { type: "Feature", properties: { iso1A2: "HM", iso1A3: "HMD", iso1N3: "334", wikidata: "Q131198", nameEn: "Heard Island and McDonald Islands", country: "AU", groups: ["053", "009", "UN"], driveSide: "left" }, geometry: { type: "MultiPolygon", coordinates: [[[[71.08716, -53.87687], [75.44182, -53.99822], [72.87012, -51.48322], [71.08716, -53.87687]]]] } },
+    { type: "Feature", properties: { iso1A2: "HN", iso1A3: "HND", iso1N3: "340", wikidata: "Q783", nameEn: "Honduras", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["504"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-83.86109, 17.73736], [-88.20359, 16.03858], [-88.22552, 15.72294], [-88.24022, 15.69247], [-88.31459, 15.66942], [-88.32467, 15.63665], [-88.97343, 15.14039], [-89.15149, 15.07392], [-89.18048, 14.99967], [-89.15149, 14.97775], [-89.23467, 14.85596], [-89.13132, 14.71582], [-89.15653, 14.57802], [-89.23719, 14.58046], [-89.35189, 14.47553], [-89.34776, 14.43013], [-89.04187, 14.33644], [-88.94608, 14.20207], [-88.85785, 14.17763], [-88.815, 14.11652], [-88.73182, 14.10919], [-88.70661, 14.04317], [-88.49738, 13.97224], [-88.48982, 13.86458], [-88.25791, 13.91108], [-88.23018, 13.99915], [-88.07641, 13.98447], [-88.00331, 13.86948], [-87.7966, 13.91353], [-87.68821, 13.80829], [-87.73106, 13.75443], [-87.78148, 13.52906], [-87.71657, 13.50577], [-87.72115, 13.46083], [-87.73841, 13.44169], [-87.77354, 13.45767], [-87.83467, 13.44655], [-87.84675, 13.41078], [-87.80177, 13.35689], [-87.73714, 13.32715], [-87.69751, 13.25228], [-87.55124, 13.12523], [-87.37107, 12.98646], [-87.06306, 13.00892], [-87.03785, 12.98682], [-86.93197, 13.05313], [-86.93383, 13.18677], [-86.87066, 13.30641], [-86.71267, 13.30348], [-86.76812, 13.79605], [-86.35219, 13.77157], [-86.14801, 14.04317], [-86.00685, 14.08474], [-86.03458, 13.99181], [-85.75477, 13.8499], [-85.73964, 13.9698], [-85.45762, 14.11304], [-85.32149, 14.2562], [-85.18602, 14.24929], [-85.1575, 14.53934], [-84.90082, 14.80489], [-84.82596, 14.82212], [-84.70119, 14.68078], [-84.48373, 14.63249], [-84.10584, 14.76353], [-83.89551, 14.76697], [-83.62101, 14.89448], [-83.49268, 15.01158], [-83.13724, 15.00002], [-83.04763, 15.03256], [-82.06974, 14.49418], [-81.58685, 18.0025], [-83.86109, 17.73736]]]] } },
+    { type: "Feature", properties: { iso1A2: "HR", iso1A3: "HRV", iso1N3: "191", wikidata: "Q224", nameEn: "Croatia", groups: ["EU", "039", "150", "UN"], callingCodes: ["385"] }, geometry: { type: "MultiPolygon", coordinates: [[[[17.6444, 42.88641], [17.5392, 42.92787], [17.70879, 42.97223], [17.64268, 43.08595], [17.46986, 43.16559], [17.286, 43.33065], [17.25579, 43.40353], [17.29699, 43.44542], [17.24411, 43.49376], [17.15828, 43.49376], [17.00585, 43.58037], [16.80736, 43.76011], [16.75316, 43.77157], [16.70922, 43.84887], [16.55472, 43.95326], [16.50528, 44.0244], [16.43629, 44.02826], [16.43662, 44.07523], [16.36864, 44.08263], [16.18688, 44.27012], [16.21346, 44.35231], [16.12969, 44.38275], [16.16814, 44.40679], [16.10566, 44.52586], [16.03012, 44.55572], [16.00884, 44.58605], [16.05828, 44.61538], [15.89348, 44.74964], [15.8255, 44.71501], [15.72584, 44.82334], [15.79472, 44.8455], [15.76096, 44.87045], [15.74723, 44.96818], [15.78568, 44.97401], [15.74585, 45.0638], [15.78842, 45.11519], [15.76371, 45.16508], [15.83512, 45.22459], [15.98412, 45.23088], [16.12153, 45.09616], [16.29036, 44.99732], [16.35404, 45.00241], [16.35863, 45.03529], [16.3749, 45.05206], [16.38219, 45.05139], [16.38309, 45.05955], [16.40023, 45.1147], [16.4634, 45.14522], [16.49155, 45.21153], [16.52982, 45.22713], [16.5501, 45.2212], [16.56559, 45.22307], [16.60194, 45.23042], [16.64962, 45.20714], [16.74845, 45.20393], [16.78219, 45.19002], [16.81137, 45.18434], [16.83804, 45.18951], [16.92405, 45.27607], [16.9385, 45.22742], [17.0415, 45.20759], [17.18438, 45.14764], [17.24325, 45.146], [17.25131, 45.14957], [17.26815, 45.18444], [17.32092, 45.16246], [17.33573, 45.14521], [17.41229, 45.13335], [17.4498, 45.16119], [17.45615, 45.12523], [17.47589, 45.12656], [17.51469, 45.10791], [17.59104, 45.10816], [17.66571, 45.13408], [17.84826, 45.04489], [17.87148, 45.04645], [17.93706, 45.08016], [17.97336, 45.12245], [17.97834, 45.13831], [17.99479, 45.14958], [18.01594, 45.15163], [18.03121, 45.12632], [18.1624, 45.07654], [18.24387, 45.13699], [18.32077, 45.1021], [18.41896, 45.11083], [18.47939, 45.05871], [18.65723, 45.07544], [18.78357, 44.97741], [18.80661, 44.93561], [18.76369, 44.93707], [18.76347, 44.90669], [18.8704, 44.85097], [19.01994, 44.85493], [18.98957, 44.90645], [19.02871, 44.92541], [19.06853, 44.89915], [19.15573, 44.95409], [19.05205, 44.97692], [19.1011, 45.01191], [19.07952, 45.14668], [19.14063, 45.12972], [19.19144, 45.17863], [19.43589, 45.17137], [19.41941, 45.23475], [19.28208, 45.23813], [19.10774, 45.29547], [18.97446, 45.37528], [18.99918, 45.49333], [19.08364, 45.48804], [19.07471, 45.53086], [18.94562, 45.53712], [18.88776, 45.57253], [18.96691, 45.66731], [18.90305, 45.71863], [18.85783, 45.85493], [18.81394, 45.91329], [18.80211, 45.87995], [18.6792, 45.92057], [18.57483, 45.80772], [18.44368, 45.73972], [18.12439, 45.78905], [18.08869, 45.76511], [17.99805, 45.79671], [17.87377, 45.78522], [17.66545, 45.84207], [17.56821, 45.93728], [17.35672, 45.95209], [17.14592, 46.16697], [16.8903, 46.28122], [16.8541, 46.36255], [16.7154, 46.39523], [16.6639, 46.45203], [16.59527, 46.47524], [16.52604, 46.47831], [16.5007, 46.49644], [16.44036, 46.5171], [16.38771, 46.53608], [16.37193, 46.55008], [16.29793, 46.5121], [16.26733, 46.51505], [16.26759, 46.50566], [16.23961, 46.49653], [16.25124, 46.48067], [16.27398, 46.42875], [16.27329, 46.41467], [16.30162, 46.40437], [16.30233, 46.37837], [16.18824, 46.38282], [16.14859, 46.40547], [16.05281, 46.39141], [16.05065, 46.3833], [16.07314, 46.36458], [16.07616, 46.3463], [15.97965, 46.30652], [15.79284, 46.25811], [15.78817, 46.21719], [15.75479, 46.20336], [15.75436, 46.21969], [15.67395, 46.22478], [15.6434, 46.21396], [15.64904, 46.19229], [15.59909, 46.14761], [15.6083, 46.11992], [15.62317, 46.09103], [15.72977, 46.04682], [15.71246, 46.01196], [15.70327, 46.00015], [15.70636, 45.92116], [15.67967, 45.90455], [15.68383, 45.88867], [15.68232, 45.86819], [15.70411, 45.8465], [15.66662, 45.84085], [15.64185, 45.82915], [15.57952, 45.84953], [15.52234, 45.82195], [15.47325, 45.8253], [15.47531, 45.79802], [15.40836, 45.79491], [15.25423, 45.72275], [15.30872, 45.69014], [15.34919, 45.71623], [15.4057, 45.64727], [15.38952, 45.63682], [15.34214, 45.64702], [15.34695, 45.63382], [15.31027, 45.6303], [15.27747, 45.60504], [15.29837, 45.5841], [15.30249, 45.53224], [15.38188, 45.48752], [15.33051, 45.45258], [15.27758, 45.46678], [15.16862, 45.42309], [15.05187, 45.49079], [15.02385, 45.48533], [14.92266, 45.52788], [14.90554, 45.47769], [14.81992, 45.45913], [14.80124, 45.49515], [14.71718, 45.53442], [14.68605, 45.53006], [14.69694, 45.57366], [14.59576, 45.62812], [14.60977, 45.66403], [14.57397, 45.67165], [14.53816, 45.6205], [14.5008, 45.60852], [14.49769, 45.54424], [14.36693, 45.48642], [14.32487, 45.47142], [14.27681, 45.4902], [14.26611, 45.48239], [14.24239, 45.50607], [14.22371, 45.50388], [14.20348, 45.46896], [14.07116, 45.48752], [14.00578, 45.52352], [13.96063, 45.50825], [13.99488, 45.47551], [13.97309, 45.45258], [13.90771, 45.45149], [13.88124, 45.42637], [13.81742, 45.43729], [13.7785, 45.46787], [13.67398, 45.4436], [13.62902, 45.45898], [13.56979, 45.4895], [13.45644, 45.59464], [13.05142, 45.33128], [13.12821, 44.48877], [16.15283, 42.18525], [18.45131, 42.21682], [18.54128, 42.39171], [18.52152, 42.42302], [18.43588, 42.48556], [18.44307, 42.51077], [18.43735, 42.55921], [18.36197, 42.61423], [18.24318, 42.6112], [17.88201, 42.83668], [17.80854, 42.9182], [17.7948, 42.89556], [17.68151, 42.92725], [17.6444, 42.88641]]]] } },
+    { type: "Feature", properties: { iso1A2: "HT", iso1A3: "HTI", iso1N3: "332", wikidata: "Q790", nameEn: "Haiti", aliases: ["RH"], groups: ["029", "003", "419", "019", "UN"], callingCodes: ["509"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.71885, 18.78423], [-71.72624, 18.87802], [-71.77766, 18.95007], [-71.88102, 18.95007], [-71.74088, 19.0437], [-71.71088, 19.08353], [-71.69938, 19.10916], [-71.65337, 19.11759], [-71.62642, 19.21212], [-71.73229, 19.26686], [-71.77766, 19.33823], [-71.69448, 19.37866], [-71.6802, 19.45008], [-71.71268, 19.53374], [-71.71449, 19.55364], [-71.7429, 19.58445], [-71.75865, 19.70231], [-71.77419, 19.73128], [-72.38946, 20.27111], [-73.37289, 20.43199], [-74.7289, 18.71009], [-74.76465, 18.06252], [-72.29523, 17.48026], [-71.75671, 18.03456], [-71.73783, 18.07177], [-71.74994, 18.11115], [-71.75465, 18.14405], [-71.78271, 18.18302], [-71.69952, 18.34101], [-71.90875, 18.45821], [-71.88102, 18.50125], [-72.00201, 18.62312], [-71.95412, 18.64939], [-71.82556, 18.62551], [-71.71885, 18.78423]]]] } },
+    { type: "Feature", properties: { iso1A2: "HU", iso1A3: "HUN", iso1N3: "348", wikidata: "Q28", nameEn: "Hungary", groups: ["EU", "151", "150", "UN"], callingCodes: ["36"] }, geometry: { type: "MultiPolygon", coordinates: [[[[21.72525, 48.34628], [21.67134, 48.3989], [21.6068, 48.50365], [21.44063, 48.58456], [21.11516, 48.49546], [20.83248, 48.5824], [20.5215, 48.53336], [20.29943, 48.26104], [20.24312, 48.2784], [19.92452, 48.1283], [19.63338, 48.25006], [19.52489, 48.19791], [19.47957, 48.09437], [19.28182, 48.08336], [19.23924, 48.0595], [19.01952, 48.07052], [18.82176, 48.04206], [18.76134, 47.97499], [18.76821, 47.87469], [18.8506, 47.82308], [18.74074, 47.8157], [18.66521, 47.76772], [18.56496, 47.76588], [18.29305, 47.73541], [18.02938, 47.75665], [17.71215, 47.7548], [17.23699, 48.02094], [17.16001, 48.00636], [17.09786, 47.97336], [17.11022, 47.92461], [17.08275, 47.87719], [17.00997, 47.86245], [17.07039, 47.81129], [17.05048, 47.79377], [17.08893, 47.70928], [16.87538, 47.68895], [16.86509, 47.72268], [16.82938, 47.68432], [16.7511, 47.67878], [16.72089, 47.73469], [16.65679, 47.74197], [16.61183, 47.76171], [16.54779, 47.75074], [16.53514, 47.73837], [16.55129, 47.72268], [16.4222, 47.66537], [16.58699, 47.61772], [16.64193, 47.63114], [16.71059, 47.52692], [16.64821, 47.50155], [16.6718, 47.46139], [16.57152, 47.40868], [16.52414, 47.41007], [16.49908, 47.39416], [16.45104, 47.41181], [16.47782, 47.25918], [16.44142, 47.25079], [16.43663, 47.21127], [16.41739, 47.20649], [16.42801, 47.18422], [16.4523, 47.18812], [16.46442, 47.16845], [16.44932, 47.14418], [16.52863, 47.13974], [16.46134, 47.09395], [16.52176, 47.05747], [16.43936, 47.03548], [16.51369, 47.00084], [16.28202, 47.00159], [16.27594, 46.9643], [16.22403, 46.939], [16.19904, 46.94134], [16.10983, 46.867], [16.14365, 46.8547], [16.15711, 46.85434], [16.21892, 46.86961], [16.2365, 46.87775], [16.2941, 46.87137], [16.34547, 46.83836], [16.3408, 46.80641], [16.31303, 46.79838], [16.30966, 46.7787], [16.37816, 46.69975], [16.42641, 46.69228], [16.41863, 46.66238], [16.38594, 46.6549], [16.39217, 46.63673], [16.50139, 46.56684], [16.52885, 46.53303], [16.52604, 46.5051], [16.59527, 46.47524], [16.6639, 46.45203], [16.7154, 46.39523], [16.8541, 46.36255], [16.8903, 46.28122], [17.14592, 46.16697], [17.35672, 45.95209], [17.56821, 45.93728], [17.66545, 45.84207], [17.87377, 45.78522], [17.99805, 45.79671], [18.08869, 45.76511], [18.12439, 45.78905], [18.44368, 45.73972], [18.57483, 45.80772], [18.6792, 45.92057], [18.80211, 45.87995], [18.81394, 45.91329], [18.99712, 45.93537], [19.01284, 45.96529], [19.0791, 45.96458], [19.10388, 46.04015], [19.14543, 45.9998], [19.28826, 45.99694], [19.52473, 46.1171], [19.56113, 46.16824], [19.66007, 46.19005], [19.81491, 46.1313], [19.93508, 46.17553], [20.01816, 46.17696], [20.03533, 46.14509], [20.09713, 46.17315], [20.26068, 46.12332], [20.28324, 46.1438], [20.35573, 46.16629], [20.45377, 46.14405], [20.49718, 46.18721], [20.63863, 46.12728], [20.76085, 46.21002], [20.74574, 46.25467], [20.86797, 46.28884], [21.06572, 46.24897], [21.16872, 46.30118], [21.28061, 46.44941], [21.26929, 46.4993], [21.33214, 46.63035], [21.43926, 46.65109], [21.5151, 46.72147], [21.48935, 46.7577], [21.52028, 46.84118], [21.59307, 46.86935], [21.59581, 46.91628], [21.68645, 46.99595], [21.648, 47.03902], [21.78395, 47.11104], [21.94463, 47.38046], [22.01055, 47.37767], [22.03389, 47.42508], [22.00917, 47.50492], [22.31816, 47.76126], [22.41979, 47.7391], [22.46559, 47.76583], [22.67247, 47.7871], [22.76617, 47.8417], [22.77991, 47.87211], [22.89849, 47.95851], [22.84276, 47.98602], [22.87847, 48.04665], [22.81804, 48.11363], [22.73427, 48.12005], [22.66835, 48.09162], [22.58733, 48.10813], [22.59007, 48.15121], [22.49806, 48.25189], [22.38133, 48.23726], [22.2083, 48.42534], [22.14689, 48.4005], [21.83339, 48.36242], [21.8279, 48.33321], [21.72525, 48.34628]]]] } },
+    { type: "Feature", properties: { iso1A2: "IC", wikidata: "Q5813", nameEn: "Canary Islands", country: "ES", groups: ["Q3320166", "Q105472", "EU", "039", "150", "UN"], isoStatus: "excRes", callingCodes: ["34"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-12.00985, 30.24121], [-25.3475, 27.87574], [-14.43883, 27.02969], [-12.00985, 30.24121]]]] } },
+    { type: "Feature", properties: { iso1A2: "ID", iso1A3: "IDN", iso1N3: "360", wikidata: "Q252", nameEn: "Indonesia", aliases: ["RI"] }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "IE", iso1A3: "IRL", iso1N3: "372", wikidata: "Q27", nameEn: "Republic of Ireland", groups: ["EU", "Q22890", "154", "150", "UN"], driveSide: "left", callingCodes: ["353"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-6.26218, 54.09785], [-6.29003, 54.11278], [-6.32694, 54.09337], [-6.36279, 54.11248], [-6.36605, 54.07234], [-6.47849, 54.06947], [-6.62842, 54.03503], [-6.66264, 54.0666], [-6.6382, 54.17071], [-6.70175, 54.20218], [-6.74575, 54.18788], [-6.81583, 54.22791], [-6.85179, 54.29176], [-6.87775, 54.34682], [-7.02034, 54.4212], [-7.19145, 54.31296], [-7.14908, 54.22732], [-7.25012, 54.20063], [-7.26316, 54.13863], [-7.29493, 54.12013], [-7.29687, 54.1354], [-7.28017, 54.16714], [-7.29157, 54.17191], [-7.34005, 54.14698], [-7.30553, 54.11869], [-7.32834, 54.11475], [-7.44567, 54.1539], [-7.4799, 54.12239], [-7.55812, 54.12239], [-7.69501, 54.20731], [-7.81397, 54.20159], [-7.8596, 54.21779], [-7.87101, 54.29299], [-8.04555, 54.36292], [-8.179, 54.46763], [-8.04538, 54.48941], [-7.99812, 54.54427], [-7.8596, 54.53671], [-7.70315, 54.62077], [-7.93293, 54.66603], [-7.83352, 54.73854], [-7.75041, 54.7103], [-7.64449, 54.75265], [-7.54671, 54.74606], [-7.54508, 54.79401], [-7.47626, 54.83084], [-7.4473, 54.87003], [-7.44404, 54.9403], [-7.40004, 54.94498], [-7.4033, 55.00391], [-7.34464, 55.04688], [-7.2471, 55.06933], [-6.34755, 55.49206], [-7.75229, 55.93854], [-11.75, 54], [-11, 51], [-6.03913, 51.13217], [-5.37267, 53.63269], [-6.26218, 54.09785]]]] } },
+    { type: "Feature", properties: { iso1A2: "IL", iso1A3: "ISR", iso1N3: "376", wikidata: "Q801", nameEn: "Israel", groups: ["145", "142", "UN"], callingCodes: ["972"] }, geometry: { type: "MultiPolygon", coordinates: [[[[34.052, 31.46619], [34.29262, 31.70393], [34.48681, 31.59711], [34.56797, 31.54197], [34.48892, 31.48365], [34.40077, 31.40926], [34.36505, 31.36404], [34.37381, 31.30598], [34.36523, 31.28963], [34.29417, 31.24194], [34.26742, 31.21998], [34.92298, 29.45305], [34.97718, 29.54294], [34.98207, 29.58147], [35.02147, 29.66343], [35.14108, 30.07374], [35.19183, 30.34636], [35.16218, 30.43535], [35.19595, 30.50297], [35.21379, 30.60401], [35.29311, 30.71365], [35.33456, 30.81224], [35.33984, 30.8802], [35.41371, 30.95565], [35.43658, 31.12444], [35.40316, 31.25535], [35.47672, 31.49578], [35.39675, 31.49572], [35.22921, 31.37445], [35.13033, 31.3551], [35.02459, 31.35979], [34.92571, 31.34337], [34.88932, 31.37093], [34.87833, 31.39321], [34.89756, 31.43891], [34.93258, 31.47816], [34.94356, 31.50743], [34.9415, 31.55601], [34.95249, 31.59813], [35.00879, 31.65426], [35.08226, 31.69107], [35.10782, 31.71594], [35.11895, 31.71454], [35.12933, 31.7325], [35.13931, 31.73012], [35.15119, 31.73634], [35.15474, 31.73352], [35.16478, 31.73242], [35.18023, 31.72067], [35.20538, 31.72388], [35.21937, 31.71578], [35.22392, 31.71899], [35.23972, 31.70896], [35.24315, 31.71244], [35.2438, 31.7201], [35.24981, 31.72543], [35.25182, 31.73945], [35.26319, 31.74846], [35.25225, 31.7678], [35.26058, 31.79064], [35.25573, 31.81362], [35.26404, 31.82567], [35.251, 31.83085], [35.25753, 31.8387], [35.24816, 31.8458], [35.2304, 31.84222], [35.2249, 31.85433], [35.22817, 31.8638], [35.22567, 31.86745], [35.22294, 31.87889], [35.22014, 31.88264], [35.2136, 31.88241], [35.21276, 31.88153], [35.21016, 31.88237], [35.20945, 31.8815], [35.20791, 31.8821], [35.20673, 31.88151], [35.20381, 31.86716], [35.21128, 31.863], [35.216, 31.83894], [35.21469, 31.81835], [35.19461, 31.82687], [35.18169, 31.82542], [35.18603, 31.80901], [35.14174, 31.81325], [35.07677, 31.85627], [35.05617, 31.85685], [35.01978, 31.82944], [34.9724, 31.83352], [34.99712, 31.85569], [35.03489, 31.85919], [35.03978, 31.89276], [35.03489, 31.92448], [35.00124, 31.93264], [34.98682, 31.96935], [35.00261, 32.027], [34.9863, 32.09551], [34.99437, 32.10962], [34.98507, 32.12606], [34.99039, 32.14626], [34.96009, 32.17503], [34.95703, 32.19522], [34.98885, 32.20758], [35.01841, 32.23981], [35.02939, 32.2671], [35.01119, 32.28684], [35.01772, 32.33863], [35.04243, 32.35008], [35.05142, 32.3667], [35.0421, 32.38242], [35.05311, 32.4024], [35.05423, 32.41754], [35.07059, 32.4585], [35.08564, 32.46948], [35.09236, 32.47614], [35.10024, 32.47856], [35.10882, 32.4757], [35.15937, 32.50466], [35.2244, 32.55289], [35.25049, 32.52453], [35.29306, 32.50947], [35.30685, 32.51024], [35.35212, 32.52047], [35.40224, 32.50136], [35.42034, 32.46009], [35.41598, 32.45593], [35.41048, 32.43706], [35.42078, 32.41562], [35.55807, 32.38674], [35.55494, 32.42687], [35.57485, 32.48669], [35.56614, 32.64393], [35.59813, 32.65159], [35.61669, 32.67999], [35.66527, 32.681], [35.68467, 32.70715], [35.75983, 32.74803], [35.78745, 32.77938], [35.83758, 32.82817], [35.84021, 32.8725], [35.87012, 32.91976], [35.89298, 32.9456], [35.87188, 32.98028], [35.84802, 33.1031], [35.81911, 33.11077], [35.81911, 33.1336], [35.84285, 33.16673], [35.83846, 33.19397], [35.81647, 33.2028], [35.81295, 33.24841], [35.77513, 33.27342], [35.813, 33.3172], [35.77477, 33.33609], [35.62019, 33.27278], [35.62283, 33.24226], [35.58502, 33.26653], [35.58326, 33.28381], [35.56523, 33.28969], [35.55555, 33.25844], [35.54544, 33.25513], [35.54808, 33.236], [35.5362, 33.23196], [35.54228, 33.19865], [35.52573, 33.11921], [35.50335, 33.114], [35.50272, 33.09056], [35.448, 33.09264], [35.43059, 33.06659], [35.35223, 33.05617], [35.31429, 33.10515], [35.1924, 33.08743], [35.10645, 33.09318], [34.78515, 33.20368], [33.62659, 31.82938], [34.052, 31.46619]]]] } },
+    { type: "Feature", properties: { iso1A2: "IM", iso1A3: "IMN", iso1N3: "833", wikidata: "Q9676", nameEn: "Isle of Man", country: "GB", groups: ["Q185086", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01624", "44 07624", "44 07524", "44 07924"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-3.98763, 54.07351], [-4.1819, 54.57861], [-5.6384, 53.81157], [-3.98763, 54.07351]]]] } },
+    { type: "Feature", properties: { iso1A2: "IN", iso1A3: "IND", iso1N3: "356", wikidata: "Q668", nameEn: "India" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "IO", iso1A3: "IOT", iso1N3: "086", wikidata: "Q43448", nameEn: "British Indian Ocean Territory", country: "GB" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "IQ", iso1A3: "IRQ", iso1N3: "368", wikidata: "Q796", nameEn: "Iraq", groups: ["145", "142", "UN"], callingCodes: ["964"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.78887, 37.38615], [42.56725, 37.14878], [42.35724, 37.10998], [42.36697, 37.0627], [41.81736, 36.58782], [41.40058, 36.52502], [41.28864, 36.35368], [41.2564, 36.06012], [41.37027, 35.84095], [41.38184, 35.62502], [41.26569, 35.42708], [41.21654, 35.1508], [41.2345, 34.80049], [41.12388, 34.65742], [40.97676, 34.39788], [40.64314, 34.31604], [38.79171, 33.37328], [39.08202, 32.50304], [38.98762, 32.47694], [39.04251, 32.30203], [39.26157, 32.35555], [39.29903, 32.23259], [40.01521, 32.05667], [42.97601, 30.72204], [42.97796, 30.48295], [44.72255, 29.19736], [46.42415, 29.05947], [46.5527, 29.10283], [46.89695, 29.50584], [47.15166, 30.01044], [47.37192, 30.10421], [47.7095, 30.10453], [48.01114, 29.98906], [48.06782, 30.02906], [48.17332, 30.02448], [48.40479, 29.85763], [48.59531, 29.66815], [48.83867, 29.78572], [48.61441, 29.93675], [48.51011, 29.96238], [48.44785, 30.00148], [48.4494, 30.04456], [48.43384, 30.08233], [48.38869, 30.11062], [48.38714, 30.13485], [48.41671, 30.17254], [48.41117, 30.19846], [48.26393, 30.3408], [48.24385, 30.33846], [48.21279, 30.31644], [48.19425, 30.32796], [48.18321, 30.39703], [48.14585, 30.44133], [48.02443, 30.4789], [48.03221, 30.9967], [47.68219, 31.00004], [47.6804, 31.39086], [47.86337, 31.78422], [47.64771, 32.07666], [47.52474, 32.15972], [47.57144, 32.20583], [47.37529, 32.47808], [47.17218, 32.45393], [46.46788, 32.91992], [46.32298, 32.9731], [46.17198, 32.95612], [46.09103, 32.98354], [46.15175, 33.07229], [46.03966, 33.09577], [46.05367, 33.13097], [46.11905, 33.11924], [46.20623, 33.20395], [45.99919, 33.5082], [45.86687, 33.49263], [45.96183, 33.55751], [45.89801, 33.63661], [45.77814, 33.60938], [45.50261, 33.94968], [45.42789, 33.9458], [45.41077, 33.97421], [45.47264, 34.03099], [45.56176, 34.15088], [45.58667, 34.30147], [45.53552, 34.35148], [45.49171, 34.3439], [45.46697, 34.38221], [45.43879, 34.45949], [45.51883, 34.47692], [45.53219, 34.60441], [45.59074, 34.55558], [45.60224, 34.55057], [45.73923, 34.54416], [45.70031, 34.69277], [45.65672, 34.7222], [45.68284, 34.76624], [45.70031, 34.82322], [45.73641, 34.83975], [45.79682, 34.85133], [45.78904, 34.91135], [45.86532, 34.89858], [45.89477, 34.95805], [45.87864, 35.03441], [45.92173, 35.0465], [45.92203, 35.09538], [45.93108, 35.08148], [45.94756, 35.09188], [46.06508, 35.03699], [46.07747, 35.0838], [46.11763, 35.07551], [46.19116, 35.11097], [46.15642, 35.1268], [46.16229, 35.16984], [46.19738, 35.18536], [46.18457, 35.22561], [46.11367, 35.23729], [46.15474, 35.2883], [46.13152, 35.32548], [46.05358, 35.38568], [45.98453, 35.49848], [46.01518, 35.52012], [45.97584, 35.58132], [46.03028, 35.57416], [46.01307, 35.59756], [46.0165, 35.61501], [45.99452, 35.63574], [46.0117, 35.65059], [46.01631, 35.69139], [46.23736, 35.71414], [46.34166, 35.78363], [46.32921, 35.82655], [46.17198, 35.8013], [46.08325, 35.8581], [45.94711, 35.82218], [45.89784, 35.83708], [45.81442, 35.82107], [45.76145, 35.79898], [45.6645, 35.92872], [45.60018, 35.96069], [45.55245, 35.99943], [45.46594, 36.00042], [45.38275, 35.97156], [45.33916, 35.99424], [45.37652, 36.06222], [45.37312, 36.09917], [45.32235, 36.17383], [45.30038, 36.27769], [45.26261, 36.3001], [45.27394, 36.35846], [45.23953, 36.43257], [45.11811, 36.40751], [45.00759, 36.5402], [45.06985, 36.62645], [45.06985, 36.6814], [45.01537, 36.75128], [44.84725, 36.77622], [44.83479, 36.81362], [44.90173, 36.86096], [44.91199, 36.91468], [44.89862, 37.01897], [44.81611, 37.04383], [44.75229, 37.11958], [44.78319, 37.1431], [44.76698, 37.16162], [44.63179, 37.19229], [44.42631, 37.05825], [44.38117, 37.05825], [44.35315, 37.04955], [44.35937, 37.02843], [44.30645, 36.97373], [44.25975, 36.98119], [44.18503, 37.09551], [44.22239, 37.15756], [44.27998, 37.16501], [44.2613, 37.25055], [44.13521, 37.32486], [44.02002, 37.33229], [43.90949, 37.22453], [43.84878, 37.22205], [43.82699, 37.19477], [43.8052, 37.22825], [43.7009, 37.23692], [43.63085, 37.21957], [43.56702, 37.25675], [43.50787, 37.24436], [43.33508, 37.33105], [43.30083, 37.30629], [43.11403, 37.37436], [42.93705, 37.32015], [42.78887, 37.38615]]]] } },
+    { type: "Feature", properties: { iso1A2: "IR", iso1A3: "IRN", iso1N3: "364", wikidata: "Q794", nameEn: "Iran", groups: ["034", "142", "UN"], callingCodes: ["98"] }, geometry: { type: "MultiPolygon", coordinates: [[[[44.96746, 39.42998], [44.88916, 39.59653], [44.81043, 39.62677], [44.71806, 39.71124], [44.65422, 39.72163], [44.6137, 39.78393], [44.47298, 39.68788], [44.48111, 39.61579], [44.41849, 39.56659], [44.42832, 39.4131], [44.37921, 39.4131], [44.29818, 39.378], [44.22452, 39.4169], [44.03667, 39.39223], [44.1043, 39.19842], [44.20946, 39.13975], [44.18863, 38.93881], [44.30322, 38.81581], [44.26155, 38.71427], [44.28065, 38.6465], [44.32058, 38.62752], [44.3207, 38.49799], [44.3119, 38.37887], [44.38309, 38.36117], [44.44386, 38.38295], [44.50115, 38.33939], [44.42476, 38.25763], [44.22509, 37.88859], [44.3883, 37.85433], [44.45948, 37.77065], [44.55498, 37.783], [44.62096, 37.71985], [44.56887, 37.6429], [44.61401, 37.60165], [44.58449, 37.45018], [44.81021, 37.2915], [44.75986, 37.21549], [44.7868, 37.16644], [44.78319, 37.1431], [44.75229, 37.11958], [44.81611, 37.04383], [44.89862, 37.01897], [44.91199, 36.91468], [44.90173, 36.86096], [44.83479, 36.81362], [44.84725, 36.77622], [45.01537, 36.75128], [45.06985, 36.6814], [45.06985, 36.62645], [45.00759, 36.5402], [45.11811, 36.40751], [45.23953, 36.43257], [45.27394, 36.35846], [45.26261, 36.3001], [45.30038, 36.27769], [45.32235, 36.17383], [45.37312, 36.09917], [45.37652, 36.06222], [45.33916, 35.99424], [45.38275, 35.97156], [45.46594, 36.00042], [45.55245, 35.99943], [45.60018, 35.96069], [45.6645, 35.92872], [45.76145, 35.79898], [45.81442, 35.82107], [45.89784, 35.83708], [45.94711, 35.82218], [46.08325, 35.8581], [46.17198, 35.8013], [46.32921, 35.82655], [46.34166, 35.78363], [46.23736, 35.71414], [46.01631, 35.69139], [46.0117, 35.65059], [45.99452, 35.63574], [46.0165, 35.61501], [46.01307, 35.59756], [46.03028, 35.57416], [45.97584, 35.58132], [46.01518, 35.52012], [45.98453, 35.49848], [46.05358, 35.38568], [46.13152, 35.32548], [46.15474, 35.2883], [46.11367, 35.23729], [46.18457, 35.22561], [46.19738, 35.18536], [46.16229, 35.16984], [46.15642, 35.1268], [46.19116, 35.11097], [46.11763, 35.07551], [46.07747, 35.0838], [46.06508, 35.03699], [45.94756, 35.09188], [45.93108, 35.08148], [45.92203, 35.09538], [45.92173, 35.0465], [45.87864, 35.03441], [45.89477, 34.95805], [45.86532, 34.89858], [45.78904, 34.91135], [45.79682, 34.85133], [45.73641, 34.83975], [45.70031, 34.82322], [45.68284, 34.76624], [45.65672, 34.7222], [45.70031, 34.69277], [45.73923, 34.54416], [45.60224, 34.55057], [45.59074, 34.55558], [45.53219, 34.60441], [45.51883, 34.47692], [45.43879, 34.45949], [45.46697, 34.38221], [45.49171, 34.3439], [45.53552, 34.35148], [45.58667, 34.30147], [45.56176, 34.15088], [45.47264, 34.03099], [45.41077, 33.97421], [45.42789, 33.9458], [45.50261, 33.94968], [45.77814, 33.60938], [45.89801, 33.63661], [45.96183, 33.55751], [45.86687, 33.49263], [45.99919, 33.5082], [46.20623, 33.20395], [46.11905, 33.11924], [46.05367, 33.13097], [46.03966, 33.09577], [46.15175, 33.07229], [46.09103, 32.98354], [46.17198, 32.95612], [46.32298, 32.9731], [46.46788, 32.91992], [47.17218, 32.45393], [47.37529, 32.47808], [47.57144, 32.20583], [47.52474, 32.15972], [47.64771, 32.07666], [47.86337, 31.78422], [47.6804, 31.39086], [47.68219, 31.00004], [48.03221, 30.9967], [48.02443, 30.4789], [48.14585, 30.44133], [48.18321, 30.39703], [48.19425, 30.32796], [48.21279, 30.31644], [48.24385, 30.33846], [48.26393, 30.3408], [48.41117, 30.19846], [48.41671, 30.17254], [48.38714, 30.13485], [48.38869, 30.11062], [48.43384, 30.08233], [48.4494, 30.04456], [48.44785, 30.00148], [48.51011, 29.96238], [48.61441, 29.93675], [48.83867, 29.78572], [49.98877, 27.87827], [50.37726, 27.89227], [54.39838, 25.68383], [55.14145, 25.62624], [55.81777, 26.18798], [56.2644, 26.58649], [56.68954, 26.76645], [56.79239, 26.41236], [56.82555, 25.7713], [56.86325, 25.03856], [61.46682, 24.57869], [61.6433, 25.27541], [61.683, 25.66638], [61.83968, 25.7538], [61.83831, 26.07249], [61.89391, 26.26251], [62.05117, 26.31647], [62.21304, 26.26601], [62.31484, 26.528], [62.77352, 26.64099], [63.1889, 26.65072], [63.18688, 26.83844], [63.25005, 26.84212], [63.25005, 27.08692], [63.32283, 27.14437], [63.19649, 27.25674], [62.80604, 27.22412], [62.79684, 27.34381], [62.84905, 27.47627], [62.7638, 28.02992], [62.79412, 28.28108], [62.59499, 28.24842], [62.40259, 28.42703], [61.93581, 28.55284], [61.65978, 28.77937], [61.53765, 29.00507], [61.31508, 29.38903], [60.87231, 29.86514], [61.80829, 30.84224], [61.78268, 30.92724], [61.8335, 30.97669], [61.83257, 31.0452], [61.80957, 31.12576], [61.80569, 31.16167], [61.70929, 31.37391], [60.84541, 31.49561], [60.86191, 32.22565], [60.56485, 33.12944], [60.88908, 33.50219], [60.91133, 33.55596], [60.69573, 33.56054], [60.57762, 33.59772], [60.5485, 33.73422], [60.5838, 33.80793], [60.50209, 34.13992], [60.66502, 34.31539], [60.91321, 34.30411], [60.72316, 34.52857], [60.99922, 34.63064], [61.00197, 34.70631], [61.06926, 34.82139], [61.12831, 35.09938], [61.0991, 35.27845], [61.18187, 35.30249], [61.27371, 35.61482], [61.22719, 35.67038], [61.26152, 35.80749], [61.22444, 35.92879], [61.12007, 35.95992], [61.22719, 36.12759], [61.1393, 36.38782], [61.18187, 36.55348], [61.14516, 36.64644], [60.34767, 36.63214], [60.00768, 37.04102], [59.74678, 37.12499], [59.55178, 37.13594], [59.39385, 37.34257], [59.39797, 37.47892], [59.33507, 37.53146], [59.22905, 37.51161], [58.9338, 37.67374], [58.6921, 37.64548], [58.5479, 37.70526], [58.47786, 37.6433], [58.39959, 37.63134], [58.22999, 37.6856], [58.21399, 37.77281], [57.79534, 37.89299], [57.35042, 37.98546], [57.37236, 38.09321], [57.21169, 38.28965], [57.03453, 38.18717], [56.73928, 38.27887], [56.62255, 38.24005], [56.43303, 38.26054], [56.32454, 38.18502], [56.33278, 38.08132], [55.97847, 38.08024], [55.76561, 38.12238], [55.44152, 38.08564], [55.13412, 37.94705], [54.851, 37.75739], [54.77684, 37.62264], [54.81804, 37.61285], [54.77822, 37.51597], [54.67247, 37.43532], [54.58664, 37.45809], [54.36211, 37.34912], [54.24565, 37.32047], [53.89734, 37.3464], [48.88288, 38.43975], [48.84969, 38.45015], [48.81072, 38.44853], [48.78979, 38.45026], [48.70001, 38.40564], [48.62217, 38.40198], [48.58793, 38.45076], [48.45084, 38.61013], [48.3146, 38.59958], [48.24773, 38.71883], [48.02581, 38.82705], [48.01409, 38.90333], [48.07734, 38.91616], [48.08627, 38.94434], [48.28437, 38.97186], [48.33884, 39.03022], [48.31239, 39.09278], [48.15361, 39.19419], [48.12404, 39.25208], [48.15984, 39.30028], [48.37385, 39.37584], [48.34264, 39.42935], [47.98977, 39.70999], [47.84774, 39.66285], [47.50099, 39.49615], [47.38978, 39.45999], [47.31301, 39.37492], [47.05927, 39.24846], [47.05771, 39.20143], [46.95341, 39.13505], [46.92539, 39.16644], [46.83822, 39.13143], [46.75752, 39.03231], [46.53497, 38.86548], [46.34059, 38.92076], [46.20601, 38.85262], [46.14785, 38.84206], [46.06766, 38.87861], [46.00228, 38.87376], [45.94624, 38.89072], [45.90266, 38.87739], [45.83883, 38.90768], [45.65172, 38.95199], [45.6155, 38.94304], [45.6131, 38.964], [45.44966, 38.99243], [45.44811, 39.04927], [45.40452, 39.07224], [45.40148, 39.09007], [45.30489, 39.18333], [45.16168, 39.21952], [45.08751, 39.35052], [45.05932, 39.36435], [44.96746, 39.42998]]]] } },
+    { type: "Feature", properties: { iso1A2: "IS", iso1A3: "ISL", iso1N3: "352", wikidata: "Q189", nameEn: "Iceland", groups: ["154", "150", "UN"], callingCodes: ["354"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-33.15676, 62.62995], [-8.25539, 63.0423], [-15.70914, 69.67442], [-33.15676, 62.62995]]]] } },
+    { type: "Feature", properties: { iso1A2: "IT", iso1A3: "ITA", iso1N3: "380", wikidata: "Q38", nameEn: "Italy", groups: ["EU", "039", "150", "UN"], callingCodes: ["39"] }, geometry: { type: "MultiPolygon", coordinates: [[[[8.95861, 45.96485], [8.97604, 45.96151], [8.97741, 45.98317], [8.96668, 45.98436], [8.95861, 45.96485]]], [[[7.63035, 43.57419], [9.56115, 43.20816], [10.09675, 41.44089], [7.60802, 41.05927], [7.89009, 38.19924], [11.2718, 37.6713], [12.13667, 34.20326], [14.02721, 36.53141], [17.67657, 35.68918], [18.83516, 40.36999], [16.15283, 42.18525], [13.12821, 44.48877], [13.05142, 45.33128], [13.45644, 45.59464], [13.6076, 45.64761], [13.7198, 45.59352], [13.74587, 45.59811], [13.78445, 45.5825], [13.84106, 45.58185], [13.86771, 45.59898], [13.8695, 45.60835], [13.9191, 45.6322], [13.87933, 45.65207], [13.83422, 45.68703], [13.83332, 45.70855], [13.8235, 45.7176], [13.66986, 45.79955], [13.59784, 45.8072], [13.58858, 45.83503], [13.57563, 45.8425], [13.58644, 45.88173], [13.59565, 45.89446], [13.60857, 45.89907], [13.61931, 45.91782], [13.63815, 45.93607], [13.6329, 45.94894], [13.64307, 45.98326], [13.63458, 45.98947], [13.62074, 45.98388], [13.58903, 45.99009], [13.56759, 45.96991], [13.52963, 45.96588], [13.50104, 45.98078], [13.47474, 46.00546], [13.49702, 46.01832], [13.50998, 46.04498], [13.49568, 46.04839], [13.50104, 46.05986], [13.57072, 46.09022], [13.64053, 46.13587], [13.66472, 46.17392], [13.64451, 46.18966], [13.56682, 46.18703], [13.56114, 46.2054], [13.47587, 46.22725], [13.42218, 46.20758], [13.37671, 46.29668], [13.44808, 46.33507], [13.43418, 46.35992], [13.47019, 46.3621], [13.5763, 46.40915], [13.5763, 46.42613], [13.59777, 46.44137], [13.68684, 46.43881], [13.7148, 46.5222], [13.64088, 46.53438], [13.27627, 46.56059], [12.94445, 46.60401], [12.59992, 46.6595], [12.38708, 46.71529], [12.27591, 46.88651], [12.2006, 46.88854], [12.11675, 47.01241], [12.21781, 47.03996], [12.19254, 47.09331], [11.74789, 46.98484], [11.50739, 47.00644], [11.33355, 46.99862], [11.10618, 46.92966], [11.00764, 46.76896], [10.72974, 46.78972], [10.75753, 46.82258], [10.66405, 46.87614], [10.54783, 46.84505], [10.47197, 46.85698], [10.38659, 46.67847], [10.40475, 46.63671], [10.44686, 46.64162], [10.49375, 46.62049], [10.46136, 46.53164], [10.25309, 46.57432], [10.23674, 46.63484], [10.10307, 46.61003], [10.03715, 46.44479], [10.165, 46.41051], [10.10506, 46.3372], [10.17862, 46.25626], [10.14439, 46.22992], [10.07055, 46.21668], [9.95249, 46.38045], [9.73086, 46.35071], [9.71273, 46.29266], [9.57015, 46.2958], [9.46117, 46.37481], [9.45936, 46.50873], [9.40487, 46.46621], [9.36128, 46.5081], [9.28136, 46.49685], [9.25502, 46.43743], [9.29226, 46.32717], [9.24503, 46.23616], [9.01618, 46.04928], [8.99257, 45.9698], [9.09065, 45.89906], [9.06642, 45.8761], [9.04546, 45.84968], [9.04059, 45.8464], [9.03505, 45.83976], [9.03793, 45.83548], [9.03279, 45.82865], [9.0298, 45.82127], [9.00324, 45.82055], [8.99663, 45.83466], [8.9621, 45.83707], [8.94737, 45.84285], [8.91129, 45.8388], [8.93504, 45.86245], [8.94372, 45.86587], [8.93649, 45.86775], [8.88904, 45.95465], [8.86688, 45.96135], [8.85121, 45.97239], [8.8319, 45.9879], [8.79362, 45.99207], [8.78585, 45.98973], [8.79414, 46.00913], [8.85617, 46.0748], [8.80778, 46.10085], [8.75697, 46.10395], [8.62242, 46.12112], [8.45032, 46.26869], [8.46317, 46.43712], [8.42464, 46.46367], [8.30648, 46.41587], [8.31162, 46.38044], [8.08814, 46.26692], [8.16866, 46.17817], [8.11383, 46.11577], [8.02906, 46.10331], [7.98881, 45.99867], [7.9049, 45.99945], [7.85949, 45.91485], [7.56343, 45.97421], [7.10685, 45.85653], [7.04151, 45.92435], [6.95315, 45.85163], [6.80785, 45.83265], [6.80785, 45.71864], [6.98948, 45.63869], [7.00037, 45.509], [7.18019, 45.40071], [7.10572, 45.32924], [7.13115, 45.25386], [7.07074, 45.21228], [6.96706, 45.20841], [6.85144, 45.13226], [6.7697, 45.16044], [6.62803, 45.11175], [6.66981, 45.02324], [6.74791, 45.01939], [6.74519, 44.93661], [6.75518, 44.89915], [6.90774, 44.84322], [6.93499, 44.8664], [7.02217, 44.82519], [7.00401, 44.78782], [7.07484, 44.68073], [7.00582, 44.69364], [6.95133, 44.66264], [6.96042, 44.62129], [6.85507, 44.53072], [6.86233, 44.49834], [6.94504, 44.43112], [6.88784, 44.42043], [6.89171, 44.36637], [6.98221, 44.28289], [7.00764, 44.23736], [7.16929, 44.20352], [7.27827, 44.1462], [7.34547, 44.14359], [7.36364, 44.11882], [7.62155, 44.14881], [7.63245, 44.17877], [7.68694, 44.17487], [7.66878, 44.12795], [7.72508, 44.07578], [7.6597, 44.03009], [7.66848, 43.99943], [7.65266, 43.9763], [7.60771, 43.95772], [7.56858, 43.94506], [7.56075, 43.89932], [7.51162, 43.88301], [7.49355, 43.86551], [7.50423, 43.84345], [7.53006, 43.78405], [7.63035, 43.57419]], [[12.45181, 41.90056], [12.44834, 41.90095], [12.44582, 41.90194], [12.44815, 41.90326], [12.44984, 41.90545], [12.45091, 41.90625], [12.45543, 41.90738], [12.45561, 41.90629], [12.45762, 41.9058], [12.45755, 41.9033], [12.45826, 41.90281], [12.45834, 41.90174], [12.4577, 41.90115], [12.45691, 41.90125], [12.45626, 41.90172], [12.45435, 41.90143], [12.45446, 41.90028], [12.45181, 41.90056]], [[12.45648, 43.89369], [12.44184, 43.90498], [12.41641, 43.89991], [12.40935, 43.9024], [12.41233, 43.90956], [12.40733, 43.92379], [12.41551, 43.92984], [12.41165, 43.93769], [12.40506, 43.94325], [12.40415, 43.95485], [12.41414, 43.95273], [12.42005, 43.9578], [12.43662, 43.95698], [12.44684, 43.96597], [12.46205, 43.97463], [12.47853, 43.98052], [12.49406, 43.98492], [12.50678, 43.99113], [12.51463, 43.99122], [12.5154, 43.98508], [12.51064, 43.98165], [12.51109, 43.97201], [12.50622, 43.97131], [12.50875, 43.96198], [12.50655, 43.95796], [12.51427, 43.94897], [12.51553, 43.94096], [12.50496, 43.93017], [12.50269, 43.92363], [12.49724, 43.92248], [12.49247, 43.91774], [12.49429, 43.90973], [12.48771, 43.89706], [12.45648, 43.89369]]]] } },
+    { type: "Feature", properties: { iso1A2: "JE", iso1A3: "JEY", iso1N3: "832", wikidata: "Q785", nameEn: "Bailiwick of Jersey", country: "GB", groups: ["830", "Q185086", "154", "150", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["44 01534"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.00491, 48.86706], [-1.83944, 49.23037], [-2.09454, 49.46288], [-2.65349, 49.15373], [-2.00491, 48.86706]]]] } },
+    { type: "Feature", properties: { iso1A2: "JM", iso1A3: "JAM", iso1N3: "388", wikidata: "Q766", nameEn: "Jamaica", aliases: ["JA"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", callingCodes: ["1 876", "1 658"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-74.09729, 17.36817], [-78.9741, 19.59515], [-78.34606, 16.57862], [-74.09729, 17.36817]]]] } },
+    { type: "Feature", properties: { iso1A2: "JO", iso1A3: "JOR", iso1N3: "400", wikidata: "Q810", nameEn: "Jordan", groups: ["145", "142", "UN"], callingCodes: ["962"] }, geometry: { type: "MultiPolygon", coordinates: [[[[39.04251, 32.30203], [38.98762, 32.47694], [39.08202, 32.50304], [38.79171, 33.37328], [36.83946, 32.31293], [36.40959, 32.37908], [36.23948, 32.50108], [36.20875, 32.49529], [36.20379, 32.52751], [36.08074, 32.51463], [36.02239, 32.65911], [35.96633, 32.66237], [35.93307, 32.71966], [35.88405, 32.71321], [35.75983, 32.74803], [35.68467, 32.70715], [35.66527, 32.681], [35.61669, 32.67999], [35.59813, 32.65159], [35.56614, 32.64393], [35.57485, 32.48669], [35.55494, 32.42687], [35.55807, 32.38674], [35.57111, 32.21877], [35.52012, 32.04076], [35.54375, 31.96587], [35.52758, 31.9131], [35.55941, 31.76535], [35.47672, 31.49578], [35.40316, 31.25535], [35.43658, 31.12444], [35.41371, 30.95565], [35.33984, 30.8802], [35.33456, 30.81224], [35.29311, 30.71365], [35.21379, 30.60401], [35.19595, 30.50297], [35.16218, 30.43535], [35.19183, 30.34636], [35.14108, 30.07374], [35.02147, 29.66343], [34.98207, 29.58147], [34.97718, 29.54294], [34.92298, 29.45305], [34.8812, 29.36878], [36.07081, 29.18469], [36.50005, 29.49696], [36.75083, 29.86903], [37.4971, 29.99949], [37.66395, 30.33245], [37.99354, 30.49998], [36.99791, 31.50081], [38.99233, 31.99721], [39.29903, 32.23259], [39.26157, 32.35555], [39.04251, 32.30203]]]] } },
+    { type: "Feature", properties: { iso1A2: "JP", iso1A3: "JPN", iso1N3: "392", wikidata: "Q17", nameEn: "Japan", groups: ["030", "142", "UN"], driveSide: "left", callingCodes: ["81"] }, geometry: { type: "MultiPolygon", coordinates: [[[[145.82361, 43.38904], [145.23667, 43.76813], [145.82343, 44.571], [140.9182, 45.92937], [133.61399, 37.41], [129.2669, 34.87122], [122.26612, 25.98197], [123.92912, 17.8782], [155.16731, 23.60141], [145.82361, 43.38904]]]] } },
+    { type: "Feature", properties: { iso1A2: "KE", iso1A3: "KEN", iso1N3: "404", wikidata: "Q114", nameEn: "Kenya", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["254"] }, geometry: { type: "MultiPolygon", coordinates: [[[[35.9419, 4.61933], [35.51424, 4.61643], [35.42366, 4.76969], [35.47843, 4.91872], [35.30992, 4.90402], [35.34151, 5.02364], [34.47601, 4.72162], [33.9873, 4.23316], [34.06046, 4.15235], [34.15429, 3.80464], [34.45815, 3.67385], [34.44922, 3.51627], [34.39112, 3.48802], [34.41794, 3.44342], [34.40006, 3.37949], [34.45815, 3.18319], [34.56242, 3.11478], [34.60114, 2.93034], [34.65774, 2.8753], [34.73967, 2.85447], [34.78137, 2.76223], [34.77244, 2.70272], [34.95267, 2.47209], [34.90947, 2.42447], [34.98692, 1.97348], [34.9899, 1.6668], [34.92734, 1.56109], [34.87819, 1.5596], [34.7918, 1.36752], [34.82606, 1.30944], [34.82606, 1.26626], [34.80223, 1.22754], [34.67562, 1.21265], [34.58029, 1.14712], [34.57427, 1.09868], [34.52369, 1.10692], [34.43349, 0.85254], [34.40041, 0.80266], [34.31516, 0.75693], [34.27345, 0.63182], [34.20196, 0.62289], [34.13493, 0.58118], [34.11408, 0.48884], [34.08727, 0.44713], [34.10067, 0.36372], [33.90936, 0.10581], [33.98449, -0.13079], [33.9264, -0.54188], [33.93107, -0.99298], [34.02286, -1.00779], [34.03084, -1.05101], [34.0824, -1.02264], [37.67199, -3.06222], [37.71745, -3.304], [37.5903, -3.42735], [37.63099, -3.50723], [37.75036, -3.54243], [37.81321, -3.69179], [39.21631, -4.67835], [39.44306, -4.93877], [39.62121, -4.68136], [41.75542, -1.85308], [41.56362, -1.66375], [41.56, -1.59812], [41.00099, -0.83068], [40.98767, 2.82959], [41.31368, 3.14314], [41.89488, 3.97375], [41.1754, 3.94079], [40.77498, 4.27683], [39.86043, 3.86974], [39.76808, 3.67058], [39.58339, 3.47434], [39.55132, 3.39634], [39.51551, 3.40895], [39.49444, 3.45521], [39.19954, 3.47834], [39.07736, 3.5267], [38.91938, 3.51198], [38.52336, 3.62551], [38.45812, 3.60445], [38.14168, 3.62487], [37.07724, 4.33503], [36.84474, 4.44518], [36.03924, 4.44406], [35.95449, 4.53244], [35.9419, 4.61933]]]] } },
+    { type: "Feature", properties: { iso1A2: "KG", iso1A3: "KGZ", iso1N3: "417", wikidata: "Q813", nameEn: "Kyrgyzstan", groups: ["143", "142", "UN"], callingCodes: ["996"] }, geometry: { type: "MultiPolygon", coordinates: [[[[74.88756, 42.98612], [74.75, 42.99029], [74.70331, 43.02519], [74.64615, 43.05881], [74.57491, 43.13702], [74.22489, 43.24657], [73.55634, 43.03071], [73.50992, 42.82356], [73.44393, 42.43098], [71.88792, 42.83578], [71.62405, 42.76613], [71.53272, 42.8014], [71.2724, 42.77853], [71.22785, 42.69248], [71.17807, 42.67381], [71.15232, 42.60486], [70.97717, 42.50147], [70.85973, 42.30188], [70.94483, 42.26238], [71.13263, 42.28356], [71.28719, 42.18033], [70.69777, 41.92554], [70.17682, 41.5455], [70.48909, 41.40335], [70.67586, 41.47953], [70.78572, 41.36419], [70.77885, 41.24813], [70.86263, 41.23833], [70.9615, 41.16393], [71.02193, 41.19494], [71.11806, 41.15359], [71.25813, 41.18796], [71.27187, 41.11015], [71.34877, 41.16807], [71.40198, 41.09436], [71.46148, 41.13958], [71.43814, 41.19644], [71.46688, 41.31883], [71.57227, 41.29175], [71.6787, 41.42111], [71.65914, 41.49599], [71.73054, 41.54713], [71.71132, 41.43012], [71.76625, 41.4466], [71.83914, 41.3546], [71.91457, 41.2982], [71.85964, 41.19081], [72.07249, 41.11739], [72.10745, 41.15483], [72.16433, 41.16483], [72.17594, 41.15522], [72.14864, 41.13363], [72.1792, 41.10621], [72.21061, 41.05607], [72.17594, 41.02377], [72.18339, 40.99571], [72.324, 41.03381], [72.34026, 41.04539], [72.34757, 41.06104], [72.36138, 41.04384], [72.38511, 41.02785], [72.45206, 41.03018], [72.48742, 40.97136], [72.55109, 40.96046], [72.59136, 40.86947], [72.68157, 40.84942], [72.84291, 40.85512], [72.94454, 40.8094], [73.01869, 40.84681], [73.13267, 40.83512], [73.13412, 40.79122], [73.0612, 40.76678], [72.99133, 40.76457], [72.93296, 40.73089], [72.8722, 40.71111], [72.85372, 40.7116], [72.84754, 40.67229], [72.80137, 40.67856], [72.74866, 40.60873], [72.74894, 40.59592], [72.75982, 40.57273], [72.74862, 40.57131], [72.74768, 40.58051], [72.73995, 40.58409], [72.69579, 40.59778], [72.66713, 40.59076], [72.66713, 40.5219], [72.47795, 40.5532], [72.40517, 40.61917], [72.34406, 40.60144], [72.41714, 40.55736], [72.38384, 40.51535], [72.41513, 40.50856], [72.44191, 40.48222], [72.40346, 40.4007], [72.24368, 40.46091], [72.18648, 40.49893], [71.96401, 40.31907], [72.05464, 40.27586], [71.85002, 40.25647], [71.82646, 40.21872], [71.73054, 40.14818], [71.71719, 40.17886], [71.69621, 40.18492], [71.70569, 40.20391], [71.68386, 40.26984], [71.61931, 40.26775], [71.61725, 40.20615], [71.51549, 40.22986], [71.51215, 40.26943], [71.4246, 40.28619], [71.36663, 40.31593], [71.13042, 40.34106], [71.05901, 40.28765], [70.95789, 40.28761], [70.9818, 40.22392], [70.80495, 40.16813], [70.7928, 40.12797], [70.65827, 40.0981], [70.65946, 39.9878], [70.58912, 39.95211], [70.55033, 39.96619], [70.47557, 39.93216], [70.57384, 39.99394], [70.58297, 40.00891], [70.01283, 40.23288], [69.67001, 40.10639], [69.64704, 40.12165], [69.57615, 40.10524], [69.55555, 40.12296], [69.53794, 40.11833], [69.53855, 40.0887], [69.5057, 40.03277], [69.53615, 39.93991], [69.43557, 39.92877], [69.43134, 39.98431], [69.35649, 40.01994], [69.26938, 39.8127], [69.3594, 39.52516], [69.68677, 39.59281], [69.87491, 39.53882], [70.11111, 39.58223], [70.2869, 39.53141], [70.44757, 39.60128], [70.64087, 39.58792], [70.7854, 39.38933], [71.06418, 39.41586], [71.08752, 39.50704], [71.49814, 39.61397], [71.55856, 39.57588], [71.5517, 39.45722], [71.62688, 39.44056], [71.76816, 39.45456], [71.80164, 39.40631], [71.7522, 39.32031], [71.79202, 39.27355], [71.90601, 39.27674], [72.04059, 39.36704], [72.09689, 39.26823], [72.17242, 39.2661], [72.23834, 39.17248], [72.33173, 39.33093], [72.62027, 39.39696], [72.85934, 39.35116], [73.18454, 39.35536], [73.31912, 39.38615], [73.45096, 39.46677], [73.59831, 39.46425], [73.87018, 39.47879], [73.94683, 39.60733], [73.92354, 39.69565], [73.9051, 39.75073], [73.83006, 39.76136], [73.97049, 40.04378], [74.25533, 40.13191], [74.35063, 40.09742], [74.69875, 40.34668], [74.85996, 40.32857], [74.78168, 40.44886], [74.82013, 40.52197], [75.08243, 40.43945], [75.22834, 40.45382], [75.5854, 40.66874], [75.69663, 40.28642], [75.91361, 40.2948], [75.96168, 40.38064], [76.33659, 40.3482], [76.5261, 40.46114], [76.75681, 40.95354], [76.99302, 41.0696], [77.28004, 41.0033], [77.3693, 41.0375], [77.52723, 41.00227], [77.76206, 41.01574], [77.81287, 41.14307], [78.12873, 41.23091], [78.15757, 41.38565], [78.3732, 41.39603], [79.92977, 42.04113], [80.17842, 42.03211], [80.17807, 42.21166], [79.97364, 42.42816], [79.52921, 42.44778], [79.19763, 42.804], [78.91502, 42.76839], [78.48469, 42.89649], [75.82823, 42.94848], [75.72174, 42.79672], [75.29966, 42.86183], [75.22619, 42.85528], [74.88756, 42.98612]], [[70.74189, 39.86319], [70.63105, 39.77923], [70.59667, 39.83542], [70.54998, 39.85137], [70.52631, 39.86989], [70.53651, 39.89155], [70.74189, 39.86319]], [[71.86463, 39.98598], [71.84316, 39.95582], [71.7504, 39.93701], [71.71511, 39.96348], [71.78838, 40.01404], [71.86463, 39.98598]], [[71.21139, 40.03369], [71.1427, 39.95026], [71.23067, 39.93581], [71.16101, 39.88423], [71.10531, 39.91354], [71.04979, 39.89808], [71.10501, 39.95568], [71.09063, 39.99], [71.11668, 39.99291], [71.11037, 40.01984], [71.01035, 40.05481], [71.00236, 40.18154], [71.06305, 40.1771], [71.12218, 40.03052], [71.21139, 40.03369]]]] } },
+    { type: "Feature", properties: { iso1A2: "KH", iso1A3: "KHM", iso1N3: "116", wikidata: "Q424", nameEn: "Cambodia", groups: ["035", "142", "UN"], callingCodes: ["855"] }, geometry: { type: "MultiPolygon", coordinates: [[[[105.87328, 11.55953], [105.81645, 11.56876], [105.80867, 11.60536], [105.8507, 11.66635], [105.88962, 11.67854], [105.95188, 11.63738], [106.00792, 11.7197], [106.02038, 11.77457], [106.06708, 11.77761], [106.13158, 11.73283], [106.18539, 11.75171], [106.26478, 11.72122], [106.30525, 11.67549], [106.37219, 11.69836], [106.44691, 11.66787], [106.45158, 11.68616], [106.41577, 11.76999], [106.44535, 11.8279], [106.44068, 11.86294], [106.4687, 11.86751], [106.4111, 11.97413], [106.70687, 11.96956], [106.79405, 12.0807], [106.92325, 12.06548], [106.99953, 12.08983], [107.15831, 12.27547], [107.34511, 12.33327], [107.42917, 12.24657], [107.4463, 12.29373], [107.55059, 12.36824], [107.5755, 12.52177], [107.55993, 12.7982], [107.49611, 12.88926], [107.49144, 13.01215], [107.62843, 13.3668], [107.61909, 13.52577], [107.53503, 13.73908], [107.45252, 13.78897], [107.46498, 13.91593], [107.44318, 13.99751], [107.38247, 13.99147], [107.35757, 14.02319], [107.37158, 14.07906], [107.33577, 14.11832], [107.40427, 14.24509], [107.39493, 14.32655], [107.44941, 14.41552], [107.48521, 14.40346], [107.52569, 14.54665], [107.52102, 14.59034], [107.55371, 14.628], [107.54361, 14.69092], [107.47238, 14.61523], [107.44435, 14.52785], [107.37897, 14.54443], [107.3276, 14.58812], [107.29803, 14.58963], [107.26534, 14.54292], [107.256, 14.48716], [107.21241, 14.48716], [107.17038, 14.41782], [107.09722, 14.3937], [107.03962, 14.45099], [107.04585, 14.41782], [106.98825, 14.36806], [106.9649, 14.3198], [106.90574, 14.33639], [106.8497, 14.29416], [106.80767, 14.31226], [106.73762, 14.42687], [106.63333, 14.44194], [106.59908, 14.50977], [106.57106, 14.50525], [106.54148, 14.59565], [106.50723, 14.58963], [106.45898, 14.55045], [106.47766, 14.50977], [106.43874, 14.52032], [106.40916, 14.45249], [106.32355, 14.44043], [106.25194, 14.48415], [106.21302, 14.36203], [106.00131, 14.36957], [105.99509, 14.32734], [106.02311, 14.30623], [106.04801, 14.20363], [106.10872, 14.18401], [106.11962, 14.11307], [106.18656, 14.06324], [106.16632, 14.01794], [106.10094, 13.98471], [106.10405, 13.9137], [105.90791, 13.92881], [105.78182, 14.02247], [105.78338, 14.08438], [105.5561, 14.15684], [105.44869, 14.10703], [105.36775, 14.09948], [105.2759, 14.17496], [105.20894, 14.34967], [105.17748, 14.34432], [105.14012, 14.23873], [105.08408, 14.20402], [105.02804, 14.23722], [104.97667, 14.38806], [104.69335, 14.42726], [104.55014, 14.36091], [104.27616, 14.39861], [103.93836, 14.3398], [103.70175, 14.38052], [103.71109, 14.4348], [103.53518, 14.42575], [103.39353, 14.35639], [103.16469, 14.33075], [102.93275, 14.19044], [102.91251, 14.01531], [102.77864, 13.93374], [102.72727, 13.77806], [102.56848, 13.69366], [102.5481, 13.6589], [102.58635, 13.6286], [102.62483, 13.60883], [102.57573, 13.60461], [102.5358, 13.56933], [102.44601, 13.5637], [102.36859, 13.57488], [102.33828, 13.55613], [102.361, 13.50551], [102.35563, 13.47307], [102.35692, 13.38274], [102.34611, 13.35618], [102.36001, 13.31142], [102.36146, 13.26006], [102.43422, 13.09061], [102.46011, 13.08057], [102.52275, 12.99813], [102.48694, 12.97537], [102.49335, 12.92711], [102.53053, 12.77506], [102.4994, 12.71736], [102.51963, 12.66117], [102.57567, 12.65358], [102.7796, 12.43781], [102.78116, 12.40284], [102.73134, 12.37091], [102.70176, 12.1686], [102.77026, 12.06815], [102.78427, 11.98746], [102.83957, 11.8519], [102.90973, 11.75613], [102.91449, 11.65512], [102.52395, 11.25257], [102.47649, 9.66162], [103.99198, 10.48391], [104.43778, 10.42386], [104.47963, 10.43046], [104.49869, 10.4057], [104.59018, 10.53073], [104.87933, 10.52833], [104.95094, 10.64003], [105.09571, 10.72722], [105.02722, 10.89236], [105.08326, 10.95656], [105.11449, 10.96332], [105.34011, 10.86179], [105.42884, 10.96878], [105.50045, 10.94586], [105.77751, 11.03671], [105.86376, 10.89839], [105.84603, 10.85873], [105.93403, 10.83853], [105.94535, 10.9168], [106.06708, 10.8098], [106.18539, 10.79451], [106.14301, 10.98176], [106.20095, 10.97795], [106.1757, 11.07301], [106.1527, 11.10476], [106.10444, 11.07879], [105.86782, 11.28343], [105.88962, 11.43605], [105.87328, 11.55953]]]] } },
+    { type: "Feature", properties: { iso1A2: "KI", iso1A3: "KIR", iso1N3: "296", wikidata: "Q710", nameEn: "Kiribati", groups: ["057", "009", "UN"], driveSide: "left", callingCodes: ["686"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169, 3.9], [169, -3.5], [178, -3.5], [178, 3.9], [169, 3.9]]], [[[-161.06795, 5.2462], [-158.12991, -1.86122], [-175.33482, -1.40631], [-175.31804, -7.54825], [-156.50903, -7.4975], [-156.48634, -15.52824], [-135.59706, -4.70473], [-161.06795, 5.2462]]]] } },
+    { type: "Feature", properties: { iso1A2: "KM", iso1A3: "COM", iso1N3: "174", wikidata: "Q970", nameEn: "Comoros", groups: ["014", "202", "002", "UN"], callingCodes: ["269"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.63904, -10.02522], [43.28731, -13.97126], [45.4971, -11.75965], [42.63904, -10.02522]]]] } },
+    { type: "Feature", properties: { iso1A2: "KN", iso1A3: "KNA", iso1N3: "659", wikidata: "Q763", nameEn: "St. Kitts and Nevis", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 869"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.29333, 17.43155], [-62.76692, 17.64353], [-63.09677, 17.21372], [-62.63813, 16.65446], [-62.29333, 17.43155]]]] } },
+    { type: "Feature", properties: { iso1A2: "KP", iso1A3: "PRK", iso1N3: "408", wikidata: "Q423", nameEn: "North Korea", groups: ["030", "142", "UN"], callingCodes: ["850"] }, geometry: { type: "MultiPolygon", coordinates: [[[[130.26095, 42.9027], [130.09764, 42.91425], [130.12957, 42.98361], [129.96409, 42.97306], [129.95082, 43.01051], [129.8865, 43.00395], [129.85261, 42.96494], [129.83277, 42.86746], [129.80719, 42.79218], [129.7835, 42.76521], [129.77183, 42.69435], [129.75294, 42.59409], [129.72541, 42.43739], [129.60482, 42.44461], [129.54701, 42.37254], [129.42882, 42.44702], [129.28541, 42.41574], [129.22423, 42.3553], [129.22285, 42.26491], [129.15178, 42.17224], [128.96068, 42.06657], [128.94007, 42.03537], [128.04487, 42.01769], [128.15119, 41.74568], [128.30716, 41.60322], [128.20061, 41.40895], [128.18546, 41.41279], [128.12967, 41.37931], [128.03311, 41.39232], [128.02633, 41.42103], [127.92943, 41.44291], [127.29712, 41.49473], [127.17841, 41.59714], [126.90729, 41.79955], [126.60631, 41.65565], [126.53189, 41.35206], [126.242, 41.15454], [126.00335, 40.92835], [125.76869, 40.87908], [125.71172, 40.85223], [124.86913, 40.45387], [124.40719, 40.13655], [124.38556, 40.11047], [124.3322, 40.05573], [124.37089, 40.03004], [124.35029, 39.95639], [124.23201, 39.9248], [124.17532, 39.8232], [123.90497, 38.79949], [123.85601, 37.49093], [124.67666, 38.05679], [124.84224, 37.977], [124.87921, 37.80827], [125.06408, 37.66334], [125.37112, 37.62643], [125.81159, 37.72949], [126.13074, 37.70512], [126.18776, 37.74728], [126.19097, 37.81462], [126.24402, 37.83113], [126.43239, 37.84095], [126.46818, 37.80873], [126.56709, 37.76857], [126.59918, 37.76364], [126.66067, 37.7897], [126.68793, 37.83728], [126.68793, 37.9175], [126.67023, 37.95852], [126.84961, 38.0344], [126.88106, 38.10246], [126.95887, 38.1347], [126.95338, 38.17735], [127.04479, 38.25518], [127.15749, 38.30722], [127.38727, 38.33227], [127.49672, 38.30647], [127.55013, 38.32257], [128.02917, 38.31861], [128.27652, 38.41657], [128.31105, 38.58462], [128.37487, 38.62345], [128.65655, 38.61914], [131.95041, 41.5445], [130.65022, 42.32281], [130.66367, 42.38024], [130.64181, 42.41422], [130.60805, 42.4317], [130.56835, 42.43281], [130.55143, 42.52158], [130.50123, 42.61636], [130.44361, 42.54849], [130.41826, 42.6011], [130.2385, 42.71127], [130.23068, 42.80125], [130.26095, 42.9027]]]] } },
+    { type: "Feature", properties: { iso1A2: "KR", iso1A3: "KOR", iso1N3: "410", wikidata: "Q884", nameEn: "South Korea", groups: ["030", "142", "UN"], callingCodes: ["82"] }, geometry: { type: "MultiPolygon", coordinates: [[[[133.11729, 37.53115], [128.65655, 38.61914], [128.37487, 38.62345], [128.31105, 38.58462], [128.27652, 38.41657], [128.02917, 38.31861], [127.55013, 38.32257], [127.49672, 38.30647], [127.38727, 38.33227], [127.15749, 38.30722], [127.04479, 38.25518], [126.95338, 38.17735], [126.95887, 38.1347], [126.88106, 38.10246], [126.84961, 38.0344], [126.67023, 37.95852], [126.68793, 37.9175], [126.68793, 37.83728], [126.66067, 37.7897], [126.59918, 37.76364], [126.56709, 37.76857], [126.46818, 37.80873], [126.43239, 37.84095], [126.24402, 37.83113], [126.19097, 37.81462], [126.18776, 37.74728], [126.13074, 37.70512], [125.81159, 37.72949], [125.37112, 37.62643], [125.06408, 37.66334], [124.87921, 37.80827], [124.84224, 37.977], [124.67666, 38.05679], [123.85601, 37.49093], [122.80525, 33.30571], [125.99728, 32.63328], [129.2669, 34.87122], [133.11729, 37.53115]]]] } },
+    { type: "Feature", properties: { iso1A2: "KW", iso1A3: "KWT", iso1N3: "414", wikidata: "Q817", nameEn: "Kuwait", groups: ["145", "142", "UN"], callingCodes: ["965"] }, geometry: { type: "MultiPolygon", coordinates: [[[[49.00421, 28.81495], [48.59531, 29.66815], [48.40479, 29.85763], [48.17332, 30.02448], [48.06782, 30.02906], [48.01114, 29.98906], [47.7095, 30.10453], [47.37192, 30.10421], [47.15166, 30.01044], [46.89695, 29.50584], [46.5527, 29.10283], [47.46202, 29.0014], [47.58376, 28.83382], [47.59863, 28.66798], [47.70561, 28.5221], [48.42991, 28.53628], [49.00421, 28.81495]]]] } },
+    { type: "Feature", properties: { iso1A2: "KY", iso1A3: "CYM", iso1N3: "136", wikidata: "Q5785", nameEn: "Cayman Islands", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 345"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-82.11509, 19.60401], [-80.36068, 18.11751], [-79.32727, 20.06742], [-82.11509, 19.60401]]]] } },
+    { type: "Feature", properties: { iso1A2: "KZ", iso1A3: "KAZ", iso1N3: "398", wikidata: "Q232", nameEn: "Kazakhstan", groups: ["143", "142", "UN"], callingCodes: ["7"] }, geometry: { type: "MultiPolygon", coordinates: [[[[68.90865, 55.38148], [68.19206, 55.18823], [68.26661, 55.09226], [68.21308, 54.98645], [65.20174, 54.55216], [65.24663, 54.35721], [65.11033, 54.33028], [64.97216, 54.4212], [63.97686, 54.29763], [64.02715, 54.22679], [63.91224, 54.20013], [63.80604, 54.27079], [62.58651, 54.05871], [62.56876, 53.94047], [62.45931, 53.90737], [62.38535, 54.03961], [62.00966, 54.04134], [62.03913, 53.94768], [61.65318, 54.02445], [61.56941, 53.95703], [61.47603, 54.08048], [61.3706, 54.08464], [61.26863, 53.92797], [60.99796, 53.93699], [61.14283, 53.90063], [61.22574, 53.80268], [60.90626, 53.62937], [61.55706, 53.57144], [61.57185, 53.50112], [61.37957, 53.45887], [61.29082, 53.50992], [61.14291, 53.41481], [61.19024, 53.30536], [62.14574, 53.09626], [62.12799, 52.99133], [62.0422, 52.96105], [61.23462, 53.03227], [61.05842, 52.92217], [60.71989, 52.75923], [60.71693, 52.66245], [60.84118, 52.63912], [60.84709, 52.52228], [60.98021, 52.50068], [61.05417, 52.35096], [60.78201, 52.22067], [60.72581, 52.15538], [60.48915, 52.15175], [60.19925, 51.99173], [59.99809, 51.98263], [60.09867, 51.87135], [60.50986, 51.7964], [60.36787, 51.66815], [60.5424, 51.61675], [60.92401, 51.61124], [60.95655, 51.48615], [61.50677, 51.40687], [61.55114, 51.32746], [61.6813, 51.25716], [61.56889, 51.23679], [61.4431, 50.80679], [60.81833, 50.6629], [60.31914, 50.67705], [60.17262, 50.83312], [60.01288, 50.8163], [59.81172, 50.54451], [59.51886, 50.49937], [59.48928, 50.64216], [58.87974, 50.70852], [58.3208, 51.15151], [57.75578, 51.13852], [57.74986, 50.93017], [57.44221, 50.88354], [57.17302, 51.11253], [56.17906, 50.93204], [56.11398, 50.7471], [55.67774, 50.54508], [54.72067, 51.03261], [54.56685, 51.01958], [54.71476, 50.61214], [54.55797, 50.52006], [54.41894, 50.61214], [54.46331, 50.85554], [54.12248, 51.11542], [53.69299, 51.23466], [53.46165, 51.49445], [52.54329, 51.48444], [52.36119, 51.74161], [51.8246, 51.67916], [51.77431, 51.49536], [51.301, 51.48799], [51.26254, 51.68466], [50.59695, 51.61859], [50.26859, 51.28677], [49.97277, 51.2405], [49.76866, 51.11067], [49.39001, 51.09396], [49.41959, 50.85927], [49.12673, 50.78639], [48.86936, 50.61589], [48.57946, 50.63278], [48.90782, 50.02281], [48.68352, 49.89546], [48.42564, 49.82283], [48.24519, 49.86099], [48.10044, 50.09242], [47.58551, 50.47867], [47.30448, 50.30894], [47.34589, 50.09308], [47.18319, 49.93721], [46.9078, 49.86707], [46.78398, 49.34026], [47.04658, 49.19834], [47.00857, 49.04921], [46.78392, 48.95352], [46.49011, 48.43019], [47.11516, 48.27188], [47.12107, 47.83687], [47.38731, 47.68176], [47.41689, 47.83687], [47.64973, 47.76559], [48.15348, 47.74545], [48.45173, 47.40818], [48.52326, 47.4102], [49.01136, 46.72716], [48.51142, 46.69268], [48.54988, 46.56267], [49.16518, 46.38542], [49.32259, 46.26944], [49.88945, 46.04554], [49.2134, 44.84989], [52.26048, 41.69249], [52.47884, 41.78034], [52.97575, 42.1308], [54.20635, 42.38477], [54.95182, 41.92424], [55.45471, 41.25609], [56.00314, 41.32584], [55.97584, 44.99322], [55.97584, 44.99328], [55.97584, 44.99338], [55.97584, 44.99343], [55.97584, 44.99348], [55.97584, 44.99353], [55.97584, 44.99359], [55.97584, 44.99369], [55.97584, 44.99374], [55.97584, 44.99384], [55.97584, 44.9939], [55.97584, 44.994], [55.97584, 44.99405], [55.97584, 44.99415], [55.97584, 44.99421], [55.97584, 44.99426], [55.97584, 44.99431], [55.97584, 44.99436], [55.97584, 44.99441], [55.97594, 44.99446], [55.97605, 44.99452], [55.97605, 44.99457], [55.97605, 44.99462], [55.97605, 44.99467], [55.97605, 44.99477], [55.97615, 44.99477], [55.97615, 44.99483], [55.97615, 44.99493], [55.97615, 44.99498], [55.97615, 44.99503], [55.97615, 44.99508], [55.97625, 44.99514], [55.97636, 44.99519], [55.97636, 44.99524], [55.97646, 44.99529], [55.97646, 44.99534], [55.97656, 44.99539], [55.97667, 44.99545], [55.97677, 44.9955], [55.97677, 44.99555], [55.97677, 44.9956], [55.97687, 44.9956], [55.97698, 44.99565], [55.97698, 44.9957], [55.97708, 44.99576], [55.97718, 44.99581], [55.97729, 44.99586], [55.97739, 44.99586], [55.97739, 44.99591], [55.97749, 44.99591], [55.9776, 44.99591], [55.9777, 44.99596], [55.9777, 44.99601], [55.9778, 44.99607], [55.97791, 44.99607], [55.97801, 44.99607], [55.97801, 44.99612], [55.97811, 44.99617], [55.97822, 44.99617], [55.97832, 44.99622], [55.97842, 44.99622], [58.59711, 45.58671], [61.01475, 44.41383], [62.01711, 43.51008], [63.34656, 43.64003], [64.53885, 43.56941], [64.96464, 43.74748], [65.18666, 43.48835], [65.53277, 43.31856], [65.85194, 42.85481], [66.09482, 42.93426], [66.00546, 41.94455], [66.53302, 41.87388], [66.69129, 41.1311], [67.9644, 41.14611], [67.98511, 41.02794], [68.08273, 41.08148], [68.1271, 41.0324], [67.96736, 40.83798], [68.49983, 40.56437], [68.63, 40.59358], [68.58444, 40.91447], [68.49983, 40.99669], [68.62221, 41.03019], [68.65662, 40.93861], [68.73945, 40.96989], [68.7217, 41.05025], [69.01308, 41.22804], [69.05006, 41.36183], [69.15137, 41.43078], [69.17701, 41.43769], [69.18528, 41.45175], [69.20439, 41.45391], [69.22671, 41.46298], [69.23332, 41.45847], [69.25059, 41.46693], [69.29778, 41.43673], [69.35554, 41.47211], [69.37468, 41.46555], [69.45081, 41.46246], [69.39485, 41.51518], [69.45751, 41.56863], [69.49545, 41.545], [70.94483, 42.26238], [70.85973, 42.30188], [70.97717, 42.50147], [71.15232, 42.60486], [71.17807, 42.67381], [71.22785, 42.69248], [71.2724, 42.77853], [71.53272, 42.8014], [71.62405, 42.76613], [71.88792, 42.83578], [73.44393, 42.43098], [73.50992, 42.82356], [73.55634, 43.03071], [74.22489, 43.24657], [74.57491, 43.13702], [74.64615, 43.05881], [74.70331, 43.02519], [74.75, 42.99029], [74.88756, 42.98612], [75.22619, 42.85528], [75.29966, 42.86183], [75.72174, 42.79672], [75.82823, 42.94848], [78.48469, 42.89649], [78.91502, 42.76839], [79.19763, 42.804], [79.52921, 42.44778], [79.97364, 42.42816], [80.17807, 42.21166], [80.26841, 42.23797], [80.16892, 42.61137], [80.26886, 42.8366], [80.38169, 42.83142], [80.58999, 42.9011], [80.3735, 43.01557], [80.62913, 43.141], [80.78817, 43.14235], [80.77771, 43.30065], [80.69718, 43.32589], [80.75156, 43.44948], [80.40031, 44.10986], [80.40229, 44.23319], [80.38384, 44.63073], [79.8987, 44.89957], [80.11169, 45.03352], [81.73278, 45.3504], [82.51374, 45.1755], [82.58474, 45.40027], [82.21792, 45.56619], [83.04622, 47.19053], [83.92184, 46.98912], [84.73077, 47.01394], [84.93995, 46.87399], [85.22443, 47.04816], [85.54294, 47.06171], [85.69696, 47.2898], [85.61067, 47.49753], [85.5169, 48.05493], [85.73581, 48.3939], [86.38069, 48.46064], [86.75343, 48.70331], [86.73568, 48.99918], [86.87238, 49.12432], [87.28386, 49.11626], [87.31465, 49.23603], [87.03071, 49.25142], [86.82606, 49.51796], [86.61307, 49.60239], [86.79056, 49.74787], [86.63674, 49.80136], [86.18709, 49.50259], [85.24047, 49.60239], [84.99198, 50.06793], [84.29385, 50.27257], [83.8442, 50.87375], [83.14607, 51.00796], [82.55443, 50.75412], [81.94999, 50.79307], [81.46581, 50.77658], [81.41248, 50.97524], [81.06091, 50.94833], [81.16999, 51.15662], [80.80318, 51.28262], [80.44819, 51.20855], [80.4127, 50.95581], [80.08138, 50.77658], [79.11255, 52.01171], [77.90383, 53.29807], [76.54243, 53.99329], [76.44076, 54.16017], [76.82266, 54.1798], [76.91052, 54.4677], [75.3668, 54.07439], [75.43398, 53.98652], [75.07405, 53.80831], [73.39218, 53.44623], [73.25412, 53.61532], [73.68921, 53.86522], [73.74778, 54.07194], [73.37963, 53.96132], [72.71026, 54.1161], [72.43415, 53.92685], [72.17477, 54.36303], [71.96141, 54.17736], [71.10379, 54.13326], [71.08706, 54.33376], [71.24185, 54.64965], [71.08288, 54.71253], [70.96009, 55.10558], [70.76493, 55.3027], [70.19179, 55.1476], [69.74917, 55.35545], [69.34224, 55.36344], [68.90865, 55.38148]]]] } },
+    { type: "Feature", properties: { iso1A2: "LA", iso1A3: "LAO", iso1N3: "418", wikidata: "Q819", nameEn: "Laos", groups: ["035", "142", "UN"], callingCodes: ["856"] }, geometry: { type: "MultiPolygon", coordinates: [[[[102.1245, 22.43372], [102.03633, 22.46164], [101.98487, 22.42766], [101.91344, 22.44417], [101.90714, 22.38688], [101.86828, 22.38397], [101.7685, 22.50337], [101.68973, 22.46843], [101.61306, 22.27515], [101.56789, 22.28876], [101.53638, 22.24794], [101.60675, 22.13513], [101.57525, 22.13026], [101.62566, 21.96574], [101.7791, 21.83019], [101.74555, 21.72852], [101.83257, 21.61562], [101.80001, 21.57461], [101.7475, 21.5873], [101.7727, 21.51794], [101.74224, 21.48276], [101.74014, 21.30967], [101.84412, 21.25291], [101.83887, 21.20983], [101.76745, 21.21571], [101.79266, 21.19025], [101.7622, 21.14813], [101.70548, 21.14911], [101.66977, 21.20004], [101.60886, 21.17947], [101.59491, 21.18621], [101.6068, 21.23329], [101.54563, 21.25668], [101.29326, 21.17254], [101.2229, 21.23271], [101.26912, 21.36482], [101.19349, 21.41959], [101.2124, 21.56422], [101.15156, 21.56129], [101.16198, 21.52808], [101.00234, 21.39612], [100.80173, 21.2934], [100.72716, 21.31786], [100.63578, 21.05639], [100.55281, 21.02796], [100.50974, 20.88574], [100.64628, 20.88279], [100.60112, 20.8347], [100.51079, 20.82194], [100.36375, 20.82783], [100.1957, 20.68247], [100.08404, 20.36626], [100.09999, 20.31614], [100.09337, 20.26293], [100.11785, 20.24787], [100.1712, 20.24324], [100.16668, 20.2986], [100.22076, 20.31598], [100.25769, 20.3992], [100.33383, 20.4028], [100.37439, 20.35156], [100.41473, 20.25625], [100.44992, 20.23644], [100.4537, 20.19971], [100.47567, 20.19133], [100.51052, 20.14928], [100.55218, 20.17741], [100.58808, 20.15791], [100.5094, 19.87904], [100.398, 19.75047], [100.49604, 19.53504], [100.58219, 19.49164], [100.64606, 19.55884], [100.77231, 19.48324], [100.90302, 19.61901], [101.08928, 19.59748], [101.26545, 19.59242], [101.26991, 19.48324], [101.21347, 19.46223], [101.20604, 19.35296], [101.24911, 19.33334], [101.261, 19.12717], [101.35606, 19.04716], [101.25803, 18.89545], [101.22832, 18.73377], [101.27585, 18.68875], [101.06047, 18.43247], [101.18227, 18.34367], [101.15108, 18.25624], [101.19118, 18.2125], [101.1793, 18.0544], [101.02185, 17.87637], [100.96541, 17.57926], [101.15108, 17.47586], [101.44667, 17.7392], [101.72294, 17.92867], [101.78087, 18.07559], [101.88485, 18.02474], [102.11359, 18.21532], [102.45523, 17.97106], [102.59234, 17.96127], [102.60971, 17.95411], [102.61432, 17.92273], [102.5896, 17.84889], [102.59485, 17.83537], [102.68194, 17.80151], [102.69946, 17.81686], [102.67543, 17.84529], [102.68538, 17.86653], [102.75954, 17.89561], [102.79044, 17.93612], [102.81988, 17.94233], [102.86323, 17.97531], [102.95812, 18.0054], [102.9912, 17.9949], [103.01998, 17.97095], [103.0566, 18.00144], [103.07823, 18.03833], [103.07343, 18.12351], [103.1493, 18.17799], [103.14994, 18.23172], [103.17093, 18.2618], [103.29757, 18.30475], [103.23818, 18.34875], [103.24779, 18.37807], [103.30977, 18.4341], [103.41044, 18.4486], [103.47773, 18.42841], [103.60957, 18.40528], [103.699, 18.34125], [103.82449, 18.33979], [103.85642, 18.28666], [103.93916, 18.33914], [103.97725, 18.33631], [104.06533, 18.21656], [104.10927, 18.10826], [104.21776, 17.99335], [104.2757, 17.86139], [104.35432, 17.82871], [104.45404, 17.66788], [104.69867, 17.53038], [104.80061, 17.39367], [104.80716, 17.19025], [104.73712, 17.01404], [104.7373, 16.91125], [104.76442, 16.84752], [104.7397, 16.81005], [104.76099, 16.69302], [104.73349, 16.565], [104.88057, 16.37311], [105.00262, 16.25627], [105.06204, 16.09792], [105.42001, 16.00657], [105.38508, 15.987], [105.34115, 15.92737], [105.37959, 15.84074], [105.42285, 15.76971], [105.46573, 15.74742], [105.61756, 15.68792], [105.60446, 15.53301], [105.58191, 15.41031], [105.47635, 15.3796], [105.4692, 15.33709], [105.50662, 15.32054], [105.58043, 15.32724], [105.46661, 15.13132], [105.61162, 15.00037], [105.5121, 14.80802], [105.53864, 14.55731], [105.43783, 14.43865], [105.20894, 14.34967], [105.2759, 14.17496], [105.36775, 14.09948], [105.44869, 14.10703], [105.5561, 14.15684], [105.78338, 14.08438], [105.78182, 14.02247], [105.90791, 13.92881], [106.10405, 13.9137], [106.10094, 13.98471], [106.16632, 14.01794], [106.18656, 14.06324], [106.11962, 14.11307], [106.10872, 14.18401], [106.04801, 14.20363], [106.02311, 14.30623], [105.99509, 14.32734], [106.00131, 14.36957], [106.21302, 14.36203], [106.25194, 14.48415], [106.32355, 14.44043], [106.40916, 14.45249], [106.43874, 14.52032], [106.47766, 14.50977], [106.45898, 14.55045], [106.50723, 14.58963], [106.54148, 14.59565], [106.57106, 14.50525], [106.59908, 14.50977], [106.63333, 14.44194], [106.73762, 14.42687], [106.80767, 14.31226], [106.8497, 14.29416], [106.90574, 14.33639], [106.9649, 14.3198], [106.98825, 14.36806], [107.04585, 14.41782], [107.03962, 14.45099], [107.09722, 14.3937], [107.17038, 14.41782], [107.21241, 14.48716], [107.256, 14.48716], [107.26534, 14.54292], [107.29803, 14.58963], [107.3276, 14.58812], [107.37897, 14.54443], [107.44435, 14.52785], [107.47238, 14.61523], [107.54361, 14.69092], [107.51579, 14.79282], [107.59285, 14.87795], [107.48277, 14.93751], [107.46516, 15.00982], [107.61486, 15.0566], [107.61926, 15.13949], [107.58844, 15.20111], [107.62587, 15.2266], [107.60605, 15.37524], [107.62367, 15.42193], [107.53341, 15.40496], [107.50699, 15.48771], [107.3815, 15.49832], [107.34408, 15.62345], [107.27583, 15.62769], [107.27143, 15.71459], [107.21859, 15.74638], [107.21419, 15.83747], [107.34188, 15.89464], [107.39471, 15.88829], [107.46296, 16.01106], [107.44975, 16.08511], [107.33968, 16.05549], [107.25822, 16.13587], [107.14595, 16.17816], [107.15035, 16.26271], [107.09091, 16.3092], [107.02597, 16.31132], [106.97385, 16.30204], [106.96638, 16.34938], [106.88067, 16.43594], [106.88727, 16.52671], [106.84104, 16.55415], [106.74418, 16.41904], [106.65832, 16.47816], [106.66052, 16.56892], [106.61477, 16.60713], [106.58267, 16.6012], [106.59013, 16.62259], [106.55485, 16.68704], [106.55265, 16.86831], [106.52183, 16.87884], [106.51963, 16.92097], [106.54824, 16.92729], [106.55045, 17.0031], [106.50862, 16.9673], [106.43597, 17.01362], [106.31929, 17.20509], [106.29287, 17.3018], [106.24444, 17.24714], [106.18991, 17.28227], [106.09019, 17.36399], [105.85744, 17.63221], [105.76612, 17.67147], [105.60381, 17.89356], [105.64784, 17.96687], [105.46292, 18.22008], [105.38366, 18.15315], [105.15942, 18.38691], [105.10408, 18.43533], [105.1327, 18.58355], [105.19654, 18.64196], [105.12829, 18.70453], [104.64617, 18.85668], [104.5361, 18.97747], [103.87125, 19.31854], [104.06058, 19.43484], [104.10832, 19.51575], [104.05617, 19.61743], [104.06498, 19.66926], [104.23229, 19.70242], [104.41281, 19.70035], [104.53169, 19.61743], [104.64837, 19.62365], [104.68359, 19.72729], [104.8355, 19.80395], [104.8465, 19.91783], [104.9874, 20.09573], [104.91695, 20.15567], [104.86852, 20.14121], [104.61315, 20.24452], [104.62195, 20.36633], [104.72102, 20.40554], [104.66158, 20.47774], [104.47886, 20.37459], [104.40621, 20.3849], [104.38199, 20.47155], [104.63957, 20.6653], [104.27412, 20.91433], [104.11121, 20.96779], [103.98024, 20.91531], [103.82282, 20.8732], [103.73478, 20.6669], [103.68633, 20.66324], [103.45737, 20.82382], [103.38032, 20.79501], [103.21497, 20.89832], [103.12055, 20.89994], [103.03469, 21.05821], [102.97745, 21.05821], [102.89825, 21.24707], [102.80794, 21.25736], [102.88939, 21.3107], [102.94223, 21.46034], [102.86297, 21.4255], [102.98846, 21.58936], [102.97965, 21.74076], [102.86077, 21.71213], [102.85637, 21.84501], [102.81894, 21.83888], [102.82115, 21.73667], [102.74189, 21.66713], [102.67145, 21.65894], [102.62301, 21.91447], [102.49092, 21.99002], [102.51734, 22.02676], [102.18712, 22.30403], [102.14099, 22.40092], [102.1245, 22.43372]]]] } },
+    { type: "Feature", properties: { iso1A2: "LB", iso1A3: "LBN", iso1N3: "422", wikidata: "Q822", nameEn: "Lebanon", aliases: ["RL"], groups: ["145", "142", "UN"], callingCodes: ["961"] }, geometry: { type: "MultiPolygon", coordinates: [[[[35.94816, 33.47886], [35.94465, 33.52774], [36.05723, 33.57904], [35.9341, 33.6596], [36.06778, 33.82927], [36.14517, 33.85118], [36.3967, 33.83365], [36.38263, 33.86579], [36.28589, 33.91981], [36.41078, 34.05253], [36.50576, 34.05982], [36.5128, 34.09916], [36.62537, 34.20251], [36.59195, 34.2316], [36.58667, 34.27667], [36.60778, 34.31009], [36.56556, 34.31881], [36.53039, 34.3798], [36.55853, 34.41609], [36.46179, 34.46541], [36.4442, 34.50165], [36.34745, 34.5002], [36.3369, 34.52629], [36.39846, 34.55672], [36.41429, 34.61175], [36.45299, 34.59438], [36.46003, 34.6378], [36.42941, 34.62505], [36.35384, 34.65447], [36.35135, 34.68516], [36.32399, 34.69334], [36.29165, 34.62991], [35.98718, 34.64977], [35.97386, 34.63322], [35.48515, 34.70851], [34.78515, 33.20368], [35.10645, 33.09318], [35.1924, 33.08743], [35.31429, 33.10515], [35.35223, 33.05617], [35.43059, 33.06659], [35.448, 33.09264], [35.50272, 33.09056], [35.50335, 33.114], [35.52573, 33.11921], [35.54228, 33.19865], [35.5362, 33.23196], [35.54808, 33.236], [35.54544, 33.25513], [35.55555, 33.25844], [35.56523, 33.28969], [35.58326, 33.28381], [35.58502, 33.26653], [35.62283, 33.24226], [35.62019, 33.27278], [35.77477, 33.33609], [35.81324, 33.36354], [35.82577, 33.40479], [35.88668, 33.43183], [35.94816, 33.47886]]]] } },
+    { type: "Feature", properties: { iso1A2: "LC", iso1A3: "LCA", iso1N3: "662", wikidata: "Q760", nameEn: "St. Lucia", aliases: ["WL"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 758"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-59.95997, 14.20285], [-61.69315, 14.26451], [-59.94058, 12.34011], [-59.95997, 14.20285]]]] } },
+    { type: "Feature", properties: { iso1A2: "LI", iso1A3: "LIE", iso1N3: "438", wikidata: "Q347", nameEn: "Liechtenstein", aliases: ["FL"], groups: ["155", "150", "UN"], callingCodes: ["423"] }, geometry: { type: "MultiPolygon", coordinates: [[[[9.60717, 47.06091], [9.61216, 47.07732], [9.63395, 47.08443], [9.62623, 47.14685], [9.56539, 47.17124], [9.58264, 47.20673], [9.56981, 47.21926], [9.55176, 47.22585], [9.56766, 47.24281], [9.53116, 47.27029], [9.52406, 47.24959], [9.50318, 47.22153], [9.4891, 47.19346], [9.48774, 47.17402], [9.51044, 47.13727], [9.52089, 47.10019], [9.51362, 47.08505], [9.47139, 47.06402], [9.47548, 47.05257], [9.54041, 47.06495], [9.55721, 47.04762], [9.60717, 47.06091]]]] } },
+    { type: "Feature", properties: { iso1A2: "LK", iso1A3: "LKA", iso1N3: "144", wikidata: "Q854", nameEn: "Sri Lanka", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["94"] }, geometry: { type: "MultiPolygon", coordinates: [[[[76.59015, 5.591], [85.15017, 5.21497], [80.48418, 10.20786], [79.42124, 9.80115], [79.50447, 8.91876], [76.59015, 5.591]]]] } },
+    { type: "Feature", properties: { iso1A2: "LR", iso1A3: "LBR", iso1N3: "430", wikidata: "Q1014", nameEn: "Liberia", groups: ["011", "202", "002", "UN"], callingCodes: ["231"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-8.47114, 7.55676], [-8.55874, 7.62525], [-8.55874, 7.70167], [-8.67814, 7.69428], [-8.72789, 7.51429], [-8.8448, 7.35149], [-8.85724, 7.26019], [-8.93435, 7.2824], [-9.09107, 7.1985], [-9.18311, 7.30461], [-9.20798, 7.38109], [-9.305, 7.42056], [-9.41943, 7.41809], [-9.48161, 7.37122], [-9.37465, 7.62032], [-9.35724, 7.74111], [-9.44928, 7.9284], [-9.41445, 8.02448], [-9.50898, 8.18455], [-9.47415, 8.35195], [-9.77763, 8.54633], [-10.05873, 8.42578], [-10.05375, 8.50697], [-10.14579, 8.52665], [-10.203, 8.47991], [-10.27575, 8.48711], [-10.30084, 8.30008], [-10.31635, 8.28554], [-10.29839, 8.21283], [-10.35227, 8.15223], [-10.45023, 8.15627], [-10.51554, 8.1393], [-10.57523, 8.04829], [-10.60492, 8.04072], [-10.60422, 7.7739], [-11.29417, 7.21576], [-11.4027, 6.97746], [-11.50429, 6.92704], [-12.15048, 6.15992], [-7.52774, 3.7105], [-7.53259, 4.35145], [-7.59349, 4.8909], [-7.53876, 4.94294], [-7.55369, 5.08667], [-7.48901, 5.14118], [-7.46165, 5.26256], [-7.36463, 5.32944], [-7.43428, 5.42355], [-7.37209, 5.61173], [-7.43926, 5.74787], [-7.43677, 5.84687], [-7.46165, 5.84934], [-7.48155, 5.80974], [-7.67309, 5.94337], [-7.70294, 5.90625], [-7.78254, 5.99037], [-7.79747, 6.07696], [-7.8497, 6.08932], [-7.83478, 6.20309], [-7.90692, 6.27728], [-8.00642, 6.31684], [-8.17557, 6.28222], [-8.3298, 6.36381], [-8.38453, 6.35887], [-8.45666, 6.49977], [-8.48652, 6.43797], [-8.59456, 6.50612], [-8.31736, 6.82837], [-8.29249, 7.1691], [-8.37458, 7.25794], [-8.41935, 7.51203], [-8.47114, 7.55676]]]] } },
+    { type: "Feature", properties: { iso1A2: "LS", iso1A3: "LSO", iso1N3: "426", wikidata: "Q1013", nameEn: "Lesotho", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["266"] }, geometry: { type: "MultiPolygon", coordinates: [[[[29.33204, -29.45598], [29.44883, -29.3772], [29.40524, -29.21246], [28.68043, -28.58744], [28.65091, -28.57025], [28.40612, -28.6215], [28.30518, -28.69531], [28.2348, -28.69471], [28.1317, -28.7293], [28.02503, -28.85991], [27.98675, -28.8787], [27.9392, -28.84864], [27.88933, -28.88156], [27.8907, -28.91612], [27.75458, -28.89839], [27.55974, -29.18954], [27.5158, -29.2261], [27.54258, -29.25575], [27.48679, -29.29349], [27.45125, -29.29708], [27.47254, -29.31968], [27.4358, -29.33465], [27.33464, -29.48161], [27.01016, -29.65439], [27.09489, -29.72796], [27.22719, -30.00718], [27.29603, -30.05473], [27.32555, -30.14785], [27.40778, -30.14577], [27.37293, -30.19401], [27.36649, -30.27246], [27.38108, -30.33456], [27.45452, -30.32239], [27.56901, -30.42504], [27.56781, -30.44562], [27.62137, -30.50509], [27.6521, -30.51707], [27.67819, -30.53437], [27.69467, -30.55862], [27.74814, -30.60635], [28.12073, -30.68072], [28.2319, -30.28476], [28.399, -30.1592], [28.68627, -30.12885], [28.80222, -30.10579], [28.9338, -30.05072], [29.16548, -29.91706], [29.12553, -29.76266], [29.28545, -29.58456], [29.33204, -29.45598]]]] } },
+    { type: "Feature", properties: { iso1A2: "LT", iso1A3: "LTU", iso1N3: "440", wikidata: "Q37", nameEn: "Lithuania", groups: ["EU", "154", "150", "UN"], callingCodes: ["370"] }, geometry: { type: "MultiPolygon", coordinates: [[[[24.89005, 56.46666], [24.83686, 56.41565], [24.70022, 56.40483], [24.57353, 56.31525], [24.58143, 56.29125], [24.42746, 56.26522], [24.32334, 56.30226], [24.13139, 56.24881], [24.02657, 56.3231], [23.75726, 56.37282], [23.49803, 56.34307], [23.40486, 56.37689], [23.31606, 56.3827], [23.17312, 56.36795], [23.09531, 56.30511], [22.96988, 56.41213], [22.83048, 56.367], [22.69354, 56.36284], [22.56441, 56.39305], [22.3361, 56.4016], [22.09728, 56.42851], [22.00548, 56.41508], [21.74558, 56.33181], [21.57888, 56.31406], [21.49736, 56.29106], [21.24644, 56.16917], [21.15016, 56.07818], [20.68447, 56.04073], [20.60454, 55.40986], [20.95181, 55.27994], [21.26425, 55.24456], [21.35465, 55.28427], [21.38446, 55.29348], [21.46766, 55.21115], [21.51095, 55.18507], [21.55605, 55.20311], [21.64954, 55.1791], [21.85521, 55.09493], [21.96505, 55.07353], [21.99543, 55.08691], [22.03984, 55.07888], [22.02582, 55.05078], [22.06087, 55.02935], [22.11697, 55.02131], [22.14267, 55.05345], [22.31562, 55.0655], [22.47688, 55.04408], [22.58907, 55.07085], [22.60075, 55.01863], [22.65451, 54.97037], [22.68723, 54.9811], [22.76422, 54.92521], [22.85083, 54.88711], [22.87317, 54.79492], [22.73631, 54.72952], [22.73397, 54.66604], [22.75467, 54.6483], [22.74225, 54.64339], [22.7522, 54.63525], [22.68021, 54.58486], [22.71293, 54.56454], [22.67788, 54.532], [22.70208, 54.45312], [22.7253, 54.41732], [22.79705, 54.36264], [22.83756, 54.40827], [23.00584, 54.38514], [22.99649, 54.35927], [23.05726, 54.34565], [23.04323, 54.31567], [23.104, 54.29794], [23.13905, 54.31567], [23.15526, 54.31076], [23.15938, 54.29894], [23.24656, 54.25701], [23.3494, 54.25155], [23.39525, 54.21672], [23.42418, 54.17911], [23.45223, 54.17775], [23.49196, 54.14764], [23.52702, 54.04622], [23.48261, 53.98855], [23.51284, 53.95052], [23.61677, 53.92691], [23.71726, 53.93379], [23.80543, 53.89558], [23.81309, 53.94205], [23.95098, 53.9613], [23.98837, 53.92554], [24.19638, 53.96405], [24.34128, 53.90076], [24.44411, 53.90076], [24.62275, 54.00217], [24.69652, 54.01901], [24.69185, 53.96543], [24.74279, 53.96663], [24.85311, 54.02862], [24.77131, 54.11091], [24.96894, 54.17589], [24.991, 54.14241], [25.0728, 54.13419], [25.19199, 54.219], [25.22705, 54.26271], [25.35559, 54.26544], [25.509, 54.30267], [25.56823, 54.25212], [25.51452, 54.17799], [25.54724, 54.14925], [25.64875, 54.1259], [25.71084, 54.16704], [25.78563, 54.15747], [25.78553, 54.23327], [25.68513, 54.31727], [25.55425, 54.31591], [25.5376, 54.33158], [25.63371, 54.42075], [25.62203, 54.4656], [25.64813, 54.48704], [25.68045, 54.5321], [25.75977, 54.57252], [25.74122, 54.80108], [25.89462, 54.93438], [25.99129, 54.95705], [26.05907, 54.94631], [26.13386, 54.98924], [26.20397, 54.99729], [26.26941, 55.08032], [26.23202, 55.10439], [26.30628, 55.12536], [26.35121, 55.1525], [26.46249, 55.12814], [26.51481, 55.16051], [26.54753, 55.14181], [26.69243, 55.16718], [26.68075, 55.19787], [26.72983, 55.21788], [26.73017, 55.24226], [26.835, 55.28182], [26.83266, 55.30444], [26.80929, 55.31642], [26.6714, 55.33902], [26.5709, 55.32572], [26.44937, 55.34832], [26.5522, 55.40277], [26.55094, 55.5093], [26.63167, 55.57887], [26.63231, 55.67968], [26.58248, 55.6754], [26.46661, 55.70375], [26.39561, 55.71156], [26.18509, 55.86813], [26.03815, 55.95884], [25.90047, 56.0013], [25.85893, 56.00188], [25.81773, 56.05444], [25.69246, 56.08892], [25.68588, 56.14725], [25.53621, 56.16663], [25.39751, 56.15707], [25.23099, 56.19147], [25.09325, 56.1878], [25.05762, 56.26742], [24.89005, 56.46666]]]] } },
+    { type: "Feature", properties: { iso1A2: "LU", iso1A3: "LUX", iso1N3: "442", wikidata: "Q32", nameEn: "Luxembourg", groups: ["EU", "155", "150", "UN"], callingCodes: ["352"] }, geometry: { type: "MultiPolygon", coordinates: [[[[6.1379, 50.12964], [6.1137, 50.13668], [6.12028, 50.16374], [6.08577, 50.17246], [6.06406, 50.15344], [6.03093, 50.16362], [6.02488, 50.18283], [5.96453, 50.17259], [5.95929, 50.13295], [5.89488, 50.11476], [5.8857, 50.07824], [5.85474, 50.06342], [5.86904, 50.04614], [5.8551, 50.02683], [5.81866, 50.01286], [5.82331, 49.99662], [5.83968, 49.9892], [5.83467, 49.97823], [5.81163, 49.97142], [5.80833, 49.96451], [5.77291, 49.96056], [5.77314, 49.93646], [5.73621, 49.89796], [5.78415, 49.87922], [5.75269, 49.8711], [5.75861, 49.85631], [5.74567, 49.85368], [5.75884, 49.84811], [5.74953, 49.84709], [5.74975, 49.83933], [5.74076, 49.83823], [5.7404, 49.83452], [5.74844, 49.82435], [5.74364, 49.82058], [5.74953, 49.81428], [5.75409, 49.79239], [5.78871, 49.7962], [5.82245, 49.75048], [5.83149, 49.74729], [5.82562, 49.72395], [5.84193, 49.72161], [5.86503, 49.72739], [5.88677, 49.70951], [5.86527, 49.69291], [5.86175, 49.67862], [5.9069, 49.66377], [5.90164, 49.6511], [5.90599, 49.63853], [5.88552, 49.63507], [5.88393, 49.62802], [5.87609, 49.62047], [5.8762, 49.60898], [5.84826, 49.5969], [5.84971, 49.58674], [5.86986, 49.58756], [5.87256, 49.57539], [5.8424, 49.56082], [5.84692, 49.55663], [5.84143, 49.5533], [5.81838, 49.54777], [5.80871, 49.5425], [5.81664, 49.53775], [5.83648, 49.5425], [5.84466, 49.53027], [5.83467, 49.52717], [5.83389, 49.52152], [5.86571, 49.50015], [5.94128, 49.50034], [5.94224, 49.49608], [5.96876, 49.49053], [5.97693, 49.45513], [6.02648, 49.45451], [6.02743, 49.44845], [6.04176, 49.44801], [6.05553, 49.46663], [6.07887, 49.46399], [6.08373, 49.45594], [6.10072, 49.45268], [6.09845, 49.46351], [6.10325, 49.4707], [6.12346, 49.4735], [6.12814, 49.49365], [6.14321, 49.48796], [6.16115, 49.49297], [6.15366, 49.50226], [6.17386, 49.50934], [6.19543, 49.50536], [6.2409, 49.51408], [6.25029, 49.50609], [6.27875, 49.503], [6.28818, 49.48465], [6.3687, 49.4593], [6.36778, 49.46937], [6.36907, 49.48931], [6.36788, 49.50377], [6.35666, 49.52931], [6.38072, 49.55171], [6.38228, 49.55855], [6.35825, 49.57053], [6.36676, 49.57813], [6.38024, 49.57593], [6.38342, 49.5799], [6.37464, 49.58886], [6.385, 49.59946], [6.39822, 49.60081], [6.41861, 49.61723], [6.4413, 49.65722], [6.43768, 49.66021], [6.42726, 49.66078], [6.42937, 49.66857], [6.44654, 49.67799], [6.46048, 49.69092], [6.48014, 49.69767], [6.49785, 49.71118], [6.50647, 49.71353], [6.5042, 49.71808], [6.49694, 49.72205], [6.49535, 49.72645], [6.50261, 49.72718], [6.51397, 49.72058], [6.51805, 49.72425], [6.50193, 49.73291], [6.50174, 49.75292], [6.51646, 49.75961], [6.51828, 49.76855], [6.51056, 49.77515], [6.51669, 49.78336], [6.50534, 49.78952], [6.52169, 49.79787], [6.53122, 49.80666], [6.52121, 49.81338], [6.51215, 49.80124], [6.50647, 49.80916], [6.48718, 49.81267], [6.47111, 49.82263], [6.45425, 49.81164], [6.44131, 49.81443], [6.42905, 49.81091], [6.42521, 49.81591], [6.40022, 49.82029], [6.36576, 49.85032], [6.34267, 49.84974], [6.33585, 49.83785], [6.32098, 49.83728], [6.32303, 49.85133], [6.30963, 49.87021], [6.29692, 49.86685], [6.28874, 49.87592], [6.26146, 49.88203], [6.23496, 49.89972], [6.22926, 49.92096], [6.21882, 49.92403], [6.22608, 49.929], [6.22094, 49.94955], [6.19856, 49.95053], [6.19089, 49.96991], [6.18045, 49.96611], [6.18554, 49.95622], [6.17872, 49.9537], [6.16466, 49.97086], [6.1701, 49.98518], [6.14147, 49.99563], [6.14948, 50.00908], [6.13806, 50.01056], [6.1295, 50.01849], [6.13273, 50.02019], [6.13794, 50.01466], [6.14666, 50.02207], [6.13044, 50.02929], [6.13458, 50.04141], [6.11274, 50.05916], [6.12055, 50.09171], [6.1379, 50.12964]]]] } },
+    { type: "Feature", properties: { iso1A2: "LV", iso1A3: "LVA", iso1N3: "428", wikidata: "Q211", nameEn: "Latvia", groups: ["EU", "154", "150", "UN"], callingCodes: ["371"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.34698, 57.52242], [26.90364, 57.62823], [26.54675, 57.51813], [26.46527, 57.56885], [26.29253, 57.59244], [26.1866, 57.6849], [26.2029, 57.7206], [26.08098, 57.76619], [26.0543, 57.76105], [26.03332, 57.7718], [26.02415, 57.76865], [26.02069, 57.77169], [26.0266, 57.77441], [26.027, 57.78158], [26.02456, 57.78342], [26.0324, 57.79037], [26.05949, 57.84744], [25.73499, 57.90193], [25.29581, 58.08288], [25.28237, 57.98539], [25.19484, 58.0831], [24.3579, 57.87471], [24.26221, 57.91787], [23.20055, 57.56697], [22.80496, 57.87798], [19.84909, 57.57876], [19.64795, 57.06466], [20.68447, 56.04073], [21.15016, 56.07818], [21.24644, 56.16917], [21.49736, 56.29106], [21.57888, 56.31406], [21.74558, 56.33181], [22.00548, 56.41508], [22.09728, 56.42851], [22.3361, 56.4016], [22.56441, 56.39305], [22.69354, 56.36284], [22.83048, 56.367], [22.96988, 56.41213], [23.09531, 56.30511], [23.17312, 56.36795], [23.31606, 56.3827], [23.40486, 56.37689], [23.49803, 56.34307], [23.75726, 56.37282], [24.02657, 56.3231], [24.13139, 56.24881], [24.32334, 56.30226], [24.42746, 56.26522], [24.58143, 56.29125], [24.57353, 56.31525], [24.70022, 56.40483], [24.83686, 56.41565], [24.89005, 56.46666], [25.05762, 56.26742], [25.09325, 56.1878], [25.23099, 56.19147], [25.39751, 56.15707], [25.53621, 56.16663], [25.68588, 56.14725], [25.69246, 56.08892], [25.81773, 56.05444], [25.85893, 56.00188], [25.90047, 56.0013], [26.03815, 55.95884], [26.18509, 55.86813], [26.39561, 55.71156], [26.46661, 55.70375], [26.58248, 55.6754], [26.63231, 55.67968], [26.64888, 55.70515], [26.71802, 55.70645], [26.76872, 55.67658], [26.87448, 55.7172], [26.97153, 55.8102], [27.1559, 55.85032], [27.27804, 55.78299], [27.3541, 55.8089], [27.61683, 55.78558], [27.63065, 55.89687], [27.97865, 56.11849], [28.15217, 56.16964], [28.23716, 56.27588], [28.16599, 56.37806], [28.19057, 56.44637], [28.10069, 56.524], [28.13526, 56.57989], [28.04768, 56.59004], [27.86101, 56.88204], [27.66511, 56.83921], [27.86101, 57.29402], [27.52453, 57.42826], [27.56832, 57.53728], [27.34698, 57.52242]]]] } },
+    { type: "Feature", properties: { iso1A2: "LY", iso1A3: "LBY", iso1N3: "434", wikidata: "Q1016", nameEn: "Libya", groups: ["015", "002", "UN"], callingCodes: ["218"] }, geometry: { type: "MultiPolygon", coordinates: [[[[26.92891, 33.39516], [11.58941, 33.36891], [11.55852, 33.1409], [11.51549, 33.09826], [11.46037, 32.6307], [11.57828, 32.48013], [11.53898, 32.4138], [11.04234, 32.2145], [10.7315, 31.97235], [10.62788, 31.96629], [10.48497, 31.72956], [10.31364, 31.72648], [10.12239, 31.42098], [10.29516, 30.90337], [9.88152, 30.34074], [9.76848, 30.34366], [9.55544, 30.23971], [9.3876, 30.16738], [9.78136, 29.40961], [9.89569, 26.57696], [9.51696, 26.39148], [9.38834, 26.19288], [10.03146, 25.35635], [10.02432, 24.98124], [10.33159, 24.5465], [10.85323, 24.5595], [11.41061, 24.21456], [11.62498, 24.26669], [11.96886, 23.51735], [13.5631, 23.16574], [14.22918, 22.61719], [14.99751, 23.00539], [15.99566, 23.49639], [23.99539, 19.49944], [23.99715, 20.00038], [24.99794, 19.99661], [24.99885, 21.99535], [24.99968, 29.24574], [24.71117, 30.17441], [25.01077, 30.73861], [24.8458, 31.39877], [26.92891, 33.39516]]]] } },
+    { type: "Feature", properties: { iso1A2: "MA", iso1A3: "MAR", iso1N3: "504", wikidata: "Q1028", nameEn: "Morocco", groups: ["015", "002", "UN"], callingCodes: ["212"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-2.27707, 35.35051], [-5.10878, 36.05227], [-7.2725, 35.73269], [-14.43883, 27.02969], [-17.27295, 21.93519], [-17.21511, 21.34226], [-17.02707, 21.34022], [-16.9978, 21.36239], [-16.44269, 21.39745], [-14.78487, 21.36587], [-14.47329, 21.63839], [-14.48112, 22.00886], [-14.1291, 22.41636], [-14.10361, 22.75501], [-13.75627, 23.77231], [-13.00628, 24.01923], [-12.92147, 24.39502], [-12.12281, 25.13682], [-12.06001, 26.04442], [-11.62052, 26.05229], [-11.38635, 26.611], [-11.23622, 26.72023], [-11.35695, 26.8505], [-10.68417, 26.90984], [-9.81998, 26.71379], [-9.56957, 26.90042], [-9.08698, 26.98639], [-8.71787, 26.9898], [-8.77527, 27.66663], [-8.66879, 27.6666], [-8.6715, 28.71194], [-7.61585, 29.36252], [-6.95824, 29.50924], [-6.78351, 29.44634], [-6.69965, 29.51623], [-5.75616, 29.61407], [-5.72121, 29.52322], [-5.58831, 29.48103], [-5.21671, 29.95253], [-4.6058, 30.28343], [-4.31774, 30.53229], [-3.64735, 30.67539], [-3.65418, 30.85566], [-3.54944, 31.0503], [-3.77103, 31.14984], [-3.77647, 31.31912], [-3.66386, 31.39202], [-3.66314, 31.6339], [-2.82784, 31.79459], [-2.93873, 32.06557], [-2.46166, 32.16603], [-1.22829, 32.07832], [-1.15735, 32.12096], [-1.24453, 32.1917], [-1.24998, 32.32993], [-0.9912, 32.52467], [-1.37794, 32.73628], [-1.54244, 32.95499], [-1.46249, 33.0499], [-1.67067, 33.27084], [-1.59508, 33.59929], [-1.73494, 33.71721], [-1.64666, 34.10405], [-1.78042, 34.39018], [-1.69788, 34.48056], [-1.84569, 34.61907], [-1.73707, 34.74226], [-1.97469, 34.886], [-1.97833, 34.93218], [-2.04734, 34.93218], [-2.21445, 35.04378], [-2.21248, 35.08532], [-2.27707, 35.35051]], [[-2.91909, 35.33927], [-2.92272, 35.27509], [-2.93893, 35.26737], [-2.95065, 35.26576], [-2.95431, 35.2728], [-2.96516, 35.27967], [-2.96826, 35.28296], [-2.96507, 35.28801], [-2.97035, 35.28852], [-2.96978, 35.29459], [-2.96648, 35.30475], [-2.96038, 35.31609], [-2.91909, 35.33927]], [[-3.90602, 35.21494], [-3.89343, 35.22728], [-3.88372, 35.20767], [-3.90602, 35.21494]], [[-4.30191, 35.17419], [-4.29436, 35.17149], [-4.30112, 35.17058], [-4.30191, 35.17419]], [[-2.40316, 35.16893], [-2.45965, 35.16527], [-2.43262, 35.20652], [-2.40316, 35.16893]], [[-5.38491, 35.92591], [-5.21179, 35.90091], [-5.34379, 35.8711], [-5.35844, 35.87375], [-5.37338, 35.88417], [-5.38491, 35.92591]]]] } },
+    { type: "Feature", properties: { iso1A2: "MC", iso1A3: "MCO", iso1N3: "492", wikidata: "Q235", nameEn: "Monaco", groups: ["155", "150", "UN"], callingCodes: ["377"] }, geometry: { type: "MultiPolygon", coordinates: [[[[7.47823, 43.73341], [7.4379, 43.74963], [7.4389, 43.75151], [7.43708, 43.75197], [7.43624, 43.75014], [7.43013, 43.74895], [7.42809, 43.74396], [7.42443, 43.74087], [7.42299, 43.74176], [7.42062, 43.73977], [7.41233, 43.73439], [7.41298, 43.73311], [7.41291, 43.73168], [7.41113, 43.73156], [7.40903, 43.7296], [7.42422, 43.72209], [7.47823, 43.73341]]]] } },
+    { type: "Feature", properties: { iso1A2: "MD", iso1A3: "MDA", iso1N3: "498", wikidata: "Q217", nameEn: "Moldova", groups: ["151", "150", "UN"], callingCodes: ["373"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.74422, 48.45926], [27.6658, 48.44034], [27.59027, 48.46311], [27.5889, 48.49224], [27.46942, 48.454], [27.44333, 48.41209], [27.37741, 48.41026], [27.37604, 48.44398], [27.32159, 48.4434], [27.27855, 48.37534], [27.13434, 48.37288], [27.08078, 48.43214], [27.0231, 48.42485], [27.03821, 48.37653], [26.93384, 48.36558], [26.85556, 48.41095], [26.71274, 48.40388], [26.82809, 48.31629], [26.79239, 48.29071], [26.6839, 48.35828], [26.62823, 48.25804], [26.81161, 48.25049], [26.87708, 48.19919], [26.94265, 48.1969], [26.98042, 48.15752], [26.96119, 48.13003], [27.04118, 48.12522], [27.02985, 48.09083], [27.15622, 47.98538], [27.1618, 47.92391], [27.29069, 47.73722], [27.25519, 47.71366], [27.32202, 47.64009], [27.3979, 47.59473], [27.47942, 47.48113], [27.55731, 47.46637], [27.60263, 47.32507], [27.68706, 47.28962], [27.73172, 47.29248], [27.81892, 47.1381], [28.09095, 46.97621], [28.12173, 46.82283], [28.24808, 46.64305], [28.22281, 46.50481], [28.25769, 46.43334], [28.18902, 46.35283], [28.19864, 46.31869], [28.10937, 46.22852], [28.13684, 46.18099], [28.08612, 46.01105], [28.13111, 45.92819], [28.16568, 45.6421], [28.08927, 45.6051], [28.18741, 45.47358], [28.21139, 45.46895], [28.30201, 45.54744], [28.41836, 45.51715], [28.43072, 45.48538], [28.51449, 45.49982], [28.49252, 45.56716], [28.54196, 45.58062], [28.51587, 45.6613], [28.47879, 45.66994], [28.52823, 45.73803], [28.70401, 45.78019], [28.69852, 45.81753], [28.78503, 45.83475], [28.74383, 45.96664], [28.98004, 46.00385], [29.00613, 46.04962], [28.94643, 46.09176], [29.06656, 46.19716], [28.94953, 46.25852], [28.98478, 46.31803], [29.004, 46.31495], [28.9306, 46.45699], [29.01241, 46.46177], [29.02409, 46.49582], [29.23547, 46.55435], [29.24886, 46.37912], [29.35357, 46.49505], [29.49914, 46.45889], [29.5939, 46.35472], [29.6763, 46.36041], [29.66359, 46.4215], [29.74496, 46.45605], [29.88329, 46.35851], [29.94114, 46.40114], [30.09103, 46.38694], [30.16794, 46.40967], [30.02511, 46.45132], [29.88916, 46.54302], [29.94409, 46.56002], [29.9743, 46.75325], [29.94522, 46.80055], [29.98814, 46.82358], [29.87405, 46.88199], [29.75458, 46.8604], [29.72986, 46.92234], [29.57056, 46.94766], [29.62137, 47.05069], [29.61038, 47.09932], [29.53044, 47.07851], [29.49732, 47.12878], [29.57696, 47.13581], [29.54996, 47.24962], [29.59665, 47.25521], [29.5733, 47.36508], [29.48678, 47.36043], [29.47854, 47.30366], [29.39889, 47.30179], [29.3261, 47.44664], [29.18603, 47.43387], [29.11743, 47.55001], [29.22414, 47.60012], [29.22242, 47.73607], [29.27255, 47.79953], [29.20663, 47.80367], [29.27804, 47.88893], [29.19839, 47.89261], [29.1723, 47.99013], [28.9306, 47.96255], [28.8414, 48.03392], [28.85232, 48.12506], [28.69896, 48.13106], [28.53921, 48.17453], [28.48428, 48.0737], [28.42454, 48.12047], [28.43701, 48.15832], [28.38712, 48.17567], [28.34009, 48.13147], [28.30609, 48.14018], [28.30586, 48.1597], [28.34912, 48.1787], [28.36996, 48.20543], [28.35519, 48.24957], [28.32508, 48.23384], [28.2856, 48.23202], [28.19314, 48.20749], [28.17666, 48.25963], [28.07504, 48.23494], [28.09873, 48.3124], [28.04527, 48.32661], [27.95883, 48.32368], [27.88391, 48.36699], [27.87533, 48.4037], [27.81902, 48.41874], [27.79225, 48.44244], [27.74422, 48.45926]]]] } },
+    { type: "Feature", properties: { iso1A2: "ME", iso1A3: "MNE", iso1N3: "499", wikidata: "Q236", nameEn: "Montenegro", groups: ["039", "150", "UN"], callingCodes: ["382"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.22807, 43.5264], [19.15685, 43.53943], [19.13933, 43.5282], [19.04934, 43.50384], [19.01078, 43.55806], [18.91379, 43.50299], [18.95469, 43.49367], [18.96053, 43.45042], [19.01078, 43.43854], [19.04071, 43.397], [19.08673, 43.31453], [19.08206, 43.29668], [19.04233, 43.30008], [19.00844, 43.24988], [18.95001, 43.29327], [18.95819, 43.32899], [18.90911, 43.36383], [18.83912, 43.34795], [18.84794, 43.33735], [18.85342, 43.32426], [18.76538, 43.29838], [18.6976, 43.25243], [18.71747, 43.2286], [18.66605, 43.2056], [18.64735, 43.14766], [18.66254, 43.03928], [18.52232, 43.01451], [18.49076, 42.95553], [18.49661, 42.89306], [18.4935, 42.86433], [18.47633, 42.85829], [18.45921, 42.81682], [18.47324, 42.74992], [18.56789, 42.72074], [18.55221, 42.69045], [18.54603, 42.69171], [18.54841, 42.68328], [18.57373, 42.64429], [18.52232, 42.62279], [18.55504, 42.58409], [18.53751, 42.57376], [18.49778, 42.58409], [18.43735, 42.55921], [18.44307, 42.51077], [18.43588, 42.48556], [18.52152, 42.42302], [18.54128, 42.39171], [18.45131, 42.21682], [19.26406, 41.74971], [19.37597, 41.84849], [19.37451, 41.8842], [19.33812, 41.90669], [19.34601, 41.95675], [19.37691, 41.96977], [19.36867, 42.02564], [19.37548, 42.06835], [19.40687, 42.10024], [19.28623, 42.17745], [19.42, 42.33019], [19.42352, 42.36546], [19.4836, 42.40831], [19.65972, 42.62774], [19.73244, 42.66299], [19.77375, 42.58517], [19.74731, 42.57422], [19.76549, 42.50237], [19.82333, 42.46581], [19.9324, 42.51699], [20.00842, 42.5109], [20.01834, 42.54622], [20.07761, 42.55582], [20.0969, 42.65559], [20.02915, 42.71147], [20.02088, 42.74789], [20.04898, 42.77701], [20.2539, 42.76245], [20.27869, 42.81945], [20.35692, 42.8335], [20.34528, 42.90676], [20.16415, 42.97177], [20.14896, 42.99058], [20.12325, 42.96237], [20.05431, 42.99571], [20.04729, 43.02732], [19.98887, 43.0538], [19.96549, 43.11098], [19.92576, 43.08539], [19.79255, 43.11951], [19.76918, 43.16044], [19.64063, 43.19027], [19.62661, 43.2286], [19.54598, 43.25158], [19.52962, 43.31623], [19.48171, 43.32644], [19.44315, 43.38846], [19.22229, 43.47926], [19.22807, 43.5264]]]] } },
+    { type: "Feature", properties: { iso1A2: "MF", iso1A3: "MAF", iso1N3: "663", wikidata: "Q126125", nameEn: "Saint-Martin", country: "FR", groups: ["Q3320166", "EU", "029", "003", "419", "019", "UN"], callingCodes: ["590"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.93924, 18.02904], [-62.62718, 18.26185], [-63.35989, 18.06012], [-63.33064, 17.9615], [-63.13502, 18.05445], [-63.11042, 18.05339], [-63.09686, 18.04608], [-63.07759, 18.04943], [-63.0579, 18.06614], [-63.04039, 18.05619], [-63.02323, 18.05757], [-62.93924, 18.02904]]]] } },
+    { type: "Feature", properties: { iso1A2: "MG", iso1A3: "MDG", iso1N3: "450", wikidata: "Q1019", nameEn: "Madagascar", aliases: ["RM"], groups: ["014", "202", "002", "UN"], callingCodes: ["261"] }, geometry: { type: "MultiPolygon", coordinates: [[[[51.93891, -10.85085], [45.84651, -12.77177], [42.14681, -19.63341], [45.80092, -33.00974], [51.93891, -10.85085]]]] } },
+    { type: "Feature", properties: { iso1A2: "MH", iso1A3: "MHL", iso1N3: "584", wikidata: "Q709", nameEn: "Marshall Islands", groups: ["057", "009", "UN"], roadSpeedUnit: "mph", callingCodes: ["692"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169, 3.9], [173.53711, 5.70687], [169.29099, 15.77133], [159.04653, 10.59067], [169, 3.9]]]] } },
+    { type: "Feature", properties: { iso1A2: "MK", iso1A3: "MKD", iso1N3: "807", wikidata: "Q221", nameEn: "North Macedonia", groups: ["039", "150", "UN"], callingCodes: ["389"] }, geometry: { type: "MultiPolygon", coordinates: [[[[22.34773, 42.31725], [22.29275, 42.34913], [22.29605, 42.37477], [22.16384, 42.32103], [22.02908, 42.29848], [21.94405, 42.34669], [21.91595, 42.30392], [21.84654, 42.3247], [21.77176, 42.2648], [21.70111, 42.23789], [21.58992, 42.25915], [21.52145, 42.24465], [21.50823, 42.27156], [21.43882, 42.2789], [21.43882, 42.23609], [21.38428, 42.24465], [21.30496, 42.1418], [21.29913, 42.13954], [21.31983, 42.10993], [21.22728, 42.08909], [21.16614, 42.19815], [21.11491, 42.20794], [20.75464, 42.05229], [20.76786, 41.91839], [20.68523, 41.85318], [20.59524, 41.8818], [20.55976, 41.87068], [20.57144, 41.7897], [20.53405, 41.78099], [20.51301, 41.72433], [20.52937, 41.69292], [20.51769, 41.65975], [20.55508, 41.58113], [20.52103, 41.56473], [20.45809, 41.5549], [20.45331, 41.51436], [20.49039, 41.49277], [20.51301, 41.442], [20.55976, 41.4087], [20.52119, 41.34381], [20.49432, 41.33679], [20.51068, 41.2323], [20.59715, 41.13644], [20.58546, 41.11179], [20.59832, 41.09066], [20.63454, 41.0889], [20.65558, 41.08009], [20.71634, 40.91781], [20.73504, 40.9081], [20.81567, 40.89662], [20.83671, 40.92752], [20.94305, 40.92399], [20.97693, 40.90103], [20.97887, 40.85475], [21.15262, 40.85546], [21.21105, 40.8855], [21.25779, 40.86165], [21.35595, 40.87578], [21.41555, 40.9173], [21.53007, 40.90759], [21.57448, 40.86076], [21.69601, 40.9429], [21.7556, 40.92525], [21.91102, 41.04786], [21.90869, 41.09191], [22.06527, 41.15617], [22.1424, 41.12449], [22.17629, 41.15969], [22.26744, 41.16409], [22.42285, 41.11921], [22.5549, 41.13065], [22.58295, 41.11568], [22.62852, 41.14385], [22.65306, 41.18168], [22.71266, 41.13945], [22.74538, 41.16321], [22.76408, 41.32225], [22.81199, 41.3398], [22.93334, 41.34104], [22.96331, 41.35782], [22.95513, 41.63265], [23.03342, 41.71034], [23.01239, 41.76527], [22.96682, 41.77137], [22.90254, 41.87587], [22.86749, 42.02275], [22.67701, 42.06614], [22.51224, 42.15457], [22.50289, 42.19527], [22.47251, 42.20393], [22.38136, 42.30339], [22.34773, 42.31725]]]] } },
+    { type: "Feature", properties: { iso1A2: "ML", iso1A3: "MLI", iso1N3: "466", wikidata: "Q912", nameEn: "Mali", groups: ["011", "202", "002", "UN"], callingCodes: ["223"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-4.83423, 24.99935], [-6.57191, 25.0002], [-5.60725, 16.49919], [-5.33435, 16.33354], [-5.50165, 15.50061], [-9.32979, 15.50032], [-9.31106, 15.69412], [-9.33314, 15.7044], [-9.44673, 15.60553], [-9.40447, 15.4396], [-10.71721, 15.4223], [-10.90932, 15.11001], [-11.43483, 15.62339], [-11.70705, 15.51558], [-11.94903, 14.76143], [-12.23936, 14.76324], [-11.93043, 13.84505], [-12.06897, 13.71049], [-11.83345, 13.33333], [-11.63025, 13.39174], [-11.39935, 12.97808], [-11.37536, 12.40788], [-11.50006, 12.17826], [-11.24136, 12.01286], [-10.99758, 12.24634], [-10.80355, 12.1053], [-10.71897, 11.91552], [-10.30604, 12.24634], [-9.714, 12.0226], [-9.63938, 12.18312], [-9.32097, 12.29009], [-9.38067, 12.48446], [-9.13689, 12.50875], [-8.94784, 12.34842], [-8.80854, 11.66715], [-8.40058, 11.37466], [-8.66923, 10.99397], [-8.35083, 11.06234], [-8.2667, 10.91762], [-8.32614, 10.69273], [-8.22711, 10.41722], [-8.10207, 10.44649], [-7.9578, 10.2703], [-7.97971, 10.17117], [-7.92107, 10.15577], [-7.63048, 10.46334], [-7.54462, 10.40921], [-7.52261, 10.4655], [-7.44555, 10.44602], [-7.3707, 10.24677], [-7.13331, 10.24877], [-7.0603, 10.14711], [-7.00966, 10.15794], [-6.97444, 10.21644], [-7.01186, 10.25111], [-6.93921, 10.35291], [-6.68164, 10.35074], [-6.63541, 10.66893], [-6.52974, 10.59104], [-6.42847, 10.5694], [-6.40646, 10.69922], [-6.325, 10.68624], [-6.24795, 10.74248], [-6.1731, 10.46983], [-6.18851, 10.24244], [-5.99478, 10.19694], [-5.78124, 10.43952], [-5.65135, 10.46767], [-5.51058, 10.43177], [-5.46643, 10.56074], [-5.47083, 10.75329], [-5.41579, 10.84628], [-5.49284, 11.07538], [-5.32994, 11.13371], [-5.32553, 11.21578], [-5.25949, 11.24816], [-5.25509, 11.36905], [-5.20665, 11.43811], [-5.22867, 11.60421], [-5.29251, 11.61715], [-5.26389, 11.75728], [-5.40258, 11.8327], [-5.26389, 11.84778], [-5.07897, 11.97918], [-4.72893, 12.01579], [-4.70692, 12.06746], [-4.62987, 12.06531], [-4.62546, 12.13204], [-4.54841, 12.1385], [-4.57703, 12.19875], [-4.41412, 12.31922], [-4.47356, 12.71252], [-4.238, 12.71467], [-4.21819, 12.95722], [-4.34477, 13.12927], [-3.96501, 13.49778], [-3.90558, 13.44375], [-3.96282, 13.38164], [-3.7911, 13.36665], [-3.54454, 13.1781], [-3.4313, 13.1588], [-3.43507, 13.27272], [-3.23599, 13.29035], [-3.28396, 13.5422], [-3.26407, 13.70699], [-2.88189, 13.64921], [-2.90831, 13.81174], [-2.84667, 14.05532], [-2.66175, 14.14713], [-2.47587, 14.29671], [-2.10223, 14.14878], [-1.9992, 14.19011], [-1.97945, 14.47709], [-1.68083, 14.50023], [-1.32166, 14.72774], [-1.05875, 14.7921], [-0.72004, 15.08655], [-0.24673, 15.07805], [0.06588, 14.96961], [0.23859, 15.00135], [0.72632, 14.95898], [0.96711, 14.98275], [1.31275, 15.27978], [3.01806, 15.34571], [3.03134, 15.42221], [3.50368, 15.35934], [4.19893, 16.39923], [4.21787, 17.00118], [4.26762, 17.00432], [4.26651, 19.14224], [3.36082, 18.9745], [3.12501, 19.1366], [3.24648, 19.81703], [1.20992, 20.73533], [1.15698, 21.12843], [-4.83423, 24.99935]]]] } },
+    { type: "Feature", properties: { iso1A2: "MM", iso1A3: "MMR", iso1N3: "104", wikidata: "Q836", nameEn: "Myanmar", aliases: ["Burma", "BU"], groups: ["035", "142", "UN"], callingCodes: ["95"] }, geometry: { type: "MultiPolygon", coordinates: [[[[92.62187, 21.87037], [92.59775, 21.6092], [92.68152, 21.28454], [92.60187, 21.24615], [92.55105, 21.3856], [92.43158, 21.37025], [92.37939, 21.47764], [92.20087, 21.337], [92.17752, 21.17445], [92.26071, 21.05697], [92.47409, 20.38654], [92.61042, 13.76986], [94.6371, 13.81803], [97.63455, 9.60854], [98.12555, 9.44056], [98.33094, 9.91973], [98.47298, 9.95782], [98.52291, 9.92389], [98.55174, 9.92804], [98.7391, 10.31488], [98.81944, 10.52761], [98.77275, 10.62548], [98.78511, 10.68351], [98.86819, 10.78336], [99.0069, 10.85485], [98.99701, 10.92962], [99.02337, 10.97217], [99.06938, 10.94857], [99.32756, 11.28545], [99.31573, 11.32081], [99.39485, 11.3925], [99.47598, 11.62434], [99.5672, 11.62732], [99.64108, 11.78948], [99.64891, 11.82699], [99.53424, 12.02317], [99.56445, 12.14805], [99.47519, 12.1353], [99.409, 12.60603], [99.29254, 12.68921], [99.18905, 12.84799], [99.18748, 12.9898], [99.10646, 13.05804], [99.12225, 13.19847], [99.20617, 13.20575], [99.16695, 13.72621], [98.97356, 14.04868], [98.56762, 14.37701], [98.24874, 14.83013], [98.18821, 15.13125], [98.22, 15.21327], [98.30446, 15.30667], [98.40522, 15.25268], [98.41906, 15.27103], [98.39351, 15.34177], [98.4866, 15.39154], [98.56027, 15.33471], [98.58598, 15.46821], [98.541, 15.65406], [98.59853, 15.87197], [98.57019, 16.04578], [98.69585, 16.13353], [98.8376, 16.11706], [98.92656, 16.36425], [98.84485, 16.42354], [98.68074, 16.27068], [98.63817, 16.47424], [98.57912, 16.55983], [98.5695, 16.62826], [98.51113, 16.64503], [98.51833, 16.676], [98.51472, 16.68521], [98.51579, 16.69433], [98.51043, 16.70107], [98.49713, 16.69022], [98.50253, 16.7139], [98.46994, 16.73613], [98.53833, 16.81934], [98.49603, 16.8446], [98.52624, 16.89979], [98.39441, 17.06266], [98.34566, 17.04822], [98.10439, 17.33847], [98.11185, 17.36829], [97.91829, 17.54504], [97.76407, 17.71595], [97.66794, 17.88005], [97.73723, 17.97912], [97.60841, 18.23846], [97.64116, 18.29778], [97.56219, 18.33885], [97.50383, 18.26844], [97.34522, 18.54596], [97.36444, 18.57138], [97.5258, 18.4939], [97.76752, 18.58097], [97.73836, 18.88478], [97.66487, 18.9371], [97.73654, 18.9812], [97.73797, 19.04261], [97.83479, 19.09972], [97.84024, 19.22217], [97.78606, 19.26769], [97.84186, 19.29526], [97.78769, 19.39429], [97.88423, 19.5041], [97.84715, 19.55782], [98.04364, 19.65755], [98.03314, 19.80941], [98.13829, 19.78541], [98.24884, 19.67876], [98.51182, 19.71303], [98.56065, 19.67807], [98.83661, 19.80931], [98.98679, 19.7419], [99.0735, 20.10298], [99.20328, 20.12877], [99.416, 20.08614], [99.52943, 20.14811], [99.5569, 20.20676], [99.46077, 20.36198], [99.46008, 20.39673], [99.68255, 20.32077], [99.81096, 20.33687], [99.86383, 20.44371], [99.88211, 20.44488], [99.88451, 20.44596], [99.89168, 20.44548], [99.89301, 20.44311], [99.89692, 20.44789], [99.90499, 20.4487], [99.91616, 20.44986], [99.95721, 20.46301], [100.08404, 20.36626], [100.1957, 20.68247], [100.36375, 20.82783], [100.51079, 20.82194], [100.60112, 20.8347], [100.64628, 20.88279], [100.50974, 20.88574], [100.55281, 21.02796], [100.63578, 21.05639], [100.72716, 21.31786], [100.80173, 21.2934], [101.00234, 21.39612], [101.16198, 21.52808], [101.15156, 21.56129], [101.11744, 21.77659], [100.87265, 21.67396], [100.72143, 21.51898], [100.57861, 21.45637], [100.4811, 21.46148], [100.42892, 21.54325], [100.35201, 21.53176], [100.25863, 21.47043], [100.18447, 21.51898], [100.1625, 21.48704], [100.12542, 21.50365], [100.10757, 21.59945], [100.17486, 21.65306], [100.12679, 21.70539], [100.04956, 21.66843], [99.98654, 21.71064], [99.94003, 21.82782], [99.99084, 21.97053], [99.96612, 22.05965], [99.85351, 22.04183], [99.47585, 22.13345], [99.33166, 22.09656], [99.1552, 22.15874], [99.19176, 22.16983], [99.17318, 22.18025], [99.28771, 22.4105], [99.37972, 22.50188], [99.38247, 22.57544], [99.31243, 22.73893], [99.45654, 22.85726], [99.43537, 22.94086], [99.54218, 22.90014], [99.52214, 23.08218], [99.34127, 23.13099], [99.25741, 23.09025], [99.04601, 23.12215], [99.05975, 23.16382], [98.88597, 23.18656], [98.92515, 23.29535], [98.93958, 23.31414], [98.87573, 23.33038], [98.92104, 23.36946], [98.87683, 23.48995], [98.82877, 23.47908], [98.80294, 23.5345], [98.88396, 23.59555], [98.81775, 23.694], [98.82933, 23.72921], [98.79607, 23.77947], [98.68209, 23.80492], [98.67797, 23.9644], [98.89632, 24.10612], [98.87998, 24.15624], [98.85319, 24.13042], [98.59256, 24.08371], [98.54476, 24.13119], [98.20666, 24.11406], [98.07806, 24.07988], [98.06703, 24.08028], [98.0607, 24.07812], [98.05671, 24.07961], [98.05302, 24.07408], [98.04709, 24.07616], [97.99583, 24.04932], [97.98691, 24.03897], [97.93951, 24.01953], [97.90998, 24.02094], [97.88616, 24.00463], [97.88414, 23.99405], [97.88814, 23.98605], [97.89683, 23.98389], [97.89676, 23.97931], [97.8955, 23.97758], [97.88811, 23.97446], [97.86545, 23.97723], [97.84328, 23.97603], [97.79416, 23.95663], [97.79456, 23.94836], [97.72302, 23.89288], [97.64667, 23.84574], [97.5247, 23.94032], [97.62363, 24.00506], [97.72903, 24.12606], [97.75305, 24.16902], [97.72799, 24.18883], [97.72998, 24.2302], [97.76799, 24.26365], [97.71941, 24.29652], [97.66723, 24.30027], [97.65624, 24.33781], [97.7098, 24.35658], [97.66998, 24.45288], [97.60029, 24.4401], [97.52757, 24.43748], [97.56286, 24.54535], [97.56525, 24.72838], [97.54675, 24.74202], [97.5542, 24.74943], [97.56383, 24.75535], [97.56648, 24.76475], [97.64354, 24.79171], [97.70181, 24.84557], [97.73127, 24.83015], [97.76481, 24.8289], [97.79949, 24.85655], [97.72903, 24.91332], [97.72216, 25.08508], [97.77023, 25.11492], [97.83614, 25.2715], [97.92541, 25.20815], [98.14925, 25.41547], [98.12591, 25.50722], [98.18084, 25.56298], [98.16848, 25.62739], [98.25774, 25.6051], [98.31268, 25.55307], [98.40606, 25.61129], [98.54064, 25.85129], [98.63128, 25.79937], [98.70818, 25.86241], [98.60763, 26.01512], [98.57085, 26.11547], [98.63128, 26.15492], [98.66884, 26.09165], [98.7329, 26.17218], [98.67797, 26.24487], [98.72741, 26.36183], [98.77547, 26.61994], [98.7333, 26.85615], [98.69582, 27.56499], [98.43353, 27.67086], [98.42529, 27.55404], [98.32641, 27.51385], [98.13964, 27.9478], [98.15337, 28.12114], [97.90069, 28.3776], [97.79632, 28.33168], [97.70705, 28.5056], [97.56835, 28.55628], [97.50518, 28.49716], [97.47085, 28.2688], [97.41729, 28.29783], [97.34547, 28.21385], [97.31292, 28.06784], [97.35412, 28.06663], [97.38845, 28.01329], [97.35824, 27.87256], [97.29919, 27.92233], [96.90112, 27.62149], [96.91431, 27.45752], [97.17422, 27.14052], [97.14675, 27.09041], [96.89132, 27.17474], [96.85287, 27.2065], [96.88445, 27.25046], [96.73888, 27.36638], [96.55761, 27.29928], [96.40779, 27.29818], [96.15591, 27.24572], [96.04949, 27.19428], [95.93002, 27.04149], [95.81603, 27.01335], [95.437, 26.7083], [95.30339, 26.65372], [95.23513, 26.68499], [95.05798, 26.45408], [95.12801, 26.38397], [95.11428, 26.1019], [95.18556, 26.07338], [94.80117, 25.49359], [94.68032, 25.47003], [94.57458, 25.20318], [94.74212, 25.13606], [94.73937, 25.00545], [94.60204, 24.70889], [94.5526, 24.70764], [94.50729, 24.59281], [94.45279, 24.56656], [94.32362, 24.27692], [94.30215, 24.23752], [94.14081, 23.83333], [93.92089, 23.95812], [93.80279, 23.92549], [93.75952, 24.0003], [93.62871, 24.00922], [93.50616, 23.94432], [93.46633, 23.97067], [93.41415, 24.07854], [93.34735, 24.10151], [93.32351, 24.04468], [93.36059, 23.93176], [93.3908, 23.92925], [93.3908, 23.7622], [93.43475, 23.68299], [93.38805, 23.4728], [93.39981, 23.38828], [93.38781, 23.36139], [93.36862, 23.35426], [93.38478, 23.13698], [93.2878, 23.00464], [93.12988, 23.05772], [93.134, 22.92498], [93.09417, 22.69459], [93.134, 22.59573], [93.11477, 22.54374], [93.13537, 22.45873], [93.18206, 22.43716], [93.19991, 22.25425], [93.14224, 22.24535], [93.15734, 22.18687], [93.04885, 22.20595], [92.99255, 22.05965], [92.99804, 21.98964], [92.93899, 22.02656], [92.89504, 21.95143], [92.86208, 22.05456], [92.70416, 22.16017], [92.67532, 22.03547], [92.60949, 21.97638], [92.62187, 21.87037]]]] } },
+    { type: "Feature", properties: { iso1A2: "MN", iso1A3: "MNG", iso1N3: "496", wikidata: "Q711", nameEn: "Mongolia", groups: ["030", "142", "UN"], callingCodes: ["976"] }, geometry: { type: "MultiPolygon", coordinates: [[[[102.14032, 51.35566], [101.5044, 51.50467], [101.39085, 51.45753], [100.61116, 51.73028], [99.89203, 51.74903], [99.75578, 51.90108], [99.27888, 51.96876], [98.87768, 52.14563], [98.74142, 51.8637], [98.33222, 51.71832], [98.22053, 51.46579], [98.05257, 51.46696], [97.83305, 51.00248], [98.01472, 50.86652], [97.9693, 50.78044], [98.06393, 50.61262], [98.31373, 50.4996], [98.29481, 50.33561], [97.85197, 49.91339], [97.76871, 49.99861], [97.56432, 49.92801], [97.56811, 49.84265], [97.24639, 49.74737], [96.97388, 49.88413], [95.80056, 50.04239], [95.74757, 49.97915], [95.02465, 49.96941], [94.97166, 50.04725], [94.6121, 50.04239], [94.49477, 50.17832], [94.39258, 50.22193], [94.30823, 50.57498], [92.99595, 50.63183], [93.01109, 50.79001], [92.44714, 50.78762], [92.07173, 50.69585], [91.86048, 50.73734], [89.59711, 49.90851], [89.70687, 49.72535], [88.82499, 49.44808], [88.42449, 49.48821], [88.17223, 49.46934], [88.15543, 49.30314], [87.98977, 49.18147], [87.81333, 49.17354], [87.88171, 48.95853], [87.73822, 48.89582], [88.0788, 48.71436], [87.96361, 48.58478], [88.58939, 48.34531], [88.58316, 48.21893], [88.8011, 48.11302], [88.93186, 48.10263], [89.0711, 47.98528], [89.55453, 48.0423], [89.76624, 47.82745], [90.06512, 47.88177], [90.10871, 47.7375], [90.33598, 47.68303], [90.48854, 47.41826], [90.48542, 47.30438], [90.76108, 46.99399], [90.84035, 46.99525], [91.03649, 46.72916], [91.0147, 46.58171], [91.07696, 46.57315], [90.89639, 46.30711], [90.99672, 46.14207], [91.03026, 46.04194], [90.70907, 45.73437], [90.65114, 45.49314], [90.89169, 45.19667], [91.64048, 45.07408], [93.51161, 44.95964], [94.10003, 44.71016], [94.71959, 44.35284], [95.01191, 44.25274], [95.39772, 44.2805], [95.32891, 44.02407], [95.52594, 43.99353], [95.89543, 43.2528], [96.35658, 42.90363], [96.37926, 42.72055], [97.1777, 42.7964], [99.50671, 42.56535], [100.33297, 42.68231], [100.84979, 42.67087], [101.80515, 42.50074], [102.07645, 42.22519], [102.72403, 42.14675], [103.92804, 41.78246], [104.52258, 41.8706], [104.51667, 41.66113], [105.0123, 41.63188], [106.76517, 42.28741], [107.24774, 42.36107], [107.29755, 42.41395], [107.49681, 42.46221], [107.57258, 42.40898], [108.84489, 42.40246], [109.00679, 42.45302], [109.452, 42.44842], [109.89402, 42.63111], [110.08401, 42.6411], [110.4327, 42.78293], [111.0149, 43.3289], [111.59087, 43.51207], [111.79758, 43.6637], [111.93776, 43.68709], [111.96289, 43.81596], [111.40498, 44.3461], [111.76275, 44.98032], [111.98695, 45.09074], [112.4164, 45.06858], [112.74662, 44.86297], [113.70918, 44.72891], [114.5166, 45.27189], [114.54801, 45.38337], [114.74612, 45.43585], [114.94546, 45.37377], [115.60329, 45.44717], [116.16989, 45.68603], [116.27366, 45.78637], [116.24012, 45.8778], [116.26678, 45.96479], [116.58612, 46.30211], [116.75551, 46.33083], [116.83166, 46.38637], [117.36609, 46.36335], [117.41782, 46.57862], [117.60748, 46.59771], [117.69554, 46.50991], [118.30534, 46.73519], [118.78747, 46.68689], [118.8337, 46.77742], [118.89974, 46.77139], [118.92616, 46.72765], [119.00541, 46.74273], [119.10448, 46.65516], [119.24978, 46.64761], [119.32827, 46.61433], [119.42827, 46.63783], [119.65265, 46.62342], [119.68127, 46.59015], [119.77373, 46.62947], [119.80455, 46.67631], [119.89261, 46.66423], [119.91242, 46.90091], [119.85518, 46.92196], [119.71209, 47.19192], [119.62403, 47.24575], [119.56019, 47.24874], [119.54918, 47.29505], [119.31964, 47.42617], [119.35892, 47.48104], [119.13995, 47.53997], [119.12343, 47.66458], [118.7564, 47.76947], [118.55766, 47.99277], [118.29654, 48.00246], [118.22677, 48.03853], [118.11009, 48.04], [118.03676, 48.00982], [117.80196, 48.01661], [117.50181, 47.77216], [117.37875, 47.63627], [116.9723, 47.87285], [116.67405, 47.89039], [116.4465, 47.83662], [116.21879, 47.88505], [115.94296, 47.67741], [115.57128, 47.91988], [115.52082, 48.15367], [115.811, 48.25699], [115.78876, 48.51781], [116.06565, 48.81716], [116.03781, 48.87014], [116.71193, 49.83813], [116.62502, 49.92919], [116.22402, 50.04477], [115.73602, 49.87688], [115.26068, 49.97367], [114.9703, 50.19254], [114.325, 50.28098], [113.20216, 49.83356], [113.02647, 49.60772], [110.64493, 49.1816], [110.39891, 49.25083], [110.24373, 49.16676], [109.51325, 49.22859], [109.18017, 49.34709], [108.53969, 49.32325], [108.27937, 49.53167], [107.95387, 49.66659], [107.96116, 49.93191], [107.36407, 49.97612], [107.1174, 50.04239], [107.00007, 50.1977], [106.80326, 50.30177], [106.58373, 50.34044], [106.51122, 50.34408], [106.49628, 50.32436], [106.47156, 50.31909], [106.07865, 50.33474], [106.05562, 50.40582], [105.32528, 50.4648], [103.70343, 50.13952], [102.71178, 50.38873], [102.32194, 50.67982], [102.14032, 51.35566]]]] } },
+    { type: "Feature", properties: { iso1A2: "MO", iso1A3: "MAC", iso1N3: "446", wikidata: "Q14773", nameEn: "Macau", aliases: ["Macao"], country: "CN", groups: ["030", "142", "UN"], driveSide: "left", callingCodes: ["853"] }, geometry: { type: "MultiPolygon", coordinates: [[[[113.54942, 22.14519], [113.54839, 22.10909], [113.57191, 22.07696], [113.63011, 22.10782], [113.60504, 22.20464], [113.57123, 22.20416], [113.56865, 22.20973], [113.5508, 22.21672], [113.54333, 22.21688], [113.54093, 22.21314], [113.53593, 22.2137], [113.53301, 22.21235], [113.53552, 22.20607], [113.52659, 22.18271], [113.54093, 22.15497], [113.54942, 22.14519]]]] } },
+    { type: "Feature", properties: { iso1A2: "MP", iso1A3: "MNP", iso1N3: "580", wikidata: "Q16644", nameEn: "Northern Mariana Islands", aliases: ["US-MP"], country: "US", groups: ["Q1352230", "Q153732", "057", "009", "UN"], roadSpeedUnit: "mph", callingCodes: ["1 670"] }, geometry: { type: "MultiPolygon", coordinates: [[[[135.52896, 14.32623], [152.19114, 13.63487], [145.05972, 21.28731], [135.52896, 14.32623]]]] } },
+    { type: "Feature", properties: { iso1A2: "MQ", iso1A3: "MTQ", iso1N3: "474", wikidata: "Q17054", nameEn: "Martinique", country: "FR", groups: ["Q3320166", "EU", "029", "003", "419", "019", "UN"], callingCodes: ["596"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-59.95997, 14.20285], [-61.07821, 15.25109], [-61.69315, 14.26451], [-59.95997, 14.20285]]]] } },
+    { type: "Feature", properties: { iso1A2: "MR", iso1A3: "MRT", iso1N3: "478", wikidata: "Q1025", nameEn: "Mauritania", groups: ["011", "202", "002", "UN"], callingCodes: ["222"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-5.60725, 16.49919], [-6.57191, 25.0002], [-4.83423, 24.99935], [-8.66674, 27.31569], [-8.66721, 25.99918], [-12.0002, 25.9986], [-12.00251, 23.4538], [-12.14969, 23.41935], [-12.36213, 23.3187], [-12.5741, 23.28975], [-13.00412, 23.02297], [-13.10753, 22.89493], [-13.15313, 22.75649], [-13.08438, 22.53866], [-13.01525, 21.33343], [-16.95474, 21.33997], [-16.99806, 21.12142], [-17.0357, 21.05368], [-17.0396, 20.9961], [-17.06781, 20.92697], [-17.0695, 20.85742], [-17.0471, 20.76408], [-17.15288, 16.07139], [-16.50854, 16.09032], [-16.48967, 16.0496], [-16.44814, 16.09753], [-16.4429, 16.20605], [-16.27016, 16.51565], [-15.6509, 16.50315], [-15.00557, 16.64997], [-14.32144, 16.61495], [-13.80075, 16.13961], [-13.43135, 16.09022], [-13.11029, 15.52116], [-12.23936, 14.76324], [-11.94903, 14.76143], [-11.70705, 15.51558], [-11.43483, 15.62339], [-10.90932, 15.11001], [-10.71721, 15.4223], [-9.40447, 15.4396], [-9.44673, 15.60553], [-9.33314, 15.7044], [-9.31106, 15.69412], [-9.32979, 15.50032], [-5.50165, 15.50061], [-5.33435, 16.33354], [-5.60725, 16.49919]]]] } },
+    { type: "Feature", properties: { iso1A2: "MS", iso1A3: "MSR", iso1N3: "500", wikidata: "Q13353", nameEn: "Montserrat", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 664"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.91508, 16.51165], [-62.1023, 16.97277], [-62.58307, 16.68909], [-61.91508, 16.51165]]]] } },
+    { type: "Feature", properties: { iso1A2: "MT", iso1A3: "MLT", iso1N3: "470", wikidata: "Q233", nameEn: "Malta", groups: ["EU", "039", "150", "UN"], driveSide: "left", callingCodes: ["356"] }, geometry: { type: "MultiPolygon", coordinates: [[[[15.70991, 35.79901], [14.07544, 36.41525], [13.27636, 35.20764], [15.70991, 35.79901]]]] } },
+    { type: "Feature", properties: { iso1A2: "MU", iso1A3: "MUS", iso1N3: "480", wikidata: "Q1027", nameEn: "Mauritius", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["230"] }, geometry: { type: "MultiPolygon", coordinates: [[[[56.09755, -9.55401], [57.50644, -31.92637], [68.4673, -19.15185], [56.09755, -9.55401]]]] } },
+    { type: "Feature", properties: { iso1A2: "MV", iso1A3: "MDV", iso1N3: "462", wikidata: "Q826", nameEn: "Maldives", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["960"] }, geometry: { type: "MultiPolygon", coordinates: [[[[71.9161, 8.55531], [72.57428, -3.7623], [76.59015, 5.591], [71.9161, 8.55531]]]] } },
+    { type: "Feature", properties: { iso1A2: "MW", iso1A3: "MWI", iso1N3: "454", wikidata: "Q1020", nameEn: "Malawi", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["265"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.48052, -9.62442], [33.31581, -9.48554], [33.14925, -9.49322], [32.99397, -9.36712], [32.95389, -9.40138], [33.00476, -9.5133], [33.00256, -9.63053], [33.05485, -9.61316], [33.10163, -9.66525], [33.12144, -9.58929], [33.2095, -9.61099], [33.31517, -9.82364], [33.36581, -9.81063], [33.37902, -9.9104], [33.31297, -10.05133], [33.53863, -10.20148], [33.54797, -10.36077], [33.70675, -10.56896], [33.47636, -10.78465], [33.28022, -10.84428], [33.25998, -10.88862], [33.39697, -11.15296], [33.29267, -11.3789], [33.29267, -11.43536], [33.23663, -11.40637], [33.24252, -11.59302], [33.32692, -11.59248], [33.33937, -11.91252], [33.25998, -12.14242], [33.3705, -12.34931], [33.47636, -12.32498], [33.54485, -12.35996], [33.37517, -12.54085], [33.28177, -12.54692], [33.18837, -12.61377], [33.05917, -12.59554], [32.94397, -12.76868], [32.96733, -12.88251], [33.02181, -12.88707], [32.98289, -13.12671], [33.0078, -13.19492], [32.86113, -13.47292], [32.84176, -13.52794], [32.73683, -13.57682], [32.68436, -13.55769], [32.66468, -13.60019], [32.68654, -13.64268], [32.7828, -13.64805], [32.84528, -13.71576], [32.76962, -13.77224], [32.79015, -13.80755], [32.88985, -13.82956], [32.99042, -13.95689], [33.02977, -14.05022], [33.07568, -13.98447], [33.16749, -13.93992], [33.24249, -14.00019], [33.66677, -14.61306], [33.7247, -14.4989], [33.88503, -14.51652], [33.92898, -14.47929], [34.08588, -14.48893], [34.18733, -14.43823], [34.22355, -14.43607], [34.34453, -14.3985], [34.35843, -14.38652], [34.39277, -14.39467], [34.4192, -14.43191], [34.44641, -14.47746], [34.45053, -14.49873], [34.47628, -14.53363], [34.48932, -14.53646], [34.49636, -14.55091], [34.52366, -14.5667], [34.53962, -14.59776], [34.55112, -14.64494], [34.53516, -14.67782], [34.52057, -14.68263], [34.54503, -14.74672], [34.567, -14.77345], [34.61522, -14.99583], [34.57503, -15.30619], [34.43126, -15.44778], [34.44981, -15.60864], [34.25195, -15.90321], [34.43126, -16.04737], [34.40344, -16.20923], [35.04805, -16.83167], [35.13771, -16.81687], [35.17017, -16.93521], [35.04805, -17.00027], [35.0923, -17.13235], [35.3062, -17.1244], [35.27065, -16.93817], [35.30929, -16.82871], [35.27219, -16.69402], [35.14235, -16.56812], [35.25828, -16.4792], [35.30157, -16.2211], [35.43355, -16.11371], [35.52365, -16.15414], [35.70107, -16.10147], [35.80487, -16.03907], [35.85303, -15.41913], [35.78799, -15.17428], [35.91812, -14.89514], [35.87212, -14.89478], [35.86945, -14.67481], [35.5299, -14.27714], [35.47989, -14.15594], [34.86229, -13.48958], [34.60253, -13.48487], [34.37831, -12.17408], [34.46088, -12.0174], [34.70739, -12.15652], [34.82903, -12.04837], [34.57917, -11.87849], [34.64241, -11.57499], [34.96296, -11.57354], [34.91153, -11.39799], [34.79375, -11.32245], [34.63305, -11.11731], [34.61161, -11.01611], [34.67047, -10.93796], [34.65946, -10.6828], [34.57581, -10.56271], [34.51911, -10.12279], [34.54499, -10.0678], [34.03865, -9.49398], [33.95829, -9.54066], [33.9638, -9.62206], [33.93298, -9.71647], [33.76677, -9.58516], [33.48052, -9.62442]]]] } },
+    { type: "Feature", properties: { iso1A2: "MX", iso1A3: "MEX", iso1N3: "484", wikidata: "Q96", nameEn: "Mexico", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["52"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-117.1243, 32.53427], [-118.48109, 32.5991], [-120.12904, 18.41089], [-92.37213, 14.39277], [-92.2261, 14.53423], [-92.1454, 14.6804], [-92.18161, 14.84147], [-92.1423, 14.88647], [-92.1454, 14.98143], [-92.0621, 15.07406], [-92.20983, 15.26077], [-91.73182, 16.07371], [-90.44567, 16.07573], [-90.40499, 16.40524], [-90.61212, 16.49832], [-90.69064, 16.70697], [-91.04436, 16.92175], [-91.43809, 17.25373], [-90.99199, 17.25192], [-90.98678, 17.81655], [-89.14985, 17.81563], [-89.15105, 17.95104], [-89.03839, 18.0067], [-88.8716, 17.89535], [-88.71505, 18.0707], [-88.48242, 18.49164], [-88.3268, 18.49048], [-88.29909, 18.47591], [-88.26593, 18.47617], [-88.03238, 18.41778], [-88.03165, 18.16657], [-87.90671, 18.15213], [-87.87604, 18.18313], [-87.86657, 18.19971], [-87.85693, 18.18266], [-87.84815, 18.18511], [-86.92368, 17.61462], [-85.9092, 21.8218], [-96.92418, 25.97377], [-97.13927, 25.96583], [-97.35946, 25.92189], [-97.37332, 25.83854], [-97.42511, 25.83969], [-97.45669, 25.86874], [-97.49828, 25.89877], [-97.52025, 25.88518], [-97.66511, 26.01708], [-97.95155, 26.0625], [-97.97017, 26.05232], [-98.24603, 26.07191], [-98.27075, 26.09457], [-98.30491, 26.10475], [-98.35126, 26.15129], [-99.00546, 26.3925], [-99.03053, 26.41249], [-99.08477, 26.39849], [-99.53573, 27.30926], [-99.49744, 27.43746], [-99.482, 27.47128], [-99.48045, 27.49016], [-99.50208, 27.50021], [-99.52955, 27.49747], [-99.51478, 27.55836], [-99.55409, 27.61314], [-100.50029, 28.66117], [-100.51222, 28.70679], [-100.5075, 28.74066], [-100.52313, 28.75598], [-100.59809, 28.88197], [-100.63689, 28.90812], [-100.67294, 29.09744], [-100.79696, 29.24688], [-100.87982, 29.296], [-100.94056, 29.33371], [-100.94579, 29.34523], [-100.96725, 29.3477], [-101.01128, 29.36947], [-101.05686, 29.44738], [-101.47277, 29.7744], [-102.60596, 29.8192], [-103.15787, 28.93865], [-104.37752, 29.54255], [-104.39363, 29.55396], [-104.3969, 29.57105], [-104.5171, 29.64671], [-104.77674, 30.4236], [-106.00363, 31.39181], [-106.09025, 31.40569], [-106.20346, 31.46305], [-106.23711, 31.51262], [-106.24612, 31.54193], [-106.28084, 31.56173], [-106.30305, 31.62154], [-106.33419, 31.66303], [-106.34864, 31.69663], [-106.3718, 31.71165], [-106.38003, 31.73151], [-106.41773, 31.75196], [-106.43419, 31.75478], [-106.45244, 31.76523], [-106.46726, 31.75998], [-106.47298, 31.75054], [-106.48815, 31.74769], [-106.50111, 31.75714], [-106.50962, 31.76155], [-106.51251, 31.76922], [-106.52266, 31.77509], [-106.529, 31.784], [-108.20899, 31.78534], [-108.20979, 31.33316], [-111.07523, 31.33232], [-114.82011, 32.49609], [-114.79524, 32.55731], [-114.81141, 32.55543], [-114.80584, 32.62028], [-114.76736, 32.64094], [-114.71871, 32.71894], [-115.88053, 32.63624], [-117.1243, 32.53427]]]] } },
+    { type: "Feature", properties: { iso1A2: "MY", iso1A3: "MYS", iso1N3: "458", wikidata: "Q833", nameEn: "Malaysia" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "MZ", iso1A3: "MOZ", iso1N3: "508", wikidata: "Q1029", nameEn: "Mozambique", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["258"] }, geometry: { type: "MultiPolygon", coordinates: [[[[40.74206, -10.25691], [40.44265, -10.4618], [40.00295, -10.80255], [39.58249, -10.96043], [39.24395, -11.17433], [38.88996, -11.16978], [38.47258, -11.4199], [38.21598, -11.27289], [37.93618, -11.26228], [37.8388, -11.3123], [37.76614, -11.53352], [37.3936, -11.68949], [36.80309, -11.56836], [36.62068, -11.72884], [36.19094, -11.70008], [36.19094, -11.57593], [35.82767, -11.41081], [35.63599, -11.55927], [34.96296, -11.57354], [34.64241, -11.57499], [34.57917, -11.87849], [34.82903, -12.04837], [34.70739, -12.15652], [34.46088, -12.0174], [34.37831, -12.17408], [34.60253, -13.48487], [34.86229, -13.48958], [35.47989, -14.15594], [35.5299, -14.27714], [35.86945, -14.67481], [35.87212, -14.89478], [35.91812, -14.89514], [35.78799, -15.17428], [35.85303, -15.41913], [35.80487, -16.03907], [35.70107, -16.10147], [35.52365, -16.15414], [35.43355, -16.11371], [35.30157, -16.2211], [35.25828, -16.4792], [35.14235, -16.56812], [35.27219, -16.69402], [35.30929, -16.82871], [35.27065, -16.93817], [35.3062, -17.1244], [35.0923, -17.13235], [35.04805, -17.00027], [35.17017, -16.93521], [35.13771, -16.81687], [35.04805, -16.83167], [34.40344, -16.20923], [34.43126, -16.04737], [34.25195, -15.90321], [34.44981, -15.60864], [34.43126, -15.44778], [34.57503, -15.30619], [34.61522, -14.99583], [34.567, -14.77345], [34.54503, -14.74672], [34.52057, -14.68263], [34.53516, -14.67782], [34.55112, -14.64494], [34.53962, -14.59776], [34.52366, -14.5667], [34.49636, -14.55091], [34.48932, -14.53646], [34.47628, -14.53363], [34.45053, -14.49873], [34.44641, -14.47746], [34.4192, -14.43191], [34.39277, -14.39467], [34.35843, -14.38652], [34.34453, -14.3985], [34.22355, -14.43607], [34.18733, -14.43823], [34.08588, -14.48893], [33.92898, -14.47929], [33.88503, -14.51652], [33.7247, -14.4989], [33.66677, -14.61306], [33.24249, -14.00019], [30.22098, -14.99447], [30.41902, -15.62269], [30.42568, -15.9962], [30.91597, -15.99924], [30.97761, -16.05848], [31.13171, -15.98019], [31.30563, -16.01193], [31.42451, -16.15154], [31.67988, -16.19595], [31.90223, -16.34388], [31.91324, -16.41569], [32.02772, -16.43892], [32.28529, -16.43892], [32.42838, -16.4727], [32.71017, -16.59932], [32.69917, -16.66893], [32.78943, -16.70267], [32.97655, -16.70689], [32.91051, -16.89446], [32.84113, -16.92259], [32.96554, -17.11971], [33.00517, -17.30477], [33.0426, -17.3468], [32.96554, -17.48964], [32.98536, -17.55891], [33.0492, -17.60298], [32.94133, -17.99705], [33.03159, -18.35054], [33.02278, -18.4696], [32.88629, -18.51344], [32.88629, -18.58023], [32.95013, -18.69079], [32.9017, -18.7992], [32.82465, -18.77419], [32.70137, -18.84712], [32.73439, -18.92628], [32.69917, -18.94293], [32.72118, -19.02204], [32.84006, -19.0262], [32.87088, -19.09279], [32.85107, -19.29238], [32.77966, -19.36098], [32.78282, -19.47513], [32.84446, -19.48343], [32.84666, -19.68462], [32.95013, -19.67219], [33.06461, -19.77787], [33.01178, -20.02007], [32.93032, -20.03868], [32.85987, -20.16686], [32.85987, -20.27841], [32.66174, -20.56106], [32.55167, -20.56312], [32.48122, -20.63319], [32.51644, -20.91929], [32.37115, -21.133], [32.48236, -21.32873], [32.41234, -21.31246], [31.38336, -22.36919], [31.30611, -22.422], [31.55779, -23.176], [31.56539, -23.47268], [31.67942, -23.60858], [31.70223, -23.72695], [31.77445, -23.90082], [31.87707, -23.95293], [31.90368, -24.18892], [31.9835, -24.29983], [32.03196, -25.10785], [32.01676, -25.38117], [31.97875, -25.46356], [32.00631, -25.65044], [31.92649, -25.84216], [31.974, -25.95387], [32.00916, -25.999], [32.08599, -26.00978], [32.10435, -26.15656], [32.07352, -26.40185], [32.13409, -26.5317], [32.13315, -26.84345], [32.19409, -26.84032], [32.22302, -26.84136], [32.29584, -26.852], [32.35222, -26.86027], [34.51034, -26.91792], [42.99868, -12.65261], [40.74206, -10.25691]]]] } },
+    { type: "Feature", properties: { iso1A2: "NA", iso1A3: "NAM", iso1N3: "516", wikidata: "Q1030", nameEn: "Namibia", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["264"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.28743, -17.38814], [13.95896, -17.43141], [13.36212, -16.98048], [12.97145, -16.98567], [12.52111, -17.24495], [12.07076, -17.15165], [11.75063, -17.25013], [10.5065, -17.25284], [12.51595, -32.27486], [16.45332, -28.63117], [16.46592, -28.57126], [16.59922, -28.53246], [16.90446, -28.057], [17.15405, -28.08573], [17.4579, -28.68718], [18.99885, -28.89165], [19.99882, -28.42622], [19.99817, -24.76768], [19.99912, -21.99991], [20.99751, -22.00026], [20.99904, -18.31743], [21.45556, -18.31795], [23.0996, -18.00075], [23.29618, -17.99855], [23.61088, -18.4881], [24.19416, -18.01919], [24.40577, -17.95726], [24.57485, -18.07151], [24.6303, -17.9863], [24.71887, -17.9218], [24.73364, -17.89338], [24.95586, -17.79674], [25.05895, -17.84452], [25.16882, -17.78253], [25.26433, -17.79571], [25.00198, -17.58221], [24.70864, -17.49501], [24.5621, -17.52963], [24.38712, -17.46818], [24.32811, -17.49082], [24.23619, -17.47489], [23.47474, -17.62877], [21.42741, -18.02787], [21.14283, -17.94318], [18.84226, -17.80375], [18.39229, -17.38927], [14.28743, -17.38814]]]] } },
+    { type: "Feature", properties: { iso1A2: "NC", iso1A3: "NCL", iso1N3: "540", wikidata: "Q33788", nameEn: "New Caledonia", country: "FR", groups: ["EU", "Q1451600", "054", "009", "UN"], callingCodes: ["687"] }, geometry: { type: "MultiPolygon", coordinates: [[[[159.77159, -28.41151], [174.245, -23.1974], [156.73836, -14.50464], [159.77159, -28.41151]]]] } },
+    { type: "Feature", properties: { iso1A2: "NE", iso1A3: "NER", iso1N3: "562", wikidata: "Q1032", nameEn: "Niger", aliases: ["RN"], groups: ["011", "202", "002", "UN"], callingCodes: ["227"] }, geometry: { type: "MultiPolygon", coordinates: [[[[14.22918, 22.61719], [13.5631, 23.16574], [11.96886, 23.51735], [7.48273, 20.87258], [7.38361, 20.79165], [5.8153, 19.45101], [4.26651, 19.14224], [4.26762, 17.00432], [4.21787, 17.00118], [4.19893, 16.39923], [3.50368, 15.35934], [3.03134, 15.42221], [3.01806, 15.34571], [1.31275, 15.27978], [0.96711, 14.98275], [0.72632, 14.95898], [0.23859, 15.00135], [0.16936, 14.51654], [0.38051, 14.05575], [0.61924, 13.68491], [0.77377, 13.6866], [0.77637, 13.64442], [0.99514, 13.5668], [1.02813, 13.46635], [1.20088, 13.38951], [1.24429, 13.39373], [1.28509, 13.35488], [1.24516, 13.33968], [1.21217, 13.37853], [1.18873, 13.31771], [0.99253, 13.37515], [0.99167, 13.10727], [2.26349, 12.41915], [2.05785, 12.35539], [2.39723, 11.89473], [2.45824, 11.98672], [2.39657, 12.10952], [2.37783, 12.24804], [2.6593, 12.30631], [2.83978, 12.40585], [3.25352, 12.01467], [3.31613, 11.88495], [3.48187, 11.86092], [3.59375, 11.70269], [3.61075, 11.69181], [3.67988, 11.75429], [3.67122, 11.80865], [3.63063, 11.83042], [3.61955, 11.91847], [3.67775, 11.97599], [3.63136, 12.11826], [3.66364, 12.25884], [3.65111, 12.52223], [3.94339, 12.74979], [4.10006, 12.98862], [4.14367, 13.17189], [4.14186, 13.47586], [4.23456, 13.47725], [4.4668, 13.68286], [4.87425, 13.78], [4.9368, 13.7345], [5.07396, 13.75052], [5.21026, 13.73627], [5.27797, 13.75474], [5.35437, 13.83567], [5.52957, 13.8845], [6.15771, 13.64564], [6.27411, 13.67835], [6.43053, 13.6006], [6.69617, 13.34057], [6.94445, 12.99825], [7.0521, 13.00076], [7.12676, 13.02445], [7.22399, 13.1293], [7.39241, 13.09717], [7.81085, 13.34902], [8.07997, 13.30847], [8.25185, 13.20369], [8.41853, 13.06166], [8.49493, 13.07519], [8.60431, 13.01768], [8.64251, 12.93985], [8.97413, 12.83661], [9.65995, 12.80614], [10.00373, 13.18171], [10.19993, 13.27129], [10.46731, 13.28819], [10.66004, 13.36422], [11.4535, 13.37773], [11.88236, 13.2527], [12.04209, 13.14452], [12.16189, 13.10056], [12.19315, 13.12423], [12.47095, 13.06673], [12.58033, 13.27805], [12.6793, 13.29157], [12.87376, 13.48919], [13.05085, 13.53984], [13.19844, 13.52802], [13.33213, 13.71195], [13.6302, 13.71094], [13.47559, 14.40881], [13.48259, 14.46704], [13.68573, 14.55276], [13.67878, 14.64013], [13.809, 14.72915], [13.78991, 14.87519], [13.86301, 15.04043], [14.37425, 15.72591], [15.50373, 16.89649], [15.6032, 18.77402], [15.75098, 19.93002], [15.99632, 20.35364], [15.6721, 20.70069], [15.59841, 20.74039], [15.56004, 20.79488], [15.55382, 20.86507], [15.57248, 20.92138], [15.62515, 20.95395], [15.28332, 21.44557], [15.20213, 21.49365], [15.19692, 21.99339], [14.99751, 23.00539], [14.22918, 22.61719]]]] } },
+    { type: "Feature", properties: { iso1A2: "NF", iso1A3: "NFK", iso1N3: "574", wikidata: "Q31057", nameEn: "Norfolk Island", country: "AU", groups: ["053", "009", "UN"], driveSide: "left", callingCodes: ["672 3"] }, geometry: { type: "MultiPolygon", coordinates: [[[[169.82316, -28.16667], [166.29505, -28.29175], [167.94076, -30.60745], [169.82316, -28.16667]]]] } },
+    { type: "Feature", properties: { iso1A2: "NG", iso1A3: "NGA", iso1N3: "566", wikidata: "Q1033", nameEn: "Nigeria", groups: ["011", "202", "002", "UN"], callingCodes: ["234"] }, geometry: { type: "MultiPolygon", coordinates: [[[[6.15771, 13.64564], [5.52957, 13.8845], [5.35437, 13.83567], [5.27797, 13.75474], [5.21026, 13.73627], [5.07396, 13.75052], [4.9368, 13.7345], [4.87425, 13.78], [4.4668, 13.68286], [4.23456, 13.47725], [4.14186, 13.47586], [4.14367, 13.17189], [4.10006, 12.98862], [3.94339, 12.74979], [3.65111, 12.52223], [3.66364, 12.25884], [3.63136, 12.11826], [3.67775, 11.97599], [3.61955, 11.91847], [3.63063, 11.83042], [3.67122, 11.80865], [3.67988, 11.75429], [3.61075, 11.69181], [3.59375, 11.70269], [3.49175, 11.29765], [3.71505, 11.13015], [3.84243, 10.59316], [3.78292, 10.40538], [3.6844, 10.46351], [3.57275, 10.27185], [3.66908, 10.18136], [3.54429, 9.87739], [3.35383, 9.83641], [3.32099, 9.78032], [3.34726, 9.70696], [3.25093, 9.61632], [3.13928, 9.47167], [3.14147, 9.28375], [3.08017, 9.10006], [2.77907, 9.06924], [2.67523, 7.87825], [2.73095, 7.7755], [2.73405, 7.5423], [2.78668, 7.5116], [2.79442, 7.43486], [2.74489, 7.42565], [2.76965, 7.13543], [2.71702, 6.95722], [2.74024, 6.92802], [2.73405, 6.78508], [2.78823, 6.76356], [2.78204, 6.70514], [2.7325, 6.64057], [2.74334, 6.57291], [2.70464, 6.50831], [2.70566, 6.38038], [2.74181, 6.13349], [5.87055, 3.78489], [8.34397, 4.30689], [8.60302, 4.87353], [8.78027, 5.1243], [8.92029, 5.58403], [8.83687, 5.68483], [8.88156, 5.78857], [8.84209, 5.82562], [9.51757, 6.43874], [9.70674, 6.51717], [9.77824, 6.79088], [9.86314, 6.77756], [10.15135, 7.03781], [10.21466, 6.88996], [10.53639, 6.93432], [10.57214, 7.16345], [10.59746, 7.14719], [10.60789, 7.06885], [10.83727, 6.9358], [10.8179, 6.83377], [10.94302, 6.69325], [11.09644, 6.68437], [11.09495, 6.51717], [11.42041, 6.53789], [11.42264, 6.5882], [11.51499, 6.60892], [11.57755, 6.74059], [11.55818, 6.86186], [11.63117, 6.9905], [11.87396, 7.09398], [11.84864, 7.26098], [11.93205, 7.47812], [12.01844, 7.52981], [11.99908, 7.67302], [12.20909, 7.97553], [12.19271, 8.10826], [12.24782, 8.17904], [12.26123, 8.43696], [12.4489, 8.52536], [12.44146, 8.6152], [12.68722, 8.65938], [12.71701, 8.7595], [12.79, 8.75361], [12.81085, 8.91992], [12.90022, 9.11411], [12.91958, 9.33905], [12.85628, 9.36698], [13.02385, 9.49334], [13.22642, 9.57266], [13.25472, 9.76795], [13.29941, 9.8296], [13.25025, 9.86042], [13.24132, 9.91031], [13.27409, 9.93232], [13.286, 9.9822], [13.25323, 10.00127], [13.25025, 10.03647], [13.34111, 10.12299], [13.43644, 10.13326], [13.5705, 10.53183], [13.54964, 10.61236], [13.73434, 10.9255], [13.70753, 10.94451], [13.7403, 11.00593], [13.78945, 11.00154], [13.97489, 11.30258], [14.17821, 11.23831], [14.6124, 11.51283], [14.64591, 11.66166], [14.55207, 11.72001], [14.61612, 11.7798], [14.6474, 12.17466], [14.4843, 12.35223], [14.22215, 12.36533], [14.17523, 12.41916], [14.20204, 12.53405], [14.08251, 13.0797], [13.6302, 13.71094], [13.33213, 13.71195], [13.19844, 13.52802], [13.05085, 13.53984], [12.87376, 13.48919], [12.6793, 13.29157], [12.58033, 13.27805], [12.47095, 13.06673], [12.19315, 13.12423], [12.16189, 13.10056], [12.04209, 13.14452], [11.88236, 13.2527], [11.4535, 13.37773], [10.66004, 13.36422], [10.46731, 13.28819], [10.19993, 13.27129], [10.00373, 13.18171], [9.65995, 12.80614], [8.97413, 12.83661], [8.64251, 12.93985], [8.60431, 13.01768], [8.49493, 13.07519], [8.41853, 13.06166], [8.25185, 13.20369], [8.07997, 13.30847], [7.81085, 13.34902], [7.39241, 13.09717], [7.22399, 13.1293], [7.12676, 13.02445], [7.0521, 13.00076], [6.94445, 12.99825], [6.69617, 13.34057], [6.43053, 13.6006], [6.27411, 13.67835], [6.15771, 13.64564]]]] } },
+    { type: "Feature", properties: { iso1A2: "NI", iso1A3: "NIC", iso1N3: "558", wikidata: "Q811", nameEn: "Nicaragua", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["505"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-83.13724, 15.00002], [-83.49268, 15.01158], [-83.62101, 14.89448], [-83.89551, 14.76697], [-84.10584, 14.76353], [-84.48373, 14.63249], [-84.70119, 14.68078], [-84.82596, 14.82212], [-84.90082, 14.80489], [-85.1575, 14.53934], [-85.18602, 14.24929], [-85.32149, 14.2562], [-85.45762, 14.11304], [-85.73964, 13.9698], [-85.75477, 13.8499], [-86.03458, 13.99181], [-86.00685, 14.08474], [-86.14801, 14.04317], [-86.35219, 13.77157], [-86.76812, 13.79605], [-86.71267, 13.30348], [-86.87066, 13.30641], [-86.93383, 13.18677], [-86.93197, 13.05313], [-87.03785, 12.98682], [-87.06306, 13.00892], [-87.37107, 12.98646], [-87.55124, 13.12523], [-87.7346, 13.13228], [-88.11443, 12.63306], [-86.14524, 11.09059], [-85.71223, 11.06868], [-85.60529, 11.22607], [-84.92439, 10.9497], [-84.68197, 11.07568], [-83.90838, 10.71161], [-83.66597, 10.79916], [-83.68276, 11.01562], [-82.56142, 11.91792], [-82.06974, 14.49418], [-83.04763, 15.03256], [-83.13724, 15.00002]]]] } },
+    { type: "Feature", properties: { iso1A2: "NL", iso1A3: "NLD", iso1N3: "528", wikidata: "Q29999", nameEn: "Kingdom of the Netherlands" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "NO", iso1A3: "NOR", iso1N3: "578", wikidata: "Q20", nameEn: "Norway" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "NP", iso1A3: "NPL", iso1N3: "524", wikidata: "Q837", nameEn: "Nepal", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["977"] }, geometry: { type: "MultiPolygon", coordinates: [[[[88.13378, 27.88015], [87.82681, 27.95248], [87.72718, 27.80938], [87.56996, 27.84517], [87.11696, 27.84104], [87.03757, 27.94835], [86.75582, 28.04182], [86.74181, 28.10638], [86.56265, 28.09569], [86.51609, 27.96623], [86.42736, 27.91122], [86.22966, 27.9786], [86.18607, 28.17364], [86.088, 28.09264], [86.08333, 28.02121], [86.12069, 27.93047], [86.06309, 27.90021], [85.94946, 27.9401], [85.97813, 27.99023], [85.90743, 28.05144], [85.84672, 28.18187], [85.74864, 28.23126], [85.71907, 28.38064], [85.69105, 28.38475], [85.60854, 28.25045], [85.59765, 28.30529], [85.4233, 28.32996], [85.38127, 28.28336], [85.10729, 28.34092], [85.18668, 28.54076], [85.19135, 28.62825], [85.06059, 28.68562], [84.85511, 28.58041], [84.62317, 28.73887], [84.47528, 28.74023], [84.2231, 28.89571], [84.24801, 29.02783], [84.18107, 29.23451], [83.97559, 29.33091], [83.82303, 29.30513], [83.63156, 29.16249], [83.44787, 29.30513], [83.28131, 29.56813], [83.07116, 29.61957], [82.73024, 29.81695], [82.5341, 29.9735], [82.38622, 30.02608], [82.16984, 30.0692], [82.19475, 30.16884], [82.10757, 30.23745], [82.10135, 30.35439], [81.99082, 30.33423], [81.62033, 30.44703], [81.5459, 30.37688], [81.41018, 30.42153], [81.39928, 30.21862], [81.33355, 30.15303], [81.2623, 30.14596], [81.29032, 30.08806], [81.24362, 30.0126], [81.12842, 30.01395], [81.03953, 30.20059], [80.92547, 30.17193], [80.91143, 30.22173], [80.86673, 30.17321], [80.8778, 30.13384], [80.67076, 29.95732], [80.60226, 29.95732], [80.57179, 29.91422], [80.56247, 29.86661], [80.48997, 29.79566], [80.43458, 29.80466], [80.41554, 29.79451], [80.36803, 29.73865], [80.38428, 29.68513], [80.41858, 29.63581], [80.37939, 29.57098], [80.24322, 29.44299], [80.31428, 29.30784], [80.28626, 29.20327], [80.24112, 29.21414], [80.26602, 29.13938], [80.23178, 29.11626], [80.18085, 29.13649], [80.05743, 28.91479], [80.06957, 28.82763], [80.12125, 28.82346], [80.37188, 28.63371], [80.44504, 28.63098], [80.52443, 28.54897], [80.50575, 28.6706], [80.55142, 28.69182], [81.03471, 28.40054], [81.19847, 28.36284], [81.32923, 28.13521], [81.38683, 28.17638], [81.48179, 28.12148], [81.47867, 28.08303], [81.91223, 27.84995], [81.97214, 27.93322], [82.06554, 27.92222], [82.46405, 27.6716], [82.70378, 27.72122], [82.74119, 27.49838], [82.93261, 27.50328], [82.94938, 27.46036], [83.19413, 27.45632], [83.27197, 27.38309], [83.2673, 27.36235], [83.29999, 27.32778], [83.35136, 27.33885], [83.38872, 27.39276], [83.39495, 27.4798], [83.61288, 27.47013], [83.85595, 27.35797], [83.86182, 27.4241], [83.93306, 27.44939], [84.02229, 27.43836], [84.10791, 27.52399], [84.21376, 27.45218], [84.25735, 27.44941], [84.29315, 27.39], [84.62161, 27.33885], [84.69166, 27.21294], [84.64496, 27.04669], [84.793, 26.9968], [84.82913, 27.01989], [84.85754, 26.98984], [84.96687, 26.95599], [84.97186, 26.9149], [85.00536, 26.89523], [85.05592, 26.88991], [85.02635, 26.85381], [85.15883, 26.86966], [85.19291, 26.86909], [85.18046, 26.80519], [85.21159, 26.75933], [85.34302, 26.74954], [85.47752, 26.79292], [85.56471, 26.84133], [85.5757, 26.85955], [85.59461, 26.85161], [85.61621, 26.86721], [85.66239, 26.84822], [85.73483, 26.79613], [85.72315, 26.67471], [85.76907, 26.63076], [85.83126, 26.61134], [85.85126, 26.60866], [85.8492, 26.56667], [86.02729, 26.66756], [86.13596, 26.60651], [86.22513, 26.58863], [86.26235, 26.61886], [86.31564, 26.61925], [86.49726, 26.54218], [86.54258, 26.53819], [86.57073, 26.49825], [86.61313, 26.48658], [86.62686, 26.46891], [86.69124, 26.45169], [86.74025, 26.42386], [86.76797, 26.45892], [86.82898, 26.43919], [86.94543, 26.52076], [86.95912, 26.52076], [87.01559, 26.53228], [87.04691, 26.58685], [87.0707, 26.58571], [87.09147, 26.45039], [87.14751, 26.40542], [87.18863, 26.40558], [87.24682, 26.4143], [87.26587, 26.40592], [87.26568, 26.37294], [87.34568, 26.34787], [87.37314, 26.40815], [87.46566, 26.44058], [87.51571, 26.43106], [87.55274, 26.40596], [87.59175, 26.38342], [87.66803, 26.40294], [87.67893, 26.43501], [87.76004, 26.40711], [87.7918, 26.46737], [87.84193, 26.43663], [87.89085, 26.48565], [87.90115, 26.44923], [88.00895, 26.36029], [88.09414, 26.43732], [88.09963, 26.54195], [88.16452, 26.64111], [88.1659, 26.68177], [88.19107, 26.75516], [88.12302, 26.95324], [88.13422, 26.98705], [88.11719, 26.98758], [87.9887, 27.11045], [88.01587, 27.21388], [88.01646, 27.21612], [88.07277, 27.43007], [88.04008, 27.49223], [88.19107, 27.79285], [88.1973, 27.85067], [88.13378, 27.88015]]]] } },
+    { type: "Feature", properties: { iso1A2: "NR", iso1A3: "NRU", iso1N3: "520", wikidata: "Q697", nameEn: "Nauru", groups: ["057", "009", "UN"], driveSide: "left", callingCodes: ["674"] }, geometry: { type: "MultiPolygon", coordinates: [[[[166.95155, 0.14829], [166.21778, -0.7977], [167.60042, -0.88259], [166.95155, 0.14829]]]] } },
+    { type: "Feature", properties: { iso1A2: "NU", iso1A3: "NIU", iso1N3: "570", wikidata: "Q34020", nameEn: "Niue", country: "NZ", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["683"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-170.83899, -18.53439], [-170.82274, -20.44429], [-168.63096, -18.60489], [-170.83899, -18.53439]]]] } },
+    { type: "Feature", properties: { iso1A2: "NZ", iso1A3: "NZL", iso1N3: "554", wikidata: "Q664", nameEn: "New Zealand" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "OM", iso1A3: "OMN", iso1N3: "512", wikidata: "Q842", nameEn: "Oman", groups: ["145", "142", "UN"], callingCodes: ["968"] }, geometry: { type: "MultiPolygon", coordinates: [[[[56.82555, 25.7713], [56.79239, 26.41236], [56.68954, 26.76645], [56.2644, 26.58649], [55.81777, 26.18798], [56.08666, 26.05038], [56.15498, 26.06828], [56.19334, 25.9795], [56.13963, 25.82765], [56.17416, 25.77239], [56.13579, 25.73524], [56.14826, 25.66351], [56.18363, 25.65508], [56.20473, 25.61119], [56.25365, 25.60211], [56.26636, 25.60643], [56.25341, 25.61443], [56.26534, 25.62825], [56.82555, 25.7713]]], [[[56.26062, 25.33108], [56.23362, 25.31253], [56.25008, 25.28843], [56.24465, 25.27505], [56.20838, 25.25668], [56.20872, 25.24104], [56.24341, 25.22867], [56.27628, 25.23404], [56.34438, 25.26653], [56.35172, 25.30681], [56.3111, 25.30107], [56.3005, 25.31815], [56.26062, 25.33108]], [[56.28423, 25.26344], [56.27086, 25.26128], [56.2716, 25.27916], [56.28102, 25.28486], [56.29379, 25.2754], [56.28423, 25.26344]]], [[[61.45114, 22.55394], [56.86325, 25.03856], [56.3227, 24.97284], [56.34873, 24.93205], [56.30269, 24.88334], [56.20568, 24.85063], [56.20062, 24.78565], [56.13684, 24.73699], [56.06128, 24.74457], [56.03535, 24.81161], [55.97836, 24.87673], [55.97467, 24.89639], [56.05106, 24.87461], [56.05715, 24.95727], [55.96316, 25.00857], [55.90849, 24.96771], [55.85094, 24.96858], [55.81116, 24.9116], [55.81348, 24.80102], [55.83408, 24.77858], [55.83271, 24.68567], [55.76461, 24.5287], [55.83271, 24.41521], [55.83395, 24.32776], [55.80747, 24.31069], [55.79145, 24.27914], [55.76781, 24.26209], [55.75939, 24.26114], [55.75382, 24.2466], [55.75257, 24.23466], [55.76558, 24.23227], [55.77658, 24.23476], [55.83367, 24.20193], [55.95472, 24.2172], [56.01799, 24.07426], [55.8308, 24.01633], [55.73301, 24.05994], [55.48677, 23.94946], [55.57358, 23.669], [55.22634, 23.10378], [55.2137, 22.71065], [55.66469, 21.99658], [54.99756, 20.00083], [52.00311, 19.00083], [52.78009, 17.35124], [52.74267, 17.29519], [52.81185, 17.28568], [57.49095, 8.14549], [61.45114, 22.55394]]]] } },
+    { type: "Feature", properties: { iso1A2: "PA", iso1A3: "PAN", iso1N3: "591", wikidata: "Q804", nameEn: "Panama", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["507"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-77.32389, 8.81247], [-77.58292, 9.22278], [-78.79327, 9.93766], [-82.51044, 9.65379], [-82.56507, 9.57279], [-82.61345, 9.49881], [-82.66667, 9.49746], [-82.77206, 9.59573], [-82.87919, 9.62645], [-82.84871, 9.4973], [-82.93516, 9.46741], [-82.93516, 9.07687], [-82.72126, 8.97125], [-82.88253, 8.83331], [-82.91377, 8.774], [-82.92068, 8.74832], [-82.8794, 8.6981], [-82.82739, 8.60153], [-82.83975, 8.54755], [-82.83322, 8.52464], [-82.8382, 8.48117], [-82.8679, 8.44042], [-82.93056, 8.43465], [-83.05209, 8.33394], [-82.9388, 8.26634], [-82.88641, 8.10219], [-82.89137, 8.05755], [-82.89978, 8.04083], [-82.94503, 7.93865], [-82.13751, 6.97312], [-78.06168, 7.07793], [-77.89178, 7.22681], [-77.81426, 7.48319], [-77.72157, 7.47612], [-77.72514, 7.72348], [-77.57185, 7.51147], [-77.17257, 7.97422], [-77.45064, 8.49991], [-77.32389, 8.81247]]]] } },
+    { type: "Feature", properties: { iso1A2: "PE", iso1A3: "PER", iso1N3: "604", wikidata: "Q419", nameEn: "Peru", groups: ["005", "419", "019", "UN"], callingCodes: ["51"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-74.26675, -0.97229], [-74.42701, -0.50218], [-75.18513, -0.0308], [-75.25764, -0.11943], [-75.40192, -0.17196], [-75.61997, -0.10012], [-75.60169, -0.18708], [-75.53615, -0.19213], [-75.22862, -0.60048], [-75.22862, -0.95588], [-75.3872, -0.9374], [-75.57429, -1.55961], [-76.05203, -2.12179], [-76.6324, -2.58397], [-77.94147, -3.05454], [-78.19369, -3.36431], [-78.14324, -3.47653], [-78.22642, -3.51113], [-78.24589, -3.39907], [-78.34362, -3.38633], [-78.68394, -4.60754], [-78.85149, -4.66795], [-79.01659, -5.01481], [-79.1162, -4.97774], [-79.26248, -4.95167], [-79.59402, -4.46848], [-79.79722, -4.47558], [-80.13945, -4.29786], [-80.39256, -4.48269], [-80.46386, -4.41516], [-80.32114, -4.21323], [-80.45023, -4.20938], [-80.4822, -4.05477], [-80.46386, -4.01342], [-80.13232, -3.90317], [-80.19926, -3.68894], [-80.18741, -3.63994], [-80.19848, -3.59249], [-80.21642, -3.5888], [-80.20535, -3.51667], [-80.22629, -3.501], [-80.23651, -3.48652], [-80.24586, -3.48677], [-80.24123, -3.46124], [-80.20647, -3.431], [-80.30602, -3.39149], [-84.52388, -3.36941], [-85.71054, -21.15413], [-70.59118, -18.35072], [-70.378, -18.3495], [-70.31267, -18.31258], [-70.16394, -18.31737], [-69.96732, -18.25992], [-69.81607, -18.12582], [-69.75305, -17.94605], [-69.82868, -17.72048], [-69.79087, -17.65563], [-69.66483, -17.65083], [-69.46897, -17.4988], [-69.46863, -17.37466], [-69.62883, -17.28142], [-69.16896, -16.72233], [-69.00853, -16.66769], [-69.04027, -16.57214], [-68.98358, -16.42165], [-68.79464, -16.33272], [-68.96238, -16.194], [-69.09986, -16.22693], [-69.20291, -16.16668], [-69.40336, -15.61358], [-69.14856, -15.23478], [-69.36254, -14.94634], [-68.88135, -14.18639], [-69.05265, -13.68546], [-68.8864, -13.40792], [-68.85615, -12.87769], [-68.65044, -12.50689], [-68.98115, -11.8979], [-69.57156, -10.94555], [-69.57835, -10.94051], [-69.90896, -10.92744], [-70.38791, -11.07096], [-70.51395, -10.92249], [-70.64134, -11.0108], [-70.62487, -9.80666], [-70.55429, -9.76692], [-70.58453, -9.58303], [-70.53373, -9.42628], [-71.23394, -9.9668], [-72.14742, -9.98049], [-72.31883, -9.5184], [-72.72216, -9.41397], [-73.21498, -9.40904], [-72.92886, -9.04074], [-73.76576, -7.89884], [-73.65485, -7.77897], [-73.96938, -7.58465], [-73.77011, -7.28944], [-73.73986, -6.87919], [-73.12983, -6.43852], [-73.24579, -6.05764], [-72.83973, -5.14765], [-72.64391, -5.0391], [-71.87003, -4.51661], [-70.96814, -4.36915], [-70.77601, -4.15717], [-70.33236, -4.15214], [-70.19582, -4.3607], [-70.11305, -4.27281], [-70.00888, -4.37833], [-69.94708, -4.2431], [-70.3374, -3.79505], [-70.52393, -3.87553], [-70.71396, -3.7921], [-70.04609, -2.73906], [-70.94377, -2.23142], [-71.75223, -2.15058], [-72.92587, -2.44514], [-73.65312, -1.26222], [-74.26675, -0.97229]]]] } },
+    { type: "Feature", properties: { iso1A2: "PF", iso1A3: "PYF", iso1N3: "258", wikidata: "Q30971", nameEn: "French Polynesia", country: "FR", groups: ["EU", "Q1451600", "061", "009", "UN"], callingCodes: ["689"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-135.59706, -4.70473], [-156.48634, -15.52824], [-156.45576, -31.75456], [-133.59543, -28.4709], [-135.59706, -4.70473]]]] } },
+    { type: "Feature", properties: { iso1A2: "PG", iso1A3: "PNG", iso1N3: "598", wikidata: "Q691", nameEn: "Papua New Guinea", groups: ["054", "009", "UN"], driveSide: "left", callingCodes: ["675"] }, geometry: { type: "MultiPolygon", coordinates: [[[[141.03157, 2.12829], [140.99813, -6.3233], [140.85295, -6.72996], [140.90448, -6.85033], [141.01763, -6.90181], [141.01842, -9.35091], [141.88934, -9.36111], [142.19246, -9.15378], [142.48658, -9.36754], [143.29772, -9.33993], [143.87386, -9.02382], [145.2855, -9.62524], [156.73836, -14.50464], [154.74815, -7.33315], [155.60735, -6.92266], [155.69784, -6.92661], [155.92557, -6.84664], [156.03993, -6.65703], [156.03296, -6.55528], [160.43769, -4.17974], [141.03157, 2.12829]]]] } },
+    { type: "Feature", properties: { iso1A2: "PH", iso1A3: "PHL", iso1N3: "608", wikidata: "Q928", nameEn: "Philippines", aliases: ["PI", "RP"], groups: ["035", "142", "UN"], callingCodes: ["63"] }, geometry: { type: "MultiPolygon", coordinates: [[[[129.19694, 7.84182], [121.8109, 21.77688], [120.69238, 21.52331], [118.82252, 14.67191], [115.39742, 10.92666], [116.79524, 7.43869], [117.17735, 7.52841], [117.93857, 6.89845], [117.98544, 6.27477], [119.52945, 5.35672], [118.93936, 4.09009], [118.06469, 4.16638], [121.14448, 2.12444], [129.19694, 7.84182]]]] } },
+    { type: "Feature", properties: { iso1A2: "PK", iso1A3: "PAK", iso1N3: "586", wikidata: "Q843", nameEn: "Pakistan", groups: ["034", "142", "UN"], driveSide: "left", callingCodes: ["92"] }, geometry: { type: "MultiPolygon", coordinates: [[[[75.72737, 36.7529], [75.45562, 36.71971], [75.40481, 36.95382], [75.13839, 37.02622], [74.56453, 37.03023], [74.53739, 36.96224], [74.43389, 37.00977], [74.04856, 36.82648], [73.82685, 36.91421], [72.6323, 36.84601], [72.18135, 36.71838], [71.80267, 36.49924], [71.60491, 36.39429], [71.19505, 36.04134], [71.37969, 35.95865], [71.55273, 35.71483], [71.49917, 35.6267], [71.65435, 35.4479], [71.54294, 35.31037], [71.5541, 35.28776], [71.67495, 35.21262], [71.52938, 35.09023], [71.55273, 35.02615], [71.49917, 35.00478], [71.50329, 34.97328], [71.29472, 34.87728], [71.28356, 34.80882], [71.08718, 34.69034], [71.11602, 34.63047], [71.0089, 34.54568], [71.02401, 34.44835], [71.17662, 34.36769], [71.12815, 34.26619], [71.13078, 34.16503], [71.09453, 34.13524], [71.09307, 34.11961], [71.06933, 34.10564], [71.07345, 34.06242], [70.88119, 33.97933], [70.54336, 33.9463], [69.90203, 34.04194], [69.87307, 33.9689], [69.85671, 33.93719], [70.00503, 33.73528], [70.14236, 33.71701], [70.14785, 33.6553], [70.20141, 33.64387], [70.17062, 33.53535], [70.32775, 33.34496], [70.13686, 33.21064], [70.07369, 33.22557], [70.02563, 33.14282], [69.85259, 33.09451], [69.79766, 33.13247], [69.71526, 33.09911], [69.57656, 33.09911], [69.49004, 33.01509], [69.49854, 32.88843], [69.5436, 32.8768], [69.47082, 32.85834], [69.38018, 32.76601], [69.43649, 32.7302], [69.44747, 32.6678], [69.38155, 32.56601], [69.2868, 32.53938], [69.23599, 32.45946], [69.27932, 32.29119], [69.27032, 32.14141], [69.3225, 31.93186], [69.20577, 31.85957], [69.11514, 31.70782], [69.00939, 31.62249], [68.95995, 31.64822], [68.91078, 31.59687], [68.79997, 31.61665], [68.6956, 31.75687], [68.57475, 31.83158], [68.44222, 31.76446], [68.27605, 31.75863], [68.25614, 31.80357], [68.1655, 31.82691], [68.00071, 31.6564], [67.86887, 31.63536], [67.72056, 31.52304], [67.58323, 31.52772], [67.62374, 31.40473], [67.7748, 31.4188], [67.78854, 31.33203], [67.29964, 31.19586], [67.03323, 31.24519], [67.04147, 31.31561], [66.83273, 31.26867], [66.72561, 31.20526], [66.68166, 31.07597], [66.58175, 30.97532], [66.42645, 30.95309], [66.39194, 30.9408], [66.28413, 30.57001], [66.34869, 30.404], [66.23609, 30.06321], [66.36042, 29.9583], [66.24175, 29.85181], [65.04005, 29.53957], [64.62116, 29.58903], [64.19796, 29.50407], [64.12966, 29.39157], [63.5876, 29.50456], [62.47751, 29.40782], [60.87231, 29.86514], [61.31508, 29.38903], [61.53765, 29.00507], [61.65978, 28.77937], [61.93581, 28.55284], [62.40259, 28.42703], [62.59499, 28.24842], [62.79412, 28.28108], [62.7638, 28.02992], [62.84905, 27.47627], [62.79684, 27.34381], [62.80604, 27.22412], [63.19649, 27.25674], [63.32283, 27.14437], [63.25005, 27.08692], [63.25005, 26.84212], [63.18688, 26.83844], [63.1889, 26.65072], [62.77352, 26.64099], [62.31484, 26.528], [62.21304, 26.26601], [62.05117, 26.31647], [61.89391, 26.26251], [61.83831, 26.07249], [61.83968, 25.7538], [61.683, 25.66638], [61.6433, 25.27541], [61.46682, 24.57869], [68.11329, 23.53945], [68.20763, 23.85849], [68.39339, 23.96838], [68.74643, 23.97027], [68.7416, 24.31904], [68.90914, 24.33156], [68.97781, 24.26021], [69.07806, 24.29777], [69.19341, 24.25646], [69.29778, 24.28712], [69.59579, 24.29777], [69.73335, 24.17007], [70.03428, 24.172], [70.11712, 24.30915], [70.5667, 24.43787], [70.57906, 24.27774], [70.71502, 24.23517], [70.88393, 24.27398], [70.85784, 24.30903], [70.94985, 24.3791], [71.04461, 24.34657], [71.12838, 24.42662], [71.00341, 24.46038], [70.97594, 24.60904], [71.09405, 24.69017], [70.94002, 24.92843], [70.89148, 25.15064], [70.66695, 25.39314], [70.67382, 25.68186], [70.60378, 25.71898], [70.53649, 25.68928], [70.37444, 25.67443], [70.2687, 25.71156], [70.0985, 25.93238], [70.08193, 26.08094], [70.17532, 26.24118], [70.17532, 26.55362], [70.05584, 26.60398], [69.88555, 26.56836], [69.50904, 26.74892], [69.58519, 27.18109], [70.03136, 27.56627], [70.12502, 27.8057], [70.37307, 28.01208], [70.60927, 28.02178], [70.79054, 27.68423], [71.89921, 27.96035], [71.9244, 28.11555], [72.20329, 28.3869], [72.29495, 28.66367], [72.40402, 28.78283], [72.94272, 29.02487], [73.01337, 29.16422], [73.05886, 29.1878], [73.28094, 29.56646], [73.3962, 29.94707], [73.58665, 30.01848], [73.80299, 30.06969], [73.97225, 30.19829], [73.95736, 30.28466], [73.88993, 30.36305], [74.5616, 31.04153], [74.67971, 31.05479], [74.6852, 31.12771], [74.60006, 31.13711], [74.60281, 31.10419], [74.56023, 31.08303], [74.51629, 31.13829], [74.53223, 31.30321], [74.59773, 31.4136], [74.64713, 31.45605], [74.59319, 31.50197], [74.61517, 31.55698], [74.57498, 31.60382], [74.47771, 31.72227], [74.58907, 31.87824], [74.79919, 31.95983], [74.86236, 32.04485], [74.9269, 32.0658], [75.00793, 32.03786], [75.25649, 32.10187], [75.38046, 32.26836], [75.28259, 32.36556], [75.03265, 32.49538], [74.97634, 32.45367], [74.84725, 32.49075], [74.68362, 32.49298], [74.67431, 32.56676], [74.65251, 32.56416], [74.64424, 32.60985], [74.69542, 32.66792], [74.65345, 32.71225], [74.7113, 32.84219], [74.64675, 32.82604], [74.6289, 32.75561], [74.45312, 32.77755], [74.41467, 32.90563], [74.31227, 32.92795], [74.34875, 32.97823], [74.31854, 33.02891], [74.17571, 33.07495], [74.15374, 33.13477], [74.02144, 33.18908], [74.01366, 33.25199], [74.08782, 33.26232], [74.17983, 33.3679], [74.18121, 33.4745], [74.10115, 33.56392], [74.03576, 33.56718], [73.97367, 33.64061], [73.98968, 33.66155], [73.96423, 33.73071], [74.00891, 33.75437], [74.05898, 33.82089], [74.14001, 33.83002], [74.26086, 33.92237], [74.25262, 34.01577], [74.21554, 34.03853], [73.91341, 34.01235], [73.88732, 34.05105], [73.90677, 34.10504], [73.98208, 34.2522], [73.90517, 34.35317], [73.8475, 34.32935], [73.74862, 34.34183], [73.74999, 34.3781], [73.88732, 34.48911], [73.89419, 34.54568], [73.93951, 34.57169], [73.93401, 34.63386], [73.96423, 34.68244], [74.12897, 34.70073], [74.31239, 34.79626], [74.58083, 34.77386], [74.6663, 34.703], [75.01479, 34.64629], [75.38009, 34.55021], [75.75438, 34.51827], [76.04614, 34.67566], [76.15463, 34.6429], [76.47186, 34.78965], [76.67648, 34.76371], [76.74377, 34.84039], [76.74514, 34.92488], [76.87193, 34.96906], [76.99251, 34.93349], [77.11796, 35.05419], [76.93465, 35.39866], [76.85088, 35.39754], [76.75475, 35.52617], [76.77323, 35.66062], [76.50961, 35.8908], [76.33453, 35.84296], [76.14913, 35.82848], [76.15325, 35.9264], [75.93028, 36.13136], [76.00906, 36.17511], [76.0324, 36.41198], [75.92391, 36.56986], [75.72737, 36.7529]]]] } },
+    { type: "Feature", properties: { iso1A2: "PL", iso1A3: "POL", iso1N3: "616", wikidata: "Q36", nameEn: "Poland", groups: ["EU", "151", "150", "UN"], callingCodes: ["48"] }, geometry: { type: "MultiPolygon", coordinates: [[[[18.57853, 55.25302], [14.20811, 54.12784], [14.22634, 53.9291], [14.20647, 53.91671], [14.18544, 53.91258], [14.20823, 53.90776], [14.21323, 53.8664], [14.27249, 53.74464], [14.26782, 53.69866], [14.2836, 53.67721], [14.27133, 53.66613], [14.28477, 53.65955], [14.2853, 53.63392], [14.31904, 53.61581], [14.30416, 53.55499], [14.3273, 53.50587], [14.35209, 53.49506], [14.4215, 53.27724], [14.44133, 53.27427], [14.45125, 53.26241], [14.40662, 53.21098], [14.37853, 53.20405], [14.36696, 53.16444], [14.38679, 53.13669], [14.35044, 53.05829], [14.25954, 53.00264], [14.14056, 52.95786], [14.15873, 52.87715], [14.12256, 52.84311], [14.13806, 52.82392], [14.22071, 52.81175], [14.61073, 52.59847], [14.6289, 52.57136], [14.60081, 52.53116], [14.63056, 52.48993], [14.54423, 52.42568], [14.55228, 52.35264], [14.56378, 52.33838], [14.58149, 52.28007], [14.70139, 52.25038], [14.71319, 52.22144], [14.68344, 52.19612], [14.70616, 52.16927], [14.67683, 52.13936], [14.6917, 52.10283], [14.72971, 52.09167], [14.76026, 52.06624], [14.71339, 52.00337], [14.70488, 51.97679], [14.7139, 51.95643], [14.71836, 51.95606], [14.72163, 51.95188], [14.7177, 51.94048], [14.70601, 51.92944], [14.6933, 51.9044], [14.6588, 51.88359], [14.59089, 51.83302], [14.60493, 51.80473], [14.64625, 51.79472], [14.66386, 51.73282], [14.69065, 51.70842], [14.75392, 51.67445], [14.75759, 51.62318], [14.7727, 51.61263], [14.71125, 51.56209], [14.73047, 51.54606], [14.72652, 51.53902], [14.73219, 51.52922], [14.94749, 51.47155], [14.9652, 51.44793], [14.96899, 51.38367], [14.98008, 51.33449], [15.04288, 51.28387], [15.01242, 51.21285], [15.0047, 51.16874], [14.99311, 51.16249], [14.99414, 51.15813], [15.00083, 51.14974], [14.99646, 51.14365], [14.99079, 51.14284], [14.99689, 51.12205], [14.98229, 51.11354], [14.97938, 51.07742], [14.95529, 51.04552], [14.92942, 50.99744], [14.89252, 50.94999], [14.89681, 50.9422], [14.81664, 50.88148], [14.82803, 50.86966], [14.99852, 50.86817], [15.01088, 50.97984], [14.96419, 50.99108], [15.02433, 51.0242], [15.03895, 51.0123], [15.06218, 51.02269], [15.10152, 51.01095], [15.11937, 50.99021], [15.16744, 51.01959], [15.1743, 50.9833], [15.2361, 50.99886], [15.27043, 50.97724], [15.2773, 50.8907], [15.36656, 50.83956], [15.3803, 50.77187], [15.43798, 50.80833], [15.73186, 50.73885], [15.81683, 50.75666], [15.87331, 50.67188], [15.97219, 50.69799], [16.0175, 50.63009], [15.98317, 50.61528], [16.02437, 50.60046], [16.10265, 50.66405], [16.20839, 50.63096], [16.23174, 50.67101], [16.33611, 50.66579], [16.44597, 50.58041], [16.34572, 50.49575], [16.31413, 50.50274], [16.19526, 50.43291], [16.21585, 50.40627], [16.22821, 50.41054], [16.28118, 50.36891], [16.30289, 50.38292], [16.36495, 50.37679], [16.3622, 50.34875], [16.39379, 50.3207], [16.42674, 50.32509], [16.56407, 50.21009], [16.55446, 50.16613], [16.63137, 50.1142], [16.7014, 50.09659], [16.8456, 50.20834], [16.98018, 50.24172], [17.00353, 50.21449], [17.02825, 50.23118], [16.99803, 50.25753], [17.02138, 50.27772], [16.99803, 50.30316], [16.94448, 50.31281], [16.90877, 50.38642], [16.85933, 50.41093], [16.89229, 50.45117], [17.1224, 50.39494], [17.14498, 50.38117], [17.19579, 50.38817], [17.19991, 50.3654], [17.27681, 50.32246], [17.34273, 50.32947], [17.34548, 50.2628], [17.3702, 50.28123], [17.58889, 50.27837], [17.67764, 50.28977], [17.69292, 50.32859], [17.74648, 50.29966], [17.72176, 50.25665], [17.76296, 50.23382], [17.70528, 50.18812], [17.59404, 50.16437], [17.66683, 50.10275], [17.6888, 50.12037], [17.7506, 50.07896], [17.77669, 50.02253], [17.86886, 49.97452], [18.00191, 50.01723], [18.04585, 50.01194], [18.04585, 50.03311], [18.00396, 50.04954], [18.03212, 50.06574], [18.07898, 50.04535], [18.10628, 50.00223], [18.20241, 49.99958], [18.21752, 49.97309], [18.27107, 49.96779], [18.27794, 49.93863], [18.31914, 49.91565], [18.33278, 49.92415], [18.33562, 49.94747], [18.41604, 49.93498], [18.53423, 49.89906], [18.54495, 49.9079], [18.54299, 49.92537], [18.57697, 49.91565], [18.57045, 49.87849], [18.60341, 49.86256], [18.57183, 49.83334], [18.61278, 49.7618], [18.61368, 49.75426], [18.62645, 49.75002], [18.62943, 49.74603], [18.62676, 49.71983], [18.69817, 49.70473], [18.72838, 49.68163], [18.80479, 49.6815], [18.84786, 49.5446], [18.84521, 49.51672], [18.94536, 49.52143], [18.97283, 49.49914], [18.9742, 49.39557], [19.18019, 49.41165], [19.25435, 49.53391], [19.36009, 49.53747], [19.37795, 49.574], [19.45348, 49.61583], [19.52626, 49.57311], [19.53313, 49.52856], [19.57845, 49.46077], [19.64162, 49.45184], [19.6375, 49.40897], [19.72127, 49.39288], [19.78581, 49.41701], [19.82237, 49.27806], [19.75286, 49.20751], [19.86409, 49.19316], [19.90529, 49.23532], [19.98494, 49.22904], [20.08238, 49.1813], [20.13738, 49.31685], [20.21977, 49.35265], [20.31453, 49.34817], [20.31728, 49.39914], [20.39939, 49.3896], [20.46422, 49.41612], [20.5631, 49.375], [20.61666, 49.41791], [20.72274, 49.41813], [20.77971, 49.35383], [20.9229, 49.29626], [20.98733, 49.30774], [21.09799, 49.37176], [21.041, 49.41791], [21.12477, 49.43666], [21.19756, 49.4054], [21.27858, 49.45988], [21.43376, 49.41433], [21.62328, 49.4447], [21.77983, 49.35443], [21.82927, 49.39467], [21.96385, 49.3437], [22.04427, 49.22136], [22.56155, 49.08865], [22.89122, 49.00725], [22.86336, 49.10513], [22.72009, 49.20288], [22.748, 49.32759], [22.69444, 49.49378], [22.64534, 49.53094], [22.78304, 49.65543], [22.80261, 49.69098], [22.83179, 49.69875], [22.99329, 49.84249], [23.28221, 50.0957], [23.67635, 50.33385], [23.71382, 50.38248], [23.79445, 50.40481], [23.99563, 50.41289], [24.03668, 50.44507], [24.07048, 50.5071], [24.0996, 50.60752], [24.0595, 50.71625], [23.95925, 50.79271], [23.99254, 50.83847], [24.0952, 50.83262], [24.14524, 50.86128], [24.04576, 50.90196], [23.92217, 51.00836], [23.90376, 51.07697], [23.80678, 51.18405], [23.63858, 51.32182], [23.69905, 51.40871], [23.62751, 51.50512], [23.56236, 51.53673], [23.57053, 51.55938], [23.53198, 51.74298], [23.62691, 51.78208], [23.61523, 51.92066], [23.68733, 51.9906], [23.64066, 52.07626], [23.61, 52.11264], [23.54314, 52.12148], [23.47859, 52.18215], [23.20071, 52.22848], [23.18196, 52.28812], [23.34141, 52.44845], [23.45112, 52.53774], [23.58296, 52.59868], [23.73615, 52.6149], [23.93763, 52.71332], [23.91805, 52.94016], [23.94689, 52.95919], [23.92184, 53.02079], [23.87548, 53.0831], [23.91393, 53.16469], [23.85657, 53.22923], [23.81995, 53.24131], [23.62004, 53.60942], [23.51284, 53.95052], [23.48261, 53.98855], [23.52702, 54.04622], [23.49196, 54.14764], [23.45223, 54.17775], [23.42418, 54.17911], [23.39525, 54.21672], [23.3494, 54.25155], [23.24656, 54.25701], [23.15938, 54.29894], [23.15526, 54.31076], [23.13905, 54.31567], [23.104, 54.29794], [23.04323, 54.31567], [23.05726, 54.34565], [22.99649, 54.35927], [23.00584, 54.38514], [22.83756, 54.40827], [22.79705, 54.36264], [21.41123, 54.32395], [20.63871, 54.3706], [19.8038, 54.44203], [19.64312, 54.45423], [18.57853, 55.25302]]]] } },
+    { type: "Feature", properties: { iso1A2: "PM", iso1A3: "SPM", iso1N3: "666", wikidata: "Q34617", nameEn: "Saint Pierre and Miquelon", country: "FR", groups: ["EU", "Q1451600", "021", "003", "019", "UN"], callingCodes: ["508"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-56.72993, 46.65575], [-55.90758, 46.6223], [-56.27503, 47.39728], [-56.72993, 46.65575]]]] } },
+    { type: "Feature", properties: { iso1A2: "PN", iso1A3: "PCN", iso1N3: "612", wikidata: "Q35672", nameEn: "Pitcairn Islands", country: "GB", groups: ["BOTS", "061", "009", "UN"], driveSide: "left", callingCodes: ["64"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-133.59543, -28.4709], [-122.0366, -24.55017], [-133.61511, -21.93325], [-133.59543, -28.4709]]]] } },
+    { type: "Feature", properties: { iso1A2: "PR", iso1A3: "PRI", iso1N3: "630", wikidata: "Q1183", nameEn: "Puerto Rico", aliases: ["US-PR"], country: "US", groups: ["Q1352230", "029", "003", "419", "019", "UN"], roadSpeedUnit: "mph", callingCodes: ["1 787", "1 939"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-65.27974, 17.56928], [-65.02435, 18.73231], [-67.99519, 18.97186], [-68.23894, 17.84663], [-65.27974, 17.56928]]]] } },
+    { type: "Feature", properties: { iso1A2: "PS", iso1A3: "PSE", iso1N3: "275", wikidata: "Q219060", nameEn: "Palestine" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "PT", iso1A3: "PRT", iso1N3: "620", wikidata: "Q45", nameEn: "Portugal" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "PW", iso1A3: "PLW", iso1N3: "585", wikidata: "Q695", nameEn: "Palau", groups: ["057", "009", "UN"], roadSpeedUnit: "mph", callingCodes: ["680"] }, geometry: { type: "MultiPolygon", coordinates: [[[[128.97621, 3.08804], [136.39296, 1.54187], [136.04605, 12.45908], [128.97621, 3.08804]]]] } },
+    { type: "Feature", properties: { iso1A2: "PY", iso1A3: "PRY", iso1N3: "600", wikidata: "Q733", nameEn: "Paraguay", groups: ["005", "419", "019", "UN"], callingCodes: ["595"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-58.16225, -20.16193], [-58.23216, -19.80058], [-59.06965, -19.29148], [-60.00638, -19.2981], [-61.73723, -19.63958], [-61.93912, -20.10053], [-62.26883, -20.55311], [-62.2757, -21.06657], [-62.64455, -22.25091], [-62.51761, -22.37684], [-62.22768, -22.55807], [-61.9756, -23.0507], [-61.0782, -23.62932], [-60.99754, -23.80934], [-60.28163, -24.04436], [-60.03367, -24.00701], [-59.45482, -24.34787], [-59.33886, -24.49935], [-58.33055, -24.97099], [-58.25492, -24.92528], [-57.80821, -25.13863], [-57.57431, -25.47269], [-57.87176, -25.93604], [-58.1188, -26.16704], [-58.3198, -26.83443], [-58.65321, -27.14028], [-58.59549, -27.29973], [-58.04205, -27.2387], [-56.85337, -27.5165], [-56.18313, -27.29851], [-55.89195, -27.3467], [-55.74475, -27.44485], [-55.59094, -27.32444], [-55.62322, -27.1941], [-55.39611, -26.97679], [-55.25243, -26.93808], [-55.16948, -26.96068], [-55.06351, -26.80195], [-55.00584, -26.78754], [-54.80868, -26.55669], [-54.70732, -26.45099], [-54.69333, -26.37705], [-54.67359, -25.98607], [-54.60664, -25.9691], [-54.62063, -25.91213], [-54.59398, -25.59224], [-54.59509, -25.53696], [-54.60196, -25.48397], [-54.62033, -25.46026], [-54.4423, -25.13381], [-54.28207, -24.07305], [-54.32807, -24.01865], [-54.6238, -23.83078], [-55.02691, -23.97317], [-55.0518, -23.98666], [-55.12292, -23.99669], [-55.41784, -23.9657], [-55.44117, -23.9185], [-55.43585, -23.87157], [-55.5555, -23.28237], [-55.52288, -23.2595], [-55.5446, -23.22811], [-55.63849, -22.95122], [-55.62493, -22.62765], [-55.68742, -22.58407], [-55.6986, -22.56268], [-55.72366, -22.5519], [-55.741, -22.52018], [-55.74941, -22.46436], [-55.8331, -22.29008], [-56.23206, -22.25347], [-56.45893, -22.08072], [-56.5212, -22.11556], [-56.6508, -22.28387], [-57.98625, -22.09157], [-57.94642, -21.73799], [-57.88239, -21.6868], [-57.93492, -21.65505], [-57.84536, -20.93155], [-58.16225, -20.16193]]]] } },
+    { type: "Feature", properties: { iso1A2: "QA", iso1A3: "QAT", iso1N3: "634", wikidata: "Q846", nameEn: "Qatar", groups: ["145", "142", "UN"], callingCodes: ["974"] }, geometry: { type: "MultiPolygon", coordinates: [[[[50.92992, 24.54396], [51.09638, 24.46907], [51.29972, 24.50747], [51.39468, 24.62785], [51.58834, 24.66608], [51.83108, 24.71675], [51.83682, 26.70231], [50.93865, 26.30758], [50.81266, 25.88946], [50.86149, 25.6965], [50.7801, 25.595], [50.80824, 25.54641], [50.57069, 25.57887], [50.8133, 24.74049], [50.92992, 24.54396]]]] } },
+    { type: "Feature", properties: { iso1A2: "RE", iso1A3: "REU", iso1N3: "638", wikidata: "Q17070", nameEn: "R\xE9union", country: "FR", groups: ["Q3320166", "EU", "014", "202", "002", "UN"], callingCodes: ["262"] }, geometry: { type: "MultiPolygon", coordinates: [[[[53.37984, -21.23941], [56.73473, -21.9174], [56.62373, -20.2711], [53.37984, -21.23941]]]] } },
+    { type: "Feature", properties: { iso1A2: "RO", iso1A3: "ROU", iso1N3: "642", wikidata: "Q218", nameEn: "Romania", groups: ["EU", "151", "150", "UN"], callingCodes: ["40"] }, geometry: { type: "MultiPolygon", coordinates: [[[[27.15622, 47.98538], [27.02985, 48.09083], [27.04118, 48.12522], [26.96119, 48.13003], [26.98042, 48.15752], [26.94265, 48.1969], [26.87708, 48.19919], [26.81161, 48.25049], [26.62823, 48.25804], [26.55202, 48.22445], [26.33504, 48.18418], [26.17711, 47.99246], [26.05901, 47.9897], [25.77723, 47.93919], [25.63878, 47.94924], [25.23778, 47.89403], [25.11144, 47.75203], [24.88896, 47.7234], [24.81893, 47.82031], [24.70632, 47.84428], [24.61994, 47.95062], [24.43578, 47.97131], [24.34926, 47.9244], [24.22566, 47.90231], [24.11281, 47.91487], [24.06466, 47.95317], [24.02999, 47.95087], [24.00801, 47.968], [23.98553, 47.96076], [23.96337, 47.96672], [23.94192, 47.94868], [23.89352, 47.94512], [23.8602, 47.9329], [23.80904, 47.98142], [23.75188, 47.99705], [23.66262, 47.98786], [23.63894, 48.00293], [23.5653, 48.00499], [23.52803, 48.01818], [23.4979, 47.96858], [23.33577, 48.0237], [23.27397, 48.08245], [23.15999, 48.12188], [23.1133, 48.08061], [23.08858, 48.00716], [23.0158, 47.99338], [22.92241, 48.02002], [22.94301, 47.96672], [22.89849, 47.95851], [22.77991, 47.87211], [22.76617, 47.8417], [22.67247, 47.7871], [22.46559, 47.76583], [22.41979, 47.7391], [22.31816, 47.76126], [22.00917, 47.50492], [22.03389, 47.42508], [22.01055, 47.37767], [21.94463, 47.38046], [21.78395, 47.11104], [21.648, 47.03902], [21.68645, 46.99595], [21.59581, 46.91628], [21.59307, 46.86935], [21.52028, 46.84118], [21.48935, 46.7577], [21.5151, 46.72147], [21.43926, 46.65109], [21.33214, 46.63035], [21.26929, 46.4993], [21.28061, 46.44941], [21.16872, 46.30118], [21.06572, 46.24897], [20.86797, 46.28884], [20.74574, 46.25467], [20.76085, 46.21002], [20.63863, 46.12728], [20.49718, 46.18721], [20.45377, 46.14405], [20.35573, 46.16629], [20.28324, 46.1438], [20.26068, 46.12332], [20.35862, 45.99356], [20.54818, 45.89939], [20.65645, 45.82801], [20.70069, 45.7493], [20.77416, 45.75601], [20.78446, 45.78522], [20.82364, 45.77738], [20.80361, 45.65875], [20.76798, 45.60969], [20.83321, 45.53567], [20.77217, 45.49788], [20.86026, 45.47295], [20.87948, 45.42743], [21.09894, 45.30144], [21.17612, 45.32566], [21.20392, 45.2677], [21.29398, 45.24148], [21.48278, 45.19557], [21.51299, 45.15345], [21.4505, 45.04294], [21.35855, 45.01941], [21.54938, 44.9327], [21.56328, 44.89502], [21.48202, 44.87199], [21.44013, 44.87613], [21.35643, 44.86364], [21.38802, 44.78133], [21.55007, 44.77304], [21.60019, 44.75208], [21.61942, 44.67059], [21.67504, 44.67107], [21.71692, 44.65349], [21.7795, 44.66165], [21.99364, 44.63395], [22.08016, 44.49844], [22.13234, 44.47444], [22.18315, 44.48179], [22.30844, 44.6619], [22.45301, 44.7194], [22.61917, 44.61489], [22.69196, 44.61587], [22.76749, 44.54446], [22.70981, 44.51852], [22.61368, 44.55719], [22.56493, 44.53419], [22.54021, 44.47836], [22.45436, 44.47258], [22.56012, 44.30712], [22.68166, 44.28206], [22.67173, 44.21564], [23.04988, 44.07694], [23.01674, 44.01946], [22.87873, 43.9844], [22.83753, 43.88055], [22.85314, 43.84452], [23.05288, 43.79494], [23.26772, 43.84843], [23.4507, 43.84936], [23.61687, 43.79289], [23.73978, 43.80627], [24.18149, 43.68218], [24.35364, 43.70211], [24.50264, 43.76314], [24.62281, 43.74082], [24.73542, 43.68523], [24.96682, 43.72693], [25.10718, 43.6831], [25.17144, 43.70261], [25.39528, 43.61866], [25.72792, 43.69263], [25.94911, 43.85745], [26.05584, 43.90925], [26.10115, 43.96908], [26.38764, 44.04356], [26.62712, 44.05698], [26.95141, 44.13555], [27.26845, 44.12602], [27.39757, 44.0141], [27.60834, 44.01206], [27.64542, 44.04958], [27.73468, 43.95326], [27.92008, 44.00761], [27.99558, 43.84193], [28.23293, 43.76], [29.24336, 43.70874], [30.04414, 45.08461], [29.69272, 45.19227], [29.65428, 45.25629], [29.68175, 45.26885], [29.59798, 45.38857], [29.42632, 45.44545], [29.24779, 45.43388], [28.96077, 45.33164], [28.94292, 45.28045], [28.81383, 45.3384], [28.78911, 45.24179], [28.71358, 45.22631], [28.5735, 45.24759], [28.34554, 45.32102], [28.28504, 45.43907], [28.21139, 45.46895], [28.18741, 45.47358], [28.08927, 45.6051], [28.16568, 45.6421], [28.13111, 45.92819], [28.08612, 46.01105], [28.13684, 46.18099], [28.10937, 46.22852], [28.19864, 46.31869], [28.18902, 46.35283], [28.25769, 46.43334], [28.22281, 46.50481], [28.24808, 46.64305], [28.12173, 46.82283], [28.09095, 46.97621], [27.81892, 47.1381], [27.73172, 47.29248], [27.68706, 47.28962], [27.60263, 47.32507], [27.55731, 47.46637], [27.47942, 47.48113], [27.3979, 47.59473], [27.32202, 47.64009], [27.25519, 47.71366], [27.29069, 47.73722], [27.1618, 47.92391], [27.15622, 47.98538]]]] } },
+    { type: "Feature", properties: { iso1A2: "RS", iso1A3: "SRB", iso1N3: "688", wikidata: "Q403", nameEn: "Serbia", groups: ["039", "150", "UN"], callingCodes: ["381"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.66007, 46.19005], [19.56113, 46.16824], [19.52473, 46.1171], [19.28826, 45.99694], [19.14543, 45.9998], [19.10388, 46.04015], [19.0791, 45.96458], [19.01284, 45.96529], [18.99712, 45.93537], [18.81394, 45.91329], [18.85783, 45.85493], [18.90305, 45.71863], [18.96691, 45.66731], [18.88776, 45.57253], [18.94562, 45.53712], [19.07471, 45.53086], [19.08364, 45.48804], [18.99918, 45.49333], [18.97446, 45.37528], [19.10774, 45.29547], [19.28208, 45.23813], [19.41941, 45.23475], [19.43589, 45.17137], [19.19144, 45.17863], [19.14063, 45.12972], [19.07952, 45.14668], [19.1011, 45.01191], [19.05205, 44.97692], [19.15573, 44.95409], [19.06853, 44.89915], [19.02871, 44.92541], [18.98957, 44.90645], [19.01994, 44.85493], [19.18183, 44.92055], [19.36722, 44.88164], [19.32543, 44.74058], [19.26388, 44.65412], [19.16699, 44.52197], [19.13369, 44.52521], [19.12278, 44.50132], [19.14837, 44.45253], [19.14681, 44.41463], [19.11785, 44.40313], [19.10749, 44.39421], [19.10704, 44.38249], [19.10365, 44.37795], [19.10298, 44.36924], [19.11865, 44.36712], [19.1083, 44.3558], [19.11547, 44.34218], [19.13556, 44.338], [19.13332, 44.31492], [19.16741, 44.28648], [19.18328, 44.28383], [19.20508, 44.2917], [19.23306, 44.26097], [19.26945, 44.26957], [19.32464, 44.27185], [19.34773, 44.23244], [19.3588, 44.18353], [19.40927, 44.16722], [19.43905, 44.13088], [19.47338, 44.15034], [19.48386, 44.14332], [19.47321, 44.1193], [19.51167, 44.08158], [19.55999, 44.06894], [19.57467, 44.04716], [19.61991, 44.05254], [19.61836, 44.01464], [19.56498, 43.99922], [19.52515, 43.95573], [19.38439, 43.96611], [19.24363, 44.01502], [19.23465, 43.98764], [19.3986, 43.79668], [19.5176, 43.71403], [19.50455, 43.58385], [19.42696, 43.57987], [19.41941, 43.54056], [19.36653, 43.60921], [19.33426, 43.58833], [19.2553, 43.5938], [19.24774, 43.53061], [19.22807, 43.5264], [19.22229, 43.47926], [19.44315, 43.38846], [19.48171, 43.32644], [19.52962, 43.31623], [19.54598, 43.25158], [19.62661, 43.2286], [19.64063, 43.19027], [19.76918, 43.16044], [19.79255, 43.11951], [19.92576, 43.08539], [19.96549, 43.11098], [19.98887, 43.0538], [20.04729, 43.02732], [20.05431, 42.99571], [20.12325, 42.96237], [20.14896, 42.99058], [20.16415, 42.97177], [20.34528, 42.90676], [20.35692, 42.8335], [20.40594, 42.84853], [20.43734, 42.83157], [20.53484, 42.8885], [20.48692, 42.93208], [20.59929, 43.01067], [20.64557, 43.00826], [20.69515, 43.09641], [20.59929, 43.20492], [20.68688, 43.21335], [20.73811, 43.25068], [20.82145, 43.26769], [20.88685, 43.21697], [20.83727, 43.17842], [20.96287, 43.12416], [21.00749, 43.13984], [21.05378, 43.10707], [21.08952, 43.13471], [21.14465, 43.11089], [21.16734, 42.99694], [21.2041, 43.02277], [21.23877, 43.00848], [21.23534, 42.95523], [21.2719, 42.8994], [21.32974, 42.90424], [21.36941, 42.87397], [21.44047, 42.87276], [21.39045, 42.74888], [21.47498, 42.74695], [21.59154, 42.72643], [21.58755, 42.70418], [21.6626, 42.67813], [21.75025, 42.70125], [21.79413, 42.65923], [21.75672, 42.62695], [21.7327, 42.55041], [21.70522, 42.54176], [21.7035, 42.51899], [21.62556, 42.45106], [21.64209, 42.41081], [21.62887, 42.37664], [21.59029, 42.38042], [21.57021, 42.3647], [21.53467, 42.36809], [21.5264, 42.33634], [21.56772, 42.30946], [21.58992, 42.25915], [21.70111, 42.23789], [21.77176, 42.2648], [21.84654, 42.3247], [21.91595, 42.30392], [21.94405, 42.34669], [22.02908, 42.29848], [22.16384, 42.32103], [22.29605, 42.37477], [22.29275, 42.34913], [22.34773, 42.31725], [22.45919, 42.33822], [22.47498, 42.3915], [22.51961, 42.3991], [22.55669, 42.50144], [22.43983, 42.56851], [22.4997, 42.74144], [22.43309, 42.82057], [22.54302, 42.87774], [22.74826, 42.88701], [22.78397, 42.98253], [22.89521, 43.03625], [22.98104, 43.11199], [23.00806, 43.19279], [22.89727, 43.22417], [22.82036, 43.33665], [22.53397, 43.47225], [22.47582, 43.6558], [22.41043, 43.69566], [22.35558, 43.81281], [22.41449, 44.00514], [22.61688, 44.06534], [22.61711, 44.16938], [22.67173, 44.21564], [22.68166, 44.28206], [22.56012, 44.30712], [22.45436, 44.47258], [22.54021, 44.47836], [22.56493, 44.53419], [22.61368, 44.55719], [22.70981, 44.51852], [22.76749, 44.54446], [22.69196, 44.61587], [22.61917, 44.61489], [22.45301, 44.7194], [22.30844, 44.6619], [22.18315, 44.48179], [22.13234, 44.47444], [22.08016, 44.49844], [21.99364, 44.63395], [21.7795, 44.66165], [21.71692, 44.65349], [21.67504, 44.67107], [21.61942, 44.67059], [21.60019, 44.75208], [21.55007, 44.77304], [21.38802, 44.78133], [21.35643, 44.86364], [21.44013, 44.87613], [21.48202, 44.87199], [21.56328, 44.89502], [21.54938, 44.9327], [21.35855, 45.01941], [21.4505, 45.04294], [21.51299, 45.15345], [21.48278, 45.19557], [21.29398, 45.24148], [21.20392, 45.2677], [21.17612, 45.32566], [21.09894, 45.30144], [20.87948, 45.42743], [20.86026, 45.47295], [20.77217, 45.49788], [20.83321, 45.53567], [20.76798, 45.60969], [20.80361, 45.65875], [20.82364, 45.77738], [20.78446, 45.78522], [20.77416, 45.75601], [20.70069, 45.7493], [20.65645, 45.82801], [20.54818, 45.89939], [20.35862, 45.99356], [20.26068, 46.12332], [20.09713, 46.17315], [20.03533, 46.14509], [20.01816, 46.17696], [19.93508, 46.17553], [19.81491, 46.1313], [19.66007, 46.19005]]]] } },
+    { type: "Feature", properties: { iso1A2: "RU", iso1A3: "RUS", iso1N3: "643", wikidata: "Q159", nameEn: "Russia" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "RW", iso1A3: "RWA", iso1N3: "646", wikidata: "Q1037", nameEn: "Rwanda", groups: ["014", "202", "002", "UN"], callingCodes: ["250"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.47194, -1.0555], [30.35212, -1.06896], [30.16369, -1.34303], [29.912, -1.48269], [29.82657, -1.31187], [29.59061, -1.39016], [29.53062, -1.40499], [29.45038, -1.5054], [29.36322, -1.50887], [29.24323, -1.66826], [29.24458, -1.69663], [29.11847, -1.90576], [29.17562, -2.12278], [29.105, -2.27043], [29.00051, -2.29001], [28.95642, -2.37321], [28.89601, -2.37321], [28.86826, -2.41888], [28.86846, -2.44866], [28.89132, -2.47557], [28.89342, -2.49017], [28.88846, -2.50493], [28.87497, -2.50887], [28.86209, -2.5231], [28.86193, -2.53185], [28.87943, -2.55165], [28.89288, -2.55848], [28.90226, -2.62385], [28.89793, -2.66111], [28.94346, -2.69124], [29.00357, -2.70596], [29.04081, -2.7416], [29.0562, -2.58632], [29.32234, -2.6483], [29.36805, -2.82933], [29.88237, -2.75105], [29.95911, -2.33348], [30.14034, -2.43626], [30.42933, -2.31064], [30.54501, -2.41404], [30.83915, -2.35795], [30.89303, -2.08223], [30.80802, -1.91477], [30.84079, -1.64652], [30.71974, -1.43244], [30.57123, -1.33264], [30.50889, -1.16412], [30.45116, -1.10641], [30.47194, -1.0555]]]] } },
+    { type: "Feature", properties: { iso1A2: "SA", iso1A3: "SAU", iso1N3: "682", wikidata: "Q851", nameEn: "Saudi Arabia", groups: ["145", "142", "UN"], callingCodes: ["966"] }, geometry: { type: "MultiPolygon", coordinates: [[[[40.01521, 32.05667], [39.29903, 32.23259], [38.99233, 31.99721], [36.99791, 31.50081], [37.99354, 30.49998], [37.66395, 30.33245], [37.4971, 29.99949], [36.75083, 29.86903], [36.50005, 29.49696], [36.07081, 29.18469], [34.8812, 29.36878], [34.4454, 27.91479], [37.8565, 22.00903], [39.63762, 18.37348], [40.99158, 15.81743], [42.15205, 16.40211], [42.76801, 16.40371], [42.94625, 16.39721], [42.94351, 16.49467], [42.97215, 16.51093], [43.11601, 16.53166], [43.15274, 16.67248], [43.22066, 16.65179], [43.21325, 16.74416], [43.25857, 16.75304], [43.26303, 16.79479], [43.24801, 16.80613], [43.22956, 16.80613], [43.22012, 16.83932], [43.18338, 16.84852], [43.1398, 16.90696], [43.19328, 16.94703], [43.1813, 16.98438], [43.18233, 17.02673], [43.23967, 17.03428], [43.17787, 17.14717], [43.20156, 17.25901], [43.32653, 17.31179], [43.22533, 17.38343], [43.29185, 17.53224], [43.43005, 17.56148], [43.70631, 17.35762], [44.50126, 17.47475], [46.31018, 17.20464], [46.76494, 17.29151], [47.00571, 16.94765], [47.48245, 17.10808], [47.58351, 17.50366], [48.19996, 18.20584], [49.04884, 18.59899], [52.00311, 19.00083], [54.99756, 20.00083], [55.66469, 21.99658], [55.2137, 22.71065], [55.13599, 22.63334], [52.56622, 22.94341], [51.59617, 24.12041], [51.58871, 24.27256], [51.41644, 24.39615], [51.58834, 24.66608], [51.39468, 24.62785], [51.29972, 24.50747], [51.09638, 24.46907], [50.92992, 24.54396], [50.8133, 24.74049], [50.57069, 25.57887], [50.302, 25.87592], [50.26923, 26.08243], [50.38162, 26.53976], [50.71771, 26.73086], [50.37726, 27.89227], [49.98877, 27.87827], [49.00421, 28.81495], [48.42991, 28.53628], [47.70561, 28.5221], [47.59863, 28.66798], [47.58376, 28.83382], [47.46202, 29.0014], [46.5527, 29.10283], [46.42415, 29.05947], [44.72255, 29.19736], [42.97796, 30.48295], [42.97601, 30.72204], [40.01521, 32.05667]]]] } },
+    { type: "Feature", properties: { iso1A2: "SB", iso1A3: "SLB", iso1N3: "090", wikidata: "Q685", nameEn: "Solomon Islands", groups: ["054", "009", "UN"], driveSide: "left", callingCodes: ["677"] }, geometry: { type: "MultiPolygon", coordinates: [[[[172.71443, -12.01327], [160.43769, -4.17974], [156.03296, -6.55528], [156.03993, -6.65703], [155.92557, -6.84664], [155.69784, -6.92661], [155.60735, -6.92266], [154.74815, -7.33315], [156.73836, -14.50464], [172.71443, -12.01327]]]] } },
+    { type: "Feature", properties: { iso1A2: "SC", iso1A3: "SYC", iso1N3: "690", wikidata: "Q1042", nameEn: "Seychelles", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["248"] }, geometry: { type: "MultiPolygon", coordinates: [[[[43.75112, -10.38913], [54.83239, -10.93575], [66.3222, 5.65313], [43.75112, -10.38913]]]] } },
+    { type: "Feature", properties: { iso1A2: "SD", iso1A3: "SDN", iso1N3: "729", wikidata: "Q1049", nameEn: "Sudan", groups: ["015", "002", "UN"], callingCodes: ["249"] }, geometry: { type: "MultiPolygon", coordinates: [[[[37.8565, 22.00903], [34.0765, 22.00501], [33.99686, 21.76784], [33.57251, 21.72406], [33.17563, 22.00405], [24.99885, 21.99535], [24.99794, 19.99661], [23.99715, 20.00038], [23.99539, 19.49944], [23.99997, 15.69575], [23.62785, 15.7804], [23.38812, 15.69649], [23.10792, 15.71297], [22.93201, 15.55107], [22.92579, 15.47007], [22.99584, 15.40105], [22.99584, 15.22989], [22.66115, 14.86308], [22.70474, 14.69149], [22.38562, 14.58907], [22.44944, 14.24986], [22.55997, 14.23024], [22.5553, 14.11704], [22.22995, 13.96754], [22.08674, 13.77863], [22.29689, 13.3731], [22.1599, 13.19281], [22.02914, 13.13976], [21.94819, 13.05637], [21.81432, 12.81362], [21.89371, 12.68001], [21.98711, 12.63292], [22.15679, 12.66634], [22.22684, 12.74682], [22.46345, 12.61925], [22.38873, 12.45514], [22.50548, 12.16769], [22.48369, 12.02766], [22.64092, 12.07485], [22.54907, 11.64372], [22.7997, 11.40424], [22.93124, 11.41645], [22.97249, 11.21955], [22.87758, 10.91915], [23.02221, 10.69235], [23.3128, 10.45214], [23.67164, 9.86923], [23.69155, 9.67566], [24.09319, 9.66572], [24.12744, 9.73784], [24.49389, 9.79962], [24.84653, 9.80643], [24.97739, 9.9081], [25.05688, 10.06776], [25.0918, 10.33718], [25.78141, 10.42599], [25.93163, 10.38159], [25.93241, 10.17941], [26.21338, 9.91545], [26.35815, 9.57946], [26.70685, 9.48735], [27.14427, 9.62858], [27.90704, 9.61323], [28.99983, 9.67155], [29.06988, 9.74826], [29.53844, 9.75133], [29.54, 10.07949], [29.94629, 10.29245], [30.00389, 10.28633], [30.53005, 9.95992], [30.82893, 9.71451], [30.84605, 9.7498], [31.28504, 9.75287], [31.77539, 10.28939], [31.99177, 10.65065], [32.46967, 11.04662], [32.39358, 11.18207], [32.39578, 11.70208], [32.10079, 11.95203], [32.73921, 11.95203], [32.73921, 12.22757], [33.25876, 12.22111], [33.13988, 11.43248], [33.26977, 10.83632], [33.24645, 10.77913], [33.52294, 10.64382], [33.66604, 10.44254], [33.80913, 10.32994], [33.90159, 10.17179], [33.96984, 10.15446], [33.99185, 9.99623], [33.96323, 9.80972], [33.9082, 9.762], [33.87958, 9.49937], [34.10229, 9.50238], [34.08717, 9.55243], [34.13186, 9.7492], [34.20484, 9.9033], [34.22718, 10.02506], [34.32102, 10.11599], [34.34783, 10.23914], [34.2823, 10.53508], [34.4372, 10.781], [34.59062, 10.89072], [34.77383, 10.74588], [34.77532, 10.69027], [34.86618, 10.74588], [34.86916, 10.78832], [34.97491, 10.86147], [34.97789, 10.91559], [34.93172, 10.95946], [35.01215, 11.19626], [34.95704, 11.24448], [35.09556, 11.56278], [35.05832, 11.71158], [35.11492, 11.85156], [35.24302, 11.91132], [35.70476, 12.67101], [36.01458, 12.72478], [36.14268, 12.70879], [36.16651, 12.88019], [36.13374, 12.92665], [36.24545, 13.36759], [36.38993, 13.56459], [36.48824, 13.83954], [36.44653, 13.95666], [36.54376, 14.25597], [36.44337, 15.14963], [36.54276, 15.23478], [36.69761, 15.75323], [36.76371, 15.80831], [36.92193, 16.23451], [36.99777, 17.07172], [37.42694, 17.04041], [37.50967, 17.32199], [38.13362, 17.53906], [38.37133, 17.66269], [38.45916, 17.87167], [38.57727, 17.98125], [39.63762, 18.37348], [37.8565, 22.00903]]]] } },
+    { type: "Feature", properties: { iso1A2: "SE", iso1A3: "SWE", iso1N3: "752", wikidata: "Q34", nameEn: "Sweden", groups: ["EU", "154", "150", "UN"], callingCodes: ["46"] }, geometry: { type: "MultiPolygon", coordinates: [[[[24.15791, 65.85385], [23.90497, 66.15802], [23.71339, 66.21299], [23.64982, 66.30603], [23.67591, 66.3862], [23.63776, 66.43568], [23.85959, 66.56434], [23.89488, 66.772], [23.98059, 66.79585], [23.98563, 66.84149], [23.56214, 67.17038], [23.58735, 67.20752], [23.54701, 67.25435], [23.75372, 67.29914], [23.75372, 67.43688], [23.39577, 67.46974], [23.54701, 67.59306], [23.45627, 67.85297], [23.65793, 67.9497], [23.40081, 68.05545], [23.26469, 68.15134], [23.15377, 68.14759], [23.10336, 68.26551], [22.73028, 68.40881], [22.00429, 68.50692], [21.03001, 68.88969], [20.90649, 68.89696], [20.85104, 68.93142], [20.91658, 68.96764], [20.78802, 69.03087], [20.55258, 69.06069], [20.0695, 69.04469], [20.28444, 68.93283], [20.33435, 68.80174], [20.22027, 68.67246], [19.95647, 68.55546], [20.22027, 68.48759], [19.93508, 68.35911], [18.97255, 68.52416], [18.63032, 68.50849], [18.39503, 68.58672], [18.1241, 68.53721], [18.13836, 68.20874], [17.90787, 67.96537], [17.30416, 68.11591], [16.7409, 67.91037], [16.38441, 67.52923], [16.12774, 67.52106], [16.09922, 67.4364], [16.39154, 67.21653], [16.35589, 67.06419], [15.37197, 66.48217], [15.49318, 66.28509], [15.05113, 66.15572], [14.53778, 66.12399], [14.50926, 65.31786], [13.64276, 64.58402], [14.11117, 64.46674], [14.16051, 64.18725], [13.98222, 64.00953], [13.23411, 64.09087], [12.74105, 64.02171], [12.14928, 63.59373], [12.19919, 63.47935], [11.98529, 63.27487], [12.19919, 63.00104], [12.07085, 62.6297], [12.29187, 62.25699], [12.14746, 61.7147], [12.40595, 61.57226], [12.57707, 61.56547], [12.86939, 61.35427], [12.69115, 61.06584], [12.2277, 61.02442], [12.59133, 60.50559], [12.52003, 60.13846], [12.36317, 59.99259], [12.15641, 59.8926], [11.87121, 59.86039], [11.92112, 59.69531], [11.69297, 59.59442], [11.8213, 59.24985], [11.65732, 58.90177], [11.45199, 58.89604], [11.4601, 58.99022], [11.34459, 59.11672], [11.15367, 59.07862], [11.08911, 58.98745], [10.64958, 58.89391], [10.40861, 58.38489], [12.16597, 56.60205], [12.07466, 56.29488], [12.65312, 56.04345], [12.6372, 55.91371], [12.88472, 55.63369], [12.60345, 55.42675], [12.84405, 55.13257], [14.28399, 55.1553], [14.89259, 55.5623], [15.79951, 55.54655], [19.64795, 57.06466], [19.84909, 57.57876], [20.5104, 59.15546], [19.08191, 60.19152], [19.23413, 60.61414], [20.15877, 63.06556], [24.14112, 65.39731], [24.15107, 65.81427], [24.14798, 65.83466], [24.15791, 65.85385]]]] } },
+    { type: "Feature", properties: { iso1A2: "SG", iso1A3: "SGP", iso1N3: "702", wikidata: "Q334", nameEn: "Singapore", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["65"] }, geometry: { type: "MultiPolygon", coordinates: [[[[104.00131, 1.42405], [103.93384, 1.42926], [103.89565, 1.42841], [103.86383, 1.46288], [103.81181, 1.47953], [103.76395, 1.45183], [103.74161, 1.4502], [103.7219, 1.46108], [103.67468, 1.43166], [103.62738, 1.35255], [103.56591, 1.19719], [103.66049, 1.18825], [103.74084, 1.12902], [104.03085, 1.26954], [104.12282, 1.27714], [104.08072, 1.35998], [104.09162, 1.39694], [104.08871, 1.42015], [104.07348, 1.43322], [104.04622, 1.44691], [104.02277, 1.4438], [104.00131, 1.42405]]]] } },
+    { type: "Feature", properties: { iso1A2: "SH", iso1A3: "SHN", iso1N3: "654", wikidata: "Q192184", nameEn: "Saint Helena, Ascension and Tristan da Cunha", country: "GB" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "SI", iso1A3: "SVN", iso1N3: "705", wikidata: "Q215", nameEn: "Slovenia", groups: ["EU", "039", "150", "UN"], callingCodes: ["386"] }, geometry: { type: "MultiPolygon", coordinates: [[[[16.50139, 46.56684], [16.39217, 46.63673], [16.38594, 46.6549], [16.41863, 46.66238], [16.42641, 46.69228], [16.37816, 46.69975], [16.30966, 46.7787], [16.31303, 46.79838], [16.3408, 46.80641], [16.34547, 46.83836], [16.2941, 46.87137], [16.2365, 46.87775], [16.21892, 46.86961], [16.15711, 46.85434], [16.14365, 46.8547], [16.10983, 46.867], [16.05786, 46.83927], [15.99054, 46.82772], [15.99126, 46.78199], [15.98432, 46.74991], [15.99769, 46.7266], [16.02808, 46.71094], [16.04347, 46.68694], [16.04036, 46.6549], [15.99988, 46.67947], [15.98512, 46.68463], [15.94864, 46.68769], [15.87691, 46.7211], [15.8162, 46.71897], [15.78518, 46.70712], [15.76771, 46.69863], [15.73823, 46.70011], [15.72279, 46.69548], [15.69523, 46.69823], [15.67411, 46.70735], [15.6543, 46.70616], [15.6543, 46.69228], [15.6365, 46.6894], [15.63255, 46.68069], [15.62317, 46.67947], [15.59826, 46.68908], [15.54533, 46.66985], [15.55333, 46.64988], [15.54431, 46.6312], [15.46906, 46.61321], [15.45514, 46.63697], [15.41235, 46.65556], [15.23711, 46.63994], [15.14215, 46.66131], [15.01451, 46.641], [14.98024, 46.6009], [14.96002, 46.63459], [14.92283, 46.60848], [14.87129, 46.61], [14.86419, 46.59411], [14.83549, 46.56614], [14.81836, 46.51046], [14.72185, 46.49974], [14.66892, 46.44936], [14.5942, 46.43434], [14.56463, 46.37208], [14.52176, 46.42617], [14.45877, 46.41717], [14.42608, 46.44614], [14.314, 46.43327], [14.28326, 46.44315], [14.15989, 46.43327], [14.12097, 46.47724], [14.04002, 46.49117], [14.00422, 46.48474], [13.89837, 46.52331], [13.7148, 46.5222], [13.68684, 46.43881], [13.59777, 46.44137], [13.5763, 46.42613], [13.5763, 46.40915], [13.47019, 46.3621], [13.43418, 46.35992], [13.44808, 46.33507], [13.37671, 46.29668], [13.42218, 46.20758], [13.47587, 46.22725], [13.56114, 46.2054], [13.56682, 46.18703], [13.64451, 46.18966], [13.66472, 46.17392], [13.64053, 46.13587], [13.57072, 46.09022], [13.50104, 46.05986], [13.49568, 46.04839], [13.50998, 46.04498], [13.49702, 46.01832], [13.47474, 46.00546], [13.50104, 45.98078], [13.52963, 45.96588], [13.56759, 45.96991], [13.58903, 45.99009], [13.62074, 45.98388], [13.63458, 45.98947], [13.64307, 45.98326], [13.6329, 45.94894], [13.63815, 45.93607], [13.61931, 45.91782], [13.60857, 45.89907], [13.59565, 45.89446], [13.58644, 45.88173], [13.57563, 45.8425], [13.58858, 45.83503], [13.59784, 45.8072], [13.66986, 45.79955], [13.8235, 45.7176], [13.83332, 45.70855], [13.83422, 45.68703], [13.87933, 45.65207], [13.9191, 45.6322], [13.8695, 45.60835], [13.86771, 45.59898], [13.84106, 45.58185], [13.78445, 45.5825], [13.74587, 45.59811], [13.7198, 45.59352], [13.6076, 45.64761], [13.45644, 45.59464], [13.56979, 45.4895], [13.62902, 45.45898], [13.67398, 45.4436], [13.7785, 45.46787], [13.81742, 45.43729], [13.88124, 45.42637], [13.90771, 45.45149], [13.97309, 45.45258], [13.99488, 45.47551], [13.96063, 45.50825], [14.00578, 45.52352], [14.07116, 45.48752], [14.20348, 45.46896], [14.22371, 45.50388], [14.24239, 45.50607], [14.26611, 45.48239], [14.27681, 45.4902], [14.32487, 45.47142], [14.36693, 45.48642], [14.49769, 45.54424], [14.5008, 45.60852], [14.53816, 45.6205], [14.57397, 45.67165], [14.60977, 45.66403], [14.59576, 45.62812], [14.69694, 45.57366], [14.68605, 45.53006], [14.71718, 45.53442], [14.80124, 45.49515], [14.81992, 45.45913], [14.90554, 45.47769], [14.92266, 45.52788], [15.02385, 45.48533], [15.05187, 45.49079], [15.16862, 45.42309], [15.27758, 45.46678], [15.33051, 45.45258], [15.38188, 45.48752], [15.30249, 45.53224], [15.29837, 45.5841], [15.27747, 45.60504], [15.31027, 45.6303], [15.34695, 45.63382], [15.34214, 45.64702], [15.38952, 45.63682], [15.4057, 45.64727], [15.34919, 45.71623], [15.30872, 45.69014], [15.25423, 45.72275], [15.40836, 45.79491], [15.47531, 45.79802], [15.47325, 45.8253], [15.52234, 45.82195], [15.57952, 45.84953], [15.64185, 45.82915], [15.66662, 45.84085], [15.70411, 45.8465], [15.68232, 45.86819], [15.68383, 45.88867], [15.67967, 45.90455], [15.70636, 45.92116], [15.70327, 46.00015], [15.71246, 46.01196], [15.72977, 46.04682], [15.62317, 46.09103], [15.6083, 46.11992], [15.59909, 46.14761], [15.64904, 46.19229], [15.6434, 46.21396], [15.67395, 46.22478], [15.75436, 46.21969], [15.75479, 46.20336], [15.78817, 46.21719], [15.79284, 46.25811], [15.97965, 46.30652], [16.07616, 46.3463], [16.07314, 46.36458], [16.05065, 46.3833], [16.05281, 46.39141], [16.14859, 46.40547], [16.18824, 46.38282], [16.30233, 46.37837], [16.30162, 46.40437], [16.27329, 46.41467], [16.27398, 46.42875], [16.25124, 46.48067], [16.23961, 46.49653], [16.26759, 46.50566], [16.26733, 46.51505], [16.29793, 46.5121], [16.37193, 46.55008], [16.38771, 46.53608], [16.44036, 46.5171], [16.5007, 46.49644], [16.52604, 46.47831], [16.59527, 46.47524], [16.52604, 46.5051], [16.52885, 46.53303], [16.50139, 46.56684]]]] } },
+    { type: "Feature", properties: { iso1A2: "SJ", iso1A3: "SJM", iso1N3: "744", wikidata: "Q842829", nameEn: "Svalbard and Jan Mayen", country: "NO" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "SK", iso1A3: "SVK", iso1N3: "703", wikidata: "Q214", nameEn: "Slovakia", groups: ["EU", "151", "150", "UN"], callingCodes: ["421"] }, geometry: { type: "MultiPolygon", coordinates: [[[[19.82237, 49.27806], [19.78581, 49.41701], [19.72127, 49.39288], [19.6375, 49.40897], [19.64162, 49.45184], [19.57845, 49.46077], [19.53313, 49.52856], [19.52626, 49.57311], [19.45348, 49.61583], [19.37795, 49.574], [19.36009, 49.53747], [19.25435, 49.53391], [19.18019, 49.41165], [18.9742, 49.39557], [18.97283, 49.49914], [18.94536, 49.52143], [18.84521, 49.51672], [18.74761, 49.492], [18.67757, 49.50895], [18.6144, 49.49824], [18.57183, 49.51162], [18.53063, 49.49022], [18.54848, 49.47059], [18.44686, 49.39467], [18.4084, 49.40003], [18.4139, 49.36517], [18.36446, 49.3267], [18.18456, 49.28909], [18.15022, 49.24518], [18.1104, 49.08624], [18.06885, 49.03157], [17.91814, 49.01784], [17.87831, 48.92679], [17.77944, 48.92318], [17.73126, 48.87885], [17.7094, 48.86721], [17.5295, 48.81117], [17.45671, 48.85004], [17.3853, 48.80936], [17.29054, 48.85546], [17.19355, 48.87602], [17.11202, 48.82925], [17.00215, 48.70887], [16.93955, 48.60371], [16.94611, 48.53614], [16.85204, 48.44968], [16.8497, 48.38321], [16.83588, 48.3844], [16.83317, 48.38138], [16.84243, 48.35258], [16.90903, 48.32519], [16.89461, 48.31332], [16.97701, 48.17385], [17.02919, 48.13996], [17.05735, 48.14179], [17.09168, 48.09366], [17.07039, 48.0317], [17.16001, 48.00636], [17.23699, 48.02094], [17.71215, 47.7548], [18.02938, 47.75665], [18.29305, 47.73541], [18.56496, 47.76588], [18.66521, 47.76772], [18.74074, 47.8157], [18.8506, 47.82308], [18.76821, 47.87469], [18.76134, 47.97499], [18.82176, 48.04206], [19.01952, 48.07052], [19.23924, 48.0595], [19.28182, 48.08336], [19.47957, 48.09437], [19.52489, 48.19791], [19.63338, 48.25006], [19.92452, 48.1283], [20.24312, 48.2784], [20.29943, 48.26104], [20.5215, 48.53336], [20.83248, 48.5824], [21.11516, 48.49546], [21.44063, 48.58456], [21.6068, 48.50365], [21.67134, 48.3989], [21.72525, 48.34628], [21.8279, 48.33321], [21.83339, 48.36242], [22.14689, 48.4005], [22.16023, 48.56548], [22.21379, 48.6218], [22.34151, 48.68893], [22.42934, 48.92857], [22.48296, 48.99172], [22.54338, 49.01424], [22.56155, 49.08865], [22.04427, 49.22136], [21.96385, 49.3437], [21.82927, 49.39467], [21.77983, 49.35443], [21.62328, 49.4447], [21.43376, 49.41433], [21.27858, 49.45988], [21.19756, 49.4054], [21.12477, 49.43666], [21.041, 49.41791], [21.09799, 49.37176], [20.98733, 49.30774], [20.9229, 49.29626], [20.77971, 49.35383], [20.72274, 49.41813], [20.61666, 49.41791], [20.5631, 49.375], [20.46422, 49.41612], [20.39939, 49.3896], [20.31728, 49.39914], [20.31453, 49.34817], [20.21977, 49.35265], [20.13738, 49.31685], [20.08238, 49.1813], [19.98494, 49.22904], [19.90529, 49.23532], [19.86409, 49.19316], [19.75286, 49.20751], [19.82237, 49.27806]]]] } },
+    { type: "Feature", properties: { iso1A2: "SL", iso1A3: "SLE", iso1N3: "694", wikidata: "Q1044", nameEn: "Sierra Leone", groups: ["011", "202", "002", "UN"], callingCodes: ["232"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-10.27575, 8.48711], [-10.37257, 8.48941], [-10.54891, 8.31174], [-10.63934, 8.35326], [-10.70565, 8.29235], [-10.61422, 8.5314], [-10.47707, 8.67669], [-10.56197, 8.81225], [-10.5783, 9.06386], [-10.74484, 9.07998], [-10.6534, 9.29919], [-11.2118, 10.00098], [-11.89624, 9.99763], [-11.91023, 9.93927], [-12.12634, 9.87203], [-12.24262, 9.92386], [-12.47254, 9.86834], [-12.76788, 9.3133], [-12.94095, 9.26335], [-13.08953, 9.0409], [-13.18586, 9.0925], [-13.29911, 9.04245], [-14.36218, 8.64107], [-12.15048, 6.15992], [-11.50429, 6.92704], [-11.4027, 6.97746], [-11.29417, 7.21576], [-10.60422, 7.7739], [-10.60492, 8.04072], [-10.57523, 8.04829], [-10.51554, 8.1393], [-10.45023, 8.15627], [-10.35227, 8.15223], [-10.29839, 8.21283], [-10.31635, 8.28554], [-10.30084, 8.30008], [-10.27575, 8.48711]]]] } },
+    { type: "Feature", properties: { iso1A2: "SM", iso1A3: "SMR", iso1N3: "674", wikidata: "Q238", nameEn: "San Marino", groups: ["039", "150", "UN"], callingCodes: ["378"] }, geometry: { type: "MultiPolygon", coordinates: [[[[12.45648, 43.89369], [12.48771, 43.89706], [12.49429, 43.90973], [12.49247, 43.91774], [12.49724, 43.92248], [12.50269, 43.92363], [12.50496, 43.93017], [12.51553, 43.94096], [12.51427, 43.94897], [12.50655, 43.95796], [12.50875, 43.96198], [12.50622, 43.97131], [12.51109, 43.97201], [12.51064, 43.98165], [12.5154, 43.98508], [12.51463, 43.99122], [12.50678, 43.99113], [12.49406, 43.98492], [12.47853, 43.98052], [12.46205, 43.97463], [12.44684, 43.96597], [12.43662, 43.95698], [12.42005, 43.9578], [12.41414, 43.95273], [12.40415, 43.95485], [12.40506, 43.94325], [12.41165, 43.93769], [12.41551, 43.92984], [12.40733, 43.92379], [12.41233, 43.90956], [12.40935, 43.9024], [12.41641, 43.89991], [12.44184, 43.90498], [12.45648, 43.89369]]]] } },
+    { type: "Feature", properties: { iso1A2: "SN", iso1A3: "SEN", iso1N3: "686", wikidata: "Q1041", nameEn: "Senegal", groups: ["011", "202", "002", "UN"], callingCodes: ["221"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-14.32144, 16.61495], [-15.00557, 16.64997], [-15.6509, 16.50315], [-16.27016, 16.51565], [-16.4429, 16.20605], [-16.44814, 16.09753], [-16.48967, 16.0496], [-16.50854, 16.09032], [-17.15288, 16.07139], [-18.35085, 14.63444], [-17.43598, 13.59273], [-15.47902, 13.58758], [-15.36504, 13.79313], [-14.93719, 13.80173], [-14.34721, 13.46578], [-13.8955, 13.59126], [-13.79409, 13.34472], [-14.36795, 13.23033], [-15.14917, 13.57989], [-15.26908, 13.37768], [-15.80478, 13.34832], [-15.80355, 13.16729], [-16.69343, 13.16791], [-16.74676, 13.06025], [-17.43966, 13.04579], [-17.4623, 11.92379], [-16.70562, 12.34803], [-16.38191, 12.36449], [-16.20591, 12.46157], [-15.67302, 12.42974], [-15.17582, 12.6847], [-13.70523, 12.68013], [-13.05296, 12.64003], [-13.06603, 12.49342], [-12.87336, 12.51892], [-12.35415, 12.32758], [-11.91331, 12.42008], [-11.46267, 12.44559], [-11.37536, 12.40788], [-11.39935, 12.97808], [-11.63025, 13.39174], [-11.83345, 13.33333], [-12.06897, 13.71049], [-11.93043, 13.84505], [-12.23936, 14.76324], [-13.11029, 15.52116], [-13.43135, 16.09022], [-13.80075, 16.13961], [-14.32144, 16.61495]]]] } },
+    { type: "Feature", properties: { iso1A2: "SO", iso1A3: "SOM", iso1N3: "706", wikidata: "Q1045", nameEn: "Somalia", groups: ["014", "202", "002", "UN"], callingCodes: ["252"] }, geometry: { type: "MultiPolygon", coordinates: [[[[51.12877, 12.56479], [43.90659, 12.3823], [42.95776, 10.98533], [42.69452, 10.62672], [42.87643, 10.18441], [43.0937, 9.90579], [43.23518, 9.84605], [43.32613, 9.59205], [44.19222, 8.93028], [46.99339, 7.9989], [47.92477, 8.00111], [47.97917, 8.00124], [44.98104, 4.91821], [44.02436, 4.9451], [43.40263, 4.79289], [43.04177, 4.57923], [42.97746, 4.44032], [42.84526, 4.28357], [42.55853, 4.20518], [42.07619, 4.17667], [41.89488, 3.97375], [41.31368, 3.14314], [40.98767, 2.82959], [41.00099, -0.83068], [41.56, -1.59812], [41.56362, -1.66375], [41.75542, -1.85308], [57.49095, 8.14549], [51.12877, 12.56479]]]] } },
+    { type: "Feature", properties: { iso1A2: "SR", iso1A3: "SUR", iso1N3: "740", wikidata: "Q730", nameEn: "Suriname", groups: ["005", "419", "019", "UN"], driveSide: "left", callingCodes: ["597"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-54.26916, 5.26909], [-54.01877, 5.52789], [-54.01074, 5.68785], [-53.7094, 6.2264], [-56.84822, 6.73257], [-57.31629, 5.33714], [-57.22536, 5.15605], [-57.37442, 5.0208], [-57.8699, 4.89394], [-58.0307, 3.95513], [-57.35891, 3.32121], [-56.70519, 2.02964], [-56.55439, 2.02003], [-56.47045, 1.95135], [-55.99278, 1.83137], [-55.89863, 1.89861], [-55.92159, 2.05236], [-56.13054, 2.27723], [-55.96292, 2.53188], [-55.71493, 2.40342], [-55.01919, 2.564], [-54.6084, 2.32856], [-54.42864, 2.42442], [-54.28534, 2.67798], [-53.9849, 3.58697], [-53.98914, 3.627], [-54.05128, 3.63557], [-54.19367, 3.84387], [-54.38444, 4.13222], [-54.4717, 4.91964], [-54.26916, 5.26909]]]] } },
+    { type: "Feature", properties: { iso1A2: "SS", iso1A3: "SSD", iso1N3: "728", wikidata: "Q958", nameEn: "South Sudan", groups: ["014", "202", "002", "UN"], callingCodes: ["211"] }, geometry: { type: "MultiPolygon", coordinates: [[[[34.10229, 9.50238], [33.87958, 9.49937], [33.9082, 9.762], [33.96323, 9.80972], [33.99185, 9.99623], [33.96984, 10.15446], [33.90159, 10.17179], [33.80913, 10.32994], [33.66604, 10.44254], [33.52294, 10.64382], [33.24645, 10.77913], [33.26977, 10.83632], [33.13988, 11.43248], [33.25876, 12.22111], [32.73921, 12.22757], [32.73921, 11.95203], [32.10079, 11.95203], [32.39578, 11.70208], [32.39358, 11.18207], [32.46967, 11.04662], [31.99177, 10.65065], [31.77539, 10.28939], [31.28504, 9.75287], [30.84605, 9.7498], [30.82893, 9.71451], [30.53005, 9.95992], [30.00389, 10.28633], [29.94629, 10.29245], [29.54, 10.07949], [29.53844, 9.75133], [29.06988, 9.74826], [28.99983, 9.67155], [27.90704, 9.61323], [27.14427, 9.62858], [26.70685, 9.48735], [26.35815, 9.57946], [26.21338, 9.91545], [25.93241, 10.17941], [25.93163, 10.38159], [25.78141, 10.42599], [25.0918, 10.33718], [25.05688, 10.06776], [24.97739, 9.9081], [24.84653, 9.80643], [24.49389, 9.79962], [24.12744, 9.73784], [24.09319, 9.66572], [23.69155, 9.67566], [23.62179, 9.53823], [23.64981, 9.44303], [23.64358, 9.28637], [23.56263, 9.19418], [23.4848, 9.16959], [23.44744, 8.99128], [23.59065, 8.99743], [23.51905, 8.71749], [24.25691, 8.69288], [24.13238, 8.36959], [24.35965, 8.26177], [24.85156, 8.16933], [24.98855, 7.96588], [25.25319, 7.8487], [25.29214, 7.66675], [25.20649, 7.61115], [25.20337, 7.50312], [25.35281, 7.42595], [25.37461, 7.33024], [25.90076, 7.09549], [26.38022, 6.63493], [26.32729, 6.36272], [26.58259, 6.1987], [26.51721, 6.09655], [27.22705, 5.71254], [27.22705, 5.62889], [27.28621, 5.56382], [27.23017, 5.37167], [27.26886, 5.25876], [27.44012, 5.07349], [27.56656, 4.89375], [27.65462, 4.89375], [27.76469, 4.79284], [27.79551, 4.59976], [28.20719, 4.35614], [28.6651, 4.42638], [28.8126, 4.48784], [29.03054, 4.48784], [29.22207, 4.34297], [29.43341, 4.50101], [29.49726, 4.7007], [29.82087, 4.56246], [29.79666, 4.37809], [30.06964, 4.13221], [30.1621, 4.10586], [30.22374, 3.93896], [30.27658, 3.95653], [30.47691, 3.83353], [30.55396, 3.84451], [30.57378, 3.74567], [30.56277, 3.62703], [30.78512, 3.67097], [30.80713, 3.60506], [30.85997, 3.5743], [30.85153, 3.48867], [30.97601, 3.693], [31.16666, 3.79853], [31.29476, 3.8015], [31.50478, 3.67814], [31.50776, 3.63652], [31.72075, 3.74354], [31.81459, 3.82083], [31.86821, 3.78664], [31.96205, 3.6499], [31.95907, 3.57408], [32.05187, 3.589], [32.08491, 3.56287], [32.08866, 3.53543], [32.19888, 3.50867], [32.20782, 3.6053], [32.41337, 3.748], [32.72021, 3.77327], [32.89746, 3.81339], [33.02852, 3.89296], [33.18356, 3.77812], [33.51264, 3.75068], [33.9873, 4.23316], [34.47601, 4.72162], [35.34151, 5.02364], [35.30992, 4.90402], [35.47843, 4.91872], [35.42366, 4.76969], [35.51424, 4.61643], [35.9419, 4.61933], [35.82118, 4.77382], [35.81968, 5.10757], [35.8576, 5.33413], [35.50792, 5.42431], [35.29938, 5.34042], [35.31188, 5.50106], [35.13058, 5.62118], [35.12611, 5.68937], [35.00546, 5.89387], [34.96227, 6.26415], [35.01738, 6.46991], [34.87736, 6.60161], [34.77459, 6.5957], [34.65096, 6.72589], [34.53776, 6.74808], [34.53925, 6.82794], [34.47669, 6.91076], [34.35753, 6.91963], [34.19369, 7.04382], [34.19369, 7.12807], [34.01495, 7.25664], [34.03878, 7.27437], [34.02984, 7.36449], [33.87642, 7.5491], [33.71407, 7.65983], [33.44745, 7.7543], [33.32531, 7.71297], [33.24637, 7.77939], [33.04944, 7.78989], [33.0006, 7.90333], [33.08401, 8.05822], [33.18083, 8.13047], [33.1853, 8.29264], [33.19721, 8.40317], [33.3119, 8.45474], [33.54575, 8.47094], [33.66938, 8.44442], [33.71407, 8.3678], [33.87195, 8.41938], [33.89579, 8.4842], [34.01346, 8.50041], [34.14453, 8.60204], [34.14304, 9.04654], [34.10229, 9.50238]]]] } },
+    { type: "Feature", properties: { iso1A2: "ST", iso1A3: "STP", iso1N3: "678", wikidata: "Q1039", nameEn: "S\xE3o Tom\xE9 and Principe", groups: ["017", "202", "002", "UN"], callingCodes: ["239"] }, geometry: { type: "MultiPolygon", coordinates: [[[[4.34149, 1.91417], [6.6507, -0.28606], [7.9035, 1.92304], [4.34149, 1.91417]]]] } },
+    { type: "Feature", properties: { iso1A2: "SV", iso1A3: "SLV", iso1N3: "222", wikidata: "Q792", nameEn: "El Salvador", groups: ["013", "003", "419", "019", "UN"], callingCodes: ["503"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-89.34776, 14.43013], [-89.39028, 14.44561], [-89.57441, 14.41637], [-89.58814, 14.33165], [-89.50614, 14.26084], [-89.52397, 14.22628], [-89.61844, 14.21937], [-89.70756, 14.1537], [-89.75569, 14.07073], [-89.73251, 14.04133], [-89.76103, 14.02923], [-89.81807, 14.07073], [-89.88937, 14.0396], [-90.10505, 13.85104], [-90.11344, 13.73679], [-90.55276, 12.8866], [-88.11443, 12.63306], [-87.7346, 13.13228], [-87.55124, 13.12523], [-87.69751, 13.25228], [-87.73714, 13.32715], [-87.80177, 13.35689], [-87.84675, 13.41078], [-87.83467, 13.44655], [-87.77354, 13.45767], [-87.73841, 13.44169], [-87.72115, 13.46083], [-87.71657, 13.50577], [-87.78148, 13.52906], [-87.73106, 13.75443], [-87.68821, 13.80829], [-87.7966, 13.91353], [-88.00331, 13.86948], [-88.07641, 13.98447], [-88.23018, 13.99915], [-88.25791, 13.91108], [-88.48982, 13.86458], [-88.49738, 13.97224], [-88.70661, 14.04317], [-88.73182, 14.10919], [-88.815, 14.11652], [-88.85785, 14.17763], [-88.94608, 14.20207], [-89.04187, 14.33644], [-89.34776, 14.43013]]]] } },
+    { type: "Feature", properties: { iso1A2: "SX", iso1A3: "SXM", iso1N3: "534", wikidata: "Q26273", nameEn: "Sint Maarten", aliases: ["NL-SX"], country: "NL", groups: ["Q1451600", "029", "003", "419", "019", "UN"], callingCodes: ["1 721"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-63.33064, 17.9615], [-63.1055, 17.86651], [-62.93924, 18.02904], [-63.02323, 18.05757], [-63.04039, 18.05619], [-63.0579, 18.06614], [-63.07759, 18.04943], [-63.09686, 18.04608], [-63.11042, 18.05339], [-63.13502, 18.05445], [-63.33064, 17.9615]]]] } },
+    { type: "Feature", properties: { iso1A2: "SY", iso1A3: "SYR", iso1N3: "760", wikidata: "Q858", nameEn: "Syria", groups: ["145", "142", "UN"], callingCodes: ["963"] }, geometry: { type: "MultiPolygon", coordinates: [[[[42.23683, 37.2863], [42.21548, 37.28026], [42.20454, 37.28715], [42.22381, 37.30238], [42.22257, 37.31395], [42.2112, 37.32491], [42.19301, 37.31323], [42.18225, 37.28569], [42.00894, 37.17209], [41.515, 37.08084], [41.21937, 37.07665], [40.90856, 37.13147], [40.69136, 37.0996], [39.81589, 36.75538], [39.21538, 36.66834], [39.03217, 36.70911], [38.74042, 36.70629], [38.55908, 36.84429], [38.38859, 36.90064], [38.21064, 36.91842], [37.81974, 36.76055], [37.68048, 36.75065], [37.49103, 36.66904], [37.47253, 36.63243], [37.21988, 36.6736], [37.16177, 36.66069], [37.10894, 36.6704], [37.08279, 36.63495], [37.02088, 36.66422], [37.01647, 36.69512], [37.04619, 36.71101], [37.04399, 36.73483], [36.99886, 36.74012], [36.99557, 36.75997], [36.66727, 36.82901], [36.61581, 36.74629], [36.62681, 36.71189], [36.57398, 36.65186], [36.58829, 36.58295], [36.54206, 36.49539], [36.6081, 36.33772], [36.65653, 36.33861], [36.68672, 36.23677], [36.6125, 36.22592], [36.50463, 36.2419], [36.4617, 36.20461], [36.39206, 36.22088], [36.37474, 36.01163], [36.33956, 35.98687], [36.30099, 36.00985], [36.28338, 36.00273], [36.29769, 35.96086], [36.27678, 35.94839], [36.25366, 35.96264], [36.19973, 35.95195], [36.17441, 35.92076], [36.1623, 35.80925], [36.14029, 35.81015], [36.13919, 35.83692], [36.11827, 35.85923], [35.99829, 35.88242], [36.01844, 35.92403], [36.00514, 35.94113], [35.98499, 35.94107], [35.931, 35.92109], [35.51152, 36.10954], [35.48515, 34.70851], [35.97386, 34.63322], [35.98718, 34.64977], [36.29165, 34.62991], [36.32399, 34.69334], [36.35135, 34.68516], [36.35384, 34.65447], [36.42941, 34.62505], [36.46003, 34.6378], [36.45299, 34.59438], [36.41429, 34.61175], [36.39846, 34.55672], [36.3369, 34.52629], [36.34745, 34.5002], [36.4442, 34.50165], [36.46179, 34.46541], [36.55853, 34.41609], [36.53039, 34.3798], [36.56556, 34.31881], [36.60778, 34.31009], [36.58667, 34.27667], [36.59195, 34.2316], [36.62537, 34.20251], [36.5128, 34.09916], [36.50576, 34.05982], [36.41078, 34.05253], [36.28589, 33.91981], [36.38263, 33.86579], [36.3967, 33.83365], [36.14517, 33.85118], [36.06778, 33.82927], [35.9341, 33.6596], [36.05723, 33.57904], [35.94465, 33.52774], [35.94816, 33.47886], [35.88668, 33.43183], [35.82577, 33.40479], [35.81324, 33.36354], [35.77477, 33.33609], [35.813, 33.3172], [35.77513, 33.27342], [35.81295, 33.24841], [35.81647, 33.2028], [35.83846, 33.19397], [35.84285, 33.16673], [35.81911, 33.1336], [35.81911, 33.11077], [35.84802, 33.1031], [35.87188, 32.98028], [35.89298, 32.9456], [35.87012, 32.91976], [35.84021, 32.8725], [35.83758, 32.82817], [35.78745, 32.77938], [35.75983, 32.74803], [35.88405, 32.71321], [35.93307, 32.71966], [35.96633, 32.66237], [36.02239, 32.65911], [36.08074, 32.51463], [36.20379, 32.52751], [36.20875, 32.49529], [36.23948, 32.50108], [36.40959, 32.37908], [36.83946, 32.31293], [38.79171, 33.37328], [40.64314, 34.31604], [40.97676, 34.39788], [41.12388, 34.65742], [41.2345, 34.80049], [41.21654, 35.1508], [41.26569, 35.42708], [41.38184, 35.62502], [41.37027, 35.84095], [41.2564, 36.06012], [41.28864, 36.35368], [41.40058, 36.52502], [41.81736, 36.58782], [42.36697, 37.0627], [42.35724, 37.10998], [42.32313, 37.17814], [42.34735, 37.22548], [42.2824, 37.2798], [42.26039, 37.27017], [42.23683, 37.2863]]]] } },
+    { type: "Feature", properties: { iso1A2: "SZ", iso1A3: "SWZ", iso1N3: "748", wikidata: "Q1050", nameEn: "Eswatini", aliases: ["Swaziland"], groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["268"] }, geometry: { type: "MultiPolygon", coordinates: [[[[31.86881, -25.99973], [31.4175, -25.71886], [31.31237, -25.7431], [31.13073, -25.91558], [30.95819, -26.26303], [30.78927, -26.48271], [30.81101, -26.84722], [30.88826, -26.79622], [30.97757, -26.92706], [30.96088, -27.0245], [31.15027, -27.20151], [31.49834, -27.31549], [31.97592, -27.31675], [31.97463, -27.11057], [32.00893, -26.8096], [32.09664, -26.80721], [32.13315, -26.84345], [32.13409, -26.5317], [32.07352, -26.40185], [32.10435, -26.15656], [32.08599, -26.00978], [32.00916, -25.999], [31.974, -25.95387], [31.86881, -25.99973]]]] } },
+    { type: "Feature", properties: { iso1A2: "TA", iso1A3: "TAA", wikidata: "Q220982", nameEn: "Tristan da Cunha", aliases: ["SH-TA"], country: "GB", groups: ["SH", "BOTS", "011", "202", "002", "UN"], isoStatus: "excRes", driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["290 8", "44 20"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-13.38232, -34.07258], [-16.67337, -41.9188], [-5.88482, -41.4829], [-13.38232, -34.07258]]]] } },
+    { type: "Feature", properties: { iso1A2: "TC", iso1A3: "TCA", iso1N3: "796", wikidata: "Q18221", nameEn: "Turks and Caicos Islands", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 649"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.70065, 25.7637], [-72.98446, 20.4801], [-69.80718, 21.35956], [-71.70065, 25.7637]]]] } },
+    { type: "Feature", properties: { iso1A2: "TD", iso1A3: "TCD", iso1N3: "148", wikidata: "Q657", nameEn: "Chad", groups: ["017", "202", "002", "UN"], callingCodes: ["235"] }, geometry: { type: "MultiPolygon", coordinates: [[[[23.99539, 19.49944], [15.99566, 23.49639], [14.99751, 23.00539], [15.19692, 21.99339], [15.20213, 21.49365], [15.28332, 21.44557], [15.62515, 20.95395], [15.57248, 20.92138], [15.55382, 20.86507], [15.56004, 20.79488], [15.59841, 20.74039], [15.6721, 20.70069], [15.99632, 20.35364], [15.75098, 19.93002], [15.6032, 18.77402], [15.50373, 16.89649], [14.37425, 15.72591], [13.86301, 15.04043], [13.78991, 14.87519], [13.809, 14.72915], [13.67878, 14.64013], [13.68573, 14.55276], [13.48259, 14.46704], [13.47559, 14.40881], [13.6302, 13.71094], [14.08251, 13.0797], [14.46881, 13.08259], [14.56101, 12.91036], [14.55058, 12.78256], [14.83314, 12.62963], [14.90827, 12.3269], [14.89019, 12.16593], [14.96952, 12.0925], [15.00146, 12.1223], [15.0349, 12.10698], [15.05786, 12.0608], [15.04808, 11.8731], [15.11579, 11.79313], [15.06595, 11.71126], [15.13149, 11.5537], [15.0585, 11.40481], [15.10021, 11.04101], [15.04957, 11.02347], [15.09127, 10.87431], [15.06737, 10.80921], [15.15532, 10.62846], [15.14936, 10.53915], [15.23724, 10.47764], [15.30874, 10.31063], [15.50535, 10.1098], [15.68761, 9.99344], [15.41408, 9.92876], [15.24618, 9.99246], [15.14043, 9.99246], [15.05999, 9.94845], [14.95722, 9.97926], [14.80082, 9.93818], [14.4673, 10.00264], [14.20411, 10.00055], [14.1317, 9.82413], [14.01793, 9.73169], [13.97544, 9.6365], [14.37094, 9.2954], [14.35707, 9.19611], [14.83566, 8.80557], [15.09484, 8.65982], [15.20426, 8.50892], [15.50743, 7.79302], [15.59272, 7.7696], [15.56964, 7.58936], [15.49743, 7.52179], [15.73118, 7.52006], [15.79942, 7.44149], [16.40703, 7.68809], [16.41583, 7.77971], [16.58315, 7.88657], [16.59415, 7.76444], [16.658, 7.75353], [16.6668, 7.67281], [16.8143, 7.53971], [17.67288, 7.98905], [17.93926, 7.95853], [18.02731, 8.01085], [18.6085, 8.05009], [18.64153, 8.08714], [18.62612, 8.14163], [18.67455, 8.22226], [18.79783, 8.25929], [19.11044, 8.68172], [18.86388, 8.87971], [19.06421, 9.00367], [20.36748, 9.11019], [20.82979, 9.44696], [21.26348, 9.97642], [21.34934, 9.95907], [21.52766, 10.2105], [21.63553, 10.217], [21.71479, 10.29932], [21.72139, 10.64136], [22.45889, 11.00246], [22.87758, 10.91915], [22.97249, 11.21955], [22.93124, 11.41645], [22.7997, 11.40424], [22.54907, 11.64372], [22.64092, 12.07485], [22.48369, 12.02766], [22.50548, 12.16769], [22.38873, 12.45514], [22.46345, 12.61925], [22.22684, 12.74682], [22.15679, 12.66634], [21.98711, 12.63292], [21.89371, 12.68001], [21.81432, 12.81362], [21.94819, 13.05637], [22.02914, 13.13976], [22.1599, 13.19281], [22.29689, 13.3731], [22.08674, 13.77863], [22.22995, 13.96754], [22.5553, 14.11704], [22.55997, 14.23024], [22.44944, 14.24986], [22.38562, 14.58907], [22.70474, 14.69149], [22.66115, 14.86308], [22.99584, 15.22989], [22.99584, 15.40105], [22.92579, 15.47007], [22.93201, 15.55107], [23.10792, 15.71297], [23.38812, 15.69649], [23.62785, 15.7804], [23.99997, 15.69575], [23.99539, 19.49944]]]] } },
+    { type: "Feature", properties: { iso1A2: "TF", iso1A3: "ATF", iso1N3: "260", wikidata: "Q129003", nameEn: "French Southern Territories", country: "FR", groups: ["EU", "UN"] }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "TG", iso1A3: "TGO", iso1N3: "768", wikidata: "Q945", nameEn: "Togo", groups: ["011", "202", "002", "UN"], callingCodes: ["228"] }, geometry: { type: "MultiPolygon", coordinates: [[[[0.50388, 11.01011], [-0.13493, 11.14075], [-0.14462, 11.10811], [-0.05733, 11.08628], [-0.0275, 11.11202], [-514e-5, 11.10763], [342e-5, 11.08317], [0.02395, 11.06229], [0.03355, 10.9807], [-63e-4, 10.96417], [-908e-5, 10.91644], [-0.02685, 10.8783], [-0.0228, 10.81916], [-0.07183, 10.76794], [-0.07327, 10.71845], [-0.09141, 10.7147], [-0.05945, 10.63458], [0.12886, 10.53149], [0.18846, 10.4096], [0.29453, 10.41546], [0.33028, 10.30408], [0.39584, 10.31112], [0.35293, 10.09412], [0.41371, 10.06361], [0.41252, 10.02018], [0.36366, 10.03309], [0.32075, 9.72781], [0.34816, 9.71607], [0.34816, 9.66907], [0.32313, 9.6491], [0.28261, 9.69022], [0.26712, 9.66437], [0.29334, 9.59387], [0.36008, 9.6256], [0.38153, 9.58682], [0.23851, 9.57389], [0.2409, 9.52335], [0.30406, 9.521], [0.31241, 9.50337], [0.2254, 9.47869], [0.25758, 9.42696], [0.33148, 9.44812], [0.36485, 9.49749], [0.49118, 9.48339], [0.56388, 9.40697], [0.45424, 9.04581], [0.52455, 8.87746], [0.37319, 8.75262], [0.47211, 8.59945], [0.64731, 8.48866], [0.73432, 8.29529], [0.63897, 8.25873], [0.5913, 8.19622], [0.61156, 8.18324], [0.6056, 8.13959], [0.58891, 8.12779], [0.62943, 7.85751], [0.58295, 7.62368], [0.51979, 7.58706], [0.52455, 7.45354], [0.57223, 7.39326], [0.62943, 7.41099], [0.65327, 7.31643], [0.59606, 7.01252], [0.52217, 6.9723], [0.52098, 6.94391], [0.56508, 6.92971], [0.52853, 6.82921], [0.57406, 6.80348], [0.58176, 6.76049], [0.6497, 6.73682], [0.63659, 6.63857], [0.74862, 6.56517], [0.71048, 6.53083], [0.89283, 6.33779], [0.99652, 6.33779], [1.03108, 6.24064], [1.05969, 6.22998], [1.09187, 6.17074], [1.19966, 6.17069], [1.19771, 6.11522], [1.27574, 5.93551], [1.67336, 6.02702], [1.62913, 6.24075], [1.79826, 6.28221], [1.76906, 6.43189], [1.58105, 6.68619], [1.61812, 6.74843], [1.55877, 6.99737], [1.64249, 6.99562], [1.61838, 9.0527], [1.5649, 9.16941], [1.41746, 9.3226], [1.33675, 9.54765], [1.36624, 9.5951], [1.35507, 9.99525], [0.77666, 10.37665], [0.80358, 10.71459], [0.8804, 10.803], [0.91245, 10.99597], [0.66104, 10.99964], [0.4958, 10.93269], [0.50521, 10.98035], [0.48852, 10.98561], [0.50388, 11.01011]]]] } },
+    { type: "Feature", properties: { iso1A2: "TH", iso1A3: "THA", iso1N3: "764", wikidata: "Q869", nameEn: "Thailand", groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["66"] }, geometry: { type: "MultiPolygon", coordinates: [[[[100.08404, 20.36626], [99.95721, 20.46301], [99.91616, 20.44986], [99.90499, 20.4487], [99.89692, 20.44789], [99.89301, 20.44311], [99.89168, 20.44548], [99.88451, 20.44596], [99.88211, 20.44488], [99.86383, 20.44371], [99.81096, 20.33687], [99.68255, 20.32077], [99.46008, 20.39673], [99.46077, 20.36198], [99.5569, 20.20676], [99.52943, 20.14811], [99.416, 20.08614], [99.20328, 20.12877], [99.0735, 20.10298], [98.98679, 19.7419], [98.83661, 19.80931], [98.56065, 19.67807], [98.51182, 19.71303], [98.24884, 19.67876], [98.13829, 19.78541], [98.03314, 19.80941], [98.04364, 19.65755], [97.84715, 19.55782], [97.88423, 19.5041], [97.78769, 19.39429], [97.84186, 19.29526], [97.78606, 19.26769], [97.84024, 19.22217], [97.83479, 19.09972], [97.73797, 19.04261], [97.73654, 18.9812], [97.66487, 18.9371], [97.73836, 18.88478], [97.76752, 18.58097], [97.5258, 18.4939], [97.36444, 18.57138], [97.34522, 18.54596], [97.50383, 18.26844], [97.56219, 18.33885], [97.64116, 18.29778], [97.60841, 18.23846], [97.73723, 17.97912], [97.66794, 17.88005], [97.76407, 17.71595], [97.91829, 17.54504], [98.11185, 17.36829], [98.10439, 17.33847], [98.34566, 17.04822], [98.39441, 17.06266], [98.52624, 16.89979], [98.49603, 16.8446], [98.53833, 16.81934], [98.46994, 16.73613], [98.50253, 16.7139], [98.49713, 16.69022], [98.51043, 16.70107], [98.51579, 16.69433], [98.51472, 16.68521], [98.51833, 16.676], [98.51113, 16.64503], [98.5695, 16.62826], [98.57912, 16.55983], [98.63817, 16.47424], [98.68074, 16.27068], [98.84485, 16.42354], [98.92656, 16.36425], [98.8376, 16.11706], [98.69585, 16.13353], [98.57019, 16.04578], [98.59853, 15.87197], [98.541, 15.65406], [98.58598, 15.46821], [98.56027, 15.33471], [98.4866, 15.39154], [98.39351, 15.34177], [98.41906, 15.27103], [98.40522, 15.25268], [98.30446, 15.30667], [98.22, 15.21327], [98.18821, 15.13125], [98.24874, 14.83013], [98.56762, 14.37701], [98.97356, 14.04868], [99.16695, 13.72621], [99.20617, 13.20575], [99.12225, 13.19847], [99.10646, 13.05804], [99.18748, 12.9898], [99.18905, 12.84799], [99.29254, 12.68921], [99.409, 12.60603], [99.47519, 12.1353], [99.56445, 12.14805], [99.53424, 12.02317], [99.64891, 11.82699], [99.64108, 11.78948], [99.5672, 11.62732], [99.47598, 11.62434], [99.39485, 11.3925], [99.31573, 11.32081], [99.32756, 11.28545], [99.06938, 10.94857], [99.02337, 10.97217], [98.99701, 10.92962], [99.0069, 10.85485], [98.86819, 10.78336], [98.78511, 10.68351], [98.77275, 10.62548], [98.81944, 10.52761], [98.7391, 10.31488], [98.55174, 9.92804], [98.52291, 9.92389], [98.47298, 9.95782], [98.33094, 9.91973], [98.12555, 9.44056], [97.63455, 9.60854], [97.19814, 8.18901], [99.31854, 5.99868], [99.50117, 6.44501], [99.91873, 6.50233], [100.0756, 6.4045], [100.12, 6.42105], [100.19511, 6.72559], [100.29651, 6.68439], [100.30828, 6.66462], [100.31618, 6.66781], [100.31884, 6.66423], [100.32671, 6.66526], [100.32607, 6.65933], [100.31929, 6.65413], [100.35413, 6.54932], [100.41152, 6.52299], [100.41791, 6.5189], [100.42351, 6.51762], [100.43027, 6.52389], [100.66986, 6.45086], [100.74361, 6.50811], [100.74822, 6.46231], [100.81045, 6.45086], [100.85884, 6.24929], [101.10313, 6.25617], [101.12618, 6.19431], [101.06165, 6.14161], [101.12388, 6.11411], [101.087, 5.9193], [101.02708, 5.91013], [100.98815, 5.79464], [101.14062, 5.61613], [101.25755, 5.71065], [101.25524, 5.78633], [101.58019, 5.93534], [101.69773, 5.75881], [101.75074, 5.79091], [101.80144, 5.74505], [101.89188, 5.8386], [101.91776, 5.84269], [101.92819, 5.85511], [101.94712, 5.98421], [101.9714, 6.00575], [101.97114, 6.01992], [101.99209, 6.04075], [102.01835, 6.05407], [102.09182, 6.14161], [102.07732, 6.193], [102.08127, 6.22679], [102.09086, 6.23546], [102.46318, 7.22462], [102.47649, 9.66162], [102.52395, 11.25257], [102.91449, 11.65512], [102.90973, 11.75613], [102.83957, 11.8519], [102.78427, 11.98746], [102.77026, 12.06815], [102.70176, 12.1686], [102.73134, 12.37091], [102.78116, 12.40284], [102.7796, 12.43781], [102.57567, 12.65358], [102.51963, 12.66117], [102.4994, 12.71736], [102.53053, 12.77506], [102.49335, 12.92711], [102.48694, 12.97537], [102.52275, 12.99813], [102.46011, 13.08057], [102.43422, 13.09061], [102.36146, 13.26006], [102.36001, 13.31142], [102.34611, 13.35618], [102.35692, 13.38274], [102.35563, 13.47307], [102.361, 13.50551], [102.33828, 13.55613], [102.36859, 13.57488], [102.44601, 13.5637], [102.5358, 13.56933], [102.57573, 13.60461], [102.62483, 13.60883], [102.58635, 13.6286], [102.5481, 13.6589], [102.56848, 13.69366], [102.72727, 13.77806], [102.77864, 13.93374], [102.91251, 14.01531], [102.93275, 14.19044], [103.16469, 14.33075], [103.39353, 14.35639], [103.53518, 14.42575], [103.71109, 14.4348], [103.70175, 14.38052], [103.93836, 14.3398], [104.27616, 14.39861], [104.55014, 14.36091], [104.69335, 14.42726], [104.97667, 14.38806], [105.02804, 14.23722], [105.08408, 14.20402], [105.14012, 14.23873], [105.17748, 14.34432], [105.20894, 14.34967], [105.43783, 14.43865], [105.53864, 14.55731], [105.5121, 14.80802], [105.61162, 15.00037], [105.46661, 15.13132], [105.58043, 15.32724], [105.50662, 15.32054], [105.4692, 15.33709], [105.47635, 15.3796], [105.58191, 15.41031], [105.60446, 15.53301], [105.61756, 15.68792], [105.46573, 15.74742], [105.42285, 15.76971], [105.37959, 15.84074], [105.34115, 15.92737], [105.38508, 15.987], [105.42001, 16.00657], [105.06204, 16.09792], [105.00262, 16.25627], [104.88057, 16.37311], [104.73349, 16.565], [104.76099, 16.69302], [104.7397, 16.81005], [104.76442, 16.84752], [104.7373, 16.91125], [104.73712, 17.01404], [104.80716, 17.19025], [104.80061, 17.39367], [104.69867, 17.53038], [104.45404, 17.66788], [104.35432, 17.82871], [104.2757, 17.86139], [104.21776, 17.99335], [104.10927, 18.10826], [104.06533, 18.21656], [103.97725, 18.33631], [103.93916, 18.33914], [103.85642, 18.28666], [103.82449, 18.33979], [103.699, 18.34125], [103.60957, 18.40528], [103.47773, 18.42841], [103.41044, 18.4486], [103.30977, 18.4341], [103.24779, 18.37807], [103.23818, 18.34875], [103.29757, 18.30475], [103.17093, 18.2618], [103.14994, 18.23172], [103.1493, 18.17799], [103.07343, 18.12351], [103.07823, 18.03833], [103.0566, 18.00144], [103.01998, 17.97095], [102.9912, 17.9949], [102.95812, 18.0054], [102.86323, 17.97531], [102.81988, 17.94233], [102.79044, 17.93612], [102.75954, 17.89561], [102.68538, 17.86653], [102.67543, 17.84529], [102.69946, 17.81686], [102.68194, 17.80151], [102.59485, 17.83537], [102.5896, 17.84889], [102.61432, 17.92273], [102.60971, 17.95411], [102.59234, 17.96127], [102.45523, 17.97106], [102.11359, 18.21532], [101.88485, 18.02474], [101.78087, 18.07559], [101.72294, 17.92867], [101.44667, 17.7392], [101.15108, 17.47586], [100.96541, 17.57926], [101.02185, 17.87637], [101.1793, 18.0544], [101.19118, 18.2125], [101.15108, 18.25624], [101.18227, 18.34367], [101.06047, 18.43247], [101.27585, 18.68875], [101.22832, 18.73377], [101.25803, 18.89545], [101.35606, 19.04716], [101.261, 19.12717], [101.24911, 19.33334], [101.20604, 19.35296], [101.21347, 19.46223], [101.26991, 19.48324], [101.26545, 19.59242], [101.08928, 19.59748], [100.90302, 19.61901], [100.77231, 19.48324], [100.64606, 19.55884], [100.58219, 19.49164], [100.49604, 19.53504], [100.398, 19.75047], [100.5094, 19.87904], [100.58808, 20.15791], [100.55218, 20.17741], [100.51052, 20.14928], [100.47567, 20.19133], [100.4537, 20.19971], [100.44992, 20.23644], [100.41473, 20.25625], [100.37439, 20.35156], [100.33383, 20.4028], [100.25769, 20.3992], [100.22076, 20.31598], [100.16668, 20.2986], [100.1712, 20.24324], [100.11785, 20.24787], [100.09337, 20.26293], [100.09999, 20.31614], [100.08404, 20.36626]]]] } },
+    { type: "Feature", properties: { iso1A2: "TJ", iso1A3: "TJK", iso1N3: "762", wikidata: "Q863", nameEn: "Tajikistan", groups: ["143", "142", "UN"], callingCodes: ["992"] }, geometry: { type: "MultiPolygon", coordinates: [[[[70.45251, 41.04438], [70.38028, 41.02014], [70.36655, 40.90296], [69.69434, 40.62615], [69.59441, 40.70181], [69.53021, 40.77621], [69.38327, 40.7918], [69.32834, 40.70233], [69.3455, 40.57988], [69.2643, 40.57506], [69.21063, 40.54469], [69.27066, 40.49274], [69.28525, 40.41894], [69.30774, 40.36102], [69.33794, 40.34819], [69.32833, 40.29794], [69.30808, 40.2821], [69.24817, 40.30357], [69.25229, 40.26362], [69.30104, 40.24502], [69.30448, 40.18774], [69.2074, 40.21488], [69.15659, 40.2162], [69.04544, 40.22904], [68.85832, 40.20885], [68.84357, 40.18604], [68.79276, 40.17555], [68.77902, 40.20492], [68.5332, 40.14826], [68.52771, 40.11676], [68.62796, 40.07789], [69.01523, 40.15771], [69.01935, 40.11466], [68.96579, 40.06949], [68.84906, 40.04952], [68.93695, 39.91167], [68.88889, 39.87163], [68.63071, 39.85265], [68.61972, 39.68905], [68.54166, 39.53929], [68.12053, 39.56317], [67.70992, 39.66156], [67.62889, 39.60234], [67.44899, 39.57799], [67.46547, 39.53564], [67.39681, 39.52505], [67.46822, 39.46146], [67.45998, 39.315], [67.36522, 39.31287], [67.33226, 39.23739], [67.67833, 39.14479], [67.68915, 39.00775], [68.09704, 39.02589], [68.19743, 38.85985], [68.06948, 38.82115], [68.12877, 38.73677], [68.05598, 38.71641], [68.0807, 38.64136], [68.05873, 38.56087], [68.11366, 38.47169], [68.06274, 38.39435], [68.13289, 38.40822], [68.40343, 38.19484], [68.27159, 37.91477], [68.12635, 37.93], [67.81566, 37.43107], [67.8474, 37.31594], [67.78329, 37.1834], [67.7803, 37.08978], [67.87917, 37.0591], [68.02194, 36.91923], [68.18542, 37.02074], [68.27605, 37.00977], [68.29253, 37.10621], [68.41201, 37.10402], [68.41888, 37.13906], [68.61851, 37.19815], [68.6798, 37.27906], [68.81438, 37.23862], [68.80889, 37.32494], [68.91189, 37.26704], [68.88168, 37.33368], [68.96407, 37.32603], [69.03274, 37.25174], [69.25152, 37.09426], [69.39529, 37.16752], [69.45022, 37.23315], [69.36645, 37.40462], [69.44954, 37.4869], [69.51888, 37.5844], [69.80041, 37.5746], [69.84435, 37.60616], [69.93362, 37.61378], [69.95971, 37.5659], [70.15015, 37.52519], [70.28243, 37.66706], [70.27694, 37.81258], [70.1863, 37.84296], [70.17206, 37.93276], [70.4898, 38.12546], [70.54673, 38.24541], [70.60407, 38.28046], [70.61526, 38.34774], [70.64966, 38.34999], [70.69189, 38.37031], [70.6761, 38.39144], [70.67438, 38.40597], [70.69807, 38.41861], [70.72485, 38.4131], [70.75455, 38.4252], [70.77132, 38.45548], [70.78581, 38.45502], [70.78702, 38.45031], [70.79766, 38.44944], [70.80521, 38.44447], [70.81697, 38.44507], [70.82538, 38.45394], [70.84376, 38.44688], [70.88719, 38.46826], [70.92728, 38.43021], [70.98693, 38.48862], [71.03545, 38.44779], [71.0556, 38.40176], [71.09542, 38.42517], [71.10592, 38.42077], [71.10957, 38.40671], [71.1451, 38.40106], [71.21291, 38.32797], [71.33114, 38.30339], [71.33869, 38.27335], [71.37803, 38.25641], [71.36444, 38.15358], [71.29878, 38.04429], [71.28922, 38.01272], [71.27622, 37.99946], [71.27278, 37.96496], [71.24969, 37.93031], [71.2809, 37.91995], [71.296, 37.93403], [71.32871, 37.88564], [71.51565, 37.95349], [71.58843, 37.92425], [71.59255, 37.79956], [71.55752, 37.78677], [71.54324, 37.77104], [71.53053, 37.76534], [71.55234, 37.73209], [71.54186, 37.69691], [71.51972, 37.61945], [71.5065, 37.60912], [71.49693, 37.53527], [71.50616, 37.50733], [71.5256, 37.47971], [71.49612, 37.4279], [71.47685, 37.40281], [71.4862, 37.33405], [71.49821, 37.31975], [71.50674, 37.31502], [71.48536, 37.26017], [71.4824, 37.24921], [71.48339, 37.23937], [71.47386, 37.2269], [71.4555, 37.21418], [71.4494, 37.18137], [71.44127, 37.11856], [71.43097, 37.05855], [71.45578, 37.03094], [71.46923, 36.99925], [71.48481, 36.93218], [71.51502, 36.89128], [71.57195, 36.74943], [71.67083, 36.67346], [71.83229, 36.68084], [72.31676, 36.98115], [72.54095, 37.00007], [72.66381, 37.02014], [72.79693, 37.22222], [73.06884, 37.31729], [73.29633, 37.46495], [73.77197, 37.4417], [73.76647, 37.33913], [73.61129, 37.27469], [73.64974, 37.23643], [73.82552, 37.22659], [73.8564, 37.26158], [74.20308, 37.34208], [74.23339, 37.41116], [74.41055, 37.3948], [74.56161, 37.37734], [74.68383, 37.3948], [74.8294, 37.3435], [74.88887, 37.23275], [75.12328, 37.31839], [75.09719, 37.37297], [75.15899, 37.41443], [75.06011, 37.52779], [74.94338, 37.55501], [74.8912, 37.67576], [75.00935, 37.77486], [74.92416, 37.83428], [74.9063, 38.03033], [74.82665, 38.07359], [74.80331, 38.19889], [74.69894, 38.22155], [74.69619, 38.42947], [74.51217, 38.47034], [74.17022, 38.65504], [73.97933, 38.52945], [73.79806, 38.61106], [73.80656, 38.66449], [73.7033, 38.84782], [73.7445, 38.93867], [73.82964, 38.91517], [73.81728, 39.04007], [73.75823, 39.023], [73.60638, 39.24534], [73.54572, 39.27567], [73.55396, 39.3543], [73.5004, 39.38402], [73.59241, 39.40843], [73.59831, 39.46425], [73.45096, 39.46677], [73.31912, 39.38615], [73.18454, 39.35536], [72.85934, 39.35116], [72.62027, 39.39696], [72.33173, 39.33093], [72.23834, 39.17248], [72.17242, 39.2661], [72.09689, 39.26823], [72.04059, 39.36704], [71.90601, 39.27674], [71.79202, 39.27355], [71.7522, 39.32031], [71.80164, 39.40631], [71.76816, 39.45456], [71.62688, 39.44056], [71.5517, 39.45722], [71.55856, 39.57588], [71.49814, 39.61397], [71.08752, 39.50704], [71.06418, 39.41586], [70.7854, 39.38933], [70.64087, 39.58792], [70.44757, 39.60128], [70.2869, 39.53141], [70.11111, 39.58223], [69.87491, 39.53882], [69.68677, 39.59281], [69.3594, 39.52516], [69.26938, 39.8127], [69.35649, 40.01994], [69.43134, 39.98431], [69.43557, 39.92877], [69.53615, 39.93991], [69.5057, 40.03277], [69.53855, 40.0887], [69.53794, 40.11833], [69.55555, 40.12296], [69.57615, 40.10524], [69.64704, 40.12165], [69.67001, 40.10639], [70.01283, 40.23288], [70.58297, 40.00891], [70.57384, 39.99394], [70.47557, 39.93216], [70.55033, 39.96619], [70.58912, 39.95211], [70.65946, 39.9878], [70.65827, 40.0981], [70.7928, 40.12797], [70.80495, 40.16813], [70.9818, 40.22392], [70.8607, 40.217], [70.62342, 40.17396], [70.56394, 40.26421], [70.57149, 40.3442], [70.37511, 40.38605], [70.32626, 40.45174], [70.49871, 40.52503], [70.80009, 40.72825], [70.45251, 41.04438]]], [[[70.68112, 40.90612], [70.6158, 40.97661], [70.56077, 41.00642], [70.54223, 40.98787], [70.57501, 40.98941], [70.6721, 40.90555], [70.68112, 40.90612]]], [[[70.74189, 39.86319], [70.53651, 39.89155], [70.52631, 39.86989], [70.54998, 39.85137], [70.59667, 39.83542], [70.63105, 39.77923], [70.74189, 39.86319]]]] } },
+    { type: "Feature", properties: { iso1A2: "TK", iso1A3: "TKL", iso1N3: "772", wikidata: "Q36823", nameEn: "Tokelau", country: "NZ", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["690"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-168.251, -9.44289], [-174.18635, -7.80441], [-174.17993, -10.13616], [-168.251, -9.44289]]]] } },
+    { type: "Feature", properties: { iso1A2: "TL", iso1A3: "TLS", iso1N3: "626", wikidata: "Q574", nameEn: "East Timor", aliases: ["Timor-Leste", "TP"], groups: ["035", "142", "UN"], driveSide: "left", callingCodes: ["670"] }, geometry: { type: "MultiPolygon", coordinates: [[[[124.46701, -9.13002], [124.94011, -8.85617], [124.97742, -9.08128], [125.11764, -8.96359], [125.18632, -9.03142], [125.18907, -9.16434], [125.09434, -9.19669], [125.04044, -9.17093], [124.97892, -9.19281], [125.09025, -9.46406], [125.68138, -9.85176], [127.55165, -9.05052], [127.42116, -8.22471], [125.87691, -8.31789], [125.58506, -7.95311], [124.92337, -8.75859], [124.33472, -9.11416], [124.04628, -9.22671], [124.04286, -9.34243], [124.10539, -9.41206], [124.14517, -9.42324], [124.21247, -9.36904], [124.28115, -9.42189], [124.28115, -9.50453], [124.3535, -9.48493], [124.35258, -9.43002], [124.38554, -9.3582], [124.45971, -9.30263], [124.46701, -9.13002]]]] } },
+    { type: "Feature", properties: { iso1A2: "TM", iso1A3: "TKM", iso1N3: "795", wikidata: "Q874", nameEn: "Turkmenistan", groups: ["143", "142", "UN"], callingCodes: ["993"] }, geometry: { type: "MultiPolygon", coordinates: [[[[60.5078, 41.21694], [60.06581, 41.4363], [60.18117, 41.60082], [60.06032, 41.76287], [60.08504, 41.80997], [60.33223, 41.75058], [59.95046, 41.97966], [60.0356, 42.01028], [60.04659, 42.08982], [59.96419, 42.1428], [60.00539, 42.212], [59.94633, 42.27655], [59.4341, 42.29738], [59.2955, 42.37064], [59.17317, 42.52248], [58.93422, 42.5407], [58.6266, 42.79314], [58.57991, 42.64988], [58.27504, 42.69632], [58.14321, 42.62159], [58.29427, 42.56497], [58.51674, 42.30348], [58.40688, 42.29535], [58.3492, 42.43335], [57.99214, 42.50021], [57.90975, 42.4374], [57.92897, 42.24047], [57.84932, 42.18555], [57.6296, 42.16519], [57.30275, 42.14076], [57.03633, 41.92043], [56.96218, 41.80383], [57.03359, 41.41777], [57.13796, 41.36625], [57.03423, 41.25435], [56.00314, 41.32584], [55.45471, 41.25609], [54.95182, 41.92424], [54.20635, 42.38477], [52.97575, 42.1308], [52.47884, 41.78034], [52.26048, 41.69249], [51.7708, 40.29239], [53.89734, 37.3464], [54.24565, 37.32047], [54.36211, 37.34912], [54.58664, 37.45809], [54.67247, 37.43532], [54.77822, 37.51597], [54.81804, 37.61285], [54.77684, 37.62264], [54.851, 37.75739], [55.13412, 37.94705], [55.44152, 38.08564], [55.76561, 38.12238], [55.97847, 38.08024], [56.33278, 38.08132], [56.32454, 38.18502], [56.43303, 38.26054], [56.62255, 38.24005], [56.73928, 38.27887], [57.03453, 38.18717], [57.21169, 38.28965], [57.37236, 38.09321], [57.35042, 37.98546], [57.79534, 37.89299], [58.21399, 37.77281], [58.22999, 37.6856], [58.39959, 37.63134], [58.47786, 37.6433], [58.5479, 37.70526], [58.6921, 37.64548], [58.9338, 37.67374], [59.22905, 37.51161], [59.33507, 37.53146], [59.39797, 37.47892], [59.39385, 37.34257], [59.55178, 37.13594], [59.74678, 37.12499], [60.00768, 37.04102], [60.34767, 36.63214], [61.14516, 36.64644], [61.18187, 36.55348], [61.1393, 36.38782], [61.22719, 36.12759], [61.12007, 35.95992], [61.22444, 35.92879], [61.26152, 35.80749], [61.22719, 35.67038], [61.27371, 35.61482], [61.58742, 35.43803], [61.77693, 35.41341], [61.97743, 35.4604], [62.05709, 35.43803], [62.15871, 35.33278], [62.29191, 35.25964], [62.29878, 35.13312], [62.48006, 35.28796], [62.62288, 35.22067], [62.74098, 35.25432], [62.90853, 35.37086], [63.0898, 35.43131], [63.12276, 35.53196], [63.10079, 35.63024], [63.23262, 35.67487], [63.10318, 35.81782], [63.12276, 35.86208], [63.29579, 35.85985], [63.53475, 35.90881], [63.56496, 35.95106], [63.98519, 36.03773], [64.05385, 36.10433], [64.43288, 36.24401], [64.57295, 36.34362], [64.62514, 36.44311], [64.61141, 36.6351], [64.97945, 37.21913], [65.51778, 37.23881], [65.64263, 37.34388], [65.64137, 37.45061], [65.72274, 37.55438], [66.30993, 37.32409], [66.55743, 37.35409], [66.52303, 37.39827], [66.65761, 37.45497], [66.52852, 37.58568], [66.53676, 37.80084], [66.67684, 37.96776], [66.56697, 38.0435], [66.41042, 38.02403], [66.24013, 38.16238], [65.83913, 38.25733], [65.55873, 38.29052], [64.32576, 38.98691], [64.19086, 38.95561], [63.70778, 39.22349], [63.6913, 39.27666], [62.43337, 39.98528], [62.34273, 40.43206], [62.11751, 40.58242], [61.87856, 41.12257], [61.4446, 41.29407], [61.39732, 41.19873], [61.33199, 41.14946], [61.22212, 41.14946], [61.03261, 41.25691], [60.5078, 41.21694]]]] } },
+    { type: "Feature", properties: { iso1A2: "TN", iso1A3: "TUN", iso1N3: "788", wikidata: "Q948", nameEn: "Tunisia", groups: ["015", "002", "UN"], callingCodes: ["216"] }, geometry: { type: "MultiPolygon", coordinates: [[[[11.2718, 37.6713], [7.89009, 38.19924], [8.59123, 37.14286], [8.64044, 36.9401], [8.62972, 36.86499], [8.67706, 36.8364], [8.57613, 36.78062], [8.46537, 36.7706], [8.47609, 36.66607], [8.16167, 36.48817], [8.18936, 36.44939], [8.40731, 36.42208], [8.2626, 35.91733], [8.26472, 35.73669], [8.35371, 35.66373], [8.36086, 35.47774], [8.30329, 35.29884], [8.47318, 35.23376], [8.3555, 35.10007], [8.30727, 34.95378], [8.25189, 34.92009], [8.29655, 34.72798], [8.20482, 34.57575], [7.86264, 34.3987], [7.81242, 34.21841], [7.74207, 34.16492], [7.66174, 34.20167], [7.52851, 34.06493], [7.54088, 33.7726], [7.73687, 33.42114], [7.83028, 33.18851], [8.11433, 33.10175], [8.1179, 33.05086], [8.31895, 32.83483], [8.35999, 32.50101], [9.07483, 32.07865], [9.55544, 30.23971], [9.76848, 30.34366], [9.88152, 30.34074], [10.29516, 30.90337], [10.12239, 31.42098], [10.31364, 31.72648], [10.48497, 31.72956], [10.62788, 31.96629], [10.7315, 31.97235], [11.04234, 32.2145], [11.53898, 32.4138], [11.57828, 32.48013], [11.46037, 32.6307], [11.51549, 33.09826], [11.55852, 33.1409], [11.58941, 33.36891], [11.2718, 37.6713]]]] } },
+    { type: "Feature", properties: { iso1A2: "TO", iso1A3: "TON", iso1N3: "776", wikidata: "Q678", nameEn: "Tonga", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["676"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-176.74538, -22.89767], [-180, -22.90585], [-180, -24.21376], [-173.10761, -24.19665], [-173.13438, -14.94228], [-176.76826, -14.95183], [-176.74538, -22.89767]]]] } },
+    { type: "Feature", properties: { iso1A2: "TR", iso1A3: "TUR", iso1N3: "792", wikidata: "Q43", nameEn: "Turkey", groups: ["145", "142", "UN"], callingCodes: ["90"] }, geometry: { type: "MultiPolygon", coordinates: [[[[41.54366, 41.52185], [40.89217, 41.72528], [34.8305, 42.4581], [28.32297, 41.98371], [28.02971, 41.98066], [27.91479, 41.97902], [27.83492, 41.99709], [27.81235, 41.94803], [27.69949, 41.97515], [27.55191, 41.90928], [27.52379, 41.93756], [27.45478, 41.96591], [27.27411, 42.10409], [27.22376, 42.10152], [27.19251, 42.06028], [27.08486, 42.08735], [27.03277, 42.0809], [26.95638, 42.00741], [26.79143, 41.97386], [26.62996, 41.97644], [26.56051, 41.92995], [26.57961, 41.90024], [26.53968, 41.82653], [26.36952, 41.82265], [26.33589, 41.76802], [26.32952, 41.73637], [26.35957, 41.71149], [26.47958, 41.67037], [26.5209, 41.62592], [26.59196, 41.60491], [26.59742, 41.48058], [26.61767, 41.42281], [26.62997, 41.34613], [26.5837, 41.32131], [26.5209, 41.33993], [26.39861, 41.25053], [26.32259, 41.24929], [26.31928, 41.07386], [26.3606, 41.02027], [26.33297, 40.98388], [26.35894, 40.94292], [26.32259, 40.94042], [26.28623, 40.93005], [26.29441, 40.89119], [26.26169, 40.9168], [26.20856, 40.86048], [26.21351, 40.83298], [26.15685, 40.80709], [26.12854, 40.77339], [26.12495, 40.74283], [26.08638, 40.73214], [26.0754, 40.72772], [26.03489, 40.73051], [25.94795, 40.72797], [26.04292, 40.3958], [25.61285, 40.17161], [25.94257, 39.39358], [26.43357, 39.43096], [26.70773, 39.0312], [26.61814, 38.81372], [26.21136, 38.65436], [26.32173, 38.48731], [26.24183, 38.44695], [26.21136, 38.17558], [27.05537, 37.9131], [27.16428, 37.72343], [26.99377, 37.69034], [26.95583, 37.64989], [27.14757, 37.32], [27.20312, 36.94571], [27.45627, 36.9008], [27.24613, 36.71622], [27.46117, 36.53789], [27.89482, 36.69898], [27.95037, 36.46155], [28.23708, 36.56812], [29.30783, 36.01033], [29.48192, 36.18377], [29.61002, 36.1731], [29.61805, 36.14179], [29.69611, 36.10365], [29.73302, 35.92555], [32.82353, 35.70297], [35.51152, 36.10954], [35.931, 35.92109], [35.98499, 35.94107], [36.00514, 35.94113], [36.01844, 35.92403], [35.99829, 35.88242], [36.11827, 35.85923], [36.13919, 35.83692], [36.14029, 35.81015], [36.1623, 35.80925], [36.17441, 35.92076], [36.19973, 35.95195], [36.25366, 35.96264], [36.27678, 35.94839], [36.29769, 35.96086], [36.28338, 36.00273], [36.30099, 36.00985], [36.33956, 35.98687], [36.37474, 36.01163], [36.39206, 36.22088], [36.4617, 36.20461], [36.50463, 36.2419], [36.6125, 36.22592], [36.68672, 36.23677], [36.65653, 36.33861], [36.6081, 36.33772], [36.54206, 36.49539], [36.58829, 36.58295], [36.57398, 36.65186], [36.62681, 36.71189], [36.61581, 36.74629], [36.66727, 36.82901], [36.99557, 36.75997], [36.99886, 36.74012], [37.04399, 36.73483], [37.04619, 36.71101], [37.01647, 36.69512], [37.02088, 36.66422], [37.08279, 36.63495], [37.10894, 36.6704], [37.16177, 36.66069], [37.21988, 36.6736], [37.47253, 36.63243], [37.49103, 36.66904], [37.68048, 36.75065], [37.81974, 36.76055], [38.21064, 36.91842], [38.38859, 36.90064], [38.55908, 36.84429], [38.74042, 36.70629], [39.03217, 36.70911], [39.21538, 36.66834], [39.81589, 36.75538], [40.69136, 37.0996], [40.90856, 37.13147], [41.21937, 37.07665], [41.515, 37.08084], [42.00894, 37.17209], [42.18225, 37.28569], [42.19301, 37.31323], [42.2112, 37.32491], [42.22257, 37.31395], [42.22381, 37.30238], [42.20454, 37.28715], [42.21548, 37.28026], [42.23683, 37.2863], [42.26039, 37.27017], [42.2824, 37.2798], [42.34735, 37.22548], [42.32313, 37.17814], [42.35724, 37.10998], [42.56725, 37.14878], [42.78887, 37.38615], [42.93705, 37.32015], [43.11403, 37.37436], [43.30083, 37.30629], [43.33508, 37.33105], [43.50787, 37.24436], [43.56702, 37.25675], [43.63085, 37.21957], [43.7009, 37.23692], [43.8052, 37.22825], [43.82699, 37.19477], [43.84878, 37.22205], [43.90949, 37.22453], [44.02002, 37.33229], [44.13521, 37.32486], [44.2613, 37.25055], [44.27998, 37.16501], [44.22239, 37.15756], [44.18503, 37.09551], [44.25975, 36.98119], [44.30645, 36.97373], [44.35937, 37.02843], [44.35315, 37.04955], [44.38117, 37.05825], [44.42631, 37.05825], [44.63179, 37.19229], [44.76698, 37.16162], [44.78319, 37.1431], [44.7868, 37.16644], [44.75986, 37.21549], [44.81021, 37.2915], [44.58449, 37.45018], [44.61401, 37.60165], [44.56887, 37.6429], [44.62096, 37.71985], [44.55498, 37.783], [44.45948, 37.77065], [44.3883, 37.85433], [44.22509, 37.88859], [44.42476, 38.25763], [44.50115, 38.33939], [44.44386, 38.38295], [44.38309, 38.36117], [44.3119, 38.37887], [44.3207, 38.49799], [44.32058, 38.62752], [44.28065, 38.6465], [44.26155, 38.71427], [44.30322, 38.81581], [44.18863, 38.93881], [44.20946, 39.13975], [44.1043, 39.19842], [44.03667, 39.39223], [44.22452, 39.4169], [44.29818, 39.378], [44.37921, 39.4131], [44.42832, 39.4131], [44.41849, 39.56659], [44.48111, 39.61579], [44.47298, 39.68788], [44.6137, 39.78393], [44.65422, 39.72163], [44.71806, 39.71124], [44.81043, 39.62677], [44.80977, 39.65768], [44.75779, 39.7148], [44.61845, 39.8281], [44.46635, 39.97733], [44.26973, 40.04866], [44.1778, 40.02845], [44.1057, 40.03555], [43.92307, 40.01787], [43.65688, 40.11199], [43.65221, 40.14889], [43.71136, 40.16673], [43.59928, 40.34019], [43.60862, 40.43267], [43.54791, 40.47413], [43.63664, 40.54159], [43.7425, 40.66805], [43.74872, 40.7365], [43.67712, 40.84846], [43.67712, 40.93084], [43.58683, 40.98961], [43.47319, 41.02251], [43.44984, 41.0988], [43.4717, 41.12611], [43.44973, 41.17666], [43.36118, 41.2028], [43.23096, 41.17536], [43.1945, 41.25242], [43.13373, 41.25503], [43.21707, 41.30331], [43.02956, 41.37891], [42.8785, 41.50516], [42.84899, 41.47265], [42.78995, 41.50126], [42.84471, 41.58912], [42.72794, 41.59714], [42.59202, 41.58183], [42.51772, 41.43606], [42.26387, 41.49346], [41.95134, 41.52466], [41.81939, 41.43621], [41.7124, 41.47417], [41.7148, 41.4932], [41.54366, 41.52185]]]] } },
+    { type: "Feature", properties: { iso1A2: "TT", iso1A3: "TTO", iso1N3: "780", wikidata: "Q754", nameEn: "Trinidad and Tobago", groups: ["029", "003", "419", "019", "UN"], driveSide: "left", callingCodes: ["1 868"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-61.62505, 11.18974], [-62.08693, 10.04435], [-60.89962, 9.81445], [-60.07172, 11.77667], [-61.62505, 11.18974]]]] } },
+    { type: "Feature", properties: { iso1A2: "TV", iso1A3: "TUV", iso1N3: "798", wikidata: "Q672", nameEn: "Tuvalu", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["688"] }, geometry: { type: "MultiPolygon", coordinates: [[[[174, -5], [174, -11.5], [179.99999, -11.5], [179.99999, -5], [174, -5]]]] } },
+    { type: "Feature", properties: { iso1A2: "TW", iso1A3: "TWN", iso1N3: "158", wikidata: "Q865", nameEn: "Taiwan", aliases: ["RC"], groups: ["030", "142"], callingCodes: ["886"] }, geometry: { type: "MultiPolygon", coordinates: [[[[121.8109, 21.77688], [122.26612, 25.98197], [120.5128, 26.536], [120.0693, 26.3959], [119.78816, 26.2348], [119.98511, 25.37624], [119.42295, 25.0886], [118.6333, 24.46259], [118.42453, 24.54644], [118.35291, 24.51645], [118.28244, 24.51231], [118.11703, 24.39734], [120.69238, 21.52331], [121.8109, 21.77688]]]] } },
+    { type: "Feature", properties: { iso1A2: "TZ", iso1A3: "TZA", iso1N3: "834", wikidata: "Q924", nameEn: "Tanzania", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["255"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.80408, -0.99911], [30.76635, -0.9852], [30.70631, -1.01175], [30.64166, -1.06601], [30.47194, -1.0555], [30.45116, -1.10641], [30.50889, -1.16412], [30.57123, -1.33264], [30.71974, -1.43244], [30.84079, -1.64652], [30.80802, -1.91477], [30.89303, -2.08223], [30.83915, -2.35795], [30.54501, -2.41404], [30.41789, -2.66266], [30.52747, -2.65841], [30.40662, -2.86151], [30.4987, -2.9573], [30.57926, -2.89791], [30.6675, -2.98987], [30.83823, -2.97837], [30.84165, -3.25152], [30.45915, -3.56532], [30.22042, -4.01738], [30.03323, -4.26631], [29.88172, -4.35743], [29.82885, -4.36153], [29.77289, -4.41733], [29.75109, -4.45836], [29.63827, -4.44681], [29.43673, -4.44845], [29.52552, -6.2731], [30.2567, -7.14121], [30.79243, -8.27382], [31.00796, -8.58615], [31.37533, -8.60769], [31.57147, -8.70619], [31.57147, -8.81388], [31.71158, -8.91386], [31.81587, -8.88618], [31.94663, -8.93846], [31.94196, -9.02303], [31.98866, -9.07069], [32.08206, -9.04609], [32.16146, -9.05993], [32.25486, -9.13371], [32.43543, -9.11988], [32.49147, -9.14754], [32.53661, -9.24281], [32.75611, -9.28583], [32.76233, -9.31963], [32.95389, -9.40138], [32.99397, -9.36712], [33.14925, -9.49322], [33.31581, -9.48554], [33.48052, -9.62442], [33.76677, -9.58516], [33.93298, -9.71647], [33.9638, -9.62206], [33.95829, -9.54066], [34.03865, -9.49398], [34.54499, -10.0678], [34.51911, -10.12279], [34.57581, -10.56271], [34.65946, -10.6828], [34.67047, -10.93796], [34.61161, -11.01611], [34.63305, -11.11731], [34.79375, -11.32245], [34.91153, -11.39799], [34.96296, -11.57354], [35.63599, -11.55927], [35.82767, -11.41081], [36.19094, -11.57593], [36.19094, -11.70008], [36.62068, -11.72884], [36.80309, -11.56836], [37.3936, -11.68949], [37.76614, -11.53352], [37.8388, -11.3123], [37.93618, -11.26228], [38.21598, -11.27289], [38.47258, -11.4199], [38.88996, -11.16978], [39.24395, -11.17433], [39.58249, -10.96043], [40.00295, -10.80255], [40.44265, -10.4618], [40.74206, -10.25691], [40.14328, -4.64201], [39.62121, -4.68136], [39.44306, -4.93877], [39.21631, -4.67835], [37.81321, -3.69179], [37.75036, -3.54243], [37.63099, -3.50723], [37.5903, -3.42735], [37.71745, -3.304], [37.67199, -3.06222], [34.0824, -1.02264], [34.03084, -1.05101], [34.02286, -1.00779], [33.93107, -0.99298], [30.80408, -0.99911]]]] } },
+    { type: "Feature", properties: { iso1A2: "UA", iso1A3: "UKR", iso1N3: "804", wikidata: "Q212", nameEn: "Ukraine", groups: ["151", "150", "UN"], callingCodes: ["380"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.57318, 46.10317], [33.61467, 46.13561], [33.63854, 46.14147], [33.61517, 46.22615], [33.646, 46.23028], [33.74047, 46.18555], [33.79715, 46.20482], [33.85234, 46.19863], [33.91549, 46.15938], [34.05272, 46.10838], [34.07311, 46.11769], [34.12929, 46.10494], [34.181, 46.06804], [34.25111, 46.0532], [34.33912, 46.06114], [34.41221, 46.00245], [34.44155, 45.95995], [34.48729, 45.94267], [34.52011, 45.95097], [34.55889, 45.99347], [34.60861, 45.99347], [34.66679, 45.97136], [34.75479, 45.90705], [34.80153, 45.90047], [34.79905, 45.81009], [34.96015, 45.75634], [35.23066, 45.79231], [37.62608, 46.82615], [38.12112, 46.86078], [38.3384, 46.98085], [38.22955, 47.12069], [38.23049, 47.2324], [38.32112, 47.2585], [38.33074, 47.30508], [38.22225, 47.30788], [38.28954, 47.39255], [38.28679, 47.53552], [38.35062, 47.61631], [38.76379, 47.69346], [38.79628, 47.81109], [38.87979, 47.87719], [39.73935, 47.82876], [39.82213, 47.96396], [39.77544, 48.04206], [39.88256, 48.04482], [39.83724, 48.06501], [39.94847, 48.22811], [40.00752, 48.22445], [39.99241, 48.31768], [39.97325, 48.31399], [39.9693, 48.29904], [39.95248, 48.29972], [39.91465, 48.26743], [39.90041, 48.3049], [39.84273, 48.30947], [39.84136, 48.33321], [39.94847, 48.35055], [39.88794, 48.44226], [39.86196, 48.46633], [39.84548, 48.57821], [39.79764, 48.58668], [39.67226, 48.59368], [39.71765, 48.68673], [39.73104, 48.7325], [39.79466, 48.83739], [39.97182, 48.79398], [40.08168, 48.87443], [40.03636, 48.91957], [39.98967, 48.86901], [39.78368, 48.91596], [39.74874, 48.98675], [39.72649, 48.9754], [39.71353, 48.98959], [39.6683, 48.99454], [39.6836, 49.05121], [39.93437, 49.05709], [40.01988, 49.1761], [40.22176, 49.25683], [40.18331, 49.34996], [40.14912, 49.37681], [40.1141, 49.38798], [40.03087, 49.45452], [40.03636, 49.52321], [40.16683, 49.56865], [40.13249, 49.61672], [39.84548, 49.56064], [39.65047, 49.61761], [39.59142, 49.73758], [39.44496, 49.76067], [39.27968, 49.75976], [39.1808, 49.88911], [38.9391, 49.79524], [38.90477, 49.86787], [38.73311, 49.90238], [38.68677, 50.00904], [38.65688, 49.97176], [38.35408, 50.00664], [38.32524, 50.08866], [38.18517, 50.08161], [38.21675, 49.98104], [38.02999, 49.90592], [38.02999, 49.94482], [37.90776, 50.04194], [37.79515, 50.08425], [37.75807, 50.07896], [37.61113, 50.21976], [37.62879, 50.24481], [37.62486, 50.29966], [37.47243, 50.36277], [37.48204, 50.46079], [37.08468, 50.34935], [36.91762, 50.34963], [36.69377, 50.26982], [36.64571, 50.218], [36.56655, 50.2413], [36.58371, 50.28563], [36.47817, 50.31457], [36.30101, 50.29088], [36.20763, 50.3943], [36.06893, 50.45205], [35.8926, 50.43829], [35.80388, 50.41356], [35.73659, 50.35489], [35.61711, 50.35707], [35.58003, 50.45117], [35.47463, 50.49247], [35.39464, 50.64751], [35.48116, 50.66405], [35.47704, 50.77274], [35.41367, 50.80227], [35.39307, 50.92145], [35.32598, 50.94524], [35.40837, 51.04119], [35.31774, 51.08434], [35.20375, 51.04723], [35.12685, 51.16191], [35.14058, 51.23162], [34.97304, 51.2342], [34.82472, 51.17483], [34.6874, 51.18], [34.6613, 51.25053], [34.38802, 51.2746], [34.31661, 51.23936], [34.23009, 51.26429], [34.33446, 51.363], [34.22048, 51.4187], [34.30562, 51.5205], [34.17599, 51.63253], [34.07765, 51.67065], [34.42922, 51.72852], [34.41136, 51.82793], [34.09413, 52.00835], [34.11199, 52.14087], [34.05239, 52.20132], [33.78789, 52.37204], [33.55718, 52.30324], [33.48027, 52.31499], [33.51323, 52.35779], [33.18913, 52.3754], [32.89937, 52.2461], [32.85405, 52.27888], [32.69475, 52.25535], [32.54781, 52.32423], [32.3528, 52.32842], [32.38988, 52.24946], [32.33083, 52.23685], [32.34044, 52.1434], [32.2777, 52.10266], [32.23331, 52.08085], [32.08813, 52.03319], [31.92159, 52.05144], [31.96141, 52.08015], [31.85018, 52.11305], [31.81722, 52.09955], [31.7822, 52.11406], [31.38326, 52.12991], [31.25142, 52.04131], [31.13332, 52.1004], [30.95589, 52.07775], [30.90897, 52.00699], [30.76443, 51.89739], [30.68804, 51.82806], [30.51946, 51.59649], [30.64992, 51.35014], [30.56203, 51.25655], [30.36153, 51.33984], [30.34642, 51.42555], [30.17888, 51.51025], [29.77376, 51.4461], [29.7408, 51.53417], [29.54372, 51.48372], [29.49773, 51.39814], [29.42357, 51.4187], [29.32881, 51.37843], [29.25191, 51.49828], [29.25603, 51.57089], [29.20659, 51.56918], [29.16402, 51.64679], [29.1187, 51.65872], [28.99098, 51.56833], [28.95528, 51.59222], [28.81795, 51.55552], [28.76027, 51.48802], [28.78224, 51.45294], [28.75615, 51.41442], [28.73143, 51.46236], [28.69161, 51.44695], [28.64429, 51.5664], [28.47051, 51.59734], [28.37592, 51.54505], [28.23452, 51.66988], [28.10658, 51.57857], [27.95827, 51.56065], [27.91844, 51.61952], [27.85253, 51.62293], [27.76052, 51.47604], [27.67125, 51.50854], [27.71932, 51.60672], [27.55727, 51.63486], [27.51058, 51.5854], [27.47212, 51.61184], [27.24828, 51.60161], [27.26613, 51.65957], [27.20948, 51.66713], [27.20602, 51.77291], [26.99422, 51.76933], [26.9489, 51.73788], [26.80043, 51.75777], [26.69759, 51.82284], [26.46962, 51.80501], [26.39367, 51.87315], [26.19084, 51.86781], [26.00408, 51.92967], [25.83217, 51.92587], [25.80574, 51.94556], [25.73673, 51.91973], [25.46163, 51.92205], [25.20228, 51.97143], [24.98784, 51.91273], [24.37123, 51.88222], [24.29021, 51.80841], [24.3163, 51.75063], [24.13075, 51.66979], [23.99907, 51.58369], [23.8741, 51.59734], [23.91118, 51.63316], [23.7766, 51.66809], [23.60906, 51.62122], [23.6736, 51.50255], [23.62751, 51.50512], [23.69905, 51.40871], [23.63858, 51.32182], [23.80678, 51.18405], [23.90376, 51.07697], [23.92217, 51.00836], [24.04576, 50.90196], [24.14524, 50.86128], [24.0952, 50.83262], [23.99254, 50.83847], [23.95925, 50.79271], [24.0595, 50.71625], [24.0996, 50.60752], [24.07048, 50.5071], [24.03668, 50.44507], [23.99563, 50.41289], [23.79445, 50.40481], [23.71382, 50.38248], [23.67635, 50.33385], [23.28221, 50.0957], [22.99329, 49.84249], [22.83179, 49.69875], [22.80261, 49.69098], [22.78304, 49.65543], [22.64534, 49.53094], [22.69444, 49.49378], [22.748, 49.32759], [22.72009, 49.20288], [22.86336, 49.10513], [22.89122, 49.00725], [22.56155, 49.08865], [22.54338, 49.01424], [22.48296, 48.99172], [22.42934, 48.92857], [22.34151, 48.68893], [22.21379, 48.6218], [22.16023, 48.56548], [22.14689, 48.4005], [22.2083, 48.42534], [22.38133, 48.23726], [22.49806, 48.25189], [22.59007, 48.15121], [22.58733, 48.10813], [22.66835, 48.09162], [22.73427, 48.12005], [22.81804, 48.11363], [22.87847, 48.04665], [22.84276, 47.98602], [22.89849, 47.95851], [22.94301, 47.96672], [22.92241, 48.02002], [23.0158, 47.99338], [23.08858, 48.00716], [23.1133, 48.08061], [23.15999, 48.12188], [23.27397, 48.08245], [23.33577, 48.0237], [23.4979, 47.96858], [23.52803, 48.01818], [23.5653, 48.00499], [23.63894, 48.00293], [23.66262, 47.98786], [23.75188, 47.99705], [23.80904, 47.98142], [23.8602, 47.9329], [23.89352, 47.94512], [23.94192, 47.94868], [23.96337, 47.96672], [23.98553, 47.96076], [24.00801, 47.968], [24.02999, 47.95087], [24.06466, 47.95317], [24.11281, 47.91487], [24.22566, 47.90231], [24.34926, 47.9244], [24.43578, 47.97131], [24.61994, 47.95062], [24.70632, 47.84428], [24.81893, 47.82031], [24.88896, 47.7234], [25.11144, 47.75203], [25.23778, 47.89403], [25.63878, 47.94924], [25.77723, 47.93919], [26.05901, 47.9897], [26.17711, 47.99246], [26.33504, 48.18418], [26.55202, 48.22445], [26.62823, 48.25804], [26.6839, 48.35828], [26.79239, 48.29071], [26.82809, 48.31629], [26.71274, 48.40388], [26.85556, 48.41095], [26.93384, 48.36558], [27.03821, 48.37653], [27.0231, 48.42485], [27.08078, 48.43214], [27.13434, 48.37288], [27.27855, 48.37534], [27.32159, 48.4434], [27.37604, 48.44398], [27.37741, 48.41026], [27.44333, 48.41209], [27.46942, 48.454], [27.5889, 48.49224], [27.59027, 48.46311], [27.6658, 48.44034], [27.74422, 48.45926], [27.79225, 48.44244], [27.81902, 48.41874], [27.87533, 48.4037], [27.88391, 48.36699], [27.95883, 48.32368], [28.04527, 48.32661], [28.09873, 48.3124], [28.07504, 48.23494], [28.17666, 48.25963], [28.19314, 48.20749], [28.2856, 48.23202], [28.32508, 48.23384], [28.35519, 48.24957], [28.36996, 48.20543], [28.34912, 48.1787], [28.30586, 48.1597], [28.30609, 48.14018], [28.34009, 48.13147], [28.38712, 48.17567], [28.43701, 48.15832], [28.42454, 48.12047], [28.48428, 48.0737], [28.53921, 48.17453], [28.69896, 48.13106], [28.85232, 48.12506], [28.8414, 48.03392], [28.9306, 47.96255], [29.1723, 47.99013], [29.19839, 47.89261], [29.27804, 47.88893], [29.20663, 47.80367], [29.27255, 47.79953], [29.22242, 47.73607], [29.22414, 47.60012], [29.11743, 47.55001], [29.18603, 47.43387], [29.3261, 47.44664], [29.39889, 47.30179], [29.47854, 47.30366], [29.48678, 47.36043], [29.5733, 47.36508], [29.59665, 47.25521], [29.54996, 47.24962], [29.57696, 47.13581], [29.49732, 47.12878], [29.53044, 47.07851], [29.61038, 47.09932], [29.62137, 47.05069], [29.57056, 46.94766], [29.72986, 46.92234], [29.75458, 46.8604], [29.87405, 46.88199], [29.98814, 46.82358], [29.94522, 46.80055], [29.9743, 46.75325], [29.94409, 46.56002], [29.88916, 46.54302], [30.02511, 46.45132], [30.16794, 46.40967], [30.09103, 46.38694], [29.94114, 46.40114], [29.88329, 46.35851], [29.74496, 46.45605], [29.66359, 46.4215], [29.6763, 46.36041], [29.5939, 46.35472], [29.49914, 46.45889], [29.35357, 46.49505], [29.24886, 46.37912], [29.23547, 46.55435], [29.02409, 46.49582], [29.01241, 46.46177], [28.9306, 46.45699], [29.004, 46.31495], [28.98478, 46.31803], [28.94953, 46.25852], [29.06656, 46.19716], [28.94643, 46.09176], [29.00613, 46.04962], [28.98004, 46.00385], [28.74383, 45.96664], [28.78503, 45.83475], [28.69852, 45.81753], [28.70401, 45.78019], [28.52823, 45.73803], [28.47879, 45.66994], [28.51587, 45.6613], [28.54196, 45.58062], [28.49252, 45.56716], [28.51449, 45.49982], [28.43072, 45.48538], [28.41836, 45.51715], [28.30201, 45.54744], [28.21139, 45.46895], [28.28504, 45.43907], [28.34554, 45.32102], [28.5735, 45.24759], [28.71358, 45.22631], [28.78911, 45.24179], [28.81383, 45.3384], [28.94292, 45.28045], [28.96077, 45.33164], [29.24779, 45.43388], [29.42632, 45.44545], [29.59798, 45.38857], [29.68175, 45.26885], [29.65428, 45.25629], [29.69272, 45.19227], [30.04414, 45.08461], [31.62627, 45.50633], [33.54017, 46.0123], [33.59087, 46.06013], [33.57318, 46.10317]]]] } },
+    { type: "Feature", properties: { iso1A2: "UG", iso1A3: "UGA", iso1N3: "800", wikidata: "Q1036", nameEn: "Uganda", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["256"] }, geometry: { type: "MultiPolygon", coordinates: [[[[33.93107, -0.99298], [33.9264, -0.54188], [33.98449, -0.13079], [33.90936, 0.10581], [34.10067, 0.36372], [34.08727, 0.44713], [34.11408, 0.48884], [34.13493, 0.58118], [34.20196, 0.62289], [34.27345, 0.63182], [34.31516, 0.75693], [34.40041, 0.80266], [34.43349, 0.85254], [34.52369, 1.10692], [34.57427, 1.09868], [34.58029, 1.14712], [34.67562, 1.21265], [34.80223, 1.22754], [34.82606, 1.26626], [34.82606, 1.30944], [34.7918, 1.36752], [34.87819, 1.5596], [34.92734, 1.56109], [34.9899, 1.6668], [34.98692, 1.97348], [34.90947, 2.42447], [34.95267, 2.47209], [34.77244, 2.70272], [34.78137, 2.76223], [34.73967, 2.85447], [34.65774, 2.8753], [34.60114, 2.93034], [34.56242, 3.11478], [34.45815, 3.18319], [34.40006, 3.37949], [34.41794, 3.44342], [34.39112, 3.48802], [34.44922, 3.51627], [34.45815, 3.67385], [34.15429, 3.80464], [34.06046, 4.15235], [33.9873, 4.23316], [33.51264, 3.75068], [33.18356, 3.77812], [33.02852, 3.89296], [32.89746, 3.81339], [32.72021, 3.77327], [32.41337, 3.748], [32.20782, 3.6053], [32.19888, 3.50867], [32.08866, 3.53543], [32.08491, 3.56287], [32.05187, 3.589], [31.95907, 3.57408], [31.96205, 3.6499], [31.86821, 3.78664], [31.81459, 3.82083], [31.72075, 3.74354], [31.50776, 3.63652], [31.50478, 3.67814], [31.29476, 3.8015], [31.16666, 3.79853], [30.97601, 3.693], [30.85153, 3.48867], [30.94081, 3.50847], [30.93486, 3.40737], [30.84251, 3.26908], [30.77101, 3.04897], [30.8574, 2.9508], [30.8857, 2.83923], [30.75612, 2.5863], [30.74271, 2.43601], [30.83059, 2.42559], [30.91102, 2.33332], [30.96911, 2.41071], [31.06593, 2.35862], [31.07934, 2.30207], [31.12104, 2.27676], [31.1985, 2.29462], [31.20148, 2.2217], [31.28042, 2.17853], [31.30127, 2.11006], [30.48503, 1.21675], [30.24671, 1.14974], [30.22139, 0.99635], [30.1484, 0.89805], [29.98307, 0.84295], [29.95477, 0.64486], [29.97413, 0.52124], [29.87284, 0.39166], [29.81922, 0.16824], [29.77454, 0.16675], [29.7224, 0.07291], [29.72687, -0.08051], [29.65091, -0.46777], [29.67474, -0.47969], [29.67176, -0.55714], [29.62708, -0.71055], [29.63006, -0.8997], [29.58388, -0.89821], [29.59061, -1.39016], [29.82657, -1.31187], [29.912, -1.48269], [30.16369, -1.34303], [30.35212, -1.06896], [30.47194, -1.0555], [30.64166, -1.06601], [30.70631, -1.01175], [30.76635, -0.9852], [30.80408, -0.99911], [33.93107, -0.99298]]]] } },
+    { type: "Feature", properties: { iso1A2: "UM", iso1A3: "UMI", iso1N3: "581", wikidata: "Q16645", nameEn: "United States Minor Outlying Islands", country: "US" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "UN", wikidata: "Q1065", nameEn: "United Nations", level: "unitedNations", isoStatus: "excRes" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "US", iso1A3: "USA", iso1N3: "840", wikidata: "Q30", nameEn: "United States of America" }, geometry: null },
+    { type: "Feature", properties: { iso1A2: "UY", iso1A3: "URY", iso1N3: "858", wikidata: "Q77", nameEn: "Uruguay", groups: ["005", "419", "019", "UN"], callingCodes: ["598"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-57.65132, -30.19229], [-57.61478, -30.25165], [-57.64859, -30.35095], [-57.89115, -30.49572], [-57.8024, -30.77193], [-57.89476, -30.95994], [-57.86729, -31.06352], [-57.9908, -31.34924], [-57.98127, -31.3872], [-58.07569, -31.44916], [-58.0023, -31.53084], [-58.00076, -31.65016], [-58.20252, -31.86966], [-58.10036, -32.25338], [-58.22362, -32.52416], [-58.1224, -32.98842], [-58.40475, -33.11777], [-58.44442, -33.84033], [-58.34425, -34.15035], [-57.83001, -34.69099], [-54.78916, -36.21945], [-52.83257, -34.01481], [-53.37138, -33.74313], [-53.39593, -33.75169], [-53.44031, -33.69344], [-53.52794, -33.68908], [-53.53459, -33.16843], [-53.1111, -32.71147], [-53.37671, -32.57005], [-53.39572, -32.58596], [-53.76024, -32.0751], [-54.17384, -31.86168], [-55.50821, -30.91349], [-55.50841, -30.9027], [-55.51862, -30.89828], [-55.52712, -30.89997], [-55.53276, -30.90218], [-55.53431, -30.89714], [-55.54572, -30.89051], [-55.55218, -30.88193], [-55.55373, -30.8732], [-55.5634, -30.8686], [-55.58866, -30.84117], [-55.87388, -31.05053], [-56.4619, -30.38457], [-56.4795, -30.3899], [-56.49267, -30.39471], [-56.90236, -30.02578], [-57.22502, -30.26121], [-57.65132, -30.19229]]]] } },
+    { type: "Feature", properties: { iso1A2: "UZ", iso1A3: "UZB", iso1N3: "860", wikidata: "Q265", nameEn: "Uzbekistan", groups: ["143", "142", "UN"], callingCodes: ["998"] }, geometry: { type: "MultiPolygon", coordinates: [[[[65.85194, 42.85481], [65.53277, 43.31856], [65.18666, 43.48835], [64.96464, 43.74748], [64.53885, 43.56941], [63.34656, 43.64003], [62.01711, 43.51008], [61.01475, 44.41383], [58.59711, 45.58671], [55.97842, 44.99622], [55.97832, 44.99622], [55.97822, 44.99617], [55.97811, 44.99617], [55.97801, 44.99612], [55.97801, 44.99607], [55.97791, 44.99607], [55.9778, 44.99607], [55.9777, 44.99601], [55.9777, 44.99596], [55.9776, 44.99591], [55.97749, 44.99591], [55.97739, 44.99591], [55.97739, 44.99586], [55.97729, 44.99586], [55.97718, 44.99581], [55.97708, 44.99576], [55.97698, 44.9957], [55.97698, 44.99565], [55.97687, 44.9956], [55.97677, 44.9956], [55.97677, 44.99555], [55.97677, 44.9955], [55.97667, 44.99545], [55.97656, 44.99539], [55.97646, 44.99534], [55.97646, 44.99529], [55.97636, 44.99524], [55.97636, 44.99519], [55.97625, 44.99514], [55.97615, 44.99508], [55.97615, 44.99503], [55.97615, 44.99498], [55.97615, 44.99493], [55.97615, 44.99483], [55.97615, 44.99477], [55.97605, 44.99477], [55.97605, 44.99467], [55.97605, 44.99462], [55.97605, 44.99457], [55.97605, 44.99452], [55.97594, 44.99446], [55.97584, 44.99441], [55.97584, 44.99436], [55.97584, 44.99431], [55.97584, 44.99426], [55.97584, 44.99421], [55.97584, 44.99415], [55.97584, 44.99405], [55.97584, 44.994], [55.97584, 44.9939], [55.97584, 44.99384], [55.97584, 44.99374], [55.97584, 44.99369], [55.97584, 44.99359], [55.97584, 44.99353], [55.97584, 44.99348], [55.97584, 44.99343], [55.97584, 44.99338], [55.97584, 44.99328], [55.97584, 44.99322], [56.00314, 41.32584], [57.03423, 41.25435], [57.13796, 41.36625], [57.03359, 41.41777], [56.96218, 41.80383], [57.03633, 41.92043], [57.30275, 42.14076], [57.6296, 42.16519], [57.84932, 42.18555], [57.92897, 42.24047], [57.90975, 42.4374], [57.99214, 42.50021], [58.3492, 42.43335], [58.40688, 42.29535], [58.51674, 42.30348], [58.29427, 42.56497], [58.14321, 42.62159], [58.27504, 42.69632], [58.57991, 42.64988], [58.6266, 42.79314], [58.93422, 42.5407], [59.17317, 42.52248], [59.2955, 42.37064], [59.4341, 42.29738], [59.94633, 42.27655], [60.00539, 42.212], [59.96419, 42.1428], [60.04659, 42.08982], [60.0356, 42.01028], [59.95046, 41.97966], [60.33223, 41.75058], [60.08504, 41.80997], [60.06032, 41.76287], [60.18117, 41.60082], [60.06581, 41.4363], [60.5078, 41.21694], [61.03261, 41.25691], [61.22212, 41.14946], [61.33199, 41.14946], [61.39732, 41.19873], [61.4446, 41.29407], [61.87856, 41.12257], [62.11751, 40.58242], [62.34273, 40.43206], [62.43337, 39.98528], [63.6913, 39.27666], [63.70778, 39.22349], [64.19086, 38.95561], [64.32576, 38.98691], [65.55873, 38.29052], [65.83913, 38.25733], [66.24013, 38.16238], [66.41042, 38.02403], [66.56697, 38.0435], [66.67684, 37.96776], [66.53676, 37.80084], [66.52852, 37.58568], [66.65761, 37.45497], [66.52303, 37.39827], [66.55743, 37.35409], [66.64699, 37.32958], [66.95598, 37.40162], [67.08232, 37.35469], [67.13039, 37.27168], [67.2224, 37.24545], [67.2581, 37.17216], [67.51868, 37.26102], [67.78329, 37.1834], [67.8474, 37.31594], [67.81566, 37.43107], [68.12635, 37.93], [68.27159, 37.91477], [68.40343, 38.19484], [68.13289, 38.40822], [68.06274, 38.39435], [68.11366, 38.47169], [68.05873, 38.56087], [68.0807, 38.64136], [68.05598, 38.71641], [68.12877, 38.73677], [68.06948, 38.82115], [68.19743, 38.85985], [68.09704, 39.02589], [67.68915, 39.00775], [67.67833, 39.14479], [67.33226, 39.23739], [67.36522, 39.31287], [67.45998, 39.315], [67.46822, 39.46146], [67.39681, 39.52505], [67.46547, 39.53564], [67.44899, 39.57799], [67.62889, 39.60234], [67.70992, 39.66156], [68.12053, 39.56317], [68.54166, 39.53929], [68.61972, 39.68905], [68.63071, 39.85265], [68.88889, 39.87163], [68.93695, 39.91167], [68.84906, 40.04952], [68.96579, 40.06949], [69.01935, 40.11466], [69.01523, 40.15771], [68.62796, 40.07789], [68.52771, 40.11676], [68.5332, 40.14826], [68.77902, 40.20492], [68.79276, 40.17555], [68.84357, 40.18604], [68.85832, 40.20885], [69.04544, 40.22904], [69.15659, 40.2162], [69.2074, 40.21488], [69.30448, 40.18774], [69.30104, 40.24502], [69.25229, 40.26362], [69.24817, 40.30357], [69.30808, 40.2821], [69.32833, 40.29794], [69.33794, 40.34819], [69.30774, 40.36102], [69.28525, 40.41894], [69.27066, 40.49274], [69.21063, 40.54469], [69.2643, 40.57506], [69.3455, 40.57988], [69.32834, 40.70233], [69.38327, 40.7918], [69.53021, 40.77621], [69.59441, 40.70181], [69.69434, 40.62615], [70.36655, 40.90296], [70.38028, 41.02014], [70.45251, 41.04438], [70.80009, 40.72825], [70.49871, 40.52503], [70.32626, 40.45174], [70.37511, 40.38605], [70.57149, 40.3442], [70.56394, 40.26421], [70.62342, 40.17396], [70.8607, 40.217], [70.9818, 40.22392], [70.95789, 40.28761], [71.05901, 40.28765], [71.13042, 40.34106], [71.36663, 40.31593], [71.4246, 40.28619], [71.51215, 40.26943], [71.51549, 40.22986], [71.61725, 40.20615], [71.61931, 40.26775], [71.68386, 40.26984], [71.70569, 40.20391], [71.69621, 40.18492], [71.71719, 40.17886], [71.73054, 40.14818], [71.82646, 40.21872], [71.85002, 40.25647], [72.05464, 40.27586], [71.96401, 40.31907], [72.18648, 40.49893], [72.24368, 40.46091], [72.40346, 40.4007], [72.44191, 40.48222], [72.41513, 40.50856], [72.38384, 40.51535], [72.41714, 40.55736], [72.34406, 40.60144], [72.40517, 40.61917], [72.47795, 40.5532], [72.66713, 40.5219], [72.66713, 40.59076], [72.69579, 40.59778], [72.73995, 40.58409], [72.74768, 40.58051], [72.74862, 40.57131], [72.75982, 40.57273], [72.74894, 40.59592], [72.74866, 40.60873], [72.80137, 40.67856], [72.84754, 40.67229], [72.85372, 40.7116], [72.8722, 40.71111], [72.93296, 40.73089], [72.99133, 40.76457], [73.0612, 40.76678], [73.13412, 40.79122], [73.13267, 40.83512], [73.01869, 40.84681], [72.94454, 40.8094], [72.84291, 40.85512], [72.68157, 40.84942], [72.59136, 40.86947], [72.55109, 40.96046], [72.48742, 40.97136], [72.45206, 41.03018], [72.38511, 41.02785], [72.36138, 41.04384], [72.34757, 41.06104], [72.34026, 41.04539], [72.324, 41.03381], [72.18339, 40.99571], [72.17594, 41.02377], [72.21061, 41.05607], [72.1792, 41.10621], [72.14864, 41.13363], [72.17594, 41.15522], [72.16433, 41.16483], [72.10745, 41.15483], [72.07249, 41.11739], [71.85964, 41.19081], [71.91457, 41.2982], [71.83914, 41.3546], [71.76625, 41.4466], [71.71132, 41.43012], [71.73054, 41.54713], [71.65914, 41.49599], [71.6787, 41.42111], [71.57227, 41.29175], [71.46688, 41.31883], [71.43814, 41.19644], [71.46148, 41.13958], [71.40198, 41.09436], [71.34877, 41.16807], [71.27187, 41.11015], [71.25813, 41.18796], [71.11806, 41.15359], [71.02193, 41.19494], [70.9615, 41.16393], [70.86263, 41.23833], [70.77885, 41.24813], [70.78572, 41.36419], [70.67586, 41.47953], [70.48909, 41.40335], [70.17682, 41.5455], [70.69777, 41.92554], [71.28719, 42.18033], [71.13263, 42.28356], [70.94483, 42.26238], [69.49545, 41.545], [69.45751, 41.56863], [69.39485, 41.51518], [69.45081, 41.46246], [69.37468, 41.46555], [69.35554, 41.47211], [69.29778, 41.43673], [69.25059, 41.46693], [69.23332, 41.45847], [69.22671, 41.46298], [69.20439, 41.45391], [69.18528, 41.45175], [69.17701, 41.43769], [69.15137, 41.43078], [69.05006, 41.36183], [69.01308, 41.22804], [68.7217, 41.05025], [68.73945, 40.96989], [68.65662, 40.93861], [68.62221, 41.03019], [68.49983, 40.99669], [68.58444, 40.91447], [68.63, 40.59358], [68.49983, 40.56437], [67.96736, 40.83798], [68.1271, 41.0324], [68.08273, 41.08148], [67.98511, 41.02794], [67.9644, 41.14611], [66.69129, 41.1311], [66.53302, 41.87388], [66.00546, 41.94455], [66.09482, 42.93426], [65.85194, 42.85481]], [[70.68112, 40.90612], [70.6721, 40.90555], [70.57501, 40.98941], [70.54223, 40.98787], [70.56077, 41.00642], [70.6158, 40.97661], [70.68112, 40.90612]]], [[[71.21139, 40.03369], [71.12218, 40.03052], [71.06305, 40.1771], [71.00236, 40.18154], [71.01035, 40.05481], [71.11037, 40.01984], [71.11668, 39.99291], [71.09063, 39.99], [71.10501, 39.95568], [71.04979, 39.89808], [71.10531, 39.91354], [71.16101, 39.88423], [71.23067, 39.93581], [71.1427, 39.95026], [71.21139, 40.03369]]], [[[71.86463, 39.98598], [71.78838, 40.01404], [71.71511, 39.96348], [71.7504, 39.93701], [71.84316, 39.95582], [71.86463, 39.98598]]]] } },
+    { type: "Feature", properties: { iso1A2: "VA", iso1A3: "VAT", iso1N3: "336", wikidata: "Q237", nameEn: "Vatican City", aliases: ["Holy See"], groups: ["039", "150"], callingCodes: ["379", "39 06"] }, geometry: { type: "MultiPolygon", coordinates: [[[[12.45181, 41.90056], [12.45446, 41.90028], [12.45435, 41.90143], [12.45626, 41.90172], [12.45691, 41.90125], [12.4577, 41.90115], [12.45834, 41.90174], [12.45826, 41.90281], [12.45755, 41.9033], [12.45762, 41.9058], [12.45561, 41.90629], [12.45543, 41.90738], [12.45091, 41.90625], [12.44984, 41.90545], [12.44815, 41.90326], [12.44582, 41.90194], [12.44834, 41.90095], [12.45181, 41.90056]]]] } },
+    { type: "Feature", properties: { iso1A2: "VC", iso1A3: "VCT", iso1N3: "670", wikidata: "Q757", nameEn: "St. Vincent and the Grenadines", aliases: ["WV"], groups: ["029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", callingCodes: ["1 784"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-62.64026, 12.69984], [-59.94058, 12.34011], [-61.69315, 14.26451], [-62.64026, 12.69984]]]] } },
+    { type: "Feature", properties: { iso1A2: "VE", iso1A3: "VEN", iso1N3: "862", wikidata: "Q717", nameEn: "Venezuela", aliases: ["YV"], groups: ["005", "419", "019", "UN"], callingCodes: ["58"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-71.22331, 13.01387], [-70.92579, 11.96275], [-71.3275, 11.85], [-71.9675, 11.65536], [-72.24983, 11.14138], [-72.4767, 11.1117], [-72.88002, 10.44309], [-72.98085, 9.85253], [-73.36905, 9.16636], [-73.02119, 9.27584], [-72.94052, 9.10663], [-72.77415, 9.10165], [-72.65474, 8.61428], [-72.4042, 8.36513], [-72.36987, 8.19976], [-72.35163, 8.01163], [-72.39137, 8.03534], [-72.47213, 7.96106], [-72.48801, 7.94329], [-72.48183, 7.92909], [-72.47042, 7.92306], [-72.45806, 7.91141], [-72.46183, 7.90682], [-72.44454, 7.86031], [-72.46763, 7.79518], [-72.47827, 7.65604], [-72.45321, 7.57232], [-72.47415, 7.48928], [-72.43132, 7.40034], [-72.19437, 7.37034], [-72.04895, 7.03837], [-71.82441, 7.04314], [-71.44118, 7.02116], [-71.42212, 7.03854], [-71.37234, 7.01588], [-71.03941, 6.98163], [-70.7596, 7.09799], [-70.10716, 6.96516], [-69.41843, 6.1072], [-67.60654, 6.2891], [-67.4625, 6.20625], [-67.43513, 5.98835], [-67.58558, 5.84537], [-67.63914, 5.64963], [-67.59141, 5.5369], [-67.83341, 5.31104], [-67.85358, 4.53249], [-67.62671, 3.74303], [-67.50067, 3.75812], [-67.30945, 3.38393], [-67.85862, 2.86727], [-67.85862, 2.79173], [-67.65696, 2.81691], [-67.21967, 2.35778], [-66.85795, 1.22998], [-66.28507, 0.74585], [-65.6727, 1.01353], [-65.50158, 0.92086], [-65.57288, 0.62856], [-65.11657, 1.12046], [-64.38932, 1.5125], [-64.34654, 1.35569], [-64.08274, 1.64792], [-64.06135, 1.94722], [-63.39827, 2.16098], [-63.39114, 2.4317], [-64.0257, 2.48156], [-64.02908, 2.79797], [-64.48379, 3.7879], [-64.84028, 4.24665], [-64.72977, 4.28931], [-64.57648, 4.12576], [-64.14512, 4.12932], [-63.99183, 3.90172], [-63.86082, 3.94796], [-63.70218, 3.91417], [-63.67099, 4.01731], [-63.50611, 3.83592], [-63.42233, 3.89995], [-63.4464, 3.9693], [-63.21111, 3.96219], [-62.98296, 3.59935], [-62.7655, 3.73099], [-62.74411, 4.03331], [-62.57656, 4.04754], [-62.44822, 4.18621], [-62.13094, 4.08309], [-61.54629, 4.2822], [-61.48569, 4.43149], [-61.29675, 4.44216], [-61.31457, 4.54167], [-61.15703, 4.49839], [-60.98303, 4.54167], [-60.86539, 4.70512], [-60.5802, 4.94312], [-60.73204, 5.20931], [-61.4041, 5.95304], [-61.15058, 6.19558], [-61.20762, 6.58174], [-61.13632, 6.70922], [-60.54873, 6.8631], [-60.39419, 6.94847], [-60.28074, 7.1162], [-60.44116, 7.20817], [-60.54098, 7.14804], [-60.63367, 7.25061], [-60.59802, 7.33194], [-60.71923, 7.55817], [-60.64793, 7.56877], [-60.51959, 7.83373], [-60.38056, 7.8302], [-60.02407, 8.04557], [-59.97059, 8.20791], [-59.83156, 8.23261], [-59.80661, 8.28906], [-59.85562, 8.35213], [-59.98508, 8.53046], [-59.54058, 8.6862], [-60.89962, 9.81445], [-62.08693, 10.04435], [-61.62505, 11.18974], [-63.73917, 11.92623], [-63.19938, 16.44103], [-67.89186, 12.4116], [-68.01417, 11.77722], [-68.33524, 11.78151], [-68.99639, 11.79035], [-71.22331, 13.01387]]]] } },
+    { type: "Feature", properties: { iso1A2: "VG", iso1A3: "VGB", iso1N3: "092", wikidata: "Q25305", nameEn: "British Virgin Islands", country: "GB", groups: ["BOTS", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 284"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-64.47127, 17.55688], [-63.88746, 19.15706], [-65.02435, 18.73231], [-64.86027, 18.39056], [-64.64673, 18.36549], [-64.47127, 17.55688]]]] } },
+    { type: "Feature", properties: { iso1A2: "VI", iso1A3: "VIR", iso1N3: "850", wikidata: "Q11703", nameEn: "United States Virgin Islands", aliases: ["US-VI"], country: "US", groups: ["Q1352230", "029", "003", "419", "019", "UN"], driveSide: "left", roadSpeedUnit: "mph", roadHeightUnit: "ft", callingCodes: ["1 340"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-65.02435, 18.73231], [-65.27974, 17.56928], [-64.47127, 17.55688], [-64.64673, 18.36549], [-64.86027, 18.39056], [-65.02435, 18.73231]]]] } },
+    { type: "Feature", properties: { iso1A2: "VN", iso1A3: "VNM", iso1N3: "704", wikidata: "Q881", nameEn: "Vietnam", groups: ["035", "142", "UN"], callingCodes: ["84"] }, geometry: { type: "MultiPolygon", coordinates: [[[[108.10003, 21.47338], [108.0569, 21.53604], [108.02926, 21.54997], [107.97932, 21.54503], [107.97383, 21.53961], [107.97074, 21.54072], [107.96774, 21.53601], [107.95232, 21.5388], [107.92652, 21.58906], [107.90006, 21.5905], [107.86114, 21.65128], [107.80355, 21.66141], [107.66967, 21.60787], [107.56537, 21.61945], [107.54047, 21.5934], [107.49065, 21.59774], [107.49532, 21.62958], [107.47197, 21.6672], [107.41593, 21.64839], [107.38636, 21.59774], [107.35989, 21.60063], [107.35834, 21.6672], [107.29296, 21.74674], [107.24625, 21.7077], [107.20734, 21.71493], [107.10771, 21.79879], [107.02615, 21.81981], [107.00964, 21.85948], [107.06101, 21.88982], [107.05634, 21.92303], [106.99252, 21.95191], [106.97228, 21.92592], [106.92714, 21.93459], [106.9178, 21.97357], [106.81038, 21.97934], [106.74345, 22.00965], [106.72551, 21.97923], [106.69276, 21.96013], [106.68274, 21.99811], [106.70142, 22.02409], [106.6983, 22.15102], [106.67495, 22.1885], [106.69986, 22.22309], [106.6516, 22.33977], [106.55976, 22.34841], [106.57221, 22.37], [106.55665, 22.46498], [106.58395, 22.474], [106.61269, 22.60301], [106.65316, 22.5757], [106.71698, 22.58432], [106.72321, 22.63606], [106.76293, 22.73491], [106.82404, 22.7881], [106.83685, 22.8098], [106.81271, 22.8226], [106.78422, 22.81532], [106.71128, 22.85982], [106.71387, 22.88296], [106.6734, 22.89587], [106.6516, 22.86862], [106.60179, 22.92884], [106.55976, 22.92311], [106.51306, 22.94891], [106.49749, 22.91164], [106.34961, 22.86718], [106.27022, 22.87722], [106.19705, 22.98475], [106.00179, 22.99049], [105.99568, 22.94178], [105.90119, 22.94168], [105.8726, 22.92756], [105.72382, 23.06641], [105.57594, 23.075], [105.56037, 23.16806], [105.49966, 23.20669], [105.42805, 23.30824], [105.40782, 23.28107], [105.32376, 23.39684], [105.22569, 23.27249], [105.17276, 23.28679], [105.11672, 23.25247], [105.07002, 23.26248], [104.98712, 23.19176], [104.96532, 23.20463], [104.9486, 23.17235], [104.91435, 23.18666], [104.87992, 23.17141], [104.87382, 23.12854], [104.79478, 23.12934], [104.8334, 23.01484], [104.86765, 22.95178], [104.84942, 22.93631], [104.77114, 22.90017], [104.72755, 22.81984], [104.65283, 22.83419], [104.60457, 22.81841], [104.58122, 22.85571], [104.47225, 22.75813], [104.35593, 22.69353], [104.25683, 22.76534], [104.27084, 22.8457], [104.11384, 22.80363], [104.03734, 22.72945], [104.01088, 22.51823], [103.99247, 22.51958], [103.97384, 22.50634], [103.96783, 22.51173], [103.96352, 22.50584], [103.95191, 22.5134], [103.94513, 22.52553], [103.93286, 22.52703], [103.87904, 22.56683], [103.64506, 22.79979], [103.56255, 22.69499], [103.57812, 22.65764], [103.52675, 22.59155], [103.43646, 22.70648], [103.43179, 22.75816], [103.32282, 22.8127], [103.28079, 22.68063], [103.18895, 22.64471], [103.15782, 22.59873], [103.17961, 22.55705], [103.07843, 22.50097], [103.0722, 22.44775], [102.9321, 22.48659], [102.8636, 22.60735], [102.60675, 22.73376], [102.57095, 22.7036], [102.51802, 22.77969], [102.46665, 22.77108], [102.42618, 22.69212], [102.38415, 22.67919], [102.41061, 22.64184], [102.25339, 22.4607], [102.26428, 22.41321], [102.16621, 22.43336], [102.14099, 22.40092], [102.18712, 22.30403], [102.51734, 22.02676], [102.49092, 21.99002], [102.62301, 21.91447], [102.67145, 21.65894], [102.74189, 21.66713], [102.82115, 21.73667], [102.81894, 21.83888], [102.85637, 21.84501], [102.86077, 21.71213], [102.97965, 21.74076], [102.98846, 21.58936], [102.86297, 21.4255], [102.94223, 21.46034], [102.88939, 21.3107], [102.80794, 21.25736], [102.89825, 21.24707], [102.97745, 21.05821], [103.03469, 21.05821], [103.12055, 20.89994], [103.21497, 20.89832], [103.38032, 20.79501], [103.45737, 20.82382], [103.68633, 20.66324], [103.73478, 20.6669], [103.82282, 20.8732], [103.98024, 20.91531], [104.11121, 20.96779], [104.27412, 20.91433], [104.63957, 20.6653], [104.38199, 20.47155], [104.40621, 20.3849], [104.47886, 20.37459], [104.66158, 20.47774], [104.72102, 20.40554], [104.62195, 20.36633], [104.61315, 20.24452], [104.86852, 20.14121], [104.91695, 20.15567], [104.9874, 20.09573], [104.8465, 19.91783], [104.8355, 19.80395], [104.68359, 19.72729], [104.64837, 19.62365], [104.53169, 19.61743], [104.41281, 19.70035], [104.23229, 19.70242], [104.06498, 19.66926], [104.05617, 19.61743], [104.10832, 19.51575], [104.06058, 19.43484], [103.87125, 19.31854], [104.5361, 18.97747], [104.64617, 18.85668], [105.12829, 18.70453], [105.19654, 18.64196], [105.1327, 18.58355], [105.10408, 18.43533], [105.15942, 18.38691], [105.38366, 18.15315], [105.46292, 18.22008], [105.64784, 17.96687], [105.60381, 17.89356], [105.76612, 17.67147], [105.85744, 17.63221], [106.09019, 17.36399], [106.18991, 17.28227], [106.24444, 17.24714], [106.29287, 17.3018], [106.31929, 17.20509], [106.43597, 17.01362], [106.50862, 16.9673], [106.55045, 17.0031], [106.54824, 16.92729], [106.51963, 16.92097], [106.52183, 16.87884], [106.55265, 16.86831], [106.55485, 16.68704], [106.59013, 16.62259], [106.58267, 16.6012], [106.61477, 16.60713], [106.66052, 16.56892], [106.65832, 16.47816], [106.74418, 16.41904], [106.84104, 16.55415], [106.88727, 16.52671], [106.88067, 16.43594], [106.96638, 16.34938], [106.97385, 16.30204], [107.02597, 16.31132], [107.09091, 16.3092], [107.15035, 16.26271], [107.14595, 16.17816], [107.25822, 16.13587], [107.33968, 16.05549], [107.44975, 16.08511], [107.46296, 16.01106], [107.39471, 15.88829], [107.34188, 15.89464], [107.21419, 15.83747], [107.21859, 15.74638], [107.27143, 15.71459], [107.27583, 15.62769], [107.34408, 15.62345], [107.3815, 15.49832], [107.50699, 15.48771], [107.53341, 15.40496], [107.62367, 15.42193], [107.60605, 15.37524], [107.62587, 15.2266], [107.58844, 15.20111], [107.61926, 15.13949], [107.61486, 15.0566], [107.46516, 15.00982], [107.48277, 14.93751], [107.59285, 14.87795], [107.51579, 14.79282], [107.54361, 14.69092], [107.55371, 14.628], [107.52102, 14.59034], [107.52569, 14.54665], [107.48521, 14.40346], [107.44941, 14.41552], [107.39493, 14.32655], [107.40427, 14.24509], [107.33577, 14.11832], [107.37158, 14.07906], [107.35757, 14.02319], [107.38247, 13.99147], [107.44318, 13.99751], [107.46498, 13.91593], [107.45252, 13.78897], [107.53503, 13.73908], [107.61909, 13.52577], [107.62843, 13.3668], [107.49144, 13.01215], [107.49611, 12.88926], [107.55993, 12.7982], [107.5755, 12.52177], [107.55059, 12.36824], [107.4463, 12.29373], [107.42917, 12.24657], [107.34511, 12.33327], [107.15831, 12.27547], [106.99953, 12.08983], [106.92325, 12.06548], [106.79405, 12.0807], [106.70687, 11.96956], [106.4111, 11.97413], [106.4687, 11.86751], [106.44068, 11.86294], [106.44535, 11.8279], [106.41577, 11.76999], [106.45158, 11.68616], [106.44691, 11.66787], [106.37219, 11.69836], [106.30525, 11.67549], [106.26478, 11.72122], [106.18539, 11.75171], [106.13158, 11.73283], [106.06708, 11.77761], [106.02038, 11.77457], [106.00792, 11.7197], [105.95188, 11.63738], [105.88962, 11.67854], [105.8507, 11.66635], [105.80867, 11.60536], [105.81645, 11.56876], [105.87328, 11.55953], [105.88962, 11.43605], [105.86782, 11.28343], [106.10444, 11.07879], [106.1527, 11.10476], [106.1757, 11.07301], [106.20095, 10.97795], [106.14301, 10.98176], [106.18539, 10.79451], [106.06708, 10.8098], [105.94535, 10.9168], [105.93403, 10.83853], [105.84603, 10.85873], [105.86376, 10.89839], [105.77751, 11.03671], [105.50045, 10.94586], [105.42884, 10.96878], [105.34011, 10.86179], [105.11449, 10.96332], [105.08326, 10.95656], [105.02722, 10.89236], [105.09571, 10.72722], [104.95094, 10.64003], [104.87933, 10.52833], [104.59018, 10.53073], [104.49869, 10.4057], [104.47963, 10.43046], [104.43778, 10.42386], [103.99198, 10.48391], [102.47649, 9.66162], [104.81582, 8.03101], [109.55486, 8.10026], [111.60491, 13.57105], [108.00365, 17.98159], [108.10003, 21.47338]]]] } },
+    { type: "Feature", properties: { iso1A2: "VU", iso1A3: "VUT", iso1N3: "548", wikidata: "Q686", nameEn: "Vanuatu", groups: ["054", "009", "UN"], callingCodes: ["678"] }, geometry: { type: "MultiPolygon", coordinates: [[[[156.73836, -14.50464], [174.245, -23.1974], [172.71443, -12.01327], [156.73836, -14.50464]]]] } },
+    { type: "Feature", properties: { iso1A2: "WF", iso1A3: "WLF", iso1N3: "876", wikidata: "Q35555", nameEn: "Wallis and Futuna", country: "FR", groups: ["EU", "Q1451600", "061", "009", "UN"], callingCodes: ["681"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-178.66551, -14.32452], [-176.76826, -14.95183], [-175.59809, -12.61507], [-178.66551, -14.32452]]]] } },
+    { type: "Feature", properties: { iso1A2: "WS", iso1A3: "WSM", iso1N3: "882", wikidata: "Q683", nameEn: "Samoa", groups: ["061", "009", "UN"], driveSide: "left", callingCodes: ["685"] }, geometry: { type: "MultiPolygon", coordinates: [[[[-173.74402, -14.26669], [-170.99605, -15.1275], [-171.39864, -10.21587], [-173.74402, -14.26669]]]] } },
+    { type: "Feature", properties: { iso1A2: "XK", iso1A3: "XKX", wikidata: "Q1246", nameEn: "Kosovo", aliases: ["KV"], groups: ["039", "150"], isoStatus: "usrAssn", callingCodes: ["383"] }, geometry: { type: "MultiPolygon", coordinates: [[[[21.39045, 42.74888], [21.44047, 42.87276], [21.36941, 42.87397], [21.32974, 42.90424], [21.2719, 42.8994], [21.23534, 42.95523], [21.23877, 43.00848], [21.2041, 43.02277], [21.16734, 42.99694], [21.14465, 43.11089], [21.08952, 43.13471], [21.05378, 43.10707], [21.00749, 43.13984], [20.96287, 43.12416], [20.83727, 43.17842], [20.88685, 43.21697], [20.82145, 43.26769], [20.73811, 43.25068], [20.68688, 43.21335], [20.59929, 43.20492], [20.69515, 43.09641], [20.64557, 43.00826], [20.59929, 43.01067], [20.48692, 42.93208], [20.53484, 42.8885], [20.43734, 42.83157], [20.40594, 42.84853], [20.35692, 42.8335], [20.27869, 42.81945], [20.2539, 42.76245], [20.04898, 42.77701], [20.02088, 42.74789], [20.02915, 42.71147], [20.0969, 42.65559], [20.07761, 42.55582], [20.17127, 42.50469], [20.21797, 42.41237], [20.24399, 42.32168], [20.34479, 42.32656], [20.3819, 42.3029], [20.48857, 42.25444], [20.56955, 42.12097], [20.55633, 42.08173], [20.59434, 42.03879], [20.63069, 41.94913], [20.57946, 41.91593], [20.59524, 41.8818], [20.68523, 41.85318], [20.76786, 41.91839], [20.75464, 42.05229], [21.11491, 42.20794], [21.16614, 42.19815], [21.22728, 42.08909], [21.31983, 42.10993], [21.29913, 42.13954], [21.30496, 42.1418], [21.38428, 42.24465], [21.43882, 42.23609], [21.43882, 42.2789], [21.50823, 42.27156], [21.52145, 42.24465], [21.58992, 42.25915], [21.56772, 42.30946], [21.5264, 42.33634], [21.53467, 42.36809], [21.57021, 42.3647], [21.59029, 42.38042], [21.62887, 42.37664], [21.64209, 42.41081], [21.62556, 42.45106], [21.7035, 42.51899], [21.70522, 42.54176], [21.7327, 42.55041], [21.75672, 42.62695], [21.79413, 42.65923], [21.75025, 42.70125], [21.6626, 42.67813], [21.58755, 42.70418], [21.59154, 42.72643], [21.47498, 42.74695], [21.39045, 42.74888]]]] } },
+    { type: "Feature", properties: { iso1A2: "YE", iso1A3: "YEM", iso1N3: "887", wikidata: "Q805", nameEn: "Yemen", groups: ["145", "142", "UN"], callingCodes: ["967"] }, geometry: { type: "MultiPolygon", coordinates: [[[[57.49095, 8.14549], [52.81185, 17.28568], [52.74267, 17.29519], [52.78009, 17.35124], [52.00311, 19.00083], [49.04884, 18.59899], [48.19996, 18.20584], [47.58351, 17.50366], [47.48245, 17.10808], [47.00571, 16.94765], [46.76494, 17.29151], [46.31018, 17.20464], [44.50126, 17.47475], [43.70631, 17.35762], [43.43005, 17.56148], [43.29185, 17.53224], [43.22533, 17.38343], [43.32653, 17.31179], [43.20156, 17.25901], [43.17787, 17.14717], [43.23967, 17.03428], [43.18233, 17.02673], [43.1813, 16.98438], [43.19328, 16.94703], [43.1398, 16.90696], [43.18338, 16.84852], [43.22012, 16.83932], [43.22956, 16.80613], [43.24801, 16.80613], [43.26303, 16.79479], [43.25857, 16.75304], [43.21325, 16.74416], [43.22066, 16.65179], [43.15274, 16.67248], [43.11601, 16.53166], [42.97215, 16.51093], [42.94351, 16.49467], [42.94625, 16.39721], [42.76801, 16.40371], [42.15205, 16.40211], [40.99158, 15.81743], [43.29075, 12.79154], [43.32909, 12.59711], [43.90659, 12.3823], [51.12877, 12.56479], [57.49095, 8.14549]]]] } },
+    { type: "Feature", properties: { iso1A2: "YT", iso1A3: "MYT", iso1N3: "175", wikidata: "Q17063", nameEn: "Mayotte", country: "FR", groups: ["Q3320166", "EU", "014", "202", "002", "UN"], callingCodes: ["262"] }, geometry: { type: "MultiPolygon", coordinates: [[[[43.28731, -13.97126], [45.54824, -13.22353], [45.4971, -11.75965], [43.28731, -13.97126]]]] } },
+    { type: "Feature", properties: { iso1A2: "ZA", iso1A3: "ZAF", iso1N3: "710", wikidata: "Q258", nameEn: "South Africa", groups: ["018", "202", "002", "UN"], driveSide: "left", callingCodes: ["27"] }, geometry: { type: "MultiPolygon", coordinates: [[[[31.30611, -22.422], [31.16344, -22.32599], [31.08932, -22.34884], [30.86696, -22.28907], [30.6294, -22.32599], [30.48686, -22.31368], [30.38614, -22.34533], [30.28351, -22.35587], [30.2265, -22.2961], [30.13147, -22.30841], [29.92242, -22.19408], [29.76848, -22.14128], [29.64609, -22.12917], [29.37703, -22.19581], [29.21955, -22.17771], [29.18974, -22.18599], [29.15268, -22.21399], [29.10881, -22.21202], [29.0151, -22.22907], [28.91889, -22.44299], [28.63287, -22.55887], [28.34874, -22.5694], [28.04562, -22.8394], [28.04752, -22.90243], [27.93729, -22.96194], [27.93539, -23.04941], [27.74154, -23.2137], [27.6066, -23.21894], [27.52393, -23.37952], [27.33768, -23.40917], [26.99749, -23.65486], [26.84165, -24.24885], [26.51667, -24.47219], [26.46346, -24.60358], [26.39409, -24.63468], [25.8515, -24.75727], [25.84295, -24.78661], [25.88571, -24.87802], [25.72702, -25.25503], [25.69661, -25.29284], [25.6643, -25.4491], [25.58543, -25.6343], [25.33076, -25.76616], [25.12266, -25.75931], [25.01718, -25.72507], [24.8946, -25.80723], [24.67319, -25.81749], [24.44703, -25.73021], [24.36531, -25.773], [24.18287, -25.62916], [23.9244, -25.64286], [23.47588, -25.29971], [23.03497, -25.29971], [22.86012, -25.50572], [22.70808, -25.99186], [22.56365, -26.19668], [22.41921, -26.23078], [22.21206, -26.3773], [22.06192, -26.61882], [21.90703, -26.66808], [21.83291, -26.65959], [21.77114, -26.69015], [21.7854, -26.79199], [21.69322, -26.86152], [21.37869, -26.82083], [21.13353, -26.86661], [20.87031, -26.80047], [20.68596, -26.9039], [20.63275, -26.78181], [20.61754, -26.4692], [20.86081, -26.14892], [20.64795, -25.47827], [20.29826, -24.94869], [20.03678, -24.81004], [20.02809, -24.78725], [19.99817, -24.76768], [19.99882, -28.42622], [18.99885, -28.89165], [17.4579, -28.68718], [17.15405, -28.08573], [16.90446, -28.057], [16.59922, -28.53246], [16.46592, -28.57126], [16.45332, -28.63117], [12.51595, -32.27486], [38.88176, -48.03306], [34.51034, -26.91792], [32.35222, -26.86027], [32.29584, -26.852], [32.22302, -26.84136], [32.19409, -26.84032], [32.13315, -26.84345], [32.09664, -26.80721], [32.00893, -26.8096], [31.97463, -27.11057], [31.97592, -27.31675], [31.49834, -27.31549], [31.15027, -27.20151], [30.96088, -27.0245], [30.97757, -26.92706], [30.88826, -26.79622], [30.81101, -26.84722], [30.78927, -26.48271], [30.95819, -26.26303], [31.13073, -25.91558], [31.31237, -25.7431], [31.4175, -25.71886], [31.86881, -25.99973], [31.974, -25.95387], [31.92649, -25.84216], [32.00631, -25.65044], [31.97875, -25.46356], [32.01676, -25.38117], [32.03196, -25.10785], [31.9835, -24.29983], [31.90368, -24.18892], [31.87707, -23.95293], [31.77445, -23.90082], [31.70223, -23.72695], [31.67942, -23.60858], [31.56539, -23.47268], [31.55779, -23.176], [31.30611, -22.422]], [[29.33204, -29.45598], [29.28545, -29.58456], [29.12553, -29.76266], [29.16548, -29.91706], [28.9338, -30.05072], [28.80222, -30.10579], [28.68627, -30.12885], [28.399, -30.1592], [28.2319, -30.28476], [28.12073, -30.68072], [27.74814, -30.60635], [27.69467, -30.55862], [27.67819, -30.53437], [27.6521, -30.51707], [27.62137, -30.50509], [27.56781, -30.44562], [27.56901, -30.42504], [27.45452, -30.32239], [27.38108, -30.33456], [27.36649, -30.27246], [27.37293, -30.19401], [27.40778, -30.14577], [27.32555, -30.14785], [27.29603, -30.05473], [27.22719, -30.00718], [27.09489, -29.72796], [27.01016, -29.65439], [27.33464, -29.48161], [27.4358, -29.33465], [27.47254, -29.31968], [27.45125, -29.29708], [27.48679, -29.29349], [27.54258, -29.25575], [27.5158, -29.2261], [27.55974, -29.18954], [27.75458, -28.89839], [27.8907, -28.91612], [27.88933, -28.88156], [27.9392, -28.84864], [27.98675, -28.8787], [28.02503, -28.85991], [28.1317, -28.7293], [28.2348, -28.69471], [28.30518, -28.69531], [28.40612, -28.6215], [28.65091, -28.57025], [28.68043, -28.58744], [29.40524, -29.21246], [29.44883, -29.3772], [29.33204, -29.45598]]]] } },
+    { type: "Feature", properties: { iso1A2: "ZM", iso1A3: "ZMB", iso1N3: "894", wikidata: "Q953", nameEn: "Zambia", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["260"] }, geometry: { type: "MultiPolygon", coordinates: [[[[32.95389, -9.40138], [32.76233, -9.31963], [32.75611, -9.28583], [32.53661, -9.24281], [32.49147, -9.14754], [32.43543, -9.11988], [32.25486, -9.13371], [32.16146, -9.05993], [32.08206, -9.04609], [31.98866, -9.07069], [31.94196, -9.02303], [31.94663, -8.93846], [31.81587, -8.88618], [31.71158, -8.91386], [31.57147, -8.81388], [31.57147, -8.70619], [31.37533, -8.60769], [31.00796, -8.58615], [30.79243, -8.27382], [28.88917, -8.4831], [28.9711, -8.66935], [28.38526, -9.23393], [28.36562, -9.30091], [28.52636, -9.35379], [28.51627, -9.44726], [28.56208, -9.49122], [28.68532, -9.78], [28.62795, -9.92942], [28.65032, -10.65133], [28.37241, -11.57848], [28.48357, -11.87532], [29.18592, -12.37921], [29.4992, -12.43843], [29.48404, -12.23604], [29.8139, -12.14898], [29.81551, -13.44683], [29.65078, -13.41844], [29.60531, -13.21685], [29.01918, -13.41353], [28.33199, -12.41375], [27.59932, -12.22123], [27.21025, -11.76157], [27.22541, -11.60323], [27.04351, -11.61312], [26.88687, -12.01868], [26.01777, -11.91488], [25.33058, -11.65767], [25.34069, -11.19707], [24.42612, -11.44975], [24.34528, -11.06816], [24.00027, -10.89356], [24.02603, -11.15368], [23.98804, -12.13149], [24.06672, -12.29058], [23.90937, -12.844], [24.03339, -12.99091], [21.97988, -13.00148], [22.00323, -16.18028], [22.17217, -16.50269], [23.20038, -17.47563], [23.47474, -17.62877], [24.23619, -17.47489], [24.32811, -17.49082], [24.38712, -17.46818], [24.5621, -17.52963], [24.70864, -17.49501], [25.00198, -17.58221], [25.26433, -17.79571], [25.51646, -17.86232], [25.6827, -17.81987], [25.85738, -17.91403], [25.85892, -17.97726], [26.08925, -17.98168], [26.0908, -17.93021], [26.21601, -17.88608], [26.55918, -17.99638], [26.68403, -18.07411], [26.74314, -18.0199], [26.89926, -17.98756], [27.14196, -17.81398], [27.30736, -17.60487], [27.61377, -17.34378], [27.62795, -17.24365], [27.83141, -16.96274], [28.73725, -16.5528], [28.76199, -16.51575], [28.81454, -16.48611], [28.8501, -16.04537], [28.9243, -15.93987], [29.01298, -15.93805], [29.21955, -15.76589], [29.4437, -15.68702], [29.8317, -15.6126], [30.35574, -15.6513], [30.41902, -15.62269], [30.22098, -14.99447], [33.24249, -14.00019], [33.16749, -13.93992], [33.07568, -13.98447], [33.02977, -14.05022], [32.99042, -13.95689], [32.88985, -13.82956], [32.79015, -13.80755], [32.76962, -13.77224], [32.84528, -13.71576], [32.7828, -13.64805], [32.68654, -13.64268], [32.66468, -13.60019], [32.68436, -13.55769], [32.73683, -13.57682], [32.84176, -13.52794], [32.86113, -13.47292], [33.0078, -13.19492], [32.98289, -13.12671], [33.02181, -12.88707], [32.96733, -12.88251], [32.94397, -12.76868], [33.05917, -12.59554], [33.18837, -12.61377], [33.28177, -12.54692], [33.37517, -12.54085], [33.54485, -12.35996], [33.47636, -12.32498], [33.3705, -12.34931], [33.25998, -12.14242], [33.33937, -11.91252], [33.32692, -11.59248], [33.24252, -11.59302], [33.23663, -11.40637], [33.29267, -11.43536], [33.29267, -11.3789], [33.39697, -11.15296], [33.25998, -10.88862], [33.28022, -10.84428], [33.47636, -10.78465], [33.70675, -10.56896], [33.54797, -10.36077], [33.53863, -10.20148], [33.31297, -10.05133], [33.37902, -9.9104], [33.36581, -9.81063], [33.31517, -9.82364], [33.2095, -9.61099], [33.12144, -9.58929], [33.10163, -9.66525], [33.05485, -9.61316], [33.00256, -9.63053], [33.00476, -9.5133], [32.95389, -9.40138]]]] } },
+    { type: "Feature", properties: { iso1A2: "ZW", iso1A3: "ZWE", iso1N3: "716", wikidata: "Q954", nameEn: "Zimbabwe", groups: ["014", "202", "002", "UN"], driveSide: "left", callingCodes: ["263"] }, geometry: { type: "MultiPolygon", coordinates: [[[[30.41902, -15.62269], [30.35574, -15.6513], [29.8317, -15.6126], [29.4437, -15.68702], [29.21955, -15.76589], [29.01298, -15.93805], [28.9243, -15.93987], [28.8501, -16.04537], [28.81454, -16.48611], [28.76199, -16.51575], [28.73725, -16.5528], [27.83141, -16.96274], [27.62795, -17.24365], [27.61377, -17.34378], [27.30736, -17.60487], [27.14196, -17.81398], [26.89926, -17.98756], [26.74314, -18.0199], [26.68403, -18.07411], [26.55918, -17.99638], [26.21601, -17.88608], [26.0908, -17.93021], [26.08925, -17.98168], [25.85892, -17.97726], [25.85738, -17.91403], [25.6827, -17.81987], [25.51646, -17.86232], [25.26433, -17.79571], [25.23909, -17.90832], [25.31799, -18.07091], [25.39972, -18.12691], [25.53465, -18.39041], [25.68859, -18.56165], [25.79217, -18.6355], [25.82353, -18.82808], [25.94326, -18.90362], [25.99837, -19.02943], [25.96226, -19.08152], [26.17227, -19.53709], [26.72246, -19.92707], [27.21278, -20.08244], [27.29831, -20.28935], [27.28865, -20.49873], [27.69361, -20.48531], [27.72972, -20.51735], [27.69171, -21.08409], [27.91407, -21.31621], [28.01669, -21.57624], [28.29416, -21.59037], [28.49942, -21.66634], [28.58114, -21.63455], [29.07763, -21.81877], [29.04023, -21.85864], [29.02191, -21.90647], [29.02191, -21.95665], [29.04108, -22.00563], [29.08495, -22.04867], [29.14501, -22.07275], [29.1974, -22.07472], [29.24648, -22.05967], [29.3533, -22.18363], [29.37703, -22.19581], [29.64609, -22.12917], [29.76848, -22.14128], [29.92242, -22.19408], [30.13147, -22.30841], [30.2265, -22.2961], [30.28351, -22.35587], [30.38614, -22.34533], [30.48686, -22.31368], [30.6294, -22.32599], [30.86696, -22.28907], [31.08932, -22.34884], [31.16344, -22.32599], [31.30611, -22.422], [31.38336, -22.36919], [32.41234, -21.31246], [32.48236, -21.32873], [32.37115, -21.133], [32.51644, -20.91929], [32.48122, -20.63319], [32.55167, -20.56312], [32.66174, -20.56106], [32.85987, -20.27841], [32.85987, -20.16686], [32.93032, -20.03868], [33.01178, -20.02007], [33.06461, -19.77787], [32.95013, -19.67219], [32.84666, -19.68462], [32.84446, -19.48343], [32.78282, -19.47513], [32.77966, -19.36098], [32.85107, -19.29238], [32.87088, -19.09279], [32.84006, -19.0262], [32.72118, -19.02204], [32.69917, -18.94293], [32.73439, -18.92628], [32.70137, -18.84712], [32.82465, -18.77419], [32.9017, -18.7992], [32.95013, -18.69079], [32.88629, -18.58023], [32.88629, -18.51344], [33.02278, -18.4696], [33.03159, -18.35054], [32.94133, -17.99705], [33.0492, -17.60298], [32.98536, -17.55891], [32.96554, -17.48964], [33.0426, -17.3468], [33.00517, -17.30477], [32.96554, -17.11971], [32.84113, -16.92259], [32.91051, -16.89446], [32.97655, -16.70689], [32.78943, -16.70267], [32.69917, -16.66893], [32.71017, -16.59932], [32.42838, -16.4727], [32.28529, -16.43892], [32.02772, -16.43892], [31.91324, -16.41569], [31.90223, -16.34388], [31.67988, -16.19595], [31.42451, -16.15154], [31.30563, -16.01193], [31.13171, -15.98019], [30.97761, -16.05848], [30.91597, -15.99924], [30.42568, -15.9962], [30.41902, -15.62269]]]] } }
+  ] };
+  var borders = borders_default;
+  var _whichPolygon = {};
+  var _featuresByCode = {};
+  var idFilterRegex = /(?=(?!^(and|the|of|el|la|de)$))(\b(and|the|of|el|la|de)\b)|[-_ .,'()&[\]/]/gi;
+  function canonicalID(id2) {
+    const s2 = id2 || "";
+    if (s2.charAt(0) === ".") {
+      return s2.toUpperCase();
+    } else {
+      return s2.replace(idFilterRegex, "").toUpperCase();
+    }
+  }
+  var levels = [
+    "subterritory",
+    "territory",
+    "subcountryGroup",
+    "country",
+    "sharedLandform",
+    "intermediateRegion",
+    "subregion",
+    "region",
+    "subunion",
+    "union",
+    "unitedNations",
+    "world"
+  ];
+  loadDerivedDataAndCaches(borders);
+  function loadDerivedDataAndCaches(borders2) {
+    const identifierProps = ["iso1A2", "iso1A3", "m49", "wikidata", "emojiFlag", "ccTLD", "nameEn"];
+    let geometryFeatures = [];
+    for (const feature22 of borders2.features) {
+      const props = feature22.properties;
+      props.id = props.iso1A2 || props.m49 || props.wikidata;
+      loadM49(feature22);
+      loadTLD(feature22);
+      loadIsoStatus(feature22);
+      loadLevel(feature22);
+      loadGroups(feature22);
+      loadFlag(feature22);
+      cacheFeatureByIDs(feature22);
+      if (feature22.geometry) {
+        geometryFeatures.push(feature22);
       }
-      nodes.splice(index, 0, id2);
-      nodes = nodes.filter(noRepeatNodes);
-      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
-        nodes.push(nodes[0]);
+    }
+    for (const feature22 of borders2.features) {
+      feature22.properties.groups = feature22.properties.groups.map((groupID) => {
+        return _featuresByCode[groupID].properties.id;
+      });
+      loadMembersForGroupsOf(feature22);
+    }
+    for (const feature22 of borders2.features) {
+      loadRoadSpeedUnit(feature22);
+      loadRoadHeightUnit(feature22);
+      loadDriveSide(feature22);
+      loadCallingCodes(feature22);
+      loadGroupGroups(feature22);
+    }
+    for (const feature22 of borders2.features) {
+      feature22.properties.groups.sort((groupID1, groupID2) => {
+        return levels.indexOf(_featuresByCode[groupID1].properties.level) - levels.indexOf(_featuresByCode[groupID2].properties.level);
+      });
+      if (feature22.properties.members) {
+        feature22.properties.members.sort((id1, id2) => {
+          const diff = levels.indexOf(_featuresByCode[id1].properties.level) - levels.indexOf(_featuresByCode[id2].properties.level);
+          if (diff === 0) {
+            return borders2.features.indexOf(_featuresByCode[id1]) - borders2.features.indexOf(_featuresByCode[id2]);
+          }
+          return diff;
+        });
       }
-      return this.update({ nodes });
-    },
-    // Replaces the node which is currently at position index with the given node (id).
-    // Consecutive duplicates are eliminated including existing ones.
-    // Circularity is preserved when updating a node.
-    updateNode: function(id2, index) {
-      var nodes = this.nodes.slice();
-      var isClosed = this.isClosed();
-      var max3 = nodes.length - 1;
-      if (index === void 0 || index < 0 || index > max3) {
-        throw new RangeError("index " + index + " out of range 0.." + max3);
+    }
+    const geometryOnlyCollection = {
+      type: "FeatureCollection",
+      features: geometryFeatures
+    };
+    _whichPolygon = (0, import_which_polygon.default)(geometryOnlyCollection);
+    function loadGroups(feature22) {
+      const props = feature22.properties;
+      if (!props.groups) {
+        props.groups = [];
       }
-      if (isClosed) {
-        var connector = this.first();
-        var i3 = 1;
-        while (i3 < nodes.length && nodes.length > 2 && nodes[i3] === connector) {
-          nodes.splice(i3, 1);
-          if (index > i3) index--;
-        }
-        i3 = nodes.length - 1;
-        while (i3 > 0 && nodes.length > 1 && nodes[i3] === connector) {
-          nodes.splice(i3, 1);
-          if (index === i3) index = 0;
-          i3 = nodes.length - 1;
-        }
+      if (feature22.geometry && props.country) {
+        props.groups.push(props.country);
       }
-      nodes.splice(index, 1, id2);
-      nodes = nodes.filter(noRepeatNodes);
-      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
-        nodes.push(nodes[0]);
+      if (props.m49 !== "001") {
+        props.groups.push("001");
       }
-      return this.update({ nodes });
-    },
-    // Replaces each occurrence of node id needle with replacement.
-    // Consecutive duplicates are eliminated including existing ones.
-    // Circularity is preserved.
-    replaceNode: function(needleID, replacementID) {
-      var nodes = this.nodes.slice();
-      var isClosed = this.isClosed();
-      for (var i3 = 0; i3 < nodes.length; i3++) {
-        if (nodes[i3] === needleID) {
-          nodes[i3] = replacementID;
-        }
+    }
+    function loadM49(feature22) {
+      const props = feature22.properties;
+      if (!props.m49 && props.iso1N3) {
+        props.m49 = props.iso1N3;
       }
-      nodes = nodes.filter(noRepeatNodes);
-      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
-        nodes.push(nodes[0]);
+    }
+    function loadTLD(feature22) {
+      const props = feature22.properties;
+      if (props.level === "unitedNations") return;
+      if (props.ccTLD === null) return;
+      if (!props.ccTLD && props.iso1A2) {
+        props.ccTLD = "." + props.iso1A2.toLowerCase();
       }
-      return this.update({ nodes });
-    },
-    // Removes each occurrence of node id.
-    // Consecutive duplicates are eliminated including existing ones.
-    // Circularity is preserved.
-    removeNode: function(id2) {
-      var nodes = this.nodes.slice();
-      var isClosed = this.isClosed();
-      nodes = nodes.filter(function(node) {
-        return node !== id2;
-      }).filter(noRepeatNodes);
-      if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
-        nodes.push(nodes[0]);
+    }
+    function loadIsoStatus(feature22) {
+      const props = feature22.properties;
+      if (!props.isoStatus && props.iso1A2) {
+        props.isoStatus = "official";
       }
-      return this.update({ nodes });
-    },
-    asJXON: function(changeset_id) {
-      var r2 = {
-        way: {
-          "@id": this.osmId(),
-          "@version": this.version || 0,
-          nd: this.nodes.map(function(id2) {
-            return { keyAttributes: { ref: osmEntity.id.toOSM(id2) } };
-          }, this),
-          tag: Object.keys(this.tags).map(function(k2) {
-            return { keyAttributes: { k: k2, v: this.tags[k2] } };
-          }, this)
-        }
-      };
-      if (changeset_id) {
-        r2.way["@changeset"] = changeset_id;
+    }
+    function loadLevel(feature22) {
+      const props = feature22.properties;
+      if (props.level) return;
+      if (!props.country) {
+        props.level = "country";
+      } else if (!props.iso1A2 || props.isoStatus === "official") {
+        props.level = "territory";
+      } else {
+        props.level = "subterritory";
       }
-      return r2;
-    },
-    asGeoJSON: function(resolver) {
-      return resolver.transient(this, "GeoJSON", function() {
-        var coordinates = resolver.childNodes(this).map(function(n3) {
-          return n3.loc;
+    }
+    function loadGroupGroups(feature22) {
+      const props = feature22.properties;
+      if (feature22.geometry || !props.members) return;
+      const featureLevelIndex = levels.indexOf(props.level);
+      let sharedGroups = [];
+      props.members.forEach((memberID, index) => {
+        const member = _featuresByCode[memberID];
+        const memberGroups = member.properties.groups.filter((groupID) => {
+          return groupID !== feature22.properties.id && featureLevelIndex < levels.indexOf(_featuresByCode[groupID].properties.level);
         });
-        if (this.isArea() && this.isClosed()) {
-          return {
-            type: "Polygon",
-            coordinates: [coordinates]
-          };
+        if (index === 0) {
+          sharedGroups = memberGroups;
         } else {
-          return {
-            type: "LineString",
-            coordinates
-          };
+          sharedGroups = sharedGroups.filter((groupID) => memberGroups.indexOf(groupID) !== -1);
         }
       });
-    },
-    area: function(resolver) {
-      return resolver.transient(this, "area", function() {
-        var nodes = resolver.childNodes(this);
-        var json = {
-          type: "Polygon",
-          coordinates: [nodes.map(function(n3) {
-            return n3.loc;
-          })]
-        };
-        if (!this.isClosed() && nodes.length) {
-          json.coordinates[0].push(nodes[0].loc);
-        }
-        var area = area_default(json);
-        if (area > 2 * Math.PI) {
-          json.coordinates[0] = json.coordinates[0].reverse();
-          area = area_default(json);
+      props.groups = props.groups.concat(
+        sharedGroups.filter((groupID) => props.groups.indexOf(groupID) === -1)
+      );
+      for (const groupID of sharedGroups) {
+        const groupFeature = _featuresByCode[groupID];
+        if (groupFeature.properties.members.indexOf(props.id) === -1) {
+          groupFeature.properties.members.push(props.id);
         }
-        return isNaN(area) ? 0 : area;
-      });
+      }
     }
-  });
-  function noRepeatNodes(node, i3, arr) {
-    return i3 === 0 || node !== arr[i3 - 1];
-  }
-
-  // modules/osm/multipolygon.js
-  function osmJoinWays(toJoin, graph) {
-    function resolve(member) {
-      return graph.childNodes(graph.entity(member.id));
+    function loadRoadSpeedUnit(feature22) {
+      const props = feature22.properties;
+      if (feature22.geometry) {
+        if (!props.roadSpeedUnit) props.roadSpeedUnit = "km/h";
+      } else if (props.members) {
+        const vals = Array.from(
+          new Set(
+            props.members.map((id2) => {
+              const member = _featuresByCode[id2];
+              if (member.geometry) return member.properties.roadSpeedUnit || "km/h";
+            }).filter(Boolean)
+          )
+        );
+        if (vals.length === 1) props.roadSpeedUnit = vals[0];
+      }
     }
-    function reverse(item2) {
-      var action = actionReverse(item2.id, { reverseOneway: true });
-      sequences.actions.push(action);
-      return item2 instanceof osmWay ? action(graph).entity(item2.id) : item2;
+    function loadRoadHeightUnit(feature22) {
+      const props = feature22.properties;
+      if (feature22.geometry) {
+        if (!props.roadHeightUnit) props.roadHeightUnit = "m";
+      } else if (props.members) {
+        const vals = Array.from(
+          new Set(
+            props.members.map((id2) => {
+              const member = _featuresByCode[id2];
+              if (member.geometry) return member.properties.roadHeightUnit || "m";
+            }).filter(Boolean)
+          )
+        );
+        if (vals.length === 1) props.roadHeightUnit = vals[0];
+      }
     }
-    toJoin = toJoin.filter(function(member) {
-      return member.type === "way" && graph.hasEntity(member.id);
-    });
-    var i3;
-    var joinAsMembers = true;
-    for (i3 = 0; i3 < toJoin.length; i3++) {
-      if (toJoin[i3] instanceof osmWay) {
-        joinAsMembers = false;
-        break;
+    function loadDriveSide(feature22) {
+      const props = feature22.properties;
+      if (feature22.geometry) {
+        if (!props.driveSide) props.driveSide = "right";
+      } else if (props.members) {
+        const vals = Array.from(
+          new Set(
+            props.members.map((id2) => {
+              const member = _featuresByCode[id2];
+              if (member.geometry) return member.properties.driveSide || "right";
+            }).filter(Boolean)
+          )
+        );
+        if (vals.length === 1) props.driveSide = vals[0];
       }
     }
-    var sequences = [];
-    sequences.actions = [];
-    while (toJoin.length) {
-      var item = toJoin.shift();
-      var currWays = [item];
-      var currNodes = resolve(item).slice();
-      while (toJoin.length) {
-        var start2 = currNodes[0];
-        var end = currNodes[currNodes.length - 1];
-        var fn = null;
-        var nodes = null;
-        for (i3 = 0; i3 < toJoin.length; i3++) {
-          item = toJoin[i3];
-          nodes = resolve(item);
-          if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end && (nodes[nodes.length - 1] === start2 || nodes[0] === start2)) {
-            currWays[0] = reverse(currWays[0]);
-            currNodes.reverse();
-            start2 = currNodes[0];
-            end = currNodes[currNodes.length - 1];
-          }
-          if (nodes[0] === end) {
-            fn = currNodes.push;
-            nodes = nodes.slice(1);
-            break;
-          } else if (nodes[nodes.length - 1] === end) {
-            fn = currNodes.push;
-            nodes = nodes.slice(0, -1).reverse();
-            item = reverse(item);
-            break;
-          } else if (nodes[nodes.length - 1] === start2) {
-            fn = currNodes.unshift;
-            nodes = nodes.slice(0, -1);
-            break;
-          } else if (nodes[0] === start2) {
-            fn = currNodes.unshift;
-            nodes = nodes.slice(1).reverse();
-            item = reverse(item);
-            break;
-          } else {
-            fn = nodes = null;
-          }
-        }
-        if (!nodes) {
-          break;
-        }
-        fn.apply(currWays, [item]);
-        fn.apply(currNodes, nodes);
-        toJoin.splice(i3, 1);
+    function loadCallingCodes(feature22) {
+      const props = feature22.properties;
+      if (!feature22.geometry && props.members) {
+        props.callingCodes = Array.from(
+          new Set(
+            props.members.reduce((array2, id2) => {
+              const member = _featuresByCode[id2];
+              if (member.geometry && member.properties.callingCodes) {
+                return array2.concat(member.properties.callingCodes);
+              }
+              return array2;
+            }, [])
+          )
+        );
       }
-      currWays.nodes = currNodes;
-      sequences.push(currWays);
     }
-    return sequences;
-  }
-
-  // modules/actions/add_member.js
-  function actionAddMember(relationId, member, memberIndex) {
-    return function action(graph) {
-      var relation = graph.entity(relationId);
-      var isPTv2 = /stop|platform/.test(member.role);
-      if (member.type === "way" && !isPTv2) {
-        graph = addWayMember(relation, graph);
-      } else {
-        if (isPTv2 && isNaN(memberIndex)) {
-          memberIndex = 0;
+    function loadFlag(feature22) {
+      if (!feature22.properties.iso1A2) return;
+      const flag = feature22.properties.iso1A2.replace(/./g, function(char) {
+        return String.fromCodePoint(char.charCodeAt(0) + 127397);
+      });
+      feature22.properties.emojiFlag = flag;
+    }
+    function loadMembersForGroupsOf(feature22) {
+      for (const groupID of feature22.properties.groups) {
+        const groupFeature = _featuresByCode[groupID];
+        if (!groupFeature.properties.members) {
+          groupFeature.properties.members = [];
         }
-        graph = graph.replace(relation.addMember(member, memberIndex));
+        groupFeature.properties.members.push(feature22.properties.id);
       }
-      return graph;
-    };
-    function addWayMember(relation, graph) {
-      var groups, item, i3, j2, k2;
-      var PTv2members = [];
-      var members = [];
-      for (i3 = 0; i3 < relation.members.length; i3++) {
-        var m2 = relation.members[i3];
-        if (/stop|platform/.test(m2.role)) {
-          PTv2members.push(m2);
-        } else {
-          members.push(m2);
+    }
+    function cacheFeatureByIDs(feature22) {
+      let ids = [];
+      for (const prop of identifierProps) {
+        const id2 = feature22.properties[prop];
+        if (id2) {
+          ids.push(id2);
         }
       }
-      relation = relation.update({ members });
-      groups = utilArrayGroupBy(relation.members, "type");
-      groups.way = groups.way || [];
-      groups.way.push(member);
-      members = withIndex(groups.way);
-      var joined = osmJoinWays(members, graph);
-      for (i3 = 0; i3 < joined.length; i3++) {
-        var segment = joined[i3];
-        var nodes = segment.nodes.slice();
-        var startIndex = segment[0].index;
-        for (j2 = 0; j2 < members.length; j2++) {
-          if (members[j2].index === startIndex) {
-            break;
-          }
-        }
-        for (k2 = 0; k2 < segment.length; k2++) {
-          item = segment[k2];
-          var way = graph.entity(item.id);
-          if (k2 > 0) {
-            if (j2 + k2 >= members.length || item.index !== members[j2 + k2].index) {
-              moveMember(members, item.index, j2 + k2);
-            }
-          }
-          nodes.splice(0, way.nodes.length - 1);
-        }
+      for (const alias of feature22.properties.aliases || []) {
+        ids.push(alias);
       }
-      var wayMembers = [];
-      for (i3 = 0; i3 < members.length; i3++) {
-        item = members[i3];
-        if (item.index === -1) continue;
-        wayMembers.push(utilObjectOmit(item, ["index"]));
+      for (const id2 of ids) {
+        const cid = canonicalID(id2);
+        _featuresByCode[cid] = feature22;
       }
-      var newMembers = PTv2members.concat(groups.node || [], wayMembers, groups.relation || []);
-      return graph.replace(relation.update({ members: newMembers }));
-      function moveMember(arr, findIndex, toIndex) {
-        var i4;
-        for (i4 = 0; i4 < arr.length; i4++) {
-          if (arr[i4].index === findIndex) {
-            break;
-          }
+    }
+  }
+  function locArray(loc) {
+    if (Array.isArray(loc)) {
+      return loc;
+    } else if (loc.coordinates) {
+      return loc.coordinates;
+    }
+    return loc.geometry.coordinates;
+  }
+  function smallestFeature(loc) {
+    const query = locArray(loc);
+    const featureProperties = _whichPolygon(query);
+    if (!featureProperties) return null;
+    return _featuresByCode[featureProperties.id];
+  }
+  function countryFeature(loc) {
+    const feature22 = smallestFeature(loc);
+    if (!feature22) return null;
+    const countryCode = feature22.properties.country || feature22.properties.iso1A2;
+    return _featuresByCode[countryCode] || null;
+  }
+  var defaultOpts = {
+    level: void 0,
+    maxLevel: void 0,
+    withProp: void 0
+  };
+  function featureForLoc(loc, opts) {
+    const targetLevel = opts.level || "country";
+    const maxLevel = opts.maxLevel || "world";
+    const withProp = opts.withProp;
+    const targetLevelIndex = levels.indexOf(targetLevel);
+    if (targetLevelIndex === -1) return null;
+    const maxLevelIndex = levels.indexOf(maxLevel);
+    if (maxLevelIndex === -1) return null;
+    if (maxLevelIndex < targetLevelIndex) return null;
+    if (targetLevel === "country") {
+      const fastFeature = countryFeature(loc);
+      if (fastFeature) {
+        if (!withProp || fastFeature.properties[withProp]) {
+          return fastFeature;
         }
-        var item2 = Object.assign({}, arr[i4]);
-        arr[i4].index = -1;
-        delete item2.index;
-        arr.splice(toIndex, 0, item2);
       }
-      function withIndex(arr) {
-        var result = new Array(arr.length);
-        for (var i4 = 0; i4 < arr.length; i4++) {
-          result[i4] = Object.assign({}, arr[i4]);
-          result[i4].index = i4;
+    }
+    const features = featuresContaining(loc);
+    const match = features.find((feature22) => {
+      let levelIndex = levels.indexOf(feature22.properties.level);
+      if (feature22.properties.level === targetLevel || // if no feature exists at the target level, return the first feature at the next level up
+      levelIndex > targetLevelIndex && levelIndex <= maxLevelIndex) {
+        if (!withProp || feature22.properties[withProp]) {
+          return feature22;
         }
-        return result;
       }
+      return false;
+    });
+    return match || null;
+  }
+  function featureForID(id2) {
+    let stringID;
+    if (typeof id2 === "number") {
+      stringID = id2.toString();
+      if (stringID.length === 1) {
+        stringID = "00" + stringID;
+      } else if (stringID.length === 2) {
+        stringID = "0" + stringID;
+      }
+    } else {
+      stringID = canonicalID(id2);
+    }
+    return _featuresByCode[stringID] || null;
+  }
+  function smallestFeaturesForBbox(bbox2) {
+    return _whichPolygon.bbox(bbox2).map((props) => _featuresByCode[props.id]);
+  }
+  function smallestOrMatchingFeature(query) {
+    if (typeof query === "object") {
+      return smallestFeature(query);
+    }
+    return featureForID(query);
+  }
+  function feature(query, opts = defaultOpts) {
+    if (typeof query === "object") {
+      return featureForLoc(query, opts);
     }
+    return featureForID(query);
   }
-
-  // modules/actions/add_midpoint.js
-  function actionAddMidpoint(midpoint, node) {
-    return function(graph) {
-      graph = graph.replace(node.move(midpoint.loc));
-      var parents = utilArrayIntersection(
-        graph.parentWays(graph.entity(midpoint.edge[0])),
-        graph.parentWays(graph.entity(midpoint.edge[1]))
-      );
-      parents.forEach(function(way) {
-        for (var i3 = 0; i3 < way.nodes.length - 1; i3++) {
-          if (geoEdgeEqual([way.nodes[i3], way.nodes[i3 + 1]], midpoint.edge)) {
-            graph = graph.replace(graph.entity(way.id).addNode(node.id, i3 + 1));
-            return;
-          }
-        }
-      });
-      return graph;
-    };
+  function iso1A2Code(query, opts = defaultOpts) {
+    opts.withProp = "iso1A2";
+    const match = feature(query, opts);
+    if (!match) return null;
+    return match.properties.iso1A2 || null;
   }
-
-  // modules/actions/add_vertex.js
-  function actionAddVertex(wayId, nodeId, index) {
-    return function(graph) {
-      return graph.replace(graph.entity(wayId).addNode(nodeId, index));
-    };
+  function propertiesForQuery(query, property) {
+    const features = featuresContaining(query, false);
+    return features.map((feature22) => feature22.properties[property]).filter(Boolean);
   }
-
-  // modules/actions/change_member.js
-  function actionChangeMember(relationId, member, memberIndex) {
-    return function(graph) {
-      return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
-    };
+  function iso1A2Codes(query) {
+    return propertiesForQuery(query, "iso1A2");
   }
-
-  // modules/actions/change_preset.js
-  function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
-    return function action(graph) {
-      var entity = graph.entity(entityID);
-      var geometry = entity.geometry(graph);
-      var tags = entity.tags;
-      const loc = entity.extent(graph).center();
-      var preserveKeys;
-      if (newPreset) {
-        preserveKeys = [];
-        if (newPreset.addTags) {
-          preserveKeys = preserveKeys.concat(Object.keys(newPreset.addTags));
-        }
-        if (oldPreset && !oldPreset.id.startsWith(newPreset.id)) {
-          newPreset.fields(loc).concat(newPreset.moreFields(loc)).filter((f2) => f2.matchGeometry(geometry)).map((f2) => f2.key).filter(Boolean).forEach((key) => preserveKeys.push(key));
+  function featuresContaining(query, strict) {
+    let matchingFeatures;
+    if (Array.isArray(query) && query.length === 4) {
+      matchingFeatures = smallestFeaturesForBbox(query);
+    } else {
+      const smallestOrMatching = smallestOrMatchingFeature(query);
+      matchingFeatures = smallestOrMatching ? [smallestOrMatching] : [];
+    }
+    if (!matchingFeatures.length) return [];
+    let returnFeatures;
+    if (!strict || typeof query === "object") {
+      returnFeatures = matchingFeatures.slice();
+    } else {
+      returnFeatures = [];
+    }
+    for (const feature22 of matchingFeatures) {
+      const properties = feature22.properties;
+      for (const groupID of properties.groups) {
+        const groupFeature = _featuresByCode[groupID];
+        if (returnFeatures.indexOf(groupFeature) === -1) {
+          returnFeatures.push(groupFeature);
         }
       }
-      if (oldPreset) tags = oldPreset.unsetTags(tags, geometry, preserveKeys, false, loc);
-      if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults, loc);
-      return graph.replace(entity.update({ tags }));
-    };
+    }
+    return returnFeatures;
   }
-
-  // modules/actions/change_tags.js
-  function actionChangeTags(entityId, tags) {
-    return function(graph) {
-      var entity = graph.entity(entityId);
-      return graph.replace(entity.update({ tags }));
-    };
+  function featuresIn(id2, strict) {
+    const feature22 = featureForID(id2);
+    if (!feature22) return [];
+    let features = [];
+    if (!strict) {
+      features.push(feature22);
+    }
+    const properties = feature22.properties;
+    for (const memberID of properties.members || []) {
+      features.push(_featuresByCode[memberID]);
+    }
+    return features;
   }
-
-  // modules/osm/node.js
-  var cardinal = {
-    north: 0,
-    n: 0,
-    northnortheast: 22,
-    nne: 22,
-    northeast: 45,
-    ne: 45,
-    eastnortheast: 67,
-    ene: 67,
-    east: 90,
-    e: 90,
-    eastsoutheast: 112,
-    ese: 112,
-    southeast: 135,
-    se: 135,
-    southsoutheast: 157,
-    sse: 157,
-    south: 180,
-    s: 180,
-    southsouthwest: 202,
-    ssw: 202,
-    southwest: 225,
-    sw: 225,
-    westsouthwest: 247,
-    wsw: 247,
-    west: 270,
-    w: 270,
-    westnorthwest: 292,
-    wnw: 292,
-    northwest: 315,
-    nw: 315,
-    northnorthwest: 337,
-    nnw: 337
-  };
-  function osmNode() {
-    if (!(this instanceof osmNode)) {
-      return new osmNode().initialize(arguments);
-    } else if (arguments.length) {
-      this.initialize(arguments);
+  function aggregateFeature(id2) {
+    var _a4;
+    const features = featuresIn(id2, false);
+    if (features.length === 0) return null;
+    let aggregateCoordinates = [];
+    for (const feature22 of features) {
+      if (((_a4 = feature22.geometry) == null ? void 0 : _a4.type) === "MultiPolygon" && feature22.geometry.coordinates) {
+        aggregateCoordinates = aggregateCoordinates.concat(feature22.geometry.coordinates);
+      }
     }
+    return {
+      type: "Feature",
+      properties: features[0].properties,
+      geometry: {
+        type: "MultiPolygon",
+        coordinates: aggregateCoordinates
+      }
+    };
   }
-  osmEntity.node = osmNode;
-  osmNode.prototype = Object.create(osmEntity.prototype);
-  Object.assign(osmNode.prototype, {
-    type: "node",
-    loc: [9999, 9999],
-    extent: function() {
-      return new geoExtent(this.loc);
-    },
-    geometry: function(graph) {
-      return graph.transient(this, "geometry", function() {
-        return graph.isPoi(this) ? "point" : "vertex";
-      });
-    },
-    move: function(loc) {
-      return this.update({ loc });
-    },
-    isDegenerate: function() {
-      return !(Array.isArray(this.loc) && this.loc.length === 2 && this.loc[0] >= -180 && this.loc[0] <= 180 && this.loc[1] >= -90 && this.loc[1] <= 90);
-    },
-    // Inspect tags and geometry to determine which direction(s) this node/vertex points
-    directions: function(resolver, projection2) {
-      var val;
-      var i3;
-      if (this.isHighwayIntersection(resolver) && (this.tags.stop || "").toLowerCase() === "all") {
-        val = "all";
-      } else {
-        val = (this.tags.direction || "").toLowerCase();
-        var re3 = /:direction$/i;
-        var keys2 = Object.keys(this.tags);
-        for (i3 = 0; i3 < keys2.length; i3++) {
-          if (re3.test(keys2[i3])) {
-            val = this.tags[keys2[i3]].toLowerCase();
-            break;
+  function roadSpeedUnit(query) {
+    const feature22 = smallestOrMatchingFeature(query);
+    return feature22 && feature22.properties.roadSpeedUnit || null;
+  }
+  function roadHeightUnit(query) {
+    const feature22 = smallestOrMatchingFeature(query);
+    return feature22 && feature22.properties.roadHeightUnit || null;
+  }
+
+  // node_modules/bignumber.js/bignumber.mjs
+  var isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
+  var mathceil = Math.ceil;
+  var mathfloor = Math.floor;
+  var bignumberError = "[BigNumber Error] ";
+  var tooManyDigits = bignumberError + "Number primitive has more than 15 significant digits: ";
+  var BASE = 1e14;
+  var LOG_BASE = 14;
+  var MAX_SAFE_INTEGER3 = 9007199254740991;
+  var POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13];
+  var SQRT_BASE = 1e7;
+  var MAX = 1e9;
+  function clone(configObject) {
+    var div, convertBase, parseNumeric2, P2 = BigNumber2.prototype = { constructor: BigNumber2, toString: null, valueOf: null }, ONE = new BigNumber2(1), DECIMAL_PLACES = 20, ROUNDING_MODE = 4, TO_EXP_NEG = -7, TO_EXP_POS = 21, MIN_EXP = -1e7, MAX_EXP = 1e7, CRYPTO = false, MODULO_MODE = 1, POW_PRECISION = 0, FORMAT = {
+      prefix: "",
+      groupSize: 3,
+      secondaryGroupSize: 0,
+      groupSeparator: ",",
+      decimalSeparator: ".",
+      fractionGroupSize: 0,
+      fractionGroupSeparator: "\xA0",
+      // non-breaking space
+      suffix: ""
+    }, ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz", alphabetHasNormalDecimalDigits = true;
+    function BigNumber2(v2, b2) {
+      var alphabet, c2, caseChanged, e3, i3, isNum, len, str, x2 = this;
+      if (!(x2 instanceof BigNumber2)) return new BigNumber2(v2, b2);
+      if (b2 == null) {
+        if (v2 && v2._isBigNumber === true) {
+          x2.s = v2.s;
+          if (!v2.c || v2.e > MAX_EXP) {
+            x2.c = x2.e = null;
+          } else if (v2.e < MIN_EXP) {
+            x2.c = [x2.e = 0];
+          } else {
+            x2.e = v2.e;
+            x2.c = v2.c.slice();
           }
-        }
-      }
-      if (val === "") return [];
-      var values = val.split(";");
-      var results = [];
-      values.forEach(function(v2) {
-        if (cardinal[v2] !== void 0) {
-          v2 = cardinal[v2];
-        }
-        if (v2 !== "" && !isNaN(+v2)) {
-          results.push(+v2);
           return;
         }
-        var lookBackward = this.tags["traffic_sign:backward"] || v2 === "backward" || v2 === "both" || v2 === "all";
-        var lookForward = this.tags["traffic_sign:forward"] || v2 === "forward" || v2 === "both" || v2 === "all";
-        if (!lookForward && !lookBackward) return;
-        var nodeIds = {};
-        resolver.parentWays(this).forEach(function(parent) {
-          var nodes = parent.nodes;
-          for (i3 = 0; i3 < nodes.length; i3++) {
-            if (nodes[i3] === this.id) {
-              if (lookForward && i3 > 0) {
-                nodeIds[nodes[i3 - 1]] = true;
-              }
-              if (lookBackward && i3 < nodes.length - 1) {
-                nodeIds[nodes[i3 + 1]] = true;
-              }
+        if ((isNum = typeof v2 == "number") && v2 * 0 == 0) {
+          x2.s = 1 / v2 < 0 ? (v2 = -v2, -1) : 1;
+          if (v2 === ~~v2) {
+            for (e3 = 0, i3 = v2; i3 >= 10; i3 /= 10, e3++) ;
+            if (e3 > MAX_EXP) {
+              x2.c = x2.e = null;
+            } else {
+              x2.e = e3;
+              x2.c = [v2];
             }
+            return;
           }
-        }, this);
-        Object.keys(nodeIds).forEach(function(nodeId) {
-          results.push(
-            geoAngle(this, resolver.entity(nodeId), projection2) * (180 / Math.PI) + 90
-          );
-        }, this);
-      }, this);
-      return utilArrayUniq(results);
-    },
-    isCrossing: function() {
-      return this.tags.highway === "crossing" || this.tags.railway && this.tags.railway.indexOf("crossing") !== -1;
-    },
-    isEndpoint: function(resolver) {
-      return resolver.transient(this, "isEndpoint", function() {
-        var id2 = this.id;
-        return resolver.parentWays(this).filter(function(parent) {
-          return !parent.isClosed() && !!parent.affix(id2);
-        }).length > 0;
-      });
-    },
-    isConnected: function(resolver) {
-      return resolver.transient(this, "isConnected", function() {
-        var parents = resolver.parentWays(this);
-        if (parents.length > 1) {
-          for (var i3 in parents) {
-            if (parents[i3].geometry(resolver) === "line" && parents[i3].hasInterestingTags()) return true;
-          }
-        } else if (parents.length === 1) {
-          var way = parents[0];
-          var nodes = way.nodes.slice();
-          if (way.isClosed()) {
-            nodes.pop();
-          }
-          return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
-        }
-        return false;
-      });
-    },
-    parentIntersectionWays: function(resolver) {
-      return resolver.transient(this, "parentIntersectionWays", function() {
-        return resolver.parentWays(this).filter(function(parent) {
-          return (parent.tags.highway || parent.tags.waterway || parent.tags.railway || parent.tags.aeroway) && parent.geometry(resolver) === "line";
-        });
-      });
-    },
-    isIntersection: function(resolver) {
-      return this.parentIntersectionWays(resolver).length > 1;
-    },
-    isHighwayIntersection: function(resolver) {
-      return resolver.transient(this, "isHighwayIntersection", function() {
-        return resolver.parentWays(this).filter(function(parent) {
-          return parent.tags.highway && parent.geometry(resolver) === "line";
-        }).length > 1;
-      });
-    },
-    isOnAddressLine: function(resolver) {
-      return resolver.transient(this, "isOnAddressLine", function() {
-        return resolver.parentWays(this).filter(function(parent) {
-          return parent.tags.hasOwnProperty("addr:interpolation") && parent.geometry(resolver) === "line";
-        }).length > 0;
-      });
-    },
-    asJXON: function(changeset_id) {
-      var r2 = {
-        node: {
-          "@id": this.osmId(),
-          "@lon": this.loc[0],
-          "@lat": this.loc[1],
-          "@version": this.version || 0,
-          tag: Object.keys(this.tags).map(function(k2) {
-            return { keyAttributes: { k: k2, v: this.tags[k2] } };
-          }, this)
-        }
-      };
-      if (changeset_id) r2.node["@changeset"] = changeset_id;
-      return r2;
-    },
-    asGeoJSON: function() {
-      return {
-        type: "Point",
-        coordinates: this.loc
-      };
-    }
-  });
-
-  // modules/actions/circularize.js
-  function actionCircularize(wayId, projection2, maxAngle) {
-    maxAngle = (maxAngle || 20) * Math.PI / 180;
-    var action = function(graph, t2) {
-      if (t2 === null || !isFinite(t2)) t2 = 1;
-      t2 = Math.min(Math.max(+t2, 0), 1);
-      var way = graph.entity(wayId);
-      var origNodes = {};
-      graph.childNodes(way).forEach(function(node2) {
-        if (!origNodes[node2.id]) origNodes[node2.id] = node2;
-      });
-      if (!way.isConvex(graph)) {
-        graph = action.makeConvex(graph);
-      }
-      var nodes = utilArrayUniq(graph.childNodes(way));
-      var keyNodes = nodes.filter(function(n3) {
-        return graph.parentWays(n3).length !== 1;
-      });
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var keyPoints = keyNodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var centroid = points.length === 2 ? geoVecInterp(points[0], points[1], 0.5) : centroid_default2(points);
-      var radius = median(points, function(p2) {
-        return geoVecLength(centroid, p2);
-      });
-      var sign2 = area_default3(points) > 0 ? 1 : -1;
-      var ids, i3, j2, k2;
-      if (!keyNodes.length) {
-        keyNodes = [nodes[0]];
-        keyPoints = [points[0]];
-      }
-      if (keyNodes.length === 1) {
-        var index = nodes.indexOf(keyNodes[0]);
-        var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
-        keyNodes.push(nodes[oppositeIndex]);
-        keyPoints.push(points[oppositeIndex]);
-      }
-      for (i3 = 0; i3 < keyPoints.length; i3++) {
-        var nextKeyNodeIndex = (i3 + 1) % keyNodes.length;
-        var startNode = keyNodes[i3];
-        var endNode = keyNodes[nextKeyNodeIndex];
-        var startNodeIndex = nodes.indexOf(startNode);
-        var endNodeIndex = nodes.indexOf(endNode);
-        var numberNewPoints = -1;
-        var indexRange = endNodeIndex - startNodeIndex;
-        var nearNodes = {};
-        var inBetweenNodes = [];
-        var startAngle, endAngle, totalAngle, eachAngle;
-        var angle2, loc, node, origNode;
-        if (indexRange < 0) {
-          indexRange += nodes.length;
+          str = String(v2);
+        } else {
+          if (!isNumeric.test(str = String(v2))) return parseNumeric2(x2, str, isNum);
+          x2.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
         }
-        var distance = geoVecLength(centroid, keyPoints[i3]) || 1e-4;
-        keyPoints[i3] = [
-          centroid[0] + (keyPoints[i3][0] - centroid[0]) / distance * radius,
-          centroid[1] + (keyPoints[i3][1] - centroid[1]) / distance * radius
-        ];
-        loc = projection2.invert(keyPoints[i3]);
-        node = keyNodes[i3];
-        origNode = origNodes[node.id];
-        node = node.move(geoVecInterp(origNode.loc, loc, t2));
-        graph = graph.replace(node);
-        startAngle = Math.atan2(keyPoints[i3][1] - centroid[1], keyPoints[i3][0] - centroid[0]);
-        endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
-        totalAngle = endAngle - startAngle;
-        if (totalAngle * sign2 > 0) {
-          totalAngle = -sign2 * (2 * Math.PI - Math.abs(totalAngle));
+        if ((e3 = str.indexOf(".")) > -1) str = str.replace(".", "");
+        if ((i3 = str.search(/e/i)) > 0) {
+          if (e3 < 0) e3 = i3;
+          e3 += +str.slice(i3 + 1);
+          str = str.substring(0, i3);
+        } else if (e3 < 0) {
+          e3 = str.length;
         }
-        do {
-          numberNewPoints++;
-          eachAngle = totalAngle / (indexRange + numberNewPoints);
-        } while (Math.abs(eachAngle) > maxAngle);
-        for (j2 = 1; j2 < indexRange; j2++) {
-          angle2 = startAngle + j2 * eachAngle;
-          loc = projection2.invert([
-            centroid[0] + Math.cos(angle2) * radius,
-            centroid[1] + Math.sin(angle2) * radius
-          ]);
-          node = nodes[(j2 + startNodeIndex) % nodes.length];
-          origNode = origNodes[node.id];
-          nearNodes[node.id] = angle2;
-          node = node.move(geoVecInterp(origNode.loc, loc, t2));
-          graph = graph.replace(node);
+      } else {
+        intCheck(b2, 2, ALPHABET.length, "Base");
+        if (b2 == 10 && alphabetHasNormalDecimalDigits) {
+          x2 = new BigNumber2(v2);
+          return round(x2, DECIMAL_PLACES + x2.e + 1, ROUNDING_MODE);
         }
-        for (j2 = 0; j2 < numberNewPoints; j2++) {
-          angle2 = startAngle + (indexRange + j2) * eachAngle;
-          loc = projection2.invert([
-            centroid[0] + Math.cos(angle2) * radius,
-            centroid[1] + Math.sin(angle2) * radius
-          ]);
-          var min3 = Infinity;
-          for (var nodeId in nearNodes) {
-            var nearAngle = nearNodes[nodeId];
-            var dist = Math.abs(nearAngle - angle2);
-            if (dist < min3) {
-              min3 = dist;
-              origNode = origNodes[nodeId];
-            }
+        str = String(v2);
+        if (isNum = typeof v2 == "number") {
+          if (v2 * 0 != 0) return parseNumeric2(x2, str, isNum, b2);
+          x2.s = 1 / v2 < 0 ? (str = str.slice(1), -1) : 1;
+          if (BigNumber2.DEBUG && str.replace(/^0\.0*|\./, "").length > 15) {
+            throw Error(tooManyDigits + v2);
           }
-          node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t2) });
-          graph = graph.replace(node);
-          nodes.splice(endNodeIndex + j2, 0, node);
-          inBetweenNodes.push(node.id);
+        } else {
+          x2.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
         }
-        if (indexRange === 1 && inBetweenNodes.length) {
-          var startIndex1 = way.nodes.lastIndexOf(startNode.id);
-          var endIndex1 = way.nodes.lastIndexOf(endNode.id);
-          var wayDirection1 = endIndex1 - startIndex1;
-          if (wayDirection1 < -1) {
-            wayDirection1 = 1;
-          }
-          var parentWays = graph.parentWays(keyNodes[i3]);
-          for (j2 = 0; j2 < parentWays.length; j2++) {
-            var sharedWay = parentWays[j2];
-            if (sharedWay === way) continue;
-            if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
-              var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
-              var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
-              var wayDirection2 = endIndex2 - startIndex2;
-              var insertAt = endIndex2;
-              if (wayDirection2 < -1) {
-                wayDirection2 = 1;
-              }
-              if (wayDirection1 !== wayDirection2) {
-                inBetweenNodes.reverse();
-                insertAt = startIndex2;
+        alphabet = ALPHABET.slice(0, b2);
+        e3 = i3 = 0;
+        for (len = str.length; i3 < len; i3++) {
+          if (alphabet.indexOf(c2 = str.charAt(i3)) < 0) {
+            if (c2 == ".") {
+              if (i3 > e3) {
+                e3 = len;
+                continue;
               }
-              for (k2 = 0; k2 < inBetweenNodes.length; k2++) {
-                sharedWay = sharedWay.addNode(inBetweenNodes[k2], insertAt + k2);
+            } else if (!caseChanged) {
+              if (str == str.toUpperCase() && (str = str.toLowerCase()) || str == str.toLowerCase() && (str = str.toUpperCase())) {
+                caseChanged = true;
+                i3 = -1;
+                e3 = 0;
+                continue;
               }
-              graph = graph.replace(sharedWay);
             }
+            return parseNumeric2(x2, String(v2), isNum, b2);
           }
         }
+        isNum = false;
+        str = convertBase(str, b2, 10, x2.s);
+        if ((e3 = str.indexOf(".")) > -1) str = str.replace(".", "");
+        else e3 = str.length;
       }
-      ids = nodes.map(function(n3) {
-        return n3.id;
-      });
-      ids.push(ids[0]);
-      way = way.update({ nodes: ids });
-      graph = graph.replace(way);
-      return graph;
-    };
-    action.makeConvex = function(graph) {
-      var way = graph.entity(wayId);
-      var nodes = utilArrayUniq(graph.childNodes(way));
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var sign2 = area_default3(points) > 0 ? 1 : -1;
-      var hull = hull_default(points);
-      var i3, j2;
-      if (sign2 === -1) {
-        nodes.reverse();
-        points.reverse();
-      }
-      for (i3 = 0; i3 < hull.length - 1; i3++) {
-        var startIndex = points.indexOf(hull[i3]);
-        var endIndex = points.indexOf(hull[i3 + 1]);
-        var indexRange = endIndex - startIndex;
-        if (indexRange < 0) {
-          indexRange += nodes.length;
+      for (i3 = 0; str.charCodeAt(i3) === 48; i3++) ;
+      for (len = str.length; str.charCodeAt(--len) === 48; ) ;
+      if (str = str.slice(i3, ++len)) {
+        len -= i3;
+        if (isNum && BigNumber2.DEBUG && len > 15 && (v2 > MAX_SAFE_INTEGER3 || v2 !== mathfloor(v2))) {
+          throw Error(tooManyDigits + x2.s * v2);
         }
-        for (j2 = 1; j2 < indexRange; j2++) {
-          var point = geoVecInterp(hull[i3], hull[i3 + 1], j2 / indexRange);
-          var node = nodes[(j2 + startIndex) % nodes.length].move(projection2.invert(point));
-          graph = graph.replace(node);
+        if ((e3 = e3 - i3 - 1) > MAX_EXP) {
+          x2.c = x2.e = null;
+        } else if (e3 < MIN_EXP) {
+          x2.c = [x2.e = 0];
+        } else {
+          x2.e = e3;
+          x2.c = [];
+          i3 = (e3 + 1) % LOG_BASE;
+          if (e3 < 0) i3 += LOG_BASE;
+          if (i3 < len) {
+            if (i3) x2.c.push(+str.slice(0, i3));
+            for (len -= LOG_BASE; i3 < len; ) {
+              x2.c.push(+str.slice(i3, i3 += LOG_BASE));
+            }
+            i3 = LOG_BASE - (str = str.slice(i3)).length;
+          } else {
+            i3 -= len;
+          }
+          for (; i3--; str += "0") ;
+          x2.c.push(+str);
         }
+      } else {
+        x2.c = [x2.e = 0];
       }
-      return graph;
-    };
-    action.disabled = function(graph) {
-      if (!graph.entity(wayId).isClosed()) {
-        return "not_closed";
-      }
-      var way = graph.entity(wayId);
-      var nodes = utilArrayUniq(graph.childNodes(way));
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var hull = hull_default(points);
-      var epsilonAngle = Math.PI / 180;
-      if (hull.length !== points.length || hull.length < 3) {
-        return false;
-      }
-      var centroid = centroid_default2(points);
-      var radius = geoVecLengthSquare(centroid, points[0]);
-      var i3, actualPoint;
-      for (i3 = 0; i3 < hull.length; i3++) {
-        actualPoint = hull[i3];
-        var actualDist = geoVecLengthSquare(actualPoint, centroid);
-        var diff = Math.abs(actualDist - radius);
-        if (diff > 0.05 * radius) {
-          return false;
+    }
+    BigNumber2.clone = clone;
+    BigNumber2.ROUND_UP = 0;
+    BigNumber2.ROUND_DOWN = 1;
+    BigNumber2.ROUND_CEIL = 2;
+    BigNumber2.ROUND_FLOOR = 3;
+    BigNumber2.ROUND_HALF_UP = 4;
+    BigNumber2.ROUND_HALF_DOWN = 5;
+    BigNumber2.ROUND_HALF_EVEN = 6;
+    BigNumber2.ROUND_HALF_CEIL = 7;
+    BigNumber2.ROUND_HALF_FLOOR = 8;
+    BigNumber2.EUCLID = 9;
+    BigNumber2.config = BigNumber2.set = function(obj) {
+      var p2, v2;
+      if (obj != null) {
+        if (typeof obj == "object") {
+          if (obj.hasOwnProperty(p2 = "DECIMAL_PLACES")) {
+            v2 = obj[p2];
+            intCheck(v2, 0, MAX, p2);
+            DECIMAL_PLACES = v2;
+          }
+          if (obj.hasOwnProperty(p2 = "ROUNDING_MODE")) {
+            v2 = obj[p2];
+            intCheck(v2, 0, 8, p2);
+            ROUNDING_MODE = v2;
+          }
+          if (obj.hasOwnProperty(p2 = "EXPONENTIAL_AT")) {
+            v2 = obj[p2];
+            if (v2 && v2.pop) {
+              intCheck(v2[0], -MAX, 0, p2);
+              intCheck(v2[1], 0, MAX, p2);
+              TO_EXP_NEG = v2[0];
+              TO_EXP_POS = v2[1];
+            } else {
+              intCheck(v2, -MAX, MAX, p2);
+              TO_EXP_NEG = -(TO_EXP_POS = v2 < 0 ? -v2 : v2);
+            }
+          }
+          if (obj.hasOwnProperty(p2 = "RANGE")) {
+            v2 = obj[p2];
+            if (v2 && v2.pop) {
+              intCheck(v2[0], -MAX, -1, p2);
+              intCheck(v2[1], 1, MAX, p2);
+              MIN_EXP = v2[0];
+              MAX_EXP = v2[1];
+            } else {
+              intCheck(v2, -MAX, MAX, p2);
+              if (v2) {
+                MIN_EXP = -(MAX_EXP = v2 < 0 ? -v2 : v2);
+              } else {
+                throw Error(bignumberError + p2 + " cannot be zero: " + v2);
+              }
+            }
+          }
+          if (obj.hasOwnProperty(p2 = "CRYPTO")) {
+            v2 = obj[p2];
+            if (v2 === !!v2) {
+              if (v2) {
+                if (typeof crypto != "undefined" && crypto && (crypto.getRandomValues || crypto.randomBytes)) {
+                  CRYPTO = v2;
+                } else {
+                  CRYPTO = !v2;
+                  throw Error(bignumberError + "crypto unavailable");
+                }
+              } else {
+                CRYPTO = v2;
+              }
+            } else {
+              throw Error(bignumberError + p2 + " not true or false: " + v2);
+            }
+          }
+          if (obj.hasOwnProperty(p2 = "MODULO_MODE")) {
+            v2 = obj[p2];
+            intCheck(v2, 0, 9, p2);
+            MODULO_MODE = v2;
+          }
+          if (obj.hasOwnProperty(p2 = "POW_PRECISION")) {
+            v2 = obj[p2];
+            intCheck(v2, 0, MAX, p2);
+            POW_PRECISION = v2;
+          }
+          if (obj.hasOwnProperty(p2 = "FORMAT")) {
+            v2 = obj[p2];
+            if (typeof v2 == "object") FORMAT = v2;
+            else throw Error(bignumberError + p2 + " not an object: " + v2);
+          }
+          if (obj.hasOwnProperty(p2 = "ALPHABET")) {
+            v2 = obj[p2];
+            if (typeof v2 == "string" && !/^.?$|[+\-.\s]|(.).*\1/.test(v2)) {
+              alphabetHasNormalDecimalDigits = v2.slice(0, 10) == "0123456789";
+              ALPHABET = v2;
+            } else {
+              throw Error(bignumberError + p2 + " invalid: " + v2);
+            }
+          }
+        } else {
+          throw Error(bignumberError + "Object expected: " + obj);
         }
       }
-      for (i3 = 0; i3 < hull.length; i3++) {
-        actualPoint = hull[i3];
-        var nextPoint = hull[(i3 + 1) % hull.length];
-        var startAngle = Math.atan2(actualPoint[1] - centroid[1], actualPoint[0] - centroid[0]);
-        var endAngle = Math.atan2(nextPoint[1] - centroid[1], nextPoint[0] - centroid[0]);
-        var angle2 = endAngle - startAngle;
-        if (angle2 < 0) {
-          angle2 = -angle2;
-        }
-        if (angle2 > Math.PI) {
-          angle2 = 2 * Math.PI - angle2;
-        }
-        if (angle2 > maxAngle + epsilonAngle) {
-          return false;
+      return {
+        DECIMAL_PLACES,
+        ROUNDING_MODE,
+        EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
+        RANGE: [MIN_EXP, MAX_EXP],
+        CRYPTO,
+        MODULO_MODE,
+        POW_PRECISION,
+        FORMAT,
+        ALPHABET
+      };
+    };
+    BigNumber2.isBigNumber = function(v2) {
+      if (!v2 || v2._isBigNumber !== true) return false;
+      if (!BigNumber2.DEBUG) return true;
+      var i3, n3, c2 = v2.c, e3 = v2.e, s2 = v2.s;
+      out: if ({}.toString.call(c2) == "[object Array]") {
+        if ((s2 === 1 || s2 === -1) && e3 >= -MAX && e3 <= MAX && e3 === mathfloor(e3)) {
+          if (c2[0] === 0) {
+            if (e3 === 0 && c2.length === 1) return true;
+            break out;
+          }
+          i3 = (e3 + 1) % LOG_BASE;
+          if (i3 < 1) i3 += LOG_BASE;
+          if (String(c2[0]).length == i3) {
+            for (i3 = 0; i3 < c2.length; i3++) {
+              n3 = c2[i3];
+              if (n3 < 0 || n3 >= BASE || n3 !== mathfloor(n3)) break out;
+            }
+            if (n3 !== 0) return true;
+          }
         }
+      } else if (c2 === null && e3 === null && (s2 === null || s2 === 1 || s2 === -1)) {
+        return true;
       }
-      return "already_circular";
+      throw Error(bignumberError + "Invalid BigNumber: " + v2);
     };
-    action.transitionable = true;
-    return action;
-  }
-
-  // modules/actions/delete_way.js
-  function actionDeleteWay(wayID) {
-    function canDeleteNode(node, graph) {
-      if (graph.parentWays(node).length || graph.parentRelations(node).length) return false;
-      var geometries = osmNodeGeometriesForTags(node.tags);
-      if (geometries.point) return false;
-      if (geometries.vertex) return true;
-      return !node.hasInterestingTags();
-    }
-    var action = function(graph) {
-      var way = graph.entity(wayID);
-      graph.parentRelations(way).forEach(function(parent) {
-        parent = parent.removeMembersWithID(wayID);
-        graph = graph.replace(parent);
-        if (parent.isDegenerate()) {
-          graph = actionDeleteRelation(parent.id)(graph);
-        }
-      });
-      new Set(way.nodes).forEach(function(nodeID) {
-        graph = graph.replace(way.removeNode(nodeID));
-        var node = graph.entity(nodeID);
-        if (canDeleteNode(node, graph)) {
-          graph = graph.remove(node);
-        }
-      });
-      return graph.remove(way);
+    BigNumber2.maximum = BigNumber2.max = function() {
+      return maxOrMin(arguments, -1);
     };
-    return action;
-  }
-
-  // modules/actions/delete_multiple.js
-  function actionDeleteMultiple(ids) {
-    var actions = {
-      way: actionDeleteWay,
-      node: actionDeleteNode,
-      relation: actionDeleteRelation
+    BigNumber2.minimum = BigNumber2.min = function() {
+      return maxOrMin(arguments, 1);
     };
-    var action = function(graph) {
-      ids.forEach(function(id2) {
-        if (graph.hasEntity(id2)) {
-          graph = actions[graph.entity(id2).type](id2)(graph);
+    BigNumber2.random = function() {
+      var pow2_53 = 9007199254740992;
+      var random53bitInt = Math.random() * pow2_53 & 2097151 ? function() {
+        return mathfloor(Math.random() * pow2_53);
+      } : function() {
+        return (Math.random() * 1073741824 | 0) * 8388608 + (Math.random() * 8388608 | 0);
+      };
+      return function(dp) {
+        var a2, b2, e3, k2, v2, i3 = 0, c2 = [], rand = new BigNumber2(ONE);
+        if (dp == null) dp = DECIMAL_PLACES;
+        else intCheck(dp, 0, MAX);
+        k2 = mathceil(dp / LOG_BASE);
+        if (CRYPTO) {
+          if (crypto.getRandomValues) {
+            a2 = crypto.getRandomValues(new Uint32Array(k2 *= 2));
+            for (; i3 < k2; ) {
+              v2 = a2[i3] * 131072 + (a2[i3 + 1] >>> 11);
+              if (v2 >= 9e15) {
+                b2 = crypto.getRandomValues(new Uint32Array(2));
+                a2[i3] = b2[0];
+                a2[i3 + 1] = b2[1];
+              } else {
+                c2.push(v2 % 1e14);
+                i3 += 2;
+              }
+            }
+            i3 = k2 / 2;
+          } else if (crypto.randomBytes) {
+            a2 = crypto.randomBytes(k2 *= 7);
+            for (; i3 < k2; ) {
+              v2 = (a2[i3] & 31) * 281474976710656 + a2[i3 + 1] * 1099511627776 + a2[i3 + 2] * 4294967296 + a2[i3 + 3] * 16777216 + (a2[i3 + 4] << 16) + (a2[i3 + 5] << 8) + a2[i3 + 6];
+              if (v2 >= 9e15) {
+                crypto.randomBytes(7).copy(a2, i3);
+              } else {
+                c2.push(v2 % 1e14);
+                i3 += 7;
+              }
+            }
+            i3 = k2 / 7;
+          } else {
+            CRYPTO = false;
+            throw Error(bignumberError + "crypto unavailable");
+          }
         }
-      });
-      return graph;
-    };
-    return action;
-  }
-
-  // modules/actions/delete_relation.js
-  function actionDeleteRelation(relationID, allowUntaggedMembers) {
-    function canDeleteEntity(entity, graph) {
-      return !graph.parentWays(entity).length && !graph.parentRelations(entity).length && (!entity.hasInterestingTags() && !allowUntaggedMembers);
-    }
-    var action = function(graph) {
-      var relation = graph.entity(relationID);
-      graph.parentRelations(relation).forEach(function(parent) {
-        parent = parent.removeMembersWithID(relationID);
-        graph = graph.replace(parent);
-        if (parent.isDegenerate()) {
-          graph = actionDeleteRelation(parent.id)(graph);
+        if (!CRYPTO) {
+          for (; i3 < k2; ) {
+            v2 = random53bitInt();
+            if (v2 < 9e15) c2[i3++] = v2 % 1e14;
+          }
         }
-      });
-      var memberIDs = utilArrayUniq(relation.members.map(function(m2) {
-        return m2.id;
-      }));
-      memberIDs.forEach(function(memberID) {
-        graph = graph.replace(relation.removeMembersWithID(memberID));
-        var entity = graph.entity(memberID);
-        if (canDeleteEntity(entity, graph)) {
-          graph = actionDeleteMultiple([memberID])(graph);
+        k2 = c2[--i3];
+        dp %= LOG_BASE;
+        if (k2 && dp) {
+          v2 = POWS_TEN[LOG_BASE - dp];
+          c2[i3] = mathfloor(k2 / v2) * v2;
         }
-      });
-      return graph.remove(relation);
+        for (; c2[i3] === 0; c2.pop(), i3--) ;
+        if (i3 < 0) {
+          c2 = [e3 = 0];
+        } else {
+          for (e3 = -1; c2[0] === 0; c2.splice(0, 1), e3 -= LOG_BASE) ;
+          for (i3 = 1, v2 = c2[0]; v2 >= 10; v2 /= 10, i3++) ;
+          if (i3 < LOG_BASE) e3 -= LOG_BASE - i3;
+        }
+        rand.e = e3;
+        rand.c = c2;
+        return rand;
+      };
+    }();
+    BigNumber2.sum = function() {
+      var i3 = 1, args = arguments, sum = new BigNumber2(args[0]);
+      for (; i3 < args.length; ) sum = sum.plus(args[i3++]);
+      return sum;
     };
-    return action;
-  }
-
-  // modules/actions/delete_node.js
-  function actionDeleteNode(nodeId) {
-    var action = function(graph) {
-      var node = graph.entity(nodeId);
-      graph.parentWays(node).forEach(function(parent) {
-        parent = parent.removeNode(nodeId);
-        graph = graph.replace(parent);
-        if (parent.isDegenerate()) {
-          graph = actionDeleteWay(parent.id)(graph);
+    convertBase = /* @__PURE__ */ function() {
+      var decimal = "0123456789";
+      function toBaseOut(str, baseIn, baseOut, alphabet) {
+        var j2, arr = [0], arrL, i3 = 0, len = str.length;
+        for (; i3 < len; ) {
+          for (arrL = arr.length; arrL--; arr[arrL] *= baseIn) ;
+          arr[0] += alphabet.indexOf(str.charAt(i3++));
+          for (j2 = 0; j2 < arr.length; j2++) {
+            if (arr[j2] > baseOut - 1) {
+              if (arr[j2 + 1] == null) arr[j2 + 1] = 0;
+              arr[j2 + 1] += arr[j2] / baseOut | 0;
+              arr[j2] %= baseOut;
+            }
+          }
         }
-      });
-      graph.parentRelations(node).forEach(function(parent) {
-        parent = parent.removeMembersWithID(nodeId);
-        graph = graph.replace(parent);
-        if (parent.isDegenerate()) {
-          graph = actionDeleteRelation(parent.id)(graph);
+        return arr.reverse();
+      }
+      return function(str, baseIn, baseOut, sign2, callerIsToString) {
+        var alphabet, d2, e3, k2, r2, x2, xc, y2, i3 = str.indexOf("."), dp = DECIMAL_PLACES, rm = ROUNDING_MODE;
+        if (i3 >= 0) {
+          k2 = POW_PRECISION;
+          POW_PRECISION = 0;
+          str = str.replace(".", "");
+          y2 = new BigNumber2(baseIn);
+          x2 = y2.pow(str.length - i3);
+          POW_PRECISION = k2;
+          y2.c = toBaseOut(
+            toFixedPoint(coeffToString(x2.c), x2.e, "0"),
+            10,
+            baseOut,
+            decimal
+          );
+          y2.e = y2.c.length;
         }
-      });
-      return graph.remove(node);
-    };
-    return action;
-  }
-
-  // modules/actions/connect.js
-  function actionConnect(nodeIDs) {
-    var action = function(graph) {
-      var survivor;
-      var node;
-      var parents;
-      var i3, j2;
-      nodeIDs.reverse();
-      var interestingIDs = [];
-      for (i3 = 0; i3 < nodeIDs.length; i3++) {
-        node = graph.entity(nodeIDs[i3]);
-        if (node.hasInterestingTags()) {
-          if (!node.isNew()) {
-            interestingIDs.push(node.id);
+        xc = toBaseOut(str, baseIn, baseOut, callerIsToString ? (alphabet = ALPHABET, decimal) : (alphabet = decimal, ALPHABET));
+        e3 = k2 = xc.length;
+        for (; xc[--k2] == 0; xc.pop()) ;
+        if (!xc[0]) return alphabet.charAt(0);
+        if (i3 < 0) {
+          --e3;
+        } else {
+          x2.c = xc;
+          x2.e = e3;
+          x2.s = sign2;
+          x2 = div(x2, y2, dp, rm, baseOut);
+          xc = x2.c;
+          r2 = x2.r;
+          e3 = x2.e;
+        }
+        d2 = e3 + dp + 1;
+        i3 = xc[d2];
+        k2 = baseOut / 2;
+        r2 = r2 || d2 < 0 || xc[d2 + 1] != null;
+        r2 = rm < 4 ? (i3 != null || r2) && (rm == 0 || rm == (x2.s < 0 ? 3 : 2)) : i3 > k2 || i3 == k2 && (rm == 4 || r2 || rm == 6 && xc[d2 - 1] & 1 || rm == (x2.s < 0 ? 8 : 7));
+        if (d2 < 1 || !xc[0]) {
+          str = r2 ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
+        } else {
+          xc.length = d2;
+          if (r2) {
+            for (--baseOut; ++xc[--d2] > baseOut; ) {
+              xc[d2] = 0;
+              if (!d2) {
+                ++e3;
+                xc = [1].concat(xc);
+              }
+            }
           }
+          for (k2 = xc.length; !xc[--k2]; ) ;
+          for (i3 = 0, str = ""; i3 <= k2; str += alphabet.charAt(xc[i3++])) ;
+          str = toFixedPoint(str, e3, alphabet.charAt(0));
+        }
+        return str;
+      };
+    }();
+    div = /* @__PURE__ */ function() {
+      function multiply(x2, k2, base) {
+        var m2, temp, xlo, xhi, carry = 0, i3 = x2.length, klo = k2 % SQRT_BASE, khi = k2 / SQRT_BASE | 0;
+        for (x2 = x2.slice(); i3--; ) {
+          xlo = x2[i3] % SQRT_BASE;
+          xhi = x2[i3] / SQRT_BASE | 0;
+          m2 = khi * xlo + xhi * klo;
+          temp = klo * xlo + m2 % SQRT_BASE * SQRT_BASE + carry;
+          carry = (temp / base | 0) + (m2 / SQRT_BASE | 0) + khi * xhi;
+          x2[i3] = temp % base;
         }
+        if (carry) x2 = [carry].concat(x2);
+        return x2;
       }
-      survivor = graph.entity(utilOldestID(interestingIDs.length > 0 ? interestingIDs : nodeIDs));
-      for (i3 = 0; i3 < nodeIDs.length; i3++) {
-        node = graph.entity(nodeIDs[i3]);
-        if (node.id === survivor.id) continue;
-        parents = graph.parentWays(node);
-        for (j2 = 0; j2 < parents.length; j2++) {
-          graph = graph.replace(parents[j2].replaceNode(node.id, survivor.id));
-        }
-        parents = graph.parentRelations(node);
-        for (j2 = 0; j2 < parents.length; j2++) {
-          graph = graph.replace(parents[j2].replaceMember(node, survivor));
+      function compare2(a2, b2, aL, bL) {
+        var i3, cmp;
+        if (aL != bL) {
+          cmp = aL > bL ? 1 : -1;
+        } else {
+          for (i3 = cmp = 0; i3 < aL; i3++) {
+            if (a2[i3] != b2[i3]) {
+              cmp = a2[i3] > b2[i3] ? 1 : -1;
+              break;
+            }
+          }
         }
-        survivor = survivor.mergeTags(node.tags);
-        graph = actionDeleteNode(node.id)(graph);
+        return cmp;
       }
-      graph = graph.replace(survivor);
-      parents = graph.parentWays(survivor);
-      for (i3 = 0; i3 < parents.length; i3++) {
-        if (parents[i3].isDegenerate()) {
-          graph = actionDeleteWay(parents[i3].id)(graph);
+      function subtract(a2, b2, aL, base) {
+        var i3 = 0;
+        for (; aL--; ) {
+          a2[aL] -= i3;
+          i3 = a2[aL] < b2[aL] ? 1 : 0;
+          a2[aL] = i3 * base + a2[aL] - b2[aL];
         }
+        for (; !a2[0] && a2.length > 1; a2.splice(0, 1)) ;
       }
-      return graph;
-    };
-    action.disabled = function(graph) {
-      var seen = {};
-      var restrictionIDs = [];
-      var survivor;
-      var node, way;
-      var relations, relation, role;
-      var i3, j2, k2;
-      survivor = graph.entity(utilOldestID(nodeIDs));
-      for (i3 = 0; i3 < nodeIDs.length; i3++) {
-        node = graph.entity(nodeIDs[i3]);
-        relations = graph.parentRelations(node);
-        for (j2 = 0; j2 < relations.length; j2++) {
-          relation = relations[j2];
-          role = relation.memberById(node.id).role || "";
-          if (relation.hasFromViaTo()) {
-            restrictionIDs.push(relation.id);
-          }
-          if (seen[relation.id] !== void 0 && seen[relation.id] !== role) {
-            return "relation";
-          } else {
-            seen[relation.id] = role;
+      return function(x2, y2, dp, rm, base) {
+        var cmp, e3, i3, more, n3, prod, prodL, q2, qc, rem, remL, rem0, xi, xL, yc0, yL, yz, s2 = x2.s == y2.s ? 1 : -1, xc = x2.c, yc = y2.c;
+        if (!xc || !xc[0] || !yc || !yc[0]) {
+          return new BigNumber2(
+            // Return NaN if either NaN, or both Infinity or 0.
+            !x2.s || !y2.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : (
+              // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
+              xc && xc[0] == 0 || !yc ? s2 * 0 : s2 / 0
+            )
+          );
+        }
+        q2 = new BigNumber2(s2);
+        qc = q2.c = [];
+        e3 = x2.e - y2.e;
+        s2 = dp + e3 + 1;
+        if (!base) {
+          base = BASE;
+          e3 = bitFloor(x2.e / LOG_BASE) - bitFloor(y2.e / LOG_BASE);
+          s2 = s2 / LOG_BASE | 0;
+        }
+        for (i3 = 0; yc[i3] == (xc[i3] || 0); i3++) ;
+        if (yc[i3] > (xc[i3] || 0)) e3--;
+        if (s2 < 0) {
+          qc.push(1);
+          more = true;
+        } else {
+          xL = xc.length;
+          yL = yc.length;
+          i3 = 0;
+          s2 += 2;
+          n3 = mathfloor(base / (yc[0] + 1));
+          if (n3 > 1) {
+            yc = multiply(yc, n3, base);
+            xc = multiply(xc, n3, base);
+            yL = yc.length;
+            xL = xc.length;
           }
+          xi = yL;
+          rem = xc.slice(0, yL);
+          remL = rem.length;
+          for (; remL < yL; rem[remL++] = 0) ;
+          yz = yc.slice();
+          yz = [0].concat(yz);
+          yc0 = yc[0];
+          if (yc[1] >= base / 2) yc0++;
+          do {
+            n3 = 0;
+            cmp = compare2(yc, rem, yL, remL);
+            if (cmp < 0) {
+              rem0 = rem[0];
+              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);
+              n3 = mathfloor(rem0 / yc0);
+              if (n3 > 1) {
+                if (n3 >= base) n3 = base - 1;
+                prod = multiply(yc, n3, base);
+                prodL = prod.length;
+                remL = rem.length;
+                while (compare2(prod, rem, prodL, remL) == 1) {
+                  n3--;
+                  subtract(prod, yL < prodL ? yz : yc, prodL, base);
+                  prodL = prod.length;
+                  cmp = 1;
+                }
+              } else {
+                if (n3 == 0) {
+                  cmp = n3 = 1;
+                }
+                prod = yc.slice();
+                prodL = prod.length;
+              }
+              if (prodL < remL) prod = [0].concat(prod);
+              subtract(rem, prod, remL, base);
+              remL = rem.length;
+              if (cmp == -1) {
+                while (compare2(yc, rem, yL, remL) < 1) {
+                  n3++;
+                  subtract(rem, yL < remL ? yz : yc, remL, base);
+                  remL = rem.length;
+                }
+              }
+            } else if (cmp === 0) {
+              n3++;
+              rem = [0];
+            }
+            qc[i3++] = n3;
+            if (rem[0]) {
+              rem[remL++] = xc[xi] || 0;
+            } else {
+              rem = [xc[xi]];
+              remL = 1;
+            }
+          } while ((xi++ < xL || rem[0] != null) && s2--);
+          more = rem[0] != null;
+          if (!qc[0]) qc.splice(0, 1);
         }
-      }
-      for (i3 = 0; i3 < nodeIDs.length; i3++) {
-        node = graph.entity(nodeIDs[i3]);
-        var parents = graph.parentWays(node);
-        for (j2 = 0; j2 < parents.length; j2++) {
-          var parent = parents[j2];
-          relations = graph.parentRelations(parent);
-          for (k2 = 0; k2 < relations.length; k2++) {
-            relation = relations[k2];
-            if (relation.hasFromViaTo()) {
-              restrictionIDs.push(relation.id);
+        if (base == BASE) {
+          for (i3 = 1, s2 = qc[0]; s2 >= 10; s2 /= 10, i3++) ;
+          round(q2, dp + (q2.e = i3 + e3 * LOG_BASE - 1) + 1, rm, more);
+        } else {
+          q2.e = e3;
+          q2.r = +more;
+        }
+        return q2;
+      };
+    }();
+    function format2(n3, i3, rm, id2) {
+      var c0, e3, ne2, len, str;
+      if (rm == null) rm = ROUNDING_MODE;
+      else intCheck(rm, 0, 8);
+      if (!n3.c) return n3.toString();
+      c0 = n3.c[0];
+      ne2 = n3.e;
+      if (i3 == null) {
+        str = coeffToString(n3.c);
+        str = id2 == 1 || id2 == 2 && (ne2 <= TO_EXP_NEG || ne2 >= TO_EXP_POS) ? toExponential(str, ne2) : toFixedPoint(str, ne2, "0");
+      } else {
+        n3 = round(new BigNumber2(n3), i3, rm);
+        e3 = n3.e;
+        str = coeffToString(n3.c);
+        len = str.length;
+        if (id2 == 1 || id2 == 2 && (i3 <= e3 || e3 <= TO_EXP_NEG)) {
+          for (; len < i3; str += "0", len++) ;
+          str = toExponential(str, e3);
+        } else {
+          i3 -= ne2;
+          str = toFixedPoint(str, e3, "0");
+          if (e3 + 1 > len) {
+            if (--i3 > 0) for (str += "."; i3--; str += "0") ;
+          } else {
+            i3 += e3 - len;
+            if (i3 > 0) {
+              if (e3 + 1 == len) str += ".";
+              for (; i3--; str += "0") ;
             }
           }
         }
       }
-      restrictionIDs = utilArrayUniq(restrictionIDs);
-      for (i3 = 0; i3 < restrictionIDs.length; i3++) {
-        relation = graph.entity(restrictionIDs[i3]);
-        if (!relation.isComplete(graph)) continue;
-        var memberWays = relation.members.filter(function(m2) {
-          return m2.type === "way";
-        }).map(function(m2) {
-          return graph.entity(m2.id);
-        });
-        memberWays = utilArrayUniq(memberWays);
-        var f2 = relation.memberByRole("from");
-        var t2 = relation.memberByRole("to");
-        var isUturn = f2.id === t2.id;
-        var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
-        for (j2 = 0; j2 < relation.members.length; j2++) {
-          collectNodes(relation.members[j2], nodes);
+      return n3.s < 0 && c0 ? "-" + str : str;
+    }
+    function maxOrMin(args, n3) {
+      var k2, y2, i3 = 1, x2 = new BigNumber2(args[0]);
+      for (; i3 < args.length; i3++) {
+        y2 = new BigNumber2(args[i3]);
+        if (!y2.s || (k2 = compare(x2, y2)) === n3 || k2 === 0 && x2.s === n3) {
+          x2 = y2;
         }
-        nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
-        nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
-        var filter2 = keyNodeFilter(nodes.keyfrom, nodes.keyto);
-        nodes.from = nodes.from.filter(filter2);
-        nodes.via = nodes.via.filter(filter2);
-        nodes.to = nodes.to.filter(filter2);
-        var connectFrom = false;
-        var connectVia = false;
-        var connectTo = false;
-        var connectKeyFrom = false;
-        var connectKeyTo = false;
-        for (j2 = 0; j2 < nodeIDs.length; j2++) {
-          var n3 = nodeIDs[j2];
-          if (nodes.from.indexOf(n3) !== -1) {
-            connectFrom = true;
-          }
-          if (nodes.via.indexOf(n3) !== -1) {
-            connectVia = true;
-          }
-          if (nodes.to.indexOf(n3) !== -1) {
-            connectTo = true;
-          }
-          if (nodes.keyfrom.indexOf(n3) !== -1) {
-            connectKeyFrom = true;
+      }
+      return x2;
+    }
+    function normalise(n3, c2, e3) {
+      var i3 = 1, j2 = c2.length;
+      for (; !c2[--j2]; c2.pop()) ;
+      for (j2 = c2[0]; j2 >= 10; j2 /= 10, i3++) ;
+      if ((e3 = i3 + e3 * LOG_BASE - 1) > MAX_EXP) {
+        n3.c = n3.e = null;
+      } else if (e3 < MIN_EXP) {
+        n3.c = [n3.e = 0];
+      } else {
+        n3.e = e3;
+        n3.c = c2;
+      }
+      return n3;
+    }
+    parseNumeric2 = /* @__PURE__ */ function() {
+      var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, dotAfter = /^([^.]+)\.$/, dotBefore = /^\.([^.]+)$/, isInfinityOrNaN = /^-?(Infinity|NaN)$/, whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;
+      return function(x2, str, isNum, b2) {
+        var base, s2 = isNum ? str : str.replace(whitespaceOrPlus, "");
+        if (isInfinityOrNaN.test(s2)) {
+          x2.s = isNaN(s2) ? null : s2 < 0 ? -1 : 1;
+        } else {
+          if (!isNum) {
+            s2 = s2.replace(basePrefix, function(m2, p1, p2) {
+              base = (p2 = p2.toLowerCase()) == "x" ? 16 : p2 == "b" ? 2 : 8;
+              return !b2 || b2 == base ? p1 : m2;
+            });
+            if (b2) {
+              base = b2;
+              s2 = s2.replace(dotAfter, "$1").replace(dotBefore, "0.$1");
+            }
+            if (str != s2) return new BigNumber2(s2, base);
           }
-          if (nodes.keyto.indexOf(n3) !== -1) {
-            connectKeyTo = true;
+          if (BigNumber2.DEBUG) {
+            throw Error(bignumberError + "Not a" + (b2 ? " base " + b2 : "") + " number: " + str);
           }
+          x2.s = null;
         }
-        if (connectFrom && connectTo && !isUturn) {
-          return "restriction";
-        }
-        if (connectFrom && connectVia) {
-          return "restriction";
-        }
-        if (connectTo && connectVia) {
-          return "restriction";
-        }
-        if (connectKeyFrom || connectKeyTo) {
-          if (nodeIDs.length !== 2) {
-            return "restriction";
-          }
-          var n0 = null;
-          var n1 = null;
-          for (j2 = 0; j2 < memberWays.length; j2++) {
-            way = memberWays[j2];
-            if (way.contains(nodeIDs[0])) {
-              n0 = nodeIDs[0];
+        x2.c = x2.e = null;
+      };
+    }();
+    function round(x2, sd, rm, r2) {
+      var d2, i3, j2, k2, n3, ni, rd, xc = x2.c, pows10 = POWS_TEN;
+      if (xc) {
+        out: {
+          for (d2 = 1, k2 = xc[0]; k2 >= 10; k2 /= 10, d2++) ;
+          i3 = sd - d2;
+          if (i3 < 0) {
+            i3 += LOG_BASE;
+            j2 = sd;
+            n3 = xc[ni = 0];
+            rd = mathfloor(n3 / pows10[d2 - j2 - 1] % 10);
+          } else {
+            ni = mathceil((i3 + 1) / LOG_BASE);
+            if (ni >= xc.length) {
+              if (r2) {
+                for (; xc.length <= ni; xc.push(0)) ;
+                n3 = rd = 0;
+                d2 = 1;
+                i3 %= LOG_BASE;
+                j2 = i3 - LOG_BASE + 1;
+              } else {
+                break out;
+              }
+            } else {
+              n3 = k2 = xc[ni];
+              for (d2 = 1; k2 >= 10; k2 /= 10, d2++) ;
+              i3 %= LOG_BASE;
+              j2 = i3 - LOG_BASE + d2;
+              rd = j2 < 0 ? 0 : mathfloor(n3 / pows10[d2 - j2 - 1] % 10);
             }
-            if (way.contains(nodeIDs[1])) {
-              n1 = nodeIDs[1];
+          }
+          r2 = r2 || sd < 0 || // Are there any non-zero digits after the rounding digit?
+          // The expression  n % pows10[d - j - 1]  returns all digits of n to the right
+          // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
+          xc[ni + 1] != null || (j2 < 0 ? n3 : n3 % pows10[d2 - j2 - 1]);
+          r2 = rm < 4 ? (rd || r2) && (rm == 0 || rm == (x2.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || r2 || rm == 6 && // Check whether the digit to the left of the rounding digit is odd.
+          (i3 > 0 ? j2 > 0 ? n3 / pows10[d2 - j2] : 0 : xc[ni - 1]) % 10 & 1 || rm == (x2.s < 0 ? 8 : 7));
+          if (sd < 1 || !xc[0]) {
+            xc.length = 0;
+            if (r2) {
+              sd -= x2.e + 1;
+              xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
+              x2.e = -sd || 0;
+            } else {
+              xc[0] = x2.e = 0;
             }
+            return x2;
           }
-          if (n0 && n1) {
-            var ok = false;
-            for (j2 = 0; j2 < memberWays.length; j2++) {
-              way = memberWays[j2];
-              if (way.areAdjacent(n0, n1)) {
-                ok = true;
+          if (i3 == 0) {
+            xc.length = ni;
+            k2 = 1;
+            ni--;
+          } else {
+            xc.length = ni + 1;
+            k2 = pows10[LOG_BASE - i3];
+            xc[ni] = j2 > 0 ? mathfloor(n3 / pows10[d2 - j2] % pows10[j2]) * k2 : 0;
+          }
+          if (r2) {
+            for (; ; ) {
+              if (ni == 0) {
+                for (i3 = 1, j2 = xc[0]; j2 >= 10; j2 /= 10, i3++) ;
+                j2 = xc[0] += k2;
+                for (k2 = 1; j2 >= 10; j2 /= 10, k2++) ;
+                if (i3 != k2) {
+                  x2.e++;
+                  if (xc[0] == BASE) xc[0] = 1;
+                }
                 break;
+              } else {
+                xc[ni] += k2;
+                if (xc[ni] != BASE) break;
+                xc[ni--] = 0;
+                k2 = 1;
               }
             }
-            if (!ok) {
-              return "restriction";
-            }
           }
+          for (i3 = xc.length; xc[--i3] === 0; xc.pop()) ;
         }
-        for (j2 = 0; j2 < memberWays.length; j2++) {
-          way = memberWays[j2].update({});
-          for (k2 = 0; k2 < nodeIDs.length; k2++) {
-            if (nodeIDs[k2] === survivor.id) continue;
-            if (way.areAdjacent(nodeIDs[k2], survivor.id)) {
-              way = way.removeNode(nodeIDs[k2]);
-            } else {
-              way = way.replaceNode(nodeIDs[k2], survivor.id);
-            }
-          }
-          if (way.isDegenerate()) {
-            return "restriction";
-          }
+        if (x2.e > MAX_EXP) {
+          x2.c = x2.e = null;
+        } else if (x2.e < MIN_EXP) {
+          x2.c = [x2.e = 0];
         }
       }
-      return false;
-      function hasDuplicates(n4, i4, arr) {
-        return arr.indexOf(n4) !== arr.lastIndexOf(n4);
+      return x2;
+    }
+    function valueOf(n3) {
+      var str, e3 = n3.e;
+      if (e3 === null) return n3.toString();
+      str = coeffToString(n3.c);
+      str = e3 <= TO_EXP_NEG || e3 >= TO_EXP_POS ? toExponential(str, e3) : toFixedPoint(str, e3, "0");
+      return n3.s < 0 ? "-" + str : str;
+    }
+    P2.absoluteValue = P2.abs = function() {
+      var x2 = new BigNumber2(this);
+      if (x2.s < 0) x2.s = 1;
+      return x2;
+    };
+    P2.comparedTo = function(y2, b2) {
+      return compare(this, new BigNumber2(y2, b2));
+    };
+    P2.decimalPlaces = P2.dp = function(dp, rm) {
+      var c2, n3, v2, x2 = this;
+      if (dp != null) {
+        intCheck(dp, 0, MAX);
+        if (rm == null) rm = ROUNDING_MODE;
+        else intCheck(rm, 0, 8);
+        return round(new BigNumber2(x2), dp + x2.e + 1, rm);
       }
-      function keyNodeFilter(froms, tos) {
-        return function(n4) {
-          return froms.indexOf(n4) === -1 && tos.indexOf(n4) === -1;
-        };
+      if (!(c2 = x2.c)) return null;
+      n3 = ((v2 = c2.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;
+      if (v2 = c2[v2]) for (; v2 % 10 == 0; v2 /= 10, n3--) ;
+      if (n3 < 0) n3 = 0;
+      return n3;
+    };
+    P2.dividedBy = P2.div = function(y2, b2) {
+      return div(this, new BigNumber2(y2, b2), DECIMAL_PLACES, ROUNDING_MODE);
+    };
+    P2.dividedToIntegerBy = P2.idiv = function(y2, b2) {
+      return div(this, new BigNumber2(y2, b2), 0, 1);
+    };
+    P2.exponentiatedBy = P2.pow = function(n3, m2) {
+      var half, isModExp, i3, k2, more, nIsBig, nIsNeg, nIsOdd, y2, x2 = this;
+      n3 = new BigNumber2(n3);
+      if (n3.c && !n3.isInteger()) {
+        throw Error(bignumberError + "Exponent not an integer: " + valueOf(n3));
       }
-      function collectNodes(member, collection) {
-        var entity = graph.hasEntity(member.id);
-        if (!entity) return;
-        var role2 = member.role || "";
-        if (!collection[role2]) {
-          collection[role2] = [];
-        }
-        if (member.type === "node") {
-          collection[role2].push(member.id);
-          if (role2 === "via") {
-            collection.keyfrom.push(member.id);
-            collection.keyto.push(member.id);
-          }
-        } else if (member.type === "way") {
-          collection[role2].push.apply(collection[role2], entity.nodes);
-          if (role2 === "from" || role2 === "via") {
-            collection.keyfrom.push(entity.first());
-            collection.keyfrom.push(entity.last());
+      if (m2 != null) m2 = new BigNumber2(m2);
+      nIsBig = n3.e > 14;
+      if (!x2.c || !x2.c[0] || x2.c[0] == 1 && !x2.e && x2.c.length == 1 || !n3.c || !n3.c[0]) {
+        y2 = new BigNumber2(Math.pow(+valueOf(x2), nIsBig ? n3.s * (2 - isOdd(n3)) : +valueOf(n3)));
+        return m2 ? y2.mod(m2) : y2;
+      }
+      nIsNeg = n3.s < 0;
+      if (m2) {
+        if (m2.c ? !m2.c[0] : !m2.s) return new BigNumber2(NaN);
+        isModExp = !nIsNeg && x2.isInteger() && m2.isInteger();
+        if (isModExp) x2 = x2.mod(m2);
+      } else if (n3.e > 9 && (x2.e > 0 || x2.e < -1 || (x2.e == 0 ? x2.c[0] > 1 || nIsBig && x2.c[1] >= 24e7 : x2.c[0] < 8e13 || nIsBig && x2.c[0] <= 9999975e7))) {
+        k2 = x2.s < 0 && isOdd(n3) ? -0 : 0;
+        if (x2.e > -1) k2 = 1 / k2;
+        return new BigNumber2(nIsNeg ? 1 / k2 : k2);
+      } else if (POW_PRECISION) {
+        k2 = mathceil(POW_PRECISION / LOG_BASE + 2);
+      }
+      if (nIsBig) {
+        half = new BigNumber2(0.5);
+        if (nIsNeg) n3.s = 1;
+        nIsOdd = isOdd(n3);
+      } else {
+        i3 = Math.abs(+valueOf(n3));
+        nIsOdd = i3 % 2;
+      }
+      y2 = new BigNumber2(ONE);
+      for (; ; ) {
+        if (nIsOdd) {
+          y2 = y2.times(x2);
+          if (!y2.c) break;
+          if (k2) {
+            if (y2.c.length > k2) y2.c.length = k2;
+          } else if (isModExp) {
+            y2 = y2.mod(m2);
           }
-          if (role2 === "to" || role2 === "via") {
-            collection.keyto.push(entity.first());
-            collection.keyto.push(entity.last());
+        }
+        if (i3) {
+          i3 = mathfloor(i3 / 2);
+          if (i3 === 0) break;
+          nIsOdd = i3 % 2;
+        } else {
+          n3 = n3.times(half);
+          round(n3, n3.e + 1, 1);
+          if (n3.e > 14) {
+            nIsOdd = isOdd(n3);
+          } else {
+            i3 = +valueOf(n3);
+            if (i3 === 0) break;
+            nIsOdd = i3 % 2;
           }
         }
+        x2 = x2.times(x2);
+        if (k2) {
+          if (x2.c && x2.c.length > k2) x2.c.length = k2;
+        } else if (isModExp) {
+          x2 = x2.mod(m2);
+        }
       }
+      if (isModExp) return y2;
+      if (nIsNeg) y2 = ONE.div(y2);
+      return m2 ? y2.mod(m2) : k2 ? round(y2, POW_PRECISION, ROUNDING_MODE, more) : y2;
     };
-    return action;
-  }
-
-  // modules/actions/copy_entities.js
-  function actionCopyEntities(ids, fromGraph) {
-    var _copies = {};
-    var action = function(graph) {
-      ids.forEach(function(id3) {
-        fromGraph.entity(id3).copy(fromGraph, _copies);
-      });
-      for (var id2 in _copies) {
-        graph = graph.replace(_copies[id2]);
-      }
-      return graph;
+    P2.integerValue = function(rm) {
+      var n3 = new BigNumber2(this);
+      if (rm == null) rm = ROUNDING_MODE;
+      else intCheck(rm, 0, 8);
+      return round(n3, n3.e + 1, rm);
     };
-    action.copies = function() {
-      return _copies;
+    P2.isEqualTo = P2.eq = function(y2, b2) {
+      return compare(this, new BigNumber2(y2, b2)) === 0;
     };
-    return action;
-  }
-
-  // modules/actions/delete_member.js
-  function actionDeleteMember(relationId, memberIndex) {
-    return function(graph) {
-      var relation = graph.entity(relationId).removeMember(memberIndex);
-      graph = graph.replace(relation);
-      if (relation.isDegenerate()) {
-        graph = actionDeleteRelation(relation.id)(graph);
-      }
-      return graph;
+    P2.isFinite = function() {
+      return !!this.c;
     };
-  }
-
-  // modules/actions/discard_tags.js
-  function actionDiscardTags(difference2, discardTags) {
-    discardTags = discardTags || {};
-    return (graph) => {
-      difference2.modified().forEach(checkTags);
-      difference2.created().forEach(checkTags);
-      return graph;
-      function checkTags(entity) {
-        const keys2 = Object.keys(entity.tags);
-        let didDiscard = false;
-        let tags = {};
-        for (let i3 = 0; i3 < keys2.length; i3++) {
-          const k2 = keys2[i3];
-          if (discardTags[k2] || !entity.tags[k2]) {
-            didDiscard = true;
-          } else {
-            tags[k2] = entity.tags[k2];
-          }
-        }
-        if (didDiscard) {
-          graph = graph.replace(entity.update({ tags }));
-        }
-      }
+    P2.isGreaterThan = P2.gt = function(y2, b2) {
+      return compare(this, new BigNumber2(y2, b2)) > 0;
     };
-  }
-
-  // modules/actions/disconnect.js
-  function actionDisconnect(nodeId, newNodeId) {
-    var wayIds;
-    var disconnectableRelationTypes = {
-      "associatedStreet": true,
-      "enforcement": true,
-      "site": true
+    P2.isGreaterThanOrEqualTo = P2.gte = function(y2, b2) {
+      return (b2 = compare(this, new BigNumber2(y2, b2))) === 1 || b2 === 0;
     };
-    var action = function(graph) {
-      var node = graph.entity(nodeId);
-      var connections = action.connections(graph);
-      connections.forEach(function(connection) {
-        var way = graph.entity(connection.wayID);
-        var newNode = osmNode({ id: newNodeId, loc: node.loc, tags: node.tags });
-        graph = graph.replace(newNode);
-        if (connection.index === 0 && way.isArea()) {
-          graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
-        } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
-          graph = graph.replace(way.unclose().addNode(newNode.id));
-        } else {
-          graph = graph.replace(way.updateNode(newNode.id, connection.index));
-        }
-      });
-      return graph;
+    P2.isInteger = function() {
+      return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
     };
-    action.connections = function(graph) {
-      var candidates = [];
-      var keeping = false;
-      var parentWays = graph.parentWays(graph.entity(nodeId));
-      var way, waynode;
-      for (var i3 = 0; i3 < parentWays.length; i3++) {
-        way = parentWays[i3];
-        if (wayIds && wayIds.indexOf(way.id) === -1) {
-          keeping = true;
-          continue;
+    P2.isLessThan = P2.lt = function(y2, b2) {
+      return compare(this, new BigNumber2(y2, b2)) < 0;
+    };
+    P2.isLessThanOrEqualTo = P2.lte = function(y2, b2) {
+      return (b2 = compare(this, new BigNumber2(y2, b2))) === -1 || b2 === 0;
+    };
+    P2.isNaN = function() {
+      return !this.s;
+    };
+    P2.isNegative = function() {
+      return this.s < 0;
+    };
+    P2.isPositive = function() {
+      return this.s > 0;
+    };
+    P2.isZero = function() {
+      return !!this.c && this.c[0] == 0;
+    };
+    P2.minus = function(y2, b2) {
+      var i3, j2, t2, xLTy, x2 = this, a2 = x2.s;
+      y2 = new BigNumber2(y2, b2);
+      b2 = y2.s;
+      if (!a2 || !b2) return new BigNumber2(NaN);
+      if (a2 != b2) {
+        y2.s = -b2;
+        return x2.plus(y2);
+      }
+      var xe2 = x2.e / LOG_BASE, ye2 = y2.e / LOG_BASE, xc = x2.c, yc = y2.c;
+      if (!xe2 || !ye2) {
+        if (!xc || !yc) return xc ? (y2.s = -b2, y2) : new BigNumber2(yc ? x2 : NaN);
+        if (!xc[0] || !yc[0]) {
+          return yc[0] ? (y2.s = -b2, y2) : new BigNumber2(xc[0] ? x2 : (
+            // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
+            ROUNDING_MODE == 3 ? -0 : 0
+          ));
         }
-        if (way.isArea() && way.nodes[0] === nodeId) {
-          candidates.push({ wayID: way.id, index: 0 });
+      }
+      xe2 = bitFloor(xe2);
+      ye2 = bitFloor(ye2);
+      xc = xc.slice();
+      if (a2 = xe2 - ye2) {
+        if (xLTy = a2 < 0) {
+          a2 = -a2;
+          t2 = xc;
         } else {
-          for (var j2 = 0; j2 < way.nodes.length; j2++) {
-            waynode = way.nodes[j2];
-            if (waynode === nodeId) {
-              if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && j2 === way.nodes.length - 1) {
-                continue;
-              }
-              candidates.push({ wayID: way.id, index: j2 });
-            }
+          ye2 = xe2;
+          t2 = yc;
+        }
+        t2.reverse();
+        for (b2 = a2; b2--; t2.push(0)) ;
+        t2.reverse();
+      } else {
+        j2 = (xLTy = (a2 = xc.length) < (b2 = yc.length)) ? a2 : b2;
+        for (a2 = b2 = 0; b2 < j2; b2++) {
+          if (xc[b2] != yc[b2]) {
+            xLTy = xc[b2] < yc[b2];
+            break;
           }
         }
       }
-      return keeping ? candidates : candidates.slice(1);
+      if (xLTy) {
+        t2 = xc;
+        xc = yc;
+        yc = t2;
+        y2.s = -y2.s;
+      }
+      b2 = (j2 = yc.length) - (i3 = xc.length);
+      if (b2 > 0) for (; b2--; xc[i3++] = 0) ;
+      b2 = BASE - 1;
+      for (; j2 > a2; ) {
+        if (xc[--j2] < yc[j2]) {
+          for (i3 = j2; i3 && !xc[--i3]; xc[i3] = b2) ;
+          --xc[i3];
+          xc[j2] += BASE;
+        }
+        xc[j2] -= yc[j2];
+      }
+      for (; xc[0] == 0; xc.splice(0, 1), --ye2) ;
+      if (!xc[0]) {
+        y2.s = ROUNDING_MODE == 3 ? -1 : 1;
+        y2.c = [y2.e = 0];
+        return y2;
+      }
+      return normalise(y2, xc, ye2);
     };
-    action.disabled = function(graph) {
-      var connections = action.connections(graph);
-      if (connections.length === 0) return "not_connected";
-      var parentWays = graph.parentWays(graph.entity(nodeId));
-      var seenRelationIds = {};
-      var sharedRelation;
-      parentWays.forEach(function(way) {
-        var relations = graph.parentRelations(way);
-        relations.filter((relation) => !disconnectableRelationTypes[relation.tags.type]).forEach(function(relation) {
-          if (relation.id in seenRelationIds) {
-            if (wayIds) {
-              if (wayIds.indexOf(way.id) !== -1 || wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
-                sharedRelation = relation;
-              }
-            } else {
-              sharedRelation = relation;
-            }
+    P2.modulo = P2.mod = function(y2, b2) {
+      var q2, s2, x2 = this;
+      y2 = new BigNumber2(y2, b2);
+      if (!x2.c || !y2.s || y2.c && !y2.c[0]) {
+        return new BigNumber2(NaN);
+      } else if (!y2.c || x2.c && !x2.c[0]) {
+        return new BigNumber2(x2);
+      }
+      if (MODULO_MODE == 9) {
+        s2 = y2.s;
+        y2.s = 1;
+        q2 = div(x2, y2, 0, 3);
+        y2.s = s2;
+        q2.s *= s2;
+      } else {
+        q2 = div(x2, y2, 0, MODULO_MODE);
+      }
+      y2 = x2.minus(q2.times(y2));
+      if (!y2.c[0] && MODULO_MODE == 1) y2.s = x2.s;
+      return y2;
+    };
+    P2.multipliedBy = P2.times = function(y2, b2) {
+      var c2, e3, i3, j2, k2, m2, xcL, xlo, xhi, ycL, ylo, yhi, zc, base, sqrtBase, x2 = this, xc = x2.c, yc = (y2 = new BigNumber2(y2, b2)).c;
+      if (!xc || !yc || !xc[0] || !yc[0]) {
+        if (!x2.s || !y2.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
+          y2.c = y2.e = y2.s = null;
+        } else {
+          y2.s *= x2.s;
+          if (!xc || !yc) {
+            y2.c = y2.e = null;
           } else {
-            seenRelationIds[relation.id] = way.id;
+            y2.c = [0];
+            y2.e = 0;
           }
-        });
-      });
-      if (sharedRelation) return "relation";
+        }
+        return y2;
+      }
+      e3 = bitFloor(x2.e / LOG_BASE) + bitFloor(y2.e / LOG_BASE);
+      y2.s *= x2.s;
+      xcL = xc.length;
+      ycL = yc.length;
+      if (xcL < ycL) {
+        zc = xc;
+        xc = yc;
+        yc = zc;
+        i3 = xcL;
+        xcL = ycL;
+        ycL = i3;
+      }
+      for (i3 = xcL + ycL, zc = []; i3--; zc.push(0)) ;
+      base = BASE;
+      sqrtBase = SQRT_BASE;
+      for (i3 = ycL; --i3 >= 0; ) {
+        c2 = 0;
+        ylo = yc[i3] % sqrtBase;
+        yhi = yc[i3] / sqrtBase | 0;
+        for (k2 = xcL, j2 = i3 + k2; j2 > i3; ) {
+          xlo = xc[--k2] % sqrtBase;
+          xhi = xc[k2] / sqrtBase | 0;
+          m2 = yhi * xlo + xhi * ylo;
+          xlo = ylo * xlo + m2 % sqrtBase * sqrtBase + zc[j2] + c2;
+          c2 = (xlo / base | 0) + (m2 / sqrtBase | 0) + yhi * xhi;
+          zc[j2--] = xlo % base;
+        }
+        zc[j2] = c2;
+      }
+      if (c2) {
+        ++e3;
+      } else {
+        zc.splice(0, 1);
+      }
+      return normalise(y2, zc, e3);
     };
-    action.limitWays = function(val) {
-      if (!arguments.length) return wayIds;
-      wayIds = val;
-      return action;
+    P2.negated = function() {
+      var x2 = new BigNumber2(this);
+      x2.s = -x2.s || null;
+      return x2;
     };
-    return action;
-  }
-
-  // modules/actions/extract.js
-  function actionExtract(entityID, projection2) {
-    var extractedNodeID;
-    var action = function(graph) {
-      var entity = graph.entity(entityID);
-      if (entity.type === "node") {
-        return extractFromNode(entity, graph);
+    P2.plus = function(y2, b2) {
+      var t2, x2 = this, a2 = x2.s;
+      y2 = new BigNumber2(y2, b2);
+      b2 = y2.s;
+      if (!a2 || !b2) return new BigNumber2(NaN);
+      if (a2 != b2) {
+        y2.s = -b2;
+        return x2.minus(y2);
       }
-      return extractFromWayOrRelation(entity, graph);
-    };
-    function extractFromNode(node, graph) {
-      extractedNodeID = node.id;
-      var replacement = osmNode({ loc: node.loc });
-      graph = graph.replace(replacement);
-      graph = graph.parentWays(node).reduce(function(accGraph, parentWay) {
-        return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
-      }, graph);
-      return graph.parentRelations(node).reduce(function(accGraph, parentRel) {
-        return accGraph.replace(parentRel.replaceMember(node, replacement));
-      }, graph);
-    }
-    function extractFromWayOrRelation(entity, graph) {
-      var fromGeometry = entity.geometry(graph);
-      var keysToCopyAndRetain = ["source", "wheelchair"];
-      var keysToRetain = ["area"];
-      var buildingKeysToRetain = ["architect", "building", "height", "layer", "nycdoitt:bin"];
-      var extractedLoc = path_default(projection2).centroid(entity.asGeoJSON(graph));
-      extractedLoc = extractedLoc && projection2.invert(extractedLoc);
-      if (!extractedLoc || !isFinite(extractedLoc[0]) || !isFinite(extractedLoc[1])) {
-        extractedLoc = entity.extent(graph).center();
+      var xe2 = x2.e / LOG_BASE, ye2 = y2.e / LOG_BASE, xc = x2.c, yc = y2.c;
+      if (!xe2 || !ye2) {
+        if (!xc || !yc) return new BigNumber2(a2 / 0);
+        if (!xc[0] || !yc[0]) return yc[0] ? y2 : new BigNumber2(xc[0] ? x2 : a2 * 0);
       }
-      var indoorAreaValues = {
-        area: true,
-        corridor: true,
-        elevator: true,
-        level: true,
-        room: true
-      };
-      var isBuilding = entity.tags.building && entity.tags.building !== "no" || entity.tags["building:part"] && entity.tags["building:part"] !== "no";
-      var isIndoorArea = fromGeometry === "area" && entity.tags.indoor && indoorAreaValues[entity.tags.indoor];
-      var entityTags = Object.assign({}, entity.tags);
-      var pointTags = {};
-      for (var key in entityTags) {
-        if (entity.type === "relation" && key === "type") {
-          continue;
-        }
-        if (keysToRetain.indexOf(key) !== -1) {
-          continue;
-        }
-        if (isBuilding) {
-          if (buildingKeysToRetain.indexOf(key) !== -1 || key.match(/^building:.{1,}/) || key.match(/^roof:.{1,}/)) continue;
-        }
-        if (isIndoorArea && key === "indoor") {
-          continue;
-        }
-        pointTags[key] = entityTags[key];
-        if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
-          continue;
-        } else if (isIndoorArea && key === "level") {
-          continue;
+      xe2 = bitFloor(xe2);
+      ye2 = bitFloor(ye2);
+      xc = xc.slice();
+      if (a2 = xe2 - ye2) {
+        if (a2 > 0) {
+          ye2 = xe2;
+          t2 = yc;
+        } else {
+          a2 = -a2;
+          t2 = xc;
         }
-        delete entityTags[key];
+        t2.reverse();
+        for (; a2--; t2.push(0)) ;
+        t2.reverse();
       }
-      if (!isBuilding && !isIndoorArea && fromGeometry === "area") {
-        entityTags.area = "yes";
+      a2 = xc.length;
+      b2 = yc.length;
+      if (a2 - b2 < 0) {
+        t2 = yc;
+        yc = xc;
+        xc = t2;
+        b2 = a2;
       }
-      var replacement = osmNode({ loc: extractedLoc, tags: pointTags });
-      graph = graph.replace(replacement);
-      extractedNodeID = replacement.id;
-      return graph.replace(entity.update({ tags: entityTags }));
-    }
-    action.getExtractedNodeID = function() {
-      return extractedNodeID;
+      for (a2 = 0; b2; ) {
+        a2 = (xc[--b2] = xc[b2] + yc[b2] + a2) / BASE | 0;
+        xc[b2] = BASE === xc[b2] ? 0 : xc[b2] % BASE;
+      }
+      if (a2) {
+        xc = [a2].concat(xc);
+        ++ye2;
+      }
+      return normalise(y2, xc, ye2);
     };
-    return action;
-  }
-
-  // modules/actions/join.js
-  function actionJoin(ids) {
-    function groupEntitiesByGeometry(graph) {
-      var entities = ids.map(function(id2) {
-        return graph.entity(id2);
-      });
-      return Object.assign(
-        { line: [] },
-        utilArrayGroupBy(entities, function(entity) {
-          return entity.geometry(graph);
-        })
-      );
-    }
-    var action = function(graph) {
-      var ways = ids.map(graph.entity, graph);
-      var survivorID = utilOldestID(ways.map((way) => way.id));
-      ways.sort(function(a2, b2) {
-        var aSided = a2.isSided();
-        var bSided = b2.isSided();
-        return aSided && !bSided ? -1 : bSided && !aSided ? 1 : 0;
-      });
-      var sequences = osmJoinWays(ways, graph);
-      var joined = sequences[0];
-      graph = sequences.actions.reduce(function(g3, action2) {
-        return action2(g3);
-      }, graph);
-      var survivor = graph.entity(survivorID);
-      survivor = survivor.update({ nodes: joined.nodes.map(function(n3) {
-        return n3.id;
-      }) });
-      graph = graph.replace(survivor);
-      joined.forEach(function(way) {
-        if (way.id === survivorID) return;
-        graph.parentRelations(way).forEach(function(parent) {
-          graph = graph.replace(parent.replaceMember(way, survivor));
-        });
-        survivor = survivor.mergeTags(way.tags);
-        graph = graph.replace(survivor);
-        graph = actionDeleteWay(way.id)(graph);
-      });
-      function checkForSimpleMultipolygon() {
-        if (!survivor.isClosed()) return;
-        var multipolygons = graph.parentMultipolygons(survivor).filter(function(multipolygon2) {
-          return multipolygon2.members.length === 1;
-        });
-        if (multipolygons.length !== 1) return;
-        var multipolygon = multipolygons[0];
-        for (var key in survivor.tags) {
-          if (multipolygon.tags[key] && // don't collapse if tags cannot be cleanly merged
-          multipolygon.tags[key] !== survivor.tags[key]) return;
-        }
-        survivor = survivor.mergeTags(multipolygon.tags);
-        graph = graph.replace(survivor);
-        graph = actionDeleteRelation(
-          multipolygon.id,
-          true
-          /* allow untagged members */
-        )(graph);
-        var tags = Object.assign({}, survivor.tags);
-        if (survivor.geometry(graph) !== "area") {
-          tags.area = "yes";
-        }
-        delete tags.type;
-        survivor = survivor.update({ tags });
-        graph = graph.replace(survivor);
+    P2.precision = P2.sd = function(sd, rm) {
+      var c2, n3, v2, x2 = this;
+      if (sd != null && sd !== !!sd) {
+        intCheck(sd, 1, MAX);
+        if (rm == null) rm = ROUNDING_MODE;
+        else intCheck(rm, 0, 8);
+        return round(new BigNumber2(x2), sd, rm);
+      }
+      if (!(c2 = x2.c)) return null;
+      v2 = c2.length - 1;
+      n3 = v2 * LOG_BASE + 1;
+      if (v2 = c2[v2]) {
+        for (; v2 % 10 == 0; v2 /= 10, n3--) ;
+        for (v2 = c2[0]; v2 >= 10; v2 /= 10, n3++) ;
       }
-      checkForSimpleMultipolygon();
-      return graph;
+      if (sd && x2.e + 1 > n3) n3 = x2.e + 1;
+      return n3;
     };
-    action.resultingWayNodesLength = function(graph) {
-      return ids.reduce(function(count, id2) {
-        return count + graph.entity(id2).nodes.length;
-      }, 0) - ids.length - 1;
+    P2.shiftedBy = function(k2) {
+      intCheck(k2, -MAX_SAFE_INTEGER3, MAX_SAFE_INTEGER3);
+      return this.times("1e" + k2);
     };
-    action.disabled = function(graph) {
-      var geometries = groupEntitiesByGeometry(graph);
-      if (ids.length < 2 || ids.length !== geometries.line.length) {
-        return "not_eligible";
-      }
-      var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
-      if (joined.length > 1) {
-        return "not_adjacent";
-      }
-      var i3;
-      var sortedParentRelations = function(id2) {
-        return graph.parentRelations(graph.entity(id2)).filter((rel) => !rel.isRestriction() && !rel.isConnectivity()).sort((a2, b2) => a2.id - b2.id);
-      };
-      var relsA = sortedParentRelations(ids[0]);
-      for (i3 = 1; i3 < ids.length; i3++) {
-        var relsB = sortedParentRelations(ids[i3]);
-        if (!utilArrayIdentical(relsA, relsB)) {
-          return "conflicting_relations";
-        }
-      }
-      for (i3 = 0; i3 < ids.length - 1; i3++) {
-        for (var j2 = i3 + 1; j2 < ids.length; j2++) {
-          var path1 = graph.childNodes(graph.entity(ids[i3])).map(function(e3) {
-            return e3.loc;
-          });
-          var path2 = graph.childNodes(graph.entity(ids[j2])).map(function(e3) {
-            return e3.loc;
-          });
-          var intersections = geoPathIntersections(path1, path2);
-          var common = utilArrayIntersection(
-            joined[0].nodes.map(function(n3) {
-              return n3.loc.toString();
-            }),
-            intersections.map(function(n3) {
-              return n3.toString();
-            })
-          );
-          if (common.length !== intersections.length) {
-            return "paths_intersect";
-          }
-        }
+    P2.squareRoot = P2.sqrt = function() {
+      var m2, n3, r2, rep, t2, x2 = this, c2 = x2.c, s2 = x2.s, e3 = x2.e, dp = DECIMAL_PLACES + 4, half = new BigNumber2("0.5");
+      if (s2 !== 1 || !c2 || !c2[0]) {
+        return new BigNumber2(!s2 || s2 < 0 && (!c2 || c2[0]) ? NaN : c2 ? x2 : 1 / 0);
       }
-      var nodeIds = joined[0].nodes.map(function(n3) {
-        return n3.id;
-      }).slice(1, -1);
-      var relation;
-      var tags = {};
-      var conflicting = false;
-      joined[0].forEach(function(way) {
-        var parents = graph.parentRelations(way);
-        parents.forEach(function(parent) {
-          if ((parent.isRestriction() || parent.isConnectivity()) && parent.members.some(function(m2) {
-            return nodeIds.indexOf(m2.id) >= 0;
-          })) {
-            relation = parent;
-          }
-        });
-        for (var k2 in way.tags) {
-          if (!(k2 in tags)) {
-            tags[k2] = way.tags[k2];
-          } else if (tags[k2] && osmIsInterestingTag(k2) && tags[k2] !== way.tags[k2]) {
-            conflicting = true;
-          }
+      s2 = Math.sqrt(+valueOf(x2));
+      if (s2 == 0 || s2 == 1 / 0) {
+        n3 = coeffToString(c2);
+        if ((n3.length + e3) % 2 == 0) n3 += "0";
+        s2 = Math.sqrt(+n3);
+        e3 = bitFloor((e3 + 1) / 2) - (e3 < 0 || e3 % 2);
+        if (s2 == 1 / 0) {
+          n3 = "5e" + e3;
+        } else {
+          n3 = s2.toExponential();
+          n3 = n3.slice(0, n3.indexOf("e") + 1) + e3;
         }
-      });
-      if (relation) {
-        return relation.isRestriction() ? "restriction" : "connectivity";
-      }
-      if (conflicting) {
-        return "conflicting_tags";
+        r2 = new BigNumber2(n3);
+      } else {
+        r2 = new BigNumber2(s2 + "");
       }
-    };
-    return action;
-  }
-
-  // modules/actions/merge.js
-  function actionMerge(ids) {
-    function groupEntitiesByGeometry(graph) {
-      var entities = ids.map(function(id2) {
-        return graph.entity(id2);
-      });
-      return Object.assign(
-        { point: [], area: [], line: [], relation: [] },
-        utilArrayGroupBy(entities, function(entity) {
-          return entity.geometry(graph);
-        })
-      );
-    }
-    var action = function(graph) {
-      var geometries = groupEntitiesByGeometry(graph);
-      var target = geometries.area[0] || geometries.line[0];
-      var points = geometries.point;
-      points.forEach(function(point) {
-        target = target.mergeTags(point.tags);
-        graph = graph.replace(target);
-        graph.parentRelations(point).forEach(function(parent) {
-          graph = graph.replace(parent.replaceMember(point, target));
-        });
-        var nodes = utilArrayUniq(graph.childNodes(target));
-        var removeNode = point;
-        if (!point.isNew()) {
-          var inserted = false;
-          var canBeReplaced = function(node2) {
-            return !(graph.parentWays(node2).length > 1 || graph.parentRelations(node2).length);
-          };
-          var replaceNode = function(node2) {
-            graph = graph.replace(point.update({ tags: node2.tags, loc: node2.loc }));
-            target = target.replaceNode(node2.id, point.id);
-            graph = graph.replace(target);
-            removeNode = node2;
-            inserted = true;
-          };
-          var i3;
-          var node;
-          for (i3 = 0; i3 < nodes.length; i3++) {
-            node = nodes[i3];
-            if (canBeReplaced(node) && node.isNew()) {
-              replaceNode(node);
-              break;
-            }
-          }
-          if (!inserted && point.hasInterestingTags()) {
-            for (i3 = 0; i3 < nodes.length; i3++) {
-              node = nodes[i3];
-              if (canBeReplaced(node) && !node.hasInterestingTags()) {
-                replaceNode(node);
-                break;
-              }
-            }
-            if (!inserted) {
-              for (i3 = 0; i3 < nodes.length; i3++) {
-                node = nodes[i3];
-                if (canBeReplaced(node) && utilCompareIDs(point.id, node.id) < 0) {
-                  replaceNode(node);
+      if (r2.c[0]) {
+        e3 = r2.e;
+        s2 = e3 + dp;
+        if (s2 < 3) s2 = 0;
+        for (; ; ) {
+          t2 = r2;
+          r2 = half.times(t2.plus(div(x2, t2, dp, 1)));
+          if (coeffToString(t2.c).slice(0, s2) === (n3 = coeffToString(r2.c)).slice(0, s2)) {
+            if (r2.e < e3) --s2;
+            n3 = n3.slice(s2 - 3, s2 + 1);
+            if (n3 == "9999" || !rep && n3 == "4999") {
+              if (!rep) {
+                round(t2, t2.e + DECIMAL_PLACES + 2, 0);
+                if (t2.times(t2).eq(x2)) {
+                  r2 = t2;
                   break;
                 }
               }
+              dp += 4;
+              s2 += 4;
+              rep = 1;
+            } else {
+              if (!+n3 || !+n3.slice(1) && n3.charAt(0) == "5") {
+                round(r2, r2.e + DECIMAL_PLACES + 2, 1);
+                m2 = !r2.times(r2).eq(x2);
+              }
+              break;
             }
           }
         }
-        graph = graph.remove(removeNode);
-      });
-      if (target.tags.area === "yes") {
-        var tags = Object.assign({}, target.tags);
-        delete tags.area;
-        if (osmTagSuggestingArea(tags)) {
-          target = target.update({ tags });
-          graph = graph.replace(target);
-        }
-      }
-      return graph;
-    };
-    action.disabled = function(graph) {
-      var geometries = groupEntitiesByGeometry(graph);
-      if (geometries.point.length === 0 || geometries.area.length + geometries.line.length !== 1 || geometries.relation.length !== 0) {
-        return "not_eligible";
       }
+      return round(r2, r2.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m2);
     };
-    return action;
-  }
-
-  // modules/actions/merge_nodes.js
-  function actionMergeNodes(nodeIDs, loc) {
-    function chooseLoc(graph) {
-      if (!nodeIDs.length) return null;
-      var sum = [0, 0];
-      var interestingCount = 0;
-      var interestingLoc;
-      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
-        var node = graph.entity(nodeIDs[i3]);
-        if (node.hasInterestingTags()) {
-          interestingLoc = ++interestingCount === 1 ? node.loc : null;
-        }
-        sum = geoVecAdd(sum, node.loc);
-      }
-      return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
-    }
-    var action = function(graph) {
-      if (nodeIDs.length < 2) return graph;
-      var toLoc = loc;
-      if (!toLoc) {
-        toLoc = chooseLoc(graph);
-      }
-      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
-        var node = graph.entity(nodeIDs[i3]);
-        if (node.loc !== toLoc) {
-          graph = graph.replace(node.move(toLoc));
-        }
+    P2.toExponential = function(dp, rm) {
+      if (dp != null) {
+        intCheck(dp, 0, MAX);
+        dp++;
       }
-      return actionConnect(nodeIDs)(graph);
+      return format2(this, dp, rm, 1);
     };
-    action.disabled = function(graph) {
-      if (nodeIDs.length < 2) return "not_eligible";
-      for (var i3 = 0; i3 < nodeIDs.length; i3++) {
-        var entity = graph.entity(nodeIDs[i3]);
-        if (entity.type !== "node") return "not_eligible";
+    P2.toFixed = function(dp, rm) {
+      if (dp != null) {
+        intCheck(dp, 0, MAX);
+        dp = dp + this.e + 1;
       }
-      return actionConnect(nodeIDs).disabled(graph);
+      return format2(this, dp, rm);
     };
-    return action;
-  }
-
-  // modules/osm/changeset.js
-  function osmChangeset() {
-    if (!(this instanceof osmChangeset)) {
-      return new osmChangeset().initialize(arguments);
-    } else if (arguments.length) {
-      this.initialize(arguments);
-    }
-  }
-  osmEntity.changeset = osmChangeset;
-  osmChangeset.prototype = Object.create(osmEntity.prototype);
-  Object.assign(osmChangeset.prototype, {
-    type: "changeset",
-    extent: function() {
-      return new geoExtent();
-    },
-    geometry: function() {
-      return "changeset";
-    },
-    asJXON: function() {
-      return {
-        osm: {
-          changeset: {
-            tag: Object.keys(this.tags).map(function(k2) {
-              return { "@k": k2, "@v": this.tags[k2] };
-            }, this),
-            "@version": 0.6,
-            "@generator": "iD"
-          }
-        }
-      };
-    },
-    // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
-    // XML. Returns a string.
-    osmChangeJXON: function(changes) {
-      var changeset_id = this.id;
-      function nest(x2, order) {
-        var groups = {};
-        for (var i3 = 0; i3 < x2.length; i3++) {
-          var tagName = Object.keys(x2[i3])[0];
-          if (!groups[tagName]) groups[tagName] = [];
-          groups[tagName].push(x2[i3][tagName]);
+    P2.toFormat = function(dp, rm, format3) {
+      var str, x2 = this;
+      if (format3 == null) {
+        if (dp != null && rm && typeof rm == "object") {
+          format3 = rm;
+          rm = null;
+        } else if (dp && typeof dp == "object") {
+          format3 = dp;
+          dp = rm = null;
+        } else {
+          format3 = FORMAT;
         }
-        var ordered = {};
-        order.forEach(function(o2) {
-          if (groups[o2]) ordered[o2] = groups[o2];
-        });
-        return ordered;
+      } else if (typeof format3 != "object") {
+        throw Error(bignumberError + "Argument not an object: " + format3);
       }
-      function sort(changes2) {
-        function resolve(item) {
-          return relations.find(function(relation2) {
-            return item.keyAttributes.type === "relation" && item.keyAttributes.ref === relation2["@id"];
-          });
+      str = x2.toFixed(dp, rm);
+      if (x2.c) {
+        var i3, arr = str.split("."), g1 = +format3.groupSize, g22 = +format3.secondaryGroupSize, groupSeparator = format3.groupSeparator || "", intPart = arr[0], fractionPart = arr[1], isNeg = x2.s < 0, intDigits = isNeg ? intPart.slice(1) : intPart, len = intDigits.length;
+        if (g22) {
+          i3 = g1;
+          g1 = g22;
+          g22 = i3;
+          len -= i3;
         }
-        function isNew(item) {
-          return !sorted[item["@id"]] && !processing.find(function(proc) {
-            return proc["@id"] === item["@id"];
-          });
+        if (g1 > 0 && len > 0) {
+          i3 = len % g1 || g1;
+          intPart = intDigits.substr(0, i3);
+          for (; i3 < len; i3 += g1) intPart += groupSeparator + intDigits.substr(i3, g1);
+          if (g22 > 0) intPart += groupSeparator + intDigits.slice(i3);
+          if (isNeg) intPart = "-" + intPart;
         }
-        var processing = [];
-        var sorted = {};
-        var relations = changes2.relation;
-        if (!relations) return changes2;
-        for (var i3 = 0; i3 < relations.length; i3++) {
-          var relation = relations[i3];
-          if (!sorted[relation["@id"]]) {
-            processing.push(relation);
-          }
-          while (processing.length > 0) {
-            var next = processing[0], deps = next.member.map(resolve).filter(Boolean).filter(isNew);
-            if (deps.length === 0) {
-              sorted[next["@id"]] = next;
-              processing.shift();
-            } else {
-              processing = deps.concat(processing);
-            }
-          }
+        str = fractionPart ? intPart + (format3.decimalSeparator || "") + ((g22 = +format3.fractionGroupSize) ? fractionPart.replace(
+          new RegExp("\\d{" + g22 + "}\\B", "g"),
+          "$&" + (format3.fractionGroupSeparator || "")
+        ) : fractionPart) : intPart;
+      }
+      return (format3.prefix || "") + str + (format3.suffix || "");
+    };
+    P2.toFraction = function(md) {
+      var d2, d0, d1, d22, e3, exp2, n3, n0, n1, q2, r2, s2, x2 = this, xc = x2.c;
+      if (md != null) {
+        n3 = new BigNumber2(md);
+        if (!n3.isInteger() && (n3.c || n3.s !== 1) || n3.lt(ONE)) {
+          throw Error(bignumberError + "Argument " + (n3.isInteger() ? "out of range: " : "not an integer: ") + valueOf(n3));
         }
-        changes2.relation = Object.values(sorted);
-        return changes2;
       }
-      function rep(entity) {
-        return entity.asJXON(changeset_id);
+      if (!xc) return new BigNumber2(x2);
+      d2 = new BigNumber2(ONE);
+      n1 = d0 = new BigNumber2(ONE);
+      d1 = n0 = new BigNumber2(ONE);
+      s2 = coeffToString(xc);
+      e3 = d2.e = s2.length - x2.e - 1;
+      d2.c[0] = POWS_TEN[(exp2 = e3 % LOG_BASE) < 0 ? LOG_BASE + exp2 : exp2];
+      md = !md || n3.comparedTo(d2) > 0 ? e3 > 0 ? d2 : n1 : n3;
+      exp2 = MAX_EXP;
+      MAX_EXP = 1 / 0;
+      n3 = new BigNumber2(s2);
+      n0.c[0] = 0;
+      for (; ; ) {
+        q2 = div(n3, d2, 0, 1);
+        d22 = d0.plus(q2.times(d1));
+        if (d22.comparedTo(md) == 1) break;
+        d0 = d1;
+        d1 = d22;
+        n1 = n0.plus(q2.times(d22 = n1));
+        n0 = d22;
+        d2 = n3.minus(q2.times(d22 = d2));
+        n3 = d22;
       }
-      return {
-        osmChange: {
-          "@version": 0.6,
-          "@generator": "iD",
-          "create": sort(nest(changes.created.map(rep), ["node", "way", "relation"])),
-          "modify": nest(changes.modified.map(rep), ["node", "way", "relation"]),
-          "delete": Object.assign(nest(changes.deleted.map(rep), ["relation", "way", "node"]), { "@if-unused": true })
+      d22 = div(md.minus(d0), d1, 0, 1);
+      n0 = n0.plus(d22.times(n1));
+      d0 = d0.plus(d22.times(d1));
+      n0.s = n1.s = x2.s;
+      e3 = e3 * 2;
+      r2 = div(n1, d1, e3, ROUNDING_MODE).minus(x2).abs().comparedTo(
+        div(n0, d0, e3, ROUNDING_MODE).minus(x2).abs()
+      ) < 1 ? [n1, d1] : [n0, d0];
+      MAX_EXP = exp2;
+      return r2;
+    };
+    P2.toNumber = function() {
+      return +valueOf(this);
+    };
+    P2.toPrecision = function(sd, rm) {
+      if (sd != null) intCheck(sd, 1, MAX);
+      return format2(this, sd, rm, 2);
+    };
+    P2.toString = function(b2) {
+      var str, n3 = this, s2 = n3.s, e3 = n3.e;
+      if (e3 === null) {
+        if (s2) {
+          str = "Infinity";
+          if (s2 < 0) str = "-" + str;
+        } else {
+          str = "NaN";
         }
-      };
-    },
-    asGeoJSON: function() {
-      return {};
+      } else {
+        if (b2 == null) {
+          str = e3 <= TO_EXP_NEG || e3 >= TO_EXP_POS ? toExponential(coeffToString(n3.c), e3) : toFixedPoint(coeffToString(n3.c), e3, "0");
+        } else if (b2 === 10 && alphabetHasNormalDecimalDigits) {
+          n3 = round(new BigNumber2(n3), DECIMAL_PLACES + e3 + 1, ROUNDING_MODE);
+          str = toFixedPoint(coeffToString(n3.c), n3.e, "0");
+        } else {
+          intCheck(b2, 2, ALPHABET.length, "Base");
+          str = convertBase(toFixedPoint(coeffToString(n3.c), e3, "0"), 10, b2, s2, true);
+        }
+        if (s2 < 0 && n3.c[0]) str = "-" + str;
+      }
+      return str;
+    };
+    P2.valueOf = P2.toJSON = function() {
+      return valueOf(this);
+    };
+    P2._isBigNumber = true;
+    P2[Symbol.toStringTag] = "BigNumber";
+    P2[Symbol.for("nodejs.util.inspect.custom")] = P2.valueOf;
+    if (configObject != null) BigNumber2.set(configObject);
+    return BigNumber2;
+  }
+  function bitFloor(n3) {
+    var i3 = n3 | 0;
+    return n3 > 0 || n3 === i3 ? i3 : i3 - 1;
+  }
+  function coeffToString(a2) {
+    var s2, z2, i3 = 1, j2 = a2.length, r2 = a2[0] + "";
+    for (; i3 < j2; ) {
+      s2 = a2[i3++] + "";
+      z2 = LOG_BASE - s2.length;
+      for (; z2--; s2 = "0" + s2) ;
+      r2 += s2;
     }
-  });
-
-  // modules/osm/note.js
-  function osmNote() {
-    if (!(this instanceof osmNote)) {
-      return new osmNote().initialize(arguments);
-    } else if (arguments.length) {
-      this.initialize(arguments);
+    for (j2 = r2.length; r2.charCodeAt(--j2) === 48; ) ;
+    return r2.slice(0, j2 + 1 || 1);
+  }
+  function compare(x2, y2) {
+    var a2, b2, xc = x2.c, yc = y2.c, i3 = x2.s, j2 = y2.s, k2 = x2.e, l2 = y2.e;
+    if (!i3 || !j2) return null;
+    a2 = xc && !xc[0];
+    b2 = yc && !yc[0];
+    if (a2 || b2) return a2 ? b2 ? 0 : -j2 : i3;
+    if (i3 != j2) return i3;
+    a2 = i3 < 0;
+    b2 = k2 == l2;
+    if (!xc || !yc) return b2 ? 0 : !xc ^ a2 ? 1 : -1;
+    if (!b2) return k2 > l2 ^ a2 ? 1 : -1;
+    j2 = (k2 = xc.length) < (l2 = yc.length) ? k2 : l2;
+    for (i3 = 0; i3 < j2; i3++) if (xc[i3] != yc[i3]) return xc[i3] > yc[i3] ^ a2 ? 1 : -1;
+    return k2 == l2 ? 0 : k2 > l2 ^ a2 ? 1 : -1;
+  }
+  function intCheck(n3, min3, max3, name) {
+    if (n3 < min3 || n3 > max3 || n3 !== mathfloor(n3)) {
+      throw Error(bignumberError + (name || "Argument") + (typeof n3 == "number" ? n3 < min3 || n3 > max3 ? " out of range: " : " not an integer: " : " not a primitive number: ") + String(n3));
     }
   }
-  osmNote.id = function() {
-    return osmNote.id.next--;
-  };
-  osmNote.id.next = -1;
-  Object.assign(osmNote.prototype, {
-    type: "note",
-    initialize: function(sources) {
-      for (var i3 = 0; i3 < sources.length; ++i3) {
-        var source = sources[i3];
-        for (var prop in source) {
-          if (Object.prototype.hasOwnProperty.call(source, prop)) {
-            if (source[prop] === void 0) {
-              delete this[prop];
-            } else {
-              this[prop] = source[prop];
-            }
-          }
-        }
-      }
-      if (!this.id) {
-        this.id = osmNote.id().toString();
+  function isOdd(n3) {
+    var k2 = n3.c.length - 1;
+    return bitFloor(n3.e / LOG_BASE) == k2 && n3.c[k2] % 2 != 0;
+  }
+  function toExponential(str, e3) {
+    return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e3 < 0 ? "e" : "e+") + e3;
+  }
+  function toFixedPoint(str, e3, z2) {
+    var len, zs;
+    if (e3 < 0) {
+      for (zs = z2 + "."; ++e3; zs += z2) ;
+      str = zs + str;
+    } else {
+      len = str.length;
+      if (++e3 > len) {
+        for (zs = z2, e3 -= len; --e3; zs += z2) ;
+        str += zs;
+      } else if (e3 < len) {
+        str = str.slice(0, e3) + "." + str.slice(e3);
       }
-      return this;
-    },
-    extent: function() {
-      return new geoExtent(this.loc);
-    },
-    update: function(attrs) {
-      return osmNote(this, attrs);
-    },
-    isNew: function() {
-      return this.id < 0;
-    },
-    move: function(loc) {
-      return this.update({ loc });
     }
-  });
+    return str;
+  }
+  var BigNumber = clone();
+  var bignumber_default = BigNumber;
 
-  // modules/osm/relation.js
-  function osmRelation() {
-    if (!(this instanceof osmRelation)) {
-      return new osmRelation().initialize(arguments);
-    } else if (arguments.length) {
-      this.initialize(arguments);
+  // node_modules/splaytree-ts/dist/esm/index.js
+  var SplayTreeNode = class {
+    constructor(key) {
+      __publicField(this, "key");
+      __publicField(this, "left", null);
+      __publicField(this, "right", null);
+      this.key = key;
     }
-  }
-  osmEntity.relation = osmRelation;
-  osmRelation.prototype = Object.create(osmEntity.prototype);
-  osmRelation.creationOrder = function(a2, b2) {
-    var aId = parseInt(osmEntity.id.toOSM(a2.id), 10);
-    var bId = parseInt(osmEntity.id.toOSM(b2.id), 10);
-    if (aId < 0 || bId < 0) return aId - bId;
-    return bId - aId;
   };
-  Object.assign(osmRelation.prototype, {
-    type: "relation",
-    members: [],
-    copy: function(resolver, copies) {
-      if (copies[this.id]) return copies[this.id];
-      var copy2 = osmEntity.prototype.copy.call(this, resolver, copies);
-      var members = this.members.map(function(member) {
-        return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
-      });
-      copy2 = copy2.update({ members });
-      copies[this.id] = copy2;
-      return copy2;
-    },
-    extent: function(resolver, memo) {
-      return resolver.transient(this, "extent", function() {
-        if (memo && memo[this.id]) return geoExtent();
-        memo = memo || {};
-        memo[this.id] = true;
-        var extent = geoExtent();
-        for (var i3 = 0; i3 < this.members.length; i3++) {
-          var member = resolver.hasEntity(this.members[i3].id);
-          if (member) {
-            extent._extend(member.extent(resolver, memo));
+  var SplayTreeSetNode = class extends SplayTreeNode {
+    constructor(key) {
+      super(key);
+    }
+  };
+  var SplayTree = class {
+    constructor() {
+      __publicField(this, "size", 0);
+      __publicField(this, "modificationCount", 0);
+      __publicField(this, "splayCount", 0);
+    }
+    splay(key) {
+      const root3 = this.root;
+      if (root3 == null) {
+        this.compare(key, key);
+        return -1;
+      }
+      let right = null;
+      let newTreeRight = null;
+      let left = null;
+      let newTreeLeft = null;
+      let current = root3;
+      const compare2 = this.compare;
+      let comp;
+      while (true) {
+        comp = compare2(current.key, key);
+        if (comp > 0) {
+          let currentLeft = current.left;
+          if (currentLeft == null) break;
+          comp = compare2(currentLeft.key, key);
+          if (comp > 0) {
+            current.left = currentLeft.right;
+            currentLeft.right = current;
+            current = currentLeft;
+            currentLeft = current.left;
+            if (currentLeft == null) break;
+          }
+          if (right == null) {
+            newTreeRight = current;
+          } else {
+            right.left = current;
+          }
+          right = current;
+          current = currentLeft;
+        } else if (comp < 0) {
+          let currentRight = current.right;
+          if (currentRight == null) break;
+          comp = compare2(currentRight.key, key);
+          if (comp < 0) {
+            current.right = currentRight.left;
+            currentRight.left = current;
+            current = currentRight;
+            currentRight = current.right;
+            if (currentRight == null) break;
+          }
+          if (left == null) {
+            newTreeLeft = current;
+          } else {
+            left.right = current;
           }
+          left = current;
+          current = currentRight;
+        } else {
+          break;
         }
-        return extent;
-      });
-    },
-    geometry: function(graph) {
-      return graph.transient(this, "geometry", function() {
-        return this.isMultipolygon() ? "area" : "relation";
-      });
-    },
-    isDegenerate: function() {
-      return this.members.length === 0;
-    },
-    // Return an array of members, each extended with an 'index' property whose value
-    // is the member index.
-    indexedMembers: function() {
-      var result = new Array(this.members.length);
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        result[i3] = Object.assign({}, this.members[i3], { index: i3 });
       }
-      return result;
-    },
-    // Return the first member with the given role. A copy of the member object
-    // is returned, extended with an 'index' property whose value is the member index.
-    memberByRole: function(role) {
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        if (this.members[i3].role === role) {
-          return Object.assign({}, this.members[i3], { index: i3 });
-        }
+      if (left != null) {
+        left.right = current.left;
+        current.left = newTreeLeft;
       }
-    },
-    // Same as memberByRole, but returns all members with the given role
-    membersByRole: function(role) {
-      var result = [];
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        if (this.members[i3].role === role) {
-          result.push(Object.assign({}, this.members[i3], { index: i3 }));
-        }
+      if (right != null) {
+        right.left = current.right;
+        current.right = newTreeRight;
       }
-      return result;
-    },
-    // Return the first member with the given id. A copy of the member object
-    // is returned, extended with an 'index' property whose value is the member index.
-    memberById: function(id2) {
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        if (this.members[i3].id === id2) {
-          return Object.assign({}, this.members[i3], { index: i3 });
-        }
+      if (this.root !== current) {
+        this.root = current;
+        this.splayCount++;
       }
-    },
-    // Return the first member with the given id and role. A copy of the member object
-    // is returned, extended with an 'index' property whose value is the member index.
-    memberByIdAndRole: function(id2, role) {
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        if (this.members[i3].id === id2 && this.members[i3].role === role) {
-          return Object.assign({}, this.members[i3], { index: i3 });
-        }
+      return comp;
+    }
+    splayMin(node) {
+      let current = node;
+      let nextLeft = current.left;
+      while (nextLeft != null) {
+        const left = nextLeft;
+        current.left = left.right;
+        left.right = current;
+        current = left;
+        nextLeft = current.left;
       }
-    },
-    addMember: function(member, index) {
-      var members = this.members.slice();
-      members.splice(index === void 0 ? members.length : index, 0, member);
-      return this.update({ members });
-    },
-    updateMember: function(member, index) {
-      var members = this.members.slice();
-      members.splice(index, 1, Object.assign({}, members[index], member));
-      return this.update({ members });
-    },
-    removeMember: function(index) {
-      var members = this.members.slice();
-      members.splice(index, 1);
-      return this.update({ members });
-    },
-    removeMembersWithID: function(id2) {
-      var members = this.members.filter(function(m2) {
-        return m2.id !== id2;
-      });
-      return this.update({ members });
-    },
-    moveMember: function(fromIndex, toIndex) {
-      var members = this.members.slice();
-      members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
-      return this.update({ members });
-    },
-    // Wherever a member appears with id `needle.id`, replace it with a member
-    // with id `replacement.id`, type `replacement.type`, and the original role,
-    // By default, adding a duplicate member (by id and role) is prevented.
-    // Return an updated relation.
-    replaceMember: function(needle, replacement, keepDuplicates) {
-      if (!this.memberById(needle.id)) return this;
-      var members = [];
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        var member = this.members[i3];
-        if (member.id !== needle.id) {
-          members.push(member);
-        } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
-          members.push({ id: replacement.id, type: replacement.type, role: member.role });
-        }
+      return current;
+    }
+    splayMax(node) {
+      let current = node;
+      let nextRight = current.right;
+      while (nextRight != null) {
+        const right = nextRight;
+        current.right = right.left;
+        right.left = current;
+        current = right;
+        nextRight = current.right;
       }
-      return this.update({ members });
-    },
-    asJXON: function(changeset_id) {
-      var r2 = {
-        relation: {
-          "@id": this.osmId(),
-          "@version": this.version || 0,
-          member: this.members.map(function(member) {
-            return {
-              keyAttributes: {
-                type: member.type,
-                role: member.role,
-                ref: osmEntity.id.toOSM(member.id)
-              }
-            };
-          }, this),
-          tag: Object.keys(this.tags).map(function(k2) {
-            return { keyAttributes: { k: k2, v: this.tags[k2] } };
-          }, this)
-        }
-      };
-      if (changeset_id) {
-        r2.relation["@changeset"] = changeset_id;
+      return current;
+    }
+    _delete(key) {
+      if (this.root == null) return null;
+      const comp = this.splay(key);
+      if (comp != 0) return null;
+      let root3 = this.root;
+      const result = root3;
+      const left = root3.left;
+      this.size--;
+      if (left == null) {
+        this.root = root3.right;
+      } else {
+        const right = root3.right;
+        root3 = this.splayMax(left);
+        root3.right = right;
+        this.root = root3;
       }
-      return r2;
-    },
-    asGeoJSON: function(resolver) {
-      return resolver.transient(this, "GeoJSON", function() {
-        if (this.isMultipolygon()) {
-          return {
-            type: "MultiPolygon",
-            coordinates: this.multipolygon(resolver)
-          };
-        } else {
-          return {
-            type: "FeatureCollection",
-            properties: this.tags,
-            features: this.members.map(function(member) {
-              return Object.assign({ role: member.role }, resolver.entity(member.id).asGeoJSON(resolver));
-            })
-          };
-        }
-      });
-    },
-    area: function(resolver) {
-      return resolver.transient(this, "area", function() {
-        return area_default(this.asGeoJSON(resolver));
-      });
-    },
-    isMultipolygon: function() {
-      return this.tags.type === "multipolygon";
-    },
-    isComplete: function(resolver) {
-      for (var i3 = 0; i3 < this.members.length; i3++) {
-        if (!resolver.hasEntity(this.members[i3].id)) {
-          return false;
-        }
+      this.modificationCount++;
+      return result;
+    }
+    addNewRoot(node, comp) {
+      this.size++;
+      this.modificationCount++;
+      const root3 = this.root;
+      if (root3 == null) {
+        this.root = node;
+        return;
       }
-      return true;
-    },
-    hasFromViaTo: function() {
-      return this.members.some(function(m2) {
-        return m2.role === "from";
-      }) && this.members.some(function(m2) {
-        return m2.role === "via";
-      }) && this.members.some(function(m2) {
-        return m2.role === "to";
-      });
-    },
-    isRestriction: function() {
-      return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
-    },
-    isValidRestriction: function() {
-      if (!this.isRestriction()) return false;
-      var froms = this.members.filter(function(m2) {
-        return m2.role === "from";
-      });
-      var vias = this.members.filter(function(m2) {
-        return m2.role === "via";
-      });
-      var tos = this.members.filter(function(m2) {
-        return m2.role === "to";
-      });
-      if (froms.length !== 1 && this.tags.restriction !== "no_entry") return false;
-      if (froms.some(function(m2) {
-        return m2.type !== "way";
-      })) return false;
-      if (tos.length !== 1 && this.tags.restriction !== "no_exit") return false;
-      if (tos.some(function(m2) {
-        return m2.type !== "way";
-      })) return false;
-      if (vias.length === 0) return false;
-      if (vias.length > 1 && vias.some(function(m2) {
-        return m2.type !== "way";
-      })) return false;
-      return true;
-    },
-    isConnectivity: function() {
-      return !!(this.tags.type && this.tags.type.match(/^connectivity:?/));
-    },
-    // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
-    // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
-    //
-    // This corresponds to the structure needed for rendering a multipolygon path using a
-    // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
-    //
-    // In the case of invalid geometries, this function will still return a result which
-    // includes the nodes of all way members, but some Nds may be unclosed and some inner
-    // rings not matched with the intended outer ring.
-    //
-    multipolygon: function(resolver) {
-      var outers = this.members.filter(function(m2) {
-        return "outer" === (m2.role || "outer");
-      });
-      var inners = this.members.filter(function(m2) {
-        return "inner" === m2.role;
-      });
-      outers = osmJoinWays(outers, resolver);
-      inners = osmJoinWays(inners, resolver);
-      var sequenceToLineString = function(sequence) {
-        if (sequence.nodes.length > 2 && sequence.nodes[0] !== sequence.nodes[sequence.nodes.length - 1]) {
-          sequence.nodes.push(sequence.nodes[0]);
-        }
-        return sequence.nodes.map(function(node) {
-          return node.loc;
-        });
-      };
-      outers = outers.map(sequenceToLineString);
-      inners = inners.map(sequenceToLineString);
-      var result = outers.map(function(o3) {
-        return [area_default({ type: "Polygon", coordinates: [o3] }) > 2 * Math.PI ? o3.reverse() : o3];
-      });
-      function findOuter(inner2) {
-        var o3, outer;
-        for (o3 = 0; o3 < outers.length; o3++) {
-          outer = outers[o3];
-          if (geoPolygonContainsPolygon(outer, inner2)) {
-            return o3;
-          }
-        }
-        for (o3 = 0; o3 < outers.length; o3++) {
-          outer = outers[o3];
-          if (geoPolygonIntersectsPolygon(outer, inner2, false)) {
-            return o3;
-          }
-        }
+      if (comp < 0) {
+        node.left = root3;
+        node.right = root3.right;
+        root3.right = null;
+      } else {
+        node.right = root3;
+        node.left = root3.left;
+        root3.left = null;
       }
-      for (var i3 = 0; i3 < inners.length; i3++) {
-        var inner = inners[i3];
-        if (area_default({ type: "Polygon", coordinates: [inner] }) < 2 * Math.PI) {
-          inner = inner.reverse();
-        }
-        var o2 = findOuter(inners[i3]);
-        if (o2 !== void 0) {
-          result[o2].push(inners[i3]);
-        } else {
-          result.push([inners[i3]]);
+      this.root = node;
+    }
+    _first() {
+      const root3 = this.root;
+      if (root3 == null) return null;
+      this.root = this.splayMin(root3);
+      return this.root;
+    }
+    _last() {
+      const root3 = this.root;
+      if (root3 == null) return null;
+      this.root = this.splayMax(root3);
+      return this.root;
+    }
+    clear() {
+      this.root = null;
+      this.size = 0;
+      this.modificationCount++;
+    }
+    has(key) {
+      return this.validKey(key) && this.splay(key) == 0;
+    }
+    defaultCompare() {
+      return (a2, b2) => a2 < b2 ? -1 : a2 > b2 ? 1 : 0;
+    }
+    wrap() {
+      return {
+        getRoot: () => {
+          return this.root;
+        },
+        setRoot: (root3) => {
+          this.root = root3;
+        },
+        getSize: () => {
+          return this.size;
+        },
+        getModificationCount: () => {
+          return this.modificationCount;
+        },
+        getSplayCount: () => {
+          return this.splayCount;
+        },
+        setSplayCount: (count) => {
+          this.splayCount = count;
+        },
+        splay: (key) => {
+          return this.splay(key);
+        },
+        has: (key) => {
+          return this.has(key);
         }
+      };
+    }
+  };
+  var _a2, _b2;
+  var SplayTreeSet = class _SplayTreeSet extends SplayTree {
+    constructor(compare2, isValidKey) {
+      super();
+      __publicField(this, "root", null);
+      __publicField(this, "compare");
+      __publicField(this, "validKey");
+      __publicField(this, _a2, "[object Set]");
+      this.compare = compare2 != null ? compare2 : this.defaultCompare();
+      this.validKey = isValidKey != null ? isValidKey : (v2) => v2 != null && v2 != void 0;
+    }
+    delete(element) {
+      if (!this.validKey(element)) return false;
+      return this._delete(element) != null;
+    }
+    deleteAll(elements) {
+      for (const element of elements) {
+        this.delete(element);
       }
-      return result;
     }
-  });
-
-  // modules/osm/qa_item.js
-  var QAItem = class _QAItem {
-    constructor(loc, service, itemType, id2, props) {
-      this.loc = loc;
-      this.service = service.title;
-      this.itemType = itemType;
-      this.id = id2 ? id2 : "".concat(_QAItem.id());
-      this.update(props);
-      if (service && typeof service.getIcon === "function") {
-        this.icon = service.getIcon(itemType);
+    forEach(f2) {
+      const nodes = this[Symbol.iterator]();
+      let result;
+      while (result = nodes.next(), !result.done) {
+        f2(result.value, result.value, this);
       }
     }
-    update(props) {
-      const { loc, service, itemType, id: id2 } = this;
-      Object.keys(props).forEach((prop) => this[prop] = props[prop]);
-      this.loc = loc;
-      this.service = service;
-      this.itemType = itemType;
-      this.id = id2;
+    add(element) {
+      const compare2 = this.splay(element);
+      if (compare2 != 0) this.addNewRoot(new SplayTreeSetNode(element), compare2);
       return this;
     }
-    // Generic handling for newly created QAItems
-    static id() {
-      return this.nextId--;
+    addAndReturn(element) {
+      const compare2 = this.splay(element);
+      if (compare2 != 0) this.addNewRoot(new SplayTreeSetNode(element), compare2);
+      return this.root.key;
     }
-  };
-  QAItem.nextId = -1;
-
-  // modules/actions/split.js
-  function actionSplit(nodeIds, newWayIds) {
-    if (typeof nodeIds === "string") nodeIds = [nodeIds];
-    var _wayIDs;
-    var _keepHistoryOn = "longest";
-    const circularJunctions = ["roundabout", "circular"];
-    var _createdWayIDs = [];
-    function dist(graph, nA, nB) {
-      var locA = graph.entity(nA).loc;
-      var locB = graph.entity(nB).loc;
-      var epsilon3 = 1e-6;
-      return locA && locB ? geoSphericalDistance(locA, locB) : epsilon3;
+    addAll(elements) {
+      for (const element of elements) {
+        this.add(element);
+      }
     }
-    function splitArea(nodes, idxA, graph) {
-      var lengths = new Array(nodes.length);
-      var length2;
-      var i3;
-      var best = 0;
-      var idxB;
-      function wrap2(index) {
-        return utilWrap(index, nodes.length);
+    isEmpty() {
+      return this.root == null;
+    }
+    isNotEmpty() {
+      return this.root != null;
+    }
+    single() {
+      if (this.size == 0) throw "Bad state: No element";
+      if (this.size > 1) throw "Bad state: Too many element";
+      return this.root.key;
+    }
+    first() {
+      if (this.size == 0) throw "Bad state: No element";
+      return this._first().key;
+    }
+    last() {
+      if (this.size == 0) throw "Bad state: No element";
+      return this._last().key;
+    }
+    lastBefore(element) {
+      if (element == null) throw "Invalid arguments(s)";
+      if (this.root == null) return null;
+      const comp = this.splay(element);
+      if (comp < 0) return this.root.key;
+      let node = this.root.left;
+      if (node == null) return null;
+      let nodeRight = node.right;
+      while (nodeRight != null) {
+        node = nodeRight;
+        nodeRight = node.right;
       }
-      length2 = 0;
-      for (i3 = wrap2(idxA + 1); i3 !== idxA; i3 = wrap2(i3 + 1)) {
-        length2 += dist(graph, nodes[i3], nodes[wrap2(i3 - 1)]);
-        lengths[i3] = length2;
+      return node.key;
+    }
+    firstAfter(element) {
+      if (element == null) throw "Invalid arguments(s)";
+      if (this.root == null) return null;
+      const comp = this.splay(element);
+      if (comp > 0) return this.root.key;
+      let node = this.root.right;
+      if (node == null) return null;
+      let nodeLeft = node.left;
+      while (nodeLeft != null) {
+        node = nodeLeft;
+        nodeLeft = node.left;
       }
-      length2 = 0;
-      for (i3 = wrap2(idxA - 1); i3 !== idxA; i3 = wrap2(i3 - 1)) {
-        length2 += dist(graph, nodes[i3], nodes[wrap2(i3 + 1)]);
-        if (length2 < lengths[i3]) {
-          lengths[i3] = length2;
+      return node.key;
+    }
+    retainAll(elements) {
+      const retainSet = new _SplayTreeSet(this.compare, this.validKey);
+      const modificationCount = this.modificationCount;
+      for (const object of elements) {
+        if (modificationCount != this.modificationCount) {
+          throw "Concurrent modification during iteration.";
         }
-      }
-      for (i3 = 0; i3 < nodes.length; i3++) {
-        var cost = lengths[i3] / dist(graph, nodes[idxA], nodes[i3]);
-        if (cost > best) {
-          idxB = i3;
-          best = cost;
+        if (this.validKey(object) && this.splay(object) == 0) {
+          retainSet.add(this.root.key);
         }
       }
-      return idxB;
+      if (retainSet.size != this.size) {
+        this.root = retainSet.root;
+        this.size = retainSet.size;
+        this.modificationCount++;
+      }
     }
-    function totalLengthBetweenNodes(graph, nodes) {
-      var totalLength = 0;
-      for (var i3 = 0; i3 < nodes.length - 1; i3++) {
-        totalLength += dist(graph, nodes[i3], nodes[i3 + 1]);
+    lookup(object) {
+      if (!this.validKey(object)) return null;
+      const comp = this.splay(object);
+      if (comp != 0) return null;
+      return this.root.key;
+    }
+    intersection(other2) {
+      const result = new _SplayTreeSet(this.compare, this.validKey);
+      for (const element of this) {
+        if (other2.has(element)) result.add(element);
       }
-      return totalLength;
+      return result;
     }
-    function split(graph, nodeId, wayA, newWayId) {
-      var wayB = osmWay({ id: newWayId, tags: wayA.tags });
-      var nodesA;
-      var nodesB;
-      var isArea = wayA.isArea();
-      if (wayA.isClosed()) {
-        var nodes = wayA.nodes.slice(0, -1);
-        var idxA = nodes.indexOf(nodeId);
-        var idxB = splitArea(nodes, idxA, graph);
-        if (idxB < idxA) {
-          nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
-          nodesB = nodes.slice(idxB, idxA + 1);
-        } else {
-          nodesA = nodes.slice(idxA, idxB + 1);
-          nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
-        }
-      } else {
-        var idx = wayA.nodes.indexOf(nodeId, 1);
-        nodesA = wayA.nodes.slice(0, idx + 1);
-        nodesB = wayA.nodes.slice(idx);
+    difference(other2) {
+      const result = new _SplayTreeSet(this.compare, this.validKey);
+      for (const element of this) {
+        if (!other2.has(element)) result.add(element);
       }
-      var lengthA = totalLengthBetweenNodes(graph, nodesA);
-      var lengthB = totalLengthBetweenNodes(graph, nodesB);
-      if (_keepHistoryOn === "longest" && lengthB > lengthA) {
-        wayA = wayA.update({ nodes: nodesB });
-        wayB = wayB.update({ nodes: nodesA });
-        var temp = lengthA;
-        lengthA = lengthB;
-        lengthB = temp;
-      } else {
-        wayA = wayA.update({ nodes: nodesA });
-        wayB = wayB.update({ nodes: nodesB });
+      return result;
+    }
+    union(other2) {
+      const u2 = this.clone();
+      u2.addAll(other2);
+      return u2;
+    }
+    clone() {
+      const set4 = new _SplayTreeSet(this.compare, this.validKey);
+      set4.size = this.size;
+      set4.root = this.copyNode(this.root);
+      return set4;
+    }
+    copyNode(node) {
+      if (node == null) return null;
+      function copyChildren(node2, dest) {
+        let left;
+        let right;
+        do {
+          left = node2.left;
+          right = node2.right;
+          if (left != null) {
+            const newLeft = new SplayTreeSetNode(left.key);
+            dest.left = newLeft;
+            copyChildren(left, newLeft);
+          }
+          if (right != null) {
+            const newRight = new SplayTreeSetNode(right.key);
+            dest.right = newRight;
+            node2 = right;
+            dest = newRight;
+          }
+        } while (right != null);
       }
-      if (wayA.tags.step_count) {
-        var stepCount = Number(wayA.tags.step_count);
-        if (stepCount && // ensure a number
-        isFinite(stepCount) && // ensure positive
-        stepCount > 0 && // ensure integer
-        Math.round(stepCount) === stepCount) {
-          var tagsA = Object.assign({}, wayA.tags);
-          var tagsB = Object.assign({}, wayB.tags);
-          var ratioA = lengthA / (lengthA + lengthB);
-          var countA = Math.round(stepCount * ratioA);
-          tagsA.step_count = countA.toString();
-          tagsB.step_count = (stepCount - countA).toString();
-          wayA = wayA.update({ tags: tagsA });
-          wayB = wayB.update({ tags: tagsB });
-        }
+      const result = new SplayTreeSetNode(node.key);
+      copyChildren(node, result);
+      return result;
+    }
+    toSet() {
+      return this.clone();
+    }
+    entries() {
+      return new SplayTreeSetEntryIterableIterator(this.wrap());
+    }
+    keys() {
+      return this[Symbol.iterator]();
+    }
+    values() {
+      return this[Symbol.iterator]();
+    }
+    [(_b2 = Symbol.iterator, _a2 = Symbol.toStringTag, _b2)]() {
+      return new SplayTreeKeyIterableIterator(this.wrap());
+    }
+  };
+  var SplayTreeIterableIterator = class {
+    constructor(tree) {
+      __publicField(this, "tree");
+      __publicField(this, "path", new Array());
+      __publicField(this, "modificationCount", null);
+      __publicField(this, "splayCount");
+      this.tree = tree;
+      this.splayCount = tree.getSplayCount();
+    }
+    [Symbol.iterator]() {
+      return this;
+    }
+    next() {
+      if (this.moveNext()) return { done: false, value: this.current() };
+      return { done: true, value: null };
+    }
+    current() {
+      if (!this.path.length) return null;
+      const node = this.path[this.path.length - 1];
+      return this.getValue(node);
+    }
+    rebuildPath(key) {
+      this.path.splice(0, this.path.length);
+      this.tree.splay(key);
+      this.path.push(this.tree.getRoot());
+      this.splayCount = this.tree.getSplayCount();
+    }
+    findLeftMostDescendent(node) {
+      while (node != null) {
+        this.path.push(node);
+        node = node.left;
       }
-      graph = graph.replace(wayA);
-      graph = graph.replace(wayB);
-      graph.parentRelations(wayA).forEach(function(relation) {
-        if (relation.hasFromViaTo()) {
-          var f2 = relation.memberByRole("from");
-          var v2 = relation.membersByRole("via");
-          var t2 = relation.memberByRole("to");
-          var i3;
-          if (f2.id === wayA.id || t2.id === wayA.id) {
-            var keepB = false;
-            if (v2.length === 1 && v2[0].type === "node") {
-              keepB = wayB.contains(v2[0].id);
-            } else {
-              for (i3 = 0; i3 < v2.length; i3++) {
-                if (v2[i3].type === "way") {
-                  var wayVia = graph.hasEntity(v2[i3].id);
-                  if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
-                    keepB = true;
-                    break;
-                  }
-                }
-              }
-            }
-            if (keepB) {
-              relation = relation.replaceMember(wayA, wayB);
-              graph = graph.replace(relation);
-            }
-          } else {
-            for (i3 = 0; i3 < v2.length; i3++) {
-              if (v2[i3].type === "way" && v2[i3].id === wayA.id) {
-                graph = splitWayMember(graph, relation.id, wayA, wayB);
-              }
-            }
+    }
+    moveNext() {
+      if (this.modificationCount != this.tree.getModificationCount()) {
+        if (this.modificationCount == null) {
+          this.modificationCount = this.tree.getModificationCount();
+          let node2 = this.tree.getRoot();
+          while (node2 != null) {
+            this.path.push(node2);
+            node2 = node2.left;
           }
-        } else {
-          graph = splitWayMember(graph, relation.id, wayA, wayB);
+          return this.path.length > 0;
         }
-      });
-      if (isArea) {
-        var multipolygon = osmRelation({
-          tags: Object.assign({}, wayA.tags, { type: "multipolygon" }),
-          members: [
-            { id: wayA.id, role: "outer", type: "way" },
-            { id: wayB.id, role: "outer", type: "way" }
-          ]
-        });
-        graph = graph.replace(multipolygon);
-        graph = graph.replace(wayA.update({ tags: {} }));
-        graph = graph.replace(wayB.update({ tags: {} }));
+        throw "Concurrent modification during iteration.";
       }
-      _createdWayIDs.push(wayB.id);
-      return graph;
-    }
-    function splitWayMember(graph, relationId, wayA, wayB) {
-      function connects(way1, way2) {
-        if (way1.nodes.length < 2 || way2.nodes.length < 2) return false;
-        if (circularJunctions.includes(way1.tags.junction) && way1.isClosed()) {
-          return way1.nodes.some((nodeId) => nodeId === way2.nodes[0] || nodeId === way2.nodes[way2.nodes.length - 1]);
-        } else if (circularJunctions.includes(way2.tags.junction) && way2.isClosed()) {
-          return way2.nodes.some((nodeId) => nodeId === way1.nodes[0] || nodeId === way1.nodes[way1.nodes.length - 1]);
+      if (!this.path.length) return false;
+      if (this.splayCount != this.tree.getSplayCount()) {
+        this.rebuildPath(this.path[this.path.length - 1].key);
+      }
+      let node = this.path[this.path.length - 1];
+      let next = node.right;
+      if (next != null) {
+        while (next != null) {
+          this.path.push(next);
+          next = next.left;
         }
-        if (way1.nodes[0] === way2.nodes[0]) return true;
-        if (way1.nodes[0] === way2.nodes[way2.nodes.length - 1]) return true;
-        if (way1.nodes[way1.nodes.length - 1] === way2.nodes[way2.nodes.length - 1]) return true;
-        if (way1.nodes[way1.nodes.length - 1] === way2.nodes[0]) return true;
-        return false;
+        return true;
       }
-      let relation = graph.entity(relationId);
-      const insertMembers = [];
-      const members = relation.members;
-      for (let i3 = 0; i3 < members.length; i3++) {
-        const member = members[i3];
-        if (member.id === wayA.id) {
-          let wayAconnectsPrev = false;
-          let wayAconnectsNext = false;
-          let wayBconnectsPrev = false;
-          let wayBconnectsNext = false;
-          if (i3 > 0 && graph.hasEntity(members[i3 - 1].id)) {
-            const prevEntity = graph.entity(members[i3 - 1].id);
-            if (prevEntity.type === "way") {
-              wayAconnectsPrev = connects(prevEntity, wayA);
-              wayBconnectsPrev = connects(prevEntity, wayB);
-            }
-          }
-          if (i3 < members.length - 1 && graph.hasEntity(members[i3 + 1].id)) {
-            const nextEntity = graph.entity(members[i3 + 1].id);
-            if (nextEntity.type === "way") {
-              wayAconnectsNext = connects(nextEntity, wayA);
-              wayBconnectsNext = connects(nextEntity, wayB);
-            }
-          }
-          if (wayAconnectsPrev && !wayAconnectsNext || !wayBconnectsPrev && wayBconnectsNext && !(!wayAconnectsPrev && wayAconnectsNext)) {
-            insertMembers.push({ at: i3 + 1, role: member.role });
-            continue;
-          }
-          if (!wayAconnectsPrev && wayAconnectsNext || wayBconnectsPrev && !wayBconnectsNext && !(wayAconnectsPrev && !wayAconnectsNext)) {
-            insertMembers.push({ at: i3, role: member.role });
-            continue;
-          }
-          if (wayAconnectsPrev && wayBconnectsPrev && wayAconnectsNext && wayBconnectsNext) {
-            if (i3 > 2 && graph.hasEntity(members[i3 - 2].id)) {
-              const prev2Entity = graph.entity(members[i3 - 2].id);
-              if (connects(prev2Entity, wayA) && !connects(prev2Entity, wayB)) {
-                insertMembers.push({ at: i3, role: member.role });
-                continue;
-              }
-              if (connects(prev2Entity, wayB) && !connects(prev2Entity, wayA)) {
-                insertMembers.push({ at: i3 + 1, role: member.role });
-                continue;
-              }
-            }
-            if (i3 < members.length - 2 && graph.hasEntity(members[i3 + 2].id)) {
-              const next2Entity = graph.entity(members[i3 + 2].id);
-              if (connects(next2Entity, wayA) && !connects(next2Entity, wayB)) {
-                insertMembers.push({ at: i3 + 1, role: member.role });
-                continue;
-              }
-              if (connects(next2Entity, wayB) && !connects(next2Entity, wayA)) {
-                insertMembers.push({ at: i3, role: member.role });
-                continue;
-              }
-            }
-          }
-          if (wayA.nodes[wayA.nodes.length - 1] === wayB.nodes[0]) {
-            insertMembers.push({ at: i3 + 1, role: member.role });
-          } else {
-            insertMembers.push({ at: i3, role: member.role });
-          }
+      this.path.pop();
+      while (this.path.length && this.path[this.path.length - 1].right === node) {
+        node = this.path.pop();
+      }
+      return this.path.length > 0;
+    }
+  };
+  var SplayTreeKeyIterableIterator = class extends SplayTreeIterableIterator {
+    getValue(node) {
+      return node.key;
+    }
+  };
+  var SplayTreeSetEntryIterableIterator = class extends SplayTreeIterableIterator {
+    getValue(node) {
+      return [node.key, node.key];
+    }
+  };
+
+  // node_modules/polyclip-ts/dist/esm/index.js
+  var constant_default5 = (x2) => {
+    return () => {
+      return x2;
+    };
+  };
+  var compare_default = (eps) => {
+    const almostEqual = eps ? (a2, b2) => b2.minus(a2).abs().isLessThanOrEqualTo(eps) : constant_default5(false);
+    return (a2, b2) => {
+      if (almostEqual(a2, b2)) return 0;
+      return a2.comparedTo(b2);
+    };
+  };
+  function orient_default(eps) {
+    const almostCollinear = eps ? (area2, ax, ay, cx, cy) => area2.exponentiatedBy(2).isLessThanOrEqualTo(
+      cx.minus(ax).exponentiatedBy(2).plus(cy.minus(ay).exponentiatedBy(2)).times(eps)
+    ) : constant_default5(false);
+    return (a2, b2, c2) => {
+      const ax = a2.x, ay = a2.y, cx = c2.x, cy = c2.y;
+      const area2 = ay.minus(cy).times(b2.x.minus(cx)).minus(ax.minus(cx).times(b2.y.minus(cy)));
+      if (almostCollinear(area2, ax, ay, cx, cy)) return 0;
+      return area2.comparedTo(0);
+    };
+  }
+  var identity_default3 = (x2) => {
+    return x2;
+  };
+  var snap_default = (eps) => {
+    if (eps) {
+      const xTree = new SplayTreeSet(compare_default(eps));
+      const yTree = new SplayTreeSet(compare_default(eps));
+      const snapCoord = (coord2, tree) => {
+        return tree.addAndReturn(coord2);
+      };
+      const snap = (v2) => {
+        return {
+          x: snapCoord(v2.x, xTree),
+          y: snapCoord(v2.y, yTree)
+        };
+      };
+      snap({ x: new bignumber_default(0), y: new bignumber_default(0) });
+      return snap;
+    }
+    return identity_default3;
+  };
+  var set3 = (eps) => {
+    return {
+      set: (eps2) => {
+        precision = set3(eps2);
+      },
+      reset: () => set3(eps),
+      compare: compare_default(eps),
+      snap: snap_default(eps),
+      orient: orient_default(eps)
+    };
+  };
+  var precision = set3();
+  var isInBbox = (bbox2, point) => {
+    return bbox2.ll.x.isLessThanOrEqualTo(point.x) && point.x.isLessThanOrEqualTo(bbox2.ur.x) && bbox2.ll.y.isLessThanOrEqualTo(point.y) && point.y.isLessThanOrEqualTo(bbox2.ur.y);
+  };
+  var getBboxOverlap = (b1, b2) => {
+    if (b2.ur.x.isLessThan(b1.ll.x) || b1.ur.x.isLessThan(b2.ll.x) || b2.ur.y.isLessThan(b1.ll.y) || b1.ur.y.isLessThan(b2.ll.y))
+      return null;
+    const lowerX = b1.ll.x.isLessThan(b2.ll.x) ? b2.ll.x : b1.ll.x;
+    const upperX = b1.ur.x.isLessThan(b2.ur.x) ? b1.ur.x : b2.ur.x;
+    const lowerY = b1.ll.y.isLessThan(b2.ll.y) ? b2.ll.y : b1.ll.y;
+    const upperY = b1.ur.y.isLessThan(b2.ur.y) ? b1.ur.y : b2.ur.y;
+    return { ll: { x: lowerX, y: lowerY }, ur: { x: upperX, y: upperY } };
+  };
+  var crossProduct = (a2, b2) => a2.x.times(b2.y).minus(a2.y.times(b2.x));
+  var dotProduct = (a2, b2) => a2.x.times(b2.x).plus(a2.y.times(b2.y));
+  var length = (v2) => dotProduct(v2, v2).sqrt();
+  var sineOfAngle = (pShared, pBase, pAngle) => {
+    const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) };
+    const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) };
+    return crossProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase));
+  };
+  var cosineOfAngle = (pShared, pBase, pAngle) => {
+    const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) };
+    const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) };
+    return dotProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase));
+  };
+  var horizontalIntersection = (pt2, v2, y2) => {
+    if (v2.y.isZero()) return null;
+    return { x: pt2.x.plus(v2.x.div(v2.y).times(y2.minus(pt2.y))), y: y2 };
+  };
+  var verticalIntersection = (pt2, v2, x2) => {
+    if (v2.x.isZero()) return null;
+    return { x: x2, y: pt2.y.plus(v2.y.div(v2.x).times(x2.minus(pt2.x))) };
+  };
+  var intersection = (pt1, v1, pt2, v2) => {
+    if (v1.x.isZero()) return verticalIntersection(pt2, v2, pt1.x);
+    if (v2.x.isZero()) return verticalIntersection(pt1, v1, pt2.x);
+    if (v1.y.isZero()) return horizontalIntersection(pt2, v2, pt1.y);
+    if (v2.y.isZero()) return horizontalIntersection(pt1, v1, pt2.y);
+    const kross = crossProduct(v1, v2);
+    if (kross.isZero()) return null;
+    const ve2 = { x: pt2.x.minus(pt1.x), y: pt2.y.minus(pt1.y) };
+    const d1 = crossProduct(ve2, v1).div(kross);
+    const d2 = crossProduct(ve2, v2).div(kross);
+    const x12 = pt1.x.plus(d2.times(v1.x)), x2 = pt2.x.plus(d1.times(v2.x));
+    const y12 = pt1.y.plus(d2.times(v1.y)), y2 = pt2.y.plus(d1.times(v2.y));
+    const x3 = x12.plus(x2).div(2);
+    const y3 = y12.plus(y2).div(2);
+    return { x: x3, y: y3 };
+  };
+  var SweepEvent = class _SweepEvent {
+    // Warning: 'point' input will be modified and re-used (for performance)
+    constructor(point, isLeft) {
+      __publicField(this, "point");
+      __publicField(this, "isLeft");
+      __publicField(this, "segment");
+      __publicField(this, "otherSE");
+      __publicField(this, "consumedBy");
+      if (point.events === void 0) point.events = [this];
+      else point.events.push(this);
+      this.point = point;
+      this.isLeft = isLeft;
+    }
+    // for ordering sweep events in the sweep event queue
+    static compare(a2, b2) {
+      const ptCmp = _SweepEvent.comparePoints(a2.point, b2.point);
+      if (ptCmp !== 0) return ptCmp;
+      if (a2.point !== b2.point) a2.link(b2);
+      if (a2.isLeft !== b2.isLeft) return a2.isLeft ? 1 : -1;
+      return Segment.compare(a2.segment, b2.segment);
+    }
+    // for ordering points in sweep line order
+    static comparePoints(aPt, bPt) {
+      if (aPt.x.isLessThan(bPt.x)) return -1;
+      if (aPt.x.isGreaterThan(bPt.x)) return 1;
+      if (aPt.y.isLessThan(bPt.y)) return -1;
+      if (aPt.y.isGreaterThan(bPt.y)) return 1;
+      return 0;
+    }
+    link(other2) {
+      if (other2.point === this.point) {
+        throw new Error("Tried to link already linked events");
+      }
+      const otherEvents = other2.point.events;
+      for (let i3 = 0, iMax = otherEvents.length; i3 < iMax; i3++) {
+        const evt = otherEvents[i3];
+        this.point.events.push(evt);
+        evt.point = this.point;
+      }
+      this.checkForConsuming();
+    }
+    /* Do a pass over our linked events and check to see if any pair
+     * of segments match, and should be consumed. */
+    checkForConsuming() {
+      const numEvents = this.point.events.length;
+      for (let i3 = 0; i3 < numEvents; i3++) {
+        const evt1 = this.point.events[i3];
+        if (evt1.segment.consumedBy !== void 0) continue;
+        for (let j2 = i3 + 1; j2 < numEvents; j2++) {
+          const evt2 = this.point.events[j2];
+          if (evt2.consumedBy !== void 0) continue;
+          if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;
+          evt1.segment.consume(evt2.segment);
         }
       }
-      insertMembers.reverse().forEach((item) => {
-        graph = graph.replace(relation.addMember({
-          id: wayB.id,
-          type: "way",
-          role: item.role
-        }, item.at));
-        relation = graph.entity(relation.id);
-      });
-      return graph;
     }
-    var action = function(graph) {
-      _createdWayIDs = [];
-      var newWayIndex = 0;
-      for (var i3 = 0; i3 < nodeIds.length; i3++) {
-        var nodeId = nodeIds[i3];
-        var candidates = action.waysForNode(nodeId, graph);
-        for (var j2 = 0; j2 < candidates.length; j2++) {
-          graph = split(graph, nodeId, candidates[j2], newWayIds && newWayIds[newWayIndex]);
-          newWayIndex += 1;
+    getAvailableLinkedEvents() {
+      const events = [];
+      for (let i3 = 0, iMax = this.point.events.length; i3 < iMax; i3++) {
+        const evt = this.point.events[i3];
+        if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {
+          events.push(evt);
         }
       }
-      return graph;
-    };
-    action.getCreatedWayIDs = function() {
-      return _createdWayIDs;
-    };
-    action.waysForNode = function(nodeId, graph) {
-      var node = graph.entity(nodeId);
-      var splittableParents = graph.parentWays(node).filter(isSplittable);
-      if (!_wayIDs) {
-        var hasLine = splittableParents.some(function(parent) {
-          return parent.geometry(graph) === "line";
+      return events;
+    }
+    /**
+     * Returns a comparator function for sorting linked events that will
+     * favor the event that will give us the smallest left-side angle.
+     * All ring construction starts as low as possible heading to the right,
+     * so by always turning left as sharp as possible we'll get polygons
+     * without uncessary loops & holes.
+     *
+     * The comparator function has a compute cache such that it avoids
+     * re-computing already-computed values.
+     */
+    getLeftmostComparator(baseEvent) {
+      const cache = /* @__PURE__ */ new Map();
+      const fillCache = (linkedEvent) => {
+        const nextEvent = linkedEvent.otherSE;
+        cache.set(linkedEvent, {
+          sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),
+          cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point)
         });
-        if (hasLine) {
-          return splittableParents.filter(function(parent) {
-            return parent.geometry(graph) === "line";
-          });
+      };
+      return (a2, b2) => {
+        if (!cache.has(a2)) fillCache(a2);
+        if (!cache.has(b2)) fillCache(b2);
+        const { sine: asine, cosine: acosine } = cache.get(a2);
+        const { sine: bsine, cosine: bcosine } = cache.get(b2);
+        if (asine.isGreaterThanOrEqualTo(0) && bsine.isGreaterThanOrEqualTo(0)) {
+          if (acosine.isLessThan(bcosine)) return 1;
+          if (acosine.isGreaterThan(bcosine)) return -1;
+          return 0;
         }
-      }
-      return splittableParents;
-      function isSplittable(parent) {
-        if (_wayIDs && _wayIDs.indexOf(parent.id) === -1) return false;
-        if (parent.isClosed()) return true;
-        for (var i3 = 1; i3 < parent.nodes.length - 1; i3++) {
-          if (parent.nodes[i3] === nodeId) return true;
+        if (asine.isLessThan(0) && bsine.isLessThan(0)) {
+          if (acosine.isLessThan(bcosine)) return -1;
+          if (acosine.isGreaterThan(bcosine)) return 1;
+          return 0;
         }
-        return false;
+        if (bsine.isLessThan(asine)) return -1;
+        if (bsine.isGreaterThan(asine)) return 1;
+        return 0;
+      };
+    }
+  };
+  var RingOut = class _RingOut {
+    constructor(events) {
+      __publicField(this, "events");
+      __publicField(this, "poly");
+      __publicField(this, "_isExteriorRing");
+      __publicField(this, "_enclosingRing");
+      this.events = events;
+      for (let i3 = 0, iMax = events.length; i3 < iMax; i3++) {
+        events[i3].segment.ringOut = this;
       }
-    };
-    action.ways = function(graph) {
-      return utilArrayUniq([].concat.apply([], nodeIds.map(function(nodeId) {
-        return action.waysForNode(nodeId, graph);
-      })));
-    };
-    action.disabled = function(graph) {
-      for (const nodeId of nodeIds) {
-        const candidates = action.waysForNode(nodeId, graph);
-        if (candidates.length === 0 || _wayIDs && _wayIDs.length !== candidates.length) {
-          return "not_eligible";
-        }
-        for (const way of candidates) {
-          const parentRelations = graph.parentRelations(way);
-          for (const parentRelation of parentRelations) {
-            if (parentRelation.hasFromViaTo()) {
-              const vias = parentRelation.membersByRole("via");
-              if (!vias.every((via) => graph.hasEntity(via.id))) {
-                return "parent_incomplete";
-              }
-            } else {
-              for (let i3 = 0; i3 < parentRelation.members.length; i3++) {
-                if (parentRelation.members[i3].id === way.id) {
-                  const memberBeforePresent = i3 > 0 && graph.hasEntity(parentRelation.members[i3 - 1].id);
-                  const memberAfterPresent = i3 < parentRelation.members.length - 1 && graph.hasEntity(parentRelation.members[i3 + 1].id);
-                  if (!memberBeforePresent && !memberAfterPresent && parentRelation.members.length > 1) {
-                    return "parent_incomplete";
-                  }
-                }
+      this.poly = null;
+    }
+    /* Given the segments from the sweep line pass, compute & return a series
+     * of closed rings from all the segments marked to be part of the result */
+    static factory(allSegments) {
+      const ringsOut = [];
+      for (let i3 = 0, iMax = allSegments.length; i3 < iMax; i3++) {
+        const segment = allSegments[i3];
+        if (!segment.isInResult() || segment.ringOut) continue;
+        let prevEvent = null;
+        let event = segment.leftSE;
+        let nextEvent = segment.rightSE;
+        const events = [event];
+        const startingPoint = event.point;
+        const intersectionLEs = [];
+        while (true) {
+          prevEvent = event;
+          event = nextEvent;
+          events.push(event);
+          if (event.point === startingPoint) break;
+          while (true) {
+            const availableLEs = event.getAvailableLinkedEvents();
+            if (availableLEs.length === 0) {
+              const firstPt = events[0].point;
+              const lastPt = events[events.length - 1].point;
+              throw new Error(
+                "Unable to complete output ring starting at [".concat(firstPt.x, ", ").concat(firstPt.y, "]. Last matching segment found ends at [").concat(lastPt.x, ", ").concat(lastPt.y, "].")
+              );
+            }
+            if (availableLEs.length === 1) {
+              nextEvent = availableLEs[0].otherSE;
+              break;
+            }
+            let indexLE = null;
+            for (let j2 = 0, jMax = intersectionLEs.length; j2 < jMax; j2++) {
+              if (intersectionLEs[j2].point === event.point) {
+                indexLE = j2;
+                break;
               }
             }
-            const relTypesExceptions = ["junction", "enforcement"];
-            if (circularJunctions.includes(way.tags.junction) && way.isClosed() && !relTypesExceptions.includes(parentRelation.tags.type)) {
-              return "simple_roundabout";
+            if (indexLE !== null) {
+              const intersectionLE = intersectionLEs.splice(indexLE)[0];
+              const ringEvents = events.splice(intersectionLE.index);
+              ringEvents.unshift(ringEvents[0].otherSE);
+              ringsOut.push(new _RingOut(ringEvents.reverse()));
+              continue;
             }
+            intersectionLEs.push({
+              index: events.length,
+              point: event.point
+            });
+            const comparator = event.getLeftmostComparator(prevEvent);
+            nextEvent = availableLEs.sort(comparator)[0].otherSE;
+            break;
           }
         }
+        ringsOut.push(new _RingOut(events));
       }
-    };
-    action.limitWays = function(val) {
-      if (!arguments.length) return _wayIDs;
-      _wayIDs = val;
-      return action;
-    };
-    action.keepHistoryOn = function(val) {
-      if (!arguments.length) return _keepHistoryOn;
-      _keepHistoryOn = val;
-      return action;
-    };
-    return action;
-  }
-
-  // modules/core/graph.js
-  function coreGraph(other, mutable) {
-    if (!(this instanceof coreGraph)) return new coreGraph(other, mutable);
-    if (other instanceof coreGraph) {
-      var base = other.base();
-      this.entities = Object.assign(Object.create(base.entities), other.entities);
-      this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
-      this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
-    } else {
-      this.entities = /* @__PURE__ */ Object.create({});
-      this._parentWays = /* @__PURE__ */ Object.create({});
-      this._parentRels = /* @__PURE__ */ Object.create({});
-      this.rebase(other || [], [this]);
+      return ringsOut;
     }
-    this.transients = {};
-    this._childNodes = {};
-    this.frozen = !mutable;
-  }
-  coreGraph.prototype = {
-    hasEntity: function(id2) {
-      return this.entities[id2];
-    },
-    entity: function(id2) {
-      var entity = this.entities[id2];
-      if (!entity) {
-        entity = this.entities.__proto__[id2];
+    getGeom() {
+      let prevPt = this.events[0].point;
+      const points = [prevPt];
+      for (let i3 = 1, iMax = this.events.length - 1; i3 < iMax; i3++) {
+        const pt22 = this.events[i3].point;
+        const nextPt2 = this.events[i3 + 1].point;
+        if (precision.orient(pt22, prevPt, nextPt2) === 0) continue;
+        points.push(pt22);
+        prevPt = pt22;
       }
-      if (!entity) {
-        throw new Error("entity " + id2 + " not found");
+      if (points.length === 1) return null;
+      const pt2 = points[0];
+      const nextPt = points[1];
+      if (precision.orient(pt2, prevPt, nextPt) === 0) points.shift();
+      points.push(points[0]);
+      const step = this.isExteriorRing() ? 1 : -1;
+      const iStart = this.isExteriorRing() ? 0 : points.length - 1;
+      const iEnd = this.isExteriorRing() ? points.length : -1;
+      const orderedPoints = [];
+      for (let i3 = iStart; i3 != iEnd; i3 += step)
+        orderedPoints.push([points[i3].x.toNumber(), points[i3].y.toNumber()]);
+      return orderedPoints;
+    }
+    isExteriorRing() {
+      if (this._isExteriorRing === void 0) {
+        const enclosing = this.enclosingRing();
+        this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;
       }
-      return entity;
-    },
-    geometry: function(id2) {
-      return this.entity(id2).geometry(this);
-    },
-    transient: function(entity, key, fn) {
-      var id2 = entity.id;
-      var transients = this.transients[id2] || (this.transients[id2] = {});
-      if (transients[key] !== void 0) {
-        return transients[key];
+      return this._isExteriorRing;
+    }
+    enclosingRing() {
+      if (this._enclosingRing === void 0) {
+        this._enclosingRing = this._calcEnclosingRing();
       }
-      transients[key] = fn.call(entity);
-      return transients[key];
-    },
-    parentWays: function(entity) {
-      var parents = this._parentWays[entity.id];
-      var result = [];
-      if (parents) {
-        parents.forEach(function(id2) {
-          result.push(this.entity(id2));
-        }, this);
+      return this._enclosingRing;
+    }
+    /* Returns the ring that encloses this one, if any */
+    _calcEnclosingRing() {
+      var _a4, _b3;
+      let leftMostEvt = this.events[0];
+      for (let i3 = 1, iMax = this.events.length; i3 < iMax; i3++) {
+        const evt = this.events[i3];
+        if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;
       }
-      return result;
-    },
-    isPoi: function(entity) {
-      var parents = this._parentWays[entity.id];
-      return !parents || parents.size === 0;
-    },
-    isShared: function(entity) {
-      var parents = this._parentWays[entity.id];
-      return parents && parents.size > 1;
-    },
-    parentRelations: function(entity) {
-      var parents = this._parentRels[entity.id];
-      var result = [];
-      if (parents) {
-        parents.forEach(function(id2) {
-          result.push(this.entity(id2));
-        }, this);
+      let prevSeg = leftMostEvt.segment.prevInResult();
+      let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
+      while (true) {
+        if (!prevSeg) return null;
+        if (!prevPrevSeg) return prevSeg.ringOut;
+        if (prevPrevSeg.ringOut !== prevSeg.ringOut) {
+          if (((_a4 = prevPrevSeg.ringOut) == null ? void 0 : _a4.enclosingRing()) !== prevSeg.ringOut) {
+            return prevSeg.ringOut;
+          } else return (_b3 = prevSeg.ringOut) == null ? void 0 : _b3.enclosingRing();
+        }
+        prevSeg = prevPrevSeg.prevInResult();
+        prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;
       }
-      return result;
-    },
-    parentMultipolygons: function(entity) {
-      return this.parentRelations(entity).filter(function(relation) {
-        return relation.isMultipolygon();
-      });
-    },
-    childNodes: function(entity) {
-      if (this._childNodes[entity.id]) return this._childNodes[entity.id];
-      if (!entity.nodes) return [];
-      var nodes = [];
-      for (var i3 = 0; i3 < entity.nodes.length; i3++) {
-        nodes[i3] = this.entity(entity.nodes[i3]);
+    }
+  };
+  var PolyOut = class {
+    constructor(exteriorRing) {
+      __publicField(this, "exteriorRing");
+      __publicField(this, "interiorRings");
+      this.exteriorRing = exteriorRing;
+      exteriorRing.poly = this;
+      this.interiorRings = [];
+    }
+    addInterior(ring) {
+      this.interiorRings.push(ring);
+      ring.poly = this;
+    }
+    getGeom() {
+      const geom0 = this.exteriorRing.getGeom();
+      if (geom0 === null) return null;
+      const geom = [geom0];
+      for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
+        const ringGeom = this.interiorRings[i3].getGeom();
+        if (ringGeom === null) continue;
+        geom.push(ringGeom);
       }
-      if (debug) Object.freeze(nodes);
-      this._childNodes[entity.id] = nodes;
-      return this._childNodes[entity.id];
-    },
-    base: function() {
-      return {
-        "entities": Object.getPrototypeOf(this.entities),
-        "parentWays": Object.getPrototypeOf(this._parentWays),
-        "parentRels": Object.getPrototypeOf(this._parentRels)
-      };
-    },
-    // Unlike other graph methods, rebase mutates in place. This is because it
-    // is used only during the history operation that merges newly downloaded
-    // data into each state. To external consumers, it should appear as if the
-    // graph always contained the newly downloaded data.
-    rebase: function(entities, stack, force) {
-      var base = this.base();
-      var i3, j2, k2, id2;
-      for (i3 = 0; i3 < entities.length; i3++) {
-        var entity = entities[i3];
-        if (!entity.visible || !force && base.entities[entity.id]) continue;
-        base.entities[entity.id] = entity;
-        this._updateCalculated(void 0, entity, base.parentWays, base.parentRels);
-        if (entity.type === "way") {
-          for (j2 = 0; j2 < entity.nodes.length; j2++) {
-            id2 = entity.nodes[j2];
-            for (k2 = 1; k2 < stack.length; k2++) {
-              var ents = stack[k2].entities;
-              if (ents.hasOwnProperty(id2) && ents[id2] === void 0) {
-                delete ents[id2];
+      return geom;
+    }
+  };
+  var MultiPolyOut = class {
+    constructor(rings) {
+      __publicField(this, "rings");
+      __publicField(this, "polys");
+      this.rings = rings;
+      this.polys = this._composePolys(rings);
+    }
+    getGeom() {
+      const geom = [];
+      for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
+        const polyGeom = this.polys[i3].getGeom();
+        if (polyGeom === null) continue;
+        geom.push(polyGeom);
+      }
+      return geom;
+    }
+    _composePolys(rings) {
+      var _a4;
+      const polys = [];
+      for (let i3 = 0, iMax = rings.length; i3 < iMax; i3++) {
+        const ring = rings[i3];
+        if (ring.poly) continue;
+        if (ring.isExteriorRing()) polys.push(new PolyOut(ring));
+        else {
+          const enclosingRing = ring.enclosingRing();
+          if (!(enclosingRing == null ? void 0 : enclosingRing.poly)) polys.push(new PolyOut(enclosingRing));
+          (_a4 = enclosingRing == null ? void 0 : enclosingRing.poly) == null ? void 0 : _a4.addInterior(ring);
+        }
+      }
+      return polys;
+    }
+  };
+  var SweepLine = class {
+    constructor(queue, comparator = Segment.compare) {
+      __publicField(this, "queue");
+      __publicField(this, "tree");
+      __publicField(this, "segments");
+      this.queue = queue;
+      this.tree = new SplayTreeSet(comparator);
+      this.segments = [];
+    }
+    process(event) {
+      const segment = event.segment;
+      const newEvents = [];
+      if (event.consumedBy) {
+        if (event.isLeft) this.queue.delete(event.otherSE);
+        else this.tree.delete(segment);
+        return newEvents;
+      }
+      if (event.isLeft) this.tree.add(segment);
+      let prevSeg = segment;
+      let nextSeg = segment;
+      do {
+        prevSeg = this.tree.lastBefore(prevSeg);
+      } while (prevSeg != null && prevSeg.consumedBy != void 0);
+      do {
+        nextSeg = this.tree.firstAfter(nextSeg);
+      } while (nextSeg != null && nextSeg.consumedBy != void 0);
+      if (event.isLeft) {
+        let prevMySplitter = null;
+        if (prevSeg) {
+          const prevInter = prevSeg.getIntersection(segment);
+          if (prevInter !== null) {
+            if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;
+            if (!prevSeg.isAnEndpoint(prevInter)) {
+              const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);
+              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                newEvents.push(newEventsFromSplit[i3]);
               }
             }
           }
         }
-      }
-      for (i3 = 0; i3 < stack.length; i3++) {
-        stack[i3]._updateRebased();
-      }
-    },
-    _updateRebased: function() {
-      var base = this.base();
-      Object.keys(this._parentWays).forEach(function(child) {
-        if (base.parentWays[child]) {
-          base.parentWays[child].forEach(function(id2) {
-            if (!this.entities.hasOwnProperty(id2)) {
-              this._parentWays[child].add(id2);
+        let nextMySplitter = null;
+        if (nextSeg) {
+          const nextInter = nextSeg.getIntersection(segment);
+          if (nextInter !== null) {
+            if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;
+            if (!nextSeg.isAnEndpoint(nextInter)) {
+              const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);
+              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                newEvents.push(newEventsFromSplit[i3]);
+              }
             }
-          }, this);
+          }
         }
-      }, this);
-      Object.keys(this._parentRels).forEach(function(child) {
-        if (base.parentRels[child]) {
-          base.parentRels[child].forEach(function(id2) {
-            if (!this.entities.hasOwnProperty(id2)) {
-              this._parentRels[child].add(id2);
+        if (prevMySplitter !== null || nextMySplitter !== null) {
+          let mySplitter = null;
+          if (prevMySplitter === null) mySplitter = nextMySplitter;
+          else if (nextMySplitter === null) mySplitter = prevMySplitter;
+          else {
+            const cmpSplitters = SweepEvent.comparePoints(
+              prevMySplitter,
+              nextMySplitter
+            );
+            mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;
+          }
+          this.queue.delete(segment.rightSE);
+          newEvents.push(segment.rightSE);
+          const newEventsFromSplit = segment.split(mySplitter);
+          for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+            newEvents.push(newEventsFromSplit[i3]);
+          }
+        }
+        if (newEvents.length > 0) {
+          this.tree.delete(segment);
+          newEvents.push(event);
+        } else {
+          this.segments.push(segment);
+          segment.prev = prevSeg;
+        }
+      } else {
+        if (prevSeg && nextSeg) {
+          const inter = prevSeg.getIntersection(nextSeg);
+          if (inter !== null) {
+            if (!prevSeg.isAnEndpoint(inter)) {
+              const newEventsFromSplit = this._splitSafely(prevSeg, inter);
+              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                newEvents.push(newEventsFromSplit[i3]);
+              }
+            }
+            if (!nextSeg.isAnEndpoint(inter)) {
+              const newEventsFromSplit = this._splitSafely(nextSeg, inter);
+              for (let i3 = 0, iMax = newEventsFromSplit.length; i3 < iMax; i3++) {
+                newEvents.push(newEventsFromSplit[i3]);
+              }
             }
-          }, this);
-        }
-      }, this);
-      this.transients = {};
-    },
-    // Updates calculated properties (parentWays, parentRels) for the specified change
-    _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
-      parentWays = parentWays || this._parentWays;
-      parentRels = parentRels || this._parentRels;
-      var type2 = entity && entity.type || oldentity && oldentity.type;
-      var removed, added, i3;
-      if (type2 === "way") {
-        if (oldentity && entity) {
-          removed = utilArrayDifference(oldentity.nodes, entity.nodes);
-          added = utilArrayDifference(entity.nodes, oldentity.nodes);
-        } else if (oldentity) {
-          removed = oldentity.nodes;
-          added = [];
-        } else if (entity) {
-          removed = [];
-          added = entity.nodes;
+          }
         }
-        for (i3 = 0; i3 < removed.length; i3++) {
-          parentWays[removed[i3]] = new Set(parentWays[removed[i3]]);
-          parentWays[removed[i3]].delete(oldentity.id);
+        this.tree.delete(segment);
+      }
+      return newEvents;
+    }
+    /* Safely split a segment that is currently in the datastructures
+     * IE - a segment other than the one that is currently being processed. */
+    _splitSafely(seg, pt2) {
+      this.tree.delete(seg);
+      const rightSE = seg.rightSE;
+      this.queue.delete(rightSE);
+      const newEvents = seg.split(pt2);
+      newEvents.push(rightSE);
+      if (seg.consumedBy === void 0) this.tree.add(seg);
+      return newEvents;
+    }
+  };
+  var Operation = class {
+    constructor() {
+      __publicField(this, "type");
+      __publicField(this, "numMultiPolys");
+    }
+    run(type2, geom, moreGeoms) {
+      operation.type = type2;
+      const multipolys = [new MultiPolyIn(geom, true)];
+      for (let i3 = 0, iMax = moreGeoms.length; i3 < iMax; i3++) {
+        multipolys.push(new MultiPolyIn(moreGeoms[i3], false));
+      }
+      operation.numMultiPolys = multipolys.length;
+      if (operation.type === "difference") {
+        const subject = multipolys[0];
+        let i3 = 1;
+        while (i3 < multipolys.length) {
+          if (getBboxOverlap(multipolys[i3].bbox, subject.bbox) !== null) i3++;
+          else multipolys.splice(i3, 1);
         }
-        for (i3 = 0; i3 < added.length; i3++) {
-          parentWays[added[i3]] = new Set(parentWays[added[i3]]);
-          parentWays[added[i3]].add(entity.id);
+      }
+      if (operation.type === "intersection") {
+        for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
+          const mpA = multipolys[i3];
+          for (let j2 = i3 + 1, jMax = multipolys.length; j2 < jMax; j2++) {
+            if (getBboxOverlap(mpA.bbox, multipolys[j2].bbox) === null) return [];
+          }
         }
-      } else if (type2 === "relation") {
-        var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m2) {
-          return m2.id;
-        }) : [];
-        var entityMemberIDs = entity ? entity.members.map(function(m2) {
-          return m2.id;
-        }) : [];
-        if (oldentity && entity) {
-          removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
-          added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
-        } else if (oldentity) {
-          removed = oldentityMemberIDs;
-          added = [];
-        } else if (entity) {
-          removed = [];
-          added = entityMemberIDs;
+      }
+      const queue = new SplayTreeSet(SweepEvent.compare);
+      for (let i3 = 0, iMax = multipolys.length; i3 < iMax; i3++) {
+        const sweepEvents = multipolys[i3].getSweepEvents();
+        for (let j2 = 0, jMax = sweepEvents.length; j2 < jMax; j2++) {
+          queue.add(sweepEvents[j2]);
         }
-        for (i3 = 0; i3 < removed.length; i3++) {
-          parentRels[removed[i3]] = new Set(parentRels[removed[i3]]);
-          parentRels[removed[i3]].delete(oldentity.id);
+      }
+      const sweepLine = new SweepLine(queue);
+      let evt = null;
+      if (queue.size != 0) {
+        evt = queue.first();
+        queue.delete(evt);
+      }
+      while (evt) {
+        const newEvents = sweepLine.process(evt);
+        for (let i3 = 0, iMax = newEvents.length; i3 < iMax; i3++) {
+          const evt2 = newEvents[i3];
+          if (evt2.consumedBy === void 0) queue.add(evt2);
         }
-        for (i3 = 0; i3 < added.length; i3++) {
-          parentRels[added[i3]] = new Set(parentRels[added[i3]]);
-          parentRels[added[i3]].add(entity.id);
+        if (queue.size != 0) {
+          evt = queue.first();
+          queue.delete(evt);
+        } else {
+          evt = null;
         }
       }
-    },
-    replace: function(entity) {
-      if (this.entities[entity.id] === entity) return this;
-      return this.update(function() {
-        this._updateCalculated(this.entities[entity.id], entity);
-        this.entities[entity.id] = entity;
-      });
-    },
-    remove: function(entity) {
-      return this.update(function() {
-        this._updateCalculated(entity, void 0);
-        this.entities[entity.id] = void 0;
-      });
-    },
-    revert: function(id2) {
-      var baseEntity = this.base().entities[id2];
-      var headEntity = this.entities[id2];
-      if (headEntity === baseEntity) return this;
-      return this.update(function() {
-        this._updateCalculated(headEntity, baseEntity);
-        delete this.entities[id2];
-      });
-    },
-    update: function() {
-      var graph = this.frozen ? coreGraph(this, true) : this;
-      for (var i3 = 0; i3 < arguments.length; i3++) {
-        arguments[i3].call(graph, graph);
+      precision.reset();
+      const ringsOut = RingOut.factory(sweepLine.segments);
+      const result = new MultiPolyOut(ringsOut);
+      return result.getGeom();
+    }
+  };
+  var operation = new Operation();
+  var operation_default = operation;
+  var segmentId = 0;
+  var Segment = class _Segment {
+    /* Warning: a reference to ringWindings input will be stored,
+     *  and possibly will be later modified */
+    constructor(leftSE, rightSE, rings, windings) {
+      __publicField(this, "id");
+      __publicField(this, "leftSE");
+      __publicField(this, "rightSE");
+      __publicField(this, "rings");
+      __publicField(this, "windings");
+      __publicField(this, "ringOut");
+      __publicField(this, "consumedBy");
+      __publicField(this, "prev");
+      __publicField(this, "_prevInResult");
+      __publicField(this, "_beforeState");
+      __publicField(this, "_afterState");
+      __publicField(this, "_isInResult");
+      this.id = ++segmentId;
+      this.leftSE = leftSE;
+      leftSE.segment = this;
+      leftSE.otherSE = rightSE;
+      this.rightSE = rightSE;
+      rightSE.segment = this;
+      rightSE.otherSE = leftSE;
+      this.rings = rings;
+      this.windings = windings;
+    }
+    /* This compare() function is for ordering segments in the sweep
+     * line tree, and does so according to the following criteria:
+     *
+     * Consider the vertical line that lies an infinestimal step to the
+     * right of the right-more of the two left endpoints of the input
+     * segments. Imagine slowly moving a point up from negative infinity
+     * in the increasing y direction. Which of the two segments will that
+     * point intersect first? That segment comes 'before' the other one.
+     *
+     * If neither segment would be intersected by such a line, (if one
+     * or more of the segments are vertical) then the line to be considered
+     * is directly on the right-more of the two left inputs.
+     */
+    static compare(a2, b2) {
+      const alx = a2.leftSE.point.x;
+      const blx = b2.leftSE.point.x;
+      const arx = a2.rightSE.point.x;
+      const brx = b2.rightSE.point.x;
+      if (brx.isLessThan(alx)) return 1;
+      if (arx.isLessThan(blx)) return -1;
+      const aly = a2.leftSE.point.y;
+      const bly = b2.leftSE.point.y;
+      const ary = a2.rightSE.point.y;
+      const bry = b2.rightSE.point.y;
+      if (alx.isLessThan(blx)) {
+        if (bly.isLessThan(aly) && bly.isLessThan(ary)) return 1;
+        if (bly.isGreaterThan(aly) && bly.isGreaterThan(ary)) return -1;
+        const aCmpBLeft = a2.comparePoint(b2.leftSE.point);
+        if (aCmpBLeft < 0) return 1;
+        if (aCmpBLeft > 0) return -1;
+        const bCmpARight = b2.comparePoint(a2.rightSE.point);
+        if (bCmpARight !== 0) return bCmpARight;
+        return -1;
       }
-      if (this.frozen) graph.frozen = true;
-      return graph;
-    },
-    // Obliterates any existing entities
-    load: function(entities) {
-      var base = this.base();
-      this.entities = Object.create(base.entities);
-      for (var i3 in entities) {
-        this.entities[i3] = entities[i3];
-        this._updateCalculated(base.entities[i3], this.entities[i3]);
+      if (alx.isGreaterThan(blx)) {
+        if (aly.isLessThan(bly) && aly.isLessThan(bry)) return -1;
+        if (aly.isGreaterThan(bly) && aly.isGreaterThan(bry)) return 1;
+        const bCmpALeft = b2.comparePoint(a2.leftSE.point);
+        if (bCmpALeft !== 0) return bCmpALeft;
+        const aCmpBRight = a2.comparePoint(b2.rightSE.point);
+        if (aCmpBRight < 0) return 1;
+        if (aCmpBRight > 0) return -1;
+        return 1;
       }
-      return this;
+      if (aly.isLessThan(bly)) return -1;
+      if (aly.isGreaterThan(bly)) return 1;
+      if (arx.isLessThan(brx)) {
+        const bCmpARight = b2.comparePoint(a2.rightSE.point);
+        if (bCmpARight !== 0) return bCmpARight;
+      }
+      if (arx.isGreaterThan(brx)) {
+        const aCmpBRight = a2.comparePoint(b2.rightSE.point);
+        if (aCmpBRight < 0) return 1;
+        if (aCmpBRight > 0) return -1;
+      }
+      if (!arx.eq(brx)) {
+        const ay = ary.minus(aly);
+        const ax = arx.minus(alx);
+        const by = bry.minus(bly);
+        const bx = brx.minus(blx);
+        if (ay.isGreaterThan(ax) && by.isLessThan(bx)) return 1;
+        if (ay.isLessThan(ax) && by.isGreaterThan(bx)) return -1;
+      }
+      if (arx.isGreaterThan(brx)) return 1;
+      if (arx.isLessThan(brx)) return -1;
+      if (ary.isLessThan(bry)) return -1;
+      if (ary.isGreaterThan(bry)) return 1;
+      if (a2.id < b2.id) return -1;
+      if (a2.id > b2.id) return 1;
+      return 0;
     }
-  };
-
-  // modules/osm/intersection.js
-  function osmTurn(turn) {
-    if (!(this instanceof osmTurn)) {
-      return new osmTurn(turn);
+    static fromRing(pt1, pt2, ring) {
+      let leftPt, rightPt, winding;
+      const cmpPts = SweepEvent.comparePoints(pt1, pt2);
+      if (cmpPts < 0) {
+        leftPt = pt1;
+        rightPt = pt2;
+        winding = 1;
+      } else if (cmpPts > 0) {
+        leftPt = pt2;
+        rightPt = pt1;
+        winding = -1;
+      } else
+        throw new Error(
+          "Tried to create degenerate segment at [".concat(pt1.x, ", ").concat(pt1.y, "]")
+        );
+      const leftSE = new SweepEvent(leftPt, true);
+      const rightSE = new SweepEvent(rightPt, false);
+      return new _Segment(leftSE, rightSE, [ring], [winding]);
     }
-    Object.assign(this, turn);
-  }
-  function osmIntersection(graph, startVertexId, maxDistance) {
-    maxDistance = maxDistance || 30;
-    var vgraph = coreGraph();
-    var i3, j2, k2;
-    function memberOfRestriction(entity) {
-      return graph.parentRelations(entity).some(function(r2) {
-        return r2.isRestriction();
-      });
+    /* When a segment is split, the rightSE is replaced with a new sweep event */
+    replaceRightSE(newRightSE) {
+      this.rightSE = newRightSE;
+      this.rightSE.segment = this;
+      this.rightSE.otherSE = this.leftSE;
+      this.leftSE.otherSE = this.rightSE;
     }
-    function isRoad(way2) {
-      if (way2.isArea() || way2.isDegenerate()) return false;
-      var roads = {
-        "motorway": true,
-        "motorway_link": true,
-        "trunk": true,
-        "trunk_link": true,
-        "primary": true,
-        "primary_link": true,
-        "secondary": true,
-        "secondary_link": true,
-        "tertiary": true,
-        "tertiary_link": true,
-        "residential": true,
-        "unclassified": true,
-        "living_street": true,
-        "service": true,
-        "busway": true,
-        "road": true,
-        "track": true
+    bbox() {
+      const y12 = this.leftSE.point.y;
+      const y2 = this.rightSE.point.y;
+      return {
+        ll: { x: this.leftSE.point.x, y: y12.isLessThan(y2) ? y12 : y2 },
+        ur: { x: this.rightSE.point.x, y: y12.isGreaterThan(y2) ? y12 : y2 }
       };
-      return roads[way2.tags.highway];
     }
-    var startNode = graph.entity(startVertexId);
-    var checkVertices = [startNode];
-    var checkWays;
-    var vertices = [];
-    var vertexIds = [];
-    var vertex;
-    var ways = [];
-    var wayIds = [];
-    var way;
-    var nodes = [];
-    var node;
-    var parents = [];
-    var parent;
-    var actions = [];
-    while (checkVertices.length) {
-      vertex = checkVertices.pop();
-      checkWays = graph.parentWays(vertex);
-      var hasWays = false;
-      for (i3 = 0; i3 < checkWays.length; i3++) {
-        way = checkWays[i3];
-        if (!isRoad(way) && !memberOfRestriction(way)) continue;
-        ways.push(way);
-        hasWays = true;
-        nodes = utilArrayUniq(graph.childNodes(way));
-        for (j2 = 0; j2 < nodes.length; j2++) {
-          node = nodes[j2];
-          if (node === vertex) continue;
-          if (vertices.indexOf(node) !== -1) continue;
-          if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue;
-          var hasParents = false;
-          parents = graph.parentWays(node);
-          for (k2 = 0; k2 < parents.length; k2++) {
-            parent = parents[k2];
-            if (parent === way) continue;
-            if (ways.indexOf(parent) !== -1) continue;
-            if (!isRoad(parent)) continue;
-            hasParents = true;
-            break;
-          }
-          if (hasParents) {
-            checkVertices.push(node);
-          }
+    /* A vector from the left point to the right */
+    vector() {
+      return {
+        x: this.rightSE.point.x.minus(this.leftSE.point.x),
+        y: this.rightSE.point.y.minus(this.leftSE.point.y)
+      };
+    }
+    isAnEndpoint(pt2) {
+      return pt2.x.eq(this.leftSE.point.x) && pt2.y.eq(this.leftSE.point.y) || pt2.x.eq(this.rightSE.point.x) && pt2.y.eq(this.rightSE.point.y);
+    }
+    /* Compare this segment with a point.
+     *
+     * A point P is considered to be colinear to a segment if there
+     * exists a distance D such that if we travel along the segment
+     * from one * endpoint towards the other a distance D, we find
+     * ourselves at point P.
+     *
+     * Return value indicates:
+     *
+     *   1: point lies above the segment (to the left of vertical)
+     *   0: point is colinear to segment
+     *  -1: point lies below the segment (to the right of vertical)
+     */
+    comparePoint(point) {
+      return precision.orient(this.leftSE.point, point, this.rightSE.point);
+    }
+    /**
+     * Given another segment, returns the first non-trivial intersection
+     * between the two segments (in terms of sweep line ordering), if it exists.
+     *
+     * A 'non-trivial' intersection is one that will cause one or both of the
+     * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:
+     *
+     *   * endpoint of segA with endpoint of segB --> trivial
+     *   * endpoint of segA with point along segB --> non-trivial
+     *   * endpoint of segB with point along segA --> non-trivial
+     *   * point along segA with point along segB --> non-trivial
+     *
+     * If no non-trivial intersection exists, return null
+     * Else, return null.
+     */
+    getIntersection(other2) {
+      const tBbox = this.bbox();
+      const oBbox = other2.bbox();
+      const bboxOverlap = getBboxOverlap(tBbox, oBbox);
+      if (bboxOverlap === null) return null;
+      const tlp = this.leftSE.point;
+      const trp = this.rightSE.point;
+      const olp = other2.leftSE.point;
+      const orp = other2.rightSE.point;
+      const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;
+      const touchesThisLSE = isInBbox(oBbox, tlp) && other2.comparePoint(tlp) === 0;
+      const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;
+      const touchesThisRSE = isInBbox(oBbox, trp) && other2.comparePoint(trp) === 0;
+      if (touchesThisLSE && touchesOtherLSE) {
+        if (touchesThisRSE && !touchesOtherRSE) return trp;
+        if (!touchesThisRSE && touchesOtherRSE) return orp;
+        return null;
+      }
+      if (touchesThisLSE) {
+        if (touchesOtherRSE) {
+          if (tlp.x.eq(orp.x) && tlp.y.eq(orp.y)) return null;
         }
+        return tlp;
       }
-      if (hasWays) {
-        vertices.push(vertex);
+      if (touchesOtherLSE) {
+        if (touchesThisRSE) {
+          if (trp.x.eq(olp.x) && trp.y.eq(olp.y)) return null;
+        }
+        return olp;
       }
+      if (touchesThisRSE && touchesOtherRSE) return null;
+      if (touchesThisRSE) return trp;
+      if (touchesOtherRSE) return orp;
+      const pt2 = intersection(tlp, this.vector(), olp, other2.vector());
+      if (pt2 === null) return null;
+      if (!isInBbox(bboxOverlap, pt2)) return null;
+      return precision.snap(pt2);
     }
-    vertices = utilArrayUniq(vertices);
-    ways = utilArrayUniq(ways);
-    ways.forEach(function(way2) {
-      graph.childNodes(way2).forEach(function(node2) {
-        vgraph = vgraph.replace(node2);
-      });
-      vgraph = vgraph.replace(way2);
-      graph.parentRelations(way2).forEach(function(relation) {
-        if (relation.isRestriction()) {
-          if (relation.isValidRestriction(graph)) {
-            vgraph = vgraph.replace(relation);
-          } else if (relation.isComplete(graph)) {
-            actions.push(actionDeleteRelation(relation.id));
-          }
+    /**
+     * Split the given segment into multiple segments on the given points.
+     *  * Each existing segment will retain its leftSE and a new rightSE will be
+     *    generated for it.
+     *  * A new segment will be generated which will adopt the original segment's
+     *    rightSE, and a new leftSE will be generated for it.
+     *  * If there are more than two points given to split on, new segments
+     *    in the middle will be generated with new leftSE and rightSE's.
+     *  * An array of the newly generated SweepEvents will be returned.
+     *
+     * Warning: input array of points is modified
+     */
+    split(point) {
+      const newEvents = [];
+      const alreadyLinked = point.events !== void 0;
+      const newLeftSE = new SweepEvent(point, true);
+      const newRightSE = new SweepEvent(point, false);
+      const oldRightSE = this.rightSE;
+      this.replaceRightSE(newRightSE);
+      newEvents.push(newRightSE);
+      newEvents.push(newLeftSE);
+      const newSeg = new _Segment(
+        newLeftSE,
+        oldRightSE,
+        this.rings.slice(),
+        this.windings.slice()
+      );
+      if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {
+        newSeg.swapEvents();
+      }
+      if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {
+        this.swapEvents();
+      }
+      if (alreadyLinked) {
+        newLeftSE.checkForConsuming();
+        newRightSE.checkForConsuming();
+      }
+      return newEvents;
+    }
+    /* Swap which event is left and right */
+    swapEvents() {
+      const tmpEvt = this.rightSE;
+      this.rightSE = this.leftSE;
+      this.leftSE = tmpEvt;
+      this.leftSE.isLeft = true;
+      this.rightSE.isLeft = false;
+      for (let i3 = 0, iMax = this.windings.length; i3 < iMax; i3++) {
+        this.windings[i3] *= -1;
+      }
+    }
+    /* Consume another segment. We take their rings under our wing
+     * and mark them as consumed. Use for perfectly overlapping segments */
+    consume(other2) {
+      let consumer = this;
+      let consumee = other2;
+      while (consumer.consumedBy) consumer = consumer.consumedBy;
+      while (consumee.consumedBy) consumee = consumee.consumedBy;
+      const cmp = _Segment.compare(consumer, consumee);
+      if (cmp === 0) return;
+      if (cmp > 0) {
+        const tmp = consumer;
+        consumer = consumee;
+        consumee = tmp;
+      }
+      if (consumer.prev === consumee) {
+        const tmp = consumer;
+        consumer = consumee;
+        consumee = tmp;
+      }
+      for (let i3 = 0, iMax = consumee.rings.length; i3 < iMax; i3++) {
+        const ring = consumee.rings[i3];
+        const winding = consumee.windings[i3];
+        const index = consumer.rings.indexOf(ring);
+        if (index === -1) {
+          consumer.rings.push(ring);
+          consumer.windings.push(winding);
+        } else consumer.windings[index] += winding;
+      }
+      consumee.rings = null;
+      consumee.windings = null;
+      consumee.consumedBy = consumer;
+      consumee.leftSE.consumedBy = consumer.leftSE;
+      consumee.rightSE.consumedBy = consumer.rightSE;
+    }
+    /* The first segment previous segment chain that is in the result */
+    prevInResult() {
+      if (this._prevInResult !== void 0) return this._prevInResult;
+      if (!this.prev) this._prevInResult = null;
+      else if (this.prev.isInResult()) this._prevInResult = this.prev;
+      else this._prevInResult = this.prev.prevInResult();
+      return this._prevInResult;
+    }
+    beforeState() {
+      if (this._beforeState !== void 0) return this._beforeState;
+      if (!this.prev)
+        this._beforeState = {
+          rings: [],
+          windings: [],
+          multiPolys: []
+        };
+      else {
+        const seg = this.prev.consumedBy || this.prev;
+        this._beforeState = seg.afterState();
+      }
+      return this._beforeState;
+    }
+    afterState() {
+      if (this._afterState !== void 0) return this._afterState;
+      const beforeState = this.beforeState();
+      this._afterState = {
+        rings: beforeState.rings.slice(0),
+        windings: beforeState.windings.slice(0),
+        multiPolys: []
+      };
+      const ringsAfter = this._afterState.rings;
+      const windingsAfter = this._afterState.windings;
+      const mpsAfter = this._afterState.multiPolys;
+      for (let i3 = 0, iMax = this.rings.length; i3 < iMax; i3++) {
+        const ring = this.rings[i3];
+        const winding = this.windings[i3];
+        const index = ringsAfter.indexOf(ring);
+        if (index === -1) {
+          ringsAfter.push(ring);
+          windingsAfter.push(winding);
+        } else windingsAfter[index] += winding;
+      }
+      const polysAfter = [];
+      const polysExclude = [];
+      for (let i3 = 0, iMax = ringsAfter.length; i3 < iMax; i3++) {
+        if (windingsAfter[i3] === 0) continue;
+        const ring = ringsAfter[i3];
+        const poly = ring.poly;
+        if (polysExclude.indexOf(poly) !== -1) continue;
+        if (ring.isExterior) polysAfter.push(poly);
+        else {
+          if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);
+          const index = polysAfter.indexOf(ring.poly);
+          if (index !== -1) polysAfter.splice(index, 1);
         }
-      });
-    });
-    ways.forEach(function(w2) {
-      var way2 = vgraph.entity(w2.id);
-      if (way2.tags.oneway === "-1") {
-        var action = actionReverse(way2.id, { reverseOneway: true });
-        actions.push(action);
-        vgraph = action(vgraph);
       }
-    });
-    var origCount = osmEntity.id.next.way;
-    vertices.forEach(function(v2) {
-      var splitAll = actionSplit([v2.id]).keepHistoryOn("first");
-      if (!splitAll.disabled(vgraph)) {
-        splitAll.ways(vgraph).forEach(function(way2) {
-          var splitOne = actionSplit([v2.id]).limitWays([way2.id]).keepHistoryOn("first");
-          actions.push(splitOne);
-          vgraph = splitOne(vgraph);
-        });
+      for (let i3 = 0, iMax = polysAfter.length; i3 < iMax; i3++) {
+        const mp = polysAfter[i3].multiPoly;
+        if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);
       }
-    });
-    osmEntity.id.next.way = origCount;
-    vertexIds = vertices.map(function(v2) {
-      return v2.id;
-    });
-    vertices = [];
-    ways = [];
-    vertexIds.forEach(function(id2) {
-      var vertex2 = vgraph.entity(id2);
-      var parents2 = vgraph.parentWays(vertex2);
-      vertices.push(vertex2);
-      ways = ways.concat(parents2);
-    });
-    vertices = utilArrayUniq(vertices);
-    ways = utilArrayUniq(ways);
-    vertexIds = vertices.map(function(v2) {
-      return v2.id;
-    });
-    wayIds = ways.map(function(w2) {
-      return w2.id;
-    });
-    function withMetadata(way2, vertexIds2) {
-      var __oneWay = way2.isOneWay();
-      var __first = vertexIds2.indexOf(way2.first()) !== -1;
-      var __last = vertexIds2.indexOf(way2.last()) !== -1;
-      var __via = __first && __last;
-      var __from = __first && !__oneWay || __last;
-      var __to = __first || __last && !__oneWay;
-      return way2.update({
-        __first,
-        __last,
-        __from,
-        __via,
-        __to,
-        __oneWay
-      });
+      return this._afterState;
     }
-    ways = [];
-    wayIds.forEach(function(id2) {
-      var way2 = withMetadata(vgraph.entity(id2), vertexIds);
-      vgraph = vgraph.replace(way2);
-      ways.push(way2);
-    });
-    var keepGoing;
-    var removeWayIds = [];
-    var removeVertexIds = [];
-    do {
-      keepGoing = false;
-      checkVertices = vertexIds.slice();
-      for (i3 = 0; i3 < checkVertices.length; i3++) {
-        var vertexId = checkVertices[i3];
-        vertex = vgraph.hasEntity(vertexId);
-        if (!vertex) {
-          if (vertexIds.indexOf(vertexId) !== -1) {
-            vertexIds.splice(vertexIds.indexOf(vertexId), 1);
-          }
-          removeVertexIds.push(vertexId);
-          continue;
-        }
-        parents = vgraph.parentWays(vertex);
-        if (parents.length < 3) {
-          if (vertexIds.indexOf(vertexId) !== -1) {
-            vertexIds.splice(vertexIds.indexOf(vertexId), 1);
-          }
+    /* Is this segment part of the final result? */
+    isInResult() {
+      if (this.consumedBy) return false;
+      if (this._isInResult !== void 0) return this._isInResult;
+      const mpsBefore = this.beforeState().multiPolys;
+      const mpsAfter = this.afterState().multiPolys;
+      switch (operation_default.type) {
+        case "union": {
+          const noBefores = mpsBefore.length === 0;
+          const noAfters = mpsAfter.length === 0;
+          this._isInResult = noBefores !== noAfters;
+          break;
         }
-        if (parents.length === 2) {
-          var a2 = parents[0];
-          var b2 = parents[1];
-          var aIsLeaf = a2 && !a2.__via;
-          var bIsLeaf = b2 && !b2.__via;
-          var leaf, survivor;
-          if (aIsLeaf && !bIsLeaf) {
-            leaf = a2;
-            survivor = b2;
-          } else if (!aIsLeaf && bIsLeaf) {
-            leaf = b2;
-            survivor = a2;
-          }
-          if (leaf && survivor) {
-            survivor = withMetadata(survivor, vertexIds);
-            vgraph = vgraph.replace(survivor).remove(leaf);
-            removeWayIds.push(leaf.id);
-            keepGoing = true;
+        case "intersection": {
+          let least;
+          let most;
+          if (mpsBefore.length < mpsAfter.length) {
+            least = mpsBefore.length;
+            most = mpsAfter.length;
+          } else {
+            least = mpsAfter.length;
+            most = mpsBefore.length;
           }
+          this._isInResult = most === operation_default.numMultiPolys && least < most;
+          break;
         }
-        parents = vgraph.parentWays(vertex);
-        if (parents.length < 2) {
-          if (vertexIds.indexOf(vertexId) !== -1) {
-            vertexIds.splice(vertexIds.indexOf(vertexId), 1);
-          }
-          removeVertexIds.push(vertexId);
-          keepGoing = true;
+        case "xor": {
+          const diff = Math.abs(mpsBefore.length - mpsAfter.length);
+          this._isInResult = diff % 2 === 1;
+          break;
         }
-        if (parents.length < 1) {
-          vgraph = vgraph.remove(vertex);
+        case "difference": {
+          const isJustSubject = (mps) => mps.length === 1 && mps[0].isSubject;
+          this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);
+          break;
         }
       }
-    } while (keepGoing);
-    vertices = vertices.filter(function(vertex2) {
-      return removeVertexIds.indexOf(vertex2.id) === -1;
-    }).map(function(vertex2) {
-      return vgraph.entity(vertex2.id);
-    });
-    ways = ways.filter(function(way2) {
-      return removeWayIds.indexOf(way2.id) === -1;
-    }).map(function(way2) {
-      return vgraph.entity(way2.id);
-    });
-    var intersection2 = {
-      graph: vgraph,
-      actions,
-      vertices,
-      ways
-    };
-    intersection2.turns = function(fromWayId, maxViaWay) {
-      if (!fromWayId) return [];
-      if (!maxViaWay) maxViaWay = 0;
-      var vgraph2 = intersection2.graph;
-      var keyVertexIds = intersection2.vertices.map(function(v2) {
-        return v2.id;
-      });
-      var start2 = vgraph2.entity(fromWayId);
-      if (!start2 || !(start2.__from || start2.__via)) return [];
-      var maxPathLength = maxViaWay * 2 + 3;
-      var turns = [];
-      step(start2);
-      return turns;
-      function step(entity, currPath, currRestrictions, matchedRestriction) {
-        currPath = (currPath || []).slice();
-        if (currPath.length >= maxPathLength) return;
-        currPath.push(entity.id);
-        currRestrictions = (currRestrictions || []).slice();
-        if (entity.type === "node") {
-          stepNode(entity, currPath, currRestrictions);
-        } else {
-          stepWay(entity, currPath, currRestrictions, matchedRestriction);
-        }
+      return this._isInResult;
+    }
+  };
+  var RingIn = class {
+    constructor(geomRing, poly, isExterior) {
+      __publicField(this, "poly");
+      __publicField(this, "isExterior");
+      __publicField(this, "segments");
+      __publicField(this, "bbox");
+      if (!Array.isArray(geomRing) || geomRing.length === 0) {
+        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
       }
-      function stepNode(entity, currPath, currRestrictions) {
-        var i4, j3;
-        var parents2 = vgraph2.parentWays(entity);
-        var nextWays = [];
-        for (i4 = 0; i4 < parents2.length; i4++) {
-          var way2 = parents2[i4];
-          if (way2.__oneWay && way2.nodes[0] !== entity.id) continue;
-          if (currPath.indexOf(way2.id) !== -1 && currPath.length >= 3) continue;
-          var restrict = null;
-          for (j3 = 0; j3 < currRestrictions.length; j3++) {
-            var restriction = currRestrictions[j3];
-            var f2 = restriction.memberByRole("from");
-            var v2 = restriction.membersByRole("via");
-            var t2 = restriction.memberByRole("to");
-            var isNo = /^no_/.test(restriction.tags.restriction);
-            var isOnly = /^only_/.test(restriction.tags.restriction);
-            if (!(isNo || isOnly)) {
-              continue;
-            }
-            var matchesFrom = f2.id === fromWayId;
-            var matchesViaTo = false;
-            var isAlongOnlyPath = false;
-            if (t2.id === way2.id) {
-              if (v2.length === 1 && v2[0].type === "node") {
-                matchesViaTo = v2[0].id === entity.id && (matchesFrom && currPath.length === 2 || !matchesFrom && currPath.length > 2);
-              } else {
-                var pathVias = [];
-                for (k2 = 2; k2 < currPath.length; k2 += 2) {
-                  pathVias.push(currPath[k2]);
-                }
-                var restrictionVias = [];
-                for (k2 = 0; k2 < v2.length; k2++) {
-                  if (v2[k2].type === "way") {
-                    restrictionVias.push(v2[k2].id);
-                  }
-                }
-                var diff = utilArrayDifference(pathVias, restrictionVias);
-                matchesViaTo = !diff.length;
-              }
-            } else if (isOnly) {
-              for (k2 = 0; k2 < v2.length; k2++) {
-                if (v2[k2].type === "way" && v2[k2].id === way2.id) {
-                  isAlongOnlyPath = true;
-                  break;
-                }
-              }
-            }
-            if (matchesViaTo) {
-              if (isOnly) {
-                restrict = { id: restriction.id, direct: matchesFrom, from: f2.id, only: true, end: true };
-              } else {
-                restrict = { id: restriction.id, direct: matchesFrom, from: f2.id, no: true, end: true };
-              }
-            } else {
-              if (isAlongOnlyPath) {
-                restrict = { id: restriction.id, direct: false, from: f2.id, only: true, end: false };
-              } else if (isOnly) {
-                restrict = { id: restriction.id, direct: false, from: f2.id, no: true, end: true };
-              }
-            }
-            if (restrict && restrict.direct) break;
-          }
-          nextWays.push({ way: way2, restrict });
-        }
-        nextWays.forEach(function(nextWay) {
-          step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
-        });
+      this.poly = poly;
+      this.isExterior = isExterior;
+      this.segments = [];
+      if (typeof geomRing[0][0] !== "number" || typeof geomRing[0][1] !== "number") {
+        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
       }
-      function stepWay(entity, currPath, currRestrictions, matchedRestriction) {
-        var i4;
-        if (currPath.length >= 3) {
-          var turnPath = currPath.slice();
-          if (matchedRestriction && matchedRestriction.direct === false) {
-            for (i4 = 0; i4 < turnPath.length; i4++) {
-              if (turnPath[i4] === matchedRestriction.from) {
-                turnPath = turnPath.slice(i4);
-                break;
-              }
-            }
-          }
-          var turn = pathToTurn(turnPath);
-          if (turn) {
-            if (matchedRestriction) {
-              turn.restrictionID = matchedRestriction.id;
-              turn.no = matchedRestriction.no;
-              turn.only = matchedRestriction.only;
-              turn.direct = matchedRestriction.direct;
-            }
-            turns.push(osmTurn(turn));
-          }
-          if (currPath[0] === currPath[2]) return;
-        }
-        if (matchedRestriction && matchedRestriction.end) return;
-        var n1 = vgraph2.entity(entity.first());
-        var n22 = vgraph2.entity(entity.last());
-        var dist = geoSphericalDistance(n1.loc, n22.loc);
-        var nextNodes = [];
-        if (currPath.length > 1) {
-          if (dist > maxDistance) return;
-          if (!entity.__via) return;
-        }
-        if (!entity.__oneWay && // bidirectional..
-        keyVertexIds.indexOf(n1.id) !== -1 && // key vertex..
-        currPath.indexOf(n1.id) === -1) {
-          nextNodes.push(n1);
-        }
-        if (keyVertexIds.indexOf(n22.id) !== -1 && // key vertex..
-        currPath.indexOf(n22.id) === -1) {
-          nextNodes.push(n22);
+      const firstPoint = precision.snap({ x: new bignumber_default(geomRing[0][0]), y: new bignumber_default(geomRing[0][1]) });
+      this.bbox = {
+        ll: { x: firstPoint.x, y: firstPoint.y },
+        ur: { x: firstPoint.x, y: firstPoint.y }
+      };
+      let prevPoint = firstPoint;
+      for (let i3 = 1, iMax = geomRing.length; i3 < iMax; i3++) {
+        if (typeof geomRing[i3][0] !== "number" || typeof geomRing[i3][1] !== "number") {
+          throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
         }
-        nextNodes.forEach(function(nextNode) {
-          var fromRestrictions = vgraph2.parentRelations(entity).filter(function(r2) {
-            if (!r2.isRestriction()) return false;
-            var f2 = r2.memberByRole("from");
-            if (!f2 || f2.id !== entity.id) return false;
-            var isOnly = /^only_/.test(r2.tags.restriction);
-            if (!isOnly) return true;
-            var isOnlyVia = false;
-            var v2 = r2.membersByRole("via");
-            if (v2.length === 1 && v2[0].type === "node") {
-              isOnlyVia = v2[0].id === nextNode.id;
-            } else {
-              for (var i5 = 0; i5 < v2.length; i5++) {
-                if (v2[i5].type !== "way") continue;
-                var viaWay = vgraph2.entity(v2[i5].id);
-                if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
-                  isOnlyVia = true;
-                  break;
-                }
-              }
-            }
-            return isOnlyVia;
-          });
-          step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
-        });
+        const point = precision.snap({ x: new bignumber_default(geomRing[i3][0]), y: new bignumber_default(geomRing[i3][1]) });
+        if (point.x.eq(prevPoint.x) && point.y.eq(prevPoint.y)) continue;
+        this.segments.push(Segment.fromRing(prevPoint, point, this));
+        if (point.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = point.x;
+        if (point.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = point.y;
+        if (point.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = point.x;
+        if (point.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = point.y;
+        prevPoint = point;
       }
-      function pathToTurn(path) {
-        if (path.length < 3) return;
-        var fromWayId2, fromNodeId, fromVertexId;
-        var toWayId, toNodeId, toVertexId;
-        var viaWayIds, viaNodeId, isUturn;
-        fromWayId2 = path[0];
-        toWayId = path[path.length - 1];
-        if (path.length === 3 && fromWayId2 === toWayId) {
-          var way2 = vgraph2.entity(fromWayId2);
-          if (way2.__oneWay) return null;
-          isUturn = true;
-          viaNodeId = fromVertexId = toVertexId = path[1];
-          fromNodeId = toNodeId = adjacentNode(fromWayId2, viaNodeId);
-        } else {
-          isUturn = false;
-          fromVertexId = path[1];
-          fromNodeId = adjacentNode(fromWayId2, fromVertexId);
-          toVertexId = path[path.length - 2];
-          toNodeId = adjacentNode(toWayId, toVertexId);
-          if (path.length === 3) {
-            viaNodeId = path[1];
-          } else {
-            viaWayIds = path.filter(function(entityId) {
-              return entityId[0] === "w";
-            });
-            viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);
-          }
-        }
-        return {
-          key: path.join("_"),
-          path,
-          from: { node: fromNodeId, way: fromWayId2, vertex: fromVertexId },
-          via: { node: viaNodeId, ways: viaWayIds },
-          to: { node: toNodeId, way: toWayId, vertex: toVertexId },
-          u: isUturn
-        };
-        function adjacentNode(wayId, affixId) {
-          var nodes2 = vgraph2.entity(wayId).nodes;
-          return affixId === nodes2[0] ? nodes2[1] : nodes2[nodes2.length - 2];
-        }
+      if (!firstPoint.x.eq(prevPoint.x) || !firstPoint.y.eq(prevPoint.y)) {
+        this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));
       }
-    };
-    return intersection2;
-  }
-  function osmInferRestriction(graph, turn, projection2) {
-    var fromWay = graph.entity(turn.from.way);
-    var fromNode = graph.entity(turn.from.node);
-    var fromVertex = graph.entity(turn.from.vertex);
-    var toWay = graph.entity(turn.to.way);
-    var toNode = graph.entity(turn.to.node);
-    var toVertex = graph.entity(turn.to.vertex);
-    var fromOneWay = fromWay.tags.oneway === "yes";
-    var toOneWay = toWay.tags.oneway === "yes";
-    var angle2 = (geoAngle(fromVertex, fromNode, projection2) - geoAngle(toVertex, toNode, projection2)) * 180 / Math.PI;
-    while (angle2 < 0) {
-      angle2 += 360;
-    }
-    if (fromNode === toNode) {
-      return "no_u_turn";
-    }
-    if ((angle2 < 23 || angle2 > 336) && fromOneWay && toOneWay) {
-      return "no_u_turn";
-    }
-    if ((angle2 < 40 || angle2 > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex) {
-      return "no_u_turn";
     }
-    if (angle2 < 158) {
-      return "no_right_turn";
+    getSweepEvents() {
+      const sweepEvents = [];
+      for (let i3 = 0, iMax = this.segments.length; i3 < iMax; i3++) {
+        const segment = this.segments[i3];
+        sweepEvents.push(segment.leftSE);
+        sweepEvents.push(segment.rightSE);
+      }
+      return sweepEvents;
     }
-    if (angle2 > 202) {
-      return "no_left_turn";
+  };
+  var PolyIn = class {
+    constructor(geomPoly, multiPoly) {
+      __publicField(this, "multiPoly");
+      __publicField(this, "exteriorRing");
+      __publicField(this, "interiorRings");
+      __publicField(this, "bbox");
+      if (!Array.isArray(geomPoly)) {
+        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
+      }
+      this.exteriorRing = new RingIn(geomPoly[0], this, true);
+      this.bbox = {
+        ll: { x: this.exteriorRing.bbox.ll.x, y: this.exteriorRing.bbox.ll.y },
+        ur: { x: this.exteriorRing.bbox.ur.x, y: this.exteriorRing.bbox.ur.y }
+      };
+      this.interiorRings = [];
+      for (let i3 = 1, iMax = geomPoly.length; i3 < iMax; i3++) {
+        const ring = new RingIn(geomPoly[i3], this, false);
+        if (ring.bbox.ll.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = ring.bbox.ll.x;
+        if (ring.bbox.ll.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = ring.bbox.ll.y;
+        if (ring.bbox.ur.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = ring.bbox.ur.x;
+        if (ring.bbox.ur.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = ring.bbox.ur.y;
+        this.interiorRings.push(ring);
+      }
+      this.multiPoly = multiPoly;
     }
-    return "no_straight_on";
-  }
-
-  // modules/actions/merge_polygon.js
-  function actionMergePolygon(ids, newRelationId) {
-    function groupEntities(graph) {
-      var entities = ids.map(function(id2) {
-        return graph.entity(id2);
-      });
-      var geometryGroups = utilArrayGroupBy(entities, function(entity) {
-        if (entity.type === "way" && entity.isClosed()) {
-          return "closedWay";
-        } else if (entity.type === "relation" && entity.isMultipolygon()) {
-          return "multipolygon";
-        } else {
-          return "other";
+    getSweepEvents() {
+      const sweepEvents = this.exteriorRing.getSweepEvents();
+      for (let i3 = 0, iMax = this.interiorRings.length; i3 < iMax; i3++) {
+        const ringSweepEvents = this.interiorRings[i3].getSweepEvents();
+        for (let j2 = 0, jMax = ringSweepEvents.length; j2 < jMax; j2++) {
+          sweepEvents.push(ringSweepEvents[j2]);
         }
-      });
-      return Object.assign(
-        { closedWay: [], multipolygon: [], other: [] },
-        geometryGroups
-      );
+      }
+      return sweepEvents;
     }
-    var action = function(graph) {
-      var entities = groupEntities(graph);
-      var polygons = entities.multipolygon.reduce(function(polygons2, m2) {
-        return polygons2.concat(osmJoinWays(m2.members, graph));
-      }, []).concat(entities.closedWay.map(function(d2) {
-        var member = [{ id: d2.id }];
-        member.nodes = graph.childNodes(d2);
-        return member;
-      }));
-      var contained = polygons.map(function(w2, i3) {
-        return polygons.map(function(d2, n3) {
-          if (i3 === n3) return null;
-          return geoPolygonContainsPolygon(
-            d2.nodes.map(function(n4) {
-              return n4.loc;
-            }),
-            w2.nodes.map(function(n4) {
-              return n4.loc;
-            })
-          );
-        });
-      });
-      var members = [];
-      var outer = true;
-      while (polygons.length) {
-        extractUncontained(polygons);
-        polygons = polygons.filter(isContained);
-        contained = contained.filter(isContained).map(filterContained);
+  };
+  var MultiPolyIn = class {
+    constructor(geom, isSubject) {
+      __publicField(this, "isSubject");
+      __publicField(this, "polys");
+      __publicField(this, "bbox");
+      if (!Array.isArray(geom)) {
+        throw new Error("Input geometry is not a valid Polygon or MultiPolygon");
       }
-      function isContained(d2, i3) {
-        return contained[i3].some(function(val) {
-          return val;
-        });
+      try {
+        if (typeof geom[0][0][0] === "number") geom = [geom];
+      } catch (ex) {
       }
-      function filterContained(d2) {
-        return d2.filter(isContained);
+      this.polys = [];
+      this.bbox = {
+        ll: { x: new bignumber_default(Number.POSITIVE_INFINITY), y: new bignumber_default(Number.POSITIVE_INFINITY) },
+        ur: { x: new bignumber_default(Number.NEGATIVE_INFINITY), y: new bignumber_default(Number.NEGATIVE_INFINITY) }
+      };
+      for (let i3 = 0, iMax = geom.length; i3 < iMax; i3++) {
+        const poly = new PolyIn(geom[i3], this);
+        if (poly.bbox.ll.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = poly.bbox.ll.x;
+        if (poly.bbox.ll.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = poly.bbox.ll.y;
+        if (poly.bbox.ur.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = poly.bbox.ur.x;
+        if (poly.bbox.ur.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = poly.bbox.ur.y;
+        this.polys.push(poly);
       }
-      function extractUncontained(polygons2) {
-        polygons2.forEach(function(d2, i3) {
-          if (!isContained(d2, i3)) {
-            d2.forEach(function(member) {
-              members.push({
-                type: "way",
-                id: member.id,
-                role: outer ? "outer" : "inner"
-              });
-            });
+      this.isSubject = isSubject;
+    }
+    getSweepEvents() {
+      const sweepEvents = [];
+      for (let i3 = 0, iMax = this.polys.length; i3 < iMax; i3++) {
+        const polySweepEvents = this.polys[i3].getSweepEvents();
+        for (let j2 = 0, jMax = polySweepEvents.length; j2 < jMax; j2++) {
+          sweepEvents.push(polySweepEvents[j2]);
+        }
+      }
+      return sweepEvents;
+    }
+  };
+  var union = (geom, ...moreGeoms) => operation_default.run("union", geom, moreGeoms);
+  var difference = (geom, ...moreGeoms) => operation_default.run("difference", geom, moreGeoms);
+  var setPrecision = precision.set;
+
+  // node_modules/@rapideditor/location-conflation/index.mjs
+  var import_geojson_area = __toESM(require_geojson_area(), 1);
+  var import_circle_to_polygon = __toESM(require_circle_to_polygon(), 1);
+  var import_geojson_precision = __toESM(require_geojson_precision(), 1);
+  var import_json_stringify_pretty_compact = __toESM(require_json_stringify_pretty_compact(), 1);
+  var LocationConflation = class {
+    // constructor
+    //
+    // `fc`  Optional FeatureCollection of known features
+    //
+    // Optionally pass a GeoJSON FeatureCollection of known features which we can refer to later.
+    // Each feature must have a filename-like `id`, for example: `something.geojson`
+    //
+    // {
+    //   "type": "FeatureCollection"
+    //   "features": [
+    //     {
+    //       "type": "Feature",
+    //       "id": "philly_metro.geojson",
+    //       "properties": { … },
+    //       "geometry": { … }
+    //     }
+    //   ]
+    // }
+    constructor(fc) {
+      this._cache = {};
+      this.strict = true;
+      if (fc && fc.type === "FeatureCollection" && Array.isArray(fc.features)) {
+        fc.features.forEach((feature3) => {
+          feature3.properties = feature3.properties || {};
+          let props = feature3.properties;
+          let id2 = feature3.id || props.id;
+          if (!id2 || !/^\S+\.geojson$/i.test(id2)) return;
+          id2 = id2.toLowerCase();
+          feature3.id = id2;
+          props.id = id2;
+          if (!props.area) {
+            const area = import_geojson_area.default.geometry(feature3.geometry) / 1e6;
+            props.area = Number(area.toFixed(2));
           }
+          this._cache[id2] = feature3;
         });
-        outer = !outer;
-      }
-      var relation;
-      if (entities.multipolygon.length > 0) {
-        var oldestID = utilOldestID(entities.multipolygon.map((entity) => entity.id));
-        relation = entities.multipolygon.find((entity) => entity.id === oldestID);
-      } else {
-        relation = osmRelation({ id: newRelationId, tags: { type: "multipolygon" } });
       }
-      entities.multipolygon.forEach(function(m2) {
-        if (m2.id !== relation.id) {
-          relation = relation.mergeTags(m2.tags);
-          graph = graph.remove(m2);
+      let world = _cloneDeep(feature("Q2"));
+      world.geometry = {
+        type: "Polygon",
+        coordinates: [[[-180, -90], [180, -90], [180, 90], [-180, 90], [-180, -90]]]
+      };
+      world.id = "Q2";
+      world.properties.id = "Q2";
+      world.properties.area = import_geojson_area.default.geometry(world.geometry) / 1e6;
+      this._cache.Q2 = world;
+    }
+    // validateLocation
+    // `location`  The location to validate
+    //
+    // Pass a `location` value to validate
+    //
+    // Returns a result like:
+    //   {
+    //     type:     'point', 'geojson', or 'countrycoder'
+    //     location:  the queried location
+    //     id:        the stable identifier for the feature
+    //   }
+    // or `null` if the location is invalid
+    //
+    validateLocation(location) {
+      if (Array.isArray(location) && (location.length === 2 || location.length === 3)) {
+        const lon = location[0];
+        const lat = location[1];
+        const radius = location[2];
+        if (Number.isFinite(lon) && lon >= -180 && lon <= 180 && Number.isFinite(lat) && lat >= -90 && lat <= 90 && (location.length === 2 || Number.isFinite(radius) && radius > 0)) {
+          const id2 = "[" + location.toString() + "]";
+          return { type: "point", location, id: id2 };
         }
-      });
-      entities.closedWay.forEach(function(way) {
-        function isThisOuter(m2) {
-          return m2.id === way.id && m2.role !== "inner";
+      } else if (typeof location === "string" && /^\S+\.geojson$/i.test(location)) {
+        const id2 = location.toLowerCase();
+        if (this._cache[id2]) {
+          return { type: "geojson", location, id: id2 };
         }
-        if (members.some(isThisOuter)) {
-          relation = relation.mergeTags(way.tags);
-          graph = graph.replace(way.update({ tags: {} }));
+      } else if (typeof location === "string" || typeof location === "number") {
+        const feature3 = feature(location);
+        if (feature3) {
+          const id2 = feature3.properties.wikidata;
+          return { type: "countrycoder", location, id: id2 };
         }
-      });
-      return graph.replace(relation.update({
-        members,
-        tags: utilObjectOmit(relation.tags, ["area"])
-      }));
-    };
-    action.disabled = function(graph) {
-      var entities = groupEntities(graph);
-      if (entities.other.length > 0 || entities.closedWay.length + entities.multipolygon.length < 2) {
-        return "not_eligible";
       }
-      if (!entities.multipolygon.every(function(r2) {
-        return r2.isComplete(graph);
-      })) {
-        return "incomplete_relation";
+      if (this.strict) {
+        throw new Error('validateLocation:  Invalid location: "'.concat(location, '".'));
+      } else {
+        return null;
       }
-      if (!entities.multipolygon.length) {
-        var sharedMultipolygons = [];
-        entities.closedWay.forEach(function(way, i3) {
-          if (i3 === 0) {
-            sharedMultipolygons = graph.parentMultipolygons(way);
-          } else {
-            sharedMultipolygons = utilArrayIntersection(sharedMultipolygons, graph.parentMultipolygons(way));
-          }
-        });
-        sharedMultipolygons = sharedMultipolygons.filter(function(relation) {
-          return relation.members.length === entities.closedWay.length;
-        });
-        if (sharedMultipolygons.length) {
-          return "not_eligible";
+    }
+    // resolveLocation
+    // `location`  The location to resolve
+    //
+    // Pass a `location` value to resolve
+    //
+    // Returns a result like:
+    //   {
+    //     type:      'point', 'geojson', or 'countrycoder'
+    //     location:  the queried location
+    //     id:        a stable identifier for the feature
+    //     feature:   the resolved GeoJSON feature
+    //   }
+    //  or `null` if the location is invalid
+    //
+    resolveLocation(location) {
+      const valid = this.validateLocation(location);
+      if (!valid) return null;
+      const id2 = valid.id;
+      if (this._cache[id2]) {
+        return Object.assign(valid, { feature: this._cache[id2] });
+      }
+      if (valid.type === "point") {
+        const lon = location[0];
+        const lat = location[1];
+        const radius = location[2] || 25;
+        const EDGES = 10;
+        const PRECISION = 3;
+        const area = Math.PI * radius * radius;
+        const feature3 = this._cache[id2] = (0, import_geojson_precision.default)({
+          type: "Feature",
+          id: id2,
+          properties: { id: id2, area: Number(area.toFixed(2)) },
+          geometry: (0, import_circle_to_polygon.default)([lon, lat], radius * 1e3, EDGES)
+          // km to m
+        }, PRECISION);
+        return Object.assign(valid, { feature: feature3 });
+      } else if (valid.type === "geojson") {
+      } else if (valid.type === "countrycoder") {
+        let feature3 = _cloneDeep(feature(id2));
+        let props = feature3.properties;
+        if (Array.isArray(props.members)) {
+          let aggregate = aggregateFeature(id2);
+          aggregate.geometry.coordinates = _clip([aggregate], "UNION").geometry.coordinates;
+          feature3.geometry = aggregate.geometry;
         }
-      } else if (entities.closedWay.some(function(way) {
-        return utilArrayIntersection(graph.parentMultipolygons(way), entities.multipolygon).length;
-      })) {
-        return "not_eligible";
+        if (!props.area) {
+          const area = import_geojson_area.default.geometry(feature3.geometry) / 1e6;
+          props.area = Number(area.toFixed(2));
+        }
+        feature3.id = id2;
+        props.id = id2;
+        this._cache[id2] = feature3;
+        return Object.assign(valid, { feature: feature3 });
       }
-    };
-    return action;
-  }
-
-  // modules/actions/merge_remote_changes.js
-  var import_fast_deep_equal = __toESM(require_fast_deep_equal());
-
-  // node_modules/node-diff3/index.mjs
-  function LCS(buffer1, buffer2) {
-    let equivalenceClasses = {};
-    for (let j2 = 0; j2 < buffer2.length; j2++) {
-      const item = buffer2[j2];
-      if (equivalenceClasses[item]) {
-        equivalenceClasses[item].push(j2);
+      if (this.strict) {
+        throw new Error("resolveLocation:  Couldn't resolve location \"".concat(location, '".'));
       } else {
-        equivalenceClasses[item] = [j2];
+        return null;
       }
     }
-    const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };
-    let candidates = [NULLRESULT];
-    for (let i3 = 0; i3 < buffer1.length; i3++) {
-      const item = buffer1[i3];
-      const buffer2indices = equivalenceClasses[item] || [];
-      let r2 = 0;
-      let c2 = candidates[0];
-      for (let jx = 0; jx < buffer2indices.length; jx++) {
-        const j2 = buffer2indices[jx];
-        let s2;
-        for (s2 = r2; s2 < candidates.length; s2++) {
-          if (candidates[s2].buffer2index < j2 && (s2 === candidates.length - 1 || candidates[s2 + 1].buffer2index > j2)) {
-            break;
-          }
-        }
-        if (s2 < candidates.length) {
-          const newCandidate = { buffer1index: i3, buffer2index: j2, chain: candidates[s2] };
-          if (r2 === candidates.length) {
-            candidates.push(c2);
-          } else {
-            candidates[r2] = c2;
-          }
-          r2 = s2 + 1;
-          c2 = newCandidate;
-          if (r2 === candidates.length) {
-            break;
-          }
+    // validateLocationSet
+    // `locationSet`  the locationSet to validate
+    //
+    // Pass a locationSet Object to validate like:
+    //   {
+    //     include: [ Array of locations ],
+    //     exclude: [ Array of locations ]
+    //   }
+    //
+    // Returns a result like:
+    //   {
+    //     type:         'locationset'
+    //     locationSet:  the queried locationSet
+    //     id:           the stable identifier for the feature
+    //   }
+    // or `null` if the locationSet is invalid
+    //
+    validateLocationSet(locationSet) {
+      locationSet = locationSet || {};
+      const validator = this.validateLocation.bind(this);
+      let include = (locationSet.include || []).map(validator).filter(Boolean);
+      let exclude = (locationSet.exclude || []).map(validator).filter(Boolean);
+      if (!include.length) {
+        if (this.strict) {
+          throw new Error("validateLocationSet:  LocationSet includes nothing.");
+        } else {
+          locationSet.include = ["Q2"];
+          include = [{ type: "countrycoder", location: "Q2", id: "Q2" }];
         }
       }
-      candidates[r2] = c2;
+      include.sort(_sortLocations);
+      let id2 = "+[" + include.map((d2) => d2.id).join(",") + "]";
+      if (exclude.length) {
+        exclude.sort(_sortLocations);
+        id2 += "-[" + exclude.map((d2) => d2.id).join(",") + "]";
+      }
+      return { type: "locationset", locationSet, id: id2 };
     }
-    return candidates[candidates.length - 1];
-  }
-  function diffIndices(buffer1, buffer2) {
-    const lcs = LCS(buffer1, buffer2);
-    let result = [];
-    let tail1 = buffer1.length;
-    let tail2 = buffer2.length;
-    for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
-      const mismatchLength1 = tail1 - candidate.buffer1index - 1;
-      const mismatchLength2 = tail2 - candidate.buffer2index - 1;
-      tail1 = candidate.buffer1index;
-      tail2 = candidate.buffer2index;
-      if (mismatchLength1 || mismatchLength2) {
-        result.push({
-          buffer1: [tail1 + 1, mismatchLength1],
-          buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),
-          buffer2: [tail2 + 1, mismatchLength2],
-          buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)
-        });
+    // resolveLocationSet
+    // `locationSet`  the locationSet to resolve
+    //
+    // Pass a locationSet Object to validate like:
+    //   {
+    //     include: [ Array of locations ],
+    //     exclude: [ Array of locations ]
+    //   }
+    //
+    // Returns a result like:
+    //   {
+    //     type:         'locationset'
+    //     locationSet:  the queried locationSet
+    //     id:           the stable identifier for the feature
+    //     feature:      the resolved GeoJSON feature
+    //   }
+    // or `null` if the locationSet is invalid
+    //
+    resolveLocationSet(locationSet) {
+      locationSet = locationSet || {};
+      const valid = this.validateLocationSet(locationSet);
+      if (!valid) return null;
+      const id2 = valid.id;
+      if (this._cache[id2]) {
+        return Object.assign(valid, { feature: this._cache[id2] });
+      }
+      const resolver = this.resolveLocation.bind(this);
+      const includes = (locationSet.include || []).map(resolver).filter(Boolean);
+      const excludes = (locationSet.exclude || []).map(resolver).filter(Boolean);
+      if (includes.length === 1 && excludes.length === 0) {
+        return Object.assign(valid, { feature: includes[0].feature });
       }
+      const includeGeoJSON = _clip(includes.map((d2) => d2.feature), "UNION");
+      const excludeGeoJSON = _clip(excludes.map((d2) => d2.feature), "UNION");
+      let resultGeoJSON = excludeGeoJSON ? _clip([includeGeoJSON, excludeGeoJSON], "DIFFERENCE") : includeGeoJSON;
+      const area = import_geojson_area.default.geometry(resultGeoJSON.geometry) / 1e6;
+      resultGeoJSON.id = id2;
+      resultGeoJSON.properties = { id: id2, area: Number(area.toFixed(2)) };
+      this._cache[id2] = resultGeoJSON;
+      return Object.assign(valid, { feature: resultGeoJSON });
     }
-    result.reverse();
-    return result;
-  }
-  function diff3MergeRegions(a2, o2, b2) {
-    let hunks = [];
-    function addHunk(h2, ab) {
-      hunks.push({
-        ab,
-        oStart: h2.buffer1[0],
-        oLength: h2.buffer1[1],
-        // length of o to remove
-        abStart: h2.buffer2[0],
-        abLength: h2.buffer2[1]
-        // length of a/b to insert
-        // abContent: (ab === 'a' ? a : b).slice(h.buffer2[0], h.buffer2[0] + h.buffer2[1])
-      });
+    // stringify
+    // convenience method to prettyStringify the given object
+    stringify(obj, options2) {
+      return (0, import_json_stringify_pretty_compact.default)(obj, options2);
     }
-    diffIndices(o2, a2).forEach((item) => addHunk(item, "a"));
-    diffIndices(o2, b2).forEach((item) => addHunk(item, "b"));
-    hunks.sort((x2, y2) => x2.oStart - y2.oStart);
-    let results = [];
-    let currOffset = 0;
-    function advanceTo(endOffset) {
-      if (endOffset > currOffset) {
-        results.push({
-          stable: true,
-          buffer: "o",
-          bufferStart: currOffset,
-          bufferLength: endOffset - currOffset,
-          bufferContent: o2.slice(currOffset, endOffset)
-        });
-        currOffset = endOffset;
+  };
+  function _clip(features, which) {
+    if (!Array.isArray(features) || !features.length) return null;
+    const fn = { UNION: union, DIFFERENCE: difference }[which];
+    const args = features.map((feature3) => feature3.geometry.coordinates);
+    const coords = fn.apply(null, args);
+    return {
+      type: "Feature",
+      properties: {},
+      geometry: {
+        type: whichType(coords),
+        coordinates: coords
       }
+    };
+    function whichType(coords2) {
+      const a2 = Array.isArray(coords2);
+      const b2 = a2 && Array.isArray(coords2[0]);
+      const c2 = b2 && Array.isArray(coords2[0][0]);
+      const d2 = c2 && Array.isArray(coords2[0][0][0]);
+      return d2 ? "MultiPolygon" : "Polygon";
     }
-    while (hunks.length) {
-      let hunk = hunks.shift();
-      let regionStart = hunk.oStart;
-      let regionEnd = hunk.oStart + hunk.oLength;
-      let regionHunks = [hunk];
-      advanceTo(regionStart);
-      while (hunks.length) {
-        const nextHunk = hunks[0];
-        const nextHunkStart = nextHunk.oStart;
-        if (nextHunkStart > regionEnd) break;
-        regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);
-        regionHunks.push(hunks.shift());
-      }
-      if (regionHunks.length === 1) {
-        if (hunk.abLength > 0) {
-          const buffer = hunk.ab === "a" ? a2 : b2;
-          results.push({
-            stable: true,
-            buffer: hunk.ab,
-            bufferStart: hunk.abStart,
-            bufferLength: hunk.abLength,
-            bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)
-          });
+  }
+  function _cloneDeep(obj) {
+    return JSON.parse(JSON.stringify(obj));
+  }
+  function _sortLocations(a2, b2) {
+    const rank = { countrycoder: 1, geojson: 2, point: 3 };
+    const aRank = rank[a2.type];
+    const bRank = rank[b2.type];
+    return aRank > bRank ? 1 : aRank < bRank ? -1 : a2.id.localeCompare(b2.id);
+  }
+
+  // modules/core/LocationManager.js
+  var import_which_polygon2 = __toESM(require_which_polygon());
+  var import_geojson_area2 = __toESM(require_geojson_area());
+  var _loco = new LocationConflation();
+  var LocationManager = class {
+    /**
+     * @constructor
+     */
+    constructor() {
+      this._wp = null;
+      this._resolved = /* @__PURE__ */ new Map();
+      this._knownLocationSets = /* @__PURE__ */ new Map();
+      this._locationIncludedIn = /* @__PURE__ */ new Map();
+      this._locationExcludedIn = /* @__PURE__ */ new Map();
+      const world = { locationSet: { include: ["Q2"] } };
+      this._resolveLocationSet(world);
+      this._rebuildIndex();
+    }
+    /**
+     * _validateLocationSet
+     * Pass an Object with a `locationSet` property.
+     * Validates the `locationSet` and sets a `locationSetID` property on the object.
+     * To avoid so much computation we only resolve the include and exclude regions, but not the locationSet itself.
+     *
+     * Use `_resolveLocationSet()` instead if you need to resolve geojson of locationSet, for example to render it.
+     * Note: You need to call `_rebuildIndex()` after you're all finished validating the locationSets.
+     *
+     * @param  `obj`  Object to check, it should have `locationSet` property
+     */
+    _validateLocationSet(obj) {
+      if (obj.locationSetID) return;
+      try {
+        let locationSet = obj.locationSet;
+        if (!locationSet) {
+          throw new Error("object missing locationSet property");
         }
-      } else {
-        let bounds = {
-          a: [a2.length, -1, o2.length, -1],
-          b: [b2.length, -1, o2.length, -1]
-        };
-        while (regionHunks.length) {
-          hunk = regionHunks.shift();
-          const oStart = hunk.oStart;
-          const oEnd = oStart + hunk.oLength;
-          const abStart = hunk.abStart;
-          const abEnd = abStart + hunk.abLength;
-          let b3 = bounds[hunk.ab];
-          b3[0] = Math.min(abStart, b3[0]);
-          b3[1] = Math.max(abEnd, b3[1]);
-          b3[2] = Math.min(oStart, b3[2]);
-          b3[3] = Math.max(oEnd, b3[3]);
+        if (!locationSet.include) {
+          locationSet.include = ["Q2"];
         }
-        const aStart = bounds.a[0] + (regionStart - bounds.a[2]);
-        const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);
-        const bStart = bounds.b[0] + (regionStart - bounds.b[2]);
-        const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);
-        let result = {
-          stable: false,
-          aStart,
-          aLength: aEnd - aStart,
-          aContent: a2.slice(aStart, aEnd),
-          oStart: regionStart,
-          oLength: regionEnd - regionStart,
-          oContent: o2.slice(regionStart, regionEnd),
-          bStart,
-          bLength: bEnd - bStart,
-          bContent: b2.slice(bStart, bEnd)
-        };
-        results.push(result);
+        const locationSetID = _loco.validateLocationSet(locationSet).id;
+        obj.locationSetID = locationSetID;
+        if (this._knownLocationSets.has(locationSetID)) return;
+        let area = 0;
+        (locationSet.include || []).forEach((location) => {
+          const locationID = _loco.validateLocation(location).id;
+          let geojson = this._resolved.get(locationID);
+          if (!geojson) {
+            geojson = _loco.resolveLocation(location).feature;
+            this._resolved.set(locationID, geojson);
+          }
+          area += geojson.properties.area;
+          let s2 = this._locationIncludedIn.get(locationID);
+          if (!s2) {
+            s2 = /* @__PURE__ */ new Set();
+            this._locationIncludedIn.set(locationID, s2);
+          }
+          s2.add(locationSetID);
+        });
+        (locationSet.exclude || []).forEach((location) => {
+          const locationID = _loco.validateLocation(location).id;
+          let geojson = this._resolved.get(locationID);
+          if (!geojson) {
+            geojson = _loco.resolveLocation(location).feature;
+            this._resolved.set(locationID, geojson);
+          }
+          area -= geojson.properties.area;
+          let s2 = this._locationExcludedIn.get(locationID);
+          if (!s2) {
+            s2 = /* @__PURE__ */ new Set();
+            this._locationExcludedIn.set(locationID, s2);
+          }
+          s2.add(locationSetID);
+        });
+        this._knownLocationSets.set(locationSetID, area);
+      } catch (e3) {
+        obj.locationSet = { include: ["Q2"] };
+        obj.locationSetID = "+[Q2]";
       }
-      currOffset = regionEnd;
     }
-    advanceTo(o2.length);
-    return results;
-  }
-  function diff3Merge(a2, o2, b2, options2) {
-    let defaults = {
-      excludeFalseConflicts: true,
-      stringSeparator: /\s+/
-    };
-    options2 = Object.assign(defaults, options2);
-    if (typeof a2 === "string") a2 = a2.split(options2.stringSeparator);
-    if (typeof o2 === "string") o2 = o2.split(options2.stringSeparator);
-    if (typeof b2 === "string") b2 = b2.split(options2.stringSeparator);
-    let results = [];
-    const regions = diff3MergeRegions(a2, o2, b2);
-    let okBuffer = [];
-    function flushOk() {
-      if (okBuffer.length) {
-        results.push({ ok: okBuffer });
+    /**
+     * _resolveLocationSet
+     * Does everything that `_validateLocationSet()` does, but then "resolves" the locationSet into GeoJSON.
+     * This step is a bit more computationally expensive, so really only needed if you intend to render the shape.
+     *
+     * Note: You need to call `_rebuildIndex()` after you're all finished validating the locationSets.
+     *
+     * @param  `obj`  Object to check, it should have `locationSet` property
+     */
+    _resolveLocationSet(obj) {
+      this._validateLocationSet(obj);
+      if (this._resolved.has(obj.locationSetID)) return;
+      try {
+        const result = _loco.resolveLocationSet(obj.locationSet);
+        const locationSetID = result.id;
+        obj.locationSetID = locationSetID;
+        if (!result.feature.geometry.coordinates.length || !result.feature.properties.area) {
+          throw new Error("locationSet ".concat(locationSetID, " resolves to an empty feature."));
+        }
+        let geojson = JSON.parse(JSON.stringify(result.feature));
+        geojson.id = locationSetID;
+        geojson.properties.id = locationSetID;
+        this._resolved.set(locationSetID, geojson);
+      } catch (e3) {
+        obj.locationSet = { include: ["Q2"] };
+        obj.locationSetID = "+[Q2]";
       }
-      okBuffer = [];
     }
-    function isFalseConflict(a3, b3) {
-      if (a3.length !== b3.length) return false;
-      for (let i3 = 0; i3 < a3.length; i3++) {
-        if (a3[i3] !== b3[i3]) return false;
-      }
-      return true;
+    /**
+     * _rebuildIndex
+     * Rebuilds the whichPolygon index with whatever features have been resolved into GeoJSON.
+     */
+    _rebuildIndex() {
+      this._wp = (0, import_which_polygon2.default)({ features: [...this._resolved.values()] });
     }
-    regions.forEach((region) => {
-      if (region.stable) {
-        okBuffer.push(...region.bufferContent);
-      } else {
-        if (options2.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {
-          okBuffer.push(...region.aContent);
-        } else {
-          flushOk();
-          results.push({
-            conflict: {
-              a: region.aContent,
-              aIndex: region.aStart,
-              o: region.oContent,
-              oIndex: region.oStart,
-              b: region.bContent,
-              bIndex: region.bStart
-            }
-          });
+    /**
+     * mergeCustomGeoJSON
+     * Accepts a FeatureCollection-like object containing custom locations
+     * Each feature must have a filename-like `id`, for example: `something.geojson`
+     * {
+     *   "type": "FeatureCollection"
+     *   "features": [
+     *     {
+     *       "type": "Feature",
+     *       "id": "philly_metro.geojson",
+     *       "properties": { … },
+     *       "geometry": { … }
+     *     }
+     *   ]
+     * }
+     *
+     * @param  `fc`  FeatureCollection-like Object containing custom locations
+     */
+    mergeCustomGeoJSON(fc) {
+      if (!fc || fc.type !== "FeatureCollection" || !Array.isArray(fc.features)) return;
+      fc.features.forEach((feature3) => {
+        feature3.properties = feature3.properties || {};
+        let props = feature3.properties;
+        let id2 = feature3.id || props.id;
+        if (!id2 || !/^\S+\.geojson$/i.test(id2)) return;
+        id2 = id2.toLowerCase();
+        feature3.id = id2;
+        props.id = id2;
+        if (!props.area) {
+          const area = import_geojson_area2.default.geometry(feature3.geometry) / 1e6;
+          props.area = Number(area.toFixed(2));
         }
-      }
-    });
-    flushOk();
-    return results;
-  }
-
-  // modules/actions/merge_remote_changes.js
-  var import_lodash2 = __toESM(require_lodash());
-  function actionMergeRemoteChanges(id2, localGraph, remoteGraph, discardTags, formatUser) {
-    discardTags = discardTags || {};
-    var _option = "safe";
-    var _conflicts = [];
-    function user(d2) {
-      return typeof formatUser === "function" ? formatUser(d2) : (0, import_lodash2.escape)(d2);
+        _loco._cache[id2] = feature3;
+      });
     }
-    function mergeLocation(remote, target) {
-      function pointEqual(a2, b2) {
-        var epsilon3 = 1e-6;
-        return Math.abs(a2[0] - b2[0]) < epsilon3 && Math.abs(a2[1] - b2[1]) < epsilon3;
-      }
-      if (_option === "force_local" || pointEqual(target.loc, remote.loc)) {
-        return target;
-      }
-      if (_option === "force_remote") {
-        return target.update({ loc: remote.loc });
-      }
-      _conflicts.push(_t.html("merge_remote_changes.conflict.location", { user: { html: user(remote.user) } }));
-      return target;
+    /**
+     * mergeLocationSets
+     * Accepts an Array of Objects containing `locationSet` properties:
+     * [
+     *  { id: 'preset1', locationSet: {…} },
+     *  { id: 'preset2', locationSet: {…} },
+     *  …
+     * ]
+     * After validating, the Objects will be decorated with a `locationSetID` property:
+     * [
+     *  { id: 'preset1', locationSet: {…}, locationSetID: '+[Q2]' },
+     *  { id: 'preset2', locationSet: {…}, locationSetID: '+[Q30]' },
+     *  …
+     * ]
+     *
+     * @param  `objects`  Objects to check - they should have `locationSet` property
+     * @return  Promise resolved true (this function used to be slow/async, now it's faster and sync)
+     */
+    mergeLocationSets(objects) {
+      if (!Array.isArray(objects)) return Promise.reject("nothing to do");
+      objects.forEach((obj) => this._validateLocationSet(obj));
+      this._rebuildIndex();
+      return Promise.resolve(objects);
     }
-    function mergeNodes(base, remote, target) {
-      if (_option === "force_local" || (0, import_fast_deep_equal.default)(target.nodes, remote.nodes)) {
-        return target;
-      }
-      if (_option === "force_remote") {
-        return target.update({ nodes: remote.nodes });
-      }
-      var ccount = _conflicts.length;
-      var o2 = base.nodes || [];
-      var a2 = target.nodes || [];
-      var b2 = remote.nodes || [];
-      var nodes = [];
-      var hunks = diff3Merge(a2, o2, b2, { excludeFalseConflicts: true });
-      for (var i3 = 0; i3 < hunks.length; i3++) {
-        var hunk = hunks[i3];
-        if (hunk.ok) {
-          nodes.push.apply(nodes, hunk.ok);
-        } else {
-          var c2 = hunk.conflict;
-          if ((0, import_fast_deep_equal.default)(c2.o, c2.a)) {
-            nodes.push.apply(nodes, c2.b);
-          } else if ((0, import_fast_deep_equal.default)(c2.o, c2.b)) {
-            nodes.push.apply(nodes, c2.a);
-          } else {
-            _conflicts.push(_t.html("merge_remote_changes.conflict.nodelist", { user: { html: user(remote.user) } }));
-            break;
-          }
-        }
+    /**
+     * locationSetID
+     * Returns a locationSetID for a given locationSet (fallback to `+[Q2]`, world)
+     * (The locationSet doesn't necessarily need to be resolved to compute its `id`)
+     *
+     * @param  `locationSet`  A locationSet Object, e.g. `{ include: ['us'] }`
+     * @return  String locationSetID, e.g. `+[Q30]`
+     */
+    locationSetID(locationSet) {
+      let locationSetID;
+      try {
+        locationSetID = _loco.validateLocationSet(locationSet).id;
+      } catch (e3) {
+        locationSetID = "+[Q2]";
       }
-      return _conflicts.length === ccount ? target.update({ nodes }) : target;
+      return locationSetID;
     }
-    function mergeChildren(targetWay, children2, updates, graph) {
-      function isUsed(node2, targetWay2) {
-        var hasInterestingParent = graph.parentWays(node2).some(function(way) {
-          return way.id !== targetWay2.id;
-        });
-        return node2.hasInterestingTags() || hasInterestingParent || graph.parentRelations(node2).length > 0;
-      }
-      var ccount = _conflicts.length;
-      for (var i3 = 0; i3 < children2.length; i3++) {
-        var id3 = children2[i3];
-        var node = graph.hasEntity(id3);
-        if (targetWay.nodes.indexOf(id3) === -1) {
-          if (node && !isUsed(node, targetWay)) {
-            updates.removeIds.push(id3);
-          }
-          continue;
+    /**
+     * feature
+     * Returns the resolved GeoJSON feature for a given locationSetID (fallback to 'world')
+     * A GeoJSON feature:
+     * {
+     *   type: 'Feature',
+     *   id: '+[Q30]',
+     *   properties: { id: '+[Q30]', area: 21817019.17, … },
+     *   geometry: { … }
+     * }
+     *
+     * @param  `locationSetID`  String identifier, e.g. `+[Q30]`
+     * @return  GeoJSON object (fallback to world)
+     */
+    feature(locationSetID = "+[Q2]") {
+      const feature3 = this._resolved.get(locationSetID);
+      return feature3 || this._resolved.get("+[Q2]");
+    }
+    /**
+     * locationSetsAt
+     * Find all the locationSets valid at the given location.
+     * Results include the area (in km²) to facilitate sorting.
+     *
+     * Object of locationSetIDs to areas (in km²)
+     * {
+     *   "+[Q2]": 511207893.3958111,
+     *   "+[Q30]": 21817019.17,
+     *   "+[new_jersey.geojson]": 22390.77,
+     *   …
+     * }
+     *
+     * @param  `loc`  `[lon,lat]` location to query, e.g. `[-74.4813, 40.7967]`
+     * @return  Object of locationSetIDs valid at given location
+     */
+    locationSetsAt(loc) {
+      let result = {};
+      const hits = this._wp(loc, true) || [];
+      const thiz = this;
+      hits.forEach((prop) => {
+        if (prop.id[0] !== "+") return;
+        const locationSetID = prop.id;
+        const area = thiz._knownLocationSets.get(locationSetID);
+        if (area) {
+          result[locationSetID] = area;
         }
-        var local = localGraph.hasEntity(id3);
-        var remote = remoteGraph.hasEntity(id3);
-        var target;
-        if (_option === "force_remote" && remote && remote.visible) {
-          updates.replacements.push(remote);
-        } else if (_option === "force_local" && local) {
-          target = osmEntity(local);
-          if (remote) {
-            target = target.update({ version: remote.version });
-          }
-          updates.replacements.push(target);
-        } else if (_option === "safe" && local && remote && local.version !== remote.version) {
-          target = osmEntity(local, { version: remote.version });
-          if (remote.visible) {
-            target = mergeLocation(remote, target);
-          } else {
-            _conflicts.push(_t.html("merge_remote_changes.conflict.deleted", { user: { html: user(remote.user) } }));
+      });
+      hits.forEach((prop) => {
+        if (prop.id[0] === "+") return;
+        const locationID = prop.id;
+        const included = thiz._locationIncludedIn.get(locationID);
+        (included || []).forEach((locationSetID) => {
+          const area = thiz._knownLocationSets.get(locationSetID);
+          if (area) {
+            result[locationSetID] = area;
           }
-          if (_conflicts.length !== ccount) break;
-          updates.replacements.push(target);
-        }
-      }
-      return targetWay;
+        });
+      });
+      hits.forEach((prop) => {
+        if (prop.id[0] === "+") return;
+        const locationID = prop.id;
+        const excluded = thiz._locationExcludedIn.get(locationID);
+        (excluded || []).forEach((locationSetID) => {
+          delete result[locationSetID];
+        });
+      });
+      return result;
     }
-    function updateChildren(updates, graph) {
-      for (var i3 = 0; i3 < updates.replacements.length; i3++) {
-        graph = graph.replace(updates.replacements[i3]);
-      }
-      if (updates.removeIds.length) {
-        graph = actionDeleteMultiple(updates.removeIds)(graph);
-      }
-      return graph;
+    // Direct access to the location-conflation resolver
+    loco() {
+      return _loco;
     }
-    function mergeMembers(remote, target) {
-      if (_option === "force_local" || (0, import_fast_deep_equal.default)(target.members, remote.members)) {
-        return target;
+  };
+  var _sharedLocationManager = new LocationManager();
+
+  // modules/presets/collection.js
+  function presetCollection(collection) {
+    const MAXRESULTS = 50;
+    let _this = {};
+    let _memo = {};
+    _this.collection = collection;
+    _this.item = (id2) => {
+      if (_memo[id2]) return _memo[id2];
+      const found = _this.collection.find((d2) => d2.id === id2);
+      if (found) _memo[id2] = found;
+      return found;
+    };
+    _this.index = (id2) => _this.collection.findIndex((d2) => d2.id === id2);
+    _this.matchGeometry = (geometry) => {
+      return presetCollection(
+        _this.collection.filter((d2) => d2.matchGeometry(geometry))
+      );
+    };
+    _this.matchAllGeometry = (geometries) => {
+      return presetCollection(
+        _this.collection.filter((d2) => d2 && d2.matchAllGeometry(geometries))
+      );
+    };
+    _this.matchAnyGeometry = (geometries) => {
+      return presetCollection(
+        _this.collection.filter((d2) => geometries.some((geom) => d2.matchGeometry(geom)))
+      );
+    };
+    _this.fallback = (geometry) => {
+      let id2 = geometry;
+      if (id2 === "vertex") id2 = "point";
+      return _this.item(id2);
+    };
+    _this.search = (value, geometry, loc) => {
+      if (!value) return _this;
+      value = value.toLowerCase().trim();
+      function leading(a2) {
+        const index = a2.indexOf(value);
+        return index === 0 || a2[index - 1] === " ";
       }
-      if (_option === "force_remote") {
-        return target.update({ members: remote.members });
+      function leadingStrict(a2) {
+        const index = a2.indexOf(value);
+        return index === 0;
       }
-      _conflicts.push(_t.html("merge_remote_changes.conflict.memberlist", { user: { html: user(remote.user) } }));
-      return target;
-    }
-    function mergeTags(base, remote, target) {
-      if (_option === "force_local" || (0, import_fast_deep_equal.default)(target.tags, remote.tags)) {
-        return target;
+      function sortPresets(nameProp, aliasesProp) {
+        return function sortNames(a2, b2) {
+          let aCompare = a2[nameProp]();
+          let bCompare = b2[nameProp]();
+          if (aliasesProp) {
+            const findMatchingAlias = (strings) => {
+              if (strings.some((s2) => s2 === value)) {
+                return strings.find((s2) => s2 === value);
+              } else {
+                return strings.filter((s2) => s2.includes(value)).sort((a3, b3) => a3.length - b3.length)[0];
+              }
+            };
+            aCompare = findMatchingAlias([aCompare].concat(a2[aliasesProp]()));
+            bCompare = findMatchingAlias([bCompare].concat(b2[aliasesProp]()));
+          }
+          if (value === aCompare) return -1;
+          if (value === bCompare) return 1;
+          let i3 = b2.originalScore - a2.originalScore;
+          if (i3 !== 0) return i3;
+          i3 = aCompare.indexOf(value) - bCompare.indexOf(value);
+          if (i3 !== 0) return i3;
+          return aCompare.length - bCompare.length;
+        };
       }
-      if (_option === "force_remote") {
-        return target.update({ tags: remote.tags });
+      let pool = _this.collection;
+      if (Array.isArray(loc)) {
+        const validHere = _sharedLocationManager.locationSetsAt(loc);
+        pool = pool.filter((a2) => !a2.locationSetID || validHere[a2.locationSetID]);
       }
-      var ccount = _conflicts.length;
-      var o2 = base.tags || {};
-      var a2 = target.tags || {};
-      var b2 = remote.tags || {};
-      var keys2 = utilArrayUnion(utilArrayUnion(Object.keys(o2), Object.keys(a2)), Object.keys(b2)).filter(function(k3) {
-        return !discardTags[k3];
+      const searchable = pool.filter((a2) => a2.searchable !== false && a2.suggestion !== true);
+      const suggestions = pool.filter((a2) => a2.suggestion === true);
+      const leadingNames = searchable.filter((a2) => leading(a2.searchName()) || a2.searchAliases().some(leading)).sort(sortPresets("searchName", "searchAliases"));
+      const leadingSuggestions = suggestions.filter((a2) => leadingStrict(a2.searchName())).sort(sortPresets("searchName"));
+      const leadingNamesStripped = searchable.filter((a2) => leading(a2.searchNameStripped()) || a2.searchAliasesStripped().some(leading)).sort(sortPresets("searchNameStripped", "searchAliasesStripped"));
+      const leadingSuggestionsStripped = suggestions.filter((a2) => leadingStrict(a2.searchNameStripped())).sort(sortPresets("searchNameStripped"));
+      const leadingTerms = searchable.filter((a2) => (a2.terms() || []).some(leading));
+      const leadingSuggestionTerms = suggestions.filter((a2) => (a2.terms() || []).some(leading));
+      const leadingTagValues = searchable.filter((a2) => Object.values(a2.tags || {}).filter((val) => val !== "*").some(leading));
+      const similarName = searchable.map((a2) => ({ preset: a2, dist: utilEditDistance(value, a2.searchName()) })).filter((a2) => a2.dist + Math.min(value.length - a2.preset.searchName().length, 0) < 3).sort((a2, b2) => a2.dist - b2.dist).map((a2) => a2.preset);
+      const similarSuggestions = suggestions.map((a2) => ({ preset: a2, dist: utilEditDistance(value, a2.searchName()) })).filter((a2) => a2.dist + Math.min(value.length - a2.preset.searchName().length, 0) < 1).sort((a2, b2) => a2.dist - b2.dist).map((a2) => a2.preset);
+      const similarTerms = searchable.filter((a2) => {
+        return (a2.terms() || []).some((b2) => {
+          return utilEditDistance(value, b2) + Math.min(value.length - b2.length, 0) < 3;
+        });
       });
-      var tags = Object.assign({}, a2);
-      var changed = false;
-      for (var i3 = 0; i3 < keys2.length; i3++) {
-        var k2 = keys2[i3];
-        if (o2[k2] !== b2[k2] && a2[k2] !== b2[k2]) {
-          if (o2[k2] !== a2[k2]) {
-            _conflicts.push(_t.html(
-              "merge_remote_changes.conflict.tags",
-              { tag: k2, local: a2[k2], remote: b2[k2], user: { html: user(remote.user) } }
-            ));
-          } else {
-            if (b2.hasOwnProperty(k2)) {
-              tags[k2] = b2[k2];
-            } else {
-              delete tags[k2];
-            }
-            changed = true;
-          }
+      let leadingTagKeyValues = [];
+      if (value.includes("=")) {
+        leadingTagKeyValues = searchable.filter((a2) => a2.tags && Object.keys(a2.tags).some((key) => key + "=" + a2.tags[key] === value)).concat(searchable.filter((a2) => a2.tags && Object.keys(a2.tags).some((key) => leading(key + "=" + a2.tags[key]))));
+      }
+      let results = leadingNames.concat(
+        leadingSuggestions,
+        leadingNamesStripped,
+        leadingSuggestionsStripped,
+        leadingTerms,
+        leadingSuggestionTerms,
+        leadingTagValues,
+        similarName,
+        similarSuggestions,
+        similarTerms,
+        leadingTagKeyValues
+      ).slice(0, MAXRESULTS - 1);
+      if (geometry) {
+        if (typeof geometry === "string") {
+          results.push(_this.fallback(geometry));
+        } else {
+          geometry.forEach((geom) => results.push(_this.fallback(geom)));
         }
       }
-      return changed && _conflicts.length === ccount ? target.update({ tags }) : target;
-    }
-    var action = function(graph) {
-      var updates = { replacements: [], removeIds: [] };
-      var base = graph.base().entities[id2];
-      var local = localGraph.entity(id2);
-      var remote = remoteGraph.entity(id2);
-      var target = osmEntity(local, { version: remote.version });
-      if (!remote.visible) {
-        if (_option === "force_remote") {
-          return actionDeleteMultiple([id2])(graph);
-        } else if (_option === "force_local") {
-          if (target.type === "way") {
-            target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
-            graph = updateChildren(updates, graph);
-          }
-          return graph.replace(target);
-        } else {
-          _conflicts.push(_t.html("merge_remote_changes.conflict.deleted", { user: { html: user(remote.user) } }));
-          return graph;
+      return presetCollection(utilArrayUniq(results));
+    };
+    return _this;
+  }
+
+  // modules/presets/category.js
+  function presetCategory(categoryID, category, allPresets) {
+    let _this = Object.assign({}, category);
+    let _searchName;
+    let _searchNameStripped;
+    _this.id = categoryID;
+    _this.members = presetCollection(
+      (category.members || []).map((presetID) => allPresets[presetID]).filter(Boolean)
+    );
+    _this.geometry = _this.members.collection.reduce((acc, preset) => {
+      for (let i3 in preset.geometry) {
+        const geometry = preset.geometry[i3];
+        if (acc.indexOf(geometry) === -1) {
+          acc.push(geometry);
         }
       }
-      if (target.type === "node") {
-        target = mergeLocation(remote, target);
-      } else if (target.type === "way") {
-        graph.rebase(remoteGraph.childNodes(remote), [graph], false);
-        target = mergeNodes(base, remote, target);
-        target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
-      } else if (target.type === "relation") {
-        target = mergeMembers(remote, target);
+      return acc;
+    }, []);
+    _this.matchGeometry = (geom) => _this.geometry.indexOf(geom) >= 0;
+    _this.matchAllGeometry = (geometries) => _this.members.collection.some((preset) => preset.matchAllGeometry(geometries));
+    _this.matchScore = () => -1;
+    _this.name = () => _t("_tagging.presets.categories.".concat(categoryID, ".name"), { "default": categoryID });
+    _this.nameLabel = () => _t.append("_tagging.presets.categories.".concat(categoryID, ".name"), { "default": categoryID });
+    _this.terms = () => [];
+    _this.searchName = () => {
+      if (!_searchName) {
+        _searchName = (_this.suggestion ? _this.originalName : _this.name()).toLowerCase();
       }
-      target = mergeTags(base, remote, target);
-      if (!_conflicts.length) {
-        graph = updateChildren(updates, graph).replace(target);
+      return _searchName;
+    };
+    _this.searchNameStripped = () => {
+      if (!_searchNameStripped) {
+        _searchNameStripped = _this.searchName();
+        if (_searchNameStripped.normalize) _searchNameStripped = _searchNameStripped.normalize("NFD");
+        _searchNameStripped = _searchNameStripped.replace(/[\u0300-\u036f]/g, "");
       }
-      return graph;
+      return _searchNameStripped;
     };
-    action.withOption = function(opt) {
-      _option = opt;
-      return action;
+    _this.searchAliases = () => [];
+    _this.searchAliasesStripped = () => [];
+    return _this;
+  }
+
+  // modules/presets/field.js
+  function presetField(fieldID, field, allFields) {
+    allFields = allFields || {};
+    let _this = Object.assign({}, field);
+    _this.id = fieldID;
+    _this.safeid = utilSafeClassName(fieldID);
+    _this.matchGeometry = (geom) => !_this.geometry || _this.geometry.indexOf(geom) !== -1;
+    _this.matchAllGeometry = (geometries) => {
+      return !_this.geometry || geometries.every((geom) => _this.geometry.indexOf(geom) !== -1);
     };
-    action.conflicts = function() {
-      return _conflicts;
+    _this.t = (scope, options2) => _t("_tagging.presets.fields.".concat(fieldID, ".").concat(scope), options2);
+    _this.t.html = (scope, options2) => _t.html("_tagging.presets.fields.".concat(fieldID, ".").concat(scope), options2);
+    _this.t.append = (scope, options2) => _t.append("_tagging.presets.fields.".concat(fieldID, ".").concat(scope), options2);
+    _this.hasTextForStringId = (scope) => _mainLocalizer.hasTextForStringId("_tagging.presets.fields.".concat(fieldID, ".").concat(scope));
+    _this.resolveReference = (which) => {
+      const referenceRegex = /^\{(.*)\}$/;
+      const match = (field[which] || "").match(referenceRegex);
+      if (match) {
+        const field2 = allFields[match[1]];
+        if (field2) {
+          return field2;
+        }
+        console.error("Unable to resolve referenced field: ".concat(match[1]));
+      }
+      return _this;
     };
-    return action;
+    _this.title = () => _this.overrideLabel || _this.resolveReference("label").t("label", { "default": fieldID });
+    _this.label = () => _this.overrideLabel ? (selection2) => selection2.text(_this.overrideLabel) : _this.resolveReference("label").t.append("label", { "default": fieldID });
+    _this.placeholder = () => _this.resolveReference("placeholder").t("placeholder", { "default": "" });
+    _this.originalTerms = (_this.terms || []).join();
+    _this.terms = () => _this.resolveReference("label").t("terms", { "default": _this.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
+    _this.increment = _this.type === "number" ? _this.increment || 1 : void 0;
+    return _this;
   }
 
-  // modules/actions/move.js
-  function actionMove(moveIDs, tryDelta, projection2, cache) {
-    var _delta = tryDelta;
-    function setupCache(graph) {
-      function canMove(nodeID) {
-        if (moveIDs.indexOf(nodeID) !== -1) return true;
-        var parents = graph.parentWays(graph.entity(nodeID));
-        if (parents.length < 3) return true;
-        var parentsMoving = parents.every(function(way) {
-          return cache.moving[way.id];
-        });
-        if (!parentsMoving) delete cache.moving[nodeID];
-        return parentsMoving;
-      }
-      function cacheEntities(ids) {
-        for (var i3 = 0; i3 < ids.length; i3++) {
-          var id2 = ids[i3];
-          if (cache.moving[id2]) continue;
-          cache.moving[id2] = true;
-          var entity = graph.hasEntity(id2);
-          if (!entity) continue;
-          if (entity.type === "node") {
-            cache.nodes.push(id2);
-            cache.startLoc[id2] = entity.loc;
-          } else if (entity.type === "way") {
-            cache.ways.push(id2);
-            cacheEntities(entity.nodes);
-          } else {
-            cacheEntities(entity.members.map(function(member) {
-              return member.id;
-            }));
-          }
+  // modules/presets/preset.js
+  var import_lodash2 = __toESM(require_lodash());
+  function presetPreset(presetID, preset, addable, allFields, allPresets) {
+    allFields = allFields || {};
+    allPresets = allPresets || {};
+    let _this = Object.assign({}, preset);
+    let _addable = addable || false;
+    let _searchName;
+    let _searchNameStripped;
+    let _searchAliases;
+    let _searchAliasesStripped;
+    const referenceRegex = /^\{(.*)\}$/;
+    _this.id = presetID;
+    _this.safeid = utilSafeClassName(presetID);
+    _this.originalTerms = (_this.terms || []).join();
+    _this.originalName = _this.name || "";
+    _this.originalAliases = (_this.aliases || []).join("\n");
+    _this.originalScore = _this.matchScore || 1;
+    _this.originalReference = _this.reference || {};
+    _this.originalFields = _this.fields || [];
+    _this.originalMoreFields = _this.moreFields || [];
+    _this.fields = (loc) => resolveFields("fields", loc);
+    _this.moreFields = (loc) => resolveFields("moreFields", loc);
+    _this.tags = _this.tags || {};
+    _this.addTags = _this.addTags || _this.tags;
+    _this.removeTags = _this.removeTags || _this.addTags;
+    _this.geometry = _this.geometry || [];
+    _this.matchGeometry = (geom) => _this.geometry.indexOf(geom) >= 0;
+    _this.matchAllGeometry = (geoms) => geoms.every(_this.matchGeometry);
+    _this.matchScore = (entityTags) => {
+      const tags = _this.tags;
+      let seen = {};
+      let score = 0;
+      for (let k2 in tags) {
+        seen[k2] = true;
+        if (entityTags[k2] === tags[k2]) {
+          score += _this.originalScore;
+        } else if (tags[k2] === "*" && k2 in entityTags) {
+          score += _this.originalScore / 2;
+        } else {
+          return -1;
         }
       }
-      function cacheIntersections(ids) {
-        function isEndpoint(way2, id3) {
-          return !way2.isClosed() && !!way2.affix(id3);
-        }
-        for (var i3 = 0; i3 < ids.length; i3++) {
-          var id2 = ids[i3];
-          var childNodes = graph.childNodes(graph.entity(id2));
-          for (var j2 = 0; j2 < childNodes.length; j2++) {
-            var node = childNodes[j2];
-            var parents = graph.parentWays(node);
-            if (parents.length !== 2) continue;
-            var moved = graph.entity(id2);
-            var unmoved = null;
-            for (var k2 = 0; k2 < parents.length; k2++) {
-              var way = parents[k2];
-              if (!cache.moving[way.id]) {
-                unmoved = way;
-                break;
-              }
-            }
-            if (!unmoved) continue;
-            if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) continue;
-            if (moved.isArea() || unmoved.isArea()) continue;
-            cache.intersections.push({
-              nodeId: node.id,
-              movedId: moved.id,
-              unmovedId: unmoved.id,
-              movedIsEP: isEndpoint(moved, node.id),
-              unmovedIsEP: isEndpoint(unmoved, node.id)
-            });
-          }
+      const addTags = _this.addTags;
+      for (let k2 in addTags) {
+        if (!seen[k2] && entityTags[k2] === addTags[k2]) {
+          score += _this.originalScore;
         }
       }
-      if (!cache) {
-        cache = {};
-      }
-      if (!cache.ok) {
-        cache.moving = {};
-        cache.intersections = [];
-        cache.replacedVertex = {};
-        cache.startLoc = {};
-        cache.nodes = [];
-        cache.ways = [];
-        cacheEntities(moveIDs);
-        cacheIntersections(cache.ways);
-        cache.nodes = cache.nodes.filter(canMove);
-        cache.ok = true;
-      }
-    }
-    function replaceMovedVertex(nodeId, wayId, graph, delta) {
-      var way = graph.entity(wayId);
-      var moved = graph.entity(nodeId);
-      var movedIndex = way.nodes.indexOf(nodeId);
-      var len, prevIndex, nextIndex;
-      if (way.isClosed()) {
-        len = way.nodes.length - 1;
-        prevIndex = (movedIndex + len - 1) % len;
-        nextIndex = (movedIndex + len + 1) % len;
-      } else {
-        len = way.nodes.length;
-        prevIndex = movedIndex - 1;
-        nextIndex = movedIndex + 1;
-      }
-      var prev = graph.hasEntity(way.nodes[prevIndex]);
-      var next = graph.hasEntity(way.nodes[nextIndex]);
-      if (!prev || !next) return graph;
-      var key = wayId + "_" + nodeId;
-      var orig = cache.replacedVertex[key];
-      if (!orig) {
-        orig = osmNode();
-        cache.replacedVertex[key] = orig;
-        cache.startLoc[orig.id] = cache.startLoc[nodeId];
-      }
-      var start2, end;
-      if (delta) {
-        start2 = projection2(cache.startLoc[nodeId]);
-        end = projection2.invert(geoVecAdd(start2, delta));
-      } else {
-        end = cache.startLoc[nodeId];
-      }
-      orig = orig.move(end);
-      var angle2 = Math.abs(geoAngle(orig, prev, projection2) - geoAngle(orig, next, projection2)) * 180 / Math.PI;
-      if (angle2 > 175 && angle2 < 185) return graph;
-      var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection2);
-      var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection2);
-      var d1 = geoPathLength(p1);
-      var d2 = geoPathLength(p2);
-      var insertAt = d1 <= d2 ? movedIndex : nextIndex;
-      if (way.isClosed() && insertAt === 0) insertAt = len;
-      way = way.addNode(orig.id, insertAt);
-      return graph.replace(orig).replace(way);
-    }
-    function removeDuplicateVertices(wayId, graph) {
-      var way = graph.entity(wayId);
-      var epsilon3 = 1e-6;
-      var prev, curr;
-      function isInteresting(node, graph2) {
-        return graph2.parentWays(node).length > 1 || graph2.parentRelations(node).length || node.hasInterestingTags();
-      }
-      for (var i3 = 0; i3 < way.nodes.length; i3++) {
-        curr = graph.entity(way.nodes[i3]);
-        if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon3)) {
-          if (!isInteresting(prev, graph)) {
-            way = way.removeNode(prev.id);
-            graph = graph.replace(way).remove(prev);
-          } else if (!isInteresting(curr, graph)) {
-            way = way.removeNode(curr.id);
-            graph = graph.replace(way).remove(curr);
-          }
-        }
-        prev = curr;
+      if (_this.searchable === false) {
+        score *= 0.999;
       }
-      return graph;
-    }
-    function unZorroIntersection(intersection2, graph) {
-      var vertex = graph.entity(intersection2.nodeId);
-      var way1 = graph.entity(intersection2.movedId);
-      var way2 = graph.entity(intersection2.unmovedId);
-      var isEP1 = intersection2.movedIsEP;
-      var isEP2 = intersection2.unmovedIsEP;
-      if (isEP1 && isEP2) return graph;
-      var nodes1 = graph.childNodes(way1).filter(function(n3) {
-        return n3 !== vertex;
-      });
-      var nodes2 = graph.childNodes(way2).filter(function(n3) {
-        return n3 !== vertex;
-      });
-      if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]);
-      if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]);
-      var edge1 = !isEP1 && geoChooseEdge(nodes1, projection2(vertex.loc), projection2);
-      var edge2 = !isEP2 && geoChooseEdge(nodes2, projection2(vertex.loc), projection2);
-      var loc;
-      if (!isEP1 && !isEP2) {
-        var epsilon3 = 1e-6, maxIter = 10;
-        for (var i3 = 0; i3 < maxIter; i3++) {
-          loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
-          edge1 = geoChooseEdge(nodes1, projection2(loc), projection2);
-          edge2 = geoChooseEdge(nodes2, projection2(loc), projection2);
-          if (Math.abs(edge1.distance - edge2.distance) < epsilon3) break;
+      return score;
+    };
+    _this.t = (scope, options2) => {
+      const textID = "_tagging.presets.presets.".concat(presetID, ".").concat(scope);
+      return _t(textID, options2);
+    };
+    _this.t.append = (scope, options2) => {
+      const textID = "_tagging.presets.presets.".concat(presetID, ".").concat(scope);
+      return _t.append(textID, options2);
+    };
+    function resolveReference(which) {
+      const match = (_this[which] || "").match(referenceRegex);
+      if (match) {
+        const preset2 = allPresets[match[1]];
+        if (preset2) {
+          return preset2;
         }
-      } else if (!isEP1) {
-        loc = edge1.loc;
-      } else {
-        loc = edge2.loc;
-      }
-      graph = graph.replace(vertex.move(loc));
-      if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
-        way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
-        graph = graph.replace(way1);
-      }
-      if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
-        way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
-        graph = graph.replace(way2);
-      }
-      return graph;
-    }
-    function cleanupIntersections(graph) {
-      for (var i3 = 0; i3 < cache.intersections.length; i3++) {
-        var obj = cache.intersections[i3];
-        graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
-        graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
-        graph = unZorroIntersection(obj, graph);
-        graph = removeDuplicateVertices(obj.movedId, graph);
-        graph = removeDuplicateVertices(obj.unmovedId, graph);
+        console.error("Unable to resolve referenced preset: ".concat(match[1]));
       }
-      return graph;
+      return _this;
     }
-    function limitDelta(graph) {
-      function moveNode(loc) {
-        return geoVecAdd(projection2(loc), _delta);
-      }
-      for (var i3 = 0; i3 < cache.intersections.length; i3++) {
-        var obj = cache.intersections[i3];
-        if (obj.movedIsEP && obj.unmovedIsEP) continue;
-        if (!obj.movedIsEP) continue;
-        var node = graph.entity(obj.nodeId);
-        var start2 = projection2(node.loc);
-        var end = geoVecAdd(start2, _delta);
-        var movedNodes = graph.childNodes(graph.entity(obj.movedId));
-        var movedPath = movedNodes.map(function(n3) {
-          return moveNode(n3.loc);
-        });
-        var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
-        var unmovedPath = unmovedNodes.map(function(n3) {
-          return projection2(n3.loc);
-        });
-        var hits = geoPathIntersections(movedPath, unmovedPath);
-        for (var j2 = 0; i3 < hits.length; i3++) {
-          if (geoVecEqual(hits[j2], end)) continue;
-          var edge = geoChooseEdge(unmovedNodes, end, projection2);
-          _delta = geoVecSubtract(projection2(edge.loc), start2);
-        }
+    _this.name = () => {
+      return resolveReference("originalName").t("name", { "default": _this.originalName || presetID });
+    };
+    _this.nameLabel = () => {
+      return resolveReference("originalName").t.append("name", { "default": _this.originalName || presetID });
+    };
+    _this.subtitle = () => {
+      if (_this.suggestion) {
+        let path = presetID.split("/");
+        path.pop();
+        return _t("_tagging.presets.presets." + path.join("/") + ".name");
       }
-    }
-    var action = function(graph) {
-      if (_delta[0] === 0 && _delta[1] === 0) return graph;
-      setupCache(graph);
-      if (cache.intersections.length) {
-        limitDelta(graph);
+      return null;
+    };
+    _this.subtitleLabel = () => {
+      if (_this.suggestion) {
+        let path = presetID.split("/");
+        path.pop();
+        return _t.append("_tagging.presets.presets." + path.join("/") + ".name");
       }
-      for (var i3 = 0; i3 < cache.nodes.length; i3++) {
-        var node = graph.entity(cache.nodes[i3]);
-        var start2 = projection2(node.loc);
-        var end = geoVecAdd(start2, _delta);
-        graph = graph.replace(node.move(projection2.invert(end)));
+      return null;
+    };
+    _this.aliases = () => {
+      return resolveReference("originalName").t("aliases", { "default": _this.originalAliases }).trim().split(/\s*[\r\n]+\s*/);
+    };
+    _this.terms = () => {
+      return resolveReference("originalName").t("terms", { "default": _this.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
+    };
+    _this.searchName = () => {
+      if (!_searchName) {
+        _searchName = (_this.suggestion ? _this.originalName : _this.name()).toLowerCase();
       }
-      if (cache.intersections.length) {
-        graph = cleanupIntersections(graph);
+      return _searchName;
+    };
+    _this.searchNameStripped = () => {
+      if (!_searchNameStripped) {
+        _searchNameStripped = stripDiacritics(_this.searchName());
       }
-      return graph;
+      return _searchNameStripped;
     };
-    action.delta = function() {
-      return _delta;
+    _this.searchAliases = () => {
+      if (!_searchAliases) {
+        _searchAliases = _this.aliases().map((alias) => alias.toLowerCase());
+      }
+      return _searchAliases;
     };
-    return action;
-  }
-
-  // modules/actions/move_member.js
-  function actionMoveMember(relationId, fromIndex, toIndex) {
-    return function(graph) {
-      return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
+    _this.searchAliasesStripped = () => {
+      if (!_searchAliasesStripped) {
+        _searchAliasesStripped = _this.searchAliases();
+        _searchAliasesStripped = _searchAliasesStripped.map(stripDiacritics);
+      }
+      return _searchAliasesStripped;
     };
-  }
-
-  // modules/actions/move_node.js
-  function actionMoveNode(nodeID, toLoc) {
-    var action = function(graph, t2) {
-      if (t2 === null || !isFinite(t2)) t2 = 1;
-      t2 = Math.min(Math.max(+t2, 0), 1);
-      var node = graph.entity(nodeID);
-      return graph.replace(
-        node.move(geoVecInterp(node.loc, toLoc, t2))
-      );
+    _this.isFallback = () => {
+      const tagCount = Object.keys(_this.tags).length;
+      return tagCount === 0 || tagCount === 1 && _this.tags.hasOwnProperty("area");
     };
-    action.transitionable = true;
-    return action;
-  }
-
-  // modules/actions/noop.js
-  function actionNoop() {
-    return function(graph) {
-      return graph;
+    _this.addable = function(val) {
+      if (!arguments.length) return _addable;
+      _addable = val;
+      return _this;
     };
-  }
-
-  // modules/actions/orthogonalize.js
-  function actionOrthogonalize(wayID, projection2, vertexID, degThresh, ep) {
-    var epsilon3 = ep || 1e-4;
-    var threshold = degThresh || 13;
-    var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
-    var upperThreshold = Math.cos(threshold * Math.PI / 180);
-    var action = function(graph, t2) {
-      if (t2 === null || !isFinite(t2)) t2 = 1;
-      t2 = Math.min(Math.max(+t2, 0), 1);
-      var way = graph.entity(wayID);
-      way = way.removeNode("");
-      if (way.tags.nonsquare) {
-        var tags = Object.assign({}, way.tags);
-        delete tags.nonsquare;
-        way = way.update({ tags });
+    _this.reference = () => {
+      const qid = _this.tags.wikidata || _this.tags["flag:wikidata"] || _this.tags["brand:wikidata"] || _this.tags["network:wikidata"] || _this.tags["operator:wikidata"];
+      if (qid) {
+        return { qid };
       }
-      graph = graph.replace(way);
-      var isClosed = way.isClosed();
-      var nodes = graph.childNodes(way).slice();
-      if (isClosed) nodes.pop();
-      if (vertexID !== void 0) {
-        nodes = nodeSubset(nodes, vertexID, isClosed);
-        if (nodes.length !== 3) return graph;
+      let key = _this.originalReference.key || Object.keys(utilObjectOmit(_this.tags, "name"))[0];
+      let value = _this.originalReference.value || _this.tags[key];
+      if (value === "*") {
+        return { key };
+      } else {
+        return { key, value };
       }
-      var nodeCount = {};
-      var points = [];
-      var corner = { i: 0, dotp: 1 };
-      var node, point, loc, score, motions, i3, j2;
-      for (i3 = 0; i3 < nodes.length; i3++) {
-        node = nodes[i3];
-        nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
-        points.push({ id: node.id, coord: projection2(node.loc) });
+    };
+    _this.unsetTags = (tags, geometry, ignoringKeys, skipFieldDefaults, loc) => {
+      let removeTags = ignoringKeys ? utilObjectOmit(_this.removeTags, ignoringKeys) : _this.removeTags;
+      tags = utilObjectOmit(tags, Object.keys(removeTags));
+      if (geometry && !skipFieldDefaults) {
+        _this.fields(loc).forEach((field) => {
+          if (field.matchGeometry(geometry) && field.key && field.default === tags[field.key] && (!ignoringKeys || ignoringKeys.indexOf(field.key) === -1)) {
+            delete tags[field.key];
+          }
+        });
       }
-      if (points.length === 3) {
-        for (i3 = 0; i3 < 1e3; i3++) {
-          motions = points.map(calcMotion);
-          points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
-          score = corner.dotp;
-          if (score < epsilon3) {
-            break;
+      delete tags.area;
+      return tags;
+    };
+    _this.setTags = (tags, geometry, skipFieldDefaults, loc) => {
+      const addTags = _this.addTags;
+      tags = Object.assign({}, tags);
+      for (let k2 in addTags) {
+        if (addTags[k2] === "*") {
+          if (_this.tags[k2] || !tags[k2]) {
+            tags[k2] = "yes";
           }
+        } else {
+          tags[k2] = addTags[k2];
         }
-        node = graph.entity(nodes[corner.i].id);
-        loc = projection2.invert(points[corner.i].coord);
-        graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t2)));
-      } else {
-        var straights = [];
-        var simplified = [];
-        for (i3 = 0; i3 < points.length; i3++) {
-          point = points[i3];
-          var dotp = 0;
-          if (isClosed || i3 > 0 && i3 < points.length - 1) {
-            var a2 = points[(i3 - 1 + points.length) % points.length];
-            var b2 = points[(i3 + 1) % points.length];
-            dotp = Math.abs(geoOrthoNormalizedDotProduct(a2.coord, b2.coord, point.coord));
+      }
+      if (!addTags.hasOwnProperty("area")) {
+        delete tags.area;
+        if (geometry === "area") {
+          let needsAreaTag = true;
+          for (let k2 in addTags) {
+            if (_this.geometry.indexOf("line") === -1 && k2 in osmAreaKeys || k2 in osmAreaKeysExceptions && addTags[k2] in osmAreaKeysExceptions[k2]) {
+              needsAreaTag = false;
+              break;
+            }
           }
-          if (dotp > upperThreshold) {
-            straights.push(point);
-          } else {
-            simplified.push(point);
+          if (needsAreaTag) {
+            tags.area = "yes";
           }
         }
-        var bestPoints = clonePoints(simplified);
-        var originalPoints = clonePoints(simplified);
-        score = Infinity;
-        for (i3 = 0; i3 < 1e3; i3++) {
-          motions = simplified.map(calcMotion);
-          for (j2 = 0; j2 < motions.length; j2++) {
-            simplified[j2].coord = geoVecAdd(simplified[j2].coord, motions[j2]);
-          }
-          var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon3, threshold);
-          if (newScore < score) {
-            bestPoints = clonePoints(simplified);
-            score = newScore;
-          }
-          if (score < epsilon3) {
-            break;
+      }
+      if (geometry && !skipFieldDefaults) {
+        _this.fields(loc).forEach((field) => {
+          if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
+            tags[field.key] = field.default;
           }
-        }
-        var bestCoords = bestPoints.map(function(p2) {
-          return p2.coord;
         });
-        if (isClosed) bestCoords.push(bestCoords[0]);
-        for (i3 = 0; i3 < bestPoints.length; i3++) {
-          point = bestPoints[i3];
-          if (!geoVecEqual(originalPoints[i3].coord, point.coord)) {
-            node = graph.entity(point.id);
-            loc = projection2.invert(point.coord);
-            graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t2)));
-          }
+      }
+      return tags;
+    };
+    function resolveFields(which, loc) {
+      const fieldIDs = which === "fields" ? _this.originalFields : _this.originalMoreFields;
+      let resolved = [];
+      fieldIDs.forEach((fieldID) => {
+        const match = fieldID.match(referenceRegex);
+        if (match !== null) {
+          resolved = resolved.concat(inheritFields(allPresets[match[1]], which));
+        } else if (allFields[fieldID]) {
+          resolved.push(allFields[fieldID]);
+        } else {
+          console.log('Cannot resolve "'.concat(fieldID, '" found in ').concat(_this.id, ".").concat(which));
         }
-        for (i3 = 0; i3 < straights.length; i3++) {
-          point = straights[i3];
-          if (nodeCount[point.id] > 1) continue;
-          node = graph.entity(point.id);
-          if (t2 === 1 && graph.parentWays(node).length === 1 && graph.parentRelations(node).length === 0 && !node.hasInterestingTags()) {
-            graph = actionDeleteNode(node.id)(graph);
-          } else {
-            var choice = geoVecProject(point.coord, bestCoords);
-            if (choice) {
-              loc = projection2.invert(choice.target);
-              graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t2)));
+      });
+      if (!resolved.length) {
+        const endIndex = _this.id.lastIndexOf("/");
+        const parentID = endIndex && _this.id.substring(0, endIndex);
+        if (parentID) {
+          let parent = allPresets[parentID];
+          if (loc) {
+            const validHere = _sharedLocationManager.locationSetsAt(loc);
+            if ((parent == null ? void 0 : parent.locationSetID) && !validHere[parent.locationSetID]) {
+              const candidateIDs = Object.keys(allPresets).filter((k2) => k2.startsWith(parentID));
+              parent = allPresets[candidateIDs.find((candidateID) => {
+                const candidate = allPresets[candidateID];
+                return validHere[candidate.locationSetID] && (0, import_lodash2.isEqual)(candidate.tags, parent.tags);
+              })];
             }
           }
+          resolved = inheritFields(parent, which);
         }
       }
-      return graph;
-      function clonePoints(array2) {
-        return array2.map(function(p2) {
-          return { id: p2.id, coord: [p2.coord[0], p2.coord[1]] };
-        });
-      }
-      function calcMotion(point2, i4, array2) {
-        if (!isClosed && (i4 === 0 || i4 === array2.length - 1)) return [0, 0];
-        if (nodeCount[array2[i4].id] > 1) return [0, 0];
-        var a3 = array2[(i4 - 1 + array2.length) % array2.length].coord;
-        var origin = point2.coord;
-        var b3 = array2[(i4 + 1) % array2.length].coord;
-        var p2 = geoVecSubtract(a3, origin);
-        var q2 = geoVecSubtract(b3, origin);
-        var scale = 2 * Math.min(geoVecLength(p2), geoVecLength(q2));
-        p2 = geoVecNormalize(p2);
-        q2 = geoVecNormalize(q2);
-        var dotp2 = p2[0] * q2[0] + p2[1] * q2[1];
-        var val = Math.abs(dotp2);
-        if (val < lowerThreshold) {
-          corner.i = i4;
-          corner.dotp = val;
-          var vec = geoVecNormalize(geoVecAdd(p2, q2));
-          return geoVecScale(vec, 0.1 * dotp2 * scale);
+      return utilArrayUniq(resolved);
+      function inheritFields(parent, which2) {
+        if (!parent) return [];
+        if (which2 === "fields") {
+          return parent.fields().filter(shouldInherit);
+        } else if (which2 === "moreFields") {
+          return parent.moreFields();
+        } else {
+          return [];
         }
-        return [0, 0];
       }
-    };
-    function nodeSubset(nodes, vertexID2, isClosed) {
-      var first = isClosed ? 0 : 1;
-      var last = isClosed ? nodes.length : nodes.length - 1;
-      for (var i3 = first; i3 < last; i3++) {
-        if (nodes[i3].id === vertexID2) {
-          return [
-            nodes[(i3 - 1 + nodes.length) % nodes.length],
-            nodes[i3],
-            nodes[(i3 + 1) % nodes.length]
-          ];
-        }
+      function shouldInherit(f2) {
+        if (f2.key && _this.tags[f2.key] !== void 0 && // inherit anyway if multiple values are allowed or just a checkbox
+        f2.type !== "multiCombo" && f2.type !== "semiCombo" && f2.type !== "manyCombo" && f2.type !== "check") return false;
+        return true;
       }
-      return [];
     }
-    action.disabled = function(graph) {
-      var way = graph.entity(wayID);
-      way = way.removeNode("");
-      graph = graph.replace(way);
-      var isClosed = way.isClosed();
-      var nodes = graph.childNodes(way).slice();
-      if (isClosed) nodes.pop();
-      var allowStraightAngles = false;
-      if (vertexID !== void 0) {
-        allowStraightAngles = true;
-        nodes = nodeSubset(nodes, vertexID, isClosed);
-        if (nodes.length !== 3) return "end_vertex";
-      }
-      var coords = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon3, threshold, allowStraightAngles);
-      if (score === null) {
-        return "not_squarish";
-      } else if (score === 0) {
-        return "square_enough";
-      } else {
-        return false;
-      }
-    };
-    action.transitionable = true;
-    return action;
+    function stripDiacritics(s2) {
+      if (s2.normalize) s2 = s2.normalize("NFD");
+      s2 = s2.replace(/[\u0300-\u036f]/g, "");
+      return s2;
+    }
+    return _this;
   }
 
-  // modules/actions/restrict_turn.js
-  function actionRestrictTurn(turn, restrictionType, restrictionID) {
-    return function(graph) {
-      var fromWay = graph.entity(turn.from.way);
-      var toWay = graph.entity(turn.to.way);
-      var viaNode = turn.via.node && graph.entity(turn.via.node);
-      var viaWays = turn.via.ways && turn.via.ways.map(function(id2) {
-        return graph.entity(id2);
+  // modules/presets/index.js
+  var _mainPresetIndex = presetIndex();
+  function presetIndex() {
+    const dispatch14 = dispatch_default("favoritePreset", "recentsChange");
+    const MAXRECENTS = 30;
+    const POINT = presetPreset("point", { name: "Point", tags: {}, geometry: ["point", "vertex"], matchScore: 0.1 });
+    const LINE = presetPreset("line", { name: "Line", tags: {}, geometry: ["line"], matchScore: 0.1 });
+    const AREA = presetPreset("area", { name: "Area", tags: { area: "yes" }, geometry: ["area"], matchScore: 0.1 });
+    const RELATION = presetPreset("relation", { name: "Relation", tags: {}, geometry: ["relation"], matchScore: 0.1 });
+    let _this = presetCollection([POINT, LINE, AREA, RELATION]);
+    let _presets = { point: POINT, line: LINE, area: AREA, relation: RELATION };
+    let _defaults2 = {
+      point: presetCollection([POINT]),
+      vertex: presetCollection([POINT]),
+      line: presetCollection([LINE]),
+      area: presetCollection([AREA]),
+      relation: presetCollection([RELATION])
+    };
+    let _fields = {};
+    let _categories = {};
+    let _universal = [];
+    let _addablePresetIDs = null;
+    let _recents;
+    let _favorites;
+    let _geometryIndex = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
+    let _loadPromise;
+    _this.ensureLoaded = (bypassCache) => {
+      if (_loadPromise && !bypassCache) return _loadPromise;
+      return _loadPromise = Promise.all([
+        _mainFileFetcher.get("preset_categories"),
+        _mainFileFetcher.get("preset_defaults"),
+        _mainFileFetcher.get("preset_presets"),
+        _mainFileFetcher.get("preset_fields")
+      ]).then((vals) => {
+        _this.merge({
+          categories: vals[0],
+          defaults: vals[1],
+          presets: vals[2],
+          fields: vals[3]
+        });
+        osmSetAreaKeys(_this.areaKeys());
+        osmSetLineTags(_this.lineTags());
+        osmSetPointTags(_this.pointTags());
+        osmSetVertexTags(_this.vertexTags());
       });
-      var members = [];
-      members.push({ id: fromWay.id, type: "way", role: "from" });
-      if (viaNode) {
-        members.push({ id: viaNode.id, type: "node", role: "via" });
-      } else if (viaWays) {
-        viaWays.forEach(function(viaWay) {
-          members.push({ id: viaWay.id, type: "way", role: "via" });
+    };
+    _this.merge = (d2) => {
+      let newLocationSets = [];
+      if (d2.fields) {
+        Object.keys(d2.fields).forEach((fieldID) => {
+          let f2 = d2.fields[fieldID];
+          if (f2) {
+            f2 = presetField(fieldID, f2, _fields);
+            if (f2.locationSet) newLocationSets.push(f2);
+            _fields[fieldID] = f2;
+          } else {
+            delete _fields[fieldID];
+          }
         });
       }
-      members.push({ id: toWay.id, type: "way", role: "to" });
-      return graph.replace(osmRelation({
-        id: restrictionID,
-        tags: {
-          type: "restriction",
-          restriction: restrictionType
-        },
-        members
-      }));
-    };
-  }
-
-  // modules/actions/revert.js
-  function actionRevert(id2) {
-    var action = function(graph) {
-      var entity = graph.hasEntity(id2), base = graph.base().entities[id2];
-      if (entity && !base) {
-        if (entity.type === "node") {
-          graph.parentWays(entity).forEach(function(parent) {
-            parent = parent.removeNode(id2);
-            graph = graph.replace(parent);
-            if (parent.isDegenerate()) {
-              graph = actionDeleteWay(parent.id)(graph);
+      if (d2.presets) {
+        Object.keys(d2.presets).forEach((presetID) => {
+          let p2 = d2.presets[presetID];
+          if (p2) {
+            const isAddable = !_addablePresetIDs || _addablePresetIDs.has(presetID);
+            p2 = presetPreset(presetID, p2, isAddable, _fields, _presets);
+            if (p2.locationSet) newLocationSets.push(p2);
+            _presets[presetID] = p2;
+          } else {
+            const existing = _presets[presetID];
+            if (existing && !existing.isFallback()) {
+              delete _presets[presetID];
             }
-          });
-        }
-        graph.parentRelations(entity).forEach(function(parent) {
-          parent = parent.removeMembersWithID(id2);
-          graph = graph.replace(parent);
-          if (parent.isDegenerate()) {
-            graph = actionDeleteRelation(parent.id)(graph);
           }
         });
       }
-      return graph.revert(id2);
-    };
-    return action;
-  }
-
-  // modules/actions/rotate.js
-  function actionRotate(rotateIds, pivot, angle2, projection2) {
-    var action = function(graph) {
-      return graph.update(function(graph2) {
-        utilGetAllNodes(rotateIds, graph2).forEach(function(node) {
-          var point = geoRotate([projection2(node.loc)], angle2, pivot)[0];
-          graph2 = graph2.replace(node.move(projection2.invert(point)));
+      if (d2.categories) {
+        Object.keys(d2.categories).forEach((categoryID) => {
+          let c2 = d2.categories[categoryID];
+          if (c2) {
+            c2 = presetCategory(categoryID, c2, _presets);
+            if (c2.locationSet) newLocationSets.push(c2);
+            _categories[categoryID] = c2;
+          } else {
+            delete _categories[categoryID];
+          }
         });
-      });
-    };
-    return action;
-  }
-
-  // modules/actions/scale.js
-  function actionScale(ids, pivotLoc, scaleFactor, projection2) {
-    return function(graph) {
-      return graph.update(function(graph2) {
-        let point, radial;
-        utilGetAllNodes(ids, graph2).forEach(function(node) {
-          point = projection2(node.loc);
-          radial = [
-            point[0] - pivotLoc[0],
-            point[1] - pivotLoc[1]
-          ];
-          point = [
-            pivotLoc[0] + scaleFactor * radial[0],
-            pivotLoc[1] + scaleFactor * radial[1]
-          ];
-          graph2 = graph2.replace(node.move(projection2.invert(point)));
+      }
+      _this.collection = Object.values(_presets).concat(Object.values(_categories));
+      if (d2.defaults) {
+        Object.keys(d2.defaults).forEach((geometry) => {
+          const def2 = d2.defaults[geometry];
+          if (Array.isArray(def2)) {
+            _defaults2[geometry] = presetCollection(
+              def2.map((id2) => _presets[id2] || _categories[id2]).filter(Boolean)
+            );
+          } else {
+            delete _defaults2[geometry];
+          }
         });
-      });
-    };
-  }
-
-  // modules/actions/straighten_nodes.js
-  function actionStraightenNodes(nodeIDs, projection2) {
-    function positionAlongWay(a2, o2, b2) {
-      return geoVecDot(a2, b2, o2) / geoVecDot(b2, b2, o2);
-    }
-    function getEndpoints(points) {
-      var ssr = geoGetSmallestSurroundingRectangle(points);
-      var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2];
-      var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2];
-      var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2];
-      var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2];
-      var isLong = geoVecLength(p1, q1) > geoVecLength(p2, q2);
-      if (isLong) {
-        return [p1, q1];
       }
-      return [p2, q2];
-    }
-    var action = function(graph, t2) {
-      if (t2 === null || !isFinite(t2)) t2 = 1;
-      t2 = Math.min(Math.max(+t2, 0), 1);
-      var nodes = nodeIDs.map(function(id2) {
-        return graph.entity(id2);
-      });
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
+      _universal = Object.values(_fields).filter((field) => field.universal);
+      _geometryIndex = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
+      _this.collection.forEach((preset) => {
+        (preset.geometry || []).forEach((geometry) => {
+          let g3 = _geometryIndex[geometry];
+          for (let key in preset.tags) {
+            g3[key] = g3[key] || {};
+            let value = preset.tags[key];
+            (g3[key][value] = g3[key][value] || []).push(preset);
+          }
+        });
       });
-      var endpoints = getEndpoints(points);
-      var startPoint = endpoints[0];
-      var endPoint = endpoints[1];
-      for (var i3 = 0; i3 < points.length; i3++) {
-        var node = nodes[i3];
-        var point = points[i3];
-        var u2 = positionAlongWay(point, startPoint, endPoint);
-        var point2 = geoVecInterp(startPoint, endPoint, u2);
-        var loc2 = projection2.invert(point2);
-        graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t2)));
+      if (d2.featureCollection && Array.isArray(d2.featureCollection.features)) {
+        _sharedLocationManager.mergeCustomGeoJSON(d2.featureCollection);
       }
-      return graph;
+      if (newLocationSets.length) {
+        _sharedLocationManager.mergeLocationSets(newLocationSets);
+      }
+      return _this;
     };
-    action.disabled = function(graph) {
-      var nodes = nodeIDs.map(function(id2) {
-        return graph.entity(id2);
-      });
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
+    _this.match = (entity, resolver) => {
+      return resolver.transient(entity, "presetMatch", () => {
+        let geometry = entity.geometry(resolver);
+        if (geometry === "vertex" && entity.isOnAddressLine(resolver)) {
+          geometry = "point";
+        }
+        const entityExtent = entity.extent(resolver);
+        return _this.matchTags(entity.tags, geometry, entityExtent.center());
       });
-      var endpoints = getEndpoints(points);
-      var startPoint = endpoints[0];
-      var endPoint = endpoints[1];
-      var maxDistance = 0;
-      for (var i3 = 0; i3 < points.length; i3++) {
-        var point = points[i3];
-        var u2 = positionAlongWay(point, startPoint, endPoint);
-        var p2 = geoVecInterp(startPoint, endPoint, u2);
-        var dist = geoVecLength(p2, point);
-        if (!isNaN(dist) && dist > maxDistance) {
-          maxDistance = dist;
+    };
+    _this.matchTags = (tags, geometry, loc) => {
+      const keyIndex = _geometryIndex[geometry];
+      let bestScore = -1;
+      let bestMatch;
+      let matchCandidates = [];
+      for (let k2 in tags) {
+        let indexMatches = [];
+        let valueIndex = keyIndex[k2];
+        if (!valueIndex) continue;
+        let keyValueMatches = valueIndex[tags[k2]];
+        if (keyValueMatches) indexMatches.push(...keyValueMatches);
+        let keyStarMatches = valueIndex["*"];
+        if (keyStarMatches) indexMatches.push(...keyStarMatches);
+        if (indexMatches.length === 0) continue;
+        for (let i3 = 0; i3 < indexMatches.length; i3++) {
+          const candidate = indexMatches[i3];
+          const score = candidate.matchScore(tags);
+          if (score === -1) {
+            continue;
+          }
+          matchCandidates.push({ score, candidate });
+          if (score > bestScore) {
+            bestScore = score;
+            bestMatch = candidate;
+          }
+        }
+      }
+      if (bestMatch && bestMatch.locationSetID && bestMatch.locationSetID !== "+[Q2]" && Array.isArray(loc)) {
+        const validHere = _sharedLocationManager.locationSetsAt(loc);
+        if (!validHere[bestMatch.locationSetID]) {
+          matchCandidates.sort((a2, b2) => a2.score < b2.score ? 1 : -1);
+          for (let i3 = 0; i3 < matchCandidates.length; i3++) {
+            const candidateScore = matchCandidates[i3];
+            if (!candidateScore.candidate.locationSetID || validHere[candidateScore.candidate.locationSetID]) {
+              bestMatch = candidateScore.candidate;
+              bestScore = candidateScore.score;
+              break;
+            }
+          }
         }
       }
-      if (maxDistance < 1e-4) {
-        return "straight_enough";
+      if (!bestMatch || bestMatch.isFallback()) {
+        for (let k2 in tags) {
+          if (/^addr:/.test(k2) && keyIndex["addr:*"] && keyIndex["addr:*"]["*"]) {
+            bestMatch = keyIndex["addr:*"]["*"][0];
+            break;
+          }
+        }
       }
+      return bestMatch || _this.fallback(geometry);
     };
-    action.transitionable = true;
-    return action;
-  }
-
-  // modules/actions/straighten_way.js
-  function actionStraightenWay(selectedIDs, projection2) {
-    function positionAlongWay(a2, o2, b2) {
-      return geoVecDot(a2, b2, o2) / geoVecDot(b2, b2, o2);
-    }
-    function allNodes(graph) {
-      var nodes = [];
-      var startNodes = [];
-      var endNodes = [];
-      var remainingWays = [];
-      var selectedWays = selectedIDs.filter(function(w2) {
-        return graph.entity(w2).type === "way";
-      });
-      var selectedNodes = selectedIDs.filter(function(n3) {
-        return graph.entity(n3).type === "node";
+    _this.allowsVertex = (entity, resolver) => {
+      if (entity.type !== "node") return false;
+      if (Object.keys(entity.tags).length === 0) return true;
+      return resolver.transient(entity, "vertexMatch", () => {
+        if (entity.isOnAddressLine(resolver)) return true;
+        const geometries = osmNodeGeometriesForTags(entity.tags);
+        if (geometries.vertex) return true;
+        if (geometries.point) return false;
+        return true;
       });
-      for (var i3 = 0; i3 < selectedWays.length; i3++) {
-        var way = graph.entity(selectedWays[i3]);
-        nodes = way.nodes.slice(0);
-        remainingWays.push(nodes);
-        startNodes.push(nodes[0]);
-        endNodes.push(nodes[nodes.length - 1]);
-      }
-      startNodes = startNodes.filter(function(n3) {
-        return startNodes.indexOf(n3) === startNodes.lastIndexOf(n3);
+    };
+    _this.areaKeys = () => {
+      const ignore = {
+        barrier: true,
+        highway: true,
+        footway: true,
+        railway: true,
+        junction: true,
+        type: true
+      };
+      let areaKeys = {};
+      const presets = _this.collection.filter((p2) => !p2.suggestion && !p2.replacement);
+      presets.forEach((p2) => {
+        const keys2 = p2.tags && Object.keys(p2.tags);
+        const key = keys2 && keys2.length && keys2[0];
+        if (!key) return;
+        if (ignore[key]) return;
+        if (p2.geometry.indexOf("area") !== -1) {
+          areaKeys[key] = areaKeys[key] || {};
+        }
       });
-      endNodes = endNodes.filter(function(n3) {
-        return endNodes.indexOf(n3) === endNodes.lastIndexOf(n3);
+      presets.forEach((p2) => {
+        let key;
+        for (key in p2.addTags) {
+          const value = p2.addTags[key];
+          if (key in areaKeys && // probably an area...
+          p2.geometry.indexOf("line") !== -1 && // but sometimes a line
+          value !== "*") {
+            areaKeys[key][value] = true;
+          }
+        }
       });
-      var currNode = utilArrayDifference(startNodes, endNodes).concat(utilArrayDifference(endNodes, startNodes))[0];
-      var nextWay = [];
-      nodes = [];
-      var getNextWay = function(currNode2, remainingWays2) {
-        return remainingWays2.filter(function(way2) {
-          return way2[0] === currNode2 || way2[way2.length - 1] === currNode2;
-        })[0];
-      };
-      while (remainingWays.length) {
-        nextWay = getNextWay(currNode, remainingWays);
-        remainingWays = utilArrayDifference(remainingWays, [nextWay]);
-        if (nextWay[0] !== currNode) {
-          nextWay.reverse();
+      return areaKeys;
+    };
+    _this.lineTags = () => {
+      return _this.collection.filter((lineTags, d2) => {
+        if (d2.suggestion || d2.replacement || d2.searchable === false) return lineTags;
+        const keys2 = d2.tags && Object.keys(d2.tags);
+        const key = keys2 && keys2.length && keys2[0];
+        if (!key) return lineTags;
+        if (d2.geometry.indexOf("line") !== -1) {
+          lineTags[key] = lineTags[key] || [];
+          lineTags[key].push(d2.tags);
         }
-        nodes = nodes.concat(nextWay);
-        currNode = nodes[nodes.length - 1];
+        return lineTags;
+      }, {});
+    };
+    _this.pointTags = () => {
+      return _this.collection.reduce((pointTags, d2) => {
+        if (d2.suggestion || d2.replacement || d2.searchable === false) return pointTags;
+        const keys2 = d2.tags && Object.keys(d2.tags);
+        const key = keys2 && keys2.length && keys2[0];
+        if (!key) return pointTags;
+        if (d2.geometry.indexOf("point") !== -1) {
+          pointTags[key] = pointTags[key] || {};
+          pointTags[key][d2.tags[key]] = true;
+        }
+        return pointTags;
+      }, {});
+    };
+    _this.vertexTags = () => {
+      return _this.collection.reduce((vertexTags, d2) => {
+        if (d2.suggestion || d2.replacement || d2.searchable === false) return vertexTags;
+        const keys2 = d2.tags && Object.keys(d2.tags);
+        const key = keys2 && keys2.length && keys2[0];
+        if (!key) return vertexTags;
+        if (d2.geometry.indexOf("vertex") !== -1) {
+          vertexTags[key] = vertexTags[key] || {};
+          vertexTags[key][d2.tags[key]] = true;
+        }
+        return vertexTags;
+      }, {});
+    };
+    _this.field = (id2) => _fields[id2];
+    _this.universal = () => _universal;
+    _this.defaults = (geometry, n3, startWithRecents, loc, extraPresets) => {
+      let recents = [];
+      if (startWithRecents) {
+        recents = _this.recent().matchGeometry(geometry).collection.slice(0, 4);
       }
-      if (selectedNodes.length === 2) {
-        var startNodeIdx = nodes.indexOf(selectedNodes[0]);
-        var endNodeIdx = nodes.indexOf(selectedNodes[1]);
-        var sortedStartEnd = [startNodeIdx, endNodeIdx];
-        sortedStartEnd.sort(function(a2, b2) {
-          return a2 - b2;
+      let defaults;
+      if (_addablePresetIDs) {
+        defaults = Array.from(_addablePresetIDs).map(function(id2) {
+          var preset = _this.item(id2);
+          if (preset && preset.matchGeometry(geometry)) return preset;
+          return null;
+        }).filter(Boolean);
+      } else {
+        defaults = _defaults2[geometry].collection.concat(_this.fallback(geometry));
+      }
+      let result = presetCollection(
+        utilArrayUniq(recents.concat(defaults).concat(extraPresets || [])).slice(0, n3 - 1)
+      );
+      if (Array.isArray(loc)) {
+        const validHere = _sharedLocationManager.locationSetsAt(loc);
+        result.collection = result.collection.filter((a2) => !a2.locationSetID || validHere[a2.locationSetID]);
+      }
+      return result;
+    };
+    _this.addablePresetIDs = function(val) {
+      if (!arguments.length) return _addablePresetIDs;
+      if (Array.isArray(val)) val = new Set(val);
+      _addablePresetIDs = val;
+      if (_addablePresetIDs) {
+        _this.collection.forEach((p2) => {
+          if (p2.addable) p2.addable(_addablePresetIDs.has(p2.id));
+        });
+      } else {
+        _this.collection.forEach((p2) => {
+          if (p2.addable) p2.addable(true);
         });
-        nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1] + 1);
       }
-      return nodes.map(function(n3) {
-        return graph.entity(n3);
-      });
-    }
-    function shouldKeepNode(node, graph) {
-      return graph.parentWays(node).length > 1 || graph.parentRelations(node).length || node.hasInterestingTags();
+      return _this;
+    };
+    _this.recent = () => {
+      return presetCollection(
+        utilArrayUniq(_this.getRecents().map((d2) => d2.preset).filter((d2) => d2.searchable !== false))
+      );
+    };
+    function RibbonItem(preset, source) {
+      let item = {};
+      item.preset = preset;
+      item.source = source;
+      item.isFavorite = () => item.source === "favorite";
+      item.isRecent = () => item.source === "recent";
+      item.matches = (preset2) => item.preset.id === preset2.id;
+      item.minified = () => ({ pID: item.preset.id });
+      return item;
     }
-    var action = function(graph, t2) {
-      if (t2 === null || !isFinite(t2)) t2 = 1;
-      t2 = Math.min(Math.max(+t2, 0), 1);
-      var nodes = allNodes(graph);
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var startPoint = points[0];
-      var endPoint = points[points.length - 1];
-      var toDelete = [];
-      var i3;
-      for (i3 = 1; i3 < points.length - 1; i3++) {
-        var node = nodes[i3];
-        var point = points[i3];
-        if (t2 < 1 || shouldKeepNode(node, graph)) {
-          var u2 = positionAlongWay(point, startPoint, endPoint);
-          var p2 = geoVecInterp(startPoint, endPoint, u2);
-          var loc2 = projection2.invert(p2);
-          graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t2)));
-        } else {
-          if (toDelete.indexOf(node) === -1) {
-            toDelete.push(node);
-          }
-        }
+    function ribbonItemForMinified(d2, source) {
+      if (d2 && d2.pID) {
+        const preset = _this.item(d2.pID);
+        if (!preset) return null;
+        return RibbonItem(preset, source);
       }
-      for (i3 = 0; i3 < toDelete.length; i3++) {
-        graph = actionDeleteNode(toDelete[i3].id)(graph);
+      return null;
+    }
+    _this.getGenericRibbonItems = () => {
+      return ["point", "line", "area"].map((id2) => RibbonItem(_this.item(id2), "generic"));
+    };
+    _this.getAddable = () => {
+      if (!_addablePresetIDs) return [];
+      return _addablePresetIDs.map((id2) => {
+        const preset = _this.item(id2);
+        if (preset) return RibbonItem(preset, "addable");
+        return null;
+      }).filter(Boolean);
+    };
+    function setRecents(items) {
+      _recents = items;
+      const minifiedItems = items.map((d2) => d2.minified());
+      corePreferences("preset_recents", JSON.stringify(minifiedItems));
+      dispatch14.call("recentsChange");
+    }
+    _this.getRecents = () => {
+      if (!_recents) {
+        _recents = (JSON.parse(corePreferences("preset_recents")) || []).reduce((acc, d2) => {
+          let item = ribbonItemForMinified(d2, "recent");
+          if (item && item.preset.addable()) acc.push(item);
+          return acc;
+        }, []);
       }
-      return graph;
+      return _recents;
     };
-    action.disabled = function(graph) {
-      var nodes = allNodes(graph);
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var startPoint = points[0];
-      var endPoint = points[points.length - 1];
-      var threshold = 0.2 * geoVecLength(startPoint, endPoint);
-      var i3;
-      if (threshold === 0) {
-        return "too_bendy";
+    _this.addRecent = (preset, besidePreset, after) => {
+      const recents = _this.getRecents();
+      const beforeItem = _this.recentMatching(besidePreset);
+      let toIndex = recents.indexOf(beforeItem);
+      if (after) toIndex += 1;
+      const newItem = RibbonItem(preset, "recent");
+      recents.splice(toIndex, 0, newItem);
+      setRecents(recents);
+    };
+    _this.removeRecent = (preset) => {
+      const item = _this.recentMatching(preset);
+      if (item) {
+        let items = _this.getRecents();
+        items.splice(items.indexOf(item), 1);
+        setRecents(items);
       }
-      var maxDistance = 0;
-      for (i3 = 1; i3 < points.length - 1; i3++) {
-        var point = points[i3];
-        var u2 = positionAlongWay(point, startPoint, endPoint);
-        var p2 = geoVecInterp(startPoint, endPoint, u2);
-        var dist = geoVecLength(p2, point);
-        if (isNaN(dist) || dist > threshold) {
-          return "too_bendy";
-        } else if (dist > maxDistance) {
-          maxDistance = dist;
+    };
+    _this.recentMatching = (preset) => {
+      const items = _this.getRecents();
+      for (let i3 in items) {
+        if (items[i3].matches(preset)) {
+          return items[i3];
         }
       }
-      var keepingAllNodes = nodes.every(function(node, i4) {
-        return i4 === 0 || i4 === nodes.length - 1 || shouldKeepNode(node, graph);
-      });
-      if (maxDistance < 1e-4 && // Allow straightening even if already straight in order to remove extraneous nodes
-      keepingAllNodes) {
-        return "straight_enough";
-      }
+      return null;
     };
-    action.transitionable = true;
-    return action;
-  }
-
-  // modules/actions/unrestrict_turn.js
-  function actionUnrestrictTurn(turn) {
-    return function(graph) {
-      return actionDeleteRelation(turn.restrictionID)(graph);
+    _this.moveItem = (items, fromIndex, toIndex) => {
+      if (fromIndex === toIndex || fromIndex < 0 || toIndex < 0 || fromIndex >= items.length || toIndex >= items.length) return null;
+      items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
+      return items;
     };
-  }
-
-  // modules/actions/reflect.js
-  function actionReflect(reflectIds, projection2) {
-    var _useLongAxis = true;
-    var action = function(graph, t2) {
-      if (t2 === null || !isFinite(t2)) t2 = 1;
-      t2 = Math.min(Math.max(+t2, 0), 1);
-      var nodes = utilGetAllNodes(reflectIds, graph);
-      var points = nodes.map(function(n3) {
-        return projection2(n3.loc);
-      });
-      var ssr = geoGetSmallestSurroundingRectangle(points);
-      var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2];
-      var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2];
-      var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2];
-      var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2];
-      var p3, q3;
-      var isLong = geoVecLength(p1, q1) > geoVecLength(p2, q2);
-      if (_useLongAxis && isLong || !_useLongAxis && !isLong) {
-        p3 = p1;
-        q3 = q1;
+    _this.moveRecent = (item, beforeItem) => {
+      const recents = _this.getRecents();
+      const fromIndex = recents.indexOf(item);
+      const toIndex = recents.indexOf(beforeItem);
+      const items = _this.moveItem(recents, fromIndex, toIndex);
+      if (items) setRecents(items);
+    };
+    _this.setMostRecent = (preset) => {
+      if (preset.searchable === false) return;
+      let items = _this.getRecents();
+      let item = _this.recentMatching(preset);
+      if (item) {
+        items.splice(items.indexOf(item), 1);
       } else {
-        p3 = p2;
-        q3 = q2;
+        item = RibbonItem(preset, "recent");
       }
-      var dx = q3[0] - p3[0];
-      var dy = q3[1] - p3[1];
-      var a2 = (dx * dx - dy * dy) / (dx * dx + dy * dy);
-      var b2 = 2 * dx * dy / (dx * dx + dy * dy);
-      for (var i3 = 0; i3 < nodes.length; i3++) {
-        var node = nodes[i3];
-        var c2 = projection2(node.loc);
-        var c22 = [
-          a2 * (c2[0] - p3[0]) + b2 * (c2[1] - p3[1]) + p3[0],
-          b2 * (c2[0] - p3[0]) - a2 * (c2[1] - p3[1]) + p3[1]
-        ];
-        var loc2 = projection2.invert(c22);
-        node = node.move(geoVecInterp(node.loc, loc2, t2));
-        graph = graph.replace(node);
+      while (items.length >= MAXRECENTS) {
+        items.pop();
       }
-      return graph;
+      items.unshift(item);
+      setRecents(items);
     };
-    action.useLongAxis = function(val) {
-      if (!arguments.length) return _useLongAxis;
-      _useLongAxis = val;
-      return action;
+    function setFavorites(items) {
+      _favorites = items;
+      const minifiedItems = items.map((d2) => d2.minified());
+      corePreferences("preset_favorites", JSON.stringify(minifiedItems));
+      dispatch14.call("favoritePreset");
+    }
+    _this.addFavorite = (preset, besidePreset, after) => {
+      const favorites = _this.getFavorites();
+      const beforeItem = _this.favoriteMatching(besidePreset);
+      let toIndex = favorites.indexOf(beforeItem);
+      if (after) toIndex += 1;
+      const newItem = RibbonItem(preset, "favorite");
+      favorites.splice(toIndex, 0, newItem);
+      setFavorites(favorites);
     };
-    action.transitionable = true;
-    return action;
-  }
-
-  // modules/actions/upgrade_tags.js
-  function actionUpgradeTags(entityId, oldTags, replaceTags) {
-    return function(graph) {
-      var entity = graph.entity(entityId);
-      var tags = Object.assign({}, entity.tags);
-      var transferValue;
-      var semiIndex;
-      for (var oldTagKey in oldTags) {
-        if (!(oldTagKey in tags)) continue;
-        if (oldTags[oldTagKey] === "*") {
-          transferValue = tags[oldTagKey];
-          delete tags[oldTagKey];
-        } else if (oldTags[oldTagKey] === tags[oldTagKey]) {
-          delete tags[oldTagKey];
-        } else {
-          var vals = tags[oldTagKey].split(";").filter(Boolean);
-          var oldIndex = vals.indexOf(oldTags[oldTagKey]);
-          if (vals.length === 1 || oldIndex === -1) {
-            delete tags[oldTagKey];
-          } else {
-            if (replaceTags && replaceTags[oldTagKey]) {
-              semiIndex = oldIndex;
-            }
-            vals.splice(oldIndex, 1);
-            tags[oldTagKey] = vals.join(";");
-          }
+    _this.toggleFavorite = (preset) => {
+      const favs = _this.getFavorites();
+      const favorite = _this.favoriteMatching(preset);
+      if (favorite) {
+        favs.splice(favs.indexOf(favorite), 1);
+      } else {
+        if (favs.length === 10) {
+          favs.pop();
         }
+        favs.push(RibbonItem(preset, "favorite"));
       }
-      if (replaceTags) {
-        for (var replaceKey in replaceTags) {
-          var replaceValue = replaceTags[replaceKey];
-          if (replaceValue === "*") {
-            if (tags[replaceKey] && tags[replaceKey] !== "no") {
-              continue;
-            } else {
-              tags[replaceKey] = "yes";
-            }
-          } else if (replaceValue === "$1") {
-            tags[replaceKey] = transferValue;
-          } else {
-            if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== void 0) {
-              var existingVals = tags[replaceKey].split(";").filter(Boolean);
-              if (existingVals.indexOf(replaceValue) === -1) {
-                existingVals.splice(semiIndex, 0, replaceValue);
-                tags[replaceKey] = existingVals.join(";");
-              }
-            } else {
-              tags[replaceKey] = replaceValue;
-            }
-          }
+      setFavorites(favs);
+    };
+    _this.removeFavorite = (preset) => {
+      const item = _this.favoriteMatching(preset);
+      if (item) {
+        const items = _this.getFavorites();
+        items.splice(items.indexOf(item), 1);
+        setFavorites(items);
+      }
+    };
+    _this.getFavorites = () => {
+      if (!_favorites) {
+        let rawFavorites = JSON.parse(corePreferences("preset_favorites"));
+        if (!rawFavorites) {
+          rawFavorites = [];
+          corePreferences("preset_favorites", JSON.stringify(rawFavorites));
         }
+        _favorites = rawFavorites.reduce((output, d2) => {
+          const item = ribbonItemForMinified(d2, "favorite");
+          if (item && item.preset.addable()) output.push(item);
+          return output;
+        }, []);
       }
-      return graph.replace(entity.update({ tags }));
+      return _favorites;
+    };
+    _this.favoriteMatching = (preset) => {
+      const favs = _this.getFavorites();
+      for (let index in favs) {
+        if (favs[index].matches(preset)) {
+          return favs[index];
+        }
+      }
+      return null;
     };
+    return utilRebind(_this, dispatch14, "on");
   }
 
   // modules/behavior/edit.js
       } else {
         context.ui().flash.duration(2e3).iconName("#iD-operation-" + _operation.id).iconClass("operation").label(_operation.annotation() || _operation.title)();
         if (_operation.point) _operation.point(null);
-        _operation();
+        _operation(d3_event);
       }
     }
     function behavior() {
   function behaviorPaste(context) {
     function doPaste(d3_event) {
       if (!context.map().withinEditableZoom()) return;
+      const isOsmLayerEnabled = context.layers().layer("osm").enabled();
+      if (!isOsmLayerEnabled) return;
       d3_event.preventDefault();
       var baseGraph = context.graph();
       var mouse = context.map().mouse();
   }
 
   // node_modules/quickselect/index.js
-  function quickselect2(arr, k2, left, right, compare2) {
-    quickselectStep(arr, k2, left || 0, right || arr.length - 1, compare2 || defaultCompare);
-  }
-  function quickselectStep(arr, k2, left, right, compare2) {
+  function quickselect2(arr, k2, left = 0, right = arr.length - 1, compare2 = defaultCompare) {
     while (right > left) {
       if (right - left > 600) {
-        var n3 = right - left + 1;
-        var m2 = k2 - left + 1;
-        var z2 = Math.log(n3);
-        var s2 = 0.5 * Math.exp(2 * z2 / 3);
-        var sd = 0.5 * Math.sqrt(z2 * s2 * (n3 - s2) / n3) * (m2 - n3 / 2 < 0 ? -1 : 1);
-        var newLeft = Math.max(left, Math.floor(k2 - m2 * s2 / n3 + sd));
-        var newRight = Math.min(right, Math.floor(k2 + (n3 - m2) * s2 / n3 + sd));
-        quickselectStep(arr, k2, newLeft, newRight, compare2);
-      }
-      var t2 = arr[k2];
-      var i3 = left;
-      var j2 = right;
+        const n3 = right - left + 1;
+        const m2 = k2 - left + 1;
+        const z2 = Math.log(n3);
+        const s2 = 0.5 * Math.exp(2 * z2 / 3);
+        const sd = 0.5 * Math.sqrt(z2 * s2 * (n3 - s2) / n3) * (m2 - n3 / 2 < 0 ? -1 : 1);
+        const newLeft = Math.max(left, Math.floor(k2 - m2 * s2 / n3 + sd));
+        const newRight = Math.min(right, Math.floor(k2 + (n3 - m2) * s2 / n3 + sd));
+        quickselect2(arr, k2, newLeft, newRight, compare2);
+      }
+      const t2 = arr[k2];
+      let i3 = left;
+      let j2 = right;
       swap2(arr, left, k2);
       if (compare2(arr[right], t2) > 0) swap2(arr, left, right);
       while (i3 < j2) {
     }
   }
   function swap2(arr, i3, j2) {
-    var tmp = arr[i3];
+    const tmp = arr[i3];
     arr[i3] = arr[j2];
     arr[j2] = tmp;
   }
   function changeDefaults(newDefaults) {
     _defaults = newDefaults;
   }
-  var escapeTest = /[&<>"']/;
-  var escapeReplace = new RegExp(escapeTest.source, "g");
-  var escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;
-  var escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, "g");
+  var noopTest = { exec: () => null };
+  function edit(regex, opt = "") {
+    let source = typeof regex === "string" ? regex : regex.source;
+    const obj = {
+      replace: (name, val) => {
+        let valSource = typeof val === "string" ? val : val.source;
+        valSource = valSource.replace(other.caret, "$1");
+        source = source.replace(name, valSource);
+        return obj;
+      },
+      getRegex: () => {
+        return new RegExp(source, opt);
+      }
+    };
+    return obj;
+  }
+  var other = {
+    codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm,
+    outputLinkReplace: /\\([\[\]])/g,
+    indentCodeCompensation: /^(\s+)(?:```)/,
+    beginningSpace: /^\s+/,
+    endingHash: /#$/,
+    startingSpaceChar: /^ /,
+    endingSpaceChar: / $/,
+    nonSpaceChar: /[^ ]/,
+    newLineCharGlobal: /\n/g,
+    tabCharGlobal: /\t/g,
+    multipleSpaceGlobal: /\s+/g,
+    blankLine: /^[ \t]*$/,
+    doubleBlankLine: /\n[ \t]*\n[ \t]*$/,
+    blockquoteStart: /^ {0,3}>/,
+    blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g,
+    blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm,
+    listReplaceTabs: /^\t+/,
+    listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,
+    listIsTask: /^\[[ xX]\] /,
+    listReplaceTask: /^\[[ xX]\] +/,
+    anyLine: /\n.*\n/,
+    hrefBrackets: /^<(.*)>$/,
+    tableDelimiter: /[:|]/,
+    tableAlignChars: /^\||\| *$/g,
+    tableRowBlankLine: /\n[ \t]*$/,
+    tableAlignRight: /^ *-+: *$/,
+    tableAlignCenter: /^ *:-+: *$/,
+    tableAlignLeft: /^ *:-+ *$/,
+    startATag: /^<a /i,
+    endATag: /^<\/a>/i,
+    startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i,
+    endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i,
+    startAngleBracket: /^</,
+    endAngleBracket: />$/,
+    pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/,
+    unicodeAlphaNumeric: new RegExp("[\\p{L}\\p{N}]", "u"),
+    escapeTest: /[&<>"']/,
+    escapeReplace: /[&<>"']/g,
+    escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,
+    escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,
+    unescapeTest: /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,
+    caret: /(^|[^\[])\^/g,
+    percentDecode: /%25/g,
+    findPipe: /\|/g,
+    splitPipe: / \|/,
+    slashPipe: /\\\|/g,
+    carriageReturn: /\r\n|\r/g,
+    spaceLine: /^ +$/gm,
+    notSpaceStart: /^\S*/,
+    endingNewline: /\n$/,
+    listItemRegex: (bull) => new RegExp("^( {0,3}".concat(bull, ")((?:[         ][^\\n]*)?(?:\\n|$))")),
+    nextBulletRegex: (indent) => new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}(?:[*+-]|\\d{1,9}[.)])((?:[      ][^\\n]*)?(?:\\n|$))")),
+    hrRegex: (indent) => new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)")),
+    fencesBeginRegex: (indent) => new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}(?:```|~~~)")),
+    headingBeginRegex: (indent) => new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}#")),
+    htmlBeginRegex: (indent) => new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}<(?:[a-z].*>|!--)"), "i")
+  };
+  var newline = /^(?:[ \t]*(?:\n|$))+/;
+  var blockCode = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
+  var fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
+  var hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
+  var heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
+  var bullet = /(?:[*+-]|\d{1,9}[.)])/;
+  var lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g, bullet).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).getRegex();
+  var _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
+  var blockText = /^[^\n]+/;
+  var _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
+  var def = edit(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", _blockLabel).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
+  var list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, bullet).getRegex();
+  var _tag = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
+  var _comment = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
+  var html2 = edit("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[         ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[     ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[     ]*)+\\n|$))", "i").replace("comment", _comment).replace("tag", _tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
+  var paragraph = edit(_paragraph).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex();
+  var blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", paragraph).getRegex();
+  var blockNormal = {
+    blockquote,
+    code: blockCode,
+    def,
+    fences,
+    heading,
+    hr,
+    html: html2,
+    lheading,
+    list,
+    newline,
+    paragraph,
+    table: noopTest,
+    text: blockText
+  };
+  var gfmTable = edit("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3}    )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex();
+  var blockGfm = __spreadProps(__spreadValues({}, blockNormal), {
+    table: gfmTable,
+    paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", gfmTable).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex()
+  });
+  var blockPedantic = __spreadProps(__spreadValues({}, blockNormal), {
+    html: edit("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", _comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
+    def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
+    heading: /^(#{1,6})(.*)(?:\n+|$)/,
+    fences: noopTest,
+    // fences not supported
+    lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,
+    paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " *#{1,6} *[^\n]").replace("lheading", lheading).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex()
+  });
+  var escape$1 = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
+  var inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
+  var br = /^( {2,}|\\)\n(?!\s*$)/;
+  var inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
+  var _punctuation = new RegExp("[\\p{P}\\p{S}]", "u");
+  var _punctuationOrSpace = new RegExp("[\\s\\p{P}\\p{S}]", "u");
+  var _notPunctuationOrSpace = new RegExp("[^\\s\\p{P}\\p{S}]", "u");
+  var punctuation = edit(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, _punctuationOrSpace).getRegex();
+  var _punctuationGfmStrongEm = new RegExp("(?!~)[\\p{P}\\p{S}]", "u");
+  var _punctuationOrSpaceGfmStrongEm = new RegExp("(?!~)[\\s\\p{P}\\p{S}]", "u");
+  var _notPunctuationOrSpaceGfmStrongEm = new RegExp("(?:[^\\s\\p{P}\\p{S}]|~)", "u");
+  var blockSkip = /\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g;
+  var emStrongLDelimCore = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/;
+  var emStrongLDelim = edit(emStrongLDelimCore, "u").replace(/punct/g, _punctuation).getRegex();
+  var emStrongLDelimGfm = edit(emStrongLDelimCore, "u").replace(/punct/g, _punctuationGfmStrongEm).getRegex();
+  var emStrongRDelimAstCore = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
+  var emStrongRDelimAst = edit(emStrongRDelimAstCore, "gu").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();
+  var emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, "gu").replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm).replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm).replace(/punct/g, _punctuationGfmStrongEm).getRegex();
+  var emStrongRDelimUnd = edit("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, _notPunctuationOrSpace).replace(/punctSpace/g, _punctuationOrSpace).replace(/punct/g, _punctuation).getRegex();
+  var anyPunctuation = edit(/\\(punct)/, "gu").replace(/punct/g, _punctuation).getRegex();
+  var autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
+  var _inlineComment = edit(_comment).replace("(?:-->|$)", "-->").getRegex();
+  var tag = edit("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", _inlineComment).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
+  var _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
+  var link2 = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label", _inlineLabel).replace("href", /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
+  var reflink = edit(/^!?\[(label)\]\[(ref)\]/).replace("label", _inlineLabel).replace("ref", _blockLabel).getRegex();
+  var nolink = edit(/^!?\[(ref)\](?:\[\])?/).replace("ref", _blockLabel).getRegex();
+  var reflinkSearch = edit("reflink|nolink(?!\\()", "g").replace("reflink", reflink).replace("nolink", nolink).getRegex();
+  var inlineNormal = {
+    _backpedal: noopTest,
+    // only used for GFM url
+    anyPunctuation,
+    autolink,
+    blockSkip,
+    br,
+    code: inlineCode,
+    del: noopTest,
+    emStrongLDelim,
+    emStrongRDelimAst,
+    emStrongRDelimUnd,
+    escape: escape$1,
+    link: link2,
+    nolink,
+    punctuation,
+    reflink,
+    reflinkSearch,
+    tag,
+    text: inlineText,
+    url: noopTest
+  };
+  var inlinePedantic = __spreadProps(__spreadValues({}, inlineNormal), {
+    link: edit(/^!?\[(label)\]\((.*?)\)/).replace("label", _inlineLabel).getRegex(),
+    reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", _inlineLabel).getRegex()
+  });
+  var inlineGfm = __spreadProps(__spreadValues({}, inlineNormal), {
+    emStrongRDelimAst: emStrongRDelimAstGfm,
+    emStrongLDelim: emStrongLDelimGfm,
+    url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, "i").replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),
+    _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,
+    del: /^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,
+    text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
+  });
+  var inlineBreaks = __spreadProps(__spreadValues({}, inlineGfm), {
+    br: edit(br).replace("{2,}", "*").getRegex(),
+    text: edit(inlineGfm.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex()
+  });
+  var block = {
+    normal: blockNormal,
+    gfm: blockGfm,
+    pedantic: blockPedantic
+  };
+  var inline = {
+    normal: inlineNormal,
+    gfm: inlineGfm,
+    breaks: inlineBreaks,
+    pedantic: inlinePedantic
+  };
   var escapeReplacements = {
     "&": "&amp;",
     "<": "&lt;",
     "'": "&#39;"
   };
   var getEscapeReplacement = (ch) => escapeReplacements[ch];
-  function escape$1(html3, encode) {
+  function escape4(html3, encode) {
     if (encode) {
-      if (escapeTest.test(html3)) {
-        return html3.replace(escapeReplace, getEscapeReplacement);
+      if (other.escapeTest.test(html3)) {
+        return html3.replace(other.escapeReplace, getEscapeReplacement);
       }
     } else {
-      if (escapeTestNoEncode.test(html3)) {
-        return html3.replace(escapeReplaceNoEncode, getEscapeReplacement);
+      if (other.escapeTestNoEncode.test(html3)) {
+        return html3.replace(other.escapeReplaceNoEncode, getEscapeReplacement);
       }
     }
     return html3;
   }
-  var caret = /(^|[^\[])\^/g;
-  function edit(regex, opt) {
-    let source = typeof regex === "string" ? regex : regex.source;
-    opt = opt || "";
-    const obj = {
-      replace: (name, val) => {
-        let valSource = typeof val === "string" ? val : val.source;
-        valSource = valSource.replace(caret, "$1");
-        source = source.replace(name, valSource);
-        return obj;
-      },
-      getRegex: () => {
-        return new RegExp(source, opt);
-      }
-    };
-    return obj;
-  }
   function cleanUrl(href) {
     try {
-      href = encodeURI(href).replace(/%25/g, "%");
-    } catch {
+      href = encodeURI(href).replace(other.percentDecode, "%");
+    } catch (e3) {
       return null;
     }
     return href;
   }
-  var noopTest = { exec: () => null };
   function splitCells(tableRow, count) {
-    const row = tableRow.replace(/\|/g, (match, offset, str) => {
+    var _a4;
+    const row = tableRow.replace(other.findPipe, (match, offset, str) => {
       let escaped = false;
       let curr = offset;
       while (--curr >= 0 && str[curr] === "\\")
       } else {
         return " |";
       }
-    }), cells = row.split(/ \|/);
+    }), cells = row.split(other.splitPipe);
     let i3 = 0;
     if (!cells[0].trim()) {
       cells.shift();
     }
-    if (cells.length > 0 && !cells[cells.length - 1].trim()) {
+    if (cells.length > 0 && !((_a4 = cells.at(-1)) == null ? void 0 : _a4.trim())) {
       cells.pop();
     }
     if (count) {
       }
     }
     for (; i3 < cells.length; i3++) {
-      cells[i3] = cells[i3].trim().replace(/\\\|/g, "|");
+      cells[i3] = cells[i3].trim().replace(other.slashPipe, "|");
     }
     return cells;
   }
     let suffLen = 0;
     while (suffLen < l2) {
       const currChar = str.charAt(l2 - suffLen - 1);
-      if (currChar === c2 && !invert) {
-        suffLen++;
-      } else if (currChar !== c2 && invert) {
+      if (currChar === c2 && true) {
         suffLen++;
       } else {
         break;
     }
     return -1;
   }
-  function outputLink(cap, link3, raw, lexer2) {
+  function outputLink(cap, link3, raw, lexer2, rules) {
     const href = link3.href;
-    const title = link3.title ? escape$1(link3.title) : null;
-    const text = cap[1].replace(/\\([\[\]])/g, "$1");
+    const title = link3.title || null;
+    const text = cap[1].replace(rules.other.outputLinkReplace, "$1");
     if (cap[0].charAt(0) !== "!") {
       lexer2.state.inLink = true;
       const token = {
       raw,
       href,
       title,
-      text: escape$1(text)
+      text
     };
   }
-  function indentCodeCompensation(raw, text) {
-    const matchIndentToCode = raw.match(/^(\s+)(?:```)/);
+  function indentCodeCompensation(raw, text, rules) {
+    const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);
     if (matchIndentToCode === null) {
       return text;
     }
     const indentToCode = matchIndentToCode[1];
     return text.split("\n").map((node) => {
-      const matchIndentInNode = node.match(/^\s+/);
+      const matchIndentInNode = node.match(rules.other.beginningSpace);
       if (matchIndentInNode === null) {
         return node;
       }
     code(src) {
       const cap = this.rules.block.code.exec(src);
       if (cap) {
-        const text = cap[0].replace(/^ {1,4}/gm, "");
+        const text = cap[0].replace(this.rules.other.codeRemoveIndent, "");
         return {
           type: "code",
           raw: cap[0],
       const cap = this.rules.block.fences.exec(src);
       if (cap) {
         const raw = cap[0];
-        const text = indentCodeCompensation(raw, cap[3] || "");
+        const text = indentCodeCompensation(raw, cap[3] || "", this.rules);
         return {
           type: "code",
           raw,
       const cap = this.rules.block.heading.exec(src);
       if (cap) {
         let text = cap[2].trim();
-        if (/#$/.test(text)) {
+        if (this.rules.other.endingHash.test(text)) {
           const trimmed = rtrim(text, "#");
           if (this.options.pedantic) {
             text = trimmed.trim();
-          } else if (!trimmed || / $/.test(trimmed)) {
+          } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {
             text = trimmed.trim();
           }
         }
           const currentLines = [];
           let i3;
           for (i3 = 0; i3 < lines.length; i3++) {
-            if (/^ {0,3}>/.test(lines[i3])) {
+            if (this.rules.other.blockquoteStart.test(lines[i3])) {
               currentLines.push(lines[i3]);
               inBlockquote = true;
             } else if (!inBlockquote) {
           }
           lines = lines.slice(i3);
           const currentRaw = currentLines.join("\n");
-          const currentText = currentRaw.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g, "\n    $1").replace(/^ {0,3}>[ \t]?/gm, "");
+          const currentText = currentRaw.replace(this.rules.other.blockquoteSetextReplace, "\n    $1").replace(this.rules.other.blockquoteSetextReplace2, "");
           raw = raw ? "".concat(raw, "\n").concat(currentRaw) : currentRaw;
           text = text ? "".concat(text, "\n").concat(currentText) : currentText;
           const top = this.lexer.state.top;
           if (lines.length === 0) {
             break;
           }
-          const lastToken = tokens[tokens.length - 1];
+          const lastToken = tokens.at(-1);
           if ((lastToken == null ? void 0 : lastToken.type) === "code") {
             break;
           } else if ((lastToken == null ? void 0 : lastToken.type) === "blockquote") {
             tokens[tokens.length - 1] = newToken;
             raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;
             text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;
-            lines = newText.substring(tokens[tokens.length - 1].raw.length).split("\n");
+            lines = newText.substring(tokens.at(-1).raw.length).split("\n");
             continue;
           }
         }
         if (this.options.pedantic) {
           bull = isordered ? bull : "[*+-]";
         }
-        const itemRegex = new RegExp("^( {0,3}".concat(bull, ")((?:[    ][^\\n]*)?(?:\\n|$))"));
+        const itemRegex = this.rules.other.listItemRegex(bull);
         let endsWithBlankLine = false;
         while (src) {
           let endEarly = false;
           }
           raw = cap[0];
           src = src.substring(raw.length);
-          let line = cap[2].split("\n", 1)[0].replace(/^\t+/, (t2) => " ".repeat(3 * t2.length));
+          let line = cap[2].split("\n", 1)[0].replace(this.rules.other.listReplaceTabs, (t2) => " ".repeat(3 * t2.length));
           let nextLine = src.split("\n", 1)[0];
           let blankLine = !line.trim();
           let indent = 0;
           } else if (blankLine) {
             indent = cap[1].length + 1;
           } else {
-            indent = cap[2].search(/[^ ]/);
+            indent = cap[2].search(this.rules.other.nonSpaceChar);
             indent = indent > 4 ? 1 : indent;
             itemContents = line.slice(indent);
             indent += cap[1].length;
           }
-          if (blankLine && /^ *$/.test(nextLine)) {
+          if (blankLine && this.rules.other.blankLine.test(nextLine)) {
             raw += nextLine + "\n";
             src = src.substring(nextLine.length + 1);
             endEarly = true;
           }
           if (!endEarly) {
-            const nextBulletRegex = new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}(?:[*+-]|\\d{1,9}[.)])((?:[   ][^\\n]*)?(?:\\n|$))"));
-            const hrRegex = new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"));
-            const fencesBeginRegex = new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}(?:```|~~~)"));
-            const headingBeginRegex = new RegExp("^ {0,".concat(Math.min(3, indent - 1), "}#"));
+            const nextBulletRegex = this.rules.other.nextBulletRegex(indent);
+            const hrRegex = this.rules.other.hrRegex(indent);
+            const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);
+            const headingBeginRegex = this.rules.other.headingBeginRegex(indent);
+            const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);
             while (src) {
               const rawLine = src.split("\n", 1)[0];
+              let nextLineWithoutTabs;
               nextLine = rawLine;
               if (this.options.pedantic) {
-                nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, "  ");
+                nextLine = nextLine.replace(this.rules.other.listReplaceNesting, "  ");
+                nextLineWithoutTabs = nextLine;
+              } else {
+                nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, "    ");
               }
               if (fencesBeginRegex.test(nextLine)) {
                 break;
               if (headingBeginRegex.test(nextLine)) {
                 break;
               }
+              if (htmlBeginRegex.test(nextLine)) {
+                break;
+              }
               if (nextBulletRegex.test(nextLine)) {
                 break;
               }
-              if (hrRegex.test(src)) {
+              if (hrRegex.test(nextLine)) {
                 break;
               }
-              if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) {
-                itemContents += "\n" + nextLine.slice(indent);
+              if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) {
+                itemContents += "\n" + nextLineWithoutTabs.slice(indent);
               } else {
                 if (blankLine) {
                   break;
                 }
-                if (line.search(/[^ ]/) >= 4) {
+                if (line.replace(this.rules.other.tabCharGlobal, "    ").search(this.rules.other.nonSpaceChar) >= 4) {
                   break;
                 }
                 if (fencesBeginRegex.test(line)) {
               }
               raw += rawLine + "\n";
               src = src.substring(rawLine.length + 1);
-              line = nextLine.slice(indent);
+              line = nextLineWithoutTabs.slice(indent);
             }
           }
           if (!list2.loose) {
             if (endsWithBlankLine) {
               list2.loose = true;
-            } else if (/\n *\n *$/.test(raw)) {
+            } else if (this.rules.other.doubleBlankLine.test(raw)) {
               endsWithBlankLine = true;
             }
           }
           let istask = null;
           let ischecked;
           if (this.options.gfm) {
-            istask = /^\[[ xX]\] /.exec(itemContents);
+            istask = this.rules.other.listIsTask.exec(itemContents);
             if (istask) {
               ischecked = istask[0] !== "[ ] ";
-              itemContents = itemContents.replace(/^\[[ xX]\] +/, "");
+              itemContents = itemContents.replace(this.rules.other.listReplaceTask, "");
             }
           }
           list2.items.push({
           });
           list2.raw += raw;
         }
-        list2.items[list2.items.length - 1].raw = list2.items[list2.items.length - 1].raw.trimEnd();
-        list2.items[list2.items.length - 1].text = list2.items[list2.items.length - 1].text.trimEnd();
+        const lastItem = list2.items.at(-1);
+        if (lastItem) {
+          lastItem.raw = lastItem.raw.trimEnd();
+          lastItem.text = lastItem.text.trimEnd();
+        } else {
+          return;
+        }
         list2.raw = list2.raw.trimEnd();
         for (let i3 = 0; i3 < list2.items.length; i3++) {
           this.lexer.state.top = false;
           list2.items[i3].tokens = this.lexer.blockTokens(list2.items[i3].text, []);
           if (!list2.loose) {
             const spacers = list2.items[i3].tokens.filter((t2) => t2.type === "space");
-            const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t2) => /\n.*\n/.test(t2.raw));
+            const hasMultipleLineBreaks = spacers.length > 0 && spacers.some((t2) => this.rules.other.anyLine.test(t2.raw));
             list2.loose = hasMultipleLineBreaks;
           }
         }
     def(src) {
       const cap = this.rules.block.def.exec(src);
       if (cap) {
-        const tag2 = cap[1].toLowerCase().replace(/\s+/g, " ");
-        const href = cap[2] ? cap[2].replace(/^<(.*)>$/, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "";
+        const tag2 = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " ");
+        const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "";
         const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : cap[3];
         return {
           type: "def",
       }
     }
     table(src) {
+      var _a4;
       const cap = this.rules.block.table.exec(src);
       if (!cap) {
         return;
       }
-      if (!/[:|]/.test(cap[2])) {
+      if (!this.rules.other.tableDelimiter.test(cap[2])) {
         return;
       }
       const headers = splitCells(cap[1]);
-      const aligns = cap[2].replace(/^\||\| *$/g, "").split("|");
-      const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, "").split("\n") : [];
+      const aligns = cap[2].replace(this.rules.other.tableAlignChars, "").split("|");
+      const rows = ((_a4 = cap[3]) == null ? void 0 : _a4.trim()) ? cap[3].replace(this.rules.other.tableRowBlankLine, "").split("\n") : [];
       const item = {
         type: "table",
         raw: cap[0],
         return;
       }
       for (const align of aligns) {
-        if (/^ *-+: *$/.test(align)) {
+        if (this.rules.other.tableAlignRight.test(align)) {
           item.align.push("right");
-        } else if (/^ *:-+: *$/.test(align)) {
+        } else if (this.rules.other.tableAlignCenter.test(align)) {
           item.align.push("center");
-        } else if (/^ *:-+ *$/.test(align)) {
+        } else if (this.rules.other.tableAlignLeft.test(align)) {
           item.align.push("left");
         } else {
           item.align.push(null);
         return {
           type: "escape",
           raw: cap[0],
-          text: escape$1(cap[1])
+          text: cap[1]
         };
       }
     }
     tag(src) {
       const cap = this.rules.inline.tag.exec(src);
       if (cap) {
-        if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
+        if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {
           this.lexer.state.inLink = true;
-        } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
+        } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {
           this.lexer.state.inLink = false;
         }
-        if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
+        if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {
           this.lexer.state.inRawBlock = true;
-        } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
+        } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {
           this.lexer.state.inRawBlock = false;
         }
         return {
       const cap = this.rules.inline.link.exec(src);
       if (cap) {
         const trimmedUrl = cap[2].trim();
-        if (!this.options.pedantic && /^</.test(trimmedUrl)) {
-          if (!/>$/.test(trimmedUrl)) {
+        if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {
+          if (!this.rules.other.endAngleBracket.test(trimmedUrl)) {
             return;
           }
           const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), "\\");
         let href = cap[2];
         let title = "";
         if (this.options.pedantic) {
-          const link3 = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
+          const link3 = this.rules.other.pedanticHrefTitle.exec(href);
           if (link3) {
             href = link3[1];
             title = link3[3];
           title = cap[3] ? cap[3].slice(1, -1) : "";
         }
         href = href.trim();
-        if (/^</.test(href)) {
-          if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
+        if (this.rules.other.startAngleBracket.test(href)) {
+          if (this.options.pedantic && !this.rules.other.endAngleBracket.test(trimmedUrl)) {
             href = href.slice(1);
           } else {
             href = href.slice(1, -1);
         return outputLink(cap, {
           href: href ? href.replace(this.rules.inline.anyPunctuation, "$1") : href,
           title: title ? title.replace(this.rules.inline.anyPunctuation, "$1") : title
-        }, cap[0], this.lexer);
+        }, cap[0], this.lexer, this.rules);
       }
     }
     reflink(src, links) {
       let cap;
       if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
-        const linkString = (cap[2] || cap[1]).replace(/\s+/g, " ");
+        const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, " ");
         const link3 = links[linkString.toLowerCase()];
         if (!link3) {
           const text = cap[0].charAt(0);
             text
           };
         }
-        return outputLink(cap, link3, cap[0], this.lexer);
+        return outputLink(cap, link3, cap[0], this.lexer, this.rules);
       }
     }
     emStrong(src, maskedSrc, prevChar = "") {
       let match = this.rules.inline.emStrongLDelim.exec(src);
       if (!match)
         return;
-      if (match[3] && prevChar.match(/[\p{L}\p{N}]/u))
+      if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric))
         return;
       const nextChar = match[1] || match[2] || "";
       if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {
     codespan(src) {
       const cap = this.rules.inline.code.exec(src);
       if (cap) {
-        let text = cap[2].replace(/\n/g, " ");
-        const hasNonSpaceChars = /[^ ]/.test(text);
-        const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
+        let text = cap[2].replace(this.rules.other.newLineCharGlobal, " ");
+        const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);
+        const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);
         if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
           text = text.substring(1, text.length - 1);
         }
-        text = escape$1(text, true);
         return {
           type: "codespan",
           raw: cap[0],
       if (cap) {
         let text, href;
         if (cap[2] === "@") {
-          text = escape$1(cap[1]);
+          text = cap[1];
           href = "mailto:" + text;
         } else {
-          text = escape$1(cap[1]);
+          text = cap[1];
           href = text;
         }
         return {
       }
     }
     url(src) {
-      var _a3, _b3;
+      var _a4, _b3;
       let cap;
       if (cap = this.rules.inline.url.exec(src)) {
         let text, href;
         if (cap[2] === "@") {
-          text = escape$1(cap[0]);
+          text = cap[0];
           href = "mailto:" + text;
         } else {
           let prevCapZero;
           do {
             prevCapZero = cap[0];
-            cap[0] = (_b3 = (_a3 = this.rules.inline._backpedal.exec(cap[0])) == null ? void 0 : _a3[0]) != null ? _b3 : "";
+            cap[0] = (_b3 = (_a4 = this.rules.inline._backpedal.exec(cap[0])) == null ? void 0 : _a4[0]) != null ? _b3 : "";
           } while (prevCapZero !== cap[0]);
-          text = escape$1(cap[0]);
+          text = cap[0];
           if (cap[1] === "www.") {
             href = "http://" + cap[0];
           } else {
     inlineText(src) {
       const cap = this.rules.inline.text.exec(src);
       if (cap) {
-        let text;
-        if (this.lexer.state.inRawBlock) {
-          text = cap[0];
-        } else {
-          text = escape$1(cap[0]);
-        }
+        const escaped = this.lexer.state.inRawBlock;
         return {
           type: "text",
           raw: cap[0],
-          text
+          text: cap[0],
+          escaped
         };
       }
     }
   };
-  var newline = /^(?: *(?:\n|$))+/;
-  var blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/;
-  var fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
-  var hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
-  var heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
-  var bullet = /(?:[*+-]|\d{1,9}[.)])/;
-  var lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g, bullet).replace(/blockCode/g, / {4}/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).getRegex();
-  var _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
-  var blockText = /^[^\n]+/;
-  var _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
-  var def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label", _blockLabel).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
-  var list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, bullet).getRegex();
-  var _tag = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
-  var _comment = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
-  var html2 = edit("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))", "i").replace("comment", _comment).replace("tag", _tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
-  var paragraph = edit(_paragraph).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex();
-  var blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", paragraph).getRegex();
-  var blockNormal = {
-    blockquote,
-    code: blockCode,
-    def,
-    fences,
-    heading,
-    hr,
-    html: html2,
-    lheading,
-    list,
-    newline,
-    paragraph,
-    table: noopTest,
-    text: blockText
-  };
-  var gfmTable = edit("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", " {4}[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex();
-  var blockGfm = {
-    ...blockNormal,
-    table: gfmTable,
-    paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", gfmTable).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex()
-  };
-  var blockPedantic = {
-    ...blockNormal,
-    html: edit("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", _comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
-    def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
-    heading: /^(#{1,6})(.*)(?:\n+|$)/,
-    fences: noopTest,
-    // fences not supported
-    lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,
-    paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " *#{1,6} *[^\n]").replace("lheading", lheading).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex()
-  };
-  var escape4 = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
-  var inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
-  var br = /^( {2,}|\\)\n(?!\s*$)/;
-  var inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
-  var _punctuation = "\\p{P}\\p{S}";
-  var punctuation = edit(/^((?![*_])[\spunctuation])/, "u").replace(/punctuation/g, _punctuation).getRegex();
-  var blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g;
-  var emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, "u").replace(/punct/g, _punctuation).getRegex();
-  var emStrongRDelimAst = edit("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])", "gu").replace(/punct/g, _punctuation).getRegex();
-  var emStrongRDelimUnd = edit("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])", "gu").replace(/punct/g, _punctuation).getRegex();
-  var anyPunctuation = edit(/\\([punct])/, "gu").replace(/punct/g, _punctuation).getRegex();
-  var autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
-  var _inlineComment = edit(_comment).replace("(?:-->|$)", "-->").getRegex();
-  var tag = edit("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", _inlineComment).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
-  var _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
-  var link2 = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label", _inlineLabel).replace("href", /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
-  var reflink = edit(/^!?\[(label)\]\[(ref)\]/).replace("label", _inlineLabel).replace("ref", _blockLabel).getRegex();
-  var nolink = edit(/^!?\[(ref)\](?:\[\])?/).replace("ref", _blockLabel).getRegex();
-  var reflinkSearch = edit("reflink|nolink(?!\\()", "g").replace("reflink", reflink).replace("nolink", nolink).getRegex();
-  var inlineNormal = {
-    _backpedal: noopTest,
-    // only used for GFM url
-    anyPunctuation,
-    autolink,
-    blockSkip,
-    br,
-    code: inlineCode,
-    del: noopTest,
-    emStrongLDelim,
-    emStrongRDelimAst,
-    emStrongRDelimUnd,
-    escape: escape4,
-    link: link2,
-    nolink,
-    punctuation,
-    reflink,
-    reflinkSearch,
-    tag,
-    text: inlineText,
-    url: noopTest
-  };
-  var inlinePedantic = {
-    ...inlineNormal,
-    link: edit(/^!?\[(label)\]\((.*?)\)/).replace("label", _inlineLabel).getRegex(),
-    reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", _inlineLabel).getRegex()
-  };
-  var inlineGfm = {
-    ...inlineNormal,
-    escape: edit(escape4).replace("])", "~|])").getRegex(),
-    url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, "i").replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),
-    _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,
-    del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
-    text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
-  };
-  var inlineBreaks = {
-    ...inlineGfm,
-    br: edit(br).replace("{2,}", "*").getRegex(),
-    text: edit(inlineGfm.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex()
-  };
-  var block = {
-    normal: blockNormal,
-    gfm: blockGfm,
-    pedantic: blockPedantic
-  };
-  var inline = {
-    normal: inlineNormal,
-    gfm: inlineGfm,
-    breaks: inlineBreaks,
-    pedantic: inlinePedantic
-  };
   var _Lexer = class __Lexer {
     constructor(options2) {
       __publicField(this, "tokens");
         top: true
       };
       const rules = {
+        other,
         block: block.normal,
         inline: inline.normal
       };
      * Preprocessing
      */
     lex(src) {
-      src = src.replace(/\r\n|\r/g, "\n");
+      src = src.replace(other.carriageReturn, "\n");
       this.blockTokens(src, this.tokens);
       for (let i3 = 0; i3 < this.inlineQueue.length; i3++) {
         const next = this.inlineQueue[i3];
       return this.tokens;
     }
     blockTokens(src, tokens = [], lastParagraphClipped = false) {
+      var _a4, _b3, _c2;
       if (this.options.pedantic) {
-        src = src.replace(/\t/g, "    ").replace(/^ +$/gm, "");
-      } else {
-        src = src.replace(/^( *)(\t+)/gm, (_2, leading, tabs) => {
-          return leading + "    ".repeat(tabs.length);
-        });
+        src = src.replace(other.tabCharGlobal, "    ").replace(other.spaceLine, "");
       }
-      let token;
-      let lastToken;
-      let cutSrc;
       while (src) {
-        if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some((extTokenizer) => {
+        let token;
+        if ((_b3 = (_a4 = this.options.extensions) == null ? void 0 : _a4.block) == null ? void 0 : _b3.some((extTokenizer) => {
           if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
             src = src.substring(token.raw.length);
             tokens.push(token);
         }
         if (token = this.tokenizer.space(src)) {
           src = src.substring(token.raw.length);
-          if (token.raw.length === 1 && tokens.length > 0) {
-            tokens[tokens.length - 1].raw += "\n";
+          const lastToken = tokens.at(-1);
+          if (token.raw.length === 1 && lastToken !== void 0) {
+            lastToken.raw += "\n";
           } else {
             tokens.push(token);
           }
         }
         if (token = this.tokenizer.code(src)) {
           src = src.substring(token.raw.length);
-          lastToken = tokens[tokens.length - 1];
-          if (lastToken && (lastToken.type === "paragraph" || lastToken.type === "text")) {
+          const lastToken = tokens.at(-1);
+          if ((lastToken == null ? void 0 : lastToken.type) === "paragraph" || (lastToken == null ? void 0 : lastToken.type) === "text") {
             lastToken.raw += "\n" + token.raw;
             lastToken.text += "\n" + token.text;
-            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
+            this.inlineQueue.at(-1).src = lastToken.text;
           } else {
             tokens.push(token);
           }
         }
         if (token = this.tokenizer.def(src)) {
           src = src.substring(token.raw.length);
-          lastToken = tokens[tokens.length - 1];
-          if (lastToken && (lastToken.type === "paragraph" || lastToken.type === "text")) {
+          const lastToken = tokens.at(-1);
+          if ((lastToken == null ? void 0 : lastToken.type) === "paragraph" || (lastToken == null ? void 0 : lastToken.type) === "text") {
             lastToken.raw += "\n" + token.raw;
             lastToken.text += "\n" + token.raw;
-            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
+            this.inlineQueue.at(-1).src = lastToken.text;
           } else if (!this.tokens.links[token.tag]) {
             this.tokens.links[token.tag] = {
               href: token.href,
           tokens.push(token);
           continue;
         }
-        cutSrc = src;
-        if (this.options.extensions && this.options.extensions.startBlock) {
+        let cutSrc = src;
+        if ((_c2 = this.options.extensions) == null ? void 0 : _c2.startBlock) {
           let startIndex = Infinity;
           const tempSrc = src.slice(1);
           let tempStart;
           }
         }
         if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
-          lastToken = tokens[tokens.length - 1];
+          const lastToken = tokens.at(-1);
           if (lastParagraphClipped && (lastToken == null ? void 0 : lastToken.type) === "paragraph") {
             lastToken.raw += "\n" + token.raw;
             lastToken.text += "\n" + token.text;
             this.inlineQueue.pop();
-            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
+            this.inlineQueue.at(-1).src = lastToken.text;
           } else {
             tokens.push(token);
           }
         }
         if (token = this.tokenizer.text(src)) {
           src = src.substring(token.raw.length);
-          lastToken = tokens[tokens.length - 1];
-          if (lastToken && lastToken.type === "text") {
+          const lastToken = tokens.at(-1);
+          if ((lastToken == null ? void 0 : lastToken.type) === "text") {
             lastToken.raw += "\n" + token.raw;
             lastToken.text += "\n" + token.text;
             this.inlineQueue.pop();
-            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
+            this.inlineQueue.at(-1).src = lastToken.text;
           } else {
             tokens.push(token);
           }
      * Lexing/Compiling
      */
     inlineTokens(src, tokens = []) {
-      let token, lastToken, cutSrc;
+      var _a4, _b3, _c2;
       let maskedSrc = src;
-      let match;
-      let keepPrevChar, prevChar;
+      let match = null;
       if (this.tokens.links) {
         const links = Object.keys(this.tokens.links);
         if (links.length > 0) {
       while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {
         maskedSrc = maskedSrc.slice(0, match.index) + "++" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
       }
+      let keepPrevChar = false;
+      let prevChar = "";
       while (src) {
         if (!keepPrevChar) {
           prevChar = "";
         }
         keepPrevChar = false;
-        if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some((extTokenizer) => {
+        let token;
+        if ((_b3 = (_a4 = this.options.extensions) == null ? void 0 : _a4.inline) == null ? void 0 : _b3.some((extTokenizer) => {
           if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
             src = src.substring(token.raw.length);
             tokens.push(token);
         }
         if (token = this.tokenizer.tag(src)) {
           src = src.substring(token.raw.length);
-          lastToken = tokens[tokens.length - 1];
-          if (lastToken && token.type === "text" && lastToken.type === "text") {
-            lastToken.raw += token.raw;
-            lastToken.text += token.text;
-          } else {
-            tokens.push(token);
-          }
+          tokens.push(token);
           continue;
         }
         if (token = this.tokenizer.link(src)) {
         }
         if (token = this.tokenizer.reflink(src, this.tokens.links)) {
           src = src.substring(token.raw.length);
-          lastToken = tokens[tokens.length - 1];
-          if (lastToken && token.type === "text" && lastToken.type === "text") {
+          const lastToken = tokens.at(-1);
+          if (token.type === "text" && (lastToken == null ? void 0 : lastToken.type) === "text") {
             lastToken.raw += token.raw;
             lastToken.text += token.text;
           } else {
           tokens.push(token);
           continue;
         }
-        cutSrc = src;
-        if (this.options.extensions && this.options.extensions.startInline) {
+        let cutSrc = src;
+        if ((_c2 = this.options.extensions) == null ? void 0 : _c2.startInline) {
           let startIndex = Infinity;
           const tempSrc = src.slice(1);
           let tempStart;
             prevChar = token.raw.slice(-1);
           }
           keepPrevChar = true;
-          lastToken = tokens[tokens.length - 1];
-          if (lastToken && lastToken.type === "text") {
+          const lastToken = tokens.at(-1);
+          if ((lastToken == null ? void 0 : lastToken.type) === "text") {
             lastToken.raw += token.raw;
             lastToken.text += token.text;
           } else {
       return "";
     }
     code({ text, lang, escaped }) {
-      var _a3;
-      const langString = (_a3 = (lang || "").match(/^\S*/)) == null ? void 0 : _a3[0];
-      const code = text.replace(/\n$/, "") + "\n";
+      var _a4;
+      const langString = (_a4 = (lang || "").match(other.notSpaceStart)) == null ? void 0 : _a4[0];
+      const code = text.replace(other.endingNewline, "") + "\n";
       if (!langString) {
-        return "<pre><code>" + (escaped ? code : escape$1(code, true)) + "</code></pre>\n";
+        return "<pre><code>" + (escaped ? code : escape4(code, true)) + "</code></pre>\n";
       }
-      return '<pre><code class="language-' + escape$1(langString) + '">' + (escaped ? code : escape$1(code, true)) + "</code></pre>\n";
+      return '<pre><code class="language-' + escape4(langString) + '">' + (escaped ? code : escape4(code, true)) + "</code></pre>\n";
     }
     blockquote({ tokens }) {
       const body = this.parser.parse(tokens);
       return "<" + type2 + startAttr + ">\n" + body + "</" + type2 + ">\n";
     }
     listitem(item) {
+      var _a4;
       let itemBody = "";
       if (item.task) {
         const checkbox = this.checkbox({ checked: !!item.checked });
         if (item.loose) {
-          if (item.tokens.length > 0 && item.tokens[0].type === "paragraph") {
+          if (((_a4 = item.tokens[0]) == null ? void 0 : _a4.type) === "paragraph") {
             item.tokens[0].text = checkbox + " " + item.tokens[0].text;
             if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === "text") {
-              item.tokens[0].tokens[0].text = checkbox + " " + item.tokens[0].tokens[0].text;
+              item.tokens[0].tokens[0].text = checkbox + " " + escape4(item.tokens[0].tokens[0].text);
+              item.tokens[0].tokens[0].escaped = true;
             }
           } else {
             item.tokens.unshift({
               type: "text",
               raw: checkbox + " ",
-              text: checkbox + " "
+              text: checkbox + " ",
+              escaped: true
             });
           }
         } else {
       return "<em>".concat(this.parser.parseInline(tokens), "</em>");
     }
     codespan({ text }) {
-      return "<code>".concat(text, "</code>");
+      return "<code>".concat(escape4(text, true), "</code>");
     }
     br(token) {
       return "<br>";
       href = cleanHref;
       let out = '<a href="' + href + '"';
       if (title) {
-        out += ' title="' + title + '"';
+        out += ' title="' + escape4(title) + '"';
       }
       out += ">" + text + "</a>";
       return out;
     image({ href, title, text }) {
       const cleanHref = cleanUrl(href);
       if (cleanHref === null) {
-        return text;
+        return escape4(text);
       }
       href = cleanHref;
       let out = '<img src="'.concat(href, '" alt="').concat(text, '"');
       if (title) {
-        out += ' title="'.concat(title, '"');
+        out += ' title="'.concat(escape4(title), '"');
       }
       out += ">";
       return out;
     }
     text(token) {
-      return "tokens" in token && token.tokens ? this.parser.parseInline(token.tokens) : token.text;
+      return "tokens" in token && token.tokens ? this.parser.parseInline(token.tokens) : "escaped" in token && token.escaped ? token.text : escape4(token.text);
     }
   };
   var _TextRenderer = class {
      * Parse Loop
      */
     parse(tokens, top = true) {
+      var _a4, _b3;
       let out = "";
       for (let i3 = 0; i3 < tokens.length; i3++) {
         const anyToken = tokens[i3];
-        if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {
+        if ((_b3 = (_a4 = this.options.extensions) == null ? void 0 : _a4.renderers) == null ? void 0 : _b3[anyToken.type]) {
           const genericToken = anyToken;
           const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);
           if (ret !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "paragraph", "text"].includes(genericToken.type)) {
                 type: "paragraph",
                 raw: body,
                 text: body,
-                tokens: [{ type: "text", raw: body, text: body }]
+                tokens: [{ type: "text", raw: body, text: body, escaped: true }]
               });
             } else {
               out += body;
     /**
      * Parse Inline Tokens
      */
-    parseInline(tokens, renderer) {
-      renderer = renderer || this.renderer;
+    parseInline(tokens, renderer = this.renderer) {
+      var _a4, _b3;
       let out = "";
       for (let i3 = 0; i3 < tokens.length; i3++) {
         const anyToken = tokens[i3];
-        if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {
+        if ((_b3 = (_a4 = this.options.extensions) == null ? void 0 : _a4.renderers) == null ? void 0 : _b3[anyToken.type]) {
           const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);
           if (ret !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(anyToken.type)) {
             out += ret || "";
   var _Hooks = class {
     constructor(options2) {
       __publicField(this, "options");
+      __publicField(this, "block");
       this.options = options2 || _defaults;
     }
     /**
     processAllTokens(tokens) {
       return tokens;
     }
+    /**
+     * Provide function to tokenize markdown
+     */
+    provideLexer() {
+      return this.block ? _Lexer.lex : _Lexer.lexInline;
+    }
+    /**
+     * Provide function to parse tokens
+     */
+    provideParser() {
+      return this.block ? _Parser.parse : _Parser.parseInline;
+    }
   };
   __publicField(_Hooks, "passThroughHooks", /* @__PURE__ */ new Set([
     "preprocess",
     constructor(...args) {
       __publicField(this, "defaults", _getDefaults());
       __publicField(this, "options", this.setOptions);
-      __publicField(this, "parse", this.parseMarkdown(_Lexer.lex, _Parser.parse));
-      __publicField(this, "parseInline", this.parseMarkdown(_Lexer.lexInline, _Parser.parseInline));
+      __publicField(this, "parse", this.parseMarkdown(true));
+      __publicField(this, "parseInline", this.parseMarkdown(false));
       __publicField(this, "Parser", _Parser);
       __publicField(this, "Renderer", _Renderer);
       __publicField(this, "TextRenderer", _TextRenderer);
      * Run callback for every token
      */
     walkTokens(tokens, callback) {
-      var _a3, _b3;
+      var _a4, _b3;
       let values = [];
       for (const token of tokens) {
         values = values.concat(callback.call(this, token));
           }
           default: {
             const genericToken = token;
-            if ((_b3 = (_a3 = this.defaults.extensions) == null ? void 0 : _a3.childTokens) == null ? void 0 : _b3[genericToken.type]) {
+            if ((_b3 = (_a4 = this.defaults.extensions) == null ? void 0 : _a4.childTokens) == null ? void 0 : _b3[genericToken.type]) {
               this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {
                 const tokens2 = genericToken[childTokens].flat(Infinity);
                 values = values.concat(this.walkTokens(tokens2, callback));
     use(...args) {
       const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };
       args.forEach((pack) => {
-        const opts = { ...pack };
+        const opts = __spreadValues({}, pack);
         opts.async = this.defaults.async || opts.async || false;
         if (pack.extensions) {
           pack.extensions.forEach((ext) => {
             if (!(prop in hooks)) {
               throw new Error("hook '".concat(prop, "' does not exist"));
             }
-            if (prop === "options") {
+            if (["options", "block"].includes(prop)) {
               continue;
             }
             const hooksProp = prop;
             return values;
           };
         }
-        this.defaults = { ...this.defaults, ...opts };
+        this.defaults = __spreadValues(__spreadValues({}, this.defaults), opts);
       });
       return this;
     }
     setOptions(opt) {
-      this.defaults = { ...this.defaults, ...opt };
+      this.defaults = __spreadValues(__spreadValues({}, this.defaults), opt);
       return this;
     }
     lexer(src, options2) {
     parser(tokens, options2) {
       return _Parser.parse(tokens, options2 != null ? options2 : this.defaults);
     }
-    parseMarkdown(lexer2, parser3) {
+    parseMarkdown(blockType) {
       const parse = (src, options2) => {
-        const origOpt = { ...options2 };
-        const opt = { ...this.defaults, ...origOpt };
+        const origOpt = __spreadValues({}, options2);
+        const opt = __spreadValues(__spreadValues({}, this.defaults), origOpt);
         const throwError = this.onError(!!opt.silent, !!opt.async);
         if (this.defaults.async === true && origOpt.async === false) {
           return throwError(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
         }
         if (opt.hooks) {
           opt.hooks.options = opt;
+          opt.hooks.block = blockType;
         }
+        const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline;
+        const parser3 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline;
         if (opt.async) {
           return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser3(tokens, opt)).then((html3) => opt.hooks ? opt.hooks.postprocess(html3) : html3).catch(throwError);
         }
       return (e3) => {
         e3.message += "\nPlease report this to https://github.com/markedjs/marked.";
         if (silent) {
-          const msg = "<p>An error occurred:</p><pre>" + escape$1(e3.message + "", true) + "</pre>";
+          const msg = "<p>An error occurred:</p><pre>" + escape4(e3.message + "", true) + "</pre>";
           if (async) {
             return Promise.resolve(msg);
           }
      * @param {Point} other the other point
      * @return {boolean} whether the points are equal
      */
-    equals(other) {
-      return this.x === other.x && this.y === other.y;
+    equals(other2) {
+      return this.x === other2.x && this.y === other2.y;
     },
     /**
      * Calculate the distance from this point to another point
     // Update the URL with current image id
     updateUrlImage: function(imageId) {
       if (!window.mocha) {
-        const hash = utilStringQs(window.location.hash);
+        const hash2 = utilStringQs(window.location.hash);
         if (imageId) {
-          hash.photo = "mapillary/" + imageId;
+          hash2.photo = "mapillary/" + imageId;
         } else {
-          delete hash.photo;
+          delete hash2.photo;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     },
     // Highlight the detection in the viewer that is related to the clicked map feature
     validationUnsquareWay: () => validationUnsquareWay
   });
 
+  // modules/util/utilDisplayLabel.js
+  function utilDisplayLabel(entity, graphOrGeometry, verbose) {
+    var result;
+    var displayName = utilDisplayName(entity);
+    var preset = typeof graphOrGeometry === "string" ? _mainPresetIndex.matchTags(entity.tags, graphOrGeometry) : _mainPresetIndex.match(entity, graphOrGeometry);
+    var presetName = preset && (preset.suggestion ? preset.subtitle() : preset.name());
+    if (verbose) {
+      result = [presetName, displayName].filter(Boolean).join(" ");
+    } else {
+      result = displayName || presetName;
+    }
+    return result || utilDisplayType(entity.id);
+  }
+
   // modules/validations/almost_junction.js
   function validationAlmostJunction(context) {
     const type2 = "almost_junction";
           id: nextNode.id,
           properties: { target: true, entity: nextNode }
         });
-      } catch {
+      } catch (e3) {
         context.ui().flash.duration(4e3).iconName("#iD-icon-no").label(_t.append("operations.follow.error.unknown"))();
       }
     }
       if (asLine && asArea && (0, import_fast_deep_equal4.default)(asLine.tags, asArea.tags)) {
         return null;
       }
+      if (asLine.isFallback() && asArea.isFallback() && !(0, import_fast_deep_equal4.default)(tagSuggestingArea, { area: "yes" })) {
+        return null;
+      }
       return tagSuggestingArea;
     }
     function makeConnectEndpointsFixOnClick(way, graph) {
       if (sourceGeom === "area") targetGeoms.unshift("line");
       var asSource = _mainPresetIndex.match(entity, graph);
       var targetGeom = targetGeoms.find((nodeGeom) => {
-        var asTarget = _mainPresetIndex.matchTags(entity.tags, nodeGeom);
+        const asTarget = _mainPresetIndex.matchTags(
+          entity.tags,
+          nodeGeom,
+          entity.extent(graph).center()
+        );
         if (!asSource || !asTarget || asSource === asTarget || // sometimes there are two presets with the same tags for different geometries
         (0, import_fast_deep_equal4.default)(asSource.tags, asTarget.tags)) return false;
         if (asTarget.isFallback()) return false;
   function validationMissingTag(context) {
     var type2 = "missing_tag";
     function hasDescriptiveTags(entity) {
-      var onlyAttributeKeys = ["description", "name", "note", "start_date"];
+      var onlyAttributeKeys = ["description", "name", "note", "start_date", "oneway"];
       var entityDescriptiveKeys = Object.keys(entity.tags).filter(function(k2) {
         if (k2 === "area" || !osmIsInterestingTag(k2)) return false;
         return !onlyAttributeKeys.some(function(attributeKey) {
         ensureVisible();
       }
       function ensureVisible() {
+        var _a4;
         var combo = container.selectAll(".combobox");
         if (combo.empty()) return;
         var containerRect = container.node().getBoundingClientRect();
         }
         var selected = combo.selectAll(".combobox-option.selected").node();
         if (selected) {
-          selected.scrollIntoView({ behavior: "smooth", block: "nearest" });
+          (_a4 = selected.scrollIntoView) == null ? void 0 : _a4.call(selected, { behavior: "smooth", block: "nearest" });
         }
       }
       function value() {
   }
   function nodeVal(node) {
     node == null ? void 0 : node.normalize();
-    return node && node.textContent || "";
+    return (node == null ? void 0 : node.textContent) || "";
   }
   function get1(node, tagName, callback) {
     const n3 = node.getElementsByTagName(tagName);
     return {};
   }
   function $num(node, tagName, callback) {
-    const val = parseFloat(nodeVal(get1(node, tagName)));
-    if (isNaN(val))
+    const val = Number.parseFloat(nodeVal(get1(node, tagName)));
+    if (Number.isNaN(val))
       return void 0;
     if (val && callback)
       return callback(val) || {};
     return {};
   }
   function num1(node, tagName, callback) {
-    const val = parseFloat(nodeVal(get1(node, tagName)));
-    if (isNaN(val))
+    const val = Number.parseFloat(nodeVal(get1(node, tagName)));
+    if (Number.isNaN(val))
       return void 0;
     if (callback)
       callback(val);
   function isElement(node) {
     return (node == null ? void 0 : node.nodeType) === 1;
   }
-  function getLineStyle(node) {
-    return get3(node, "line", (lineStyle) => {
-      const val = Object.assign({}, val1(lineStyle, "color", (color2) => {
-        return { stroke: "#".concat(color2) };
-      }), $num(lineStyle, "opacity", (opacity) => {
-        return { "stroke-opacity": opacity };
-      }), $num(lineStyle, "width", (width) => {
-        return { "stroke-width": width * 96 / 25.4 };
-      }));
-      return val;
-    });
-  }
   function getExtensions(node) {
     let values = [];
     if (node === null)
     return ["heart", "gpxtpx:hr", "hr"].includes(name) ? "heart" : name;
   }
   function parseNumeric(val) {
-    const num = parseFloat(val);
-    return isNaN(num) ? val : num;
+    const num = Number.parseFloat(val);
+    return Number.isNaN(num) ? val : num;
   }
   function coordPair$1(node) {
     const ll = [
-      parseFloat(node.getAttribute("lon") || ""),
-      parseFloat(node.getAttribute("lat") || "")
+      Number.parseFloat(node.getAttribute("lon") || ""),
+      Number.parseFloat(node.getAttribute("lat") || "")
     ];
-    if (isNaN(ll[0]) || isNaN(ll[1])) {
+    if (Number.isNaN(ll[0]) || Number.isNaN(ll[1])) {
       return null;
     }
     num1(node, "ele", (val) => {
       extendedValues: getExtensions(get1(node, "extensions"))
     };
   }
-  function extractProperties(node) {
-    var _a3;
+  function getLineStyle(node) {
+    return get3(node, "line", (lineStyle) => {
+      const val = Object.assign({}, val1(lineStyle, "color", (color2) => {
+        return { stroke: "#".concat(color2) };
+      }), $num(lineStyle, "opacity", (opacity) => {
+        return { "stroke-opacity": opacity };
+      }), $num(lineStyle, "width", (width) => {
+        return { "stroke-width": width * 96 / 25.4 };
+      }));
+      return val;
+    });
+  }
+  function extractProperties(ns, node) {
+    var _a4;
     const properties = getMulti(node, [
       "name",
       "cmt",
       "time",
       "keywords"
     ]);
-    const extensions = Array.from(node.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3", "*"));
-    for (const child of extensions) {
-      if (((_a3 = child.parentNode) == null ? void 0 : _a3.parentNode) === node) {
-        properties[child.tagName.replace(":", "_")] = nodeVal(child);
+    for (const [n3, url] of ns) {
+      for (const child of Array.from(node.getElementsByTagNameNS(url, "*"))) {
+        properties[child.tagName.replace(":", "_")] = (_a4 = nodeVal(child)) == null ? void 0 : _a4.trim();
       }
     }
     const links = $(node, "link");
       if (c2.time)
         times.push(c2.time);
       for (const [name, val] of c2.extendedValues) {
-        const plural = name === "heart" ? name : name.replace("gpxtpx:", "") + "s";
+        const plural = name === "heart" ? name : "".concat(name.replace("gpxtpx:", ""), "s");
         if (!extendedValues[plural]) {
           extendedValues[plural] = Array(pts.length).fill(null);
         }
       extendedValues
     };
   }
-  function getRoute(node) {
+  function getRoute(ns, node) {
     const line = getPoints$1(node, "rtept");
     if (!line)
       return;
     return {
       type: "Feature",
-      properties: Object.assign({ _gpxType: "rte" }, extractProperties(node), getLineStyle(get1(node, "extensions"))),
+      properties: Object.assign({ _gpxType: "rte" }, extractProperties(ns, node), getLineStyle(get1(node, "extensions"))),
       geometry: {
         type: "LineString",
         coordinates: line.line
       }
     };
   }
-  function getTrack(node) {
+  function getTrack(ns, node) {
+    var _a4;
     const segments = $(node, "trkseg");
     const track = [];
     const times = [];
       const line = getPoints$1(segment, "trkpt");
       if (line) {
         extractedLines.push(line);
-        if (line.times && line.times.length)
+        if ((_a4 = line.times) == null ? void 0 : _a4.length)
           times.push(line.times);
       }
     }
     if (extractedLines.length === 0)
       return null;
     const multi = extractedLines.length > 1;
-    const properties = Object.assign({ _gpxType: "trk" }, extractProperties(node), getLineStyle(get1(node, "extensions")), times.length ? {
+    const properties = Object.assign({ _gpxType: "trk" }, extractProperties(ns, node), getLineStyle(get1(node, "extensions")), times.length ? {
       coordinateProperties: {
         times: multi ? times : times[0]
       }
       }
     };
   }
-  function getPoint(node) {
-    const properties = Object.assign(extractProperties(node), getMulti(node, ["sym"]));
+  function getPoint(ns, node) {
+    const properties = Object.assign(extractProperties(ns, node), getMulti(node, ["sym"]));
     const pair3 = coordPair$1(node);
     if (!pair3)
       return null;
     };
   }
   function* gpxGen(node) {
+    var _a4, _b3;
+    const GPXX = "gpxx";
+    const GPXX_URI = "http://www.garmin.com/xmlschemas/GpxExtensions/v3";
+    const ns = [[GPXX, GPXX_URI]];
+    const attrs = (_a4 = node.getElementsByTagName("gpx")[0]) == null ? void 0 : _a4.attributes;
+    if (attrs) {
+      for (const attr of Array.from(attrs)) {
+        if (((_b3 = attr.name) == null ? void 0 : _b3.startsWith("xmlns:")) && attr.value !== GPXX_URI) {
+          ns.push([attr.name, attr.value]);
+        }
+      }
+    }
     for (const track of $(node, "trk")) {
-      const feature3 = getTrack(track);
+      const feature3 = getTrack(ns, track);
       if (feature3)
         yield feature3;
     }
     for (const route of $(node, "rte")) {
-      const feature3 = getRoute(route);
+      const feature3 = getRoute(ns, route);
       if (feature3)
         yield feature3;
     }
     for (const waypoint of $(node, "wpt")) {
-      const point = getPoint(waypoint);
+      const point = getPoint(ns, waypoint);
       if (point)
         yield point;
     }
   }
   function fixColor(v2, prefix) {
     const properties = {};
-    const colorProp = prefix == "stroke" || prefix === "fill" ? prefix : prefix + "-color";
+    const colorProp = prefix === "stroke" || prefix === "fill" ? prefix : "".concat(prefix, "-color");
     if (v2[0] === "#") {
       v2 = v2.substring(1);
     }
     if (v2.length === 6 || v2.length === 3) {
-      properties[colorProp] = "#" + v2;
+      properties[colorProp] = "#".concat(v2);
     } else if (v2.length === 8) {
-      properties[prefix + "-opacity"] = parseInt(v2.substring(0, 2), 16) / 255;
-      properties[colorProp] = "#" + v2.substring(6, 8) + v2.substring(4, 6) + v2.substring(2, 4);
+      properties["".concat(prefix, "-opacity")] = Number.parseInt(v2.substring(0, 2), 16) / 255;
+      properties[colorProp] = "#".concat(v2.substring(6, 8)).concat(v2.substring(4, 6)).concat(v2.substring(2, 4));
     }
     return properties;
   }
   function extractIcon(node) {
     return get3(node, "IconStyle", (iconStyle) => {
       return Object.assign(getColor(iconStyle, "icon"), numericProperty(iconStyle, "scale", "icon-scale"), numericProperty(iconStyle, "heading", "icon-heading"), get3(iconStyle, "hotSpot", (hotspot) => {
-        const left = parseFloat(hotspot.getAttribute("x") || "");
-        const top = parseFloat(hotspot.getAttribute("y") || "");
+        const left = Number.parseFloat(hotspot.getAttribute("x") || "");
+        const top = Number.parseFloat(hotspot.getAttribute("y") || "");
         const xunits = hotspot.getAttribute("xunits") || "";
         const yunits = hotspot.getAttribute("yunits") || "";
-        if (!isNaN(left) && !isNaN(top))
+        if (!Number.isNaN(left) && !Number.isNaN(top))
           return {
             "icon-offset": [left, top],
             "icon-offset-units": [xunits, yunits]
   function extractStyle(node) {
     return Object.assign({}, extractPoly(node), extractLine(node), extractLabel(node), extractIcon(node));
   }
-  var toNumber2 = (x2) => Number(x2);
-  var typeConverters = {
-    string: (x2) => x2,
-    int: toNumber2,
-    uint: toNumber2,
-    short: toNumber2,
-    ushort: toNumber2,
-    float: toNumber2,
-    double: toNumber2,
-    bool: (x2) => Boolean(x2)
-  };
-  function extractExtendedData(node, schema) {
-    return get3(node, "ExtendedData", (extendedData, properties) => {
-      for (const data of $(extendedData, "Data")) {
-        properties[data.getAttribute("name") || ""] = nodeVal(get1(data, "value"));
-      }
-      for (const simpleData of $(extendedData, "SimpleData")) {
-        const name = simpleData.getAttribute("name") || "";
-        const typeConverter = schema[name] || typeConverters.string;
-        properties[name] = typeConverter(nodeVal(simpleData));
-      }
-      return properties;
-    });
-  }
-  function getMaybeHTMLDescription(node) {
-    const descriptionNode = get1(node, "description");
-    for (const c2 of Array.from((descriptionNode == null ? void 0 : descriptionNode.childNodes) || [])) {
-      if (c2.nodeType === 4) {
-        return {
-          description: {
-            "@type": "html",
-            value: nodeVal(c2)
-          }
-        };
-      }
-    }
-    return {};
-  }
-  function extractTimeSpan(node) {
-    return get3(node, "TimeSpan", (timeSpan) => {
-      return {
-        timespan: {
-          begin: nodeVal(get1(timeSpan, "begin")),
-          end: nodeVal(get1(timeSpan, "end"))
-        }
-      };
-    });
-  }
-  function extractTimeStamp(node) {
-    return get3(node, "TimeStamp", (timeStamp) => {
-      return { timestamp: nodeVal(get1(timeStamp, "when")) };
-    });
-  }
-  function extractCascadedStyle(node, styleMap) {
-    return val1(node, "styleUrl", (styleUrl) => {
-      styleUrl = normalizeId(styleUrl);
-      if (styleMap[styleUrl]) {
-        return Object.assign({ styleUrl }, styleMap[styleUrl]);
-      }
-      return { styleUrl };
-    });
-  }
   var removeSpace = /\s*/g;
   var trimSpace = /^\s*|\s*$/g;
   var splitSpace = /\s+/;
   function coord1(value) {
-    return value.replace(removeSpace, "").split(",").map(parseFloat).filter((num) => !isNaN(num)).slice(0, 3);
+    return value.replace(removeSpace, "").split(",").map(Number.parseFloat).filter((num) => !Number.isNaN(num)).slice(0, 3);
   }
   function coord(value) {
     return value.replace(trimSpace, "").split(splitSpace).map(coord1).filter((coord2) => {
       elems = $ns(node, "coord", "*");
     }
     const coordinates = elems.map((elem) => {
-      return nodeVal(elem).split(" ").map(parseFloat);
+      return nodeVal(elem).split(" ").map(Number.parseFloat);
     });
     if (coordinates.length === 0) {
       return null;
       coordTimes
     };
   }
-  function geometryListToGeometry(geometries) {
-    return geometries.length === 0 ? null : geometries.length === 1 ? geometries[0] : {
-      type: "GeometryCollection",
-      geometries
-    };
+  var toNumber2 = (x2) => Number(x2);
+  var typeConverters = {
+    string: (x2) => x2,
+    int: toNumber2,
+    uint: toNumber2,
+    short: toNumber2,
+    ushort: toNumber2,
+    float: toNumber2,
+    double: toNumber2,
+    bool: (x2) => Boolean(x2)
+  };
+  function extractExtendedData(node, schema) {
+    return get3(node, "ExtendedData", (extendedData, properties) => {
+      for (const data of $(extendedData, "Data")) {
+        properties[data.getAttribute("name") || ""] = nodeVal(get1(data, "value"));
+      }
+      for (const simpleData of $(extendedData, "SimpleData")) {
+        const name = simpleData.getAttribute("name") || "";
+        const typeConverter = schema[name] || typeConverters.string;
+        properties[name] = typeConverter(nodeVal(simpleData));
+      }
+      return properties;
+    });
   }
-  function getPlacemark(node, styleMap, schema, options2) {
-    var _a3;
-    const { coordTimes, geometries } = getGeometry(node);
-    const geometry = geometryListToGeometry(geometries);
-    if (!geometry && options2.skipNullGeometry) {
-      return null;
+  function getMaybeHTMLDescription(node) {
+    const descriptionNode = get1(node, "description");
+    for (const c2 of Array.from((descriptionNode == null ? void 0 : descriptionNode.childNodes) || [])) {
+      if (c2.nodeType === 4) {
+        return {
+          description: {
+            "@type": "html",
+            value: nodeVal(c2)
+          }
+        };
+      }
     }
-    const feature3 = {
-      type: "Feature",
-      geometry,
-      properties: Object.assign(getMulti(node, [
-        "name",
-        "address",
-        "visibility",
-        "open",
-        "phoneNumber",
-        "description"
-      ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node, schema), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length ? {
-        coordinateProperties: {
-          times: coordTimes.length === 1 ? coordTimes[0] : coordTimes
+    return {};
+  }
+  function extractTimeSpan(node) {
+    return get3(node, "TimeSpan", (timeSpan) => {
+      return {
+        timespan: {
+          begin: nodeVal(get1(timeSpan, "begin")),
+          end: nodeVal(get1(timeSpan, "end"))
         }
-      } : {})
-    };
-    if (((_a3 = feature3.properties) == null ? void 0 : _a3.visibility) !== void 0) {
-      feature3.properties.visibility = feature3.properties.visibility !== "0";
-    }
-    const id2 = node.getAttribute("id");
-    if (id2 !== null && id2 !== "")
-      feature3.id = id2;
-    return feature3;
+      };
+    });
+  }
+  function extractTimeStamp(node) {
+    return get3(node, "TimeStamp", (timeStamp) => {
+      return { timestamp: nodeVal(get1(timeStamp, "when")) };
+    });
+  }
+  function extractCascadedStyle(node, styleMap) {
+    return val1(node, "styleUrl", (styleUrl) => {
+      styleUrl = normalizeId(styleUrl);
+      if (styleMap[styleUrl]) {
+        return Object.assign({ styleUrl }, styleMap[styleUrl]);
+      }
+      return { styleUrl };
+    });
   }
   function getGroundOverlayBox(node) {
     const latLonQuad = get1(node, "gx:LatLonQuad");
       coordinates[0].map((coordinate) => {
         const dy = coordinate[1] - center[1];
         const dx = coordinate[0] - center[0];
-        const distance = Math.sqrt(Math.pow(dy, 2) + Math.pow(dx, 2));
+        const distance = Math.sqrt(dy ** 2 + dx ** 2);
         const angle2 = Math.atan2(dy, dx) + rotation * DEGREES_TO_RADIANS;
         return [
           center[0] + Math.cos(angle2) * distance,
         let coordinates = [
           [
             [west, north],
+            // top left
             [east, north],
+            // top right
             [east, south],
+            // top right
             [west, south],
+            // bottom left
             [west, north]
             // top left (again)
           ]
     return null;
   }
   function getGroundOverlay(node, styleMap, schema, options2) {
-    var _a3;
+    var _a4;
     const box = getGroundOverlayBox(node);
     const geometry = (box == null ? void 0 : box.geometry) || null;
     if (!geometry && options2.skipNullGeometry) {
     if (box == null ? void 0 : box.bbox) {
       feature3.bbox = box.bbox;
     }
-    if (((_a3 = feature3.properties) == null ? void 0 : _a3.visibility) !== void 0) {
+    if (((_a4 = feature3.properties) == null ? void 0 : _a4.visibility) !== void 0) {
+      feature3.properties.visibility = feature3.properties.visibility !== "0";
+    }
+    const id2 = node.getAttribute("id");
+    if (id2 !== null && id2 !== "")
+      feature3.id = id2;
+    return feature3;
+  }
+  function geometryListToGeometry(geometries) {
+    return geometries.length === 0 ? null : geometries.length === 1 ? geometries[0] : {
+      type: "GeometryCollection",
+      geometries
+    };
+  }
+  function getPlacemark(node, styleMap, schema, options2) {
+    var _a4;
+    const { coordTimes, geometries } = getGeometry(node);
+    const geometry = geometryListToGeometry(geometries);
+    if (!geometry && options2.skipNullGeometry) {
+      return null;
+    }
+    const feature3 = {
+      type: "Feature",
+      geometry,
+      properties: Object.assign(getMulti(node, [
+        "name",
+        "address",
+        "visibility",
+        "open",
+        "phoneNumber",
+        "description"
+      ]), getMaybeHTMLDescription(node), extractCascadedStyle(node, styleMap), extractStyle(node), extractExtendedData(node, schema), extractTimeSpan(node), extractTimeStamp(node), coordTimes.length ? {
+        coordinateProperties: {
+          times: coordTimes.length === 1 ? coordTimes[0] : coordTimes
+        }
+      } : {})
+    };
+    if (((_a4 = feature3.properties) == null ? void 0 : _a4.visibility) !== void 0) {
       feature3.properties.visibility = feature3.properties.visibility !== "0";
     }
     const id2 = node.getAttribute("id");
   function buildSchema(node) {
     const schema = {};
     for (const field of $(node, "SimpleField")) {
-      schema[field.getAttribute("name") || ""] = typeConverters[field.getAttribute("type") || ""] || typeConverters["string"];
+      schema[field.getAttribute("name") || ""] = typeConverters[field.getAttribute("type") || ""] || typeConverters.string;
     }
     return schema;
   }
     ];
     function drawDefs(selection2) {
       _defsSelection = selection2.append("defs");
-      _defsSelection.append("marker").attr("id", "ideditor-oneway-marker").attr("viewBox", "0 0 10 5").attr("refX", 2.5).attr("refY", 2.5).attr("markerWidth", 2).attr("markerHeight", 2).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("class", "oneway-marker-path").attr("d", "M 5,3 L 0,3 L 0,2 L 5,2 L 5,0 L 10,2.5 L 5,5 z").attr("stroke", "none").attr("fill", "#000").attr("opacity", "0.75");
+      function addOnewayMarker(name, colour) {
+        _defsSelection.append("marker").attr("id", "ideditor-oneway-marker-".concat(name)).attr("viewBox", "0 0 10 5").attr("refX", 2.5).attr("refY", 2.5).attr("markerWidth", 2).attr("markerHeight", 2).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("class", "oneway-marker-path").attr("d", "M 5,3 L 0,3 L 0,2 L 5,2 L 5,0 L 10,2.5 L 5,5 z").attr("stroke", "none").attr("fill", colour).attr("opacity", "0.75");
+      }
+      addOnewayMarker("black", "#000");
+      addOnewayMarker("white", "#fff");
+      addOnewayMarker("pink", "#eaf");
       function addSidedMarker(name, color2, offset) {
         _defsSelection.append("marker").attr("id", "ideditor-sided-marker-" + name).attr("viewBox", "0 0 2 2").attr("refX", 1).attr("refY", -offset).attr("markerWidth", 1.5).attr("markerHeight", 1.5).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("class", "sided-marker-path sided-marker-" + name + "-path").attr("d", "M 0,0 L 1,1 L 2,0 z").attr("stroke", "none").attr("fill", color2);
       }
       const viewfields = markers.selectAll(".viewfield").data(showViewfields ? [0] : []);
       viewfields.exit().remove();
       viewfields.enter().insert("path", "circle").attr("class", "viewfield").attr("transform", function() {
-        var _a3;
+        var _a4;
         const d2 = this.parentNode.__data__;
-        return "rotate(".concat(Math.round((_a3 = d2.direction) != null ? _a3 : 0), ",0,0),scale(1.5,1.5),translate(-8,-13)");
+        return "rotate(".concat(Math.round((_a4 = d2.direction) != null ? _a4 : 0), ",0,0),scale(1.5,1.5),translate(-8,-13)");
       }).attr("d", "M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z").style("visibility", function() {
         const d2 = this.parentNode.__data__;
         return isNumber_default(d2.direction) ? "visible" : "hidden";
               _photos.push(photo);
             }
           }
-        } catch {
+        } catch (e3) {
         }
       }
       if (typeof callback === "function") callback(loaded);
       if (service) service.setStyles(context, null);
     }
     async function update() {
-      var _a3;
+      var _a4;
       const zoom = ~~context.map().zoom();
       const showViewfields = zoom >= viewFieldZoomLevel;
       const service = getService();
       groups.exit().remove();
       const groupsEnter = groups.enter().append("g").attr("class", "viewfield-group").on("mouseenter", mouseover).on("mouseleave", mouseout).on("click", click);
       groupsEnter.append("g").attr("class", "viewfield-scale");
-      const activeImageId = (_a3 = service.getActiveImage()) == null ? void 0 : _a3.id;
+      const activeImageId = (_a4 = service.getActiveImage()) == null ? void 0 : _a4.id;
       const markers = groups.merge(groupsEnter).sort(function(a2, b2) {
         if (a2.id === activeImageId) return 1;
         if (b2.id === activeImageId) return -1;
   }
 
   // modules/svg/notes.js
-  var _notesEnabled = false;
+  var hash = utilStringQs(window.location.hash);
+  var _notesEnabled = !!hash.notes;
   var _osmService;
   function svgNotes(projection2, context, dispatch14) {
     if (!dispatch14) {
 
   // modules/svg/lines.js
   var import_fast_deep_equal6 = __toESM(require_fast_deep_equal());
+  function onewayArrowColour(tags) {
+    if (tags.highway === "construction" && tags.bridge) return "white";
+    if (tags.highway === "pedestrian" && tags.bridge) return "pink";
+    if (tags.railway) return "black";
+    if (tags.aeroway === "runway") return "pink";
+    return "black";
+  }
   function svgLines(projection2, context) {
     var detected = utilDetect();
     var highway_stack = {
         }
       }
       ways = ways.filter(getPath);
-      var pathdata = utilArrayGroupBy(ways, function(way) {
-        return way.layer();
-      });
+      const pathdata = utilArrayGroupBy(ways, (way) => Math.trunc(way.layer()));
       Object.keys(pathdata).forEach(function(k2) {
         var v2 = pathdata[k2];
         var onewayArr = v2.filter(function(d2) {
         layergroup.selectAll("g.line-shadow-highlighted").call(drawLineGroup, "shadow", true);
         layergroup.selectAll("g.line-casing-highlighted").call(drawLineGroup, "casing", true);
         layergroup.selectAll("g.line-stroke-highlighted").call(drawLineGroup, "stroke", true);
-        addMarkers(layergroup, "oneway", "onewaygroup", onewaydata, "url(#ideditor-oneway-marker)");
+        addMarkers(layergroup, "oneway", "onewaygroup", onewaydata, (d2) => {
+          const category = onewayArrowColour(graph.entity(d2.id).tags);
+          return "url(#ideditor-oneway-marker-".concat(category, ")");
+        });
         addMarkers(
           layergroup,
           "sided",
         loginLogout.classed("hide", false).select("a").text(_t("logout")).on("click", (e3) => {
           e3.preventDefault();
           osm.logout();
-          tryLogout();
+          osm.authenticate(void 0, { switchUser: true });
         });
       } else {
         userInfo.html("").classed("hide", true);
         });
       }
     }
-    function tryLogout() {
-      if (!osm) return;
-      const url = osm.getUrlRoot() + "/logout?referer=%2Flogin";
-      const w2 = 600;
-      const h2 = 550;
-      const settings = [
-        ["width", w2],
-        ["height", h2],
-        ["left", window.screen.width / 2 - w2 / 2],
-        ["top", window.screen.height / 2 - h2 / 2]
-      ].map((x2) => x2.join("=")).join(",");
-      window.open(url, "_blank", settings);
-    }
     return function(selection2) {
       if (!osm) return;
       selection2.append("li").attr("class", "userInfo").classed("hide", true);
         }
       }
       var origin = geoVecAdd(anchorLoc, offset);
+      var _verticalOffset = parseFloat(utilGetDimensions(select_default2(".top-toolbar-wrap"))[1]);
+      origin[1] -= _verticalOffset;
       _menu.style("left", origin[0] + "px").style("top", origin[1] + "px");
       var tooltipSide = tooltipPosition(viewport, menuLeft);
       _tooltips.forEach(function(tooltip) {
     return function(selection2) {
       if (!navigator.geolocation || !navigator.geolocation.getCurrentPosition) return;
       _button = selection2.append("button").on("click", click).attr("aria-pressed", false).call(svgIcon("#iD-icon-geolocate", "light")).call(
-        uiTooltip().placement(_mainLocalizer.textDirection() === "rtl" ? "right" : "left").title(() => _t.append("geolocate.title")).keys([_t("geolocate.key")])
+        uiTooltip().placement(_mainLocalizer.textDirection() === "rtl" ? "right" : "left").title(() => _t.append("geolocate.title"))
       );
-      context.keybinding().on(_t("geolocate.key"), click);
     };
   }
 
       }
       if (box && box.getBoundingClientRect) {
         box = copyBox(box.getBoundingClientRect());
+      }
+      if (box) {
         var containerRect = containerNode.getBoundingClientRect();
         box.top -= containerRect.top;
         box.left -= containerRect.left;
         if (tooltipBox.left + tooltipBox.width > w2) {
           tooltipBox.width -= tooltipBox.left + tooltipBox.width - w2;
         }
-        if (tooltipBox.top + tooltipBox.height < 100) {
+        const onLeftOrRightEdge = tooltipBox.left + tooltipBox.width / 2 > w2 - 100 || tooltipBox.left + tooltipBox.width / 2 < 100;
+        if (tooltipBox.top + tooltipBox.height < 100 && !onLeftOrRightEdge) {
           side = "bottom";
           pos = [
             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
             tooltipBox.top + tooltipBox.height
           ];
-        } else if (tooltipBox.top > h2 - 140) {
+        } else if (tooltipBox.top > h2 - 140 && !onLeftOrRightEdge) {
           side = "top";
           pos = [
             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
         var centerStart = context.map().center();
         var textId = context.lastPointerType() === "mouse" ? "drag" : "drag_touch";
         var dragString = helpHtml("intro.navigation.map_info") + "{br}" + helpHtml("intro.navigation." + textId);
-        reveal(".surface", dragString);
+        reveal(".main-map .surface", dragString);
         context.map().on("drawn.intro", function() {
-          reveal(".surface", dragString, { duration: 0 });
+          reveal(".main-map .surface", dragString, { duration: 0 });
         });
         context.map().on("move.intro", function() {
           var centerNow = context.map().center();
       var zoomStart = context.map().zoom();
       var textId = context.lastPointerType() === "mouse" ? "zoom" : "zoom_touch";
       var zoomString = helpHtml("intro.navigation." + textId);
-      reveal(".surface", zoomString);
+      reveal(".main-map .surface", zoomString);
       context.map().on("drawn.intro", function() {
-        reveal(".surface", zoomString, { duration: 0 });
+        reveal(".main-map .surface", zoomString, { duration: 0 });
       });
       context.map().on("move.intro", function() {
         if (context.map().zoom() !== zoomStart) {
         continueTo(pointsLinesAreas);
       };
       reveal(
-        ".surface",
+        ".main-map .surface",
         helpHtml("intro.navigation.features"),
         { buttonText: _t.html("intro.ok"), buttonCallback: onClick }
       );
       context.map().on("drawn.intro", function() {
         reveal(
-          ".surface",
+          ".main-map .surface",
           helpHtml("intro.navigation.features"),
           { duration: 0, buttonText: _t.html("intro.ok"), buttonCallback: onClick }
         );
         continueTo(nodesWays);
       };
       reveal(
-        ".surface",
+        ".main-map .surface",
         helpHtml("intro.navigation.points_lines_areas"),
         { buttonText: _t.html("intro.ok"), buttonCallback: onClick }
       );
       context.map().on("drawn.intro", function() {
         reveal(
-          ".surface",
+          ".main-map .surface",
           helpHtml("intro.navigation.points_lines_areas"),
           { duration: 0, buttonText: _t.html("intro.ok"), buttonCallback: onClick }
         );
         continueTo(clickTownHall);
       };
       reveal(
-        ".surface",
+        ".main-map .surface",
         helpHtml("intro.navigation.nodes_ways"),
         { buttonText: _t.html("intro.ok"), buttonCallback: onClick }
       );
       context.map().on("drawn.intro", function() {
         reveal(
-          ".surface",
+          ".main-map .surface",
           helpHtml("intro.navigation.nodes_ways"),
           { duration: 0, buttonText: _t.html("intro.ok"), buttonCallback: onClick }
         );
         return addPoint();
       }
       context.container().select(".inspector-wrap .panewrap").style("right", "0%");
-      var addNameString = helpHtml("intro.points.fields_info") + "{br}" + helpHtml("intro.points.add_name");
+      var addNameString = helpHtml("intro.points.fields_info") + "{br}" + helpHtml("intro.points.add_name") + "{br}" + helpHtml("intro.points.add_reminder");
       timeout2(function() {
         var entity = context.entity(_pointID);
         if (entity.tags.name) {
       );
       timeout2(function() {
         context.map().on("move.intro", function() {
+          if (selectMenuItem(context, "delete").empty()) {
+            return continueTo(rightClickPoint);
+          }
           reveal(
             ".edit-menu",
             helpHtml("intro.points.delete"),
       if (!entity) return chapter.restart();
       context.map().centerEase(tulipRoadIntersection, 500);
       var continueLineText = helpHtml("intro.lines.continue_line") + "{br}" + helpHtml("intro.lines.finish_line_" + (context.lastPointerType() === "mouse" ? "click" : "tap")) + helpHtml("intro.lines.finish_road");
-      reveal(".surface", continueLineText);
+      reveal(".main-map .surface", continueLineText);
       context.on("enter.intro", function(mode) {
         if (mode.id === "draw-line") {
           return;
     function didNameRoad() {
       context.history().checkpoint("doneAddLine");
       timeout2(function() {
-        reveal(".surface", helpHtml("intro.lines.did_name_road"), {
+        reveal(".main-map .surface", helpHtml("intro.lines.did_name_road"), {
           buttonText: _t.html("intro.ok"),
           buttonCallback: function() {
             continueTo(updateLine);
       }
       context.map().centerZoomEase(twelfthAvenue, 18, 500);
       timeout2(function() {
-        var selected, other, padding, box;
+        var selected, other2, padding, box;
         if (hasWashington) {
           selected = _t("intro.graph.name.washington-street");
-          other = _t("intro.graph.name.12th-avenue");
+          other2 = _t("intro.graph.name.12th-avenue");
           padding = 60 * Math.pow(2, context.map().zoom() - 18);
           box = pad(twelfthAvenueEnd, padding, context);
           box.width *= 3;
         } else {
           selected = _t("intro.graph.name.12th-avenue");
-          other = _t("intro.graph.name.washington-street");
+          other2 = _t("intro.graph.name.washington-street");
           padding = 200 * Math.pow(2, context.map().zoom() - 18);
           box = pad(twelfthAvenue, padding, context);
           box.width /= 2;
           box,
           helpHtml(
             "intro.lines.multi_select",
-            { selected, other1: other }
+            { selected, other1: other2 }
           ) + " " + helpHtml(
             "intro.lines.add_to_selection_" + (context.lastPointerType() === "mouse" ? "click" : "touch"),
-            { selected, other2: other }
+            { selected, other2 }
           )
         );
         context.map().on("move.intro drawn.intro", function() {
           if (hasWashington) {
             selected = _t("intro.graph.name.washington-street");
-            other = _t("intro.graph.name.12th-avenue");
+            other2 = _t("intro.graph.name.12th-avenue");
             padding = 60 * Math.pow(2, context.map().zoom() - 18);
             box = pad(twelfthAvenueEnd, padding, context);
             box.width *= 3;
           } else {
             selected = _t("intro.graph.name.12th-avenue");
-            other = _t("intro.graph.name.washington-street");
+            other2 = _t("intro.graph.name.washington-street");
             padding = 200 * Math.pow(2, context.map().zoom() - 18);
             box = pad(twelfthAvenue, padding, context);
             box.width /= 2;
             box,
             helpHtml(
               "intro.lines.multi_select",
-              { selected, other1: other }
+              { selected, other1: other2 }
             ) + " " + helpHtml(
               "intro.lines.add_to_selection_" + (context.lastPointerType() === "mouse" ? "click" : "touch"),
-              { selected, other2: other }
+              { selected, other2 }
             ),
             { duration: 0 }
           );
         { padding: 50 }
       );
       context.map().on("move.intro drawn.intro", function() {
+        if (selectMenuItem(context, "delete").empty()) {
+          return continueTo(multiRightClick);
+        }
         reveal(
           ".edit-menu",
           helpHtml("intro.lines.multi_delete"),
       context.enter(modeBrowse(context));
       let osm = context.connection();
       let history = context.history().toJSON();
-      let hash = window.location.hash;
+      let hash2 = window.location.hash;
       let center = context.map().center();
       let zoom = context.map().zoom();
       let background = context.background().baseLayerSource();
           context.history().fromJSON(history, false);
         }
         context.map().centerZoom(center, zoom);
-        window.location.replace(hash);
+        window.location.replace(hash2);
         context.inIntro(false);
       });
       let navwrap = selection2.append("div").attr("class", "intro-nav-wrap fillD");
 
   // modules/renderer/background_source.js
   var isRetina = window.devicePixelRatio && window.devicePixelRatio >= 2;
-  window.matchMedia("\n        (-webkit-min-device-pixel-ratio: 2), /* Safari */\n        (min-resolution: 2dppx),             /* standard */\n        (min-resolution: 192dpi)             /* fallback */\n    ").addListener(function() {
+  var _a3;
+  (_a3 = window.matchMedia) == null ? void 0 : _a3.call(window, "\n        (-webkit-min-device-pixel-ratio: 2), /* Safari */\n        (min-resolution: 2dppx),             /* standard */\n        (min-resolution: 192dpi)             /* fallback */\n    ").addListener(function() {
     isRetina = window.devicePixelRatio && window.devicePixelRatio >= 2;
   });
   function localeDateString(s2) {
       return source;
     };
     source.url = function(coord2) {
-      var result = _template.replace(/#[\s\S]*/u, "");
+      var result = _template.replace(new RegExp("#[\\s\\S]*", "u"), "");
       if (result === "") return result;
       if (!source.type || source.id === "custom") {
         if (/SERVICE=WMS|\{(proj|wkid|bbox)\}/.test(result)) {
       });
       return result;
     };
-    source.validZoom = function(z2) {
-      return source.zoomExtent[0] <= z2 && (source.overzoom || source.zoomExtent[1] > z2);
+    source.validZoom = function(z2, underzoom) {
+      if (underzoom === void 0) underzoom = 0;
+      return source.zoomExtent[0] - underzoom <= z2 && (source.overzoom || source.zoomExtent[1] > z2);
     };
     source.isLocatorOverlay = function() {
       return source.id === "mapbox_locator_overlay";
     var len = points.length, codeA = bitCode(points[0], bbox2), part = [], i3, codeB, lastCode;
     let a2;
     let b2;
-    if (!result)
-      result = [];
+    if (!result) result = [];
     for (i3 = 1; i3 < len; i3++) {
       a2 = points[i3 - 1];
       b2 = points[i3];
       }
       codeA = lastCode;
     }
-    if (part.length)
-      result.push(part);
+    if (part.length) result.push(part);
     return result;
   }
   function polygonclip(points, bbox2) {
       for (i3 = 0; i3 < points.length; i3++) {
         p2 = points[i3];
         inside = !(bitCode(p2, bbox2) & edge);
-        if (inside !== prevInside)
-          result.push(intersect(prev, p2, edge, bbox2));
-        if (inside)
-          result.push(p2);
+        if (inside !== prevInside) result.push(intersect(prev, p2, edge, bbox2));
+        if (inside) result.push(p2);
         prev = p2;
         prevInside = inside;
       }
       points = result;
-      if (!points.length)
-        break;
+      if (!points.length) break;
     }
     return result;
   }
   }
   function bitCode(p2, bbox2) {
     var code = 0;
-    if (p2[0] < bbox2[0])
-      code |= 1;
-    else if (p2[0] > bbox2[2])
-      code |= 2;
-    if (p2[1] < bbox2[1])
-      code |= 4;
-    else if (p2[1] > bbox2[3])
-      code |= 8;
+    if (p2[0] < bbox2[0]) code |= 1;
+    else if (p2[0] > bbox2[2]) code |= 2;
+    if (p2[1] < bbox2[1]) code |= 4;
+    else if (p2[1] > bbox2[3]) code |= 8;
     return code;
   }
   function bboxClip(feature3, bbox2) {
 
   // node_modules/@turf/meta/dist/esm/index.js
   function coordEach(geojson, callback, excludeWrapCoord) {
-    if (geojson === null)
-      return;
+    if (geojson === null) return;
     var j2, k2, l2, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type2 = geojson.type, isFeatureCollection = type2 === "FeatureCollection", isFeature = type2 === "Feature", stop = isFeatureCollection ? geojson.features.length : 1;
     for (var featureIndex = 0; featureIndex < stop; featureIndex++) {
       geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;
         var multiFeatureIndex = 0;
         var geometryIndex = 0;
         geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;
-        if (geometry === null)
-          continue;
+        if (geometry === null) continue;
         coords = geometry.coordinates;
         var geomType = geometry.type;
         wrapShrink = excludeWrapCoord && (geomType === "Polygon" || geomType === "MultiPolygon") ? 1 : 0;
               ) === false)
                 return false;
               coordIndex++;
-              if (geomType === "MultiPoint")
-                multiFeatureIndex++;
+              if (geomType === "MultiPoint") multiFeatureIndex++;
             }
-            if (geomType === "LineString")
-              multiFeatureIndex++;
+            if (geomType === "LineString") multiFeatureIndex++;
             break;
           case "Polygon":
           case "MultiLineString":
                   return false;
                 coordIndex++;
               }
-              if (geomType === "MultiLineString")
-                multiFeatureIndex++;
-              if (geomType === "Polygon")
-                geometryIndex++;
+              if (geomType === "MultiLineString") multiFeatureIndex++;
+              if (geomType === "Polygon") geometryIndex++;
             }
-            if (geomType === "Polygon")
-              multiFeatureIndex++;
+            if (geomType === "Polygon") multiFeatureIndex++;
             break;
           case "MultiPolygon":
             for (j2 = 0; j2 < coords.length; j2++) {
     var _tileOrigin;
     var _zoom;
     var _source;
+    var _underzoom = 0;
+    var _epsilon = 0;
+    if (window.chrome) {
+      updateEpsilon();
+      window.addEventListener("resize", updateEpsilon);
+    }
+    function updateEpsilon() {
+      const pageZoom = Math.round(window.devicePixelRatio * 100);
+      if (pageZoom % 25 === 0) {
+        _epsilon = 0;
+      } else if (pageZoom === 90) {
+        _epsilon = 5e-3;
+      } else if (pageZoom === 110) {
+        _epsilon = 2e-3;
+      } else {
+        _epsilon = 3e-3;
+      }
+    }
     function tileSizeAtZoom(d2, z2) {
-      var EPSILON = 2e-3;
-      return _tileSize * Math.pow(2, z2 - d2[2]) / _tileSize + EPSILON;
+      return d2.tileSize * Math.pow(2, z2 - d2[2]) / d2.tileSize + _epsilon;
     }
     function atZoom(t2, distance) {
       var power = Math.pow(2, distance);
       return o2;
     }
     function addSource(d2) {
-      d2.push(_source.url(d2));
+      d2.url = _source.url(d2);
+      d2.tileSize = _tileSize;
       return d2;
     }
     function background(selection2) {
       if (!_source) return;
       var requests = [];
       var showDebug = context.getDebug("tile") && !_source.overlay;
-      if (_source.validZoom(_zoom)) {
+      if (_source.validZoom(_zoom, _underzoom)) {
         tiler8.skipNullIsland(!!_source.overlay);
         tiler8().forEach(function(d2) {
           addSource(d2);
-          if (d2[3] === "") return;
-          if (typeof d2[3] !== "string") return;
+          if (d2.url === "") return;
+          if (typeof d2.url !== "string") return;
           requests.push(d2);
-          if (_cache5[d2[3]] === false && lookUp(d2)) {
+          if (_cache5[d2.url] === false && lookUp(d2)) {
             requests.push(addSource(lookUp(d2)));
           }
         });
-        requests = uniqueBy(requests, 3).filter(function(r2) {
-          return _cache5[r2[3]] !== false;
+        requests = uniqueBy(requests, "url").filter(function(r2) {
+          return _cache5[r2.url] !== false;
         });
       }
       function load(d3_event, d2) {
-        _cache5[d2[3]] = true;
-        select_default2(this).on("error", null).on("load", null).classed("tile-loaded", true);
+        _cache5[d2.url] = true;
+        select_default2(this).on("error", null).on("load", null);
         render(selection2);
       }
       function error(d3_event, d2) {
-        _cache5[d2[3]] = false;
+        _cache5[d2.url] = false;
         select_default2(this).on("error", null).on("load", null).remove();
         render(selection2);
       }
       function imageTransform(d2) {
-        var ts = _tileSize * Math.pow(2, _zoom - d2[2]);
+        var ts = d2.tileSize * Math.pow(2, _zoom - d2[2]);
         var scale = tileSizeAtZoom(d2, _zoom);
-        return "translate(" + (d2[0] * ts - _tileOrigin[0]) + "px," + (d2[1] * ts - _tileOrigin[1]) + "px) scale(" + scale + "," + scale + ")";
+        return "translate(" + (d2[0] * ts * _tileSize / d2.tileSize - _tileOrigin[0]) + "px," + (d2[1] * ts * _tileSize / d2.tileSize - _tileOrigin[1]) + "px) scale(" + scale * _tileSize / d2.tileSize + "," + scale * _tileSize / d2.tileSize + ")";
       }
       function tileCenter(d2) {
-        var ts = _tileSize * Math.pow(2, _zoom - d2[2]);
+        var ts = d2.tileSize * Math.pow(2, _zoom - d2[2]);
         return [
           d2[0] * ts - _tileOrigin[0] + ts / 2,
           d2[1] * ts - _tileOrigin[1] + ts / 2
         }
       });
       var image = selection2.selectAll("img").data(requests, function(d2) {
-        return d2[3];
+        return d2.url;
       });
       image.exit().style(transformProp, imageTransform).classed("tile-removing", true).classed("tile-center", false).each(function() {
         var tile = select_default2(this);
           if (tile.classed("tile-removing")) {
             tile.remove();
           }
-        }, 300);
+        }, 250);
       });
       image.enter().append("img").attr("class", "tile").attr("alt", "").attr("draggable", "false").style("width", _tileSize + "px").style("height", _tileSize + "px").attr("src", function(d2) {
-        return d2[3];
+        return d2.url;
       }).on("error", error).on("load", load).merge(image).style(transformProp, imageTransform).classed("tile-debug", showDebug).classed("tile-removing", false).classed("tile-center", function(d2) {
         return d2 === nearCenter;
       });
       var debug2 = selection2.selectAll(".tile-label-debug").data(showDebug ? requests : [], function(d2) {
-        return d2[3];
+        return d2.url;
       });
       debug2.exit().remove();
       if (showDebug) {
       tiler8.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
       return background;
     };
+    background.underzoom = function(amount) {
+      if (!arguments.length) return _underzoom;
+      _underzoom = amount;
+      return background;
+    };
     return background;
   }
 
       const EPSILON = 0.01;
       const x2 = +meters[0].toFixed(2);
       const y2 = +meters[1].toFixed(2);
-      let hash = utilStringQs(window.location.hash);
+      let hash2 = utilStringQs(window.location.hash);
       let id2 = currSource.id;
       if (id2 === "custom") {
         id2 = "custom:".concat(currSource.template());
       }
       if (id2) {
-        hash.background = id2;
+        hash2.background = id2;
       } else {
-        delete hash.background;
+        delete hash2.background;
       }
       if (o2) {
-        hash.overlays = o2;
+        hash2.overlays = o2;
       } else {
-        delete hash.overlays;
+        delete hash2.overlays;
       }
       if (Math.abs(x2) > EPSILON || Math.abs(y2) > EPSILON) {
-        hash.offset = "".concat(x2, ",").concat(y2);
+        hash2.offset = "".concat(x2, ",").concat(y2);
       } else {
-        delete hash.offset;
+        delete hash2.offset;
       }
       if (!window.mocha) {
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
       let imageryUsed = [];
       let photoOverlaysUsed = [];
     };
     background.init = () => {
       const loadPromise = background.ensureLoaded();
-      const hash = utilStringQs(window.location.hash);
-      const requestedBackground = hash.background || hash.layer;
+      const hash2 = utilStringQs(window.location.hash);
+      const requestedBackground = hash2.background || hash2.layer;
       const lastUsedBackground = corePreferences("background-last-used");
       return loadPromise.then((imageryIndex) => {
         const extent = context.map().extent();
         if (locator) {
           background.toggleOverlayLayer(locator);
         }
-        const overlays = (hash.overlays || "").split(",");
+        const overlays = (hash2.overlays || "").split(",");
         overlays.forEach((overlay) => {
           overlay = background.findSource(overlay);
           if (overlay) {
             background.toggleOverlayLayer(overlay);
           }
         });
-        if (hash.gpx) {
+        if (hash2.gpx) {
           const gpx2 = context.layers().layer("data");
           if (gpx2) {
-            gpx2.url(hash.gpx, ".gpx");
+            gpx2.url(hash2.gpx, ".gpx");
           }
         }
-        if (hash.offset) {
-          const offset = hash.offset.replace(/;/g, ",").split(",").map((n3) => !isNaN(n3) && n3);
+        if (hash2.offset) {
+          const offset = hash2.offset.replace(/;/g, ",").split(",").map((n3) => !isNaN(n3) && n3);
           if (offset.length === 2) {
             background.offset(geoMetersToOffset(offset));
           }
     var _forceVisible = {};
     function update() {
       if (!window.mocha) {
-        var hash = utilStringQs(window.location.hash);
+        var hash2 = utilStringQs(window.location.hash);
         var disabled = features.disabled();
         if (disabled.length) {
-          hash.disable_features = disabled.join(",");
+          hash2.disable_features = disabled.join(",");
         } else {
-          delete hash.disable_features;
+          delete hash2.disable_features;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
         corePreferences("disabled-features", disabled.join(","));
       }
       _hidden = features.hidden();
       return _rules[k2] && !_rules[k2].enabled;
     };
     features.hidden = function(k2) {
-      var _a3;
+      var _a4;
       if (!arguments.length) {
         return _keys.filter(function(k3) {
           return _rules[k3].hidden();
         });
       }
-      return (_a3 = _rules[k2]) == null ? void 0 : _a3.hidden();
+      return (_a4 = _rules[k2]) == null ? void 0 : _a4.hidden();
     };
     features.autoHidden = function(k2) {
       if (!arguments.length) {
         var storageDisabled = storage.replace(/;/g, ",").split(",");
         storageDisabled.forEach(features.disable);
       }
-      var hash = utilStringQs(window.location.hash);
-      if (hash.disable_features) {
-        var hashDisabled = hash.disable_features.replace(/;/g, ",").split(",");
+      var hash2 = utilStringQs(window.location.hash);
+      if (hash2.disable_features) {
+        var hashDisabled = hash2.disable_features.replace(/;/g, ",").split(",");
         hashDisabled.forEach(features.disable);
       }
     };
       return true;
     }
     function redraw(difference2, extent) {
+      if (typeof window === "undefined") return;
       if (surface.empty() || !_redrawEnabled) return;
       if (resetTransform()) {
         difference2 = extent = void 0;
     }
     function updateStorage() {
       if (window.mocha) return;
-      var hash = utilStringQs(window.location.hash);
+      var hash2 = utilStringQs(window.location.hash);
       var enabled = context.layers().all().filter(function(d2) {
         return _layerIDs.indexOf(d2.id) !== -1 && d2.layer && d2.layer.supported() && d2.layer.enabled();
       }).map(function(d2) {
         return d2.id;
       });
       if (enabled.length) {
-        hash.photo_overlay = enabled.join(",");
+        hash2.photo_overlay = enabled.join(",");
       } else {
-        delete hash.photo_overlay;
+        delete hash2.photo_overlay;
       }
-      window.location.replace("#" + utilQsString(hash, true));
+      window.location.replace("#" + utilQsString(hash2, true));
     }
     photos.overlayLayerIDs = function() {
       return _layerIDs;
     };
     function setUrlFilterValue(property, val) {
       if (!window.mocha) {
-        var hash = utilStringQs(window.location.hash);
+        var hash2 = utilStringQs(window.location.hash);
         if (val) {
-          if (hash[property] === val) return;
-          hash[property] = val;
+          if (hash2[property] === val) return;
+          hash2[property] = val;
         } else {
-          if (!(property in hash)) return;
-          delete hash[property];
+          if (!(property in hash2)) return;
+          delete hash2[property];
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     }
     function showsLayer(id2) {
       return _usernames;
     };
     photos.init = function() {
-      var hash = utilStringQs(window.location.hash);
-      if (hash.photo_dates) {
-        var parts = /^(.*)[–_](.*)$/g.exec(hash.photo_dates.trim());
+      var hash2 = utilStringQs(window.location.hash);
+      if (hash2.photo_dates) {
+        var parts = /^(.*)[–_](.*)$/g.exec(hash2.photo_dates.trim());
         this.setDateFilter("fromDate", parts && parts.length >= 2 && parts[1], false);
         this.setDateFilter("toDate", parts && parts.length >= 3 && parts[2], false);
       }
-      if (hash.photo_username) {
-        this.setUsernameFilter(hash.photo_username, false);
+      if (hash2.photo_username) {
+        this.setUsernameFilter(hash2.photo_username, false);
       }
-      if (hash.photo_overlay) {
-        var hashOverlayIDs = hash.photo_overlay.replace(/;/g, ",").split(",");
+      if (hash2.photo_overlay) {
+        var hashOverlayIDs = hash2.photo_overlay.replace(/;/g, ",").split(",");
         hashOverlayIDs.forEach(function(id2) {
           if (id2 === "openstreetcam") id2 = "kartaview";
           var layer2 = _layerIDs.indexOf(id2) !== -1 && context.layers().layer(id2);
           if (layer2 && !layer2.enabled()) layer2.enabled(true);
         });
       }
-      if (hash.photo) {
-        var photoIds = hash.photo.replace(/;/g, ",").split(",");
+      if (hash2.photo) {
+        var photoIds = hash2.photo.replace(/;/g, ",").split(",");
         var photoId = photoIds.length && photoIds[0].trim();
         var results = /(.*)\/(.*)/g.exec(photoId);
         if (results && results.length >= 3) {
   // modules/ui/map_in_map.js
   function uiMapInMap(context) {
     function mapInMap(selection2) {
-      var backgroundLayer = rendererTileLayer(context);
+      var backgroundLayer = rendererTileLayer(context).underzoom(2);
       var overlayLayers = {};
       var projection2 = geoRawMercator();
       var dataLayer = svgData(projection2, context).showLabels(false);
       });
       function setPhotoFromViewerButton() {
         if (services.mapillary.isViewerOpen()) {
-          let setMapillaryPhotoId = function() {
+          let setMapillaryPhotoId2 = function() {
             const service = services.mapillary;
             const image = service.getActiveImage();
             const action = (graph) => context.selectedIDs().reduce((graph2, entityID) => {
               const tags = graph2.entity(entityID).tags;
-              const action2 = actionChangeTags(entityID, { ...tags, mapillary: image.id });
+              const action2 = actionChangeTags(entityID, __spreadProps(__spreadValues({}, tags), { mapillary: image.id }));
               return action2(graph2);
             }, graph);
             const annotation = _t("operations.change_tags.annotation");
             context.perform(action, annotation);
           };
+          var setMapillaryPhotoId = setMapillaryPhotoId2;
           if (context.mode().id !== "select" || !(layerStatus("mapillary") && getServiceId() === "mapillary")) {
             buttonRemove();
           } else {
               button.on("click", function(e3) {
                 e3.preventDefault();
                 e3.stopPropagation();
-                setMapillaryPhotoId();
+                setMapillaryPhotoId2();
                 buttonDisable("already_set");
               });
             }
           return layer.enabled();
         }
         function getServiceId() {
-          const hash = utilStringQs(window.location.hash);
+          const hash2 = utilStringQs(window.location.hash);
           let serviceId;
-          if (hash.photo) {
-            let result = hash.photo.split("/");
+          if (hash2.photo) {
+            let result = hash2.photo.split("/");
             serviceId = result[0];
           }
           return serviceId;
         function buttonCreate() {
           const button = selection2.selectAll(".set-photo-from-viewer").data([0]);
           const buttonEnter = button.enter().append("button").attr("class", "set-photo-from-viewer").call(svgIcon("#iD-icon-plus")).call(
-            uiTooltip().title(() => _t.append("inspector.set_photo_from_viewer")).placement("right")
+            uiTooltip().title(() => _t.append("inspector.set_photo_from_viewer.enable")).placement("right")
           );
           buttonEnter.select(".tooltip").classed("dark", true).style("width", "300px");
           return buttonEnter;
           const entities = context.selectedIDs().map((id2) => graph.entity(id2));
           if (entities.map((entity) => entity.tags.mapillary).every((value) => value === (activeImage == null ? void 0 : activeImage.id))) {
             buttonDisable("already_set");
-          } else if (activeImage && entities.map((entity) => entity.extent().center()).every((loc) => geoSphericalDistance(loc, activeImage.loc) > 100)) {
+          } else if (activeImage && entities.map((entity) => entity.extent(context.graph()).center()).every((loc) => geoSphericalDistance(loc, activeImage.loc) > 100)) {
             buttonDisable("too_far");
           } else {
             buttonDisable(false);
           d3_event.stopPropagation();
           var mapSize = context.map().dimensions();
           if (resizeOnX) {
-            var maxWidth = mapSize[0];
-            var newWidth = clamp3(startWidth + d3_event.clientX - startX, minWidth, maxWidth);
+            var mapWidth = mapSize[0];
+            const viewerMargin = parseInt(select_default2(".photoviewer").style("margin-left"), 10);
+            var newWidth = clamp3(startWidth + d3_event.clientX - startX, minWidth, mapWidth - viewerMargin * 2);
             target.style("width", newWidth + "px");
           }
           if (resizeOnY) {
-            var maxHeight = mapSize[1] - 90;
+            const menuHeight = utilGetDimensions(select_default2(".top-toolbar"))[1] + utilGetDimensions(select_default2(".map-footer"))[1];
+            const viewerMargin = parseInt(select_default2(".photoviewer").style("margin-bottom"), 10);
+            var maxHeight = mapSize[1] - menuHeight - viewerMargin * 2;
             var newHeight = clamp3(startHeight + startY - d3_event.clientY, minHeight, maxHeight);
             target.style("height", newHeight + "px");
           }
       var photoviewer2 = context.container().select(".photoviewer");
       var content = context.container().select(".main-content");
       var mapDimensions = utilGetDimensions(content, true);
+      const menuHeight = utilGetDimensions(select_default2(".top-toolbar"))[1] + utilGetDimensions(select_default2(".map-footer"))[1];
+      const viewerMargin = parseInt(select_default2(".photoviewer").style("margin-bottom"), 10);
       var photoDimensions = utilGetDimensions(photoviewer2, true);
-      if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > mapDimensions[1] - 90) {
+      if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > mapDimensions[1] - menuHeight - viewerMargin * 2) {
         var setPhotoDimensions = [
           Math.min(photoDimensions[0], mapDimensions[0]),
-          Math.min(photoDimensions[1], mapDimensions[1] - 90)
+          Math.min(photoDimensions[1], mapDimensions[1] - menuHeight - viewerMargin * 2)
         ];
         photoviewer2.style("width", setPhotoDimensions[0] + "px").style("height", setPhotoDimensions[1] + "px");
         dispatch14.call("resize", photoviewer2, subtractPadding(setPhotoDimensions, photoviewer2));
       if (isQuoted) {
         try {
           return JSON.parse(s2);
-        } catch {
+        } catch (e3) {
           return s2;
         }
       } else {
         }
       });
       var tagDiff = utilTagDiff(_tags, newTags);
-      if (!tagDiff.length) return;
       _pendingChange = _pendingChange || {};
       tagDiff.forEach(function(change) {
         if (isReadOnly({ key: change.key })) return;
       });
       if (Object.keys(_pendingChange).length === 0) {
         _pendingChange = null;
+        section.reRender();
         return;
       }
       scheduleChange();
       }).caseSensitive(allowUpperCaseTagValues.test(utilGetSetValue(key))));
       function sort(value2, data) {
         var sameletter = [];
-        var other = [];
+        var other2 = [];
         for (var i3 = 0; i3 < data.length; i3++) {
           if (data[i3].value.substring(0, value2.length) === value2) {
             sameletter.push(data[i3]);
           } else {
-            other.push(data[i3]);
+            other2.push(data[i3]);
           }
         }
-        return sameletter.concat(other);
+        return sameletter.concat(other2);
       }
     }
     function unbind() {
         if (locationMatch) {
           var loc = [Number(locationMatch[0]), Number(locationMatch[1])];
           result.push({
-            id: -1,
+            id: loc[0] + "/" + loc[1],
             geometry: "point",
             type: _t("inspector.location"),
             name: dmsCoordinatePair([loc[1], loc[0]]),
         }
         list2.selectAll(".no-results-item").style("display", value.length && !results.length ? "block" : "none");
         list2.selectAll(".geocode-item").style("display", value && _geocodeResults === void 0 ? "block" : "none");
-        list2.selectAll(".feature-list-item").data([-1]).remove();
         var items = list2.selectAll(".feature-list-item").data(results, function(d2) {
           return d2.id;
         });
-        var enter = items.enter().insert("button", ".geocode-item").attr("class", "feature-list-item").on("mouseover", mouseover).on("mouseout", mouseout).on("click", click);
+        var enter = items.enter().insert("button", ".geocode-item").attr("class", "feature-list-item").on("pointerenter", mouseover).on("pointerleave", mouseout).on("focus", mouseover).on("blur", mouseout).on("click", click);
         var label = enter.append("div").attr("class", "label");
         label.each(function(d2) {
           select_default2(this).call(svgIcon("#iD-icon-" + d2.geometry, "pre-text"));
           return d2.name;
         });
         enter.style("opacity", 0).transition().style("opacity", 1);
-        items.order();
-        items.exit().remove();
+        items.exit().each((d2) => mouseout(void 0, d2)).remove();
+        items.merge(enter).order();
       }
       function mouseover(d3_event, d2) {
-        if (d2.id === -1) return;
+        if (d2.location !== void 0) return;
         utilHighlightEntities([d2.id], true, context);
       }
       function mouseout(d3_event, d2) {
-        if (d2.id === -1) return;
+        if (d2.location !== void 0) return;
         utilHighlightEntities([d2.id], false, context);
       }
       function click(d3_event, d2) {
         var origValue = role.property("value");
         function sort(value, data) {
           var sameletter = [];
-          var other = [];
+          var other2 = [];
           for (var i3 = 0; i3 < data.length; i3++) {
             if (data[i3].value.substring(0, value.length) === value) {
               sameletter.push(data[i3]);
             } else {
-              other.push(data[i3]);
+              other2.push(data[i3]);
             }
           }
-          return sameletter.concat(other);
+          return sameletter.concat(other2);
         }
         role.call(
           uiCombobox(context, "member-role").fetcher(function(role2, callback) {
       _inChange = false;
     }
     function addMembership(d2, role) {
-      this.blur();
       _showBlank = false;
       function actionAddMembers(relationId, ids, role2) {
         return function(graph) {
         var matched = _mainPresetIndex.match(d2.relation, context.graph());
         return matched && matched.name() || _t.html("inspector.relation");
       });
-      labelLink.append("span").attr("class", "member-entity-name").classed("has-colour", (d2) => d2.relation.tags.colour && isColourValid(d2.relation.tags.colour)).style("border-color", (d2) => d2.relation.tags.colour).text(function(d2) {
-        return utilDisplayName(d2.relation);
+      labelLink.append("span").attr("class", "member-entity-name").classed("has-colour", (d2) => d2.relation.tags.colour && isColourValid(d2.relation.tags.colour)).style("border-color", (d2) => d2.relation.tags.colour).html(function(d2) {
+        const matched = _mainPresetIndex.match(d2.relation, context.graph());
+        return utilDisplayName(d2.relation, matched.suggestion);
       });
       labelEnter.append("button").attr("class", "members-download").attr("title", _t("icons.download")).call(svgIcon("#iD-icon-load")).on("click", downloadMembers);
       labelEnter.append("button").attr("class", "remove member-delete").attr("title", _t("icons.remove")).call(svgIcon("#iD-operation-delete")).on("click", deleteMembership);
       newWrapEnter.append("input").attr("class", "member-role").property("type", "text").attr("placeholder", _t("inspector.role")).call(utilNoAuto);
       newMembership = newMembership.merge(newMembershipEnter);
       newMembership.selectAll(".member-entity-input").on("blur", cancelEntity).call(
-        nearbyCombo.on("accept", acceptEntity).on("cancel", cancelEntity)
+        nearbyCombo.on("accept", function(d2) {
+          this.blur();
+          acceptEntity.call(this, d2);
+        }).on("cancel", cancelEntity)
       );
       var addRow = selection2.selectAll(".add-row").data([0]);
       var addRowEnter = addRow.enter().append("div").attr("class", "add-row");
         var origValue = role.property("value");
         function sort(value, data) {
           var sameletter = [];
-          var other = [];
+          var other2 = [];
           for (var i3 = 0; i3 < data.length; i3++) {
             if (data[i3].value.substring(0, value.length) === value) {
               sameletter.push(data[i3]);
             } else {
-              other.push(data[i3]);
+              other2.push(data[i3]);
             }
           }
-          return sameletter.concat(other);
+          return sameletter.concat(other2);
         }
         role.call(
           uiCombobox(context, "member-role").fetcher(function(role2, callback) {
       context.layers().on("change", () => updatePhotoList(photoList.select("ul")));
     }
     function updatePhotoList(container) {
-      var _a3;
+      var _a4;
       function locationUnavailable(d2) {
         return !(isArray_default(d2.loc) && isNumber_default(d2.loc[0]) && isNumber_default(d2.loc[1]));
       }
       container.selectAll("li.placeholder").remove();
-      let selection2 = container.selectAll("li").data((_a3 = photoLayer.getPhotos()) != null ? _a3 : [], (d2) => d2.id);
+      let selection2 = container.selectAll("li").data((_a4 = photoLayer.getPhotos()) != null ? _a4 : [], (d2) => d2.id);
       selection2.exit().remove();
       const selectionEnter = selection2.enter().append("li");
       selectionEnter.append("span").classed("filename", true);
         return layerSupported(d2) && d2.layer.enabled();
       }
       function layerRendered(d2) {
-        var _a3, _b3, _c;
-        return (_c = (_b3 = (_a3 = d2.layer).rendered) == null ? void 0 : _b3.call(_a3, context.map().zoom())) != null ? _c : true;
+        var _a4, _b3, _c2;
+        return (_c2 = (_b3 = (_a4 = d2.layer).rendered) == null ? void 0 : _b3.call(_a4, context.map().zoom())) != null ? _c2 : true;
       }
       var ul = selection2.selectAll(".layer-list-photos").data([0]);
       ul = ul.enter().append("ul").attr("class", "layer-list layer-list-photos").merge(ul);
     var _initCounter = 0;
     var _needWidth = {};
     var _lastPointerType;
+    var overMap;
     function render(container) {
       container.on("click.ui", function(d3_event) {
         if (d3_event.button !== 0) return;
       var content = container.append("div").attr("class", "main-content active");
       content.append("div").attr("class", "top-toolbar-wrap").append("div").attr("class", "top-toolbar fillD").call(uiTopToolbar(context));
       content.append("div").attr("class", "main-map").attr("dir", "ltr").call(map2);
-      var overMap = content.append("div").attr("class", "over-map");
+      overMap = content.append("div").attr("class", "over-map");
       overMap.append("div").attr("class", "select-trap").text("t");
       overMap.call(uiMapInMap(context)).call(uiNotice(context));
       overMap.append("div").attr("class", "spinner").call(uiSpinner(context));
         ui.onResize();
       });
       var panPixels = 80;
-      context.keybinding().on("\u232B", function(d3_event) {
-        d3_event.preventDefault();
-      }).on([_t("sidebar.key"), "`", "\xB2", "@"], ui.sidebar.toggle).on("\u2190", pan([panPixels, 0])).on("\u2191", pan([0, panPixels])).on("\u2192", pan([-panPixels, 0])).on("\u2193", pan([0, -panPixels])).on(uiCmd("\u2325\u2190"), pan([map2.dimensions()[0], 0])).on(uiCmd("\u2325\u2191"), pan([0, map2.dimensions()[1]])).on(uiCmd("\u2325\u2192"), pan([-map2.dimensions()[0], 0])).on(uiCmd("\u2325\u2193"), pan([0, -map2.dimensions()[1]])).on(uiCmd("\u2318" + _t("background.key")), function quickSwitch(d3_event) {
+      context.keybinding().on([_t("sidebar.key"), "`", "\xB2", "@"], ui.sidebar.toggle).on("\u2190", pan([panPixels, 0])).on("\u2191", pan([0, panPixels])).on("\u2192", pan([-panPixels, 0])).on("\u2193", pan([0, -panPixels])).on(uiCmd("\u2325\u2190"), pan([map2.dimensions()[0], 0])).on(uiCmd("\u2325\u2191"), pan([0, map2.dimensions()[1]])).on(uiCmd("\u2325\u2192"), pan([-map2.dimensions()[0], 0])).on(uiCmd("\u2325\u2193"), pan([0, -map2.dimensions()[1]])).on(uiCmd("\u2318" + _t("background.key")), function quickSwitch(d3_event) {
         if (d3_event) {
           d3_event.stopImmediatePropagation();
           d3_event.preventDefault();
         if (operation2.point) operation2.point(anchorPoint);
       });
       _editMenu.anchorLoc(anchorPoint).triggerType(triggerType).operations(operations);
-      context.map().supersurface.call(_editMenu);
+      overMap.call(_editMenu);
     };
     ui.closeEditMenu = function() {
-      context.map().supersurface.select(".edit-menu").remove();
+      if (overMap !== void 0) {
+        overMap.select(".edit-menu").remove();
+      }
     };
     var _saveLoading = select_default2(null);
     context.uploader().on("saveStarted.ui", function() {
       if (format2) input.attr("placeholder", format2);
     }
     function validIdentifierValueForLink() {
-      var _a3;
+      var _a4;
       const value = utilGetSetValue(input).trim();
       if (field.type === "url" && value) {
         try {
           return new URL(value).href;
-        } catch {
+        } catch (e3) {
           return null;
         }
       }
       if (field.type === "identifier" && field.pattern) {
-        return value && ((_a3 = value.match(new RegExp(field.pattern))) == null ? void 0 : _a3[0]);
+        return value && ((_a4 = value.match(new RegExp(field.pattern))) == null ? void 0 : _a4[0]);
       }
       return null;
     }
       return i3;
     };
     i3.tags = function(tags) {
-      var _a3;
+      var _a4;
       _tags = tags;
       const vals = getVals(tags);
       const isMixed = vals.size > 1;
-      var val = vals.size === 1 ? (_a3 = [...vals][0]) != null ? _a3 : "" : "";
+      var val = vals.size === 1 ? (_a4 = [...vals][0]) != null ? _a4 : "" : "";
       var shouldUpdate;
       if (field.type === "number" && val) {
         var numbers2 = val.split(";");
           buttons.attr("disabled", "disabled").classed("disabled", true);
         } else {
           var raw_vals = tags[field.key] || "0";
-          const canIncDec = raw_vals.split(";").some((val2) => isFinite(Number(val2)) || isDirectionField && cardinal[val2.trim().toLowerCase()]);
+          const canIncDec = raw_vals.split(";").some(
+            (val2) => isFinite(Number(val2)) || isDirectionField && val2.trim().toLowerCase() in cardinal
+          );
           buttons.attr("disabled", canIncDec ? null : "disabled").classed("disabled", !canIncDec);
         }
       }
     var _tags;
     var _combos = {};
     if (field.type === "cycleway") {
-      field = {
-        ...field,
+      field = __spreadProps(__spreadValues({}, field), {
         key: field.keys[0],
         keys: field.keys.slice(1)
-      };
+      });
     }
     function directionalCombo(selection2) {
       function stripcolon(s2) {
         return field.t.html("types." + d2);
       });
       enter.append("div").attr("class", "preset-input-directionalcombo-wrap form-field-input-wrap").each(function(key) {
-        const subField = {
-          ...field,
+        const subField = __spreadProps(__spreadValues({}, field), {
           type: "combo",
           key
-        };
+        });
         const combo = uiFieldCombo(subField, context);
         combo.on("change", (t2) => change(key, t2[key]));
         _combos[key] = combo;
     }
     function change(key, newValue) {
       const commonKey = field.key;
+      const otherCommonKey = field.key.endsWith(":both") ? field.key.replace(/:both$/, "") : "".concat(field.key, ":both");
       const otherKey = key === field.keys[0] ? field.keys[1] : field.keys[0];
       dispatch14.call("change", this, (tags) => {
-        const otherValue = tags[otherKey] || tags[commonKey];
+        const otherValue = tags[otherKey] || tags[commonKey] || tags[otherCommonKey];
         if (newValue === otherValue) {
           tags[commonKey] = newValue;
           delete tags[key];
           delete tags[otherKey];
+          delete tags[otherCommonKey];
         } else {
           tags[key] = newValue;
           delete tags[commonKey];
+          delete tags[otherCommonKey];
           tags[otherKey] = otherValue;
         }
         return tags;
     }
     directionalCombo.tags = function(tags) {
       _tags = tags;
-      const commonKey = field.key;
+      const commonKey = field.key.replace(/:both$/, "");
       for (let key in _combos) {
-        const uniqueValues = [...new Set([].concat(_tags[commonKey]).concat(_tags[key]).filter(Boolean))];
+        const uniqueValues = [...new Set([].concat(_tags[commonKey]).concat(_tags["".concat(commonKey, ":both")]).concat(_tags[key]).filter(Boolean))];
         _combos[key].tags({ [key]: uniqueValues.length > 1 ? uniqueValues : uniqueValues[0] });
       }
     };
         return Array.isArray(d2.value) ? d2.value.filter(Boolean).join("\n") : null;
       }).attr("placeholder", function(d2) {
         return Array.isArray(d2.value) ? _t("inspector.multiple_values") : _t("translate.localized_translation_name");
+      }).attr("lang", function(d2) {
+        return d2.lang;
       }).classed("mixed", function(d2) {
         return Array.isArray(d2.value);
       });
       });
     }
     function setLabelForEntity() {
-      var label = "";
+      var label = {
+        value: ""
+      };
       if (_wikidataEntity) {
         label = entityPropertyForDisplay(_wikidataEntity, "labels");
-        if (label.length === 0) {
-          label = _wikidataEntity.id.toString();
+        if (label.value.length === 0) {
+          label.value = _wikidataEntity.id.toString();
         }
       }
-      utilGetSetValue(_searchInput, label);
+      utilGetSetValue(_searchInput, label.value).attr("lang", label.language);
     }
     wiki.tags = function(tags) {
       var isMixed = Array.isArray(tags[field.key]);
         var description = entityPropertyForDisplay(entity, "descriptions");
         _selection.select("button.wiki-link").classed("disabled", false);
         _selection.select(".preset-wikidata-description").style("display", function() {
-          return description.length > 0 ? "flex" : "none";
-        }).select("input").attr("value", description);
+          return description.value.length > 0 ? "flex" : "none";
+        }).select("input").attr("value", description.value).attr("lang", description.language);
         _selection.select(".preset-wikidata-identifier").style("display", function() {
           return entity.id ? "flex" : "none";
         }).select("input").attr("value", entity.id);
       }
     };
     function entityPropertyForDisplay(wikidataEntity, propKey) {
-      if (!wikidataEntity[propKey]) return "";
+      var blankResponse = { value: "" };
+      if (!wikidataEntity[propKey]) return blankResponse;
       var propObj = wikidataEntity[propKey];
       var langKeys = Object.keys(propObj);
-      if (langKeys.length === 0) return "";
+      if (langKeys.length === 0) return blankResponse;
       var langs = wikidata.languagesToQuery();
       for (var i3 in langs) {
         var lang = langs[i3];
         var valueObj = propObj[lang];
-        if (valueObj && valueObj.value && valueObj.value.length > 0) return valueObj.value;
+        if (valueObj && valueObj.value && valueObj.value.length > 0) return valueObj;
       }
-      return propObj[langKeys[0]].value;
+      return propObj[langKeys[0]];
     }
     wiki.entityIDs = function(val) {
       if (!arguments.length) return _entityIDs;
           value += "#" + anchor.replace(/_/g, " ");
         }
         value = value.slice(0, 1).toUpperCase() + value.slice(1);
-        utilGetSetValue(_langInput, nativeLangName);
+        utilGetSetValue(_langInput, nativeLangName).attr("lang", langInfo[2]);
         utilGetSetValue(_titleInput, value);
       }
       if (value) {
       if (tagLangInfo) {
         const nativeLangName = tagLangInfo[1];
         utilGetSetValue(_langInput, nativeLangName);
+        _titleInput.attr("lang", tagLangInfo[2]);
         utilGetSetValue(_titleInput, tagArticleTitle + (anchor ? "#" + anchor : ""));
         _wikiURL = "".concat(scheme).concat(tagLang, ".").concat(domain, "/wiki/").concat(wiki.encodePath(tagArticleTitle, anchor));
       } else {
     function allKeys() {
       let keys2 = field.keys || [field.key];
       if (field.type === "directionalCombo" && field.key) {
-        keys2 = keys2.concat(field.key);
+        const baseKey = field.key.replace(/:both$/, "");
+        keys2 = keys2.concat(baseKey, "".concat(baseKey, ":both"));
       }
       return keys2;
     }
   function simplify2(str) {
     if (typeof str !== "string") return "";
     return import_diacritics3.default.remove(
-      str.replace(/&/g, "and").replace(/İ/ig, "i").replace(/[\s\-=_!"#%'*{},.\/:;?\(\)\[\]@\\$\^*+<>«»~`’\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2000-\u206f\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e7f\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\ufeff\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g, "").toLowerCase()
+      str.replace(/&/g, "and").replace(/(İ|i̇)/ig, "i").replace(/[\s\-=_!"#%'*{},.\/:;?\(\)\[\]@\\$\^*+<>«»~`’\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2000-\u206f\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e7f\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\ufeff\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g, "").toLowerCase()
     );
   }
 
         "amenity/gambling",
         "leisure/adult_gaming_centre"
       ],
+      bar: [
+        "amenity/bar",
+        "amenity/pub",
+        "amenity/restaurant"
+      ],
       beauty: [
         "shop/beauty",
         "shop/hairdresser_supply"
       ],
       electronics: [
         "office/telecommunication",
+        "shop/appliance",
         "shop/computer",
         "shop/electronics",
         "shop/hifi",
         "shop/kiosk",
         "shop/mobile",
         "shop/mobile_phone",
-        "shop/telecommunication"
+        "shop/telecommunication",
+        "shop/video_games"
+      ],
+      estate_agents: [
+        "office/estate_agent",
+        "shop/estate_agent",
+        "office/mortgage",
+        "office/financial"
       ],
       fabric: [
         "shop/fabric",
         "leisure/sports_center"
       ],
       food: [
-        "amenity/bar",
         "amenity/cafe",
         "amenity/fast_food",
         "amenity/ice_cream",
-        "amenity/pub",
         "amenity/restaurant",
         "shop/bakery",
         "shop/candy",
         "shop/coffee",
         "shop/confectionary",
         "shop/confectionery",
+        "shop/deli",
         "shop/food",
         "shop/kiosk",
         "shop/ice_cream",
         "shop/kiosk",
         "shop/stationery"
       ],
+      glass: [
+        "craft/window_construction",
+        "craft/glaziery",
+        "shop/car_repair"
+      ],
       hardware: [
         "shop/bathroom_furnishing",
         "shop/carpet",
         "shop/houseware",
         "shop/interior_decoration"
       ],
-      lifeboat_station: [
+      water_rescue: [
         "amenity/lifeboat_station",
         "emergency/lifeboat_station",
-        "emergency/marine_rescue"
+        "emergency/marine_rescue",
+        "emergency/water_rescue"
+      ],
+      locksmith: [
+        "craft/key_cutter",
+        "craft/locksmith",
+        "shop/locksmith"
       ],
       lodging: [
+        "tourism/guest_house",
         "tourism/hotel",
         "tourism/motel"
       ],
         "amenity/money_transfer",
         "shop/money_transfer"
       ],
+      music: ["shop/music", "shop/musical_instrument"],
       office_supplies: [
         "shop/office_supplies",
         "shop/stationary",
       pharmacy: [
         "amenity/doctors",
         "amenity/pharmacy",
-        "healthcare/pharmacy"
+        "healthcare/pharmacy",
+        "shop/chemist"
       ],
       playground: [
         "amenity/theme_park",
         "amenity/truck_rental",
         "amenity/vehicle_rental",
         "shop/kiosk",
-        "shop/rental"
+        "shop/plant_hire",
+        "shop/rental",
+        "shop/tool_hire"
       ],
       school: [
         "amenity/childcare",
         "shop/supermarket",
         "shop/wholesale"
       ],
+      thrift: [
+        "shop/charity",
+        "shop/clothes",
+        "shop/second_hand"
+      ],
+      tobacco: [
+        "shop/e-cigarette",
+        "shop/tobacco"
+      ],
       variety_store: [
         "shop/variety_store",
         "shop/discount",
       "^(club|green|out|ware)\\s?house$",
       "^(driveway|el \xE1rbol|fountain|generic|golf|government|graveyard)$",
       "^(fixme|n\\s?\\/?\\s?a|name|no\\s?name|none|null|temporary|test|unknown)$",
-      "^(hofladen|librairie|magazine?|maison)$",
+      "^(hofladen|librairie|magazine?|maison|toko)$",
       "^(mobile home|skate)?\\s?park$",
       "^(obuwie|pond|pool|sale|shops?|sklep|stores?)$",
       "^\\?+$",
         items.forEach((item) => {
           if (!item.id) return;
           if (Array.isArray(item.matchTags) && item.matchTags.length) {
-            item.matchTags = item.matchTags.filter((matchTag) => !matchGroupKV.has(matchTag) && !genericKV.has(matchTag));
+            item.matchTags = item.matchTags.filter((matchTag) => !matchGroupKV.has(matchTag) && matchTag !== thiskv && !genericKV.has(matchTag));
             if (!item.matchTags.length) delete item.matchTags;
           }
           let kvTags = ["".concat(thiskv)].concat(item.matchTags || []);
       Object.values(vals[0].presets).forEach((preset) => preset.suggestion = true);
       Object.values(vals[0].presets).forEach((preset) => {
         if (preset.tags["brand:wikidata"]) {
-          preset.removeTags = { "brand:wikipedia": "*", ...preset.removeTags || preset.addTags || preset.tags };
+          preset.removeTags = __spreadValues({ "brand:wikipedia": "*" }, preset.removeTags || preset.addTags || preset.tags);
         }
         if (preset.tags["operator:wikidata"]) {
-          preset.removeTags = { "operator:wikipedia": "*", ...preset.removeTags || preset.addTags || preset.tags };
+          preset.removeTags = __spreadValues({ "operator:wikipedia": "*" }, preset.removeTags || preset.addTags || preset.tags);
         }
         if (preset.tags["network:wikidata"]) {
-          preset.removeTags = { "network:wikipedia": "*", ...preset.removeTags || preset.addTags || preset.tags };
+          preset.removeTags = __spreadValues({ "network:wikipedia": "*" }, preset.removeTags || preset.addTags || preset.tags);
         }
       });
       _mainPresetIndex.merge({
       const category = _nsi.data[tkv];
       const properties = category.properties || {};
       let preserveTags = item.preserveTags || properties.preserveTags || [];
-      ["building", "emergency", "internet_access", "takeaway"].forEach((osmkey) => {
+      ["building", "emergency", "internet_access", "opening_hours", "takeaway"].forEach((osmkey) => {
         if (k2 !== osmkey) preserveTags.push("^".concat(osmkey, "$"));
       });
       const regexes = preserveTags.map((s2) => new RegExp(s2, "i"));
         context.container().selectAll(".viewfield-group").classed("highlighted", false).classed("hovered", false).classed("currentView", false);
         context.container().selectAll(".sequence").classed("highlighted", false).classed("currentView", false);
       }
-      var hoveredImageKey = hovered && hovered.key;
-      var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
-      var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
-      var hoveredImageKeys = hoveredSequence && hoveredSequence.images.map(function(d2) {
-        return d2.key;
-      }) || [];
+      var hoveredImageId = hovered && hovered.key;
+      var hoveredSequenceId = this.getSequenceKeyForImage(hovered);
       var viewer = context.container().select(".photoviewer");
       var selected = viewer.empty() ? void 0 : viewer.datum();
-      var selectedImageKey = selected && selected.key;
-      var selectedSequenceKey = this.getSequenceKeyForImage(selected);
-      var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
-      var selectedImageKeys = selectedSequence && selectedSequence.images.map(function(d2) {
-        return d2.key;
-      }) || [];
-      var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
+      var selectedImageId = selected && selected.key;
+      var selectedSequenceId = this.getSequenceKeyForImage(selected);
       context.container().selectAll(".layer-kartaview .viewfield-group").classed("highlighted", function(d2) {
-        return highlightedImageKeys.indexOf(d2.key) !== -1;
+        return d2.sequence_id === selectedSequenceId || d2.id === hoveredImageId;
       }).classed("hovered", function(d2) {
-        return d2.key === hoveredImageKey;
+        return d2.key === hoveredImageId;
       }).classed("currentView", function(d2) {
-        return d2.key === selectedImageKey;
+        return d2.key === selectedImageId;
       });
       context.container().selectAll(".layer-kartaview .sequence").classed("highlighted", function(d2) {
-        return d2.properties.key === hoveredSequenceKey;
+        return d2.properties.key === hoveredSequenceId;
       }).classed("currentView", function(d2) {
-        return d2.properties.key === selectedSequenceKey;
+        return d2.properties.key === selectedSequenceId;
       });
       context.container().selectAll(".layer-kartaview .viewfield-group .viewfield").attr("d", viewfieldPath);
       function viewfieldPath() {
         var d2 = this.parentNode.__data__;
-        if (d2.pano && d2.key !== selectedImageKey) {
+        if (d2.pano && d2.key !== selectedImageId) {
           return "M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0";
         } else {
           return "M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z";
     },
     updateUrlImage: function(imageKey) {
       if (!window.mocha) {
-        var hash = utilStringQs(window.location.hash);
+        var hash2 = utilStringQs(window.location.hash);
         if (imageKey) {
-          hash.photo = "kartaview/" + imageKey;
+          hash2.photo = "kartaview/" + imageKey;
         } else {
-          delete hash.photo;
+          delete hash2.photo;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     },
     cache: function() {
   var _loadViewerPromise3;
   var _vegbilderCache;
   async function fetchAvailableLayers() {
-    var _a3, _b3, _c;
+    var _a4, _b3, _c2;
     const params = {
       service: "WFS",
       request: "GetCapabilities",
     };
     const urlForRequest = owsEndpoint + utilQsString(params);
     const response = await xml_default(urlForRequest);
-    const xPathSelector = "/wfs:WFS_Capabilities/wfs:FeatureTypeList/wfs:FeatureType/wfs:Name";
-    const regexMatcher = /^vegbilder_1_0:Vegbilder(?<image_type>_360)?_(?<year>\d{4})$/;
-    const NSResolver = response.createNSResolver(response);
-    const l2 = response.evaluate(
-      xPathSelector,
-      response,
-      NSResolver,
-      XPathResult.ANY_TYPE
-    );
-    let node;
+    const regexMatcher = new RegExp("^vegbilder_1_0:Vegbilder(?<image_type>_360)?_(?<year>\\d{4})$");
     const availableLayers = [];
-    while ((node = l2.iterateNext()) !== null) {
-      const match = (_a3 = node.textContent) == null ? void 0 : _a3.match(regexMatcher);
+    for (const node of response.querySelectorAll("FeatureType > Name")) {
+      const match = (_a4 = node.textContent) == null ? void 0 : _a4.match(regexMatcher);
       if (match) {
         availableLayers.push({
           name: match[0],
           is_sphere: !!((_b3 = match.groups) == null ? void 0 : _b3.image_type),
-          year: parseInt((_c = match.groups) == null ? void 0 : _c.year, 10)
+          year: parseInt((_c2 = match.groups) == null ? void 0 : _c2.year, 10)
         });
       }
     }
     let featureCollection;
     try {
       featureCollection = await json_default(urlForRequest, options2);
-    } catch {
+    } catch (e3) {
       cache.loaded.set(tileid, false);
       return;
     } finally {
     // Reset is only necessary when interacting with the viewport because
     // this implicitly changes the currently selected bubble/sequence
     setStyles: function(context, hovered, reset) {
-      var _a3, _b3;
+      var _a4, _b3;
       if (reset) {
         context.container().selectAll(".viewfield-group").classed("highlighted", false).classed("hovered", false).classed("currentView", false);
         context.container().selectAll(".sequence").classed("highlighted", false).classed("currentView", false);
       const hoveredImageKey = hovered == null ? void 0 : hovered.key;
       const hoveredSequence = this.getSequenceForImage(hovered);
       const hoveredSequenceKey = hoveredSequence == null ? void 0 : hoveredSequence.key;
-      const hoveredImageKeys = (_a3 = hoveredSequence == null ? void 0 : hoveredSequence.images.map((d2) => d2.key)) != null ? _a3 : [];
+      const hoveredImageKeys = (_a4 = hoveredSequence == null ? void 0 : hoveredSequence.images.map((d2) => d2.key)) != null ? _a4 : [];
       const viewer = context.container().select(".photoviewer");
       const selected = viewer.empty() ? void 0 : viewer.datum();
       const selectedImageKey = selected == null ? void 0 : selected.key;
     },
     updateUrlImage: function(key) {
       if (!window.mocha) {
-        const hash = utilStringQs(window.location.hash);
+        const hash2 = utilStringQs(window.location.hash);
         if (key) {
-          hash.photo = "vegbilder/" + key;
+          hash2.photo = "vegbilder/" + key;
         } else {
-          delete hash.photo;
+          delete hash2.photo;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     },
     validHere: function(extent) {
       token("oauth_request_token_secret", "");
       return oauth2;
     };
-    oauth2.authenticate = function(callback) {
+    oauth2.authenticate = function(callback, options2) {
       if (oauth2.authenticated()) {
         callback(null, oauth2);
         return;
           callback(error);
         } else {
           _generatePkceChallenge(function(pkce) {
-            _authenticate(pkce, popup, callback);
+            _authenticate(pkce, options2, popup, callback);
           });
         }
       });
     };
-    oauth2.authenticateAsync = function() {
+    oauth2.authenticateAsync = function(options2) {
       if (oauth2.authenticated()) {
         return Promise.resolve(oauth2);
       }
           if (error) {
             errback(error);
           } else {
-            _generatePkceChallenge((pkce) => _authenticate(pkce, popup, errback));
+            _generatePkceChallenge((pkce) => _authenticate(pkce, options2, popup, errback));
           }
         });
       });
         callback(error);
       }
     }
-    function _authenticate(pkce, popup, callback) {
+    function _authenticate(pkce, options2, popup, callback) {
       var state = generateState();
-      var url = o2.url + "/oauth2/authorize?" + utilQsString2({
+      var path = "/oauth2/authorize?" + utilQsString2({
         client_id: o2.client_id,
         redirect_uri: o2.redirect_uri,
         response_type: "code",
         code_challenge_method: pkce.code_challenge_method,
         locale: o2.locale || ""
       });
+      var url = (options2 == null ? void 0 : options2.switchUser) ? "".concat(o2.url, "/logout?referer=").concat(encodeURIComponent("/login?referer=".concat(encodeURIComponent(path)))) : o2.url + path;
       if (o2.singlepage) {
         if (_store.isMocked) {
           var error = new Error("localStorage unavailable, but required in singlepage mode");
           window.location = url;
         }
       } else {
+        var popupClosedWatcher = setInterval(function() {
+          if (popup.closed) {
+            var error2 = new Error("Popup was closed prematurely");
+            error2.status = "popup-closed";
+            callback(error2);
+            window.clearInterval(popupClosedWatcher);
+            delete window.authComplete;
+          }
+        }, 1e3);
         oauth2.popupWindow = popup;
         popup.location = url;
       }
       window.authComplete = function(url2) {
+        clearTimeout(popupClosedWatcher);
         var params2 = utilStringQs2(url2.split("?")[1]);
         if (params2.state !== state) {
           var error2 = new Error("Invalid state");
       var verifier = Uint8Array.from(Array.from(code_verifier).map(function(char) {
         return char.charCodeAt(0);
       }));
-      window.crypto.subtle.digest("SHA-256", verifier).then(function(hash) {
-        var code_challenge = base64(hash);
+      window.crypto.subtle.digest("SHA-256", verifier).then(function(hash2) {
+        var code_challenge = base64(hash2);
         callback({
           code_challenge,
           code_verifier,
             try {
               var regex = new RegExp(regexString);
               regexes.push(regex);
-            } catch {
+            } catch (e3) {
             }
           }
         }
       urlroot = newOptions.url;
       apiUrlroot = newOptions.apiUrl || urlroot;
       if (newOptions.url && !newOptions.apiUrl) {
-        newOptions = {
-          ...newOptions,
+        newOptions = __spreadProps(__spreadValues({}, newOptions), {
           apiUrl: newOptions.url
-        };
+        });
       }
       const oldOptions = utilObjectOmit(oauth.options(), "access_token");
-      oauth.options({ ...oldOptions, ...newOptions });
+      oauth.options(__spreadValues(__spreadValues({}, oldOptions), newOptions));
       this.reset();
       this.userChangesets(function() {
       });
     authenticated: function() {
       return oauth.authenticated();
     },
-    authenticate: function(callback) {
+    /** @param {import('osm-auth').LoginOptions} options */
+    authenticate: function(callback, options2) {
       var that = this;
       var cid = _connectionID;
       _userChangesets = void 0;
         that.userChangesets(function() {
         });
       }
-      oauth.options({
-        ...oauth.options(),
+      oauth.options(__spreadProps(__spreadValues({}, oauth.options()), {
         locale: _mainLocalizer.localeCode()
-      });
-      oauth.authenticate(done);
+      }));
+      oauth.authenticate(done, options2);
     },
     imageryBlocklists: function() {
       return _imageryBlocklists;
     },
     updateUrlImage: function(imageKey) {
       if (!window.mocha) {
-        var hash = utilStringQs(window.location.hash);
+        var hash2 = utilStringQs(window.location.hash);
         if (imageKey) {
-          hash.photo = "streetside/" + imageKey;
+          hash2.photo = "streetside/" + imageKey;
         } else {
-          delete hash.photo;
+          delete hash2.photo;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     },
     /**
           if (isClipped && geometry.type === "MultiPolygon") {
             var merged = mergeCache[propertyhash];
             if (merged && merged.length) {
-              var other = merged[0];
+              var other2 = merged[0];
               var coords = import_polygon_clipping.default.union(
                 feature3.geometry.coordinates,
-                other.geometry.coordinates
+                other2.geometry.coordinates
               );
               if (!coords || !coords.length) {
                 continue;
         if (!features || !features.length) continue;
         for (var j2 = 0; j2 < features.length; j2++) {
           var feature3 = features[j2];
-          var hash = feature3.__featurehash__;
-          if (seen[hash]) continue;
-          seen[hash] = true;
+          var hash2 = feature3.__featurehash__;
+          if (seen[hash2]) continue;
+          seen[hash2] = true;
           results.push(Object.assign({}, feature3));
         }
       }
     },
     updateUrlImage: function(imageKey) {
       if (!window.mocha) {
-        var hash = utilStringQs(window.location.hash);
+        var hash2 = utilStringQs(window.location.hash);
         if (imageKey) {
-          hash.photo = "mapilio/" + imageKey;
+          hash2.photo = "mapilio/" + imageKey;
         } else {
-          delete hash.photo;
+          delete hash2.photo;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     },
     initViewer: function() {
     },
     updateUrlImage: function(imageKey) {
       if (!window.mocha) {
-        var hash = utilStringQs(window.location.hash);
+        var hash2 = utilStringQs(window.location.hash);
         if (imageKey) {
-          hash.photo = "panoramax/" + imageKey;
+          hash2.photo = "panoramax/" + imageKey;
         } else {
-          delete hash.photo;
+          delete hash2.photo;
         }
-        window.location.replace("#" + utilQsString(hash, true));
+        window.location.replace("#" + utilQsString(hash2, true));
       }
     },
     selectImage: function(context, id2) {
       _extent = _extent ? _extent.extend(entity.extent(graph)) : entity.extent(graph);
       return actionExtract(entityID, context.projection);
     }).filter(Boolean);
-    var operation2 = function() {
+    var operation2 = function(d3_event) {
+      const shiftKeyPressed = (d3_event == null ? void 0 : d3_event.shiftKey) || false;
       var combinedAction = function(graph) {
         _actions.forEach(function(action) {
-          graph = action(graph);
+          graph = action(graph, shiftKeyPressed);
         });
         return graph;
       };
 
   // modules/index.js
   var debug = false;
+  var setDebug = (newValue) => {
+    debug = newValue;
+  };
   var d3 = {
     dispatch: dispatch_default,
     geoMercator: mercator_default,
   window.cancelIdleCallback = window.cancelIdleCallback || function(id2) {
     window.cancelAnimationFrame(id2);
   };
-  window.iD = modules_exports;
+  window.iD = index_exports;
 })();
 //# sourceMappingURL=iD.js.map