diff --git a/.cursor/plans/continent_tap_intent_f2a73834.plan.md b/.cursor/plans/continent_tap_intent_f2a73834.plan.md new file mode 100644 index 0000000..a2f305b --- /dev/null +++ b/.cursor/plans/continent_tap_intent_f2a73834.plan.md @@ -0,0 +1,219 @@ +--- +name: Continent tap intent +overview: Add a centralized continent-intent confirmation flow (preview → ~200ms delay → commit) with drag-guard on the globe, tap ripples for non-commit surfaces, and affordance tweaks—without blocking taps or adding modals. +todos: + - id: intent-hook + content: Add useContinentIntent hook + constants (delay, drag threshold, preview opacity) + status: completed + - id: split-commit + content: "Refactor map.tsx: commitClusterFocus vs requestContinentFocus; wire handleMapPress + labels + chrome bypass" + status: completed + - id: preview-ripple-ui + content: MapContinentFocusLayers previewRegion + MapTapRipple in map-canvas/world-map-view/globe + status: completed + - id: globe-drag-guard + content: Expose tap threshold from globe-orbit-controls; gate globe surface + label presses + status: completed + - id: focused-tap-rules + content: "Focused mode: same-continent recenter+pulse; other land/ocean → ripple only" + status: completed + - id: affordance-tweaks + content: Larger label hit area, slightly stronger focus scrim, optional coast bias in map-map-tap-hit + status: completed + - id: verify + content: Manual test matrix on 2D/3D + lint/typecheck + status: completed +isProject: false +--- + +# Continent tap intent confirmation + +## Current behavior (gap) + +Today [`handleClusterPress`]() commits immediately: sets `focusedRegion`, locks region, and starts a 650ms camera flight. [`handleMapPress`]() and globe label [`Pressable`](components/map/globe-label-overlay.tsx) call it with no preview, delay, or drag guard. + +When `focusedRegion` is set, map taps **no-op** (early return) with no feedback. Rivers are not modeled; ocean/water taps hit `onMapPress` but fail polygon hit-test and do nothing. + +```mermaid +sequenceDiagram + participant User + participant Map as map.tsx + participant Camera + participant UI as MapContinentFocusLayers + + User->>Map: tap continent + Map->>UI: focusedRegion immediately + Map->>Camera: animate immediately + Note over User,Camera: Feels like instant context switch +``` + +## Target behavior + +```mermaid +sequenceDiagram + participant User + participant Intent as useContinentIntent + participant Preview as IntentPreview + Ripple + participant Map as map.tsx + participant Camera + + User->>Intent: continent candidate tap + Intent->>Preview: pulse + highlight previewRegion + Note over Intent: 150-300ms hold, cancel if drag/new tap + Intent->>Map: commitClusterFocus + Map->>Camera: smooth zoom/rotate 650ms + Map->>Preview: focusedRegion drives focus layers +``` + +| Surface | World zoom (`!focusedRegion`) | Continent focus (`focusedRegion` set) | +| ------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------- | +| Different continent land/label | Preview → delay → **commit focus** | **Ripple only** (no continent switch via map) | +| Same continent (re-tap) | Normal commit flow | **Pulse + recenter** via existing [`recenterOnFocusedContinent`]() | +| Ocean / water / non-polygon tap | **Ripple** | **Ripple** | +| Border/outline lines | No action | No action | +| Rivers | N/A (no layer) | N/A | + +Chrome controls (prev/next continent, “Back to World”, region center) **bypass** intent and keep current immediate behavior. + +**Re-tap choice:** pulse + gentle recenter (no duplicate `setFocusedRegion`, no exit). Matches existing `handleBackToContinent` camera path without toggling exploration mode. + +--- + +## Architecture + +### 1. Central intent hook + +Add [`hooks/use-continent-intent.ts`](hooks/use-continent-intent.ts) + timing constants in [`constants/map-continent-focus.ts`](constants/map-continent-focus.ts) (or small [`lib/map-continent-intent.ts`](lib/map-continent-intent.ts)): + +| Constant | Suggested value | +| ------------------------------------ | ---------------------------- | +| `MAP_CONTINENT_INTENT_DELAY_MS` | `200` (within 150–300ms) | +| `MAP_TAP_DRAG_THRESHOLD_PX` | `10` | +| `MAP_CONTINENT_PREVIEW_FILL_OPACITY` | ~0.12 (below committed 0.18) | + +Hook API (local to map screen, not Zustand): + +- `requestContinentFocus(cluster, source)` — Step 1: set `previewRegion`, fire light haptic, start timer; Step 3 on timer: call `onCommit(cluster)` +- `cancelIntent()` — new tap, mode change, back-to-world, or drag detected +- `previewRegion: string | null` for visuals +- `rippleAt: { lat, lng } | null` for non-commit taps + +Split [`handleClusterPress`]() into: + +- `commitClusterFocus` — current body (state + camera) +- `requestContinentFocus` — wired from map/labels after guards + +### 2. Soft target confirmation (Step 1–3 visuals) + +**2D — extend [`MapContinentFocusLayers`](components/map/map-continent-focus-layers.tsx)** + +- New prop `previewRegion?: string | null` (separate from `focusedRegion`) +- While previewing: render accent fill on that continent only + optional world scrim at lower opacity (reuse [`mapFocusAccentRgba`](constants/map-continent-focus.ts)) +- Committed focus unchanged (`focusedRegion` drives full scrim/fill as today) + +**Tap pulse ring — new [`components/map/map-tap-ripple.tsx`](components/map/map-tap-ripple.tsx)** + +- Reanimated scale + fade circle (pattern from [`map-country-marker.tsx`](components/map/map-country-marker.tsx) `pulseRing`, but single burst, not loop) +- **2D:** parent calls `mapRef.pointForCoordinate` (or `MapView` ref) to position ripple at lat/lng +- **3D:** use [`projectLatLngToScreen`](lib/globe-screen-project.ts) with globe camera + layout size (same approach as label overlay) + +Mount ripple overlay in [`map-canvas.tsx`](components/map/map-canvas.tsx) above map/globe, `pointerEvents="none"`. + +### 3. Snap threshold / drag guard (globe) + +[`lib/globe-orbit-controls.ts`](lib/globe-orbit-controls.ts) already tracks `rotateStart` / `rotateDelta` but never exposes movement. + +- On `onTouchStart`, record `touchStart` (pageX/Y) +- On `onTouchMove`, if distance from start > `MAP_TAP_DRAG_THRESHOLD_PX`, set `interactionExceededTapThreshold = true` +- Expose `consumeTapThresholdExceeded(): boolean` (read + reset on release) + +In [`globe-view.tsx`](components/map/globe-view.tsx) `handleGlobeSurfacePress`: if threshold exceeded, **do not** call `onGlobeSurfacePress`. + +Route label [`onContinentPress`](components/map/globe-label-overlay.tsx) through the same guard (orbit may have rotated just before label press). + +**2D:** `react-native-maps` `onPress` usually does not fire after pan; no new library. Optional follow-up: log on device; only add pan tracking if mis-taps persist. + +### 4. Tap affordance biasing + +| Change | File | +| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Larger continent label hit slop | [`globe-label-overlay.tsx`](components/map/globe-label-overlay.tsx) — increase `continentHitArea` padding / `minWidth` (~96→112) | +| Stronger dim outside focus | [`constants/map-continent-focus.ts`](constants/map-continent-focus.ts) — bump `MAP_SCRIM_MAX_OPACITY` slightly when `focusedRegion` set (e.g. 0.09 → 0.12) | +| Nearest-continent bias (optional, small) | [`lib/map-map-tap-hit.ts`](lib/map-map-tap-hit.ts) — if tap misses all polygons but is within ~1° of a country bbox edge, prefer that country’s cluster (reduces “missed” land taps at coasts) | + +No new dependencies (`react-native-gesture-handler` stays unused on map per project rules). + +### 5. Rewire [`handleMapPress`]() + +```ts +// Pseudocode flow +if (selectedCountry) { dismissPreview(); return; } + +if (coordinate) { + const cluster = findClusterAtWorldCoordinate(...); + + if (focusedRegion) { + if (cluster?.region === focusedRegion) { + triggerPreviewPulse(); // visual only + recenterOnFocusedContinent(cluster); + } else { + showRipple(coordinate); + } + return; + } + + if (is3d || zoomTier === "world") { + if (cluster) requestContinentFocus(cluster); + else showRipple(coordinate); + return; + } +} + +// spotlight dismiss, etc. unchanged +``` + +Globe label + region chrome: labels call `requestContinentFocus`; chrome calls `commitClusterFocus` directly. + +### 6. Cancel / edge cases + +Cancel pending intent when: + +- User taps again (different target → new preview; same → restart timer optional) +- `handleBackToWorld`, map mode toggle, country preview open +- Drag threshold exceeded (globe) +- Component unmount (`useEffect` cleanup) + +If user taps continent B while A is previewing: cancel A, preview B, single timer. + +--- + +## Files to touch (focused diff) + +| File | Change | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | +| [`hooks/use-continent-intent.ts`](hooks/use-continent-intent.ts) | **New** — timer + preview state | +| [`constants/map-continent-focus.ts`](constants/map-continent-focus.ts) | Intent/preview timing & opacity tokens | +| [`app/(tabs)/map.tsx`]() | Split commit vs request; focused-region ripple/recenter; wire hook | +| [`components/map/map-canvas.tsx`](components/map/map-canvas.tsx) | Pass `previewRegion`, ripple props | +| [`components/map/world-map-view.tsx`](components/map/world-map-view.tsx) | Preview layers + ripple host ref | +| [`components/map/map-continent-focus-layers.tsx`](components/map/map-continent-focus-layers.tsx) | `previewRegion` rendering | +| [`components/map/map-tap-ripple.tsx`](components/map/map-tap-ripple.tsx) | **New** — burst ripple | +| [`components/map/globe-view.tsx`](components/map/globe-view.tsx) | Drag guard on surface press | +| [`lib/globe-orbit-controls.ts`](lib/globe-orbit-controls.ts) | Movement threshold API | +| [`components/map/globe-label-overlay.tsx`](components/map/globe-label-overlay.tsx) | Hit area + intent callback | +| [`lib/map-map-tap-hit.ts`](lib/map-map-tap-hit.ts) | Optional coast bias (small) | + +**Out of scope:** river polygons (no data); border-line tap targets; modals/alerts; installing gesture-handler. + +--- + +## Testing checklist + +1. **World 2D:** tap Africa → brief highlight/pulse → ~200ms later smooth zoom; mis-drag on map should not change continent (verify on device). +2. **World 3D:** rotate globe, release, tap continent — should not commit if finger moved > threshold during gesture. +3. **World 3D:** tap ocean → ripple only, no focus. +4. **Focused:** tap same continent land → recenter pulse, no region change. +5. **Focused:** tap another continent’s land → ripple only, stay in current continent. +6. **Chrome:** prev/next continent still switches immediately. +7. **Rapid double-tap:** second tap cancels/replaces preview; only one final commit. +8. Run `npm run lint` and `npm run typecheck`. diff --git a/.env.example b/.env.example index 008c8fa..4ed3207 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,11 @@ -# Public backend URL (embedded in the Expo client bundle). -# Use your machine's LAN IP when testing on a physical device. -EXPO_PUBLIC_API_URL=http://localhost:3001 +# Backend port on your dev machine (used with Metro's auto-detected host). +# Default: 3002 +EXPO_PUBLIC_API_PORT=3002 + +# Optional — only set when you need a fixed URL: +# - Production / EAS builds (deployed API) +# - ngrok or Cloudflare tunnel while away from home +# - Explicit override during local dev +# +# If unset in dev, the app uses the same IP as `npx expo start` (no hardcoded LAN IP). +# EXPO_PUBLIC_API_URL=https://your-api.example.com diff --git a/app.json b/app.json index 2bdd4c4..8febe9c 100644 --- a/app.json +++ b/app.json @@ -38,7 +38,9 @@ "backgroundColor": "#000000" } } - ] + ], + "expo-asset", + "expo-font" ], "experiments": { "typedRoutes": true, diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index c0fe1a0..df95cde 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -8,6 +8,7 @@ export default function TabsLayout() { return ( } screenOptions={{ headerShown: false, @@ -23,10 +24,10 @@ export default function TabsLayout() { }, }} > - + - + diff --git a/app/(tabs)/map.tsx b/app/(tabs)/map.tsx index cd53495..12e92d9 100644 --- a/app/(tabs)/map.tsx +++ b/app/(tabs)/map.tsx @@ -1,8 +1,18 @@ import { Ionicons } from "@expo/vector-icons"; +import * as Haptics from "expo-haptics"; +import { useFocusEffect, useNavigation } from "expo-router"; import { StatusBar } from "expo-status-bar"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { + useCallback, + useEffect, + useLayoutEffect, + useMemo, + useRef, + useState, +} from "react"; import { ActivityIndicator, + InteractionManager, Pressable, StyleSheet, Text, @@ -11,40 +21,222 @@ import { import type { Region } from "react-native-maps"; import { useSafeAreaInsets } from "react-native-safe-area-context"; +import { useBottomTabBarHeight } from "@react-navigation/bottom-tabs"; + +import { type GlobeCameraViewState } from "@/components/map/globe-view"; +import { MapCanvas, type MapCanvasHandle } from "@/components/map/map-canvas"; import { MapControls } from "@/components/map/map-controls"; +import { MapCountryFocusPill } from "@/components/map/map-country-focus-pill"; import { MapCountryPreviewCard } from "@/components/map/map-country-preview-card"; import { MapFeaturedChips } from "@/components/map/map-featured-chips"; import { MapFilterChips } from "@/components/map/map-filter-chips"; import { MapOnboardingSheet } from "@/components/map/map-onboarding-sheet"; +import { MapRandomCountryHint } from "@/components/map/map-random-country-hint"; +import { MapRegionChrome } from "@/components/map/map-region-chrome"; import { MapSearchRow } from "@/components/map/map-search-row"; -import { RandomCountryFab } from "@/components/map/random-country-fab"; +import { MapTopChromeScrim } from "@/components/map/map-top-chrome-scrim"; import { - WorldMapView, - type MapZoomTier, - type WorldMapViewHandle, -} from "@/components/map/world-map-view"; -import { regionForCountry } from "@/constants/map-regions"; -import { TRENDING_COUNTRY_NAMES } from "@/constants/trending-countries"; + regionForClusterFocus, + regionForMapCountry, + WORLD_INITIAL_REGION, +} from "@/constants/map-regions"; +import { continentDisplayLabel } from "@/constants/regions"; +import { useContinentIntent } from "@/hooks/use-continent-intent"; +import { useMapFlight } from "@/hooks/use-map-flight"; +import { useMapMarkerReveal } from "@/hooks/use-map-marker-reveal"; +import { + deriveCameraZoomState, + resolveFlatZoomTier, +} from "@/lib/map-camera-zoom"; import { buildMapClusters, type MapCluster } from "@/lib/map-clusters"; +import { getMapDisplayLatLng, isValidLatLng } from "@/lib/map-country"; +import { parseCountryBoundaryPolygons } from "@/lib/map-country-boundaries"; +import { + installMapDebugErrorHandler, + logMapDebug, + summarizeCountry, + summarizeRegion, +} from "@/lib/map-debug"; +import { buildDiscoveryPhases } from "@/lib/map-discovery-flight"; +import { + findClusterAtWorldCoordinate, + type MapPressCoordinate, +} from "@/lib/map-map-tap-hit"; +import { isCountryPreviewOpen } from "@/lib/map-presentation"; +import { + commitMapPresentation, + dismissMapPreview, + resetMapPresentation, +} from "@/lib/map-presentation-transition"; +import { + buildMapRandomPool, + pickBiasedRandomMapCountry, + pickRandomMapCountry, + resolveMapRandomUseWorldPool, +} from "@/lib/map-random-pick"; +import { syncMapRegionFocusForCountry } from "@/lib/map-region-focus"; +import { + GLOBE_DETAIL_CAMERA_DISTANCE, + GLOBE_REGION_CAMERA_DISTANCE, + REGION_FOCUS_INITIAL_DELTA, + resolveRegionMarkerCountries, +} from "@/lib/map-region-markers"; +import { + isGlobeMapUi, + type MapViewTransition, +} from "@/lib/map-view-transition"; import { useCountryFeedStore } from "@/store/use-country-feed-store"; +import { useExperienceStore } from "@/store/use-experience-store"; +import { + useIdentityStore, + type SelectionSource, +} from "@/store/use-identity-store"; +import { useMapPresentationStore } from "@/store/use-map-presentation-store"; import { filterMapCountriesByChip, useMapStore } from "@/store/use-map-store"; import { useMapUiStore } from "@/store/use-map-ui-store"; import { useRecentlyViewedStore } from "@/store/use-recently-viewed-store"; +import { useSavedCountriesStore } from "@/store/use-saved-countries-store"; import type { MapCountry } from "@/types/country"; +import type { MapPresentationMode } from "@/types/map-presentation"; + +const countriesGeoJson = require("@/assets/geo/ne_50m_admin_0_countries/ne_50m_admin_0_countries.json"); + +const TAB_BAR_STYLE = { + position: "absolute" as const, + left: 0, + right: 0, + bottom: 0, + backgroundColor: "transparent", + borderTopWidth: 0, + elevation: 0, + shadowOpacity: 0, +}; + +const REGION_SWITCH_HYSTERESIS_MS = 200; +const EXPLICIT_REGION_RELEASE_DISTANCE_DEGREES = 22; + +/** + * Minimum gap between accepted random-FAB taps. Absorbs the brief async window + * (pool resolution) before `isMapAnimating` flips true, so a double-tap can't + * launch two flights whose animateToRegion calls overlap (iOS maps crash). + */ +const RANDOM_FAB_TAP_COOLDOWN_MS = 650; + +/** Preview card "back to continent" action — off until UX is finalized. */ +const PREVIEW_CONTINENT_BACK_ENABLED = false; + +/** Selected country must stay in the marker list (Explore → Map can freeze before region sync). */ +function withRequiredMapMarker( + markers: MapCountry[], + countryName: string | null, + pool: MapCountry[], +): MapCountry[] { + if (!countryName) return markers; + if (markers.some((c) => c.name === countryName)) return markers; + + const extra = + pool.find((c) => c.name === countryName) ?? + useIdentityStore.getState().activeCountry; + if (!extra || extra.name !== countryName) return markers; + + return [...markers, extra]; +} export default function MapScreen() { const insets = useSafeAreaInsets(); - const mapRef = useRef(null); - const zoomTierRef = useRef("world"); + const tabBarHeight = useBottomTabBarHeight(); + const navigation = useNavigation(); + const mapRef = useRef(null); + /** True while a programmatic camera flight is sequencing (controller-driven). */ + const isMapAnimatingRef = useRef(false); + const [isMapAnimating, setIsMapAnimating] = useState(false); + /** Supersedes stale async random/shuffle pool resolutions when taps overlap. */ + const randomPickGenerationRef = useRef(0); + /** Timestamp of the last accepted random-FAB tap — throttles rapid taps. */ + const lastRandomFabTapAtRef = useRef(0); + const shufflePickGenerationRef = useRef(0); + /** Monotonic id — only the latest navigation intent may drive the camera. */ + const navigationIntentIdRef = useRef(0); + const pendingExploreRegionSyncRef = useRef(null); + const exploreHandoffSuppressMarkersRef = useRef(false); + const [exploreHandoffSuppressMarkers, setExploreHandoffSuppressMarkers] = + useState(false); + const [markerRefreshToken, setMarkerRefreshToken] = useState(0); + /** Blocks world-zoom reset while animating into a continent/country focus. */ + const suppressWorldResetRef = useRef(false); + const pendingRegionSwitchTimerRef = useRef | null>(null); + const pendingRegionCandidateRef = useRef(null); + const explicitRegionLockRef = useRef<{ + region: string; + anchor: [number, number]; + } | null>(null); + const pendingGlobeFocusNameRef = useRef(null); + /** Continent to center on the globe after 2D → 3D when no country is selected. */ + const pendingGlobeRegionFocusRef = useRef(null); + /** Country to focus on the 2D map after 3D → 2D crossfade completes. */ + const pendingFlatFocusNameRef = useRef(null); + /** Presentation mode to restore after 3D → 2D crossfade completes. */ + const pendingFlatPresentationModeRef = useRef( + null, + ); + /** Prevents duplicate external-focus camera flights from focus + effect racing. */ + const externalFocusAppliedRef = useRef(null); + /** 2D MapView is interactive — external flights must wait or they no-op silently. */ + const flatMapReadyRef = useRef(false); + const [flatMapReadyToken, setFlatMapReadyToken] = useState(0); + /** Live flat-map zoom (latitudeDelta) — synchronous reads for callbacks. */ + const flatLatitudeDeltaRef = useRef(WORLD_INITIAL_REGION.latitudeDelta); + /** Settles globe focuses (3D camera move isn't tracked by the flat controller). */ + const globeSettleTimerRef = useRef | null>( + null, + ); + /** When true, preview dismiss returns to continent zoom instead of world. */ + const [previewDismissToContinent, setPreviewDismissToContinent] = + useState(false); + const [tapRippleAt, setTapRippleAt] = useState( + null, + ); + const [tapRippleToken, setTapRippleToken] = useState(0); + const [focusTransitionCountryName, setFocusTransitionCountryName] = useState< + string | null + >(null); + const [randomCountryHint, setRandomCountryHint] = useState( + null, + ); + /** + * Country just deselected (X / map tap) while staying in continent mode. The + * focal pin isn't always part of the region's marker subset, so we keep it + * pinned as a normal flag until we leave its region — otherwise it vanishes. + */ + const [lingeringDeselectedName, setLingeringDeselectedName] = useState< + string | null + >(null); const status = useMapStore((s) => s.status); const error = useMapStore((s) => s.error); - const selectedCountry = useMapStore((s) => s.selectedCountry); + const activeCountry = useIdentityStore((s) => s.activeCountry); + const clearActiveCountry = useIdentityStore((s) => s.clearActiveCountry); const activeChip = useMapStore((s) => s.activeChip); const countries = useMapStore((s) => s.countries); + const mapMode = useMapStore((s) => s.mapMode); const loadMapCountries = useMapStore((s) => s.loadMapCountries); - const selectCountry = useMapStore((s) => s.selectCountry); + const mapCountriesFullyLoaded = useMapStore((s) => s.mapCountriesFullyLoaded); const setActiveChip = useMapStore((s) => s.setActiveChip); + const setMapMode = useMapStore((s) => s.setMapMode); + const focusCountryOnGlobe = useMapStore((s) => s.focusCountryOnGlobe); + const focusLatLngOnGlobe = useMapStore((s) => s.focusLatLngOnGlobe); + const clearPendingMapIntent = useMapStore((s) => s.clearPendingMapIntent); + const pendingMapIntent = useMapStore((s) => s.pendingMapIntent); + const globeCamera = useMapStore((s) => s.globeCamera); + + const presentationMode = useMapPresentationStore((s) => s.mode); + const setPresentationMode = useMapPresentationStore((s) => s.setMode); + + const pulsing = useExperienceStore((s) => s.pulsing); + const endExperienceTransition = useExperienceStore((s) => s.endTransition); + const resetExperience = useExperienceStore((s) => s.resetExperience); const focusedRegion = useMapUiStore((s) => s.focusedRegion); const setDisplayMode = useMapUiStore((s) => s.setDisplayMode); @@ -52,149 +244,1040 @@ export default function MapScreen() { const setFeaturedShortcut = useMapUiStore((s) => s.setFeaturedShortcut); const resetGlobalPulse = useMapUiStore((s) => s.resetGlobalPulse); const hasSeenMapOnboarding = useMapUiStore((s) => s.hasSeenMapOnboarding); + const hasSeenRandomCountryHint = useMapUiStore( + (s) => s.hasSeenRandomCountryHint, + ); const dismissMapOnboarding = useMapUiStore((s) => s.dismissMapOnboarding); + const dismissRandomCountryHint = useMapUiStore( + (s) => s.dismissRandomCountryHint, + ); + const countryMarkerMode = useMapUiStore((s) => s.countryMarkerMode); + + const [mapViewTransition, setMapViewTransition] = + useState("idle"); + const [isPreviewShufflePending, setIsPreviewShufflePending] = useState(false); + const [flatLatitudeDelta, setFlatLatitudeDelta] = useState( + WORLD_INITIAL_REGION.latitudeDelta, + ); + const [globeCameraDistance, setGlobeCameraDistance] = useState( + GLOBE_DETAIL_CAMERA_DISTANCE + 2, + ); + const [globeViewCenter, setGlobeViewCenter] = useState({ + latitude: 0, + longitude: -30, + }); + const [lastMapRegion, setLastMapRegion] = useState(WORLD_INITIAL_REGION); + const is3d = isGlobeMapUi(mapMode, mapViewTransition); + + /** Single source of truth for zoom-driven UI + marker density (live camera). */ + const cameraZoomState = useMemo( + () => + deriveCameraZoomState({ + is3d, + latitudeDelta: flatLatitudeDelta, + globeDistance: globeCameraDistance, + }), + [is3d, flatLatitudeDelta, globeCameraDistance], + ); + const cameraTier = cameraZoomState.tier; + const isDetailZoom = cameraZoomState.isDetailZoom; + + const handleGlobeTransitionComplete = useCallback(() => { + setMapViewTransition("ready"); + }, []); + const featuredShortcut = useMapUiStore((s) => s.featuredShortcut); - const [zoomTier, setZoomTier] = useState("world"); const clusters = useMemo(() => buildMapClusters(countries), [countries]); + const allBoundaryPolygons = useMemo( + () => parseCountryBoundaryPolygons(countriesGeoJson), + [], + ); + + const activeCountryName = activeCountry?.name ?? null; + const focalMarkerName = + activeCountryName ?? focusTransitionCountryName ?? null; + const pinCountries = useMemo(() => { - if (zoomTier === "world") return []; - const base = focusedRegion - ? countries.filter((c) => c.region === focusedRegion) - : countries; - return filterMapCountriesByChip(base, activeChip); - }, [zoomTier, focusedRegion, countries, activeChip]); + if (exploreHandoffSuppressMarkers) { + if (!activeCountryName) return []; + const pin = countries.find((c) => c.name === activeCountryName) ?? null; + return pin ? [pin] : []; + } + + if (!focusedRegion) { + if (is3d) { + if (!activeCountryName) return []; + const pin = countries.find((c) => c.name === activeCountryName) ?? null; + return pin ? [pin] : []; + } + return []; + } + + const base = countries.filter((c) => c.region === focusedRegion); + const visible = filterMapCountriesByChip(base, activeChip); + + // Density follows the live camera zoom, not the selection or flight phase. + const showAllRegionMarkers = + isDetailZoom || (pulsing && !!activeCountryName); + + return showAllRegionMarkers + ? visible + : resolveRegionMarkerCountries(visible, false, focalMarkerName); + }, [ + activeChip, + activeCountryName, + countries, + exploreHandoffSuppressMarkers, + focalMarkerName, + focusedRegion, + is3d, + isDetailZoom, + pulsing, + ]); + + const markerViewportCenter = useMemo(() => { + if (focalMarkerName && !isDetailZoom) { + const focal = + countries.find((c) => c.name === focalMarkerName) ?? null; + if (focal) { + const [lat, lng] = getMapDisplayLatLng(focal); + if (isValidLatLng([lat, lng])) { + return { latitude: lat, longitude: lng }; + } + } + } + + if (!is3d) { + return { + latitude: lastMapRegion.latitude, + longitude: lastMapRegion.longitude, + }; + } + const cluster = focusedRegion + ? (clusters.find((c) => c.region === focusedRegion) ?? null) + : null; + + // Stable anchor at continent zoom — globe rotation must not reshuffle markers. + if (cluster && globeCameraDistance > GLOBE_DETAIL_CAMERA_DISTANCE) { + return { + latitude: cluster.center[0], + longitude: cluster.center[1], + }; + } + + return globeViewCenter; + }, [ + clusters, + countries, + focalMarkerName, + focusedRegion, + globeCameraDistance, + globeViewCenter, + is3d, + isDetailZoom, + lastMapRegion.latitude, + lastMapRegion.longitude, + ]); + + const markerReveal = useMapMarkerReveal({ + candidateCountries: pinCountries, + viewportCenter: markerViewportCenter, + focusedRegion, + focalCountryName: focalMarkerName, + isDetailZoom, + enabled: !!focusedRegion, + // Freeze marker mounts during flat flights — marker churn overlapping + // animateToRegion crashes react-native-maps on iOS. + paused: isMapAnimating && !is3d, + }); + + const mapMarkerCountries = useMemo(() => { + const withSelected = withRequiredMapMarker( + markerReveal.countriesToRender, + activeCountryName ?? focusTransitionCountryName, + countries, + ); + // Keep the just-deselected country visible (as a plain flag) until we leave + // its region, so pressing X doesn't make the focal pin disappear. + return withRequiredMapMarker( + withSelected, + lingeringDeselectedName, + countries, + ); + }, [ + activeCountryName, + countries, + focusTransitionCountryName, + lingeringDeselectedName, + markerReveal.countriesToRender, + ]); + + // Density adapts live during flights — no frozen snapshot. + const mapMarkersForCanvas = mapMarkerCountries; + + // Drop the lingering deselected pin once the camera leaves its region + // (world reset or a different continent), so it doesn't stick around. useEffect(() => { - if (status === "idle" && countries.length === 0) { - void loadMapCountries(); + if (!lingeringDeselectedName) return; + const country = + countries.find((c) => c.name === lingeringDeselectedName) ?? null; + if (!focusedRegion || (country && country.region !== focusedRegion)) { + setLingeringDeselectedName(null); } - }, [status, countries.length, loadMapCountries]); + }, [countries, focusedRegion, lingeringDeselectedName]); + + useEffect(() => { + logMapDebug("marker", "canvas marker set", { + count: mapMarkersForCanvas.length, + selected: activeCountryName ?? focusTransitionCountryName, + focusedRegion, + isMapAnimating, + paused: isMapAnimating && !is3d, + revealGeneration: markerReveal.revealGeneration, + }); + }, [ + activeCountryName, + focusTransitionCountryName, + focusedRegion, + is3d, + isMapAnimating, + mapMarkersForCanvas.length, + markerReveal.revealGeneration, + ]); + + const selectedMapName = activeCountryName ?? focusTransitionCountryName; + + const isPreviewOpen = isCountryPreviewOpen(presentationMode, activeCountry); - const computeZoomTier = useCallback((latitudeDelta: number): MapZoomTier => { - if (latitudeDelta > 60) return "world"; - if (latitudeDelta > 20) return "region"; - return "country"; + useLayoutEffect(() => { + const tabNavigation = navigation.getParent(); + if (!tabNavigation) return; + + tabNavigation.setOptions({ + tabBarStyle: isPreviewOpen ? { display: "none" } : TAB_BAR_STYLE, + }); + }, [isPreviewOpen, navigation]); + + useEffect(() => { + return () => { + navigation.getParent()?.setOptions({ tabBarStyle: TAB_BAR_STYLE }); + }; + }, [navigation]); + + useEffect(() => { + installMapDebugErrorHandler(); }, []); - const focusCountry = useCallback( - (country: MapCountry) => { - selectCountry(country.name); - mapRef.current?.animateToRegion(regionForCountry(country.latlng), 500); + useEffect(() => { + if (mapCountriesFullyLoaded || status === "loading") return; + void loadMapCountries(); + }, [mapCountriesFullyLoaded, status, loadMapCountries]); + + /** Navigate-first external entry: always fetch the full map list even if one country was injected. */ + useEffect(() => { + if (!pendingMapIntent || mapCountriesFullyLoaded || status === "loading") { + return; + } + void loadMapCountries(); + }, [pendingMapIntent, mapCountriesFullyLoaded, status, loadMapCountries]); + + useEffect(() => { + // After 2D → 3D, pan once the globe is interactive and the camera handle exists. + // Keep pending until focus succeeds — clearing early caused a no-op when the + // camera registered a frame after transition became "ready". + if (mapMode !== "3d" || mapViewTransition !== "ready" || !globeCamera) { + return; + } + + const focusName = pendingGlobeFocusNameRef.current; + if (focusName) { + focusCountryOnGlobe(focusName, 900); + pendingGlobeFocusNameRef.current = null; + pendingGlobeRegionFocusRef.current = null; + return; + } + + const focusRegion = pendingGlobeRegionFocusRef.current; + if (!focusRegion) { + return; + } + + const cluster = clusters.find((c) => c.region === focusRegion); + pendingGlobeRegionFocusRef.current = null; + if (!cluster) { + return; + } + + const [lat, lng] = cluster.center; + focusLatLngOnGlobe(lat, lng, 900); + }, [ + clusters, + focusCountryOnGlobe, + focusLatLngOnGlobe, + globeCamera, + mapMode, + mapViewTransition, + ]); + + /** Camera flight active-state — drives pulse end + per-marker snapshot smoothing. */ + const handleFlightActiveChange = useCallback( + (active: boolean) => { + logMapDebug("camera", "flight active change", { + active, + focusTransition: focusTransitionCountryName, + activeCountry: activeCountry?.name ?? null, + }); + isMapAnimatingRef.current = active; + setIsMapAnimating(active); + if (!active) { + setFocusTransitionCountryName(null); + endExperienceTransition(); + setMarkerRefreshToken((token) => token + 1); + + if (exploreHandoffSuppressMarkersRef.current) { + exploreHandoffSuppressMarkersRef.current = false; + setExploreHandoffSuppressMarkers(false); + const pending = pendingExploreRegionSyncRef.current; + pendingExploreRegionSyncRef.current = null; + if (pending) { + syncMapRegionFocusForCountry(pending); + logMapDebug("intent", "explore region sync after flight", { + region: pending.region, + country: pending.name, + }); + } + } + } }, - [selectCountry], + [activeCountry?.name, endExperienceTransition, focusTransitionCountryName], ); - const handleClusterPress = useCallback( + const flatAnimator = useCallback((region: Region, duration: number) => { + const summary = summarizeRegion(region); + logMapDebug("camera", "flat animateToRegion", { + duration, + region: summary, + hasMapRef: !!mapRef.current, + }); + if (!summary.finite) { + logMapDebug("camera", "WARN non-finite region — may crash MapView", { + region: summary, + }); + } + try { + mapRef.current?.animateToRegion(region, duration); + } catch (err) { + logMapDebug("camera", "ERROR flat animateToRegion threw", { + error: err instanceof Error ? err.message : String(err), + region: summary, + }); + throw err; + } + }, []); + + const flight = useMapFlight({ + animateToRegion: flatAnimator, + onActiveChange: handleFlightActiveChange, + }); + + /** Stops any active flight (flat phases or globe settle) and clears the busy flag. */ + const cancelCameraFlight = useCallback(() => { + logMapDebug("camera", "cancelCameraFlight", { + hadGlobeSettleTimer: !!globeSettleTimerRef.current, + flightWasActive: flight.isActive(), + }); + flight.cancel(); + if (globeSettleTimerRef.current) { + clearTimeout(globeSettleTimerRef.current); + globeSettleTimerRef.current = null; + } + isMapAnimatingRef.current = false; + setIsMapAnimating(false); + }, [flight]); + + const animateMapToRegion = useCallback( + (region: Region, duration = 500) => { + flight.flyTo([{ region, duration }]); + }, + [flight], + ); + + const clearPendingRegionSwitch = useCallback(() => { + if (pendingRegionSwitchTimerRef.current) { + clearTimeout(pendingRegionSwitchTimerRef.current); + pendingRegionSwitchTimerRef.current = null; + } + pendingRegionCandidateRef.current = null; + }, []); + + const lockExplicitRegion = useCallback( + (region: string, anchor: [number, number]) => { + explicitRegionLockRef.current = { region, anchor }; + clearPendingRegionSwitch(); + }, + [clearPendingRegionSwitch], + ); + + const clearExplicitRegionLock = useCallback(() => { + explicitRegionLockRef.current = null; + clearPendingRegionSwitch(); + }, [clearPendingRegionSwitch]); + + const syncRegionFocusForCountry = useCallback( + (pick: MapCountry) => { + syncMapRegionFocusForCountry(pick); + lockExplicitRegion(pick.region, getMapDisplayLatLng(pick)); + suppressWorldResetRef.current = true; + }, + [lockExplicitRegion], + ); + + const clearFocusTransition = useCallback(() => { + setFocusTransitionCountryName(null); + }, []); + + const clearCountrySelection = useCallback(() => { + resetMapPresentation(); + clearFocusTransition(); + clearActiveCountry(); + resetExperience(); + setLingeringDeselectedName(null); + }, [clearActiveCountry, clearFocusTransition, resetExperience]); + + const resolveNearestRegionByLatLng = useCallback( + (centerLat: number, centerLng: number): string | null => { + if (clusters.length === 0) return null; + + let nearest: MapCluster | null = null; + let best = Number.POSITIVE_INFINITY; + + for (const cluster of clusters) { + const dLat = cluster.center[0] - centerLat; + const dLng = cluster.center[1] - centerLng; + const d = dLat * dLat + dLng * dLng; + if (d < best) { + best = d; + nearest = cluster; + } + } + + return nearest?.region ?? null; + }, + [clusters], + ); + + const resolveNearestRegionByCenter = useCallback( + (region: Region): string | null => + resolveNearestRegionByLatLng(region.latitude, region.longitude), + [resolveNearestRegionByLatLng], + ); + + const flightCancelRef = useRef(flight.cancel); + flightCancelRef.current = flight.cancel; + + /** Unmount cleanup only — do not depend on `flight` identity (it changes each render). */ + useEffect(() => { + return () => { + clearPendingRegionSwitch(); + flightCancelRef.current(); + if (globeSettleTimerRef.current) { + clearTimeout(globeSettleTimerRef.current); + globeSettleTimerRef.current = null; + } + isMapAnimatingRef.current = false; + }; + // eslint-disable-next-line react-hooks/exhaustive-deps -- intentional unmount-only cleanup + }, []); + + const commitClusterFocus = useCallback( (cluster: MapCluster) => { - selectCountry(null); + clearPendingRegionSwitch(); + clearCountrySelection(); setFeaturedShortcut(null); setDisplayMode("explore"); + suppressWorldResetRef.current = true; setFocusedRegion(cluster.region); - zoomTierRef.current = "region"; - setZoomTier("region"); - mapRef.current?.animateToRegion( - regionForCountry(cluster.center, 45), - 650, - ); + lockExplicitRegion(cluster.region, cluster.center); + + const focusRegion = regionForClusterFocus(cluster); + setLastMapRegion(focusRegion); + + if (is3d) { + const [lat, lng] = cluster.center; + if (Number.isFinite(lat) && Number.isFinite(lng)) { + useMapStore.getState().focusLatLngOnGlobe(lat, lng, 650); + } + return; + } + + animateMapToRegion(focusRegion, 650); }, - [selectCountry, setDisplayMode, setFocusedRegion, setFeaturedShortcut], + [ + animateMapToRegion, + clearCountrySelection, + clearPendingRegionSwitch, + is3d, + setDisplayMode, + setFocusedRegion, + setFeaturedShortcut, + lockExplicitRegion, + ], ); - const handleRegionChangeComplete = useCallback( - (region: Region) => { - const nextTier = computeZoomTier(region.latitudeDelta); - if (zoomTierRef.current === nextTier) return; - zoomTierRef.current = nextTier; - setZoomTier(nextTier); + const { previewRegion, requestContinentFocus, cancelIntent } = + useContinentIntent({ + onCommit: commitClusterFocus, + focusedRegion, + }); - if (nextTier === "world") { - resetGlobalPulse(); - selectCountry(null); - return; + const resolveCountryFlightDuration = useCallback( + (source: Exclude, useGlobeCamera: boolean) => { + if (source === "explore") { + return useGlobeCamera ? 1400 : 900; } + const baseDuration = + source === "mapTap" ? (useGlobeCamera ? 450 : 500) : 650; + return useGlobeCamera ? Math.max(baseDuration, 1100) : baseDuration; + }, + [], + ); + const handleFlatMapReady = useCallback(() => { + if (flatMapReadyRef.current) return; + flatMapReadyRef.current = true; + logMapDebug("camera", "flat map ready"); + setFlatMapReadyToken((token) => token + 1); + }, []); + + /** Single-flight 2D move to a country/continent frame (used post 3D→2D restore). */ + const focusCountryOnFlatMap = useCallback( + ( + pick: MapCountry, + duration = 650, + framing: "continent" | "country" = "country", + ) => { setDisplayMode("explore"); + suppressWorldResetRef.current = true; + setFocusedRegion(pick.region); + lockExplicitRegion(pick.region, getMapDisplayLatLng(pick)); - // If user pinches in without tapping a cluster, pick the closest cluster - // so the map does not overwhelm with pins. - const currentFocused = useMapUiStore.getState().focusedRegion; - if (!currentFocused && clusters.length > 0) { - const centerLat = region.latitude; - const centerLng = region.longitude; - let nearest: (typeof clusters)[number] | null = null; - let best = Number.POSITIVE_INFINITY; - - for (const cluster of clusters) { - const dLat = cluster.center[0] - centerLat; - const dLng = cluster.center[1] - centerLng; - const d = dLat * dLat + dLng * dLng; - if (d < best) { - best = d; - nearest = cluster; - } + const region = + framing === "continent" + ? regionForMapCountry(pick, REGION_FOCUS_INITIAL_DELTA) + : regionForMapCountry(pick); + flight.flyTo([{ region, duration }]); + }, + [flight, lockExplicitRegion, setDisplayMode, setFocusedRegion], + ); + + /** + * Commits selection + presentation immediately (never waits on the camera), + * then runs the structural three-phase flight. Interruptible/retargetable: + * a new intent supersedes any in-flight sequence. + */ + const applyCountryIntent = useCallback( + ( + pick: MapCountry, + mode: "focus" | "preview", + source: Exclude, + ) => { + navigationIntentIdRef.current += 1; + const intentId = navigationIntentIdRef.current; + logMapDebug("intent", "applyCountryIntent start", { + intentId, + source, + mode, + country: summarizeCountry(pick), + mapMode, + mapViewTransition, + presentationMode, + previousCountry: summarizeCountry(activeCountry), + }); + cancelIntent(); + cancelCameraFlight(); + // A fresh focus supersedes any lingering deselected pin. + setLingeringDeselectedName(null); + // "Back to continent" is offered only when we were already exploring a region. + setPreviewDismissToContinent(!!useMapUiStore.getState().focusedRegion); + setDisplayMode("explore"); + + // Intent commits synchronously — focus pill / preview update right away. + commitMapPresentation({ country: pick, mode, source }); + setFocusTransitionCountryName(pick.name); + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + + const useGlobeCamera = + mapMode === "3d" && mapViewTransition !== "enteringFlat"; + const deferExploreRegionMarkers = source === "explore" && !useGlobeCamera; + + if (deferExploreRegionMarkers) { + exploreHandoffSuppressMarkersRef.current = true; + setExploreHandoffSuppressMarkers(true); + pendingExploreRegionSyncRef.current = pick; + suppressWorldResetRef.current = true; + lockExplicitRegion(pick.region, getMapDisplayLatLng(pick)); + logMapDebug("intent", "explore handoff — deferring region markers", { + intentId, + region: pick.region, + }); + } else { + syncRegionFocusForCountry(pick); + } + + if (useGlobeCamera) { + const globeDuration = resolveCountryFlightDuration(source, true); + logMapDebug("intent", "globe camera path", { + intentId, + source, + globeDuration, + mapViewTransition, + hasGlobeCamera: !!useMapStore.getState().globeCamera, + }); + // The flat flight controller doesn't drive the globe — track the + // settle window manually so pulse/transition end like a flat flight. + flight.cancel(); + isMapAnimatingRef.current = true; + setIsMapAnimating(true); + if (globeSettleTimerRef.current) { + clearTimeout(globeSettleTimerRef.current); } + globeSettleTimerRef.current = setTimeout(() => { + globeSettleTimerRef.current = null; + handleFlightActiveChange(false); + }, globeDuration + 300); - if (nearest) setFocusedRegion(nearest.region); + if ( + mapViewTransition !== "ready" || + !useMapStore.getState().globeCamera + ) { + pendingGlobeFocusNameRef.current = pick.name; + logMapDebug("intent", "globe focus deferred", { + intentId, + pendingName: pick.name, + mapViewTransition, + }); + return; + } + if (source === "fab") { + const [lat, lng] = getMapDisplayLatLng(pick); + logMapDebug("camera", "focusContinentOnGlobe (fab)", { + intentId, + name: pick.name, + duration: globeDuration, + }); + if (Number.isFinite(lat) && Number.isFinite(lng)) { + focusLatLngOnGlobe( + lat, + lng, + globeDuration, + GLOBE_REGION_CAMERA_DISTANCE, + ); + } + } else { + logMapDebug("camera", "focusCountryOnGlobe", { + intentId, + name: pick.name, + duration: globeDuration, + }); + focusCountryOnGlobe(pick.name, globeDuration); + } + return; } + + const cluster = clusters.find((c) => c.region === pick.region) ?? null; + const phases = buildDiscoveryPhases({ + pick, + cluster, + source, + includeWorld: source === "search", + }); + logMapDebug("intent", "flat flight path", { + intentId, + source, + phaseCount: phases.length, + clusterRegion: cluster?.region ?? null, + deferExploreRegionMarkers, + }); + + // Mark animating NOW (synchronously) so the marker reveal pauses on the + // very next render — before the deferred camera move runs. Otherwise the + // region's batched pin reveal keeps mounting and collides with + // animateToRegion, crashing react-native-maps on iOS. + isMapAnimatingRef.current = true; + setIsMapAnimating(true); + + // Defer the camera move until React has committed this intent's marker + // changes (paused reveal + new selection). Starting animateToRegion in the + // same frame as a marker mount crashes iOS maps. + InteractionManager.runAfterInteractions(() => { + requestAnimationFrame(() => { + if (navigationIntentIdRef.current !== intentId) { + logMapDebug("intent", "deferred flight skipped (superseded)", { + intentId, + currentIntentId: navigationIntentIdRef.current, + }); + return; + } + flight.flyTo(phases); + }); + }); }, [ + activeCountry, + cancelCameraFlight, + cancelIntent, clusters, - computeZoomTier, - resetGlobalPulse, - selectCountry, + flight, + focusCountryOnGlobe, + focusLatLngOnGlobe, + handleFlightActiveChange, + lockExplicitRegion, + mapMode, + mapViewTransition, + presentationMode, + resolveCountryFlightDuration, setDisplayMode, - setFocusedRegion, + syncRegionFocusForCountry, ], ); - const focusByMapCountry = useCallback( - (pick: MapCountry) => { - setActiveChip("all"); - setFeaturedShortcut(null); + const focusCountryOnMap = useCallback( + (pick: MapCountry, source: Exclude = "mapTap") => { + applyCountryIntent(pick, "focus", source); + }, + [applyCountryIntent], + ); + + const openCountryPreview = useCallback(() => { + setPresentationMode("preview"); + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }, [setPresentationMode]); + + const advanceToCountryPreview = useCallback( + (pick: MapCountry, source: Exclude = "shuffle") => { + applyCountryIntent(pick, "preview", source); + }, + [applyCountryIntent], + ); + + const clearCountryFocus = useCallback(() => { + // Exiting country focus but staying in the continent — keep the pin around + // as a normal flag so it doesn't blink out from under the camera. + const deselectedName = + useIdentityStore.getState().activeCountry?.name ?? null; + cancelCameraFlight(); + resetMapPresentation(); + clearFocusTransition(); + clearActiveCountry(); + resetExperience(); + setLingeringDeselectedName( + deselectedName && useMapUiStore.getState().focusedRegion + ? deselectedName + : null, + ); + }, [ + cancelCameraFlight, + clearActiveCountry, + clearFocusTransition, + resetExperience, + ]); + + const showTapRipple = useCallback((coordinate: MapPressCoordinate) => { + setTapRippleAt(coordinate); + setTapRippleToken((token) => token + 1); + }, []); + + const handleMapModeToggle = useCallback(() => { + cancelIntent(); + if (mapMode === "3d") { + pendingFlatFocusNameRef.current = + activeCountryName ?? focusTransitionCountryName ?? null; + pendingFlatPresentationModeRef.current = presentationMode; + pendingGlobeFocusNameRef.current = null; + pendingGlobeRegionFocusRef.current = null; + setMapMode("2d"); + setMapViewTransition("enteringFlat"); + return; + } + + const countryFocus = + activeCountryName ?? focusTransitionCountryName ?? null; + pendingGlobeFocusNameRef.current = countryFocus; + pendingGlobeRegionFocusRef.current = + countryFocus || !focusedRegion ? null : focusedRegion; + + setMapMode("3d"); + setMapViewTransition("enteringGlobe"); + }, [ + activeCountryName, + cancelIntent, + focusTransitionCountryName, + focusedRegion, + mapMode, + presentationMode, + setMapMode, + ]); + + /** Globe camera updates zoom/detail only — continent exploration stays in UI store until explicit exit. */ + const handleGlobeCameraViewChange = useCallback( + (state: GlobeCameraViewState) => { + // Globe may still mount during crossfade — ignore camera ticks unless 3D is active. + if (mapMode !== "3d" || mapViewTransition !== "ready") { + return; + } + + setGlobeCameraDistance((prev) => { + if (Math.abs(prev - state.distance) < 0.06) return prev; + return state.distance; + }); + + setGlobeViewCenter((prev) => { + const dLat = Math.abs(prev.latitude - state.centerLat); + const dLng = Math.abs(prev.longitude - state.centerLng); + if (dLat < 2 && dLng < 2) return prev; + return { + latitude: state.centerLat, + longitude: state.centerLng, + }; + }); + }, + [mapMode, mapViewTransition], + ); + + /** Live (throttled) flat viewport — feeds the camera zoom signal continuously. */ + const handleFlatRegionChange = useCallback((region: Region) => { + flatLatitudeDeltaRef.current = region.latitudeDelta; + setFlatLatitudeDelta(region.latitudeDelta); + setLastMapRegion(region); + }, []); + + const handleRegionChangeComplete = useCallback( + (region: Region) => { + flatLatitudeDeltaRef.current = region.latitudeDelta; + setFlatLatitudeDelta(region.latitudeDelta); + setLastMapRegion(region); + if (is3d) return; + + // During a programmatic flight the camera is mid-sequence — let it land + // before running world-reset / region-switch settle logic. + if (isMapAnimatingRef.current) return; + + const nextTier = resolveFlatZoomTier(region.latitudeDelta); + const currentFocused = useMapUiStore.getState().focusedRegion; + + if (suppressWorldResetRef.current && nextTier !== "world") { + suppressWorldResetRef.current = false; + } + + if (nextTier === "world") { + clearPendingRegionSwitch(); + if (!suppressWorldResetRef.current) { + clearExplicitRegionLock(); + resetGlobalPulse(); + clearCountrySelection(); + } + return; + } + + suppressWorldResetRef.current = false; setDisplayMode("explore"); - setFocusedRegion(pick.region); - zoomTierRef.current = "region"; - setZoomTier("region"); - selectCountry(pick.name); - mapRef.current?.animateToRegion(regionForCountry(pick.latlng, 45), 650); + + const nearestRegion = resolveNearestRegionByCenter(region); + if (!nearestRegion) { + clearPendingRegionSwitch(); + return; + } + + const explicitLock = explicitRegionLockRef.current; + if (explicitLock && nearestRegion !== explicitLock.region) { + const dLat = region.latitude - explicitLock.anchor[0]; + const dLng = region.longitude - explicitLock.anchor[1]; + const distance = Math.sqrt(dLat * dLat + dLng * dLng); + if (distance < EXPLICIT_REGION_RELEASE_DISTANCE_DEGREES) { + clearPendingRegionSwitch(); + return; + } + explicitRegionLockRef.current = null; + } + + if (nearestRegion === currentFocused) { + clearPendingRegionSwitch(); + return; + } + + if (pendingRegionCandidateRef.current === nearestRegion) { + return; + } + + clearPendingRegionSwitch(); + pendingRegionCandidateRef.current = nearestRegion; + pendingRegionSwitchTimerRef.current = setTimeout(() => { + if ( + resolveFlatZoomTier(flatLatitudeDeltaRef.current) === "world" || + pendingRegionCandidateRef.current !== nearestRegion + ) { + return; + } + setFocusedRegion(nearestRegion); + pendingRegionCandidateRef.current = null; + pendingRegionSwitchTimerRef.current = null; + }, REGION_SWITCH_HYSTERESIS_MS); }, [ - selectCountry, - setActiveChip, + clearCountrySelection, + clearExplicitRegionLock, + clearPendingRegionSwitch, + is3d, + resetGlobalPulse, + resolveNearestRegionByCenter, setDisplayMode, - setFeaturedShortcut, setFocusedRegion, ], ); - const handleTrendingPress = useCallback(() => { - if (countries.length === 0) return; - const trending = countries.filter((c) => - TRENDING_COUNTRY_NAMES.has(c.name), + const handleFlatTransitionComplete = useCallback(() => { + const focusName = pendingFlatFocusNameRef.current; + pendingFlatFocusNameRef.current = null; + + setMapMode("2d"); + setMapViewTransition("idle"); + + if (!focusName || countries.length === 0) { + return; + } + + const pick = countries.find((c) => c.name === focusName) ?? null; + if (!pick) { + return; + } + + const wasActive = + useIdentityStore.getState().activeCountry?.name === focusName; + const restoreMode = pendingFlatPresentationModeRef.current; + pendingFlatPresentationModeRef.current = null; + + if (restoreMode === "preview") { + setPresentationMode("preview"); + } + + focusCountryOnFlatMap( + pick, + 650, + wasActive || restoreMode === "preview" ? "country" : "continent", ); - const pick = trending[0] ?? countries[0]; - if (!pick) return; + }, [countries, focusCountryOnFlatMap, setMapMode, setPresentationMode]); + + const applyPendingExternalMapFocus = useCallback(() => { + const intent = useMapStore.getState().pendingMapIntent; + const mapState = useMapStore.getState(); + if (!intent || countries.length === 0) return; + if (externalFocusAppliedRef.current === intent.countryName) return; + + // Wait for the full map dataset — applying while only an injected country + // is present causes a marker storm mid-flight when the API response lands. + if (!mapState.mapCountriesFullyLoaded) { + logMapDebug("intent", "external focus deferred — countries loading", { + countryName: intent.countryName, + countriesCount: countries.length, + }); + return; + } + + const pick = countries.find((c) => c.name === intent.countryName) ?? null; + if (!pick) { + logMapDebug("intent", "external focus deferred — country not in list", { + countryName: intent.countryName, + }); + return; + } + + const useGlobeCamera = + mapMode === "3d" && mapViewTransition !== "enteringFlat"; + // The camera must be able to fly before we apply, or the move no-ops silently. + if (!useGlobeCamera && !flatMapReadyRef.current) { + logMapDebug("intent", "external focus deferred — flat map not ready", { + countryName: intent.countryName, + }); + return; + } + if ( + useGlobeCamera && + (mapViewTransition !== "ready" || !useMapStore.getState().globeCamera) + ) { + return; + } + + externalFocusAppliedRef.current = intent.countryName; + setActiveChip("all"); - setFeaturedShortcut("trending"); - setDisplayMode("explore"); - setFocusedRegion(pick.region); - zoomTierRef.current = "region"; - setZoomTier("region"); - selectCountry(pick.name); - mapRef.current?.animateToRegion(regionForCountry(pick.latlng, 45), 650); + setFeaturedShortcut(null); + + logMapDebug("intent", "applyPendingExternalMapFocus", { + country: summarizeCountry(pick), + source: intent.source, + mode: intent.mode, + mapCountriesFullyLoaded: mapState.mapCountriesFullyLoaded, + countriesCount: countries.length, + }); + + // Intent is applied synchronously and the flight is interruptible, so the + // cross-screen handoff can be cleared immediately. + applyCountryIntent(pick, intent.mode, intent.source); + clearPendingMapIntent(); }, [ + applyCountryIntent, + clearPendingMapIntent, countries, - selectCountry, + mapMode, + mapViewTransition, setActiveChip, - setDisplayMode, setFeaturedShortcut, - setFocusedRegion, ]); - const handleForYouPress = useCallback(async () => { - if (countries.length === 0) return; + useEffect(() => { + if (!pendingMapIntent) { + externalFocusAppliedRef.current = null; + } + }, [pendingMapIntent]); + + useFocusEffect( + useCallback(() => { + applyPendingExternalMapFocus(); + }, [applyPendingExternalMapFocus]), + ); + useEffect(() => { + if (pendingMapIntent) { + applyPendingExternalMapFocus(); + } + }, [ + applyPendingExternalMapFocus, + flatMapReadyToken, + globeCamera, + mapCountriesFullyLoaded, + mapViewTransition, + pendingMapIntent, + ]); + + const handleCountryPress = useCallback( + (country: MapCountry) => { + if (activeCountry?.name === country.name && isPreviewOpen) { + return; + } + if (activeCountry?.name === country.name) { + openCountryPreview(); + return; + } + focusCountryOnMap(country, "mapTap"); + }, + [activeCountry?.name, focusCountryOnMap, isPreviewOpen, openCountryPreview], + ); + + const handleAllPress = useCallback(async () => { + if (countries.length === 0) return; + const generation = ++randomPickGenerationRef.current; useRecentlyViewedStore.getState().seedIfEmpty(); const entries = useRecentlyViewedStore.getState().entries; const topName = entries[0]?.country?.name?.trim() ?? ""; @@ -214,31 +1297,22 @@ export default function MapScreen() { } if (!pick) { - handleTrendingPress(); + pick = countries[0] ?? null; + } + + if (!pick) { return; } + if (generation !== randomPickGenerationRef.current) return; setActiveChip("all"); - setFeaturedShortcut("forYou"); - setDisplayMode("explore"); - setFocusedRegion(pick.region); - zoomTierRef.current = "region"; - setZoomTier("region"); - selectCountry(pick.name); - mapRef.current?.animateToRegion(regionForCountry(pick.latlng, 45), 650); - }, [ - countries, - handleTrendingPress, - selectCountry, - setActiveChip, - setDisplayMode, - setFeaturedShortcut, - setFocusedRegion, - ]); + setFeaturedShortcut("all"); + focusCountryOnMap(pick, "shuffle"); + }, [countries, focusCountryOnMap, setActiveChip, setFeaturedShortcut]); - const handleNewActivityPress = useCallback(async () => { + const handleTerrainPress = useCallback(async () => { if (countries.length === 0) return; - + const generation = ++randomPickGenerationRef.current; const feed = useCountryFeedStore.getState(); if (feed.countries.length === 0 && feed.status === "idle") { await feed.loadInitialFeed(); @@ -251,117 +1325,454 @@ export default function MapScreen() { .find(Boolean) ?? countries[0]; if (!pick) return; + if (generation !== randomPickGenerationRef.current) return; + + setActiveChip("nature"); + setFeaturedShortcut("terrain"); + focusCountryOnMap(pick, "shuffle"); + }, [countries, focusCountryOnMap, setActiveChip, setFeaturedShortcut]); + + const handleSavedPress = useCallback(async () => { + if (countries.length === 0) return; + const generation = ++randomPickGenerationRef.current; + const saved = useSavedCountriesStore.getState().savedCountries; + const pick = + saved + .map((sc) => countries.find((c) => c.name === sc.name)) + .find(Boolean) ?? null; + + if (!pick) return; + if (generation !== randomPickGenerationRef.current) return; setActiveChip("all"); - setFeaturedShortcut("newActivity"); - setDisplayMode("explore"); - setFocusedRegion(pick.region); - zoomTierRef.current = "region"; - setZoomTier("region"); - selectCountry(pick.name); - mapRef.current?.animateToRegion(regionForCountry(pick.latlng, 45), 650); + setFeaturedShortcut("saved"); + focusCountryOnMap(pick, "shuffle"); + }, [countries, focusCountryOnMap, setActiveChip, setFeaturedShortcut]); + + const handleRandomCountry = useCallback(async () => { + // Block rapid taps: a flight in progress (or a tap within the cooldown) + // would cancel-then-immediately-restart the camera, overlapping + // animateToRegion calls and crashing react-native-maps on iOS. + if (isMapAnimatingRef.current) { + logMapDebug("fab", "tap ignored — flight in progress"); + return; + } + const now = Date.now(); + if (now - lastRandomFabTapAtRef.current < RANDOM_FAB_TAP_COOLDOWN_MS) { + logMapDebug("fab", "tap ignored — cooldown", { + sinceLastTapMs: now - lastRandomFabTapAtRef.current, + }); + return; + } + lastRandomFabTapAtRef.current = now; + + if (!mapCountriesFullyLoaded) { + logMapDebug("fab", "awaiting full country list"); + await loadMapCountries(); + } + + const countriesSnapshot = useMapStore.getState().countries; + if (countriesSnapshot.length === 0) { + logMapDebug("fab", "tap ignored — no countries loaded"); + return; + } + + const generation = ++randomPickGenerationRef.current; + logMapDebug("fab", "tap", { + generation, + countriesCount: countriesSnapshot.length, + focusedRegion, + activeChip, + previousCountry: activeCountry?.name ?? null, + isMapAnimating: isMapAnimatingRef.current, + }); + + // The FAB always draws from the GLOBAL pool. A focused continent only biases + // the selection toward itself (it does not hard-scope), so featured shortcuts + // and the regional restriction are intentionally ignored here. + const pool = await buildMapRandomPool({ + countries: countriesSnapshot, + activeChip, + featuredShortcut: null, + focusedRegion: null, + useWorldPool: true, + }); + if (generation !== randomPickGenerationRef.current) { + logMapDebug("fab", "stale generation after pool", { + generation, + current: randomPickGenerationRef.current, + }); + return; + } + + const excludeName = activeCountry?.name ?? null; + const pick = pickBiasedRandomMapCountry({ + pool, + region: focusedRegion, + excludeName, + }); + if (!pick) { + logMapDebug("fab", "no pick available", { + generation, + poolSize: pool.length, + }); + return; + } + + const pickLatLng = getMapDisplayLatLng(pick); + logMapDebug("fab", "pick", { + generation, + country: summarizeCountry(pick), + coordsValid: isValidLatLng(pickLatLng), + poolSize: pool.length, + focusedRegion, + biasedToContinent: !!focusedRegion && pick.region === focusedRegion, + isRepeat: pick.name === excludeName, + excludeName, + }); + + const showHint = !hasSeenRandomCountryHint; + focusCountryOnMap(pick, "fab"); + if (showHint) { + setRandomCountryHint(pick); + dismissRandomCountryHint(); + } }, [ + activeChip, + activeCountry?.name, + dismissRandomCountryHint, + focusCountryOnMap, + focusedRegion, + hasSeenRandomCountryHint, + loadMapCountries, + mapCountriesFullyLoaded, + ]); + + const handleNextCountry = useCallback(async () => { + if (!activeCountry || countries.length === 0) return; + + const generation = ++shufflePickGenerationRef.current; + setIsPreviewShufflePending(true); + try { + const pool = await buildMapRandomPool({ + countries, + activeChip, + featuredShortcut, + focusedRegion, + useWorldPool: resolveMapRandomUseWorldPool({ + focusedRegion, + mapMode, + flatLatitudeDelta: flatLatitudeDeltaRef.current, + contextualOnly: true, + }), + }); + if (generation !== shufflePickGenerationRef.current) return; + + const pick = + pickRandomMapCountry(pool, activeCountry.name) ?? + pickRandomMapCountry(countries, activeCountry.name); + if (!pick) return; + + advanceToCountryPreview(pick); + } finally { + if (generation === shufflePickGenerationRef.current) { + setIsPreviewShufflePending(false); + } + } + }, [ + activeChip, + activeCountry, + advanceToCountryPreview, countries, - selectCountry, - setActiveChip, - setDisplayMode, - setFeaturedShortcut, - setFocusedRegion, + featuredShortcut, + focusedRegion, + mapMode, ]); - const handleRandomCountry = useCallback(async () => { - if (countries.length === 0) return; + const flyToWorldView = useCallback(() => { + cancelIntent(); + suppressWorldResetRef.current = false; + clearExplicitRegionLock(); + resetGlobalPulse(); + clearCountrySelection(); + if (is3d) { + cancelCameraFlight(); + mapRef.current?.resetWorldView(); + } else { + flight.flyTo([{ region: WORLD_INITIAL_REGION, duration: 600 }]); + } + }, [ + cancelCameraFlight, + cancelIntent, + clearCountrySelection, + clearExplicitRegionLock, + flight, + is3d, + resetGlobalPulse, + ]); + + const handleReset = useCallback(() => { + flyToWorldView(); + setActiveChip("all"); + }, [flyToWorldView, setActiveChip]); - const ui = useMapUiStore.getState(); - - if (zoomTierRef.current === "world") { - const shortcut = ui.featuredShortcut; - let pool: MapCountry[] = []; - - if (shortcut === "trending") { - pool = countries.filter((c) => TRENDING_COUNTRY_NAMES.has(c.name)); - } else if (shortcut === "forYou") { - useRecentlyViewedStore.getState().seedIfEmpty(); - const names = useRecentlyViewedStore - .getState() - .entries.slice(0, 3) - .map((e) => e.country.name); - pool = countries.filter((c) => names.includes(c.name)); - } else if (shortcut === "newActivity") { - const feed = useCountryFeedStore.getState(); - if (feed.countries.length === 0 && feed.status === "idle") { - await feed.loadInitialFeed(); + const handleBackToWorld = useCallback(() => { + flyToWorldView(); + }, [flyToWorldView]); + + const recenterOnFocusedContinent = useCallback( + (cluster: MapCluster) => { + const flightDuration = 650; + + suppressWorldResetRef.current = true; + clearPendingRegionSwitch(); + lockExplicitRegion(cluster.region, cluster.center); + + const focusRegion = regionForClusterFocus(cluster); + setLastMapRegion(focusRegion); + + if (is3d) { + const [lat, lng] = cluster.center; + if (Number.isFinite(lat) && Number.isFinite(lng)) { + focusLatLngOnGlobe(lat, lng, flightDuration); } - const names = feed.countries.slice(0, 3).map((c) => c.name); - pool = countries.filter((c) => names.includes(c.name)); + return; } - if (pool.length === 0) { - const trending = countries.filter((c) => - TRENDING_COUNTRY_NAMES.has(c.name), - ); - pool = trending.length > 0 ? trending : countries; + flight.flyTo([{ region: focusRegion, duration: flightDuration }]); + }, + [ + clearPendingRegionSwitch, + flight, + focusLatLngOnGlobe, + is3d, + lockExplicitRegion, + ], + ); + + const handleBackToContinent = useCallback(() => { + if (!focusedRegion) return; + + const cluster = clusters.find((c) => c.region === focusedRegion); + if (!cluster) return; + + recenterOnFocusedContinent(cluster); + }, [clusters, focusedRegion, recenterOnFocusedContinent]); + + const zoomOutToContinentView = useCallback( + (region: string, duration = 650) => { + const cluster = clusters.find((c) => c.region === region); + if (!cluster) return; + + cancelIntent(); + setFocusedRegion(region); + suppressWorldResetRef.current = true; + clearPendingRegionSwitch(); + lockExplicitRegion(cluster.region, cluster.center); + + const focusRegion = regionForClusterFocus(cluster); + setLastMapRegion(focusRegion); + + if (is3d) { + const [lat, lng] = cluster.center; + if (Number.isFinite(lat) && Number.isFinite(lng)) { + focusLatLngOnGlobe(lat, lng, duration, GLOBE_REGION_CAMERA_DISTANCE); + } + return; } - const pick = pool[Math.floor(Math.random() * pool.length)] ?? null; - if (!pick) return; - focusByMapCountry(pick); - return; + flight.flyTo([{ region: focusRegion, duration }]); + }, + [ + cancelIntent, + clearPendingRegionSwitch, + clusters, + flight, + focusLatLngOnGlobe, + is3d, + lockExplicitRegion, + setFocusedRegion, + ], + ); + + /** Close preview sheet and keep the country focused (camera already there). */ + const dismissCountryPreview = useCallback(() => { + cancelIntent(); + dismissMapPreview(); + setPreviewDismissToContinent(false); + clearFocusTransition(); + }, [cancelIntent, clearFocusTransition]); + + /** Preview "back to continent" — clears country selection and zooms to region. */ + const exitCountryPreviewToContinent = useCallback(() => { + cancelIntent(); + const region = useMapUiStore.getState().focusedRegion; + + resetMapPresentation(); + setPreviewDismissToContinent(false); + clearFocusTransition(); + clearActiveCountry(); + resetExperience(); + + if (region) { + zoomOutToContinentView(region, 650); } + }, [ + cancelIntent, + clearActiveCountry, + clearFocusTransition, + resetExperience, + zoomOutToContinentView, + ]); - const base = focusedRegion - ? countries.filter((c) => c.region === focusedRegion) - : countries; - const visible = filterMapCountriesByChip(base, activeChip); - if (visible.length === 0) return; + const handleMapPress = useCallback( + (coordinate?: MapPressCoordinate) => { + if (presentationMode === "preview") { + dismissCountryPreview(); + return; + } - const pick = visible[Math.floor(Math.random() * visible.length)] ?? null; - if (!pick) return; + if (activeCountry) { + if (coordinate) { + showTapRipple(coordinate); + } + clearCountryFocus(); + return; + } + + if (coordinate) { + const cluster = findClusterAtWorldCoordinate( + allBoundaryPolygons, + countries, + clusters, + coordinate, + ); - selectCountry(pick.name); - mapRef.current?.animateToRegion(regionForCountry(pick.latlng), 600); - }, [activeChip, countries, focusByMapCountry, focusedRegion, selectCountry]); + if (focusedRegion) { + if (cluster?.region === focusedRegion) { + showTapRipple(coordinate); + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + recenterOnFocusedContinent(cluster); + } else if (cluster) { + requestContinentFocus(cluster); + } else { + showTapRipple(coordinate); + } + return; + } - const bottomPad = Math.max(insets.bottom, 16) + 88; + if (is3d || cameraTier === "world") { + if (cluster) { + requestContinentFocus(cluster); + return; + } + showTapRipple(coordinate); + return; + } + } + }, + [ + activeCountry, + allBoundaryPolygons, + cameraTier, + clearCountryFocus, + clusters, + countries, + dismissCountryPreview, + focusedRegion, + is3d, + presentationMode, + recenterOnFocusedContinent, + requestContinentFocus, + showTapRipple, + ], + ); + + const showRegionChrome = !!focusedRegion && !activeCountry && !isPreviewOpen; + const showCountryFocusPill = !!activeCountry && !isPreviewOpen; + const showFlagToggle = mapMarkerCountries.length > 0; + + const regionChromeBottom = Math.max(insets.bottom, 16); + const countryChromeAboveTabGap = 4; + const countryFocusPillBottom = 34; + const countryChromeHeight = 44; + const countryChromeGap = 24; + const mapFabClearance = showRegionChrome ? 68 : 56; + const mapFabBottom = showCountryFocusPill + ? countryFocusPillBottom + countryChromeHeight + countryChromeGap + : regionChromeBottom + mapFabClearance; + const randomHintBottom = mapFabBottom + 72; + const previewBottomOffset = 0; + const previewSheetBottomInset = insets.bottom; + const onboardingBottom = Math.max(insets.bottom, 16) + 88; const showOnboarding = !hasSeenMapOnboarding && - zoomTier === "world" && + (is3d || cameraTier === "world") && status !== "loading" && countries.length > 0 && - selectedCountry === null; + activeCountry === null && + focusTransitionCountryName === null; return ( - selectCountry(null)} + previewRegion={previewRegion} + tapRippleAt={tapRippleAt} + tapRippleToken={tapRippleToken} + zoomTier={is3d ? "region" : cameraTier} + countryMarkerMode={countryMarkerMode} + markerPresentation={markerReveal.presentation} + markerRevealGeneration={markerReveal.revealGeneration} + mapViewTransition={mapViewTransition} + onGlobeTransitionComplete={handleGlobeTransitionComplete} + onFlatTransitionComplete={handleFlatTransitionComplete} + onGlobeCameraViewChange={handleGlobeCameraViewChange} + lockUserGestures={isPreviewOpen} + suspendMarkerSnapshot={isMapAnimating} + markerRefreshToken={markerRefreshToken} + onCountryPress={handleCountryPress} + onClusterPress={requestContinentFocus} + onMapPress={handleMapPress} + onFlatRegionChange={handleFlatRegionChange} onRegionChangeComplete={handleRegionChangeComplete} /> - - - - - {zoomTier === "world" ? ( - void handleForYouPress()} - onNewActivityPress={() => void handleNewActivityPress()} - /> - ) : ( - - )} - + {isPreviewOpen ? ( + + ) : null} + + {!isPreviewOpen ? ( + <> + + + + {is3d || cameraTier === "world" || !focusedRegion ? ( + void handleAllPress()} + onTerrainPress={() => void handleTerrainPress()} + onSavedPress={() => void handleSavedPress()} + /> + ) : ( + + )} + + + ) : null} {status === "loading" ? ( @@ -391,33 +1802,82 @@ export default function MapScreen() { ) : null} - { - mapRef.current?.resetWorldView(); - resetGlobalPulse(); - setZoomTier("world"); - zoomTierRef.current = "world"; - selectCountry(null); - setActiveChip("all"); - }} - onZoomIn={() => mapRef.current?.zoomBy("in")} - onZoomOut={() => mapRef.current?.zoomBy("out")} - /> - - void handleRandomCountry()} /> - - {selectedCountry ? ( - + {isPreviewOpen && activeCountry ? ( + selectCountry(null)} + country={activeCountry} + bottomInset={previewSheetBottomInset} + onDismiss={dismissCountryPreview} + onBackToContinent={ + PREVIEW_CONTINENT_BACK_ENABLED && + previewDismissToContinent && + focusedRegion + ? exitCountryPreviewToContinent + : undefined + } + backToRegionLabel={ + PREVIEW_CONTINENT_BACK_ENABLED && focusedRegion + ? continentDisplayLabel(focusedRegion) + : undefined + } + onNextCountry={() => void handleNextCountry()} + isNextCountryLoading={isPreviewShufflePending} /> ) : showOnboarding ? ( - + dismissMapOnboarding()} /> ) : null} + + {showRegionChrome && focusedRegion ? ( + + ) : null} + + {showCountryFocusPill && activeCountry ? ( + + ) : null} + + {randomCountryHint ? ( + setRandomCountryHint(null)} + /> + ) : null} + + {!isPreviewOpen ? ( + <> + mapRef.current?.zoomBy("in")} + onZoomOut={() => mapRef.current?.zoomBy("out")} + showFlagToggle={showFlagToggle} + showBoundaryControls + bottom={mapFabBottom} + keepCollapsed={showCountryFocusPill} + onRandomCountryPress={() => void handleRandomCountry()} + randomDeemphasized={showCountryFocusPill} + randomDisabled={isMapAnimating} + /> + + ) : null} ); @@ -452,6 +1912,10 @@ const styles = StyleSheet.create({ paddingHorizontal: 12, paddingVertical: 8, }, + previewDim: { + ...StyleSheet.absoluteFillObject, + backgroundColor: "rgba(11, 19, 43, 0.45)", + }, previewWrap: { position: "absolute", left: 0, diff --git a/app/index.tsx b/app/index.tsx index 010a26c..af9e01c 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -1,5 +1,5 @@ import { Redirect } from "expo-router"; export default function Index() { - return ; + return ; } diff --git a/assets/geo/ne_50m_admin_0_countries/ne_50m_admin_0_countries.json b/assets/geo/ne_50m_admin_0_countries/ne_50m_admin_0_countries.json new file mode 100644 index 0000000..b445e16 --- /dev/null +++ b/assets/geo/ne_50m_admin_0_countries/ne_50m_admin_0_countries.json @@ -0,0 +1,244 @@ +{"type":"FeatureCollection", "features": [ +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[31.287890625000017,-22.40205078125001],[32.37109375,-21.33486328125001],[32.477636718750006,-20.712988281250006],[33.00673828125002,-19.873828125000003],[32.71650390625001,-19.00185546875001],[32.99306640625002,-18.35957031250001],[32.94804687500002,-16.71230468750001],[32.243261718750006,-16.44873046875],[31.939843750000023,-16.428808593750006],[31.236230468750023,-16.02363281250001],[30.437792968750017,-15.995312500000011],[30.396093750000006,-15.64306640625],[29.729589843750006,-15.644628906250006],[28.9130859375,-15.98779296875],[28.760644531250023,-16.53193359375001],[27.932226562500006,-16.89619140625001],[27.020800781250017,-17.95839843750001],[25.86328125,-17.951953125000003],[25.2587890625,-17.793554687500006],[25.224023437500023,-17.91523437500001],[25.76123046875,-18.649218750000003],[26.168066406250006,-19.53828125000001],[26.67822265625,-19.89277343750001],[27.221484375000017,-20.145800781250003],[27.28076171875,-20.47871093750001],[27.699609375000023,-20.53066406250001],[27.66943359375,-21.064257812500003],[28.04560546875001,-21.573046875000003],[29.03730468750001,-21.811328125000003],[29.364843750000006,-22.193945312500006],[29.6630859375,-22.146289062500003],[30.46015625000001,-22.32900390625001],[31.287890625000017,-22.40205078125001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Zimbabwe","SOV_A3":"ZWE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Zimbabwe","ADM0_A3":"ZWE","GEOU_DIF":0,"GEOUNIT":"Zimbabwe","GU_A3":"ZWE","SU_DIF":0,"SUBUNIT":"Zimbabwe","SU_A3":"ZWE","BRK_DIFF":0,"NAME":"Zimbabwe","NAME_LONG":"Zimbabwe","BRK_A3":"ZWE","BRK_NAME":"Zimbabwe","BRK_GROUP":"","ABBREV":"Zimb.","POSTAL":"ZW","FORMAL_EN":"Republic of Zimbabwe","FORMAL_FR":"","NAME_CIAWF":"Zimbabwe","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Zimbabwe","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":5,"MAPCOLOR9":3,"MAPCOLOR13":9,"POP_EST":14645468,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":21440,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"5. Low income","FIPS_10":"ZI","ISO_A2":"ZW","ISO_A2_EH":"ZW","ISO_A3":"ZWE","ISO_A3_EH":"ZWE","ISO_N3":"716","ISO_N3_EH":"716","UN_A3":"716","WB_A2":"ZW","WB_A3":"ZWE","WOE_ID":23425004,"WOE_ID_EH":23425004,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ZWE","ADM0_DIFF":"","ADM0_TLC":"ZWE","ADM0_A3_US":"ZWE","ADM0_A3_FR":"ZWE","ADM0_A3_RU":"ZWE","ADM0_A3_ES":"ZWE","ADM0_A3_CN":"ZWE","ADM0_A3_TW":"ZWE","ADM0_A3_IN":"ZWE","ADM0_A3_NP":"ZWE","ADM0_A3_PK":"ZWE","ADM0_A3_DE":"ZWE","ADM0_A3_GB":"ZWE","ADM0_A3_BR":"ZWE","ADM0_A3_IL":"ZWE","ADM0_A3_PS":"ZWE","ADM0_A3_SA":"ZWE","ADM0_A3_EG":"ZWE","ADM0_A3_MA":"ZWE","ADM0_A3_PT":"ZWE","ADM0_A3_AR":"ZWE","ADM0_A3_JP":"ZWE","ADM0_A3_KO":"ZWE","ADM0_A3_VN":"ZWE","ADM0_A3_TR":"ZWE","ADM0_A3_ID":"ZWE","ADM0_A3_PL":"ZWE","ADM0_A3_GR":"ZWE","ADM0_A3_IT":"ZWE","ADM0_A3_NL":"ZWE","ADM0_A3_SE":"ZWE","ADM0_A3_BD":"ZWE","ADM0_A3_UA":"ZWE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":8,"LABEL_X":29.925444,"LABEL_Y":-18.91164,"NE_ID":1159321441,"WIKIDATAID":"Q954","NAME_AR":"زيمبابوي","NAME_BN":"জিম্বাবুয়ে","NAME_DE":"Simbabwe","NAME_EN":"Zimbabwe","NAME_ES":"Zimbabue","NAME_FA":"زیمبابوه","NAME_FR":"Zimbabwe","NAME_EL":"Ζιμπάμπουε","NAME_HE":"זימבבואה","NAME_HI":"ज़िम्बाब्वे","NAME_HU":"Zimbabwe","NAME_ID":"Zimbabwe","NAME_IT":"Zimbabwe","NAME_JA":"ジンバブエ","NAME_KO":"짐바브웨","NAME_NL":"Zimbabwe","NAME_PL":"Zimbabwe","NAME_PT":"Zimbábue","NAME_RU":"Зимбабве","NAME_SV":"Zimbabwe","NAME_TR":"Zimbabve","NAME_UK":"Зімбабве","NAME_UR":"زمبابوے","NAME_VI":"Zimbabwe","NAME_ZH":"津巴布韦","NAME_ZHT":"辛巴威","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[30.396093750000006,-15.64306640625],[30.231835937500023,-14.990332031250006],[31.728906250000023,-14.49609375],[33.201757812500006,-14.013378906250011],[32.99208984375002,-14.022167968750011],[32.67207031250001,-13.6103515625],[32.96757812500002,-13.225000000000009],[33.021582031250006,-12.630468750000006],[33.39794921875,-12.489843750000006],[33.25234375000002,-12.112597656250003],[33.22636718750002,-11.534863281250011],[33.37978515625002,-11.157910156250011],[33.261328125000006,-10.893359375000003],[33.65908203125002,-10.590527343750011],[33.35097656250002,-9.862207031250009],[32.919921875,-9.407421875000011],[32.433203125000006,-9.156347656250006],[31.94257812500001,-9.054003906250003],[31.3505859375,-8.607031250000006],[31.07636718750001,-8.611914062500006],[30.75117187500001,-8.193652343750003],[28.972265625000006,-8.464941406250006],[28.917773437500017,-8.700585937500009],[28.400683593750017,-9.224804687500011],[28.63007812500001,-9.831250000000011],[28.63886718750001,-10.669238281250003],[28.357226562500017,-11.483007812500006],[28.482519531250006,-11.812109375000006],[29.064355468750023,-12.348828125000011],[29.427539062500017,-12.431250000000006],[29.79511718750001,-12.155468750000011],[29.795312500000023,-13.392773437500011],[29.55419921875,-13.248925781250009],[29.014257812500006,-13.368847656250011],[28.357714843750017,-12.482031250000006],[27.53339843750001,-12.1953125],[27.04609375000001,-11.615917968750011],[26.949609375000023,-11.898828125000009],[26.59638671875001,-11.972070312500009],[26.025976562500006,-11.89013671875],[25.349414062500017,-11.623046875],[25.184863281250017,-11.242968750000003],[24.5185546875,-11.4384765625],[24.319921875000006,-11.07177734375],[23.96650390625001,-10.871777343750011],[23.991308593750006,-12.422167968750003],[23.843164062500023,-13.0009765625],[21.978906250000023,-13.0009765625],[21.979785156250017,-15.95556640625],[22.150683593750017,-16.59716796875],[23.380664062500017,-17.640625],[24.27490234375,-17.481054687500006],[24.932421875000017,-17.54345703125],[25.2587890625,-17.793554687500006],[25.86328125,-17.951953125000003],[27.020800781250017,-17.95839843750001],[27.932226562500006,-16.89619140625001],[28.760644531250023,-16.53193359375001],[28.9130859375,-15.98779296875],[29.729589843750006,-15.644628906250006],[30.396093750000006,-15.64306640625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Zambia","SOV_A3":"ZMB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Zambia","ADM0_A3":"ZMB","GEOU_DIF":0,"GEOUNIT":"Zambia","GU_A3":"ZMB","SU_DIF":0,"SUBUNIT":"Zambia","SU_A3":"ZMB","BRK_DIFF":0,"NAME":"Zambia","NAME_LONG":"Zambia","BRK_A3":"ZMB","BRK_NAME":"Zambia","BRK_GROUP":"","ABBREV":"Zambia","POSTAL":"ZM","FORMAL_EN":"Republic of Zambia","FORMAL_FR":"","NAME_CIAWF":"Zambia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Zambia","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":8,"MAPCOLOR9":5,"MAPCOLOR13":13,"POP_EST":17861030,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":23309,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"ZA","ISO_A2":"ZM","ISO_A2_EH":"ZM","ISO_A3":"ZMB","ISO_A3_EH":"ZMB","ISO_N3":"894","ISO_N3_EH":"894","UN_A3":"894","WB_A2":"ZM","WB_A3":"ZMB","WOE_ID":23425003,"WOE_ID_EH":23425003,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ZMB","ADM0_DIFF":"","ADM0_TLC":"ZMB","ADM0_A3_US":"ZMB","ADM0_A3_FR":"ZMB","ADM0_A3_RU":"ZMB","ADM0_A3_ES":"ZMB","ADM0_A3_CN":"ZMB","ADM0_A3_TW":"ZMB","ADM0_A3_IN":"ZMB","ADM0_A3_NP":"ZMB","ADM0_A3_PK":"ZMB","ADM0_A3_DE":"ZMB","ADM0_A3_GB":"ZMB","ADM0_A3_BR":"ZMB","ADM0_A3_IL":"ZMB","ADM0_A3_PS":"ZMB","ADM0_A3_SA":"ZMB","ADM0_A3_EG":"ZMB","ADM0_A3_MA":"ZMB","ADM0_A3_PT":"ZMB","ADM0_A3_AR":"ZMB","ADM0_A3_JP":"ZMB","ADM0_A3_KO":"ZMB","ADM0_A3_VN":"ZMB","ADM0_A3_TR":"ZMB","ADM0_A3_ID":"ZMB","ADM0_A3_PL":"ZMB","ADM0_A3_GR":"ZMB","ADM0_A3_IT":"ZMB","ADM0_A3_NL":"ZMB","ADM0_A3_SE":"ZMB","ADM0_A3_BD":"ZMB","ADM0_A3_UA":"ZMB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":26.395298,"LABEL_Y":-14.660804,"NE_ID":1159321439,"WIKIDATAID":"Q953","NAME_AR":"زامبيا","NAME_BN":"জাম্বিয়া","NAME_DE":"Sambia","NAME_EN":"Zambia","NAME_ES":"Zambia","NAME_FA":"زامبیا","NAME_FR":"Zambie","NAME_EL":"Ζάμπια","NAME_HE":"זמביה","NAME_HI":"ज़ाम्बिया","NAME_HU":"Zambia","NAME_ID":"Zambia","NAME_IT":"Zambia","NAME_JA":"ザンビア","NAME_KO":"잠비아","NAME_NL":"Zambia","NAME_PL":"Zambia","NAME_PT":"Zâmbia","NAME_RU":"Замбия","NAME_SV":"Zambia","NAME_TR":"Zambiya","NAME_UK":"Замбія","NAME_UR":"زیمبیا","NAME_VI":"Zambia","NAME_ZH":"赞比亚","NAME_ZHT":"尚比亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[53.08564453125001,16.648388671874997],[52.72919921875001,17.30039062499999],[51.977636718750006,18.996142578125003],[49.0419921875,18.581787109375],[48.17216796875002,18.156933593749997],[47.57958984375,17.44833984374999],[47.44179687500002,17.111865234375003],[46.975683593750006,16.95346679687499],[46.68203125000002,17.2685546875],[46.31035156250002,17.23129882812499],[45.40654296875002,17.319775390624997],[45.148046875000006,17.427441406249997],[44.15595703125001,17.39853515624999],[43.9169921875,17.32470703125],[43.41796875,17.516259765624994],[43.19091796875,17.359375],[43.1650390625,16.689404296874997],[42.79931640625,16.371777343749997],[42.71718750000002,15.654638671874991],[43.021093750000006,14.554882812499997],[43.08906250000001,14.010986328125],[43.28261718750002,13.639843749999997],[43.23193359375,13.26708984375],[43.47529296875001,12.839013671874994],[43.929785156250006,12.616503906249989],[44.617773437500006,12.817236328124991],[45.038671875000006,12.815869140624997],[45.657324218750006,13.338720703124991],[46.78886718750002,13.465576171875],[47.40771484375,13.66162109375],[47.98994140625001,14.048095703125],[48.66835937500002,14.050146484374991],[49.34990234375002,14.637792968749991],[50.16689453125002,14.851025390624997],[50.52705078125001,15.038183593749991],[51.60371093750001,15.336816406249994],[52.21748046875001,15.655517578125],[52.327734375000006,16.29355468749999],[53.08564453125001,16.648388671874997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Yemen","SOV_A3":"YEM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Yemen","ADM0_A3":"YEM","GEOU_DIF":0,"GEOUNIT":"Yemen","GU_A3":"YEM","SU_DIF":0,"SUBUNIT":"Yemen","SU_A3":"YEM","BRK_DIFF":0,"NAME":"Yemen","NAME_LONG":"Yemen","BRK_A3":"YEM","BRK_NAME":"Yemen","BRK_GROUP":"","ABBREV":"Yem.","POSTAL":"YE","FORMAL_EN":"Republic of Yemen","FORMAL_FR":"","NAME_CIAWF":"Yemen","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Yemen, Rep.","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":3,"MAPCOLOR13":11,"POP_EST":29161922,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":22581,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"YM","ISO_A2":"YE","ISO_A2_EH":"YE","ISO_A3":"YEM","ISO_A3_EH":"YEM","ISO_N3":"887","ISO_N3_EH":"887","UN_A3":"887","WB_A2":"RY","WB_A3":"YEM","WOE_ID":23425002,"WOE_ID_EH":23425002,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"YEM","ADM0_DIFF":"","ADM0_TLC":"YEM","ADM0_A3_US":"YEM","ADM0_A3_FR":"YEM","ADM0_A3_RU":"YEM","ADM0_A3_ES":"YEM","ADM0_A3_CN":"YEM","ADM0_A3_TW":"YEM","ADM0_A3_IN":"YEM","ADM0_A3_NP":"YEM","ADM0_A3_PK":"YEM","ADM0_A3_DE":"YEM","ADM0_A3_GB":"YEM","ADM0_A3_BR":"YEM","ADM0_A3_IL":"YEM","ADM0_A3_PS":"YEM","ADM0_A3_SA":"YEM","ADM0_A3_EG":"YEM","ADM0_A3_MA":"YEM","ADM0_A3_PT":"YEM","ADM0_A3_AR":"YEM","ADM0_A3_JP":"YEM","ADM0_A3_KO":"YEM","ADM0_A3_VN":"YEM","ADM0_A3_TR":"YEM","ADM0_A3_ID":"YEM","ADM0_A3_PL":"YEM","ADM0_A3_GR":"YEM","ADM0_A3_IT":"YEM","ADM0_A3_NL":"YEM","ADM0_A3_SE":"YEM","ADM0_A3_BD":"YEM","ADM0_A3_UA":"YEM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":45.874383,"LABEL_Y":15.328226,"NE_ID":1159321425,"WIKIDATAID":"Q805","NAME_AR":"اليمن","NAME_BN":"ইয়েমেন","NAME_DE":"Jemen","NAME_EN":"Yemen","NAME_ES":"Yemen","NAME_FA":"یمن","NAME_FR":"Yémen","NAME_EL":"Υεμένη","NAME_HE":"תימן","NAME_HI":"यमन","NAME_HU":"Jemen","NAME_ID":"Yaman","NAME_IT":"Yemen","NAME_JA":"イエメン","NAME_KO":"예멘","NAME_NL":"Jemen","NAME_PL":"Jemen","NAME_PT":"Iémen","NAME_RU":"Йемен","NAME_SV":"Jemen","NAME_TR":"Yemen","NAME_UK":"Ємен","NAME_UR":"یمن","NAME_VI":"Yemen","NAME_ZH":"也门","NAME_ZHT":"葉門","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[107.97265625,21.507958984374994],[107.35117187500003,21.60888671875],[106.7294921875,22.00034179687499],[106.53632812500001,22.395410156249994],[106.7802734375,22.77890624999999],[106.1484375,22.97006835937499],[105.84296875000001,22.922802734374997],[105.275390625,23.34521484375],[104.86474609375,23.136376953124994],[104.79570312499999,22.9111328125],[104.37177734375001,22.704052734374997],[103.35605468750003,22.754687500000003],[103.00537109375,22.45297851562499],[102.51718750000003,22.741015625000003],[102.12744140625,22.379199218750003],[102.94863281250002,21.569775390624997],[102.85117187500003,21.265917968750003],[103.1044921875,20.891650390625003],[103.63505859374999,20.697070312500003],[104.05205078124999,20.941210937500102],[104.58320312500001,20.646679687499955],[104.61884765624995,20.374511718750114],[104.92792968750001,20.018115234375003],[104.54628906250002,19.610546874999997],[104.03203124999999,19.67514648437499],[103.89638671875002,19.339990234375023],[104.71650390624995,18.803417968749955],[105.11513671875002,18.678857421875023],[105.08583984375002,18.450097656249994],[105.45820312500001,18.154296875],[105.69140625,17.737841796874932],[106.50224609374999,16.9541015625],[106.69609374999999,16.458984375],[107.39638671875002,16.043017578125003],[107.18955078125003,15.747265624999997],[107.65312499999999,15.255224609374991],[107.51943359375002,14.705078125],[107.33144531250002,14.126611328124994],[107.60546875,13.437792968750003],[107.47539062499999,13.030371093749991],[107.50644531250003,12.364550781249989],[106.9306640625,12.077490234374991],[106.41386718749999,11.948437499999997],[106.33984375,11.681835937499997],[105.85146484375002,11.635009765625],[105.85605468750003,11.294287109374991],[106.16796875,11.012304687499991],[105.38652343749999,10.940087890624994],[104.8505859375,10.534472656249989],[104.42636718750003,10.411230468749991],[104.66347656250002,10.169921875],[105.02783203125,10.067431640624989],[104.84521484375,9.606152343749997],[104.81855468750001,8.801855468749991],[104.89189453124999,8.583251953125],[105.322265625,8.801123046874991],[105.5009765625,9.093212890624997],[106.57246093750001,9.64111328125],[106.81269531250001,10.433300781249997],[107.26152343749999,10.398388671874997],[108.27167968750001,10.934277343749997],[108.82080078125,11.3154296875],[109.19863281250002,11.724853515625],[109.21894531250001,12.645800781249989],[109.42392578125003,12.955957031249994],[109.27187500000002,13.279345703125003],[109.30332031250003,13.8564453125],[109.08486328125002,14.716162109374991],[108.8212890625,15.3779296875],[108.02939453125003,16.331103515625003],[107.18037109375001,16.89794921875],[106.47890625000002,17.71958007812499],[106.4990234375,17.946435546874994],[105.88828125000003,18.502490234375003],[105.62177734375001,18.96630859375],[105.98408203125001,19.93906249999999],[106.51796875000002,20.288867187500003],[106.75341796875,20.735058593749997],[106.67548828125001,20.960498046875003],[107.35429687499999,21.05517578125],[107.40996093749999,21.284814453124994],[107.97265625,21.507958984374994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"Vietnam","SOV_A3":"VNM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Vietnam","ADM0_A3":"VNM","GEOU_DIF":0,"GEOUNIT":"Vietnam","GU_A3":"VNM","SU_DIF":0,"SUBUNIT":"Vietnam","SU_A3":"VNM","BRK_DIFF":0,"NAME":"Vietnam","NAME_LONG":"Vietnam","BRK_A3":"VNM","BRK_NAME":"Vietnam","BRK_GROUP":"","ABBREV":"Viet.","POSTAL":"VN","FORMAL_EN":"Socialist Republic of Vietnam","FORMAL_FR":"","NAME_CIAWF":"Vietnam","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Vietnam","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":6,"MAPCOLOR9":5,"MAPCOLOR13":4,"POP_EST":96462106,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":261921,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"VM","ISO_A2":"VN","ISO_A2_EH":"VN","ISO_A3":"VNM","ISO_A3_EH":"VNM","ISO_N3":"704","ISO_N3_EH":"704","UN_A3":"704","WB_A2":"VN","WB_A3":"VNM","WOE_ID":23424984,"WOE_ID_EH":23424984,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VNM","ADM0_DIFF":"","ADM0_TLC":"VNM","ADM0_A3_US":"VNM","ADM0_A3_FR":"VNM","ADM0_A3_RU":"VNM","ADM0_A3_ES":"VNM","ADM0_A3_CN":"VNM","ADM0_A3_TW":"VNM","ADM0_A3_IN":"VNM","ADM0_A3_NP":"VNM","ADM0_A3_PK":"VNM","ADM0_A3_DE":"VNM","ADM0_A3_GB":"VNM","ADM0_A3_BR":"VNM","ADM0_A3_IL":"VNM","ADM0_A3_PS":"VNM","ADM0_A3_SA":"VNM","ADM0_A3_EG":"VNM","ADM0_A3_MA":"VNM","ADM0_A3_PT":"VNM","ADM0_A3_AR":"VNM","ADM0_A3_JP":"VNM","ADM0_A3_KO":"VNM","ADM0_A3_VN":"VNM","ADM0_A3_TR":"VNM","ADM0_A3_ID":"VNM","ADM0_A3_PL":"VNM","ADM0_A3_GR":"VNM","ADM0_A3_IT":"VNM","ADM0_A3_NL":"VNM","ADM0_A3_SE":"VNM","ADM0_A3_BD":"VNM","ADM0_A3_UA":"VNM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":105.387292,"LABEL_Y":21.715416,"NE_ID":1159321417,"WIKIDATAID":"Q881","NAME_AR":"فيتنام","NAME_BN":"ভিয়েতনাম","NAME_DE":"Vietnam","NAME_EN":"Vietnam","NAME_ES":"Vietnam","NAME_FA":"ویتنام","NAME_FR":"Viêt Nam","NAME_EL":"Βιετνάμ","NAME_HE":"וייטנאם","NAME_HI":"वियतनाम","NAME_HU":"Vietnám","NAME_ID":"Vietnam","NAME_IT":"Vietnam","NAME_JA":"ベトナム","NAME_KO":"베트남","NAME_NL":"Vietnam","NAME_PL":"Wietnam","NAME_PT":"Vietname","NAME_RU":"Вьетнам","NAME_SV":"Vietnam","NAME_TR":"Vietnam","NAME_UK":"В'єтнам","NAME_UR":"ویتنام","NAME_VI":"Việt Nam","NAME_ZH":"越南","NAME_ZHT":"越南","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-60.017529296875,8.54931640625],[-60.8009765625,8.592138671874991],[-61.30400390624999,8.410400390625],[-61.05307617187499,9.095117187499994],[-60.79248046875,9.360742187499994],[-62.51513671875,10.176123046874991],[-62.843017578125,10.417919921874997],[-62.70234375,10.749804687499989],[-63.873437499999994,10.663769531249997],[-64.85048828125,10.098095703124997],[-65.1291015625,10.070068359375],[-65.8517578125,10.257763671874997],[-66.247216796875,10.632226562499994],[-66.98906249999999,10.610644531249989],[-67.87163085937499,10.472070312499994],[-68.23408203125,10.569140624999989],[-68.3986328125,11.160986328124991],[-68.82797851562499,11.431738281249991],[-69.631591796875,11.479931640624997],[-70.00395507812499,12.177880859374994],[-70.2865234375,11.886035156249989],[-70.23251953124999,11.372998046874997],[-71.46953124999999,10.964160156249989],[-71.54462890625,10.778710937499994],[-71.38662109375,10.263769531249991],[-71.052685546875,9.705810546875],[-71.08583984375,9.348242187499991],[-71.29794921874999,9.125634765624994],[-71.68671875,9.072509765625],[-72.11284179687499,9.815576171874994],[-71.59433593749999,10.657373046874994],[-71.94697265625,11.414453124999994],[-71.86865234375,11.627343749999994],[-71.3197265625,11.861914062499991],[-71.95810546874999,11.666406249999994],[-72.248486328125,11.196435546874994],[-72.690087890625,10.835839843749994],[-72.8693359375,10.491259765624989],[-73.00654296875,9.789160156249991],[-73.35634765625,9.226855468749989],[-72.79638671875,9.108984374999991],[-72.6654296875,8.627587890624994],[-72.41655273437499,8.381982421874994],[-72.44296874999999,7.454882812499989],[-72.08427734374999,7.096874999999997],[-71.01328124999999,6.994433593749989],[-70.65507812499999,7.082763671875],[-70.09501953124999,6.937939453124997],[-69.43925781249999,6.134912109374994],[-68.47177734374999,6.156542968749989],[-67.85917968749999,6.2898925781249915],[-67.43935546875,6.025537109374994],[-67.82490234375,5.270458984374997],[-67.85527343749999,4.506884765624989],[-67.66162109375,3.8642578125],[-67.31113281249999,3.4158691406249915],[-67.83476562499999,2.892822265625],[-67.21083984375,2.39013671875],[-66.87602539062499,1.2230468749999943],[-66.42924804687499,0.8216796874999943],[-66.06005859375,0.7853515624999972],[-65.68144531249999,0.9834472656249886],[-65.36083984375,0.86865234375],[-65.103759765625,1.1081054687499972],[-64.11484374999999,1.6192871093749943],[-64.03544921874999,1.9044433593749943],[-63.393945312499994,2.2225097656249915],[-63.38925781249999,2.4119140624999886],[-63.92416992187499,2.4524414062499886],[-64.21884765624999,3.2046874999999915],[-64.22109375,3.58740234375],[-64.56791992187499,3.8998046874999943],[-64.25566406249999,4.140332031249997],[-64.021484375,3.9291015624999943],[-63.29472656249999,3.9222656249999943],[-62.968652343749994,3.593945312499997],[-62.712109375,4.0179199218749915],[-62.15312499999999,4.098388671875],[-61.002832031249994,4.5352539062499915],[-60.6044921875,4.994580078124997],[-60.742138671875,5.202050781249994],[-61.37680664062499,5.906982421875],[-61.12871093749999,6.214306640624997],[-61.14560546874999,6.694531249999997],[-60.39501953125,6.945361328124989],[-60.71923828125,7.498681640624994],[-60.513623046875,7.813183593749997],[-60.032421875,8.053564453124991],[-59.83164062499999,8.305957031249989],[-60.017529296875,8.54931640625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":3,"SOVEREIGNT":"Venezuela","SOV_A3":"VEN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Venezuela","ADM0_A3":"VEN","GEOU_DIF":0,"GEOUNIT":"Venezuela","GU_A3":"VEN","SU_DIF":0,"SUBUNIT":"Venezuela","SU_A3":"VEN","BRK_DIFF":0,"NAME":"Venezuela","NAME_LONG":"Venezuela","BRK_A3":"VEN","BRK_NAME":"Venezuela","BRK_GROUP":"","ABBREV":"Ven.","POSTAL":"VE","FORMAL_EN":"Bolivarian Republic of Venezuela","FORMAL_FR":"República Bolivariana de Venezuela","NAME_CIAWF":"Venezuela","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Venezuela, RB","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":1,"MAPCOLOR13":4,"POP_EST":28515829,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":482359,"GDP_YEAR":2014,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"VE","ISO_A2":"VE","ISO_A2_EH":"VE","ISO_A3":"VEN","ISO_A3_EH":"VEN","ISO_N3":"862","ISO_N3_EH":"862","UN_A3":"862","WB_A2":"VE","WB_A3":"VEN","WOE_ID":23424982,"WOE_ID_EH":23424982,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VEN","ADM0_DIFF":"","ADM0_TLC":"VEN","ADM0_A3_US":"VEN","ADM0_A3_FR":"VEN","ADM0_A3_RU":"VEN","ADM0_A3_ES":"VEN","ADM0_A3_CN":"VEN","ADM0_A3_TW":"VEN","ADM0_A3_IN":"VEN","ADM0_A3_NP":"VEN","ADM0_A3_PK":"VEN","ADM0_A3_DE":"VEN","ADM0_A3_GB":"VEN","ADM0_A3_BR":"VEN","ADM0_A3_IL":"VEN","ADM0_A3_PS":"VEN","ADM0_A3_SA":"VEN","ADM0_A3_EG":"VEN","ADM0_A3_MA":"VEN","ADM0_A3_PT":"VEN","ADM0_A3_AR":"VEN","ADM0_A3_JP":"VEN","ADM0_A3_KO":"VEN","ADM0_A3_VN":"VEN","ADM0_A3_TR":"VEN","ADM0_A3_ID":"VEN","ADM0_A3_PL":"VEN","ADM0_A3_GR":"VEN","ADM0_A3_IT":"VEN","ADM0_A3_NL":"VEN","ADM0_A3_SE":"VEN","ADM0_A3_BD":"VEN","ADM0_A3_UA":"VEN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":7.5,"LABEL_X":-64.599381,"LABEL_Y":7.182476,"NE_ID":1159321411,"WIKIDATAID":"Q717","NAME_AR":"فنزويلا","NAME_BN":"ভেনেজুয়েলা","NAME_DE":"Venezuela","NAME_EN":"Venezuela","NAME_ES":"Venezuela","NAME_FA":"ونزوئلا","NAME_FR":"Venezuela","NAME_EL":"Βενεζουέλα","NAME_HE":"ונצואלה","NAME_HI":"वेनेज़ुएला","NAME_HU":"Venezuela","NAME_ID":"Venezuela","NAME_IT":"Venezuela","NAME_JA":"ベネズエラ","NAME_KO":"베네수엘라","NAME_NL":"Venezuela","NAME_PL":"Wenezuela","NAME_PT":"Venezuela","NAME_RU":"Венесуэла","NAME_SV":"Venezuela","NAME_TR":"Venezuela","NAME_UK":"Венесуела","NAME_UR":"وینیزویلا","NAME_VI":"Venezuela","NAME_ZH":"委内瑞拉","NAME_ZHT":"委內瑞拉","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":6,"LABELRANK":6,"SOVEREIGNT":"Vatican","SOV_A3":"VAT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Vatican","ADM0_A3":"VAT","GEOU_DIF":0,"GEOUNIT":"Vatican","GU_A3":"VAT","SU_DIF":0,"SUBUNIT":"Vatican","SU_A3":"VAT","BRK_DIFF":0,"NAME":"Vatican","NAME_LONG":"Vatican","BRK_A3":"VAT","BRK_NAME":"Vatican","BRK_GROUP":"","ABBREV":"Vat.","POSTAL":"V","FORMAL_EN":"State of the Vatican City","FORMAL_FR":"","NAME_CIAWF":"Holy See (Vatican City)","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Vatican (Holy See)","NAME_ALT":"Holy See","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":2,"POP_EST":825,"POP_RANK":2,"POP_YEAR":2019,"GDP_MD":-99,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"VT","ISO_A2":"VA","ISO_A2_EH":"VA","ISO_A3":"VAT","ISO_A3_EH":"VAT","ISO_N3":"336","ISO_N3_EH":"336","UN_A3":"336","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424986,"WOE_ID_EH":23424986,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VAT","ADM0_DIFF":"","ADM0_TLC":"VAT","ADM0_A3_US":"VAT","ADM0_A3_FR":"VAT","ADM0_A3_RU":"VAT","ADM0_A3_ES":"VAT","ADM0_A3_CN":"VAT","ADM0_A3_TW":"VAT","ADM0_A3_IN":"VAT","ADM0_A3_NP":"VAT","ADM0_A3_PK":"VAT","ADM0_A3_DE":"VAT","ADM0_A3_GB":"VAT","ADM0_A3_BR":"VAT","ADM0_A3_IL":"VAT","ADM0_A3_PS":"VAT","ADM0_A3_SA":"VAT","ADM0_A3_EG":"VAT","ADM0_A3_MA":"VAT","ADM0_A3_PT":"VAT","ADM0_A3_AR":"VAT","ADM0_A3_JP":"VAT","ADM0_A3_KO":"VAT","ADM0_A3_VN":"VAT","ADM0_A3_TR":"VAT","ADM0_A3_ID":"VAT","ADM0_A3_PL":"VAT","ADM0_A3_GR":"VAT","ADM0_A3_IT":"VAT","ADM0_A3_NL":"VAT","ADM0_A3_SE":"VAT","ADM0_A3_BD":"VAT","ADM0_A3_UA":"VAT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":12.453418,"LABEL_Y":41.903323,"NE_ID":1159321407,"WIKIDATAID":"Q237","NAME_AR":"الفاتيكان","NAME_BN":"ভ্যাটিকান সিটি","NAME_DE":"Vatikanstadt","NAME_EN":"Vatican City","NAME_ES":"Ciudad del Vaticano","NAME_FA":"واتیکان","NAME_FR":"Cité du Vatican","NAME_EL":"Βατικανό","NAME_HE":"קריית הוותיקן","NAME_HI":"वैटिकन नगर","NAME_HU":"Vatikán","NAME_ID":"Vatikan","NAME_IT":"Città del Vaticano","NAME_JA":"バチカン","NAME_KO":"바티칸 시국","NAME_NL":"Vaticaanstad","NAME_PL":"Watykan","NAME_PT":"Vaticano","NAME_RU":"Ватикан","NAME_SV":"Vatikanstaten","NAME_TR":"Vatikan","NAME_UK":"Ватикан","NAME_UR":"ویٹیکن سٹی","NAME_VI":"Thành Vatican","NAME_ZH":"梵蒂冈","NAME_ZHT":"梵蒂岡","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[166.74580078125,-14.826855468750011],[166.52724609375002,-14.85009765625],[166.6310546875,-15.406054687500003],[166.82578125000003,-15.634863281250006],[167.19960937500002,-15.485742187500009],[167.13164062500005,-15.135351562500006],[166.81015625000003,-15.157421875000011],[166.74580078125,-14.826855468750011]]],[[[167.41250000000002,-16.09589843750001],[167.44931640625003,-16.554980468750003],[167.83662109375,-16.44970703125],[167.41250000000002,-16.09589843750001]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Vanuatu","SOV_A3":"VUT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Vanuatu","ADM0_A3":"VUT","GEOU_DIF":0,"GEOUNIT":"Vanuatu","GU_A3":"VUT","SU_DIF":0,"SUBUNIT":"Vanuatu","SU_A3":"VUT","BRK_DIFF":0,"NAME":"Vanuatu","NAME_LONG":"Vanuatu","BRK_A3":"VUT","BRK_NAME":"Vanuatu","BRK_GROUP":"","ABBREV":"Van.","POSTAL":"VU","FORMAL_EN":"Republic of Vanuatu","FORMAL_FR":"","NAME_CIAWF":"Vanuatu","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Vanuatu","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":299882,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":934,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"NH","ISO_A2":"VU","ISO_A2_EH":"VU","ISO_A3":"VUT","ISO_A3_EH":"VUT","ISO_N3":"548","ISO_N3_EH":"548","UN_A3":"548","WB_A2":"VU","WB_A3":"VUT","WOE_ID":23424907,"WOE_ID_EH":23424907,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VUT","ADM0_DIFF":"","ADM0_TLC":"VUT","ADM0_A3_US":"VUT","ADM0_A3_FR":"VUT","ADM0_A3_RU":"VUT","ADM0_A3_ES":"VUT","ADM0_A3_CN":"VUT","ADM0_A3_TW":"VUT","ADM0_A3_IN":"VUT","ADM0_A3_NP":"VUT","ADM0_A3_PK":"VUT","ADM0_A3_DE":"VUT","ADM0_A3_GB":"VUT","ADM0_A3_BR":"VUT","ADM0_A3_IL":"VUT","ADM0_A3_PS":"VUT","ADM0_A3_SA":"VUT","ADM0_A3_EG":"VUT","ADM0_A3_MA":"VUT","ADM0_A3_PT":"VUT","ADM0_A3_AR":"VUT","ADM0_A3_JP":"VUT","ADM0_A3_KO":"VUT","ADM0_A3_VN":"VUT","ADM0_A3_TR":"VUT","ADM0_A3_ID":"VUT","ADM0_A3_PL":"VUT","ADM0_A3_GR":"VUT","ADM0_A3_IT":"VUT","ADM0_A3_NL":"VUT","ADM0_A3_SE":"VUT","ADM0_A3_BD":"VUT","ADM0_A3_UA":"VUT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Melanesia","REGION_WB":"East Asia & Pacific","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":166.908762,"LABEL_Y":-15.37153,"NE_ID":1159321421,"WIKIDATAID":"Q686","NAME_AR":"فانواتو","NAME_BN":"ভানুয়াতু","NAME_DE":"Vanuatu","NAME_EN":"Vanuatu","NAME_ES":"Vanuatu","NAME_FA":"وانواتو","NAME_FR":"Vanuatu","NAME_EL":"Βανουάτου","NAME_HE":"ונואטו","NAME_HI":"वानूआटू","NAME_HU":"Vanuatu","NAME_ID":"Vanuatu","NAME_IT":"Vanuatu","NAME_JA":"バヌアツ","NAME_KO":"바누아투","NAME_NL":"Vanuatu","NAME_PL":"Vanuatu","NAME_PT":"Vanuatu","NAME_RU":"Вануату","NAME_SV":"Vanuatu","NAME_TR":"Vanuatu","NAME_UK":"Вануату","NAME_UR":"وانواتو","NAME_VI":"Vanuatu","NAME_ZH":"瓦努阿图","NAME_ZHT":"萬那杜","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[70.94677734375,42.248681640624994],[70.416015625,42.078564453125],[70.09560546875002,41.8205078125],[69.06494140625,41.366943359375],[68.29189453125002,40.656103515625],[67.93574218750001,41.196582031249996],[66.81425781250002,41.142382812499996],[66.66865234375001,41.270751953125],[66.4986328125,41.994873046875],[66.00957031250002,42.0048828125],[66.10029296875001,42.9908203125],[65.80302734375002,42.876953125],[65.49619140625,43.310546875],[64.90546875000001,43.714697265625],[64.44316406250002,43.551171874999994],[63.20703125,43.627978515624996],[61.990234375,43.492138671875],[61.160742187500006,44.168603515624994],[61.007910156250006,44.393798828125],[58.555273437500006,45.55537109375],[55.975683593750006,44.994921874999996],[55.97646484375002,43.388085937499994],[55.97744140625002,41.322216796875],[57.01796875000002,41.263476562499996],[56.96406250000001,41.85654296875],[57.38173828125002,42.156298828124996],[57.81425781250002,42.189843749999994],[58.25966796875002,42.6880859375],[58.58906250000001,42.778466796874994],[59.45107421875002,42.29951171875],[59.85830078125002,42.295166015625],[60.10693359375,41.907421875],[60.08964843750002,41.3994140625],[60.45498046875002,41.221630859375],[61.32890625000002,41.195117187499996],[61.95351562500002,41.030615234375],[62.09501953125002,40.68330078125],[62.65068359375002,39.85849609375],[64.16279296875001,38.95361328125],[65.612890625,38.238574218749996],[65.85712890625001,38.26875],[66.62929687500002,37.932031249999994],[66.52226562500002,37.348486328125],[67.06884765625,37.334814453125],[67.75898437500001,37.172216796875],[67.81435546875002,37.48701171875],[68.29404296875,38.03291015625],[68.0478515625,38.669287109375],[68.103515625,38.96201171875],[67.67656250000002,39.00849609375],[67.349609375,39.242089843749994],[67.71904296875002,39.621386718749996],[68.46328125000002,39.53671875],[68.65253906250001,40.182666015624996],[69.22832031250002,40.18759765625],[69.20625000000001,40.566552734374994],[69.712890625,40.656982421875],[70.44150390625,41.0234375],[70.7509765625,40.739599609375],[70.38261718750002,40.453515624999994],[70.9580078125,40.2388671875],[71.69248046875,40.15234375],[73.112890625,40.786035156249994],[72.62041015625002,40.8837890625],[71.79248046875,41.413134765624996],[71.40839843750001,41.136035156249996],[70.78242187500001,41.262499999999996],[70.18095703125002,41.571435546874994],[70.84189453125,42.01962890625],[70.94677734375,42.248681640624994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Uzbekistan","SOV_A3":"UZB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Uzbekistan","ADM0_A3":"UZB","GEOU_DIF":0,"GEOUNIT":"Uzbekistan","GU_A3":"UZB","SU_DIF":0,"SUBUNIT":"Uzbekistan","SU_A3":"UZB","BRK_DIFF":0,"NAME":"Uzbekistan","NAME_LONG":"Uzbekistan","BRK_A3":"UZB","BRK_NAME":"Uzbekistan","BRK_GROUP":"","ABBREV":"Uzb.","POSTAL":"UZ","FORMAL_EN":"Republic of Uzbekistan","FORMAL_FR":"","NAME_CIAWF":"Uzbekistan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Uzbekistan","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":5,"MAPCOLOR13":4,"POP_EST":33580650,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":57921,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"UZ","ISO_A2":"UZ","ISO_A2_EH":"UZ","ISO_A3":"UZB","ISO_A3_EH":"UZB","ISO_N3":"860","ISO_N3_EH":"860","UN_A3":"860","WB_A2":"UZ","WB_A3":"UZB","WOE_ID":23424980,"WOE_ID_EH":23424980,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"UZB","ADM0_DIFF":"","ADM0_TLC":"UZB","ADM0_A3_US":"UZB","ADM0_A3_FR":"UZB","ADM0_A3_RU":"UZB","ADM0_A3_ES":"UZB","ADM0_A3_CN":"UZB","ADM0_A3_TW":"UZB","ADM0_A3_IN":"UZB","ADM0_A3_NP":"UZB","ADM0_A3_PK":"UZB","ADM0_A3_DE":"UZB","ADM0_A3_GB":"UZB","ADM0_A3_BR":"UZB","ADM0_A3_IL":"UZB","ADM0_A3_PS":"UZB","ADM0_A3_SA":"UZB","ADM0_A3_EG":"UZB","ADM0_A3_MA":"UZB","ADM0_A3_PT":"UZB","ADM0_A3_AR":"UZB","ADM0_A3_JP":"UZB","ADM0_A3_KO":"UZB","ADM0_A3_VN":"UZB","ADM0_A3_TR":"UZB","ADM0_A3_ID":"UZB","ADM0_A3_PL":"UZB","ADM0_A3_GR":"UZB","ADM0_A3_IT":"UZB","ADM0_A3_NL":"UZB","ADM0_A3_SE":"UZB","ADM0_A3_BD":"UZB","ADM0_A3_UA":"UZB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Central Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":5,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":64.005429,"LABEL_Y":41.693603,"NE_ID":1159321405,"WIKIDATAID":"Q265","NAME_AR":"أوزبكستان","NAME_BN":"উজবেকিস্তান","NAME_DE":"Usbekistan","NAME_EN":"Uzbekistan","NAME_ES":"Uzbekistán","NAME_FA":"ازبکستان","NAME_FR":"Ouzbékistan","NAME_EL":"Ουζμπεκιστάν","NAME_HE":"אוזבקיסטן","NAME_HI":"उज़्बेकिस्तान","NAME_HU":"Üzbegisztán","NAME_ID":"Uzbekistan","NAME_IT":"Uzbekistan","NAME_JA":"ウズベキスタン","NAME_KO":"우즈베키스탄","NAME_NL":"Oezbekistan","NAME_PL":"Uzbekistan","NAME_PT":"Uzbequistão","NAME_RU":"Узбекистан","NAME_SV":"Uzbekistan","NAME_TR":"Özbekistan","NAME_UK":"Узбекистан","NAME_UR":"ازبکستان","NAME_VI":"Uzbekistan","NAME_ZH":"乌兹别克斯坦","NAME_ZHT":"烏茲別克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-53.37060546875,-33.7421875],[-53.53134765624999,-33.1708984375],[-53.12558593749999,-32.73671875000001],[-53.601708984374994,-32.40302734375001],[-53.76171875,-32.05683593750001],[-54.22055664062499,-31.85517578125001],[-54.587646484375,-31.485156250000003],[-55.254638671875,-31.2255859375],[-55.55732421875,-30.8759765625],[-55.873681640624994,-31.069628906250003],[-56.176171874999994,-30.62841796875],[-56.83271484375,-30.107226562500003],[-57.21445312499999,-30.28339843750001],[-57.60888671875,-30.187792968750003],[-57.872509765625,-30.59101562500001],[-57.81059570312499,-30.85859375000001],[-58.18901367187499,-31.92421875000001],[-58.201171875,-32.4716796875],[-58.08232421874999,-32.893652343750006],[-58.35336914062499,-33.26005859375],[-58.40019531249999,-33.91240234375],[-57.8291015625,-34.47734375],[-57.17070312499999,-34.45234375000001],[-56.85517578125,-34.67666015625001],[-56.117919921875,-34.90791015625001],[-55.67314453124999,-34.77568359375],[-54.902294921875,-34.93281250000001],[-54.16855468749999,-34.670703125],[-53.785302734374994,-34.38037109375],[-53.37060546875,-33.7421875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Uruguay","SOV_A3":"URY","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Uruguay","ADM0_A3":"URY","GEOU_DIF":0,"GEOUNIT":"Uruguay","GU_A3":"URY","SU_DIF":0,"SUBUNIT":"Uruguay","SU_A3":"URY","BRK_DIFF":0,"NAME":"Uruguay","NAME_LONG":"Uruguay","BRK_A3":"URY","BRK_NAME":"Uruguay","BRK_GROUP":"","ABBREV":"Ury.","POSTAL":"UY","FORMAL_EN":"Oriental Republic of Uruguay","FORMAL_FR":"","NAME_CIAWF":"Uruguay","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Uruguay","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":10,"POP_EST":3461734,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":56045,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"UY","ISO_A2":"UY","ISO_A2_EH":"UY","ISO_A3":"URY","ISO_A3_EH":"URY","ISO_N3":"858","ISO_N3_EH":"858","UN_A3":"858","WB_A2":"UY","WB_A3":"URY","WOE_ID":23424979,"WOE_ID_EH":23424979,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"URY","ADM0_DIFF":"","ADM0_TLC":"URY","ADM0_A3_US":"URY","ADM0_A3_FR":"URY","ADM0_A3_RU":"URY","ADM0_A3_ES":"URY","ADM0_A3_CN":"URY","ADM0_A3_TW":"URY","ADM0_A3_IN":"URY","ADM0_A3_NP":"URY","ADM0_A3_PK":"URY","ADM0_A3_DE":"URY","ADM0_A3_GB":"URY","ADM0_A3_BR":"URY","ADM0_A3_IL":"URY","ADM0_A3_PS":"URY","ADM0_A3_SA":"URY","ADM0_A3_EG":"URY","ADM0_A3_MA":"URY","ADM0_A3_PT":"URY","ADM0_A3_AR":"URY","ADM0_A3_JP":"URY","ADM0_A3_KO":"URY","ADM0_A3_VN":"URY","ADM0_A3_TR":"URY","ADM0_A3_ID":"URY","ADM0_A3_PL":"URY","ADM0_A3_GR":"URY","ADM0_A3_IT":"URY","ADM0_A3_NL":"URY","ADM0_A3_SE":"URY","ADM0_A3_BD":"URY","ADM0_A3_UA":"URY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-55.966942,"LABEL_Y":-32.961127,"NE_ID":1159321353,"WIKIDATAID":"Q77","NAME_AR":"الأوروغواي","NAME_BN":"উরুগুয়ে","NAME_DE":"Uruguay","NAME_EN":"Uruguay","NAME_ES":"Uruguay","NAME_FA":"اروگوئه","NAME_FR":"Uruguay","NAME_EL":"Ουρουγουάη","NAME_HE":"אורוגוואי","NAME_HI":"उरुग्वे","NAME_HU":"Uruguay","NAME_ID":"Uruguay","NAME_IT":"Uruguay","NAME_JA":"ウルグアイ","NAME_KO":"우루과이","NAME_NL":"Uruguay","NAME_PL":"Urugwaj","NAME_PT":"Uruguai","NAME_RU":"Уругвай","NAME_SV":"Uruguay","NAME_TR":"Uruguay","NAME_UK":"Уругвай","NAME_UR":"یوراگوئے","NAME_VI":"Uruguay","NAME_ZH":"乌拉圭","NAME_ZHT":"烏拉圭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Federated States of Micronesia","SOV_A3":"FSM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Federated States of Micronesia","ADM0_A3":"FSM","GEOU_DIF":0,"GEOUNIT":"Federated States of Micronesia","GU_A3":"FSM","SU_DIF":0,"SUBUNIT":"Federated States of Micronesia","SU_A3":"FSM","BRK_DIFF":0,"NAME":"Micronesia","NAME_LONG":"Federated States of Micronesia","BRK_A3":"FSM","BRK_NAME":"Micronesia","BRK_GROUP":"","ABBREV":"F.S.M.","POSTAL":"FSM","FORMAL_EN":"Federated States of Micronesia","FORMAL_FR":"","NAME_CIAWF":"Micronesia, Federated States of","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Micronesia, Federated States of","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":2,"MAPCOLOR9":4,"MAPCOLOR13":13,"POP_EST":113815,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":401,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"FM","ISO_A2":"FM","ISO_A2_EH":"FM","ISO_A3":"FSM","ISO_A3_EH":"FSM","ISO_N3":"583","ISO_N3_EH":"583","UN_A3":"583","WB_A2":"FM","WB_A3":"FSM","WOE_ID":23424815,"WOE_ID_EH":23424815,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"FSM","ADM0_DIFF":"","ADM0_TLC":"FSM","ADM0_A3_US":"FSM","ADM0_A3_FR":"FSM","ADM0_A3_RU":"FSM","ADM0_A3_ES":"FSM","ADM0_A3_CN":"FSM","ADM0_A3_TW":"FSM","ADM0_A3_IN":"FSM","ADM0_A3_NP":"FSM","ADM0_A3_PK":"FSM","ADM0_A3_DE":"FSM","ADM0_A3_GB":"FSM","ADM0_A3_BR":"FSM","ADM0_A3_IL":"FSM","ADM0_A3_PS":"FSM","ADM0_A3_SA":"FSM","ADM0_A3_EG":"FSM","ADM0_A3_MA":"FSM","ADM0_A3_PT":"FSM","ADM0_A3_AR":"FSM","ADM0_A3_JP":"FSM","ADM0_A3_KO":"FSM","ADM0_A3_VN":"FSM","ADM0_A3_TR":"FSM","ADM0_A3_ID":"FSM","ADM0_A3_PL":"FSM","ADM0_A3_GR":"FSM","ADM0_A3_IT":"FSM","ADM0_A3_NL":"FSM","ADM0_A3_SE":"FSM","ADM0_A3_BD":"FSM","ADM0_A3_UA":"FSM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":10,"LONG_LEN":30,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":158.234019,"LABEL_Y":6.887553,"NE_ID":1159320691,"WIKIDATAID":"Q702","NAME_AR":"ولايات ميكرونيسيا المتحدة","NAME_BN":"মাইক্রোনেশিয়া যুক্তরাজ্য","NAME_DE":"Föderierte Staaten von Mikronesien","NAME_EN":"Federated States of Micronesia","NAME_ES":"Estados Federados de Micronesia","NAME_FA":"میکرونزی","NAME_FR":"États fédérés de Micronésie","NAME_EL":"Ομόσπονδες Πολιτείες της Μικρονησίας","NAME_HE":"מיקרונזיה","NAME_HI":"माइक्रोनेशिया के संघीकृत राज्य","NAME_HU":"Mikronéziai Szövetségi Államok","NAME_ID":"Mikronesia","NAME_IT":"Stati Federati di Micronesia","NAME_JA":"ミクロネシア連邦","NAME_KO":"미크로네시아 연방","NAME_NL":"Micronesia","NAME_PL":"Mikronezja","NAME_PT":"Micronésia","NAME_RU":"Микронезия","NAME_SV":"Mikronesiska federationen","NAME_TR":"Mikronezya","NAME_UK":"Мікронезія","NAME_UR":"مائیکرونیشیا","NAME_VI":"Micronesia","NAME_ZH":"密克罗尼西亚联邦","NAME_ZHT":"密克羅尼西亞聯邦","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":6,"SOVEREIGNT":"Marshall Islands","SOV_A3":"MHL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Marshall Islands","ADM0_A3":"MHL","GEOU_DIF":0,"GEOUNIT":"Marshall Islands","GU_A3":"MHL","SU_DIF":0,"SUBUNIT":"Marshall Islands","SU_A3":"MHL","BRK_DIFF":0,"NAME":"Marshall Is.","NAME_LONG":"Marshall Islands","BRK_A3":"MHL","BRK_NAME":"Marshall Is.","BRK_GROUP":"","ABBREV":"M. Is.","POSTAL":"MH","FORMAL_EN":"Republic of the Marshall Islands","FORMAL_FR":"","NAME_CIAWF":"Marshall Islands","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Marshall Islands","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":5,"MAPCOLOR9":5,"MAPCOLOR13":3,"POP_EST":58791,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":221,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"RM","ISO_A2":"MH","ISO_A2_EH":"MH","ISO_A3":"MHL","ISO_A3_EH":"MHL","ISO_N3":"584","ISO_N3_EH":"584","UN_A3":"584","WB_A2":"MH","WB_A3":"MHL","WOE_ID":23424932,"WOE_ID_EH":23424932,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MHL","ADM0_DIFF":"","ADM0_TLC":"MHL","ADM0_A3_US":"MHL","ADM0_A3_FR":"MHL","ADM0_A3_RU":"MHL","ADM0_A3_ES":"MHL","ADM0_A3_CN":"MHL","ADM0_A3_TW":"MHL","ADM0_A3_IN":"MHL","ADM0_A3_NP":"MHL","ADM0_A3_PK":"MHL","ADM0_A3_DE":"MHL","ADM0_A3_GB":"MHL","ADM0_A3_BR":"MHL","ADM0_A3_IL":"MHL","ADM0_A3_PS":"MHL","ADM0_A3_SA":"MHL","ADM0_A3_EG":"MHL","ADM0_A3_MA":"MHL","ADM0_A3_PT":"MHL","ADM0_A3_AR":"MHL","ADM0_A3_JP":"MHL","ADM0_A3_KO":"MHL","ADM0_A3_VN":"MHL","ADM0_A3_TR":"MHL","ADM0_A3_ID":"MHL","ADM0_A3_PL":"MHL","ADM0_A3_GR":"MHL","ADM0_A3_IT":"MHL","ADM0_A3_NL":"MHL","ADM0_A3_SE":"MHL","ADM0_A3_BD":"MHL","ADM0_A3_UA":"MHL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":12,"LONG_LEN":16,"ABBREV_LEN":6,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":171.193609,"LABEL_Y":7.082568,"NE_ID":1159321057,"WIKIDATAID":"Q709","NAME_AR":"جزر مارشال","NAME_BN":"মার্শাল দ্বীপপুঞ্জ","NAME_DE":"Marshallinseln","NAME_EN":"Marshall Islands","NAME_ES":"Islas Marshall","NAME_FA":"جزایر مارشال","NAME_FR":"Îles Marshall","NAME_EL":"Νησιά Μάρσαλ","NAME_HE":"איי מרשל","NAME_HI":"मार्शल द्वीपसमूह","NAME_HU":"Marshall-szigetek","NAME_ID":"Kepulauan Marshall","NAME_IT":"Isole Marshall","NAME_JA":"マーシャル諸島","NAME_KO":"마셜 제도","NAME_NL":"Marshalleilanden","NAME_PL":"Wyspy Marshalla","NAME_PT":"Ilhas Marshall","NAME_RU":"Маршалловы Острова","NAME_SV":"Marshallöarna","NAME_TR":"Marshall Adaları","NAME_UK":"Маршаллові Острови","NAME_UR":"جزائر مارشل","NAME_VI":"Quần đảo Marshall","NAME_ZH":"马绍尔群岛","NAME_ZHT":"馬紹爾群島","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United States of America","SOV_A3":"US1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Northern Mariana Islands","ADM0_A3":"MNP","GEOU_DIF":0,"GEOUNIT":"Northern Mariana Islands","GU_A3":"MNP","SU_DIF":0,"SUBUNIT":"Northern Mariana Islands","SU_A3":"MNP","BRK_DIFF":0,"NAME":"N. Mariana Is.","NAME_LONG":"Northern Mariana Islands","BRK_A3":"MNP","BRK_NAME":"N. Mariana Is.","BRK_GROUP":"","ABBREV":"N.M.I.","POSTAL":"MP","FORMAL_EN":"Commonwealth of the Northern Mariana Islands","FORMAL_FR":"","NAME_CIAWF":"Northern Mariana Islands","NOTE_ADM0":"U.S.A.","NOTE_BRK":"","NAME_SORT":"Northern Mariana Islands","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":1,"POP_EST":57216,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":1323,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"CQ","ISO_A2":"MP","ISO_A2_EH":"MP","ISO_A3":"MNP","ISO_A3_EH":"MNP","ISO_N3":"580","ISO_N3_EH":"580","UN_A3":"580","WB_A2":"MP","WB_A3":"MNP","WOE_ID":23424788,"WOE_ID_EH":23424788,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MNP","ADM0_DIFF":"","ADM0_TLC":"MNP","ADM0_A3_US":"MNP","ADM0_A3_FR":"MNP","ADM0_A3_RU":"MNP","ADM0_A3_ES":"MNP","ADM0_A3_CN":"MNP","ADM0_A3_TW":"MNP","ADM0_A3_IN":"MNP","ADM0_A3_NP":"MNP","ADM0_A3_PK":"MNP","ADM0_A3_DE":"MNP","ADM0_A3_GB":"MNP","ADM0_A3_BR":"MNP","ADM0_A3_IL":"MNP","ADM0_A3_PS":"MNP","ADM0_A3_SA":"MNP","ADM0_A3_EG":"MNP","ADM0_A3_MA":"MNP","ADM0_A3_PT":"MNP","ADM0_A3_AR":"MNP","ADM0_A3_JP":"MNP","ADM0_A3_KO":"MNP","ADM0_A3_VN":"MNP","ADM0_A3_TR":"MNP","ADM0_A3_ID":"MNP","ADM0_A3_PL":"MNP","ADM0_A3_GR":"MNP","ADM0_A3_IT":"MNP","ADM0_A3_NL":"MNP","ADM0_A3_SE":"MNP","ADM0_A3_BD":"MNP","ADM0_A3_UA":"MNP","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":14,"LONG_LEN":24,"ABBREV_LEN":6,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":145.734397,"LABEL_Y":15.188188,"NE_ID":1159321361,"WIKIDATAID":"Q16644","NAME_AR":"جزر ماريانا الشمالية","NAME_BN":"উত্তর মারিয়ানা দ্বীপপুঞ্জ","NAME_DE":"Nördliche Marianen","NAME_EN":"Northern Mariana Islands","NAME_ES":"Islas Marianas del Norte","NAME_FA":"جزایر ماریانای شمالی","NAME_FR":"îles Mariannes du Nord","NAME_EL":"Βόρειες Μαριάνες Νήσοι","NAME_HE":"איי מריאנה הצפוניים","NAME_HI":"उत्तरी मारियाना द्वीप","NAME_HU":"Északi-Mariana-szigetek","NAME_ID":"Kepulauan Mariana Utara","NAME_IT":"Isole Marianne Settentrionali","NAME_JA":"北マリアナ諸島","NAME_KO":"북마리아나 제도","NAME_NL":"Noordelijke Marianen","NAME_PL":"Mariany Północne","NAME_PT":"Ilhas Marianas do Norte","NAME_RU":"Северные Марианские острова","NAME_SV":"Nordmarianerna","NAME_TR":"Kuzey Mariana Adaları","NAME_UK":"Північні Маріанські острови","NAME_UR":"جزائر شمالی ماریانا","NAME_VI":"Quần đảo Bắc Mariana","NAME_ZH":"北马里亚纳群岛","NAME_ZHT":"北馬里亞納群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United States of America","SOV_A3":"US1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"United States Virgin Islands","ADM0_A3":"VIR","GEOU_DIF":0,"GEOUNIT":"United States Virgin Islands","GU_A3":"VIR","SU_DIF":0,"SUBUNIT":"United States Virgin Islands","SU_A3":"VIR","BRK_DIFF":0,"NAME":"U.S. Virgin Is.","NAME_LONG":"United States Virgin Islands","BRK_A3":"VIR","BRK_NAME":"U.S. Virgin Is.","BRK_GROUP":"","ABBREV":"V.I. (U.S.)","POSTAL":"VI","FORMAL_EN":"Virgin Islands of the United States","FORMAL_FR":"","NAME_CIAWF":"Virgin Islands","NOTE_ADM0":"U.S.A.","NOTE_BRK":"","NAME_SORT":"Virgin Islands (U.S.)","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":1,"POP_EST":106631,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":3855,"GDP_YEAR":2017,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"VQ","ISO_A2":"VI","ISO_A2_EH":"VI","ISO_A3":"VIR","ISO_A3_EH":"VIR","ISO_N3":"850","ISO_N3_EH":"850","UN_A3":"850","WB_A2":"VI","WB_A3":"VIR","WOE_ID":23424985,"WOE_ID_EH":23424985,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VIR","ADM0_DIFF":"","ADM0_TLC":"VIR","ADM0_A3_US":"VIR","ADM0_A3_FR":"VIR","ADM0_A3_RU":"VIR","ADM0_A3_ES":"VIR","ADM0_A3_CN":"VIR","ADM0_A3_TW":"VIR","ADM0_A3_IN":"VIR","ADM0_A3_NP":"VIR","ADM0_A3_PK":"VIR","ADM0_A3_DE":"VIR","ADM0_A3_GB":"VIR","ADM0_A3_BR":"VIR","ADM0_A3_IL":"VIR","ADM0_A3_PS":"VIR","ADM0_A3_SA":"VIR","ADM0_A3_EG":"VIR","ADM0_A3_MA":"VIR","ADM0_A3_PT":"VIR","ADM0_A3_AR":"VIR","ADM0_A3_JP":"VIR","ADM0_A3_KO":"VIR","ADM0_A3_VN":"VIR","ADM0_A3_TR":"VIR","ADM0_A3_ID":"VIR","ADM0_A3_PL":"VIR","ADM0_A3_GR":"VIR","ADM0_A3_IT":"VIR","ADM0_A3_NL":"VIR","ADM0_A3_SE":"VIR","ADM0_A3_BD":"VIR","ADM0_A3_UA":"VIR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":15,"LONG_LEN":28,"ABBREV_LEN":11,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-64.779172,"LABEL_Y":17.746706,"NE_ID":1159321371,"WIKIDATAID":"Q11703","NAME_AR":"جزر العذراء الأمريكية","NAME_BN":"মার্কিন ভার্জিন দ্বীপপুঞ্জ","NAME_DE":"Amerikanische Jungferninseln","NAME_EN":"United States Virgin Islands","NAME_ES":"Islas Vírgenes de los Estados Unidos","NAME_FA":"جزایر ویرجین ایالات متحده","NAME_FR":"îles Vierges des États-Unis","NAME_EL":"Αμερικανικές Παρθένοι Νήσοι","NAME_HE":"איי הבתולה של ארצות הברית","NAME_HI":"संयुक्त राज्य वर्जिन द्वीपसमूह","NAME_HU":"Amerikai Virgin-szigetek","NAME_ID":"Kepulauan Virgin Amerika Serikat","NAME_IT":"Isole Vergini americane","NAME_JA":"アメリカ領ヴァージン諸島","NAME_KO":"미국령 버진아일랜드","NAME_NL":"Amerikaanse Maagdeneilanden","NAME_PL":"Wyspy Dziewicze Stanów Zjednoczonych","NAME_PT":"Ilhas Virgens Americanas","NAME_RU":"Американские Виргинские острова","NAME_SV":"Amerikanska Jungfruöarna","NAME_TR":"ABD Virjin Adaları","NAME_UK":"Американські Віргінські Острови","NAME_UR":"امریکی جزائر ورجن","NAME_VI":"Quần đảo Virgin thuộc Mỹ","NAME_ZH":"美属维尔京群岛","NAME_ZHT":"美屬維京群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United States of America","SOV_A3":"US1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Guam","ADM0_A3":"GUM","GEOU_DIF":0,"GEOUNIT":"Guam","GU_A3":"GUM","SU_DIF":0,"SUBUNIT":"Guam","SU_A3":"GUM","BRK_DIFF":0,"NAME":"Guam","NAME_LONG":"Guam","BRK_A3":"GUM","BRK_NAME":"Guam","BRK_GROUP":"","ABBREV":"Guam","POSTAL":"GU","FORMAL_EN":"Territory of Guam","FORMAL_FR":"","NAME_CIAWF":"Guam","NOTE_ADM0":"U.S.A.","NOTE_BRK":"","NAME_SORT":"Guam","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":1,"POP_EST":167294,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":5920,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"GQ","ISO_A2":"GU","ISO_A2_EH":"GU","ISO_A3":"GUM","ISO_A3_EH":"GUM","ISO_N3":"316","ISO_N3_EH":"316","UN_A3":"316","WB_A2":"GU","WB_A3":"GUM","WOE_ID":23424832,"WOE_ID_EH":23424832,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GUM","ADM0_DIFF":"","ADM0_TLC":"GUM","ADM0_A3_US":"GUM","ADM0_A3_FR":"GUM","ADM0_A3_RU":"GUM","ADM0_A3_ES":"GUM","ADM0_A3_CN":"GUM","ADM0_A3_TW":"GUM","ADM0_A3_IN":"GUM","ADM0_A3_NP":"GUM","ADM0_A3_PK":"GUM","ADM0_A3_DE":"GUM","ADM0_A3_GB":"GUM","ADM0_A3_BR":"GUM","ADM0_A3_IL":"GUM","ADM0_A3_PS":"GUM","ADM0_A3_SA":"GUM","ADM0_A3_EG":"GUM","ADM0_A3_MA":"GUM","ADM0_A3_PT":"GUM","ADM0_A3_AR":"GUM","ADM0_A3_JP":"GUM","ADM0_A3_KO":"GUM","ADM0_A3_VN":"GUM","ADM0_A3_TR":"GUM","ADM0_A3_ID":"GUM","ADM0_A3_PL":"GUM","ADM0_A3_GR":"GUM","ADM0_A3_IT":"GUM","ADM0_A3_NL":"GUM","ADM0_A3_SE":"GUM","ADM0_A3_BD":"GUM","ADM0_A3_UA":"GUM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":2,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":10,"LABEL_X":144.703614,"LABEL_Y":13.354173,"NE_ID":1159321359,"WIKIDATAID":"Q16635","NAME_AR":"غوام","NAME_BN":"গুয়াম","NAME_DE":"Guam","NAME_EN":"Guam","NAME_ES":"Guam","NAME_FA":"گوآم","NAME_FR":"Guam","NAME_EL":"Γκουάμ","NAME_HE":"גואם","NAME_HI":"गुआम","NAME_HU":"Guam","NAME_ID":"Guam","NAME_IT":"Guam","NAME_JA":"グアム","NAME_KO":"괌","NAME_NL":"Guam","NAME_PL":"Guam","NAME_PT":"Guam","NAME_RU":"Гуам","NAME_SV":"Guam","NAME_TR":"Guam","NAME_UK":"Гуам","NAME_UR":"گوام","NAME_VI":"Guam","NAME_ZH":"关岛","NAME_ZHT":"關島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"United States of America","SOV_A3":"US1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"American Samoa","ADM0_A3":"ASM","GEOU_DIF":0,"GEOUNIT":"American Samoa","GU_A3":"ASM","SU_DIF":0,"SUBUNIT":"American Samoa","SU_A3":"ASM","BRK_DIFF":0,"NAME":"American Samoa","NAME_LONG":"American Samoa","BRK_A3":"ASM","BRK_NAME":"American Samoa","BRK_GROUP":"","ABBREV":"Am. Samoa","POSTAL":"AS","FORMAL_EN":"American Samoa","FORMAL_FR":"","NAME_CIAWF":"American Samoa","NOTE_ADM0":"U.S.A.","NOTE_BRK":"","NAME_SORT":"American Samoa","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":1,"POP_EST":55312,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":636,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"AQ","ISO_A2":"AS","ISO_A2_EH":"AS","ISO_A3":"ASM","ISO_A3_EH":"ASM","ISO_N3":"016","ISO_N3_EH":"016","UN_A3":"016","WB_A2":"AS","WB_A3":"ASM","WOE_ID":23424746,"WOE_ID_EH":23424746,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ASM","ADM0_DIFF":"","ADM0_TLC":"ASM","ADM0_A3_US":"ASM","ADM0_A3_FR":"ASM","ADM0_A3_RU":"ASM","ADM0_A3_ES":"ASM","ADM0_A3_CN":"ASM","ADM0_A3_TW":"ASM","ADM0_A3_IN":"ASM","ADM0_A3_NP":"ASM","ADM0_A3_PK":"ASM","ADM0_A3_DE":"ASM","ADM0_A3_GB":"ASM","ADM0_A3_BR":"ASM","ADM0_A3_IL":"ASM","ADM0_A3_PS":"ASM","ADM0_A3_SA":"ASM","ADM0_A3_EG":"ASM","ADM0_A3_MA":"ASM","ADM0_A3_PT":"ASM","ADM0_A3_AR":"ASM","ADM0_A3_JP":"ASM","ADM0_A3_KO":"ASM","ADM0_A3_VN":"ASM","ADM0_A3_TR":"ASM","ADM0_A3_ID":"ASM","ADM0_A3_PL":"ASM","ADM0_A3_GR":"ASM","ADM0_A3_IT":"ASM","ADM0_A3_NL":"ASM","ADM0_A3_SE":"ASM","ADM0_A3_BD":"ASM","ADM0_A3_UA":"ASM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":14,"LONG_LEN":14,"ABBREV_LEN":9,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-170.747153,"LABEL_Y":-14.32671,"NE_ID":1159321357,"WIKIDATAID":"Q16641","NAME_AR":"ساموا الأمريكية","NAME_BN":"মার্কিন সামোয়া","NAME_DE":"Amerikanisch-Samoa","NAME_EN":"American Samoa","NAME_ES":"Samoa Estadounidense","NAME_FA":"ساموآی آمریکا","NAME_FR":"Samoa américaines","NAME_EL":"Αμερικανική Σαμόα","NAME_HE":"סמואה האמריקנית","NAME_HI":"अमेरिकी समोआ","NAME_HU":"Amerikai Szamoa","NAME_ID":"Samoa Amerika","NAME_IT":"Samoa Americane","NAME_JA":"アメリカ領サモア","NAME_KO":"아메리칸사모아","NAME_NL":"Amerikaans-Samoa","NAME_PL":"Samoa Amerykańskie","NAME_PT":"Samoa Americana","NAME_RU":"Американское Самоа","NAME_SV":"Amerikanska Samoa","NAME_TR":"Amerikan Samoası","NAME_UK":"Східне Самоа","NAME_UR":"امریکی سمووا","NAME_VI":"Samoa thuộc Mỹ","NAME_ZH":"美属萨摩亚","NAME_ZHT":"美屬薩摩亞","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-66.12939453125,18.44492187499999],[-67.158642578125,18.499218749999997],[-67.19687499999999,17.994189453125003],[-65.97080078124999,17.974365234375],[-65.62880859375,18.381396484375003],[-66.12939453125,18.44492187499999]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"United States of America","SOV_A3":"US1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Puerto Rico","ADM0_A3":"PRI","GEOU_DIF":0,"GEOUNIT":"Puerto Rico","GU_A3":"PRI","SU_DIF":0,"SUBUNIT":"Puerto Rico","SU_A3":"PRI","BRK_DIFF":0,"NAME":"Puerto Rico","NAME_LONG":"Puerto Rico","BRK_A3":"PRI","BRK_NAME":"Puerto Rico","BRK_GROUP":"","ABBREV":"P.R.","POSTAL":"PR","FORMAL_EN":"Commonwealth of Puerto Rico","FORMAL_FR":"","NAME_CIAWF":"Puerto Rico","NOTE_ADM0":"U.S.A.","NOTE_BRK":"","NAME_SORT":"Puerto Rico","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":1,"POP_EST":3193694,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":104988,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"RQ","ISO_A2":"PR","ISO_A2_EH":"PR","ISO_A3":"PRI","ISO_A3_EH":"PRI","ISO_N3":"630","ISO_N3_EH":"630","UN_A3":"630","WB_A2":"PR","WB_A3":"PRI","WOE_ID":23424935,"WOE_ID_EH":23424935,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PRI","ADM0_DIFF":"","ADM0_TLC":"PRI","ADM0_A3_US":"PRI","ADM0_A3_FR":"PRI","ADM0_A3_RU":"PRI","ADM0_A3_ES":"PRI","ADM0_A3_CN":"PRI","ADM0_A3_TW":"PRI","ADM0_A3_IN":"PRI","ADM0_A3_NP":"PRI","ADM0_A3_PK":"PRI","ADM0_A3_DE":"PRI","ADM0_A3_GB":"PRI","ADM0_A3_BR":"PRI","ADM0_A3_IL":"PRI","ADM0_A3_PS":"PRI","ADM0_A3_SA":"PRI","ADM0_A3_EG":"PRI","ADM0_A3_MA":"PRI","ADM0_A3_PT":"PRI","ADM0_A3_AR":"PRI","ADM0_A3_JP":"PRI","ADM0_A3_KO":"PRI","ADM0_A3_VN":"PRI","ADM0_A3_TR":"PRI","ADM0_A3_ID":"PRI","ADM0_A3_PL":"PRI","ADM0_A3_GR":"PRI","ADM0_A3_IT":"PRI","ADM0_A3_NL":"PRI","ADM0_A3_SE":"PRI","ADM0_A3_BD":"PRI","ADM0_A3_UA":"PRI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-66.481065,"LABEL_Y":18.234668,"NE_ID":1159321363,"WIKIDATAID":"Q1183","NAME_AR":"بورتوريكو","NAME_BN":"পুয়ের্তো রিকো","NAME_DE":"Puerto Rico","NAME_EN":"Puerto Rico","NAME_ES":"Puerto Rico","NAME_FA":"پورتوریکو","NAME_FR":"Porto Rico","NAME_EL":"Πουέρτο Ρίκο","NAME_HE":"פוארטו ריקו","NAME_HI":"पोर्टो रीको","NAME_HU":"Puerto Rico","NAME_ID":"Puerto Riko","NAME_IT":"Porto Rico","NAME_JA":"プエルトリコ","NAME_KO":"푸에르토리코","NAME_NL":"Puerto Rico","NAME_PL":"Portoryko","NAME_PT":"Porto Rico","NAME_RU":"Пуэрто-Рико","NAME_SV":"Puerto Rico","NAME_TR":"Porto Riko","NAME_UK":"Пуерто-Рико","NAME_UR":"پورٹو ریکو","NAME_VI":"Puerto Rico","NAME_ZH":"波多黎各","NAME_ZHT":"波多黎各","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-171.463037109375,63.640039062499994],[-169.777783203125,63.09375],[-170.430419921875,63.698828125],[-171.463037109375,63.640039062499994]]],[[[-166.13544921875,60.383544921875],[-167.1388671875,60.008544921875],[-166.187548828125,59.773828124999994],[-165.591796875,59.913134765625],[-165.7296875,60.314208984375],[-166.13544921875,60.383544921875]]],[[[-152.898046875,57.82392578125],[-153.818359375,57.59560546875],[-154.2814453125,57.6380859375],[-154.70595703125,57.3353515625],[-154.33896484375,56.9208984375],[-153.793212890625,56.989501953125],[-152.2162109375,57.577001953125],[-152.898046875,57.82392578125]]],[[[-130.02509765625,55.8882324218751],[-130.74169921875,56.3408203125],[-131.866162109375,56.792822265625],[-133.820751953125,58.705029296875],[-134.94375000000002,59.28828125000001],[-135.475927734375,59.79326171875],[-136.321826171875,59.604833984375],[-136.578759765625,59.152246093749994],[-137.43857421875,58.903125],[-137.593310546875,59.22626953125001],[-139.18515625,60.08359375],[-141.0021484375,60.300244140625125],[-141.0021484375,61.761279296875045],[-141.0021484375,64.39111328125006],[-141.0021484375,66.4365234375],[-141.0021484375,68.18974609375],[-141.0021484375,69.65078125],[-141.40791015625,69.653369140625],[-143.218310546875,70.116259765625],[-145.19736328125,70.00869140625],[-145.82314453125,70.16005859375],[-147.70537109375,70.217236328125],[-149.26943359375,70.50078125],[-151.944677734375,70.452099609375],[-152.23291015625,70.8103515625],[-153.23291015625,70.932568359375],[-154.19521484375,70.801123046875],[-155.166845703125,71.09921875],[-156.78330078125,71.3189453125],[-157.998486328125,70.8453125],[-159.314501953125,70.878515625],[-160.9962890625,70.30458984375],[-161.88095703125,70.33173828125],[-162.952099609375,69.75810546875],[-163.161474609375,69.387939453125],[-164.30234375,68.936474609375],[-166.20908203125,68.8853515625],[-166.380517578125,68.425146484375],[-164.1251953125,67.60673828125],[-163.720556640625,67.195556640625],[-163.001708984375,67.027294921875],[-161.9654296875,67.049560546875],[-161.856689453125,66.700341796875],[-160.864013671875,66.670849609375],[-160.231689453125,66.420263671875],[-161.5568359375,66.250537109375],[-161.81630859375,66.053662109375],[-163.695361328125,66.083837890625],[-163.77548828125,66.531103515625],[-164.67412109375,66.555029296875],[-168.08837890625,65.657763671875],[-167.40400390625,65.422119140625],[-166.1427734375,64.582763671875],[-164.89951171875,64.46064453125],[-163.7130859375,64.588232421875],[-162.80703125,64.37421875],[-161.759375,64.816259765625],[-160.93193359375,64.5791015625],[-160.778564453125,63.8189453125],[-161.09970703125,63.55791015625],[-161.973974609375,63.4529296875],[-163.358837890625,63.045751953125],[-164.409033203125,63.2150390625],[-165.19453125,62.473535156249994],[-166.07880859375,61.803124999999994],[-165.565869140625,61.10234375],[-164.80517578125,60.892041015625],[-165.35380859375,60.5412109375],[-164.662255859375,60.30380859375],[-163.906884765625,59.806787109374994],[-163.219384765625,59.845605468749994],[-162.24248046875,60.1783203125],[-161.8287109375,59.588623046875],[-161.75546875,58.61201171875],[-160.363134765625,59.051171874999994],[-159.670263671875,58.9111328125],[-159.082666015625,58.469775390625],[-158.503173828125,58.850341796875],[-157.5236328125,58.421337890625],[-157.607568359375,57.60146484375],[-158.320947265625,57.297900390624996],[-159.28310546875,56.68857421875],[-160.30205078125,56.314111328125],[-160.851318359375,55.771875],[-161.215625,56.021435546875],[-162.15712890625,55.71943359375],[-162.961962890625,55.183837890625],[-162.8650390625,54.954541015625],[-162.073974609375,55.139306640625],[-161.741552734375,55.391162109374996],[-161.09951171875,55.405712890625],[-159.9623046875,55.794873046875],[-159.5232421875,55.810009765625],[-158.275634765625,56.196240234375],[-158.414404296875,56.435839843749996],[-157.578369140625,56.63447265625],[-156.475146484375,57.10517578125],[-156.47841796875,57.327880859375],[-155.006884765625,58.016064453125],[-154.247021484375,58.159423828125],[-154.019873046875,58.49296875],[-153.334423828125,58.857861328125],[-154.129833984375,59.119873046875],[-154.088330078125,59.36328125],[-153.1060546875,59.875048828125],[-151.75048828125,60.7548828125],[-151.733984375,60.9107421875],[-150.612255859375,61.301123046875],[-150.441259765625,61.023583984374994],[-151.32177734375,60.742919921875],[-151.45146484375,60.20263671875],[-151.734521484375,59.988330078125],[-151.73818359375,59.188525390625],[-150.9607421875,59.243994140625],[-149.4322265625,60.001025390625],[-148.430712890625,59.989111328125],[-148.197607421875,60.1677734375],[-148.34443359375,60.853564453125],[-146.8740234375,61.0048828125],[-145.898876953125,60.478173828124994],[-144.901318359375,60.33515625],[-143.805078125,60.012890625],[-142.945654296875,60.09697265625],[-141.670166015625,59.969873046874994],[-140.8431640625,59.748876953125],[-140.216748046875,59.72666015625],[-138.352490234375,59.087304687499994],[-137.543994140625,58.581201171874994],[-136.5826171875,58.24521484375],[-135.86171875,58.577050781249994],[-135.3025390625,58.255908203125],[-134.776123046875,58.453857421875],[-134.063330078125,58.211083984374994],[-133.55419921875,57.695068359375],[-133.465869140625,57.172167968749996],[-132.8142578125,57.04072265625],[-131.84384765625,56.160107421875],[-130.9185546875,55.735986328125],[-131.0478515625,55.157666015625],[-130.575341796875,54.769677734375],[-130.2140625,55.02587890625],[-130.036572265625,55.297900390624996],[-130.02509765625,55.8882324218751]]],[[[-163.476025390625,54.980712890625],[-164.52978515625,54.880859375],[-164.887646484375,54.6078125],[-164.4634765625,54.42734375],[-163.35810546875,54.735693359375],[-163.476025390625,54.980712890625]]],[[[-130.979150390625,55.48916015625],[-131.624951171875,55.831689453125],[-131.810986328125,55.223095703125],[-131.082763671875,55.266796875],[-130.979150390625,55.48916015625]]],[[[-133.3662109375,57.003515625],[-133.865966796875,57.068701171875],[-133.602783203125,56.464111328125],[-133.212646484375,56.464599609375],[-132.954150390625,56.8802734375],[-133.3662109375,57.003515625]]],[[[-134.969775390625,57.351416015625],[-135.787109375,57.31728515625],[-134.620703125,56.718310546874996],[-134.969775390625,57.351416015625]]],[[[-134.6802734375,58.161669921875],[-134.65986328125,57.6380859375],[-134.435302734375,57.056982421875],[-133.92529296875,57.336767578125],[-133.93701171875,57.581591796874996],[-134.6802734375,58.161669921875]]],[[[-135.73037109375,58.24423828125],[-136.5123046875,58.09599609375],[-136.076611328125,57.674560546875],[-135.08486328125,57.511035156249996],[-135.002099609375,58.05107421875],[-135.73037109375,58.24423828125]]],[[[-133.56611328125,56.339208984375],[-133.44697265625,55.797021484375],[-132.78232421875,55.048486328125],[-131.980859375,54.804833984375],[-131.976416015625,55.20859375],[-133.202978515625,56.31982421875],[-133.56611328125,56.339208984375]]],[[[-155.58134765625,19.012011718750003],[-154.80419921875,19.524462890625003],[-155.198779296875,19.994384765625],[-155.831640625,20.275830078124997],[-156.048681640625,19.749951171874997],[-155.881298828125,19.070507812499997],[-155.58134765625,19.012011718750003]]],[[[-74.70888671875002,45.003857421875125],[-75.17939453125001,44.899365234375125],[-76.464599609375,44.0576171875],[-76.81997070312502,43.62880859375008],[-78.72041015625,43.624951171875],[-79.171875,43.466552734375114],[-79.03671874999999,42.80234375],[-80.24755859375,42.366015624999996],[-81.27763671874999,42.2091796875],[-82.43906249999999,41.674853515624996],[-83.14194335937499,41.975878906249996],[-83.07314453125,42.30029296875],[-82.5453125,42.62470703125],[-82.13784179687502,43.570898437500034],[-82.55107421874999,45.34736328125],[-83.59267578125002,45.81713867187506],[-83.977783203125,46.084912109375],[-84.19218749999999,46.549560546875],[-84.561767578125,46.457373046875],[-84.8759765625,46.89990234375],[-88.378173828125,48.30307617187509],[-89.45566406249999,47.996240234374994],[-90.84033203125,48.20053710937498],[-91.518310546875,48.058300781250125],[-92.996240234375,48.61181640625],[-93.70771484375,48.525439453124996],[-94.62089843749999,48.742626953125],[-95.162060546875,48.991748046874996],[-96.67705078124999,48.9931640625],[-99.2353515625,48.993115234375],[-101.36728515624999,48.993115234375],[-103.49916992187502,48.993115234375125],[-105.631103515625,48.993115234375125],[-107.76298828125,48.993115234375],[-111.174072265625,48.993066406249994],[-113.30595703125,48.993066406249994],[-115.437890625,48.993066406249994],[-117.569775390625,48.993066406249994],[-119.70170898437499,48.993017578125],[-122.78876953125,48.993017578125],[-122.24199218749999,48.0107421875],[-123.97578125,48.16845703125],[-124.63261718749999,48.375048828124996],[-124.62109375,47.904150390625],[-124.37602539062499,47.658642578125],[-124.0716796875,46.744775390624994],[-123.929345703125,45.576953124999996],[-124.14873046874999,43.691748046875],[-124.5396484375,42.812890624999994],[-124.068505859375,41.384179687499994],[-124.3716796875,40.4912109375],[-124.32402343749999,40.251953125],[-123.88447265625,39.860791015625],[-123.701123046875,38.907275390624996],[-122.46689453125,37.838183593749996],[-122.394921875,37.20751953125],[-121.789990234375,36.732275390625],[-121.877392578125,36.3310546875],[-120.63359374999999,35.076464843749996],[-120.644677734375,34.579980468749994],[-120.481201171875,34.471630859375],[-119.6060546875,34.418017578124996],[-119.14375,34.11201171875],[-118.506201171875,34.017382812499996],[-117.467431640625,33.2955078125],[-117.128271484375,32.533349609374994],[-114.724755859375,32.71533203125],[-114.8359375,32.50830078125],[-112.93896484375,31.916259765625],[-111.0419921875,31.32421875],[-108.21445312499999,31.329443359375],[-108.21181640625,31.779345703124996],[-106.45322265624999,31.770166015624994],[-106.25571289062499,31.544677734375],[-104.97880859375,30.645947265624997],[-104.400634765625,29.57373046875],[-103.25771484375,29.001123046874994],[-102.8919921875,29.21640625],[-102.73417968749999,29.643945312499994],[-102.2689453125,29.87119140625],[-101.440380859375,29.77685546875],[-100.658642578125,29.068554687499997],[-100.296044921875,28.327685546874996],[-99.505322265625,27.54833984375],[-99.4435546875,27.036669921874996],[-99.10776367187499,26.446923828124994],[-98.08281249999999,26.064453125],[-97.358154296875,25.870507812499994],[-97.146240234375,25.961474609375003],[-97.40234375,26.396533203124996],[-97.5546875,26.967333984374996],[-97.17143554687499,27.879589843749997],[-97.156494140625,28.144335937499996],[-96.56171875,28.367138671874997],[-96.44873046875,28.594482421875],[-95.85341796875,28.640332031249997],[-95.27348632812499,28.9638671875],[-94.88828124999999,29.370556640624997],[-93.69482421875,29.769921874999994],[-93.17568359375,29.778955078124994],[-92.26083984374999,29.556835937499997],[-91.89316406249999,29.83603515625],[-91.33095703125,29.513574218749994],[-91.29013671874999,29.288964843749994],[-90.75102539062499,29.130859375],[-90.37919921874999,29.295117187499997],[-90.10136718749999,29.181787109374994],[-89.589501953125,29.9150390625],[-90.413037109375,30.140332031249997],[-90.22529296875,30.379296874999994],[-89.58847656249999,30.165966796874997],[-88.905224609375,30.41513671875],[-87.790283203125,30.291796874999996],[-86.25737304687499,30.493017578125],[-85.35361328124999,29.875732421875],[-85.31894531249999,29.680224609374996],[-84.3828125,29.907373046874994],[-84.04423828124999,30.103808593749996],[-83.69438476562499,29.925976562499997],[-83.290478515625,29.451904296875],[-82.65146484374999,28.887499999999996],[-82.66064453125,28.48583984375],[-82.843505859375,27.845996093749996],[-82.660888671875,27.718408203124994],[-82.441357421875,27.05966796875],[-81.86655273437499,26.435009765624997],[-81.715478515625,25.983154296875],[-81.36494140625,25.8310546875],[-81.09765625,25.319140625000003],[-80.7365234375,25.15634765624999],[-80.366943359375,25.331249999999997],[-80.1263671875,25.83349609375],[-80.04130859374999,26.568603515625],[-80.22612304687499,27.20703125],[-80.65009765625,28.180908203125],[-80.52412109375,28.486083984375],[-80.89999999999999,29.049853515624996],[-81.24951171875,29.793798828125],[-81.52041015625,30.874658203124994],[-80.84921874999999,32.113916015624994],[-79.276025390625,33.135400390624994],[-78.9203125,33.65869140625],[-78.57768554687499,33.8732421875],[-78.013330078125,33.91181640625],[-77.750732421875,34.284960937499996],[-76.74497070312499,34.940966796874996],[-76.512939453125,35.270410156249994],[-75.77392578125,35.64697265625],[-75.772216796875,35.89990234375],[-76.47880859374999,36.028173828125],[-75.89042968749999,36.657031249999996],[-76.26347656249999,37.35703125],[-76.26425781249999,37.8935546875],[-76.50131835937499,38.532177734375],[-75.65927734374999,37.953955078125],[-75.035888671875,38.503320312499994],[-75.39218749999999,39.0927734375],[-74.89702148437499,39.145458984375],[-74.42880859374999,39.38720703125],[-74.17612304687499,39.726611328124996],[-73.95761718749999,40.328369140625],[-74.226708984375,40.6080078125],[-73.5830078125,41.021874999999994],[-72.84716796875,41.265869140625],[-71.5228515625,41.378955078124996],[-71.42656249999999,41.63330078125],[-70.65712890625,41.534228515624996],[-70.4046875,41.626904296875],[-70.73828125,42.228857421875],[-71.04619140624999,42.331103515624996],[-70.829052734375,42.825341796874994],[-70.17880859374999,43.766357421875],[-69.79160156249999,43.805224609374996],[-68.27744140624999,44.507373046874996],[-67.90703124999999,44.45361328125],[-67.10673828124999,44.885058593749996],[-67.12485351562499,45.16943359375],[-67.47255859375,45.27587890625],[-67.43266601562499,45.603125],[-67.78466796875,45.701708984374996],[-67.806787109375,47.082812499999996],[-68.31088867187499,47.3544921875],[-68.82871093749999,47.2033203125],[-69.24287109375,47.46298828125],[-70.00771484375,46.708935546875],[-70.29624023437499,45.906103515625],[-70.89799804687499,45.262451171875],[-71.327294921875,45.290087890624996],[-71.517529296875,45.007568359375],[-74.70888671875002,45.003857421875125]]],[[[-72.509765625,40.98603515625],[-73.57382812499999,40.91962890625],[-73.194287109375,40.654199218749994],[-72.509765625,40.98603515625]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":2,"SOVEREIGNT":"United States of America","SOV_A3":"US1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"United States of America","ADM0_A3":"USA","GEOU_DIF":0,"GEOUNIT":"United States of America","GU_A3":"USA","SU_DIF":0,"SUBUNIT":"United States","SU_A3":"USA","BRK_DIFF":0,"NAME":"United States of America","NAME_LONG":"United States","BRK_A3":"USA","BRK_NAME":"United States","BRK_GROUP":"","ABBREV":"U.S.A.","POSTAL":"US","FORMAL_EN":"United States of America","FORMAL_FR":"","NAME_CIAWF":"United States","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"United States of America","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":1,"POP_EST":328239523,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":21433226,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"US","ISO_A2":"US","ISO_A2_EH":"US","ISO_A3":"USA","ISO_A3_EH":"USA","ISO_N3":"840","ISO_N3_EH":"840","UN_A3":"840","WB_A2":"US","WB_A3":"USA","WOE_ID":23424977,"WOE_ID_EH":23424977,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"USA","ADM0_DIFF":"","ADM0_TLC":"USA","ADM0_A3_US":"USA","ADM0_A3_FR":"USA","ADM0_A3_RU":"USA","ADM0_A3_ES":"USA","ADM0_A3_CN":"USA","ADM0_A3_TW":"USA","ADM0_A3_IN":"USA","ADM0_A3_NP":"USA","ADM0_A3_PK":"USA","ADM0_A3_DE":"USA","ADM0_A3_GB":"USA","ADM0_A3_BR":"USA","ADM0_A3_IL":"USA","ADM0_A3_PS":"USA","ADM0_A3_SA":"USA","ADM0_A3_EG":"USA","ADM0_A3_MA":"USA","ADM0_A3_PT":"USA","ADM0_A3_AR":"USA","ADM0_A3_JP":"USA","ADM0_A3_KO":"USA","ADM0_A3_VN":"USA","ADM0_A3_TR":"USA","ADM0_A3_ID":"USA","ADM0_A3_PL":"USA","ADM0_A3_GR":"USA","ADM0_A3_IT":"USA","ADM0_A3_NL":"USA","ADM0_A3_SE":"USA","ADM0_A3_BD":"USA","ADM0_A3_UA":"USA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Northern America","REGION_WB":"North America","NAME_LEN":24,"LONG_LEN":13,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":5.7,"LABEL_X":-97.482602,"LABEL_Y":39.538479,"NE_ID":1159321369,"WIKIDATAID":"Q30","NAME_AR":"الولايات المتحدة","NAME_BN":"মার্কিন যুক্তরাষ্ট্র","NAME_DE":"Vereinigte Staaten","NAME_EN":"United States of America","NAME_ES":"Estados Unidos","NAME_FA":"ایالات متحده آمریکا","NAME_FR":"États-Unis","NAME_EL":"Ηνωμένες Πολιτείες Αμερικής","NAME_HE":"ארצות הברית","NAME_HI":"संयुक्त राज्य अमेरिका","NAME_HU":"Amerikai Egyesült Államok","NAME_ID":"Amerika Serikat","NAME_IT":"Stati Uniti d'America","NAME_JA":"アメリカ合衆国","NAME_KO":"미국","NAME_NL":"Verenigde Staten van Amerika","NAME_PL":"Stany Zjednoczone","NAME_PT":"Estados Unidos","NAME_RU":"США","NAME_SV":"USA","NAME_TR":"Amerika Birleşik Devletleri","NAME_UK":"Сполучені Штати Америки","NAME_UR":"ریاستہائے متحدہ امریکا","NAME_VI":"Hoa Kỳ","NAME_ZH":"美国","NAME_ZHT":"美國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-37.10332031249999,-54.06562500000001],[-36.08549804687499,-54.866796875000006],[-35.798583984375,-54.76347656250002],[-36.32646484374999,-54.25117187500001],[-37.10332031249999,-54.06562500000001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"South Georgia and the Islands","ADM0_A3":"SGS","GEOU_DIF":0,"GEOUNIT":"South Georgia and the Islands","GU_A3":"SGS","SU_DIF":0,"SUBUNIT":"South Georgia and the Islands","SU_A3":"SGS","BRK_DIFF":0,"NAME":"S. Geo. and the Is.","NAME_LONG":"South Georgia and the Islands","BRK_A3":"SGS","BRK_NAME":"S. Geo. and the Is.","BRK_GROUP":"","ABBREV":"S.G. & Is.","POSTAL":"GS","FORMAL_EN":"South Georgia and the Islands","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"South Georgia and the Islands","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":30,"POP_RANK":1,"POP_YEAR":2017,"GDP_MD":0,"GDP_YEAR":2016,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"SX","ISO_A2":"GS","ISO_A2_EH":"GS","ISO_A3":"SGS","ISO_A3_EH":"SGS","ISO_N3":"239","ISO_N3_EH":"239","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424955,"WOE_ID_EH":23424955,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SGS","ADM0_DIFF":"","ADM0_TLC":"SGS","ADM0_A3_US":"SGS","ADM0_A3_FR":"SGS","ADM0_A3_RU":"SGS","ADM0_A3_ES":"SGS","ADM0_A3_CN":"SGS","ADM0_A3_TW":"SGS","ADM0_A3_IN":"SGS","ADM0_A3_NP":"SGS","ADM0_A3_PK":"SGS","ADM0_A3_DE":"SGS","ADM0_A3_GB":"SGS","ADM0_A3_BR":"SGS","ADM0_A3_IL":"SGS","ADM0_A3_PS":"SGS","ADM0_A3_SA":"SGS","ADM0_A3_EG":"SGS","ADM0_A3_MA":"SGS","ADM0_A3_PT":"SGS","ADM0_A3_AR":"SGS","ADM0_A3_JP":"SGS","ADM0_A3_KO":"SGS","ADM0_A3_VN":"SGS","ADM0_A3_TR":"SGS","ADM0_A3_ID":"SGS","ADM0_A3_PL":"SGS","ADM0_A3_GR":"SGS","ADM0_A3_IT":"SGS","ADM0_A3_NL":"SGS","ADM0_A3_SE":"SGS","ADM0_A3_BD":"SGS","ADM0_A3_UA":"SGS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Americas","SUBREGION":"Seven seas (open ocean)","REGION_WB":"Antarctica","NAME_LEN":19,"LONG_LEN":29,"ABBREV_LEN":10,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9,"LABEL_X":-31.063179,"LABEL_Y":-55.683402,"NE_ID":1159320731,"WIKIDATAID":"Q35086","NAME_AR":"جورجيا الجنوبية وجزر ساندويتش الجنوبية","NAME_BN":"দক্ষিণ জর্জিয়া ও দক্ষিণ স্যন্ডউইচ দ্বীপপুঞ্জ","NAME_DE":"Südgeorgien und die Südlichen Sandwichinseln","NAME_EN":"South Georgia and the South Sandwich Islands","NAME_ES":"Islas Georgias del Sur y Sandwich del Sur","NAME_FA":"جزایر جورجیای جنوبی و ساندویچ جنوبی","NAME_FR":"Géorgie du Sud-et-les Îles Sandwich du Sud","NAME_EL":"Νήσοι Νότια Γεωργία και Νότιες Σάντουιτς","NAME_HE":"איי ג'ורג'יה הדרומית ואיי סנדוויץ' הדרומיים","NAME_HI":"दक्षिण जॉर्जिया एवं दक्षिण सैंडविच द्वीप समूह","NAME_HU":"Déli-Georgia és Déli-Sandwich-szigetek","NAME_ID":"Georgia Selatan dan Kepulauan Sandwich Selatan","NAME_IT":"Georgia del Sud e isole Sandwich meridionali","NAME_JA":"サウスジョージア・サウスサンドウィッチ諸島","NAME_KO":"사우스조지아 사우스샌드위치 제도","NAME_NL":"Zuid-Georgia en de Zuidelijke Sandwicheilanden","NAME_PL":"Georgia Południowa i Sandwich Południowy","NAME_PT":"Ilhas Geórgia do Sul e Sandwich do Sul","NAME_RU":"Южная Георгия и Южные Сандвичевы острова","NAME_SV":"Sydgeorgien och Sydsandwichöarna","NAME_TR":"Güney Georgia ve Güney Sandwich Adaları","NAME_UK":"Південна Джорджія та Південні Сандвічеві острови","NAME_UR":"جنوبی جارجیا و جزائر جنوبی سینڈوچ","NAME_VI":"Nam Georgia và Quần đảo Nam Sandwich","NAME_ZH":"南乔治亚和南桑威奇群岛","NAME_ZHT":"南喬治亞與南桑威奇","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"Unrecognized","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":5,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Disputed","TLC":"1","ADMIN":"British Indian Ocean Territory","ADM0_A3":"IOT","GEOU_DIF":0,"GEOUNIT":"British Indian Ocean Territory","GU_A3":"IOT","SU_DIF":0,"SUBUNIT":"British Indian Ocean Territory","SU_A3":"IOT","BRK_DIFF":1,"NAME":"Br. Indian Ocean Ter.","NAME_LONG":"British Indian Ocean Territory","BRK_A3":"B69","BRK_NAME":"Br. Indian Ocean Ter.","BRK_GROUP":"","ABBREV":"I.O.T.","POSTAL":"IO","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"U.K.","NOTE_BRK":"Admin. by U.K.; Claimed by Mauritius and Seychelles","NAME_SORT":"British Indian Ocean Territory","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":3000,"POP_RANK":4,"POP_YEAR":2018,"GDP_MD":120,"GDP_YEAR":2013,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"IO","ISO_A2":"IO","ISO_A2_EH":"IO","ISO_A3":"IOT","ISO_A3_EH":"IOT","ISO_N3":"086","ISO_N3_EH":"086","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424849,"WOE_ID_EH":23424849,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"B69","ADM0_DIFF":"","ADM0_TLC":"B69","ADM0_A3_US":"IOT","ADM0_A3_FR":"IOT","ADM0_A3_RU":"IOT","ADM0_A3_ES":"IOT","ADM0_A3_CN":"IOT","ADM0_A3_TW":"IOT","ADM0_A3_IN":"IOT","ADM0_A3_NP":"IOT","ADM0_A3_PK":"IOT","ADM0_A3_DE":"IOT","ADM0_A3_GB":"IOT","ADM0_A3_BR":"IOT","ADM0_A3_IL":"IOT","ADM0_A3_PS":"IOT","ADM0_A3_SA":"IOT","ADM0_A3_EG":"IOT","ADM0_A3_MA":"IOT","ADM0_A3_PT":"IOT","ADM0_A3_AR":"IOT","ADM0_A3_JP":"IOT","ADM0_A3_KO":"IOT","ADM0_A3_VN":"IOT","ADM0_A3_TR":"IOT","ADM0_A3_ID":"IOT","ADM0_A3_PL":"IOT","ADM0_A3_GR":"IOT","ADM0_A3_IT":"IOT","ADM0_A3_NL":"IOT","ADM0_A3_SE":"IOT","ADM0_A3_BD":"IOT","ADM0_A3_UA":"IOT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Africa","SUBREGION":"Seven seas (open ocean)","REGION_WB":"Sub-Saharan Africa","NAME_LEN":21,"LONG_LEN":30,"ABBREV_LEN":6,"TINY":5,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9.5,"LABEL_X":71.348349,"LABEL_Y":-6.190826,"NE_ID":1159320723,"WIKIDATAID":"Q43448","NAME_AR":"إقليم المحيط الهندي البريطاني","NAME_BN":"ব্রিটিশ ভারত মহাসাগরীয় এলাকা","NAME_DE":"Britisches Territorium im Indischen Ozean","NAME_EN":"British Indian Ocean Territory","NAME_ES":"Territorio Británico del Océano Índico","NAME_FA":"قلمرو بریتانیا در اقیانوس هند","NAME_FR":"Territoire britannique de l’océan Indien","NAME_EL":"Βρετανικό Έδαφος Ινδικού Ωκεανού","NAME_HE":"הטריטוריה הבריטית באוקיינוס ההודי","NAME_HI":"ब्रिटिश हिंद महासागर क्षेत्र","NAME_HU":"Brit Indiai-óceáni Terület","NAME_ID":"Wilayah Samudra Hindia Britania","NAME_IT":"Territorio britannico dell'oceano Indiano","NAME_JA":"イギリス領インド洋地域","NAME_KO":"영국령 인도양 지역","NAME_NL":"Brits Indische Oceaanterritorium","NAME_PL":"Brytyjskie Terytorium Oceanu Indyjskiego","NAME_PT":"Território Britânico do Oceano Índico","NAME_RU":"Британская территория в Индийском океане","NAME_SV":"Brittiska territoriet i Indiska oceanen","NAME_TR":"Britanya Hint Okyanusu Toprakları","NAME_UK":"Британська територія в Індійському океані","NAME_UR":"برطانوی بحرہند کا خطہ","NAME_VI":"Lãnh thổ Ấn Độ Dương thuộc Anh","NAME_ZH":"英属印度洋领地","NAME_ZHT":"英屬印度洋領地","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Saint Helena","ADM0_A3":"SHN","GEOU_DIF":0,"GEOUNIT":"Saint Helena","GU_A3":"SHN","SU_DIF":0,"SUBUNIT":"Saint Helena","SU_A3":"SHN","BRK_DIFF":0,"NAME":"Saint Helena","NAME_LONG":"Saint Helena","BRK_A3":"SHN","BRK_NAME":"Saint Helena","BRK_GROUP":"","ABBREV":"St.H.","POSTAL":"SH","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Saint Helena, Ascension, and Tristan da Cunha","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"St. Helena","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":4534,"POP_RANK":4,"POP_YEAR":2016,"GDP_MD":31,"GDP_YEAR":2010,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"SH","ISO_A2":"SH","ISO_A2_EH":"SH","ISO_A3":"SHN","ISO_A3_EH":"SHN","ISO_N3":"654","ISO_N3_EH":"654","UN_A3":"654","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424944,"WOE_ID_EH":23424944,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SHN","ADM0_DIFF":"","ADM0_TLC":"SHN","ADM0_A3_US":"SHN","ADM0_A3_FR":"SHN","ADM0_A3_RU":"SHN","ADM0_A3_ES":"SHN","ADM0_A3_CN":"SHN","ADM0_A3_TW":"SHN","ADM0_A3_IN":"SHN","ADM0_A3_NP":"SHN","ADM0_A3_PK":"SHN","ADM0_A3_DE":"SHN","ADM0_A3_GB":"SHN","ADM0_A3_BR":"SHN","ADM0_A3_IL":"SHN","ADM0_A3_PS":"SHN","ADM0_A3_SA":"SHN","ADM0_A3_EG":"SHN","ADM0_A3_MA":"SHN","ADM0_A3_PT":"SHN","ADM0_A3_AR":"SHN","ADM0_A3_JP":"SHN","ADM0_A3_KO":"SHN","ADM0_A3_VN":"SHN","ADM0_A3_TR":"SHN","ADM0_A3_ID":"SHN","ADM0_A3_PL":"SHN","ADM0_A3_GR":"SHN","ADM0_A3_IT":"SHN","ADM0_A3_NL":"SHN","ADM0_A3_SE":"SHN","ADM0_A3_BD":"SHN","ADM0_A3_UA":"SHN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-5.71262,"LABEL_Y":-15.950487,"NE_ID":1159320733,"WIKIDATAID":"Q34497","NAME_AR":"سانت هيلينا","NAME_BN":"সেন্ট হেলেনা","NAME_DE":"St. Helena","NAME_EN":"Saint Helena","NAME_ES":"Isla Santa Elena","NAME_FA":"سینت هلینا","NAME_FR":"Sainte-Hélène","NAME_EL":"Νήσος Αγίας Ελένης","NAME_HE":"סנט הלנה","NAME_HI":"सन्त हेलेना","NAME_HU":"Szent Ilona","NAME_ID":"Saint Helena","NAME_IT":"Sant'Elena","NAME_JA":"セントヘレナ","NAME_KO":"세인트헬레나","NAME_NL":"Sint-Helena","NAME_PL":"Wyspa Świętej Heleny","NAME_PT":"Santa Helena","NAME_RU":"Остров Святой Елены","NAME_SV":"Sankta Helena","NAME_TR":"Saint Helena","NAME_UK":"Острів Святої Єлени","NAME_UR":"سینٹ ہلینا","NAME_VI":"Saint Helena","NAME_ZH":"圣赫勒拿","NAME_ZHT":"聖赫勒拿","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Pitcairn Islands","ADM0_A3":"PCN","GEOU_DIF":0,"GEOUNIT":"Pitcairn Islands","GU_A3":"PCN","SU_DIF":0,"SUBUNIT":"Pitcairn Islands","SU_A3":"PCN","BRK_DIFF":0,"NAME":"Pitcairn Is.","NAME_LONG":"Pitcairn Islands","BRK_A3":"PCN","BRK_NAME":"Pitcairn Is.","BRK_GROUP":"","ABBREV":"Pit. Is.","POSTAL":"PN","FORMAL_EN":"Pitcairn, Henderson, Ducie and Oeno Islands","FORMAL_FR":"","NAME_CIAWF":"Pitcairn Islands","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"Pitcairn Islands","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":54,"POP_RANK":1,"POP_YEAR":2016,"GDP_MD":0,"GDP_YEAR":2016,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"PC","ISO_A2":"PN","ISO_A2_EH":"PN","ISO_A3":"PCN","ISO_A3_EH":"PCN","ISO_N3":"612","ISO_N3_EH":"612","UN_A3":"612","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424918,"WOE_ID_EH":23424918,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PCN","ADM0_DIFF":"","ADM0_TLC":"PCN","ADM0_A3_US":"PCN","ADM0_A3_FR":"PCN","ADM0_A3_RU":"PCN","ADM0_A3_ES":"PCN","ADM0_A3_CN":"PCN","ADM0_A3_TW":"PCN","ADM0_A3_IN":"PCN","ADM0_A3_NP":"PCN","ADM0_A3_PK":"PCN","ADM0_A3_DE":"PCN","ADM0_A3_GB":"PCN","ADM0_A3_BR":"PCN","ADM0_A3_IL":"PCN","ADM0_A3_PS":"PCN","ADM0_A3_SA":"PCN","ADM0_A3_EG":"PCN","ADM0_A3_MA":"PCN","ADM0_A3_PT":"PCN","ADM0_A3_AR":"PCN","ADM0_A3_JP":"PCN","ADM0_A3_KO":"PCN","ADM0_A3_VN":"PCN","ADM0_A3_TR":"PCN","ADM0_A3_ID":"PCN","ADM0_A3_PL":"PCN","ADM0_A3_GR":"PCN","ADM0_A3_IT":"PCN","ADM0_A3_NL":"PCN","ADM0_A3_SE":"PCN","ADM0_A3_BD":"PCN","ADM0_A3_UA":"PCN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":12,"LONG_LEN":16,"ABBREV_LEN":8,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9,"LABEL_X":-128.317536,"LABEL_Y":-24.364576,"NE_ID":1159320729,"WIKIDATAID":"Q35672","NAME_AR":"جزر بيتكيرن","NAME_BN":"পীটকেয়ার্ন দ্বীপপুঞ্জ","NAME_DE":"Pitcairninseln","NAME_EN":"Pitcairn Islands","NAME_ES":"Islas Pitcairn","NAME_FA":"جزایر پیتکرن","NAME_FR":"Iles Pitcairn","NAME_EL":"Νήσοι Πίτκερν","NAME_HE":"פיטקרן","NAME_HI":"पिटकेर्न द्वीपसमूह","NAME_HU":"Pitcairn-szigetek","NAME_ID":"Kepulauan Pitcairn","NAME_IT":"Isole Pitcairn","NAME_JA":"ピトケアン諸島","NAME_KO":"핏케언 제도","NAME_NL":"Pitcairneilanden","NAME_PL":"Pitcairn","NAME_PT":"Ilhas Pitcairn","NAME_RU":"Острова Питкэрн","NAME_SV":"Pitcairnöarna","NAME_TR":"Pitcairn Adaları","NAME_UK":"Піткерн","NAME_UR":"جزائر پٹکیرن","NAME_VI":"Quần đảo Pitcairn","NAME_ZH":"皮特凯恩群岛","NAME_ZHT":"皮特肯群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Anguilla","ADM0_A3":"AIA","GEOU_DIF":0,"GEOUNIT":"Anguilla","GU_A3":"AIA","SU_DIF":0,"SUBUNIT":"Anguilla","SU_A3":"AIA","BRK_DIFF":0,"NAME":"Anguilla","NAME_LONG":"Anguilla","BRK_A3":"AIA","BRK_NAME":"Anguilla","BRK_GROUP":"","ABBREV":"Ang.","POSTAL":"AI","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Anguilla","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"Anguilla","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":14731,"POP_RANK":6,"POP_YEAR":2018,"GDP_MD":175,"GDP_YEAR":2009,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"AV","ISO_A2":"AI","ISO_A2_EH":"AI","ISO_A3":"AIA","ISO_A3_EH":"AIA","ISO_N3":"660","ISO_N3_EH":"660","UN_A3":"660","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424751,"WOE_ID_EH":23424751,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"AIA","ADM0_DIFF":"","ADM0_TLC":"AIA","ADM0_A3_US":"AIA","ADM0_A3_FR":"AIA","ADM0_A3_RU":"AIA","ADM0_A3_ES":"AIA","ADM0_A3_CN":"AIA","ADM0_A3_TW":"AIA","ADM0_A3_IN":"AIA","ADM0_A3_NP":"AIA","ADM0_A3_PK":"AIA","ADM0_A3_DE":"AIA","ADM0_A3_GB":"AIA","ADM0_A3_BR":"AIA","ADM0_A3_IL":"AIA","ADM0_A3_PS":"AIA","ADM0_A3_SA":"AIA","ADM0_A3_EG":"AIA","ADM0_A3_MA":"AIA","ADM0_A3_PT":"AIA","ADM0_A3_AR":"AIA","ADM0_A3_JP":"AIA","ADM0_A3_KO":"AIA","ADM0_A3_VN":"AIA","ADM0_A3_TR":"AIA","ADM0_A3_ID":"AIA","ADM0_A3_PL":"AIA","ADM0_A3_GR":"AIA","ADM0_A3_IT":"AIA","ADM0_A3_NL":"AIA","ADM0_A3_SE":"AIA","ADM0_A3_BD":"AIA","ADM0_A3_UA":"AIA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-63.026361,"LABEL_Y":18.242979,"NE_ID":1159320703,"WIKIDATAID":"Q25228","NAME_AR":"أنغويلا","NAME_BN":"এ্যাঙ্গুইলা","NAME_DE":"Anguilla","NAME_EN":"Anguilla","NAME_ES":"Anguila","NAME_FA":"آنگویلا","NAME_FR":"Anguilla","NAME_EL":"Ανγκουίλα","NAME_HE":"אנגווילה","NAME_HI":"अंगुइला","NAME_HU":"Anguilla","NAME_ID":"Anguilla","NAME_IT":"Anguilla","NAME_JA":"アンギラ","NAME_KO":"앵귈라","NAME_NL":"Anguilla","NAME_PL":"Anguilla","NAME_PT":"Anguilla","NAME_RU":"Ангилья","NAME_SV":"Anguilla","NAME_TR":"Anguilla","NAME_UK":"Ангілья","NAME_UR":"اینگویلا","NAME_VI":"Anguilla","NAME_ZH":"安圭拉","NAME_ZHT":"安吉拉","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-58.85019531249999,-51.269921874999994],[-59.059521484375,-51.685449218749994],[-59.57080078125,-51.925390625000006],[-59.068017578124994,-52.17304687500001],[-58.683496093749994,-51.93623046875001],[-57.83818359374999,-51.70917968750001],[-57.976513671875,-51.384375000000006],[-58.47373046874999,-51.50908203125002],[-58.85019531249999,-51.269921874999994]]],[[[-60.28623046874999,-51.4619140625],[-59.92138671875,-51.96953125000002],[-59.26806640625,-51.42753906250002],[-60.28623046874999,-51.4619140625]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Disputed","TLC":"1","ADMIN":"Falkland Islands","ADM0_A3":"FLK","GEOU_DIF":0,"GEOUNIT":"Falkland Islands","GU_A3":"FLK","SU_DIF":0,"SUBUNIT":"Falkland Islands","SU_A3":"FLK","BRK_DIFF":1,"NAME":"Falkland Is.","NAME_LONG":"Falkland Islands / Malvinas","BRK_A3":"B12","BRK_NAME":"Falkland Is.","BRK_GROUP":"","ABBREV":"Flk. Is.","POSTAL":"FK","FORMAL_EN":"Falkland Islands","FORMAL_FR":"","NAME_CIAWF":"Falkland Islands (Islas Malvinas)","NOTE_ADM0":"U.K.","NOTE_BRK":"Admin. by U.K.; Claimed by Argentina","NAME_SORT":"Falkland Islands","NAME_ALT":"Islas Malvinas","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":3398,"POP_RANK":4,"POP_YEAR":2016,"GDP_MD":282,"GDP_YEAR":2012,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"FK","ISO_A2":"FK","ISO_A2_EH":"FK","ISO_A3":"FLK","ISO_A3_EH":"FLK","ISO_N3":"238","ISO_N3_EH":"238","UN_A3":"238","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424814,"WOE_ID_EH":23424814,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"B12","ADM0_DIFF":"","ADM0_TLC":"B12","ADM0_A3_US":"FLK","ADM0_A3_FR":"FLK","ADM0_A3_RU":"FLK","ADM0_A3_ES":"FLK","ADM0_A3_CN":"FLK","ADM0_A3_TW":"FLK","ADM0_A3_IN":"FLK","ADM0_A3_NP":"FLK","ADM0_A3_PK":"FLK","ADM0_A3_DE":"FLK","ADM0_A3_GB":"FLK","ADM0_A3_BR":"FLK","ADM0_A3_IL":"FLK","ADM0_A3_PS":"FLK","ADM0_A3_SA":"FLK","ADM0_A3_EG":"FLK","ADM0_A3_MA":"FLK","ADM0_A3_PT":"FLK","ADM0_A3_AR":"ARG","ADM0_A3_JP":"FLK","ADM0_A3_KO":"FLK","ADM0_A3_VN":"FLK","ADM0_A3_TR":"FLK","ADM0_A3_ID":"FLK","ADM0_A3_PL":"FLK","ADM0_A3_GR":"FLK","ADM0_A3_IT":"FLK","ADM0_A3_NL":"FLK","ADM0_A3_SE":"FLK","ADM0_A3_BD":"FLK","ADM0_A3_UA":"FLK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":12,"LONG_LEN":27,"ABBREV_LEN":8,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9,"LABEL_X":-58.738602,"LABEL_Y":-51.608913,"NE_ID":1159320711,"WIKIDATAID":"Q9648","NAME_AR":"جزر فوكلاند","NAME_BN":"ফকল্যান্ড দ্বীপপুঞ্জ","NAME_DE":"Falklandinseln","NAME_EN":"Falkland Islands","NAME_ES":"Islas Malvinas","NAME_FA":"جزایر فالکلند","NAME_FR":"îles Malouines","NAME_EL":"Νήσοι Φώκλαντ","NAME_HE":"איי פוקלנד","NAME_HI":"फ़ॉकलैंड द्वीपसमूह","NAME_HU":"Falkland-szigetek","NAME_ID":"Kepulauan Falkland","NAME_IT":"Isole Falkland","NAME_JA":"フォークランド諸島","NAME_KO":"포클랜드 제도","NAME_NL":"Falklandeilanden","NAME_PL":"Falklandy","NAME_PT":"Ilhas Malvinas","NAME_RU":"Фолклендские острова","NAME_SV":"Falklandsöarna","NAME_TR":"Falkland Adaları","NAME_UK":"Фолклендські острови","NAME_UR":"جزائر فاکلینڈ","NAME_VI":"Quần đảo Falkland","NAME_ZH":"福克兰群岛","NAME_ZHT":"福克蘭群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"Unrecognized","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Cayman Islands","ADM0_A3":"CYM","GEOU_DIF":0,"GEOUNIT":"Cayman Islands","GU_A3":"CYM","SU_DIF":0,"SUBUNIT":"Cayman Islands","SU_A3":"CYM","BRK_DIFF":0,"NAME":"Cayman Is.","NAME_LONG":"Cayman Islands","BRK_A3":"CYM","BRK_NAME":"Cayman Is.","BRK_GROUP":"","ABBREV":"Cym. Is.","POSTAL":"KY","FORMAL_EN":"Cayman Islands","FORMAL_FR":"","NAME_CIAWF":"Cayman Islands","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"Cayman Islands","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":64948,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":5517,"GDP_YEAR":2018,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"CJ","ISO_A2":"KY","ISO_A2_EH":"KY","ISO_A3":"CYM","ISO_A3_EH":"CYM","ISO_N3":"136","ISO_N3_EH":"136","UN_A3":"136","WB_A2":"KY","WB_A3":"CYM","WOE_ID":23424783,"WOE_ID_EH":23424783,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CYM","ADM0_DIFF":"","ADM0_TLC":"CYM","ADM0_A3_US":"CYM","ADM0_A3_FR":"CYM","ADM0_A3_RU":"CYM","ADM0_A3_ES":"CYM","ADM0_A3_CN":"CYM","ADM0_A3_TW":"CYM","ADM0_A3_IN":"CYM","ADM0_A3_NP":"CYM","ADM0_A3_PK":"CYM","ADM0_A3_DE":"CYM","ADM0_A3_GB":"CYM","ADM0_A3_BR":"CYM","ADM0_A3_IL":"CYM","ADM0_A3_PS":"CYM","ADM0_A3_SA":"CYM","ADM0_A3_EG":"CYM","ADM0_A3_MA":"CYM","ADM0_A3_PT":"CYM","ADM0_A3_AR":"CYM","ADM0_A3_JP":"CYM","ADM0_A3_KO":"CYM","ADM0_A3_VN":"CYM","ADM0_A3_TR":"CYM","ADM0_A3_ID":"CYM","ADM0_A3_PL":"CYM","ADM0_A3_GR":"CYM","ADM0_A3_IT":"CYM","ADM0_A3_NL":"CYM","ADM0_A3_SE":"CYM","ADM0_A3_BD":"CYM","ADM0_A3_UA":"CYM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":10,"LONG_LEN":14,"ABBREV_LEN":8,"TINY":2,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9.5,"LABEL_X":-81.24055,"LABEL_Y":19.319862,"NE_ID":1159320707,"WIKIDATAID":"Q5785","NAME_AR":"جزر كايمان","NAME_BN":"কেইম্যান দ্বীপপুঞ্জ","NAME_DE":"Cayman Islands","NAME_EN":"Cayman Islands","NAME_ES":"Islas Caimán","NAME_FA":"جزایر کیمن","NAME_FR":"îles Caïmans","NAME_EL":"Νησιά Καϋμάν","NAME_HE":"איי קיימן","NAME_HI":"केमन द्वीपसमूह","NAME_HU":"Kajmán-szigetek","NAME_ID":"Kepulauan Cayman","NAME_IT":"Isole Cayman","NAME_JA":"ケイマン諸島","NAME_KO":"케이맨 제도","NAME_NL":"Kaaimaneilanden","NAME_PL":"Kajmany","NAME_PT":"Ilhas Caimão","NAME_RU":"острова Кайман","NAME_SV":"Caymanöarna","NAME_TR":"Cayman Adaları","NAME_UK":"Кайманові острови","NAME_UR":"جزائر کیمین","NAME_VI":"Quần đảo Cayman","NAME_ZH":"开曼群岛","NAME_ZHT":"開曼群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Bermuda","ADM0_A3":"BMU","GEOU_DIF":0,"GEOUNIT":"Bermuda","GU_A3":"BMU","SU_DIF":0,"SUBUNIT":"Bermuda","SU_A3":"BMU","BRK_DIFF":0,"NAME":"Bermuda","NAME_LONG":"Bermuda","BRK_A3":"BMU","BRK_NAME":"Bermuda","BRK_GROUP":"","ABBREV":"Berm.","POSTAL":"BM","FORMAL_EN":"The Bermudas or Somers Isles","FORMAL_FR":"","NAME_CIAWF":"Bermuda","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"Bermuda","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":63918,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":7484,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"BD","ISO_A2":"BM","ISO_A2_EH":"BM","ISO_A3":"BMU","ISO_A3_EH":"BMU","ISO_N3":"060","ISO_N3_EH":"060","UN_A3":"060","WB_A2":"BM","WB_A3":"BMU","WOE_ID":23424756,"WOE_ID_EH":23424756,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BMU","ADM0_DIFF":"","ADM0_TLC":"BMU","ADM0_A3_US":"BMU","ADM0_A3_FR":"BMU","ADM0_A3_RU":"BMU","ADM0_A3_ES":"BMU","ADM0_A3_CN":"BMU","ADM0_A3_TW":"BMU","ADM0_A3_IN":"BMU","ADM0_A3_NP":"BMU","ADM0_A3_PK":"BMU","ADM0_A3_DE":"BMU","ADM0_A3_GB":"BMU","ADM0_A3_BR":"BMU","ADM0_A3_IL":"BMU","ADM0_A3_PS":"BMU","ADM0_A3_SA":"BMU","ADM0_A3_EG":"BMU","ADM0_A3_MA":"BMU","ADM0_A3_PT":"BMU","ADM0_A3_AR":"BMU","ADM0_A3_JP":"BMU","ADM0_A3_KO":"BMU","ADM0_A3_VN":"BMU","ADM0_A3_TR":"BMU","ADM0_A3_ID":"BMU","ADM0_A3_PL":"BMU","ADM0_A3_GR":"BMU","ADM0_A3_IT":"BMU","ADM0_A3_NL":"BMU","ADM0_A3_SE":"BMU","ADM0_A3_BD":"BMU","ADM0_A3_UA":"BMU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Northern America","REGION_WB":"North America","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":4,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-64.763573,"LABEL_Y":32.296592,"NE_ID":1159320705,"WIKIDATAID":"Q23635","NAME_AR":"برمودا","NAME_BN":"বারমুডা","NAME_DE":"Bermuda","NAME_EN":"Bermuda","NAME_ES":"Bermudas","NAME_FA":"برمودا","NAME_FR":"Bermudes","NAME_EL":"Βερμούδες","NAME_HE":"ברמודה","NAME_HI":"बरमूडा","NAME_HU":"Bermuda","NAME_ID":"Bermuda","NAME_IT":"Bermuda","NAME_JA":"バミューダ諸島","NAME_KO":"버뮤다","NAME_NL":"Bermuda","NAME_PL":"Bermudy","NAME_PT":"Bermudas","NAME_RU":"Бермудские Острова","NAME_SV":"Bermuda","NAME_TR":"Bermuda","NAME_UK":"Бермудські острови","NAME_UR":"برمودا","NAME_VI":"Bermuda","NAME_ZH":"百慕大","NAME_ZHT":"百慕達","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"British Virgin Islands","ADM0_A3":"VGB","GEOU_DIF":0,"GEOUNIT":"British Virgin Islands","GU_A3":"VGB","SU_DIF":0,"SUBUNIT":"British Virgin Islands","SU_A3":"VGB","BRK_DIFF":0,"NAME":"British Virgin Is.","NAME_LONG":"British Virgin Islands","BRK_A3":"VGB","BRK_NAME":"British Virgin Is.","BRK_GROUP":"","ABBREV":"V.I. (Br.)","POSTAL":"VG","FORMAL_EN":"British Virgin Islands","FORMAL_FR":"","NAME_CIAWF":"British Virgin Islands","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"British Virgin Islands","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":30030,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":500,"GDP_YEAR":2017,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"VI","ISO_A2":"VG","ISO_A2_EH":"VG","ISO_A3":"VGB","ISO_A3_EH":"VGB","ISO_N3":"092","ISO_N3_EH":"092","UN_A3":"092","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424983,"WOE_ID_EH":23424983,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VGB","ADM0_DIFF":"","ADM0_TLC":"VGB","ADM0_A3_US":"VGB","ADM0_A3_FR":"VGB","ADM0_A3_RU":"VGB","ADM0_A3_ES":"VGB","ADM0_A3_CN":"VGB","ADM0_A3_TW":"VGB","ADM0_A3_IN":"VGB","ADM0_A3_NP":"VGB","ADM0_A3_PK":"VGB","ADM0_A3_DE":"VGB","ADM0_A3_GB":"VGB","ADM0_A3_BR":"VGB","ADM0_A3_IL":"VGB","ADM0_A3_PS":"VGB","ADM0_A3_SA":"VGB","ADM0_A3_EG":"VGB","ADM0_A3_MA":"VGB","ADM0_A3_PT":"VGB","ADM0_A3_AR":"VGB","ADM0_A3_JP":"VGB","ADM0_A3_KO":"VGB","ADM0_A3_VN":"VGB","ADM0_A3_TR":"VGB","ADM0_A3_ID":"VGB","ADM0_A3_PL":"VGB","ADM0_A3_GR":"VGB","ADM0_A3_IT":"VGB","ADM0_A3_NL":"VGB","ADM0_A3_SE":"VGB","ADM0_A3_BD":"VGB","ADM0_A3_UA":"VGB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":18,"LONG_LEN":22,"ABBREV_LEN":10,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9.5,"LABEL_X":-64.63661,"LABEL_Y":18.426606,"NE_ID":1159320739,"WIKIDATAID":"Q25305","NAME_AR":"جزر العذراء البريطانية","NAME_BN":"ব্রিটিশ ভার্জিন দ্বীপপুঞ্জ","NAME_DE":"Britische Jungferninseln","NAME_EN":"British Virgin Islands","NAME_ES":"Islas Vírgenes Británicas","NAME_FA":"جزایر ویرجین بریتانیا","NAME_FR":"îles Vierges britanniques","NAME_EL":"Βρετανικές Παρθένοι Νήσοι","NAME_HE":"איי הבתולה הבריטיים","NAME_HI":"ब्रिटिश वर्जिन द्वीपसमूह","NAME_HU":"Brit Virgin-szigetek","NAME_ID":"Kepulauan Virgin Britania Raya","NAME_IT":"Isole Vergini britanniche","NAME_JA":"イギリス領ヴァージン諸島","NAME_KO":"영국령 버진아일랜드","NAME_NL":"Britse Maagdeneilanden","NAME_PL":"Brytyjskie Wyspy Dziewicze","NAME_PT":"Ilhas Virgens Britânicas","NAME_RU":"Британские Виргинские острова","NAME_SV":"Brittiska Jungfruöarna","NAME_TR":"Britanya Virjin Adaları","NAME_UK":"Британські Віргінські острови","NAME_UR":"برطانوی جزائر ورجن","NAME_VI":"Quần đảo Virgin thuộc Anh","NAME_ZH":"英属维尔京群岛","NAME_ZHT":"英屬維京群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Turks and Caicos Islands","ADM0_A3":"TCA","GEOU_DIF":0,"GEOUNIT":"Turks and Caicos Islands","GU_A3":"TCA","SU_DIF":0,"SUBUNIT":"Turks and Caicos Islands","SU_A3":"TCA","BRK_DIFF":0,"NAME":"Turks and Caicos Is.","NAME_LONG":"Turks and Caicos Islands","BRK_A3":"TCA","BRK_NAME":"Turks and Caicos Is.","BRK_GROUP":"","ABBREV":"T.C. Is.","POSTAL":"TC","FORMAL_EN":"Turks and Caicos Islands","FORMAL_FR":"","NAME_CIAWF":"Turks and Caicos Islands","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"Turks and Caicos Islands","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":38191,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":1197,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"TK","ISO_A2":"TC","ISO_A2_EH":"TC","ISO_A3":"TCA","ISO_A3_EH":"TCA","ISO_N3":"796","ISO_N3_EH":"796","UN_A3":"796","WB_A2":"TC","WB_A3":"TCA","WOE_ID":23424962,"WOE_ID_EH":23424962,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TCA","ADM0_DIFF":"","ADM0_TLC":"TCA","ADM0_A3_US":"TCA","ADM0_A3_FR":"TCA","ADM0_A3_RU":"TCA","ADM0_A3_ES":"TCA","ADM0_A3_CN":"TCA","ADM0_A3_TW":"TCA","ADM0_A3_IN":"TCA","ADM0_A3_NP":"TCA","ADM0_A3_PK":"TCA","ADM0_A3_DE":"TCA","ADM0_A3_GB":"TCA","ADM0_A3_BR":"TCA","ADM0_A3_IL":"TCA","ADM0_A3_PS":"TCA","ADM0_A3_SA":"TCA","ADM0_A3_EG":"TCA","ADM0_A3_MA":"TCA","ADM0_A3_PT":"TCA","ADM0_A3_AR":"TCA","ADM0_A3_JP":"TCA","ADM0_A3_KO":"TCA","ADM0_A3_VN":"TCA","ADM0_A3_TR":"TCA","ADM0_A3_ID":"TCA","ADM0_A3_PL":"TCA","ADM0_A3_GR":"TCA","ADM0_A3_IT":"TCA","ADM0_A3_NL":"TCA","ADM0_A3_SE":"TCA","ADM0_A3_BD":"TCA","ADM0_A3_UA":"TCA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":20,"LONG_LEN":24,"ABBREV_LEN":8,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-71.752704,"LABEL_Y":21.81663,"NE_ID":1159320737,"WIKIDATAID":"Q18221","NAME_AR":"جزر توركس وكايكوس","NAME_BN":"টার্কস ও কেইকোস দ্বীপপুঞ্জ","NAME_DE":"Turks- und Caicosinseln","NAME_EN":"Turks and Caicos Islands","NAME_ES":"Islas Turcas y Caicos","NAME_FA":"جزایر تورکس و کایکوس","NAME_FR":"îles Turques-et-Caïques","NAME_EL":"Τερκ και Κάικος","NAME_HE":"איי טרקס וקייקוס","NAME_HI":"तुर्क और केकोस द्वीपसमूह","NAME_HU":"Turks- és Caicos-szigetek","NAME_ID":"Kepulauan Turks dan Caicos","NAME_IT":"Turks e Caicos","NAME_JA":"タークス・カイコス諸島","NAME_KO":"터크스 케이커스 제도","NAME_NL":"Turks- en Caicoseilanden","NAME_PL":"Turks i Caicos","NAME_PT":"Turks e Caicos","NAME_RU":"Тёркс и Кайкос","NAME_SV":"Turks- och Caicosöarna","NAME_TR":"Turks ve Caicos Adaları","NAME_UK":"Острови Теркс і Кайкос","NAME_UR":"جزائر کیکس و ترکیہ","NAME_VI":"Quần đảo Turks và Caicos","NAME_ZH":"特克斯和凯科斯群岛","NAME_ZHT":"土克凱可群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Montserrat","ADM0_A3":"MSR","GEOU_DIF":0,"GEOUNIT":"Montserrat","GU_A3":"MSR","SU_DIF":0,"SUBUNIT":"Montserrat","SU_A3":"MSR","BRK_DIFF":0,"NAME":"Montserrat","NAME_LONG":"Montserrat","BRK_A3":"MSR","BRK_NAME":"Montserrat","BRK_GROUP":"","ABBREV":"Monts.","POSTAL":"MS","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Montserrat","NOTE_ADM0":"U.K.","NOTE_BRK":"","NAME_SORT":"Montserrat","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":4649,"POP_RANK":4,"POP_YEAR":2019,"GDP_MD":44,"GDP_YEAR":2006,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"MH","ISO_A2":"MS","ISO_A2_EH":"MS","ISO_A3":"MSR","ISO_A3_EH":"MSR","ISO_N3":"500","ISO_N3_EH":"500","UN_A3":"500","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424888,"WOE_ID_EH":23424888,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MSR","ADM0_DIFF":"","ADM0_TLC":"MSR","ADM0_A3_US":"MSR","ADM0_A3_FR":"MSR","ADM0_A3_RU":"MSR","ADM0_A3_ES":"MSR","ADM0_A3_CN":"MSR","ADM0_A3_TW":"MSR","ADM0_A3_IN":"MSR","ADM0_A3_NP":"MSR","ADM0_A3_PK":"MSR","ADM0_A3_DE":"MSR","ADM0_A3_GB":"MSR","ADM0_A3_BR":"MSR","ADM0_A3_IL":"MSR","ADM0_A3_PS":"MSR","ADM0_A3_SA":"MSR","ADM0_A3_EG":"MSR","ADM0_A3_MA":"MSR","ADM0_A3_PT":"MSR","ADM0_A3_AR":"MSR","ADM0_A3_JP":"MSR","ADM0_A3_KO":"MSR","ADM0_A3_VN":"MSR","ADM0_A3_TR":"MSR","ADM0_A3_ID":"MSR","ADM0_A3_PL":"MSR","ADM0_A3_GR":"MSR","ADM0_A3_IT":"MSR","ADM0_A3_NL":"MSR","ADM0_A3_SE":"MSR","ADM0_A3_BD":"MSR","ADM0_A3_UA":"MSR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":6,"TINY":6,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-62.188252,"LABEL_Y":16.73717,"NE_ID":1159320727,"WIKIDATAID":"Q13353","NAME_AR":"مونتسرات","NAME_BN":"মন্টসেরাট","NAME_DE":"Montserrat","NAME_EN":"Montserrat","NAME_ES":"Montserrat","NAME_FA":"مونتسرات","NAME_FR":"Montserrat","NAME_EL":"Μοντσερράτ","NAME_HE":"מונטסראט","NAME_HI":"मॉण्टसेराट","NAME_HU":"Montserrat","NAME_ID":"Montserrat","NAME_IT":"Montserrat","NAME_JA":"モントセラト","NAME_KO":"몬트세랫","NAME_NL":"Montserrat","NAME_PL":"Montserrat","NAME_PT":"Montserrat","NAME_RU":"Монтсеррат","NAME_SV":"Montserrat","NAME_TR":"Montserrat","NAME_UK":"Монтсеррат","NAME_UR":"مانٹسریٹ","NAME_VI":"Montserrat","NAME_ZH":"蒙特塞拉特","NAME_ZHT":"蒙哲臘","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Jersey","ADM0_A3":"JEY","GEOU_DIF":0,"GEOUNIT":"Jersey","GU_A3":"JEY","SU_DIF":0,"SUBUNIT":"Jersey","SU_A3":"JEY","BRK_DIFF":0,"NAME":"Jersey","NAME_LONG":"Jersey","BRK_A3":"JEY","BRK_NAME":"Jersey","BRK_GROUP":"Channel Islands","ABBREV":"Jey.","POSTAL":"JE","FORMAL_EN":"Bailiwick of Jersey","FORMAL_FR":"","NAME_CIAWF":"Jersey","NOTE_ADM0":"U.K.","NOTE_BRK":"U.K. crown dependency","NAME_SORT":"Jersey","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":107800,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":5080,"GDP_YEAR":2015,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"JE","ISO_A2":"JE","ISO_A2_EH":"JE","ISO_A3":"JEY","ISO_A3_EH":"JEY","ISO_N3":"832","ISO_N3_EH":"832","UN_A3":"832","WB_A2":"JG","WB_A3":"CHI","WOE_ID":23424857,"WOE_ID_EH":23424857,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"JEY","ADM0_DIFF":"","ADM0_TLC":"JEY","ADM0_A3_US":"JEY","ADM0_A3_FR":"JEY","ADM0_A3_RU":"JEY","ADM0_A3_ES":"JEY","ADM0_A3_CN":"JEY","ADM0_A3_TW":"JEY","ADM0_A3_IN":"JEY","ADM0_A3_NP":"JEY","ADM0_A3_PK":"JEY","ADM0_A3_DE":"JEY","ADM0_A3_GB":"JEY","ADM0_A3_BR":"JEY","ADM0_A3_IL":"JEY","ADM0_A3_PS":"JEY","ADM0_A3_SA":"JEY","ADM0_A3_EG":"JEY","ADM0_A3_MA":"JEY","ADM0_A3_PT":"JEY","ADM0_A3_AR":"JEY","ADM0_A3_JP":"JEY","ADM0_A3_KO":"JEY","ADM0_A3_VN":"JEY","ADM0_A3_TR":"JEY","ADM0_A3_ID":"JEY","ADM0_A3_PL":"JEY","ADM0_A3_GR":"JEY","ADM0_A3_IT":"JEY","ADM0_A3_NL":"JEY","ADM0_A3_SE":"JEY","ADM0_A3_BD":"JEY","ADM0_A3_UA":"JEY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-2.090146,"LABEL_Y":49.220808,"NE_ID":1159320725,"WIKIDATAID":"Q785","NAME_AR":"جيرزي","NAME_BN":"জার্সি","NAME_DE":"Jersey","NAME_EN":"Jersey","NAME_ES":"Jersey","NAME_FA":"جرزی","NAME_FR":"Jersey","NAME_EL":"Τζέρσεϊ","NAME_HE":"ג'רזי","NAME_HI":"जर्सी","NAME_HU":"Jersey","NAME_ID":"Jersey","NAME_IT":"baliato di Jersey","NAME_JA":"ジャージー","NAME_KO":"저지섬","NAME_NL":"Jersey","NAME_PL":"Jersey","NAME_PT":"Jersey","NAME_RU":"Джерси","NAME_SV":"Jersey","NAME_TR":"Jersey","NAME_UK":"Джерсі","NAME_UR":"جرزی","NAME_VI":"Jersey","NAME_ZH":"泽西","NAME_ZHT":"澤西","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Guernsey","ADM0_A3":"GGY","GEOU_DIF":0,"GEOUNIT":"Guernsey","GU_A3":"GGY","SU_DIF":0,"SUBUNIT":"Guernsey","SU_A3":"GGY","BRK_DIFF":0,"NAME":"Guernsey","NAME_LONG":"Guernsey","BRK_A3":"GGY","BRK_NAME":"Guernsey","BRK_GROUP":"Channel Islands","ABBREV":"Guern.","POSTAL":"GG","FORMAL_EN":"Bailiwick of Guernsey","FORMAL_FR":"","NAME_CIAWF":"Guernsey","NOTE_ADM0":"U.K.","NOTE_BRK":"U.K. crown dependency","NAME_SORT":"Guernsey","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":62792,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":3465,"GDP_YEAR":2015,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"GK","ISO_A2":"GG","ISO_A2_EH":"GG","ISO_A3":"GGY","ISO_A3_EH":"GGY","ISO_N3":"831","ISO_N3_EH":"831","UN_A3":"831","WB_A2":"JG","WB_A3":"CHI","WOE_ID":23424827,"WOE_ID_EH":23424827,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GGY","ADM0_DIFF":"","ADM0_TLC":"GGY","ADM0_A3_US":"GGY","ADM0_A3_FR":"GGY","ADM0_A3_RU":"GGY","ADM0_A3_ES":"GGY","ADM0_A3_CN":"GGY","ADM0_A3_TW":"GGY","ADM0_A3_IN":"GGY","ADM0_A3_NP":"GGY","ADM0_A3_PK":"GGY","ADM0_A3_DE":"GGY","ADM0_A3_GB":"GGY","ADM0_A3_BR":"GGY","ADM0_A3_IL":"GGY","ADM0_A3_PS":"GGY","ADM0_A3_SA":"GGY","ADM0_A3_EG":"GGY","ADM0_A3_MA":"GGY","ADM0_A3_PT":"GGY","ADM0_A3_AR":"GGY","ADM0_A3_JP":"GGY","ADM0_A3_KO":"GGY","ADM0_A3_VN":"GGY","ADM0_A3_TR":"GGY","ADM0_A3_ID":"GGY","ADM0_A3_PL":"GGY","ADM0_A3_GR":"GGY","ADM0_A3_IT":"GGY","ADM0_A3_NL":"GGY","ADM0_A3_SE":"GGY","ADM0_A3_BD":"GGY","ADM0_A3_UA":"GGY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-2.561736,"LABEL_Y":49.463533,"NE_ID":1159320715,"WIKIDATAID":"Q25230","NAME_AR":"غيرنزي","NAME_BN":"গার্নসি","NAME_DE":"Guernsey","NAME_EN":"Guernsey","NAME_ES":"Guernsey","NAME_FA":"گرنزی","NAME_FR":"Guernesey","NAME_EL":"Γκέρνσεϊ","NAME_HE":"גרנזי","NAME_HI":"ग्वेर्नसे","NAME_HU":"Guernsey Bailiffség","NAME_ID":"Guernsey","NAME_IT":"Guernsey","NAME_JA":"ガーンジー","NAME_KO":"건지섬","NAME_NL":"Guernsey","NAME_PL":"Guernsey","NAME_PT":"Guernsey","NAME_RU":"Гернси","NAME_SV":"Guernsey","NAME_TR":"Guernsey","NAME_UK":"Гернсі","NAME_UR":"گرنزی","NAME_VI":"Guernsey","NAME_ZH":"根西","NAME_ZHT":"根西","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Isle of Man","ADM0_A3":"IMN","GEOU_DIF":0,"GEOUNIT":"Isle of Man","GU_A3":"IMN","SU_DIF":0,"SUBUNIT":"Isle of Man","SU_A3":"IMN","BRK_DIFF":0,"NAME":"Isle of Man","NAME_LONG":"Isle of Man","BRK_A3":"IMN","BRK_NAME":"Isle of Man","BRK_GROUP":"","ABBREV":"IoMan","POSTAL":"IM","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Isle of Man","NOTE_ADM0":"U.K.","NOTE_BRK":"U.K. crown dependency","NAME_SORT":"Isle of Man","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":84584,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":7491,"GDP_YEAR":2018,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"IM","ISO_A2":"IM","ISO_A2_EH":"IM","ISO_A3":"IMN","ISO_A3_EH":"IMN","ISO_N3":"833","ISO_N3_EH":"833","UN_A3":"833","WB_A2":"IM","WB_A3":"IMY","WOE_ID":23424847,"WOE_ID_EH":23424847,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"IMN","ADM0_DIFF":"","ADM0_TLC":"IMN","ADM0_A3_US":"IMN","ADM0_A3_FR":"IMN","ADM0_A3_RU":"IMN","ADM0_A3_ES":"IMN","ADM0_A3_CN":"IMN","ADM0_A3_TW":"IMN","ADM0_A3_IN":"IMN","ADM0_A3_NP":"IMN","ADM0_A3_PK":"IMN","ADM0_A3_DE":"IMN","ADM0_A3_GB":"IMN","ADM0_A3_BR":"IMN","ADM0_A3_IL":"IMN","ADM0_A3_PS":"IMN","ADM0_A3_SA":"IMN","ADM0_A3_EG":"IMN","ADM0_A3_MA":"IMN","ADM0_A3_PT":"IMN","ADM0_A3_AR":"IMN","ADM0_A3_JP":"IMN","ADM0_A3_KO":"IMN","ADM0_A3_VN":"IMN","ADM0_A3_TR":"IMN","ADM0_A3_ID":"IMN","ADM0_A3_PL":"IMN","ADM0_A3_GR":"IMN","ADM0_A3_IT":"IMN","ADM0_A3_NL":"IMN","ADM0_A3_SE":"IMN","ADM0_A3_BD":"IMN","ADM0_A3_UA":"IMN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-4.530069,"LABEL_Y":54.220833,"NE_ID":1159320721,"WIKIDATAID":"Q9676","NAME_AR":"جزيرة مان","NAME_BN":"আইল অব ম্যান","NAME_DE":"Isle of Man","NAME_EN":"Isle of Man","NAME_ES":"Isla de Man","NAME_FA":"جزیره من","NAME_FR":"île de Man","NAME_EL":"Νήσος του Μαν","NAME_HE":"האי מאן","NAME_HI":"आइल ऑफ़ मैन","NAME_HU":"Man","NAME_ID":"Pulau Man","NAME_IT":"Isola di Man","NAME_JA":"マン島","NAME_KO":"맨섬","NAME_NL":"Man","NAME_PL":"Wyspa Man","NAME_PT":"Ilha de Man","NAME_RU":"остров Мэн","NAME_SV":"Isle of Man","NAME_TR":"Man Adası","NAME_UK":"Острів Мен","NAME_UR":"آئل آف مین","NAME_VI":"Đảo Man","NAME_ZH":"马恩岛","NAME_ZHT":"曼島","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-2.667675781249983,51.622998046875],[-3.135986328125,51.205029296875],[-4.188183593749983,51.188525390624996],[-4.582910156249994,50.7763671875],[-5.34228515625,50.246142578124996],[-4.172558593749983,50.3908203125],[-3.7933593749999943,50.229248046875],[-3.4045898437499886,50.632421875],[-2.5477539062499943,50.61630859375],[-1.5167480468749943,50.747460937499994],[0.205078125,50.763037109375],[0.9601562500000114,50.92587890625],[1.4149414062500227,51.36328125],[0.6865234375,51.386572265625],[0.955078125,51.8078125],[1.5589843750000227,52.086865234375],[1.65673828125,52.753710937499996],[0.5587890625000114,52.966943359375],[-0.20556640625,54.021728515625],[-0.67138671875,54.50390625],[-1.291748046875,54.773876953125],[-1.6553710937499773,55.570361328124996],[-2.1470703124999773,55.902978515625],[-3.17822265625,56.080126953124996],[-2.6527343749999943,56.31826171875],[-1.7779296874999773,57.49375],[-2.0740722656249773,57.702392578125],[-3.402783203124983,57.708251953125],[-3.9900390624999886,57.959033203124996],[-3.212353515624983,58.321240234375],[-3.0530761718749773,58.634814453125],[-4.715429687499977,58.510009765625],[-5.338281249999994,58.238720703125],[-5.818066406249983,57.436083984374996],[-5.561914062499994,57.232714843749996],[-5.936767578125,56.605712890625],[-5.391943359374977,56.514794921875],[-5.609570312499983,56.0552734375],[-5.24560546875,55.929248046874996],[-4.721142578124983,55.42099609375],[-5.135498046875,54.85751953125],[-3.9579101562499943,54.78095703125],[-2.9250976562499886,53.732763671875],[-3.0647460937499886,53.42685546875],[-4.111035156249983,53.2189453125],[-3.9803222656249773,52.541748046875],[-4.383154296874977,52.197314453124996],[-5.088085937499983,51.995898437499996],[-4.902294921874983,51.626269531249996],[-4.386279296874989,51.741064453125],[-3.2931152343749943,51.390429687499996],[-2.667675781249983,51.622998046875]]],[[[-6.218017578125,54.088720703125],[-5.606787109374977,54.27255859375],[-5.470410156249983,54.5001953125],[-6.129150390625,55.2173828125],[-7.218652343749994,55.0919921875],[-8.118261718749977,54.4142578125],[-7.355175781249983,54.121240234375],[-6.218017578125,54.088720703125]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"United Kingdom","SOV_A3":"GB1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"United Kingdom","ADM0_A3":"GBR","GEOU_DIF":0,"GEOUNIT":"United Kingdom","GU_A3":"GBR","SU_DIF":0,"SUBUNIT":"United Kingdom","SU_A3":"GBR","BRK_DIFF":0,"NAME":"United Kingdom","NAME_LONG":"United Kingdom","BRK_A3":"GBR","BRK_NAME":"United Kingdom","BRK_GROUP":"","ABBREV":"U.K.","POSTAL":"GB","FORMAL_EN":"United Kingdom of Great Britain and Northern Ireland","FORMAL_FR":"","NAME_CIAWF":"United Kingdom","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"United Kingdom","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":66834405,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":2829108,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"UK","ISO_A2":"GB","ISO_A2_EH":"GB","ISO_A3":"GBR","ISO_A3_EH":"GBR","ISO_N3":"826","ISO_N3_EH":"826","UN_A3":"826","WB_A2":"GB","WB_A3":"GBR","WOE_ID":-90,"WOE_ID_EH":23424975,"WOE_NOTE":"Eh ID includes Channel Islands and Isle of Man. UK constituent countries of England (24554868), Wales (12578049), Scotland (12578048), and Northern Ireland (20070563).","ADM0_ISO":"GBR","ADM0_DIFF":"","ADM0_TLC":"GBR","ADM0_A3_US":"GBR","ADM0_A3_FR":"GBR","ADM0_A3_RU":"GBR","ADM0_A3_ES":"GBR","ADM0_A3_CN":"GBR","ADM0_A3_TW":"GBR","ADM0_A3_IN":"GBR","ADM0_A3_NP":"GBR","ADM0_A3_PK":"GBR","ADM0_A3_DE":"GBR","ADM0_A3_GB":"GBR","ADM0_A3_BR":"GBR","ADM0_A3_IL":"GBR","ADM0_A3_PS":"GBR","ADM0_A3_SA":"GBR","ADM0_A3_EG":"GBR","ADM0_A3_MA":"GBR","ADM0_A3_PT":"GBR","ADM0_A3_AR":"GBR","ADM0_A3_JP":"GBR","ADM0_A3_KO":"GBR","ADM0_A3_VN":"GBR","ADM0_A3_TR":"GBR","ADM0_A3_ID":"GBR","ADM0_A3_PL":"GBR","ADM0_A3_GR":"GBR","ADM0_A3_IT":"GBR","ADM0_A3_NL":"GBR","ADM0_A3_SE":"GBR","ADM0_A3_BD":"GBR","ADM0_A3_UA":"GBR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":14,"LONG_LEN":14,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":-2.116346,"LABEL_Y":54.402739,"NE_ID":1159320713,"WIKIDATAID":"Q145","NAME_AR":"المملكة المتحدة","NAME_BN":"যুক্তরাজ্য","NAME_DE":"Vereinigtes Königreich","NAME_EN":"United Kingdom","NAME_ES":"Reino Unido","NAME_FA":"بریتانیا","NAME_FR":"Royaume-Uni","NAME_EL":"Ηνωμένο Βασίλειο","NAME_HE":"הממלכה המאוחדת","NAME_HI":"यूनाइटेड किंगडम","NAME_HU":"Egyesült Királyság","NAME_ID":"Britania Raya","NAME_IT":"Regno Unito","NAME_JA":"イギリス","NAME_KO":"영국","NAME_NL":"Verenigd Koninkrijk","NAME_PL":"Wielka Brytania","NAME_PT":"Reino Unido","NAME_RU":"Великобритания","NAME_SV":"Storbritannien","NAME_TR":"Birleşik Krallık","NAME_UK":"Велика Британія","NAME_UR":"مملکت متحدہ","NAME_VI":"Vương quốc Liên hiệp Anh và Bắc Ireland","NAME_ZH":"英国","NAME_ZHT":"英國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[56.2978515625,25.650683593750003],[56.08046875000002,26.062646484374994],[55.94121093750002,25.793994140625003],[54.74677734375001,24.810449218749994],[54.397070312500006,24.27817382812499],[53.89335937500002,24.077050781249994],[52.64824218750002,24.15463867187499],[51.90605468750002,23.9853515625],[51.568359375,24.286181640625003],[51.59257812500002,24.078857421875],[52.55507812500002,22.932812499999997],[55.10429687500002,22.621484374999994],[55.18583984375002,22.7041015625],[55.19990234375001,23.03476562499999],[55.760839843750006,24.24267578125],[55.79570312500002,24.868115234374997],[56.06386718750002,24.73876953125],[56.38798828125002,24.979199218749997],[56.2978515625,25.650683593750003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"United Arab Emirates","SOV_A3":"ARE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"United Arab Emirates","ADM0_A3":"ARE","GEOU_DIF":0,"GEOUNIT":"United Arab Emirates","GU_A3":"ARE","SU_DIF":0,"SUBUNIT":"United Arab Emirates","SU_A3":"ARE","BRK_DIFF":0,"NAME":"United Arab Emirates","NAME_LONG":"United Arab Emirates","BRK_A3":"ARE","BRK_NAME":"United Arab Emirates","BRK_GROUP":"","ABBREV":"U.A.E.","POSTAL":"AE","FORMAL_EN":"United Arab Emirates","FORMAL_FR":"","NAME_CIAWF":"United Arab Emirates","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"United Arab Emirates","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":3,"POP_EST":9770529,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":421142,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"AE","ISO_A2":"AE","ISO_A2_EH":"AE","ISO_A3":"ARE","ISO_A3_EH":"ARE","ISO_N3":"784","ISO_N3_EH":"784","UN_A3":"784","WB_A2":"AE","WB_A3":"ARE","WOE_ID":23424738,"WOE_ID_EH":23424738,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ARE","ADM0_DIFF":"","ADM0_TLC":"ARE","ADM0_A3_US":"ARE","ADM0_A3_FR":"ARE","ADM0_A3_RU":"ARE","ADM0_A3_ES":"ARE","ADM0_A3_CN":"ARE","ADM0_A3_TW":"ARE","ADM0_A3_IN":"ARE","ADM0_A3_NP":"ARE","ADM0_A3_PK":"ARE","ADM0_A3_DE":"ARE","ADM0_A3_GB":"ARE","ADM0_A3_BR":"ARE","ADM0_A3_IL":"ARE","ADM0_A3_PS":"ARE","ADM0_A3_SA":"ARE","ADM0_A3_EG":"ARE","ADM0_A3_MA":"ARE","ADM0_A3_PT":"ARE","ADM0_A3_AR":"ARE","ADM0_A3_JP":"ARE","ADM0_A3_KO":"ARE","ADM0_A3_VN":"ARE","ADM0_A3_TR":"ARE","ADM0_A3_ID":"ARE","ADM0_A3_PL":"ARE","ADM0_A3_GR":"ARE","ADM0_A3_IT":"ARE","ADM0_A3_NL":"ARE","ADM0_A3_SE":"ARE","ADM0_A3_BD":"ARE","ADM0_A3_UA":"ARE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":20,"LONG_LEN":20,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":54.547256,"LABEL_Y":23.466285,"NE_ID":1159320329,"WIKIDATAID":"Q878","NAME_AR":"الإمارات العربية المتحدة","NAME_BN":"সংযুক্ত আরব আমিরাত","NAME_DE":"Vereinigte Arabische Emirate","NAME_EN":"United Arab Emirates","NAME_ES":"Emiratos Árabes Unidos","NAME_FA":"امارات متحده عربی","NAME_FR":"Émirats arabes unis","NAME_EL":"Ηνωμένα Αραβικά Εμιράτα","NAME_HE":"איחוד האמירויות הערביות","NAME_HI":"संयुक्त अरब अमीरात","NAME_HU":"Egyesült Arab Emírségek","NAME_ID":"Uni Emirat Arab","NAME_IT":"Emirati Arabi Uniti","NAME_JA":"アラブ首長国連邦","NAME_KO":"아랍에미리트","NAME_NL":"Verenigde Arabische Emiraten","NAME_PL":"Zjednoczone Emiraty Arabskie","NAME_PT":"Emirados Árabes Unidos","NAME_RU":"Объединённые Арабские Эмираты","NAME_SV":"Förenade Arabemiraten","NAME_TR":"Birleşik Arap Emirlikleri","NAME_UK":"Об'єднані Арабські Емірати","NAME_UR":"متحدہ عرب امارات","NAME_VI":"Các Tiểu vương quốc Ả Rập Thống nhất","NAME_ZH":"阿拉伯联合酋长国","NAME_ZHT":"阿拉伯聯合大公國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[38.21435546875,47.091455078124994],[38.28740234375002,47.5591796875],[38.90029296875002,47.855126953124994],[39.735937500000006,47.84482421875],[39.961035156250006,48.237939453124994],[39.6865234375,49.00791015625],[40.07001953125001,49.20029296875],[39.78056640625002,49.572021484375],[39.1748046875,49.85595703125],[38.25859375000002,50.05234375],[38.046875,49.92001953125],[37.4228515625,50.411474609375],[36.61943359375002,50.209228515625],[35.41162109375,50.539697265624994],[35.31191406250002,51.043896484375],[34.28066406250002,51.311669921874994],[34.39785156250002,51.780419921875],[33.73525390625002,52.344775390624996],[32.507910156250006,52.308544921875],[31.76337890625001,52.10107421875],[30.98066406250001,52.046191406249996],[30.533007812500017,51.596337890624994],[29.346484375000017,51.382568359375],[29.135644531250023,51.61728515625],[28.599023437500023,51.542626953124994],[27.270117187500006,51.613574218749996],[27.141992187500023,51.75205078125],[25.92529296875,51.913525390625],[24.361914062500006,51.867529296875],[23.605273437500017,51.517919921875],[24.105761718750017,50.844970703125],[23.711718750000017,50.377343749999994],[22.6494140625,49.539013671875],[22.538671875000006,49.072705078125],[22.1318359375,48.405322265624996],[22.87666015625001,47.947265625],[23.20263671875,48.084521484374996],[24.893359375000017,47.7177734375],[26.162695312500006,47.992529296875],[26.618945312500017,48.25986328125],[27.549218750000023,48.477734375],[29.19482421875,47.882421875],[29.159765625000006,47.4556640625],[29.54931640625,47.246826171875],[29.877832031250023,46.828906249999996],[29.837890625,46.350537109375],[29.146289062500017,46.526904296874996],[28.94775390625,46.049951171874994],[28.212500000000006,45.450439453125],[28.7607421875,45.234130859375],[29.223535156250023,45.4029296875],[29.705859375000017,45.259912109374994],[29.601660156250162,45.682519531250136],[30.219042968750173,45.86674804687519],[30.796289062500183,46.55200195312517],[31.974316406250193,46.70878906250014],[32.03574218750009,46.26098632812521],[32.476757812500054,46.08369140625015],[33.20224609375006,46.175732421875075],[33.59414062500008,46.09624023437499],[33.65996518914096,46.21957283155638],[34.686878348314735,45.97695049175155],[35.00167423940718,45.73338320565324],[34.84960937500012,46.18989257812512],[35.82714843750014,46.62431640625016],[36.279492187500104,46.658593750000215],[37.33984375000012,46.91689453125008],[37.54335937500019,47.07456054687505],[38.21435546875,47.091455078124994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Ukraine","SOV_A3":"UKR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Ukraine","ADM0_A3":"UKR","GEOU_DIF":0,"GEOUNIT":"Ukraine","GU_A3":"UKR","SU_DIF":0,"SUBUNIT":"Ukraine","SU_A3":"UKR","BRK_DIFF":0,"NAME":"Ukraine","NAME_LONG":"Ukraine","BRK_A3":"UKR","BRK_NAME":"Ukraine","BRK_GROUP":"","ABBREV":"Ukr.","POSTAL":"UA","FORMAL_EN":"Ukraine","FORMAL_FR":"","NAME_CIAWF":"Ukraine","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Ukraine","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":1,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":44385155,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":153781,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"UP","ISO_A2":"UA","ISO_A2_EH":"UA","ISO_A3":"UKR","ISO_A3_EH":"UKR","ISO_N3":"804","ISO_N3_EH":"804","UN_A3":"804","WB_A2":"UA","WB_A3":"UKR","WOE_ID":23424976,"WOE_ID_EH":23424976,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"UKR","ADM0_DIFF":"","ADM0_TLC":"UKR","ADM0_A3_US":"UKR","ADM0_A3_FR":"UKR","ADM0_A3_RU":"UKR","ADM0_A3_ES":"UKR","ADM0_A3_CN":"UKR","ADM0_A3_TW":"UKR","ADM0_A3_IN":"UKR","ADM0_A3_NP":"UKR","ADM0_A3_PK":"UKR","ADM0_A3_DE":"UKR","ADM0_A3_GB":"UKR","ADM0_A3_BR":"UKR","ADM0_A3_IL":"UKR","ADM0_A3_PS":"UKR","ADM0_A3_SA":"UKR","ADM0_A3_EG":"UKR","ADM0_A3_MA":"UKR","ADM0_A3_PT":"UKR","ADM0_A3_AR":"UKR","ADM0_A3_JP":"UKR","ADM0_A3_KO":"UKR","ADM0_A3_VN":"UKR","ADM0_A3_TR":"UKR","ADM0_A3_ID":"UKR","ADM0_A3_PL":"UKR","ADM0_A3_GR":"UKR","ADM0_A3_IT":"UKR","ADM0_A3_NL":"UKR","ADM0_A3_SE":"UKR","ADM0_A3_BD":"UKR","ADM0_A3_UA":"UKR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":7,"LABEL_X":32.140865,"LABEL_Y":49.724739,"NE_ID":1159321345,"WIKIDATAID":"Q212","NAME_AR":"أوكرانيا","NAME_BN":"ইউক্রেন","NAME_DE":"Ukraine","NAME_EN":"Ukraine","NAME_ES":"Ucrania","NAME_FA":"اوکراین","NAME_FR":"Ukraine","NAME_EL":"Ουκρανία","NAME_HE":"אוקראינה","NAME_HI":"युक्रेन","NAME_HU":"Ukrajna","NAME_ID":"Ukraina","NAME_IT":"Ucraina","NAME_JA":"ウクライナ","NAME_KO":"우크라이나","NAME_NL":"Oekraïne","NAME_PL":"Ukraina","NAME_PT":"Ucrânia","NAME_RU":"Украина","NAME_SV":"Ukraina","NAME_TR":"Ukrayna","NAME_UK":"Україна","NAME_UR":"یوکرین","NAME_VI":"Ukraina","NAME_ZH":"乌克兰","NAME_ZHT":"烏克蘭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[33.90322265625002,-1.0020507812500057],[33.94316406250002,0.17377929687499716],[34.48173828125002,1.0421386718749943],[34.78759765625,1.230712890625],[34.96523437500002,1.6433593749999886],[34.96406250000001,2.0624023437499943],[34.74248046875002,2.818115234375],[34.447851562500006,3.1634765624999943],[34.39287109375002,3.6915039062499915],[34.1650390625,3.81298828125],[33.97607421875,4.22021484375],[33.489355468750006,3.755078124999997],[32.83808593750001,3.7984863281249943],[32.33574218750002,3.7062011718749943],[32.09941406250002,3.5291992187499943],[31.79804687500001,3.8026367187499943],[31.47998046875,3.6804687499999886],[31.15234375,3.785595703124997],[30.83857421875001,3.49072265625],[30.728613281250006,2.4553710937499886],[31.176367187500006,2.2700683593749886],[31.252734375000017,2.0445800781249943],[30.94257812500001,1.6828124999999972],[29.94287109375,0.8192382812499943],[29.934472656250023,0.4990234375],[29.717675781250023,0.09833984374999716],[29.561914062500023,-0.9773437500000028],[29.576953125000017,-1.3878906250000114],[30.1015625,-1.36865234375],[30.50996093750001,-1.0672851562500085],[30.741992187500017,-1.0075195312500114],[32.90517578125002,-1.0020507812500057],[33.90322265625002,-1.0020507812500057]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Uganda","SOV_A3":"UGA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Uganda","ADM0_A3":"UGA","GEOU_DIF":0,"GEOUNIT":"Uganda","GU_A3":"UGA","SU_DIF":0,"SUBUNIT":"Uganda","SU_A3":"UGA","BRK_DIFF":0,"NAME":"Uganda","NAME_LONG":"Uganda","BRK_A3":"UGA","BRK_NAME":"Uganda","BRK_GROUP":"","ABBREV":"Uga.","POSTAL":"UG","FORMAL_EN":"Republic of Uganda","FORMAL_FR":"","NAME_CIAWF":"Uganda","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Uganda","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":6,"MAPCOLOR13":4,"POP_EST":44269594,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":35165,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"UG","ISO_A2":"UG","ISO_A2_EH":"UG","ISO_A3":"UGA","ISO_A3_EH":"UGA","ISO_N3":"800","ISO_N3_EH":"800","UN_A3":"800","WB_A2":"UG","WB_A3":"UGA","WOE_ID":23424974,"WOE_ID_EH":23424974,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"UGA","ADM0_DIFF":"","ADM0_TLC":"UGA","ADM0_A3_US":"UGA","ADM0_A3_FR":"UGA","ADM0_A3_RU":"UGA","ADM0_A3_ES":"UGA","ADM0_A3_CN":"UGA","ADM0_A3_TW":"UGA","ADM0_A3_IN":"UGA","ADM0_A3_NP":"UGA","ADM0_A3_PK":"UGA","ADM0_A3_DE":"UGA","ADM0_A3_GB":"UGA","ADM0_A3_BR":"UGA","ADM0_A3_IL":"UGA","ADM0_A3_PS":"UGA","ADM0_A3_SA":"UGA","ADM0_A3_EG":"UGA","ADM0_A3_MA":"UGA","ADM0_A3_PT":"UGA","ADM0_A3_AR":"UGA","ADM0_A3_JP":"UGA","ADM0_A3_KO":"UGA","ADM0_A3_VN":"UGA","ADM0_A3_TR":"UGA","ADM0_A3_ID":"UGA","ADM0_A3_PL":"UGA","ADM0_A3_GR":"UGA","ADM0_A3_IT":"UGA","ADM0_A3_NL":"UGA","ADM0_A3_SE":"UGA","ADM0_A3_BD":"UGA","ADM0_A3_UA":"UGA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":32.948555,"LABEL_Y":1.972589,"NE_ID":1159321343,"WIKIDATAID":"Q1036","NAME_AR":"أوغندا","NAME_BN":"উগান্ডা","NAME_DE":"Uganda","NAME_EN":"Uganda","NAME_ES":"Uganda","NAME_FA":"اوگاندا","NAME_FR":"Ouganda","NAME_EL":"Ουγκάντα","NAME_HE":"אוגנדה","NAME_HI":"युगाण्डा","NAME_HU":"Uganda","NAME_ID":"Uganda","NAME_IT":"Uganda","NAME_JA":"ウガンダ","NAME_KO":"우간다","NAME_NL":"Oeganda","NAME_PL":"Uganda","NAME_PT":"Uganda","NAME_RU":"Уганда","NAME_SV":"Uganda","NAME_TR":"Uganda","NAME_UK":"Уганда","NAME_UR":"یوگنڈا","NAME_VI":"Uganda","NAME_ZH":"乌干达","NAME_ZHT":"烏干達","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[55.97744140625002,41.322216796875],[55.54521484375002,41.262744140624996],[54.90371093750002,41.919091796874994],[54.12099609375002,42.335205078125],[53.250097656250006,42.205859374999996],[52.49384765625001,41.78037109375],[52.97001953125002,41.976220703124994],[53.84648437500002,42.091162109375],[54.094824218750006,41.519384765625],[54.59218750000002,41.1935546875],[54.710058593750006,40.89111328125],[53.87001953125002,40.648681640625],[53.14521484375001,40.824951171875],[52.73369140625002,40.398730468749996],[52.98750000000001,39.987597656249996],[53.40419921875002,39.960351562499994],[53.472265625000006,39.668798828125],[53.12480468750002,39.432080078125],[53.61757812500002,39.215966796874994],[53.86865234375,38.949267578124996],[53.82353515625002,37.9279296875],[53.914160156250006,37.343554687499996],[54.745214843750006,37.501904296875],[55.07558593750002,37.902490234374994],[55.57841796875002,38.099755859374994],[56.22880859375002,38.073388671874994],[56.44062500000001,38.249414062499994],[57.19355468750001,38.21640625],[57.423828125,37.947705078125],[58.43574218750001,37.638525390625],[58.8154296875,37.683496093749994],[59.240820312500006,37.520751953125],[59.56220703125001,37.17890625],[60.06279296875002,36.962890625],[60.34130859375,36.637646484375],[61.11962890625,36.642578125],[61.26201171875002,35.619580078125],[62.61054687500001,35.233154296875],[63.056640625,35.44580078125],[63.10859375000001,35.818701171875],[63.86250000000001,36.012353515624994],[64.51103515625002,36.340673828125],[64.81630859375002,37.132080078125],[65.55498046875002,37.251171875],[65.76503906250002,37.569140624999996],[66.52226562500002,37.348486328125],[66.62929687500002,37.932031249999994],[65.85712890625001,38.26875],[65.612890625,38.238574218749996],[64.16279296875001,38.95361328125],[62.65068359375002,39.85849609375],[62.09501953125002,40.68330078125],[61.95351562500002,41.030615234375],[61.32890625000002,41.195117187499996],[60.45498046875002,41.221630859375],[60.08964843750002,41.3994140625],[60.10693359375,41.907421875],[59.85830078125002,42.295166015625],[59.45107421875002,42.29951171875],[58.58906250000001,42.778466796874994],[58.25966796875002,42.6880859375],[57.81425781250002,42.189843749999994],[57.38173828125002,42.156298828124996],[56.96406250000001,41.85654296875],[57.01796875000002,41.263476562499996],[55.97744140625002,41.322216796875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":4,"SOVEREIGNT":"Turkmenistan","SOV_A3":"TKM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Turkmenistan","ADM0_A3":"TKM","GEOU_DIF":0,"GEOUNIT":"Turkmenistan","GU_A3":"TKM","SU_DIF":0,"SUBUNIT":"Turkmenistan","SU_A3":"TKM","BRK_DIFF":0,"NAME":"Turkmenistan","NAME_LONG":"Turkmenistan","BRK_A3":"TKM","BRK_NAME":"Turkmenistan","BRK_GROUP":"","ABBREV":"Turkm.","POSTAL":"TM","FORMAL_EN":"Turkmenistan","FORMAL_FR":"","NAME_CIAWF":"Turkmenistan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Turkmenistan","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":1,"MAPCOLOR13":9,"POP_EST":5942089,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":40761,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"TX","ISO_A2":"TM","ISO_A2_EH":"TM","ISO_A3":"TKM","ISO_A3_EH":"TKM","ISO_N3":"795","ISO_N3_EH":"795","UN_A3":"795","WB_A2":"TM","WB_A3":"TKM","WOE_ID":23424972,"WOE_ID_EH":23424972,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TKM","ADM0_DIFF":"","ADM0_TLC":"TKM","ADM0_A3_US":"TKM","ADM0_A3_FR":"TKM","ADM0_A3_RU":"TKM","ADM0_A3_ES":"TKM","ADM0_A3_CN":"TKM","ADM0_A3_TW":"TKM","ADM0_A3_IN":"TKM","ADM0_A3_NP":"TKM","ADM0_A3_PK":"TKM","ADM0_A3_DE":"TKM","ADM0_A3_GB":"TKM","ADM0_A3_BR":"TKM","ADM0_A3_IL":"TKM","ADM0_A3_PS":"TKM","ADM0_A3_SA":"TKM","ADM0_A3_EG":"TKM","ADM0_A3_MA":"TKM","ADM0_A3_PT":"TKM","ADM0_A3_AR":"TKM","ADM0_A3_JP":"TKM","ADM0_A3_KO":"TKM","ADM0_A3_VN":"TKM","ADM0_A3_TR":"TKM","ADM0_A3_ID":"TKM","ADM0_A3_PL":"TKM","ADM0_A3_GR":"TKM","ADM0_A3_IT":"TKM","ADM0_A3_NL":"TKM","ADM0_A3_SE":"TKM","ADM0_A3_BD":"TKM","ADM0_A3_UA":"TKM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Central Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":58.676647,"LABEL_Y":39.855246,"NE_ID":1159321309,"WIKIDATAID":"Q874","NAME_AR":"تركمانستان","NAME_BN":"তুর্কমেনিস্তান","NAME_DE":"Turkmenistan","NAME_EN":"Turkmenistan","NAME_ES":"Turkmenistán","NAME_FA":"ترکمنستان","NAME_FR":"Turkménistan","NAME_EL":"Τουρκμενιστάν","NAME_HE":"טורקמניסטן","NAME_HI":"तुर्कमेनिस्तान","NAME_HU":"Türkmenisztán","NAME_ID":"Turkmenistan","NAME_IT":"Turkmenistan","NAME_JA":"トルクメニスタン","NAME_KO":"투르크메니스탄","NAME_NL":"Turkmenistan","NAME_PL":"Turkmenistan","NAME_PT":"Turquemenistão","NAME_RU":"Туркмения","NAME_SV":"Turkmenistan","NAME_TR":"Türkmenistan","NAME_UK":"Туркменістан","NAME_UR":"ترکمانستان","NAME_VI":"Turkmenistan","NAME_ZH":"土库曼斯坦","NAME_ZHT":"土庫曼","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[41.51005859375002,41.517480468749994],[40.95947265625,41.21162109375],[40.265234375000006,40.961328124999994],[39.426367187500006,41.1064453125],[38.38105468750001,40.92451171875],[36.50966796875002,41.262499999999996],[36.0517578125,41.682568359375],[35.29775390625002,41.728515625],[34.75048828125,41.956835937499996],[33.38134765625,42.017578125],[32.30644531250002,41.72958984375],[31.4580078125,41.32001953125],[31.2548828125,41.1076171875],[29.322265625,41.227734375],[29.36474609375,40.80927734375],[28.2890625,40.40302734375],[27.4755859375,40.319921875],[26.738085937500017,40.400244140625],[26.18134765625001,39.990087890625],[26.113085937500017,39.4673828125],[26.68183593750001,39.292236328125],[27.013671875,38.886865234374994],[26.763671875,38.709619140624994],[26.68281250000001,38.19833984375],[27.232421875,37.978662109374994],[27.07783203125001,37.6876953125],[27.348925781250017,37.019580078124996],[28.133691406250023,37.0294921875],[28.48359375000001,36.80380859375],[29.03828125000001,36.69345703125],[29.14326171875001,36.397216796875],[29.689062500000006,36.156689453125],[30.48359375000001,36.310400390625],[30.64404296875,36.865673828125],[31.3525390625,36.801074218749996],[32.02197265625,36.535302734374994],[32.37773437500002,36.183642578124996],[32.79482421875002,36.035888671875],[33.69472656250002,36.181982421875],[34.60136718750002,36.784472656249996],[35.53740234375002,36.597021484375],[36.048925781250006,36.910595703125],[36.1884765625,36.658984374999996],[35.81093750000002,36.309863281249996],[35.892675781250006,35.916552734374996],[36.12734375000002,35.831445312499994],[36.65859375000002,36.802539062499996],[37.43632812500002,36.643310546875],[38.19169921875002,36.9015625],[38.7666015625,36.693115234375],[39.35664062500001,36.681591796875],[40.01640625000002,36.826074218749994],[40.705664062500006,37.097705078124996],[41.51552734375002,37.089160156249996],[42.2685546875,37.2765625],[42.358984375000006,37.10859375],[42.77460937500001,37.371874999999996],[44.76513671875,37.142431640625],[44.56123046875001,37.74462890625],[44.21132812500002,37.908056640625],[44.43085937500001,38.356787109375],[44.02324218750002,39.37744140625],[44.81718750000002,39.650439453124996],[44.76826171875001,39.703515624999994],[44.28925781250001,40.040380859375],[43.79169921875001,40.070263671875],[43.5693359375,40.482373046875],[43.72265625,40.719531249999996],[43.439453125,41.10712890625],[42.78789062500002,41.563720703125],[42.466406250000006,41.439843749999994],[41.51005859375002,41.517480468749994]]],[[[28.014453125000017,41.969042968749996],[27.294921875,42.079541015625],[26.615332031250006,41.964892578124996],[26.320898437500006,41.716552734375],[26.624902343750023,41.401757812499994],[26.038964843750023,40.7267578125],[26.10546875,40.611328125],[27.25800781250001,40.687353515625],[27.499414062500023,40.97314453125],[28.172167968750017,41.080712890624994],[28.780371093750006,40.974169921874996],[29.057226562500006,41.229736328125],[28.34638671875001,41.466357421874996],[28.014453125000017,41.969042968749996]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"Turkey","SOV_A3":"TUR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Turkey","ADM0_A3":"TUR","GEOU_DIF":0,"GEOUNIT":"Turkey","GU_A3":"TUR","SU_DIF":0,"SUBUNIT":"Turkey","SU_A3":"TUR","BRK_DIFF":0,"NAME":"Turkey","NAME_LONG":"Turkey","BRK_A3":"TUR","BRK_NAME":"Turkey","BRK_GROUP":"","ABBREV":"Tur.","POSTAL":"TR","FORMAL_EN":"Republic of Turkey","FORMAL_FR":"","NAME_CIAWF":"Turkey","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Turkey","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":8,"MAPCOLOR13":4,"POP_EST":83429615,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":761425,"GDP_YEAR":2019,"ECONOMY":"4. Emerging region: MIKT","INCOME_GRP":"3. Upper middle income","FIPS_10":"TU","ISO_A2":"TR","ISO_A2_EH":"TR","ISO_A3":"TUR","ISO_A3_EH":"TUR","ISO_N3":"792","ISO_N3_EH":"792","UN_A3":"792","WB_A2":"TR","WB_A3":"TUR","WOE_ID":23424969,"WOE_ID_EH":23424969,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TUR","ADM0_DIFF":"","ADM0_TLC":"TUR","ADM0_A3_US":"TUR","ADM0_A3_FR":"TUR","ADM0_A3_RU":"TUR","ADM0_A3_ES":"TUR","ADM0_A3_CN":"TUR","ADM0_A3_TW":"TUR","ADM0_A3_IN":"TUR","ADM0_A3_NP":"TUR","ADM0_A3_PK":"TUR","ADM0_A3_DE":"TUR","ADM0_A3_GB":"TUR","ADM0_A3_BR":"TUR","ADM0_A3_IL":"TUR","ADM0_A3_PS":"TUR","ADM0_A3_SA":"TUR","ADM0_A3_EG":"TUR","ADM0_A3_MA":"TUR","ADM0_A3_PT":"TUR","ADM0_A3_AR":"TUR","ADM0_A3_JP":"TUR","ADM0_A3_KO":"TUR","ADM0_A3_VN":"TUR","ADM0_A3_TR":"TUR","ADM0_A3_ID":"TUR","ADM0_A3_PL":"TUR","ADM0_A3_GR":"TUR","ADM0_A3_IT":"TUR","ADM0_A3_NL":"TUR","ADM0_A3_SE":"TUR","ADM0_A3_BD":"TUR","ADM0_A3_UA":"TUR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":34.508268,"LABEL_Y":39.345388,"NE_ID":1159321331,"WIKIDATAID":"Q43","NAME_AR":"تركيا","NAME_BN":"তুরস্ক","NAME_DE":"Türkei","NAME_EN":"Turkey","NAME_ES":"Turquía","NAME_FA":"ترکیه","NAME_FR":"Turquie","NAME_EL":"Τουρκία","NAME_HE":"טורקיה","NAME_HI":"तुर्की","NAME_HU":"Törökország","NAME_ID":"Turki","NAME_IT":"Turchia","NAME_JA":"トルコ","NAME_KO":"터키","NAME_NL":"Turkije","NAME_PL":"Turcja","NAME_PT":"Turquia","NAME_RU":"Турция","NAME_SV":"Turkiet","NAME_TR":"Türkiye","NAME_UK":"Туреччина","NAME_UR":"ترکی","NAME_VI":"Thổ Nhĩ Kỳ","NAME_ZH":"土耳其","NAME_ZHT":"土耳其","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[11.504589843750011,33.181933593749996],[11.20263671875,33.24921875],[11.084570312500006,33.562890624999994],[10.722753906250006,33.514404296875],[10.158984375000017,33.850048828125],[10.200390625000011,34.346044921875],[10.534863281250011,34.544726562499996],[11.1201171875,35.240283203124996],[11.004296875000023,35.633837890624996],[10.5908203125,35.887255859374996],[10.525683593750017,36.32333984375],[11.126660156250011,36.874072265624996],[10.5712890625,36.879443359374996],[10.196386718750006,37.205859374999996],[9.68798828125,37.340380859374996],[8.576562500000023,36.93720703125],[8.230761718750017,36.545263671875],[8.245703125000006,35.870556640625],[8.394238281250011,35.203857421875],[8.24560546875,34.73408203125],[7.513867187500011,34.080517578125],[7.500195312500011,33.832470703125],[7.7626953125,33.23310546875],[8.2109375,32.926708984375],[8.333398437500023,32.543603515624994],[9.044042968750006,32.07236328125],[9.518750000000011,30.229394531249994],[9.89501953125,30.3873046875],[10.216406250000006,30.783203125],[10.114941406250011,31.463769531249994],[10.826367187500011,32.0806640625],[11.504980468750006,32.413671875],[11.504589843750011,33.181933593749996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Tunisia","SOV_A3":"TUN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Tunisia","ADM0_A3":"TUN","GEOU_DIF":0,"GEOUNIT":"Tunisia","GU_A3":"TUN","SU_DIF":0,"SUBUNIT":"Tunisia","SU_A3":"TUN","BRK_DIFF":0,"NAME":"Tunisia","NAME_LONG":"Tunisia","BRK_A3":"TUN","BRK_NAME":"Tunisia","BRK_GROUP":"","ABBREV":"Tun.","POSTAL":"TN","FORMAL_EN":"Republic of Tunisia","FORMAL_FR":"","NAME_CIAWF":"Tunisia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Tunisia","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":3,"MAPCOLOR9":3,"MAPCOLOR13":2,"POP_EST":11694719,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":38796,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"TS","ISO_A2":"TN","ISO_A2_EH":"TN","ISO_A3":"TUN","ISO_A3_EH":"TUN","ISO_N3":"788","ISO_N3_EH":"788","UN_A3":"788","WB_A2":"TN","WB_A3":"TUN","WOE_ID":23424967,"WOE_ID_EH":23424967,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TUN","ADM0_DIFF":"","ADM0_TLC":"TUN","ADM0_A3_US":"TUN","ADM0_A3_FR":"TUN","ADM0_A3_RU":"TUN","ADM0_A3_ES":"TUN","ADM0_A3_CN":"TUN","ADM0_A3_TW":"TUN","ADM0_A3_IN":"TUN","ADM0_A3_NP":"TUN","ADM0_A3_PK":"TUN","ADM0_A3_DE":"TUN","ADM0_A3_GB":"TUN","ADM0_A3_BR":"TUN","ADM0_A3_IL":"TUN","ADM0_A3_PS":"TUN","ADM0_A3_SA":"TUN","ADM0_A3_EG":"TUN","ADM0_A3_MA":"TUN","ADM0_A3_PT":"TUN","ADM0_A3_AR":"TUN","ADM0_A3_JP":"TUN","ADM0_A3_KO":"TUN","ADM0_A3_VN":"TUN","ADM0_A3_TR":"TUN","ADM0_A3_ID":"TUN","ADM0_A3_PL":"TUN","ADM0_A3_GR":"TUN","ADM0_A3_IT":"TUN","ADM0_A3_NL":"TUN","ADM0_A3_SE":"TUN","ADM0_A3_BD":"TUN","ADM0_A3_UA":"TUN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":9.007881,"LABEL_Y":33.687263,"NE_ID":1159321327,"WIKIDATAID":"Q948","NAME_AR":"تونس","NAME_BN":"তিউনিসিয়া","NAME_DE":"Tunesien","NAME_EN":"Tunisia","NAME_ES":"Túnez","NAME_FA":"تونس","NAME_FR":"Tunisie","NAME_EL":"Τυνησία","NAME_HE":"תוניסיה","NAME_HI":"ट्यूनिशिया","NAME_HU":"Tunézia","NAME_ID":"Tunisia","NAME_IT":"Tunisia","NAME_JA":"チュニジア","NAME_KO":"튀니지","NAME_NL":"Tunesië","NAME_PL":"Tunezja","NAME_PT":"Tunísia","NAME_RU":"Тунис","NAME_SV":"Tunisien","NAME_TR":"Tunus","NAME_UK":"Туніс","NAME_UR":"تونس","NAME_VI":"Tuy-ni-di","NAME_ZH":"突尼斯","NAME_ZHT":"突尼西亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-61.012109374999994,10.134326171874989],[-61.03374023437499,10.669873046874997],[-61.464746093749994,10.538964843749994],[-61.5966796875,10.064648437499997],[-61.012109374999994,10.134326171874989]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":5,"SOVEREIGNT":"Trinidad and Tobago","SOV_A3":"TTO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Trinidad and Tobago","ADM0_A3":"TTO","GEOU_DIF":0,"GEOUNIT":"Trinidad and Tobago","GU_A3":"TTO","SU_DIF":0,"SUBUNIT":"Trinidad and Tobago","SU_A3":"TTO","BRK_DIFF":0,"NAME":"Trinidad and Tobago","NAME_LONG":"Trinidad and Tobago","BRK_A3":"TTO","BRK_NAME":"Trinidad and Tobago","BRK_GROUP":"","ABBREV":"Tr.T.","POSTAL":"TT","FORMAL_EN":"Republic of Trinidad and Tobago","FORMAL_FR":"","NAME_CIAWF":"Trinidad and Tobago","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Trinidad and Tobago","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":5,"POP_EST":1394973,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":24269,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"TD","ISO_A2":"TT","ISO_A2_EH":"TT","ISO_A3":"TTO","ISO_A3_EH":"TTO","ISO_N3":"780","ISO_N3_EH":"780","UN_A3":"780","WB_A2":"TT","WB_A3":"TTO","WOE_ID":23424958,"WOE_ID_EH":23424958,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TTO","ADM0_DIFF":"","ADM0_TLC":"TTO","ADM0_A3_US":"TTO","ADM0_A3_FR":"TTO","ADM0_A3_RU":"TTO","ADM0_A3_ES":"TTO","ADM0_A3_CN":"TTO","ADM0_A3_TW":"TTO","ADM0_A3_IN":"TTO","ADM0_A3_NP":"TTO","ADM0_A3_PK":"TTO","ADM0_A3_DE":"TTO","ADM0_A3_GB":"TTO","ADM0_A3_BR":"TTO","ADM0_A3_IL":"TTO","ADM0_A3_PS":"TTO","ADM0_A3_SA":"TTO","ADM0_A3_EG":"TTO","ADM0_A3_MA":"TTO","ADM0_A3_PT":"TTO","ADM0_A3_AR":"TTO","ADM0_A3_JP":"TTO","ADM0_A3_KO":"TTO","ADM0_A3_VN":"TTO","ADM0_A3_TR":"TTO","ADM0_A3_ID":"TTO","ADM0_A3_PL":"TTO","ADM0_A3_GR":"TTO","ADM0_A3_IT":"TTO","ADM0_A3_NL":"TTO","ADM0_A3_SE":"TTO","ADM0_A3_BD":"TTO","ADM0_A3_UA":"TTO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":19,"LONG_LEN":19,"ABBREV_LEN":5,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":-60.9184,"LABEL_Y":10.9989,"NE_ID":1159321321,"WIKIDATAID":"Q754","NAME_AR":"ترينيداد وتوباغو","NAME_BN":"ত্রিনিদাদ ও টোবাগো","NAME_DE":"Trinidad und Tobago","NAME_EN":"Trinidad and Tobago","NAME_ES":"Trinidad y Tobago","NAME_FA":"ترینیداد و توباگو","NAME_FR":"Trinité-et-Tobago","NAME_EL":"Τρινιντάντ και Τομπάγκο","NAME_HE":"טרינידד וטובגו","NAME_HI":"त्रिनिदाद और टोबैगो","NAME_HU":"Trinidad és Tobago","NAME_ID":"Trinidad dan Tobago","NAME_IT":"Trinidad e Tobago","NAME_JA":"トリニダード・トバゴ","NAME_KO":"트리니다드 토바고","NAME_NL":"Trinidad en Tobago","NAME_PL":"Trynidad i Tobago","NAME_PT":"Trinidad e Tobago","NAME_RU":"Тринидад и Тобаго","NAME_SV":"Trinidad och Tobago","NAME_TR":"Trinidad ve Tobago","NAME_UK":"Тринідад і Тобаго","NAME_UR":"ٹرینیڈاڈ و ٹوباگو","NAME_VI":"Trinidad và Tobago","NAME_ZH":"特立尼达和多巴哥","NAME_ZHT":"千里達及托巴哥","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"Tonga","SOV_A3":"TON","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Tonga","ADM0_A3":"TON","GEOU_DIF":0,"GEOUNIT":"Tonga","GU_A3":"TON","SU_DIF":0,"SUBUNIT":"Tonga","SU_A3":"TON","BRK_DIFF":0,"NAME":"Tonga","NAME_LONG":"Tonga","BRK_A3":"TON","BRK_NAME":"Tonga","BRK_GROUP":"","ABBREV":"Tongo","POSTAL":"TO","FORMAL_EN":"Kingdom of Tonga","FORMAL_FR":"","NAME_CIAWF":"Tonga","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Tonga","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":104494,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":512,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"TN","ISO_A2":"TO","ISO_A2_EH":"TO","ISO_A3":"TON","ISO_A3_EH":"TON","ISO_N3":"776","ISO_N3_EH":"776","UN_A3":"776","WB_A2":"TO","WB_A3":"TON","WOE_ID":23424964,"WOE_ID_EH":23424964,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TON","ADM0_DIFF":"","ADM0_TLC":"TON","ADM0_A3_US":"TON","ADM0_A3_FR":"TON","ADM0_A3_RU":"TON","ADM0_A3_ES":"TON","ADM0_A3_CN":"TON","ADM0_A3_TW":"TON","ADM0_A3_IN":"TON","ADM0_A3_NP":"TON","ADM0_A3_PK":"TON","ADM0_A3_DE":"TON","ADM0_A3_GB":"TON","ADM0_A3_BR":"TON","ADM0_A3_IL":"TON","ADM0_A3_PS":"TON","ADM0_A3_SA":"TON","ADM0_A3_EG":"TON","ADM0_A3_MA":"TON","ADM0_A3_PT":"TON","ADM0_A3_AR":"TON","ADM0_A3_JP":"TON","ADM0_A3_KO":"TON","ADM0_A3_VN":"TON","ADM0_A3_TR":"TON","ADM0_A3_ID":"TON","ADM0_A3_PL":"TON","ADM0_A3_GR":"TON","ADM0_A3_IT":"TON","ADM0_A3_NL":"TON","ADM0_A3_SE":"TON","ADM0_A3_BD":"TON","ADM0_A3_UA":"TON","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-175.163014,"LABEL_Y":-21.210026,"NE_ID":1159321319,"WIKIDATAID":"Q678","NAME_AR":"تونغا","NAME_BN":"টোঙ্গা","NAME_DE":"Tonga","NAME_EN":"Tonga","NAME_ES":"Tonga","NAME_FA":"تونگا","NAME_FR":"Tonga","NAME_EL":"Τόνγκα","NAME_HE":"טונגה","NAME_HI":"टोंगा","NAME_HU":"Tonga","NAME_ID":"Tonga","NAME_IT":"Tonga","NAME_JA":"トンガ","NAME_KO":"통가","NAME_NL":"Tonga","NAME_PL":"Tonga","NAME_PT":"Tonga","NAME_RU":"Тонга","NAME_SV":"Tonga","NAME_TR":"Tonga","NAME_UK":"Тонга","NAME_UR":"ٹونگا","NAME_VI":"Tonga","NAME_ZH":"汤加","NAME_ZHT":"東加","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[0.9004882812500057,10.993261718749991],[-0.068603515625,11.115624999999994],[-0.05771484374997726,10.630615234375],[0.36269531250002274,10.236474609374994],[0.26191406250001137,9.49560546875],[0.5290039062500114,9.358300781249994],[0.41533203125001705,8.652734374999994],[0.6880859375000057,8.304248046874989],[0.5835937500000057,8.145800781249989],[0.634765625,7.353662109374994],[0.5255859375000114,6.8509277343749915],[0.7369140625000057,6.452587890624997],[1.1872070312500114,6.089404296874989],[1.6226562500000057,6.216796875],[1.6001953125000057,9.050048828125],[1.42431640625,9.285009765624991],[1.330078125,9.996972656249994],[0.7799804687500114,10.359570312499997],[0.9004882812500057,10.993261718749991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Togo","SOV_A3":"TGO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Togo","ADM0_A3":"TGO","GEOU_DIF":0,"GEOUNIT":"Togo","GU_A3":"TGO","SU_DIF":0,"SUBUNIT":"Togo","SU_A3":"TGO","BRK_DIFF":0,"NAME":"Togo","NAME_LONG":"Togo","BRK_A3":"TGO","BRK_NAME":"Togo","BRK_GROUP":"","ABBREV":"Togo","POSTAL":"TG","FORMAL_EN":"Togolese Republic","FORMAL_FR":"République Togolaise","NAME_CIAWF":"Togo","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Togo","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":5,"POP_EST":8082366,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":5490,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"TO","ISO_A2":"TG","ISO_A2_EH":"TG","ISO_A3":"TGO","ISO_A3_EH":"TGO","ISO_N3":"768","ISO_N3_EH":"768","UN_A3":"768","WB_A2":"TG","WB_A3":"TGO","WOE_ID":23424965,"WOE_ID_EH":23424965,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TGO","ADM0_DIFF":"","ADM0_TLC":"TGO","ADM0_A3_US":"TGO","ADM0_A3_FR":"TGO","ADM0_A3_RU":"TGO","ADM0_A3_ES":"TGO","ADM0_A3_CN":"TGO","ADM0_A3_TW":"TGO","ADM0_A3_IN":"TGO","ADM0_A3_NP":"TGO","ADM0_A3_PK":"TGO","ADM0_A3_DE":"TGO","ADM0_A3_GB":"TGO","ADM0_A3_BR":"TGO","ADM0_A3_IL":"TGO","ADM0_A3_PS":"TGO","ADM0_A3_SA":"TGO","ADM0_A3_EG":"TGO","ADM0_A3_MA":"TGO","ADM0_A3_PT":"TGO","ADM0_A3_AR":"TGO","ADM0_A3_JP":"TGO","ADM0_A3_KO":"TGO","ADM0_A3_VN":"TGO","ADM0_A3_TR":"TGO","ADM0_A3_ID":"TGO","ADM0_A3_PL":"TGO","ADM0_A3_GR":"TGO","ADM0_A3_IT":"TGO","ADM0_A3_NL":"TGO","ADM0_A3_SE":"TGO","ADM0_A3_BD":"TGO","ADM0_A3_UA":"TGO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":1.058113,"LABEL_Y":8.80722,"NE_ID":1159321303,"WIKIDATAID":"Q945","NAME_AR":"توغو","NAME_BN":"টোগো","NAME_DE":"Togo","NAME_EN":"Togo","NAME_ES":"Togo","NAME_FA":"توگو","NAME_FR":"Togo","NAME_EL":"Τόγκο","NAME_HE":"טוגו","NAME_HI":"टोगो","NAME_HU":"Togo","NAME_ID":"Togo","NAME_IT":"Togo","NAME_JA":"トーゴ","NAME_KO":"토고","NAME_NL":"Togo","NAME_PL":"Togo","NAME_PT":"Togo","NAME_RU":"Того","NAME_SV":"Togo","NAME_TR":"Togo","NAME_UK":"Того","NAME_UR":"ٹوگو","NAME_VI":"Togo","NAME_ZH":"多哥","NAME_ZHT":"多哥","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[125.06816406249999,-9.511914062500011],[125.40800781249999,-9.275781250000009],[126.38251953125001,-8.957617187500006],[126.91523437500001,-8.715234375000009],[126.61972656250003,-8.45947265625],[125.80429687500003,-8.4921875],[125.17802734374999,-8.647851562500009],[124.92226562500002,-8.942480468750006],[125.06816406249999,-9.511914062500011]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":5,"SOVEREIGNT":"East Timor","SOV_A3":"TLS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"East Timor","ADM0_A3":"TLS","GEOU_DIF":0,"GEOUNIT":"East Timor","GU_A3":"TLS","SU_DIF":0,"SUBUNIT":"East Timor","SU_A3":"TLS","BRK_DIFF":0,"NAME":"Timor-Leste","NAME_LONG":"Timor-Leste","BRK_A3":"TLS","BRK_NAME":"Timor-Leste","BRK_GROUP":"","ABBREV":"T.L.","POSTAL":"TL","FORMAL_EN":"Democratic Republic of Timor-Leste","FORMAL_FR":"","NAME_CIAWF":"Timor-Leste","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Timor-Leste","NAME_ALT":"East Timor","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":4,"MAPCOLOR13":3,"POP_EST":1293119,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":2017,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"TT","ISO_A2":"TL","ISO_A2_EH":"TL","ISO_A3":"TLS","ISO_A3_EH":"TLS","ISO_N3":"626","ISO_N3_EH":"626","UN_A3":"626","WB_A2":"TP","WB_A3":"TMP","WOE_ID":23424968,"WOE_ID_EH":23424968,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TLS","ADM0_DIFF":"","ADM0_TLC":"TLS","ADM0_A3_US":"TLS","ADM0_A3_FR":"TLS","ADM0_A3_RU":"TLS","ADM0_A3_ES":"TLS","ADM0_A3_CN":"TLS","ADM0_A3_TW":"TLS","ADM0_A3_IN":"TLS","ADM0_A3_NP":"TLS","ADM0_A3_PK":"TLS","ADM0_A3_DE":"TLS","ADM0_A3_GB":"TLS","ADM0_A3_BR":"TLS","ADM0_A3_IL":"TLS","ADM0_A3_PS":"TLS","ADM0_A3_SA":"TLS","ADM0_A3_EG":"TLS","ADM0_A3_MA":"TLS","ADM0_A3_PT":"TLS","ADM0_A3_AR":"TLS","ADM0_A3_JP":"TLS","ADM0_A3_KO":"TLS","ADM0_A3_VN":"TLS","ADM0_A3_TR":"TLS","ADM0_A3_ID":"TLS","ADM0_A3_PL":"TLS","ADM0_A3_GR":"TLS","ADM0_A3_IT":"TLS","ADM0_A3_NL":"TLS","ADM0_A3_SE":"TLS","ADM0_A3_BD":"TLS","ADM0_A3_UA":"TLS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":125.854679,"LABEL_Y":-8.803705,"NE_ID":1159321313,"WIKIDATAID":"Q574","NAME_AR":"تيمور الشرقية","NAME_BN":"পূর্ব তিমুর","NAME_DE":"Osttimor","NAME_EN":"East Timor","NAME_ES":"Timor Oriental","NAME_FA":"تیمور شرقی","NAME_FR":"Timor oriental","NAME_EL":"Ανατολικό Τιμόρ","NAME_HE":"מזרח טימור","NAME_HI":"पूर्वी तिमोर","NAME_HU":"Kelet-Timor","NAME_ID":"Timor Leste","NAME_IT":"Timor Est","NAME_JA":"東ティモール","NAME_KO":"동티모르","NAME_NL":"Oost-Timor","NAME_PL":"Timor Wschodni","NAME_PT":"Timor-Leste","NAME_RU":"Восточный Тимор","NAME_SV":"Östtimor","NAME_TR":"Doğu Timor","NAME_UK":"Східний Тимор","NAME_UR":"مشرقی تیمور","NAME_VI":"Đông Timor","NAME_ZH":"东帝汶","NAME_ZHT":"東帝汶","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100.12246093750002,20.316650390625],[99.89033203125001,20.42441406249999],[99.337890625,20.078906250000003],[99.02070312500001,20.041796875000003],[98.91669921875001,19.772900390624997],[98.23906249999999,19.690673828125],[97.81679687500002,19.4599609375],[97.75400390625003,18.620800781249997],[97.48496093750003,18.49423828124999],[97.79296875,17.68124999999999],[98.43886718750002,16.97568359374999],[98.68925781249999,16.305419921875],[98.56523437499999,15.403564453125],[98.19101562500003,15.2041015625],[98.24599609375002,14.814746093750003],[99.13681640625003,13.716699218749994],[99.21982421875003,12.73974609375],[99.40507812499999,12.547900390624989],[99.61474609375,11.781201171874997],[99.19013671875001,11.105273437499989],[98.75722656250002,10.660937499999989],[98.70253906250002,10.190380859374997],[98.37138671874999,9.29052734375],[98.23818359375002,8.423095703125],[98.57919921875003,8.344287109374989],[99.05107421874999,7.887841796874994],[99.72031250000003,7.106201171875],[99.69599609375001,6.876660156249997],[100.119140625,6.4419921874999915],[100.34541015625001,6.5499023437499915],[101.05351562499999,6.242578124999994],[101.25703125000001,5.789355468749989],[101.55605468750002,5.907763671874989],[101.87363281250003,5.8252929687499915],[102.10107421875,6.242236328124989],[101.49794921875002,6.865283203124989],[101.01787109374999,6.8609374999999915],[100.58623046874999,7.175976562499997],[100.45351562500002,7.442285156249994],[100.27939453125003,8.268505859374997],[99.96064453125001,8.671240234374991],[99.90468750000002,9.112890624999991],[99.72382812500001,9.314208984375],[99.39384765624999,9.213720703124991],[99.16074218750003,9.734033203124994],[99.1650390625,10.31982421875],[99.48691406250003,10.889550781249994],[99.62734375000002,11.462890625],[99.98906249999999,12.170800781249994],[99.96396484375003,12.690039062499991],[100.08994140625003,13.045654296875],[100.01748046875002,13.353173828124994],[100.65605468749999,13.521289062500003],[100.96269531249999,13.431982421874991],[100.86328125,12.714501953124994],[101.44492187500003,12.618945312499989],[101.7236328125,12.689355468749994],[102.76298828124999,12.012451171875],[102.93388671874999,11.706689453124994],[102.73662109374999,12.089794921874997],[102.75566406249999,12.42626953125],[102.49960937500003,12.669970703124989],[102.31972656250002,13.539990234374997],[102.72890625000002,13.841894531249991],[103.19941406250001,14.332617187499991],[104.77900390625001,14.427832031249991],[105.18330078125001,14.346240234375003],[105.4755859375,14.530126953124991],[105.51318359375,15.360888671875003],[105.6220703125,15.699951171875],[105.40625,15.987451171875023],[105.04716796874999,16.16025390624999],[104.75058593750003,16.64755859374999],[104.81601562499998,17.30029296875],[103.94960937500002,18.318994140624994],[103.36699218749999,18.42333984375],[103.05136718750003,18.028515624999997],[102.71757812499999,17.892236328124994],[102.10146484375002,18.210644531249997],[101.10517578125001,17.479541015625102],[100.90849609374999,17.583886718749994],[101.11328125,18.03354492187499],[101.05058593749999,18.407031250000003],[101.28632812499995,18.977148437500034],[101.15468750000002,19.57919921874999],[100.62548828125,19.49985351562509],[100.39765625000001,19.756103515625],[100.54306640625003,20.088671875000003],[100.12246093750002,20.316650390625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":3,"SOVEREIGNT":"Thailand","SOV_A3":"THA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Thailand","ADM0_A3":"THA","GEOU_DIF":0,"GEOUNIT":"Thailand","GU_A3":"THA","SU_DIF":0,"SUBUNIT":"Thailand","SU_A3":"THA","BRK_DIFF":0,"NAME":"Thailand","NAME_LONG":"Thailand","BRK_A3":"THA","BRK_NAME":"Thailand","BRK_GROUP":"","ABBREV":"Thai.","POSTAL":"TH","FORMAL_EN":"Kingdom of Thailand","FORMAL_FR":"","NAME_CIAWF":"Thailand","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Thailand","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":6,"MAPCOLOR9":8,"MAPCOLOR13":1,"POP_EST":69625582,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":543548,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"TH","ISO_A2":"TH","ISO_A2_EH":"TH","ISO_A3":"THA","ISO_A3_EH":"THA","ISO_N3":"764","ISO_N3_EH":"764","UN_A3":"764","WB_A2":"TH","WB_A3":"THA","WOE_ID":23424960,"WOE_ID_EH":23424960,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"THA","ADM0_DIFF":"","ADM0_TLC":"THA","ADM0_A3_US":"THA","ADM0_A3_FR":"THA","ADM0_A3_RU":"THA","ADM0_A3_ES":"THA","ADM0_A3_CN":"THA","ADM0_A3_TW":"THA","ADM0_A3_IN":"THA","ADM0_A3_NP":"THA","ADM0_A3_PK":"THA","ADM0_A3_DE":"THA","ADM0_A3_GB":"THA","ADM0_A3_BR":"THA","ADM0_A3_IL":"THA","ADM0_A3_PS":"THA","ADM0_A3_SA":"THA","ADM0_A3_EG":"THA","ADM0_A3_MA":"THA","ADM0_A3_PT":"THA","ADM0_A3_AR":"THA","ADM0_A3_JP":"THA","ADM0_A3_KO":"THA","ADM0_A3_VN":"THA","ADM0_A3_TR":"THA","ADM0_A3_ID":"THA","ADM0_A3_PL":"THA","ADM0_A3_GR":"THA","ADM0_A3_IT":"THA","ADM0_A3_NL":"THA","ADM0_A3_SE":"THA","ADM0_A3_BD":"THA","ADM0_A3_UA":"THA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":8,"LABEL_X":101.073198,"LABEL_Y":15.45974,"NE_ID":1159321305,"WIKIDATAID":"Q869","NAME_AR":"تايلاند","NAME_BN":"থাইল্যান্ড","NAME_DE":"Thailand","NAME_EN":"Thailand","NAME_ES":"Tailandia","NAME_FA":"تایلند","NAME_FR":"Thaïlande","NAME_EL":"Ταϊλάνδη","NAME_HE":"תאילנד","NAME_HI":"थाईलैण्ड","NAME_HU":"Thaiföld","NAME_ID":"Thailand","NAME_IT":"Thailandia","NAME_JA":"タイ王国","NAME_KO":"태국","NAME_NL":"Thailand","NAME_PL":"Tajlandia","NAME_PT":"Tailândia","NAME_RU":"Таиланд","NAME_SV":"Thailand","NAME_TR":"Tayland","NAME_UK":"Таїланд","NAME_UR":"تھائی لینڈ","NAME_VI":"Thái Lan","NAME_ZH":"泰国","NAME_ZHT":"泰國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[32.919921875,-9.407421875000011],[34.320898437500006,-9.731542968750006],[34.52421875000002,-10.030175781250009],[34.66181640625001,-10.710058593750006],[34.59765625,-11.037500000000009],[34.95947265625,-11.578125],[35.630957031250006,-11.58203125],[35.78544921875002,-11.452929687500003],[36.518652343750006,-11.716210937500009],[36.97890625000002,-11.566992187500006],[37.54169921875001,-11.675097656250003],[37.92021484375002,-11.294726562500003],[38.491796875000006,-11.413281250000011],[38.79472656250002,-11.228906250000009],[39.32158203125002,-11.12255859375],[39.98867187500002,-10.82080078125],[40.46357421875001,-10.46435546875],[39.783789062500006,-9.91455078125],[39.30400390625002,-8.44384765625],[39.441015625000006,-8.011523437500003],[39.28847656250002,-7.517871093750003],[39.51923828125001,-7.124121093750006],[39.47236328125001,-6.878613281250011],[38.8740234375,-6.331250000000011],[38.81923828125002,-5.877636718750011],[39.221777343750006,-4.6923828125],[37.79726562500002,-3.6744140625000057],[37.60869140625002,-3.460253906250003],[37.64384765625002,-3.04541015625],[35.8369140625,-2.03662109375],[33.97939453125002,-1.0020507812500057],[33.90322265625002,-1.0020507812500057],[32.90517578125002,-1.0020507812500057],[30.741992187500017,-1.0075195312500114],[30.50996093750001,-1.0672851562500085],[30.812597656250006,-1.5630859375000057],[30.828710937500006,-2.3384765625000057],[30.553613281250023,-2.4000976562500114],[30.515039062500023,-2.9175781250000057],[30.79023437500001,-3.2746093750000114],[30.42500000000001,-3.5888671875],[30.14716796875001,-4.0853515625000085],[29.7177734375,-4.455859375000003],[29.403222656250023,-4.449316406250006],[29.3427734375,-4.983105468750011],[29.594140625000023,-5.6507812500000085],[29.480078125000006,-6.025000000000006],[29.70966796875001,-6.616894531250011],[30.31318359375001,-7.203710937500006],[30.75117187500001,-8.193652343750003],[31.07636718750001,-8.611914062500006],[31.3505859375,-8.607031250000006],[31.94257812500001,-9.054003906250003],[32.433203125000006,-9.156347656250006],[32.919921875,-9.407421875000011]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":3,"SOVEREIGNT":"United Republic of Tanzania","SOV_A3":"TZA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"United Republic of Tanzania","ADM0_A3":"TZA","GEOU_DIF":0,"GEOUNIT":"Tanzania","GU_A3":"TZA","SU_DIF":0,"SUBUNIT":"Tanzania","SU_A3":"TZA","BRK_DIFF":0,"NAME":"Tanzania","NAME_LONG":"Tanzania","BRK_A3":"TZA","BRK_NAME":"Tanzania","BRK_GROUP":"","ABBREV":"Tanz.","POSTAL":"TZ","FORMAL_EN":"United Republic of Tanzania","FORMAL_FR":"","NAME_CIAWF":"Tanzania","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Tanzania","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":2,"POP_EST":58005463,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":63177,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"TZ","ISO_A2":"TZ","ISO_A2_EH":"TZ","ISO_A3":"TZA","ISO_A3_EH":"TZA","ISO_N3":"834","ISO_N3_EH":"834","UN_A3":"834","WB_A2":"TZ","WB_A3":"TZA","WOE_ID":23424973,"WOE_ID_EH":23424973,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TZA","ADM0_DIFF":"","ADM0_TLC":"TZA","ADM0_A3_US":"TZA","ADM0_A3_FR":"TZA","ADM0_A3_RU":"TZA","ADM0_A3_ES":"TZA","ADM0_A3_CN":"TZA","ADM0_A3_TW":"TZA","ADM0_A3_IN":"TZA","ADM0_A3_NP":"TZA","ADM0_A3_PK":"TZA","ADM0_A3_DE":"TZA","ADM0_A3_GB":"TZA","ADM0_A3_BR":"TZA","ADM0_A3_IL":"TZA","ADM0_A3_PS":"TZA","ADM0_A3_SA":"TZA","ADM0_A3_EG":"TZA","ADM0_A3_MA":"TZA","ADM0_A3_PT":"TZA","ADM0_A3_AR":"TZA","ADM0_A3_JP":"TZA","ADM0_A3_KO":"TZA","ADM0_A3_VN":"TZA","ADM0_A3_TR":"TZA","ADM0_A3_ID":"TZA","ADM0_A3_PL":"TZA","ADM0_A3_GR":"TZA","ADM0_A3_IT":"TZA","ADM0_A3_NL":"TZA","ADM0_A3_SE":"TZA","ADM0_A3_BD":"TZA","ADM0_A3_UA":"TZA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":34.959183,"LABEL_Y":-6.051866,"NE_ID":1159321337,"WIKIDATAID":"Q924","NAME_AR":"تنزانيا","NAME_BN":"তানজানিয়া","NAME_DE":"Tansania","NAME_EN":"Tanzania","NAME_ES":"Tanzania","NAME_FA":"تانزانیا","NAME_FR":"Tanzanie","NAME_EL":"Τανζανία","NAME_HE":"טנזניה","NAME_HI":"तंज़ानिया","NAME_HU":"Tanzánia","NAME_ID":"Tanzania","NAME_IT":"Tanzania","NAME_JA":"タンザニア","NAME_KO":"탄자니아","NAME_NL":"Tanzania","NAME_PL":"Tanzania","NAME_PT":"Tanzânia","NAME_RU":"Танзания","NAME_SV":"Tanzania","NAME_TR":"Tanzanya","NAME_UK":"Танзанія","NAME_UR":"تنزانیہ","NAME_VI":"Tanzania","NAME_ZH":"坦桑尼亚","NAME_ZHT":"坦尚尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[67.75898437500001,37.172216796875],[68.06777343750002,36.9498046875],[68.96044921875,37.325048828125],[69.26484375000001,37.1083984375],[69.49208984375002,37.553076171875],[70.25146484375,37.66416015625],[70.21464843750002,37.9244140625],[70.87890625,38.456396484375],[71.255859375,38.306982421875],[71.55195312500001,37.933154296874996],[71.43291015625002,37.1275390625],[71.80205078125002,36.694287109375],[72.8955078125,37.267529296875],[73.48134765625002,37.4716796875],[73.749609375,37.231787109375],[74.25966796875002,37.415429687499994],[74.89130859375001,37.231640625],[74.74501953125002,38.510009765625],[74.27744140625,38.659765625],[73.80166015625002,38.606884765625],[73.63164062500002,39.448876953124994],[73.2349609375,39.374560546874996],[72.04277343750002,39.3521484375],[71.404296875,39.5978515625],[70.73310546875001,39.41328125],[70.60781250000002,39.564404296875],[69.59882812500001,39.573779296874996],[69.2291015625,39.761083984375],[69.5302734375,40.097314453124994],[69.966796875,40.20224609375],[70.45136718750001,40.049218749999994],[70.9580078125,40.2388671875],[70.38261718750002,40.453515624999994],[70.7509765625,40.739599609375],[70.44150390625,41.0234375],[69.712890625,40.656982421875],[69.20625000000001,40.566552734374994],[69.22832031250002,40.18759765625],[68.65253906250001,40.182666015624996],[68.46328125000002,39.53671875],[67.71904296875002,39.621386718749996],[67.349609375,39.242089843749994],[67.67656250000002,39.00849609375],[68.103515625,38.96201171875],[68.0478515625,38.669287109375],[68.29404296875,38.03291015625],[67.81435546875002,37.48701171875],[67.75898437500001,37.172216796875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Tajikistan","SOV_A3":"TJK","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Tajikistan","ADM0_A3":"TJK","GEOU_DIF":0,"GEOUNIT":"Tajikistan","GU_A3":"TJK","SU_DIF":0,"SUBUNIT":"Tajikistan","SU_A3":"TJK","BRK_DIFF":0,"NAME":"Tajikistan","NAME_LONG":"Tajikistan","BRK_A3":"TJK","BRK_NAME":"Tajikistan","BRK_GROUP":"","ABBREV":"Tjk.","POSTAL":"TJ","FORMAL_EN":"Republic of Tajikistan","FORMAL_FR":"","NAME_CIAWF":"Tajikistan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Tajikistan","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":5,"POP_EST":9321018,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":8116,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"5. Low income","FIPS_10":"TI","ISO_A2":"TJ","ISO_A2_EH":"TJ","ISO_A3":"TJK","ISO_A3_EH":"TJK","ISO_N3":"762","ISO_N3_EH":"762","UN_A3":"762","WB_A2":"TJ","WB_A3":"TJK","WOE_ID":23424961,"WOE_ID_EH":23424961,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TJK","ADM0_DIFF":"","ADM0_TLC":"TJK","ADM0_A3_US":"TJK","ADM0_A3_FR":"TJK","ADM0_A3_RU":"TJK","ADM0_A3_ES":"TJK","ADM0_A3_CN":"TJK","ADM0_A3_TW":"TJK","ADM0_A3_IN":"TJK","ADM0_A3_NP":"TJK","ADM0_A3_PK":"TJK","ADM0_A3_DE":"TJK","ADM0_A3_GB":"TJK","ADM0_A3_BR":"TJK","ADM0_A3_IL":"TJK","ADM0_A3_PS":"TJK","ADM0_A3_SA":"TJK","ADM0_A3_EG":"TJK","ADM0_A3_MA":"TJK","ADM0_A3_PT":"TJK","ADM0_A3_AR":"TJK","ADM0_A3_JP":"TJK","ADM0_A3_KO":"TJK","ADM0_A3_VN":"TJK","ADM0_A3_TR":"TJK","ADM0_A3_ID":"TJK","ADM0_A3_PL":"TJK","ADM0_A3_GR":"TJK","ADM0_A3_IT":"TJK","ADM0_A3_NL":"TJK","ADM0_A3_SE":"TJK","ADM0_A3_BD":"TJK","ADM0_A3_UA":"TJK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Central Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":72.587276,"LABEL_Y":38.199835,"NE_ID":1159321307,"WIKIDATAID":"Q863","NAME_AR":"طاجيكستان","NAME_BN":"তাজিকিস্তান","NAME_DE":"Tadschikistan","NAME_EN":"Tajikistan","NAME_ES":"Tayikistán","NAME_FA":"تاجیکستان","NAME_FR":"Tadjikistan","NAME_EL":"Τατζικιστάν","NAME_HE":"טג׳יקיסטן","NAME_HI":"ताजिकिस्तान","NAME_HU":"Tádzsikisztán","NAME_ID":"Tajikistan","NAME_IT":"Tagikistan","NAME_JA":"タジキスタン","NAME_KO":"타지키스탄","NAME_NL":"Tadzjikistan","NAME_PL":"Tadżykistan","NAME_PT":"Tajiquistão","NAME_RU":"Таджикистан","NAME_SV":"Tadzjikistan","NAME_TR":"Tacikistan","NAME_UK":"Таджикистан","NAME_UR":"تاجکستان","NAME_VI":"Tajikistan","NAME_ZH":"塔吉克斯坦","NAME_ZHT":"塔吉克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[121.0087890625,22.620361328125],[121.2958984375,22.966601562500003],[121.92900390624999,24.97373046874999],[121.59365234375002,25.275341796874997],[121.04062500000003,25.03281249999999],[120.15898437499999,23.709033203125003],[120.07246093750001,23.14975585937499],[120.32558593750002,22.542431640624997],[120.58125000000001,22.356396484374997],[121.0087890625,22.620361328125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Taiwan","SOV_A3":"TWN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Taiwan","ADM0_A3":"TWN","GEOU_DIF":0,"GEOUNIT":"Taiwan","GU_A3":"TWN","SU_DIF":0,"SUBUNIT":"Taiwan","SU_A3":"TWN","BRK_DIFF":0,"NAME":"Taiwan","NAME_LONG":"Taiwan","BRK_A3":"TWN","BRK_NAME":"Taiwan","BRK_GROUP":"","ABBREV":"Taiwan","POSTAL":"TW","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Taiwan","NOTE_ADM0":"","NOTE_BRK":"Self admin.; Claimed by China","NAME_SORT":"Taiwan","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":5,"MAPCOLOR9":7,"MAPCOLOR13":2,"POP_EST":23568378,"POP_RANK":15,"POP_YEAR":2020,"GDP_MD":1127000,"GDP_YEAR":2016,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"TW","ISO_A2":"CN-TW","ISO_A2_EH":"TW","ISO_A3":"TWN","ISO_A3_EH":"TWN","ISO_N3":"158","ISO_N3_EH":"158","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424971,"WOE_ID_EH":23424971,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TWN","ADM0_DIFF":"","ADM0_TLC":"TWN","ADM0_A3_US":"TWN","ADM0_A3_FR":"TWN","ADM0_A3_RU":"CHN","ADM0_A3_ES":"TWN","ADM0_A3_CN":"CHN","ADM0_A3_TW":"TWN","ADM0_A3_IN":"TWN","ADM0_A3_NP":"CHN","ADM0_A3_PK":"CHN","ADM0_A3_DE":"TWN","ADM0_A3_GB":"TWN","ADM0_A3_BR":"TWN","ADM0_A3_IL":"TWN","ADM0_A3_PS":"TWN","ADM0_A3_SA":"TWN","ADM0_A3_EG":"CHN","ADM0_A3_MA":"CHN","ADM0_A3_PT":"TWN","ADM0_A3_AR":"TWN","ADM0_A3_JP":"TWN","ADM0_A3_KO":"TWN","ADM0_A3_VN":"TWN","ADM0_A3_TR":"TWN","ADM0_A3_ID":"CHN","ADM0_A3_PL":"TWN","ADM0_A3_GR":"TWN","ADM0_A3_IT":"TWN","ADM0_A3_NL":"TWN","ADM0_A3_SE":"TWN","ADM0_A3_BD":"CHN","ADM0_A3_UA":"TWN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":8,"LABEL_X":120.868204,"LABEL_Y":23.652408,"NE_ID":1159321335,"WIKIDATAID":"Q865","NAME_AR":"تايوان","NAME_BN":"তাইওয়ান","NAME_DE":"Republik China","NAME_EN":"Taiwan","NAME_ES":"República de China","NAME_FA":"تایوان","NAME_FR":"Taïwan","NAME_EL":"Δημοκρατία της Κίνας","NAME_HE":"טאיוואן","NAME_HI":"चीनी गणराज्य","NAME_HU":"Kínai Köztársaság","NAME_ID":"Taiwan","NAME_IT":"Taiwan","NAME_JA":"中華民国","NAME_KO":"중화민국","NAME_NL":"Taiwan","NAME_PL":"Republika Chińska","NAME_PT":"Taiwan","NAME_RU":"Тайвань","NAME_SV":"Taiwan","NAME_TR":"Çin Cumhuriyeti","NAME_UK":"Республіка Китай","NAME_UR":"تائیوان","NAME_VI":"Đài Loan","NAME_ZH":"中华民国","NAME_ZHT":"中華民國","FCLASS_ISO":"Admin-1 states provinces","TLC_DIFF":"1","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"Admin-1 states provinces","FCLASS_TW":"Admin-0 country","FCLASS_IN":"","FCLASS_NP":"Admin-1 states provinces","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"Admin-1 states provinces","FCLASS_MA":"Admin-1 states provinces","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"Admin-1 states provinces","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"Admin-1 states provinces","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[35.892675781250006,35.916552734374996],[35.76445312500002,35.571582031249996],[35.94306640625001,35.223828125],[35.97626953125001,34.629199218749996],[36.43300781250002,34.6134765625],[36.5849609375,34.221240234374996],[35.9423828125,33.667578125],[35.869140625,33.43173828125],[35.81612458460434,33.36187853338469],[35.78730468750001,32.734912109374996],[36.3720703125,32.3869140625],[36.818359375,32.317285156249994],[38.773535156250006,33.372216796874994],[40.689453125,34.33203125],[40.98701171875001,34.429052734375],[41.19472656250002,34.768994140625],[41.354101562500006,35.640429687499996],[41.24560546875,36.073388671874994],[41.41679687500002,36.5146484375],[41.78857421875,36.59716796875],[42.358984375000006,37.10859375],[42.2685546875,37.2765625],[41.51552734375002,37.089160156249996],[40.705664062500006,37.097705078124996],[40.01640625000002,36.826074218749994],[39.35664062500001,36.681591796875],[38.7666015625,36.693115234375],[38.19169921875002,36.9015625],[37.43632812500002,36.643310546875],[36.65859375000002,36.802539062499996],[36.12734375000002,35.831445312499994],[35.892675781250006,35.916552734374996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Syria","SOV_A3":"SYR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Syria","ADM0_A3":"SYR","GEOU_DIF":0,"GEOUNIT":"Syria","GU_A3":"SYR","SU_DIF":0,"SUBUNIT":"Syria","SU_A3":"SYR","BRK_DIFF":0,"NAME":"Syria","NAME_LONG":"Syria","BRK_A3":"SYR","BRK_NAME":"Syria","BRK_GROUP":"","ABBREV":"Syria","POSTAL":"SYR","FORMAL_EN":"Syrian Arab Republic","FORMAL_FR":"","NAME_CIAWF":"Syria","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Syrian Arab Republic","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":6,"POP_EST":17070135,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":98830,"GDP_YEAR":2015,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"SY","ISO_A2":"SY","ISO_A2_EH":"SY","ISO_A3":"SYR","ISO_A3_EH":"SYR","ISO_N3":"760","ISO_N3_EH":"760","UN_A3":"760","WB_A2":"SY","WB_A3":"SYR","WOE_ID":23424956,"WOE_ID_EH":23424956,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SYR","ADM0_DIFF":"","ADM0_TLC":"SYR","ADM0_A3_US":"SYR","ADM0_A3_FR":"SYR","ADM0_A3_RU":"SYR","ADM0_A3_ES":"SYR","ADM0_A3_CN":"SYR","ADM0_A3_TW":"SYR","ADM0_A3_IN":"SYR","ADM0_A3_NP":"SYR","ADM0_A3_PK":"SYR","ADM0_A3_DE":"SYR","ADM0_A3_GB":"SYR","ADM0_A3_BR":"SYR","ADM0_A3_IL":"SYR","ADM0_A3_PS":"SYR","ADM0_A3_SA":"SYR","ADM0_A3_EG":"SYR","ADM0_A3_MA":"SYR","ADM0_A3_PT":"SYR","ADM0_A3_AR":"SYR","ADM0_A3_JP":"SYR","ADM0_A3_KO":"SYR","ADM0_A3_VN":"SYR","ADM0_A3_TR":"SYR","ADM0_A3_ID":"SYR","ADM0_A3_PL":"SYR","ADM0_A3_GR":"SYR","ADM0_A3_IT":"SYR","ADM0_A3_NL":"SYR","ADM0_A3_SE":"SYR","ADM0_A3_BD":"SYR","ADM0_A3_UA":"SYR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":38.277783,"LABEL_Y":35.006636,"NE_ID":1159321295,"WIKIDATAID":"Q858","NAME_AR":"سوريا","NAME_BN":"সিরিয়া","NAME_DE":"Syrien","NAME_EN":"Syria","NAME_ES":"Siria","NAME_FA":"سوریه","NAME_FR":"Syrie","NAME_EL":"Συρία","NAME_HE":"סוריה","NAME_HI":"सीरिया","NAME_HU":"Szíria","NAME_ID":"Suriah","NAME_IT":"Siria","NAME_JA":"シリア","NAME_KO":"시리아","NAME_NL":"Syrië","NAME_PL":"Syria","NAME_PT":"Síria","NAME_RU":"Сирия","NAME_SV":"Syrien","NAME_TR":"Suriye","NAME_UK":"Сирія","NAME_UR":"سوریہ","NAME_VI":"Syria","NAME_ZH":"叙利亚","NAME_ZHT":"敘利亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[9.524023437500006,47.524218749999996],[8.617871093750011,47.76611328125],[7.615625000000023,47.592724609375],[7.000585937500006,47.322509765625],[6.060253906250011,46.428173828125],[6.758105468750017,46.415771484375],[7.021093750000006,45.92578125],[7.9931640625,46.015917968749996],[8.458398437500023,46.245898437499996],[8.953710937500006,45.830029296875],[9.251074218750006,46.286767578124994],[9.939257812500017,46.36181640625],[10.452832031250011,46.86494140625],[9.580273437500011,47.057373046875],[9.527539062500011,47.270751953125],[9.524023437500006,47.524218749999996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Switzerland","SOV_A3":"CHE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Switzerland","ADM0_A3":"CHE","GEOU_DIF":0,"GEOUNIT":"Switzerland","GU_A3":"CHE","SU_DIF":0,"SUBUNIT":"Switzerland","SU_A3":"CHE","BRK_DIFF":0,"NAME":"Switzerland","NAME_LONG":"Switzerland","BRK_A3":"CHE","BRK_NAME":"Switzerland","BRK_GROUP":"","ABBREV":"Switz.","POSTAL":"CH","FORMAL_EN":"Swiss Confederation","FORMAL_FR":"","NAME_CIAWF":"Switzerland","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Switzerland","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":2,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":8574832,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":703082,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"SZ","ISO_A2":"CH","ISO_A2_EH":"CH","ISO_A3":"CHE","ISO_A3_EH":"CHE","ISO_N3":"756","ISO_N3_EH":"756","UN_A3":"756","WB_A2":"CH","WB_A3":"CHE","WOE_ID":23424957,"WOE_ID_EH":23424957,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CHE","ADM0_DIFF":"","ADM0_TLC":"CHE","ADM0_A3_US":"CHE","ADM0_A3_FR":"CHE","ADM0_A3_RU":"CHE","ADM0_A3_ES":"CHE","ADM0_A3_CN":"CHE","ADM0_A3_TW":"CHE","ADM0_A3_IN":"CHE","ADM0_A3_NP":"CHE","ADM0_A3_PK":"CHE","ADM0_A3_DE":"CHE","ADM0_A3_GB":"CHE","ADM0_A3_BR":"CHE","ADM0_A3_IL":"CHE","ADM0_A3_PS":"CHE","ADM0_A3_SA":"CHE","ADM0_A3_EG":"CHE","ADM0_A3_MA":"CHE","ADM0_A3_PT":"CHE","ADM0_A3_AR":"CHE","ADM0_A3_JP":"CHE","ADM0_A3_KO":"CHE","ADM0_A3_VN":"CHE","ADM0_A3_TR":"CHE","ADM0_A3_ID":"CHE","ADM0_A3_PL":"CHE","ADM0_A3_GR":"CHE","ADM0_A3_IT":"CHE","ADM0_A3_NL":"CHE","ADM0_A3_SE":"CHE","ADM0_A3_BD":"CHE","ADM0_A3_UA":"CHE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":7.463965,"LABEL_Y":46.719114,"NE_ID":1159320491,"WIKIDATAID":"Q39","NAME_AR":"سويسرا","NAME_BN":"সুইজারল্যান্ড","NAME_DE":"Schweiz","NAME_EN":"Switzerland","NAME_ES":"Suiza","NAME_FA":"سوئیس","NAME_FR":"Suisse","NAME_EL":"Ελβετία","NAME_HE":"שווייץ","NAME_HI":"स्विट्ज़रलैण्ड","NAME_HU":"Svájc","NAME_ID":"Swiss","NAME_IT":"Svizzera","NAME_JA":"スイス","NAME_KO":"스위스","NAME_NL":"Zwitserland","NAME_PL":"Szwajcaria","NAME_PT":"Suíça","NAME_RU":"Швейцария","NAME_SV":"Schweiz","NAME_TR":"İsviçre","NAME_UK":"Швейцарія","NAME_UR":"سویٹزرلینڈ","NAME_VI":"Thụy Sĩ","NAME_ZH":"瑞士","NAME_ZHT":"瑞士","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[19.076464843750017,57.8359375],[18.537402343750017,57.83056640625],[18.136523437500017,57.556640625],[18.69990234375001,57.242724609374996],[19.076464843750017,57.8359375]]],[[[11.388281250000006,59.036523437499994],[11.147167968750011,58.988623046875],[11.449316406250006,58.118359375],[12.421484375000006,56.906396484375],[12.883691406250023,56.617724609374996],[12.592578125000017,56.13759765625],[13.321386718750006,55.34638671875],[14.341699218750023,55.527734375],[14.215039062500011,55.8326171875],[14.782031250000017,56.161914062499996],[15.996679687500006,56.222607421875],[16.527929687500006,57.068164062499996],[16.651953125000006,58.434326171875],[17.45673828125001,58.8583984375],[18.28535156250001,59.109375],[18.970507812500017,59.757226562499994],[18.557519531250023,60.253564453124994],[17.95576171875001,60.589794921875],[17.2509765625,60.70078125],[17.130761718750023,61.575732421875],[17.417285156250017,61.740673828125],[17.895605468750006,62.830517578125],[18.46308593750001,62.895849609375],[19.03437500000001,63.237744140625],[20.7626953125,63.867822265624994],[21.46503906250001,64.37958984375],[21.13818359375,64.80869140625],[21.565527343750006,65.40810546875],[23.102343750000017,65.7353515625],[24.15546875000001,65.8052734375],[23.701171875,66.48076171875],[23.988574218750017,66.810546875],[23.468066406250017,67.449951171875],[23.63886718750001,67.95439453125],[22.78242187500001,68.391015625],[21.997460937500023,68.52060546875],[20.622167968750006,69.036865234375],[19.969824218750006,68.356396484375],[18.37861328125001,68.56240234375],[17.91669921875001,67.964892578125],[17.324609375000023,68.10380859375],[16.12744140625,67.425830078125],[16.40351562500001,67.05498046875],[15.422949218750006,66.48984375],[14.543261718750017,66.129345703125],[14.479687500000011,65.30146484375],[13.650292968750023,64.58154296875],[14.07763671875,64.464013671875],[13.960546875000006,64.014013671875],[12.662500000000023,63.940478515625],[11.999902343750023,63.29169921875],[12.218164062500023,63.000634765624994],[12.303515625000017,62.285595703125],[12.155371093750006,61.720751953125],[12.880761718750023,61.352294921875],[12.294140625000011,61.002685546875],[12.588671875000017,60.450732421875],[12.486132812500017,60.106787109375],[11.680761718750006,59.59228515625],[11.798144531250017,59.289892578125],[11.388281250000006,59.036523437499994]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":3,"SOVEREIGNT":"Sweden","SOV_A3":"SWE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Sweden","ADM0_A3":"SWE","GEOU_DIF":0,"GEOUNIT":"Sweden","GU_A3":"SWE","SU_DIF":0,"SUBUNIT":"Sweden","SU_A3":"SWE","BRK_DIFF":0,"NAME":"Sweden","NAME_LONG":"Sweden","BRK_A3":"SWE","BRK_NAME":"Sweden","BRK_GROUP":"","ABBREV":"Swe.","POSTAL":"S","FORMAL_EN":"Kingdom of Sweden","FORMAL_FR":"","NAME_CIAWF":"Sweden","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Sweden","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":2,"MAPCOLOR13":4,"POP_EST":10285453,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":530883,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"SW","ISO_A2":"SE","ISO_A2_EH":"SE","ISO_A3":"SWE","ISO_A3_EH":"SWE","ISO_N3":"752","ISO_N3_EH":"752","UN_A3":"752","WB_A2":"SE","WB_A3":"SWE","WOE_ID":23424954,"WOE_ID_EH":23424954,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SWE","ADM0_DIFF":"","ADM0_TLC":"SWE","ADM0_A3_US":"SWE","ADM0_A3_FR":"SWE","ADM0_A3_RU":"SWE","ADM0_A3_ES":"SWE","ADM0_A3_CN":"SWE","ADM0_A3_TW":"SWE","ADM0_A3_IN":"SWE","ADM0_A3_NP":"SWE","ADM0_A3_PK":"SWE","ADM0_A3_DE":"SWE","ADM0_A3_GB":"SWE","ADM0_A3_BR":"SWE","ADM0_A3_IL":"SWE","ADM0_A3_PS":"SWE","ADM0_A3_SA":"SWE","ADM0_A3_EG":"SWE","ADM0_A3_MA":"SWE","ADM0_A3_PT":"SWE","ADM0_A3_AR":"SWE","ADM0_A3_JP":"SWE","ADM0_A3_KO":"SWE","ADM0_A3_VN":"SWE","ADM0_A3_TR":"SWE","ADM0_A3_ID":"SWE","ADM0_A3_PL":"SWE","ADM0_A3_GR":"SWE","ADM0_A3_IT":"SWE","ADM0_A3_NL":"SWE","ADM0_A3_SE":"SWE","ADM0_A3_BD":"SWE","ADM0_A3_UA":"SWE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":19.01705,"LABEL_Y":65.85918,"NE_ID":1159321287,"WIKIDATAID":"Q34","NAME_AR":"السويد","NAME_BN":"সুইডেন","NAME_DE":"Schweden","NAME_EN":"Sweden","NAME_ES":"Suecia","NAME_FA":"سوئد","NAME_FR":"Suède","NAME_EL":"Σουηδία","NAME_HE":"שוודיה","NAME_HI":"स्वीडन","NAME_HU":"Svédország","NAME_ID":"Swedia","NAME_IT":"Svezia","NAME_JA":"スウェーデン","NAME_KO":"스웨덴","NAME_NL":"Zweden","NAME_PL":"Szwecja","NAME_PT":"Suécia","NAME_RU":"Швеция","NAME_SV":"Sverige","NAME_TR":"İsveç","NAME_UK":"Швеція","NAME_UR":"سویڈن","NAME_VI":"Thụy Điển","NAME_ZH":"瑞典","NAME_ZHT":"瑞典","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[31.9482421875,-25.957617187500006],[31.415136718750006,-25.74658203125],[31.207324218750017,-25.843359375000006],[30.803320312500006,-26.41347656250001],[30.794335937500023,-26.764257812500006],[31.063378906250023,-27.1123046875],[31.469531250000017,-27.295507812500006],[31.958398437500023,-27.30585937500001],[32.112890625000006,-26.839453125000006],[31.9482421875,-25.957617187500006]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"eSwatini","SOV_A3":"SWZ","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"eSwatini","ADM0_A3":"SWZ","GEOU_DIF":0,"GEOUNIT":"eSwatini","GU_A3":"SWZ","SU_DIF":0,"SUBUNIT":"eSwatini","SU_A3":"SWZ","BRK_DIFF":0,"NAME":"eSwatini","NAME_LONG":"Kingdom of eSwatini","BRK_A3":"SWZ","BRK_NAME":"eSwatini","BRK_GROUP":"","ABBREV":"eSw.","POSTAL":"ES","FORMAL_EN":"Kingdom of eSwatini","FORMAL_FR":"","NAME_CIAWF":"eSwatini","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"eSwatini","NAME_ALT":"Swaziland","MAPCOLOR7":3,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":5,"POP_EST":1148130,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":4471,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"WZ","ISO_A2":"SZ","ISO_A2_EH":"SZ","ISO_A3":"SWZ","ISO_A3_EH":"SWZ","ISO_N3":"748","ISO_N3_EH":"748","UN_A3":"748","WB_A2":"SZ","WB_A3":"SWZ","WOE_ID":23424993,"WOE_ID_EH":23424993,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SWZ","ADM0_DIFF":"","ADM0_TLC":"SWZ","ADM0_A3_US":"SWZ","ADM0_A3_FR":"SWZ","ADM0_A3_RU":"SWZ","ADM0_A3_ES":"SWZ","ADM0_A3_CN":"SWZ","ADM0_A3_TW":"SWZ","ADM0_A3_IN":"SWZ","ADM0_A3_NP":"SWZ","ADM0_A3_PK":"SWZ","ADM0_A3_DE":"SWZ","ADM0_A3_GB":"SWZ","ADM0_A3_BR":"SWZ","ADM0_A3_IL":"SWZ","ADM0_A3_PS":"SWZ","ADM0_A3_SA":"SWZ","ADM0_A3_EG":"SWZ","ADM0_A3_MA":"SWZ","ADM0_A3_PT":"SWZ","ADM0_A3_AR":"SWZ","ADM0_A3_JP":"SWZ","ADM0_A3_KO":"SWZ","ADM0_A3_VN":"SWZ","ADM0_A3_TR":"SWZ","ADM0_A3_ID":"SWZ","ADM0_A3_PL":"SWZ","ADM0_A3_GR":"SWZ","ADM0_A3_IT":"SWZ","ADM0_A3_NL":"SWZ","ADM0_A3_SE":"SWZ","ADM0_A3_BD":"SWZ","ADM0_A3_UA":"SWZ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Southern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":19,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":31.467264,"LABEL_Y":-26.533676,"NE_ID":1159321289,"WIKIDATAID":"Q1050","NAME_AR":"إسواتيني","NAME_BN":"ইসোয়াতিনি","NAME_DE":"Eswatini","NAME_EN":"Eswatini","NAME_ES":"Suazilandia","NAME_FA":"اسواتینی","NAME_FR":"Eswatini","NAME_EL":"Εσουατίνι","NAME_HE":"אסוואטיני","NAME_HI":"एस्वातीनी","NAME_HU":"Szváziföld","NAME_ID":"Eswatini","NAME_IT":"eSwatini","NAME_JA":"エスワティニ","NAME_KO":"에스와티니","NAME_NL":"Swaziland","NAME_PL":"Eswatini","NAME_PT":"Essuatíni","NAME_RU":"Эсватини","NAME_SV":"Swaziland","NAME_TR":"Esvatini","NAME_UK":"Есватіні","NAME_UR":"اسواتینی","NAME_VI":"Eswatini","NAME_ZH":"斯威士兰","NAME_ZHT":"史瓦帝尼","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-54.15595703125,5.3589843749999915],[-54.05419921875,5.807910156249989],[-54.83369140625,5.988330078124989],[-55.82817382812499,5.961669921875],[-55.93955078124999,5.795458984374989],[-56.96982421874999,5.992871093749997],[-57.194775390625,5.5484374999999915],[-57.331005859375,5.020166015624994],[-57.711083984374994,4.9910644531249915],[-58.05449218749999,4.171923828124989],[-57.832666015624994,3.675976562499997],[-57.54960937499999,3.3528320312499886],[-57.303662109375,3.3770996093749943],[-57.20981445312499,2.8828125],[-56.704345703125,2.0364746093749915],[-56.482812499999994,1.942138671875],[-56.019921874999994,1.8422363281249972],[-56.12939453125,2.299511718749997],[-55.005810546875,2.592968749999997],[-54.61625976562499,2.3267578124999915],[-54.1955078125,2.81787109375],[-54.203125,3.13818359375],[-53.990478515625,3.589550781249997],[-54.350732421874994,4.054101562499994],[-54.45219726562499,5.013476562499989],[-54.15595703125,5.3589843749999915]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Suriname","SOV_A3":"SUR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Suriname","ADM0_A3":"SUR","GEOU_DIF":0,"GEOUNIT":"Suriname","GU_A3":"SUR","SU_DIF":0,"SUBUNIT":"Suriname","SU_A3":"SUR","BRK_DIFF":0,"NAME":"Suriname","NAME_LONG":"Suriname","BRK_A3":"SUR","BRK_NAME":"Suriname","BRK_GROUP":"","ABBREV":"Sur.","POSTAL":"SR","FORMAL_EN":"Republic of Suriname","FORMAL_FR":"","NAME_CIAWF":"Suriname","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Suriname","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":7,"MAPCOLOR13":6,"POP_EST":581363,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":3697,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"NS","ISO_A2":"SR","ISO_A2_EH":"SR","ISO_A3":"SUR","ISO_A3_EH":"SUR","ISO_N3":"740","ISO_N3_EH":"740","UN_A3":"740","WB_A2":"SR","WB_A3":"SUR","WOE_ID":23424913,"WOE_ID_EH":23424913,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SUR","ADM0_DIFF":"","ADM0_TLC":"SUR","ADM0_A3_US":"SUR","ADM0_A3_FR":"SUR","ADM0_A3_RU":"SUR","ADM0_A3_ES":"SUR","ADM0_A3_CN":"SUR","ADM0_A3_TW":"SUR","ADM0_A3_IN":"SUR","ADM0_A3_NP":"SUR","ADM0_A3_PK":"SUR","ADM0_A3_DE":"SUR","ADM0_A3_GB":"SUR","ADM0_A3_BR":"SUR","ADM0_A3_IL":"SUR","ADM0_A3_PS":"SUR","ADM0_A3_SA":"SUR","ADM0_A3_EG":"SUR","ADM0_A3_MA":"SUR","ADM0_A3_PT":"SUR","ADM0_A3_AR":"SUR","ADM0_A3_JP":"SUR","ADM0_A3_KO":"SUR","ADM0_A3_VN":"SUR","ADM0_A3_TR":"SUR","ADM0_A3_ID":"SUR","ADM0_A3_PL":"SUR","ADM0_A3_GR":"SUR","ADM0_A3_IT":"SUR","ADM0_A3_NL":"SUR","ADM0_A3_SE":"SUR","ADM0_A3_BD":"SUR","ADM0_A3_UA":"SUR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-55.91094,"LABEL_Y":4.143987,"NE_ID":1159321281,"WIKIDATAID":"Q730","NAME_AR":"سورينام","NAME_BN":"সুরিনাম","NAME_DE":"Suriname","NAME_EN":"Suriname","NAME_ES":"Surinam","NAME_FA":"سورینام","NAME_FR":"Suriname","NAME_EL":"Σουρινάμ","NAME_HE":"סורינאם","NAME_HI":"सूरीनाम","NAME_HU":"Suriname","NAME_ID":"Suriname","NAME_IT":"Suriname","NAME_JA":"スリナム","NAME_KO":"수리남","NAME_NL":"Suriname","NAME_PL":"Surinam","NAME_PT":"Suriname","NAME_RU":"Суринам","NAME_SV":"Surinam","NAME_TR":"Surinam","NAME_UK":"Суринам","NAME_UR":"سرینام","NAME_VI":"Suriname","NAME_ZH":"苏里南","NAME_ZHT":"蘇利南","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[33.97607421875,4.22021484375],[35.26835937500002,5.4922851562499915],[35.08193359375002,5.673144531249989],[34.71064453125001,6.660302734374994],[34.06425781250002,7.225732421874994],[33.666113281250006,7.6709960937499915],[33.22597656250002,7.760644531249994],[33.01259765625002,7.9515136718749915],[33.23427734375002,8.396386718749994],[33.95332031250001,8.443505859374994],[34.09453125000002,8.582226562499997],[34.078125,9.461523437499991],[33.892187500000006,10.198974609375],[33.17216796875002,10.850146484374989],[33.07304687500002,11.591503906249997],[33.199316406250006,12.21728515625],[32.73671875000002,12.009667968749994],[32.072265625,12.006738281249994],[32.33535156250002,11.716015624999997],[32.40410156250002,11.057763671874994],[31.933007812500023,10.662499999999994],[31.654882812500006,10.221142578124997],[31.224902343750017,9.799267578124997],[30.739355468750006,9.74267578125],[30.003027343750006,10.277392578124989],[29.60546875,10.065087890624994],[29.47314453125,9.768603515624989],[28.999609375000006,9.610156249999989],[28.844531250000017,9.326074218749994],[28.048925781250006,9.32861328125],[27.885839843750006,9.599658203124989],[27.07421875,9.613818359374989],[26.551367187500006,9.525830078124997],[25.891503906250023,10.202734374999991],[25.79804687500001,10.420507812499991],[25.066992187500006,10.293798828124991],[24.785253906250006,9.774658203125],[24.53193359375001,8.886914062499997],[24.147363281250023,8.665624999999991],[24.291406250000023,8.291406249999994],[24.853320312500017,8.137548828124991],[25.247363281250017,7.724560546874997],[25.380664062500017,7.333398437499994],[25.888964843750017,7.06494140625],[26.36181640625,6.635302734374989],[26.514257812500006,6.069238281249994],[27.083398437500023,5.77685546875],[27.4033203125,5.109179687499989],[27.7880859375,4.644677734374994],[28.19208984375001,4.350244140624994],[28.72705078125,4.5049804687499915],[29.151464843750006,4.38818359375],[29.676855468750006,4.5869140625],[30.194921875000006,3.98193359375],[30.50830078125,3.835693359375],[30.83857421875001,3.49072265625],[31.15234375,3.785595703124997],[31.47998046875,3.6804687499999886],[31.79804687500001,3.8026367187499943],[32.09941406250002,3.5291992187499943],[32.33574218750002,3.7062011718749943],[32.83808593750001,3.7984863281249943],[33.489355468750006,3.755078124999997],[33.97607421875,4.22021484375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"South Sudan","SOV_A3":"SDS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"South Sudan","ADM0_A3":"SDS","GEOU_DIF":0,"GEOUNIT":"South Sudan","GU_A3":"SDS","SU_DIF":0,"SUBUNIT":"South Sudan","SU_A3":"SDS","BRK_DIFF":0,"NAME":"S. Sudan","NAME_LONG":"South Sudan","BRK_A3":"SDS","BRK_NAME":"S. Sudan","BRK_GROUP":"","ABBREV":"S. Sud.","POSTAL":"SS","FORMAL_EN":"Republic of South Sudan","FORMAL_FR":"","NAME_CIAWF":"South Sudan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"South Sudan","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":3,"MAPCOLOR13":5,"POP_EST":11062113,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":11998,"GDP_YEAR":2015,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"-99","ISO_A2":"SS","ISO_A2_EH":"SS","ISO_A3":"SSD","ISO_A3_EH":"SSD","ISO_N3":"728","ISO_N3_EH":"728","UN_A3":"728","WB_A2":"SS","WB_A3":"SSD","WOE_ID":-99,"WOE_ID_EH":-99,"WOE_NOTE":"Includes states of 20069899, 20069897, 20069898, 20069901, 20069909, and 20069908 but maybe more?","ADM0_ISO":"SSD","ADM0_DIFF":"1","ADM0_TLC":"SDS","ADM0_A3_US":"SDS","ADM0_A3_FR":"SDS","ADM0_A3_RU":"SDS","ADM0_A3_ES":"SDS","ADM0_A3_CN":"SDS","ADM0_A3_TW":"SDS","ADM0_A3_IN":"SDS","ADM0_A3_NP":"SDS","ADM0_A3_PK":"SDS","ADM0_A3_DE":"SDS","ADM0_A3_GB":"SDS","ADM0_A3_BR":"SDS","ADM0_A3_IL":"SDS","ADM0_A3_PS":"SDS","ADM0_A3_SA":"SDS","ADM0_A3_EG":"SDS","ADM0_A3_MA":"SDS","ADM0_A3_PT":"SDS","ADM0_A3_AR":"SDS","ADM0_A3_JP":"SDS","ADM0_A3_KO":"SDS","ADM0_A3_VN":"SDS","ADM0_A3_TR":"SDS","ADM0_A3_ID":"SDS","ADM0_A3_PL":"SDS","ADM0_A3_GR":"SDS","ADM0_A3_IT":"SDS","ADM0_A3_NL":"SDS","ADM0_A3_SE":"SDS","ADM0_A3_BD":"SDS","ADM0_A3_UA":"SDS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":11,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":30.390151,"LABEL_Y":7.230477,"NE_ID":1159321235,"WIKIDATAID":"Q958","NAME_AR":"جنوب السودان","NAME_BN":"দক্ষিণ সুদান","NAME_DE":"Südsudan","NAME_EN":"South Sudan","NAME_ES":"Sudán del Sur","NAME_FA":"سودان جنوبی","NAME_FR":"Soudan du Sud","NAME_EL":"Νότιο Σουδάν","NAME_HE":"דרום סודאן","NAME_HI":"दक्षिण सूडान","NAME_HU":"Dél-Szudán","NAME_ID":"Sudan Selatan","NAME_IT":"Sudan del Sud","NAME_JA":"南スーダン","NAME_KO":"남수단","NAME_NL":"Zuid-Soedan","NAME_PL":"Sudan Południowy","NAME_PT":"Sudão do Sul","NAME_RU":"Южный Судан","NAME_SV":"Sydsudan","NAME_TR":"Güney Sudan","NAME_UK":"Південний Судан","NAME_UR":"جنوبی سوڈان","NAME_VI":"Nam Sudan","NAME_ZH":"南苏丹","NAME_ZHT":"南蘇丹","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[34.078125,9.461523437499991],[34.29150390625,10.124755859375],[34.27568359375002,10.528124999999989],[34.571875000000006,10.880175781249989],[34.93144531250002,10.864794921874989],[35.1123046875,11.816552734374994],[35.59609375000002,12.537304687499997],[36.107519531250006,12.726464843749994],[36.21220703125002,13.271093749999991],[36.390625,13.626074218749991],[36.52431640625002,14.2568359375],[36.4267578125,15.132080078125],[36.91376953125001,16.296191406250003],[37.00898437500001,17.058886718750003],[37.41103515625002,17.061718749999997],[37.78242187500001,17.4580078125],[38.253515625000006,17.584765625000003],[38.609472656250006,18.005078124999997],[37.921875,18.555908203125],[37.471289062500006,18.820117187500003],[37.24843750000002,19.58188476562499],[37.2275390625,20.55673828124999],[37.15058593750001,21.103759765625],[36.92695312500001,21.58652343749999],[36.87138671875002,21.996728515624994],[33.91845703125,21.996240234374994],[31.434472656250023,21.995849609375],[29.564550781250006,21.9951171875],[28.036425781250017,21.995361328125],[24.980273437500017,21.995849609375],[24.9794921875,20.002587890624994],[23.980273437500017,19.99594726562499],[23.980273437500017,19.496630859375003],[23.982226562500017,17.266357421875],[23.9833984375,15.780175781249994],[23.10517578125001,15.702539062499994],[22.93232421875001,15.162109375],[22.6708984375,14.722460937500003],[22.38154296875001,14.550488281249997],[22.50996093750001,14.12744140625],[22.10761718750001,13.730322265624991],[22.228125000000006,13.32958984375],[21.825292968750006,12.79052734375],[22.352343750000017,12.660449218749989],[22.55634765625001,11.669531249999991],[22.922656250000017,11.344873046874994],[22.86005859375001,10.919677734375],[23.312304687500017,10.387939453125],[23.646289062500017,9.822900390624994],[23.53730468750001,8.815820312499994],[24.147363281250023,8.665624999999991],[24.53193359375001,8.886914062499997],[24.785253906250006,9.774658203125],[25.066992187500006,10.293798828124991],[25.79804687500001,10.420507812499991],[25.891503906250023,10.202734374999991],[26.551367187500006,9.525830078124997],[27.07421875,9.613818359374989],[27.885839843750006,9.599658203124989],[28.048925781250006,9.32861328125],[28.844531250000017,9.326074218749994],[28.999609375000006,9.610156249999989],[29.47314453125,9.768603515624989],[29.60546875,10.065087890624994],[30.003027343750006,10.277392578124989],[30.739355468750006,9.74267578125],[31.224902343750017,9.799267578124997],[31.654882812500006,10.221142578124997],[31.933007812500023,10.662499999999994],[32.40410156250002,11.057763671874994],[32.33535156250002,11.716015624999997],[32.072265625,12.006738281249994],[32.73671875000002,12.009667968749994],[33.199316406250006,12.21728515625],[33.07304687500002,11.591503906249997],[33.17216796875002,10.850146484374989],[33.892187500000006,10.198974609375],[34.078125,9.461523437499991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Sudan","SOV_A3":"SDN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Sudan","ADM0_A3":"SDN","GEOU_DIF":0,"GEOUNIT":"Sudan","GU_A3":"SDN","SU_DIF":0,"SUBUNIT":"Sudan","SU_A3":"SDN","BRK_DIFF":0,"NAME":"Sudan","NAME_LONG":"Sudan","BRK_A3":"SDN","BRK_NAME":"Sudan","BRK_GROUP":"","ABBREV":"Sudan","POSTAL":"SD","FORMAL_EN":"Republic of the Sudan","FORMAL_FR":"","NAME_CIAWF":"Sudan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Sudan","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":6,"MAPCOLOR9":4,"MAPCOLOR13":1,"POP_EST":42813238,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":30513,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"SU","ISO_A2":"SD","ISO_A2_EH":"SD","ISO_A3":"SDN","ISO_A3_EH":"SDN","ISO_N3":"729","ISO_N3_EH":"729","UN_A3":"729","WB_A2":"SD","WB_A3":"SDN","WOE_ID":-90,"WOE_ID_EH":23424952,"WOE_NOTE":"Almost all FLickr photos are in the north.","ADM0_ISO":"SDZ","ADM0_DIFF":"","ADM0_TLC":"SDZ","ADM0_A3_US":"SDN","ADM0_A3_FR":"SDN","ADM0_A3_RU":"SDN","ADM0_A3_ES":"SDN","ADM0_A3_CN":"SDN","ADM0_A3_TW":"SDN","ADM0_A3_IN":"SDN","ADM0_A3_NP":"SDN","ADM0_A3_PK":"SDN","ADM0_A3_DE":"SDN","ADM0_A3_GB":"SDN","ADM0_A3_BR":"SDN","ADM0_A3_IL":"SDN","ADM0_A3_PS":"SDN","ADM0_A3_SA":"SDN","ADM0_A3_EG":"SDN","ADM0_A3_MA":"SDN","ADM0_A3_PT":"SDN","ADM0_A3_AR":"SDN","ADM0_A3_JP":"SDN","ADM0_A3_KO":"SDN","ADM0_A3_VN":"SDN","ADM0_A3_TR":"SDN","ADM0_A3_ID":"SDN","ADM0_A3_PL":"SDN","ADM0_A3_GR":"SDN","ADM0_A3_IT":"SDN","ADM0_A3_NL":"SDN","ADM0_A3_SE":"SDN","ADM0_A3_BD":"SDN","ADM0_A3_UA":"SDN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":8,"LABEL_X":29.260657,"LABEL_Y":16.330746,"NE_ID":1159321229,"WIKIDATAID":"Q1049","NAME_AR":"السودان","NAME_BN":"সুদান","NAME_DE":"Sudan","NAME_EN":"Sudan","NAME_ES":"Sudán","NAME_FA":"سودان","NAME_FR":"Soudan","NAME_EL":"Σουδάν","NAME_HE":"סודאן","NAME_HI":"सूडान","NAME_HU":"Szudán","NAME_ID":"Sudan","NAME_IT":"Sudan","NAME_JA":"スーダン","NAME_KO":"수단","NAME_NL":"Soedan","NAME_PL":"Sudan","NAME_PT":"Sudão","NAME_RU":"Судан","NAME_SV":"Sudan","NAME_TR":"Sudan","NAME_UK":"Судан","NAME_UR":"سوڈان","NAME_VI":"Sudan","NAME_ZH":"苏丹","NAME_ZHT":"蘇丹","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[79.98232421875002,9.812695312499997],[80.11835937500001,9.326855468749997],[79.92890625000001,8.899218749999989],[79.79208984375003,7.585205078125],[79.859375,6.829296874999997],[80.09531250000003,6.1531738281249915],[80.72412109375,5.979052734374989],[81.63740234375001,6.4251464843749915],[81.86142578125003,6.901269531249994],[81.87412109375003,7.288330078125],[81.43593750000002,8.118896484375],[81.37285156249999,8.431445312499989],[80.71113281250001,9.366357421874994],[80.25283203125002,9.796337890624997],[79.98232421875002,9.812695312499997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":3,"SOVEREIGNT":"Sri Lanka","SOV_A3":"LKA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Sri Lanka","ADM0_A3":"LKA","GEOU_DIF":0,"GEOUNIT":"Sri Lanka","GU_A3":"LKA","SU_DIF":0,"SUBUNIT":"Sri Lanka","SU_A3":"LKA","BRK_DIFF":0,"NAME":"Sri Lanka","NAME_LONG":"Sri Lanka","BRK_A3":"LKA","BRK_NAME":"Sri Lanka","BRK_GROUP":"","ABBREV":"Sri L.","POSTAL":"LK","FORMAL_EN":"Democratic Socialist Republic of Sri Lanka","FORMAL_FR":"","NAME_CIAWF":"Sri Lanka","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Sri Lanka","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":5,"MAPCOLOR9":4,"MAPCOLOR13":9,"POP_EST":21803000,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":84008,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"CE","ISO_A2":"LK","ISO_A2_EH":"LK","ISO_A3":"LKA","ISO_A3_EH":"LKA","ISO_N3":"144","ISO_N3_EH":"144","UN_A3":"144","WB_A2":"LK","WB_A3":"LKA","WOE_ID":23424778,"WOE_ID_EH":23424778,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LKA","ADM0_DIFF":"","ADM0_TLC":"LKA","ADM0_A3_US":"LKA","ADM0_A3_FR":"LKA","ADM0_A3_RU":"LKA","ADM0_A3_ES":"LKA","ADM0_A3_CN":"LKA","ADM0_A3_TW":"LKA","ADM0_A3_IN":"LKA","ADM0_A3_NP":"LKA","ADM0_A3_PK":"LKA","ADM0_A3_DE":"LKA","ADM0_A3_GB":"LKA","ADM0_A3_BR":"LKA","ADM0_A3_IL":"LKA","ADM0_A3_PS":"LKA","ADM0_A3_SA":"LKA","ADM0_A3_EG":"LKA","ADM0_A3_MA":"LKA","ADM0_A3_PT":"LKA","ADM0_A3_AR":"LKA","ADM0_A3_JP":"LKA","ADM0_A3_KO":"LKA","ADM0_A3_VN":"LKA","ADM0_A3_TR":"LKA","ADM0_A3_ID":"LKA","ADM0_A3_PL":"LKA","ADM0_A3_GR":"LKA","ADM0_A3_IT":"LKA","ADM0_A3_NL":"LKA","ADM0_A3_SE":"LKA","ADM0_A3_BD":"LKA","ADM0_A3_UA":"LKA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":80.704823,"LABEL_Y":7.581097,"NE_ID":1159321025,"WIKIDATAID":"Q854","NAME_AR":"سريلانكا","NAME_BN":"শ্রীলঙ্কা","NAME_DE":"Sri Lanka","NAME_EN":"Sri Lanka","NAME_ES":"Sri Lanka","NAME_FA":"سریلانکا","NAME_FR":"Sri Lanka","NAME_EL":"Σρι Λάνκα","NAME_HE":"סרי לנקה","NAME_HI":"श्रीलंका","NAME_HU":"Srí Lanka","NAME_ID":"Sri Lanka","NAME_IT":"Sri Lanka","NAME_JA":"スリランカ","NAME_KO":"스리랑카","NAME_NL":"Sri Lanka","NAME_PL":"Sri Lanka","NAME_PT":"Sri Lanka","NAME_RU":"Шри-Ланка","NAME_SV":"Sri Lanka","NAME_TR":"Sri Lanka","NAME_UK":"Шрі-Ланка","NAME_UR":"سری لنکا","NAME_VI":"Sri Lanka","NAME_ZH":"斯里兰卡","NAME_ZHT":"斯里蘭卡","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[3.145312500000017,39.790087890624996],[2.784960937500017,39.854833984375],[2.3712890625000114,39.613085937499996],[3.0728515625000057,39.30126953125],[3.4618164062500227,39.69775390625],[3.145312500000017,39.790087890624996]]],[[[-1.7940429687499773,43.40732421875],[-2.337109374999983,43.328027343749994],[-3.045605468749983,43.37158203125],[-3.6046386718749943,43.519482421875],[-4.523046874999977,43.41572265625],[-5.665820312499989,43.582470703125],[-7.261962890625,43.594628906249994],[-7.698144531249994,43.764550781249994],[-8.873681640624994,43.334423828125],[-9.235205078124977,42.976904296875],[-8.69091796875,42.274169921875],[-8.777148437499989,41.941064453124994],[-8.213085937499983,42.133691406249994],[-7.920849609374983,41.883642578125],[-7.403613281249989,41.83369140625],[-6.618261718749977,41.9423828125],[-6.212499999999977,41.532031249999996],[-6.928466796875,41.009130859375],[-6.810156249999977,40.343115234375],[-7.036718749999977,39.71396484375],[-7.445117187499989,39.536181640624996],[-7.046044921874994,38.907031249999996],[-7.343017578125,38.457421874999994],[-7.185449218749994,38.00634765625],[-7.503515624999977,37.585498046874996],[-7.406152343749994,37.179443359375],[-6.884619140624977,37.194238281249994],[-6.492431640625,36.954638671874996],[-6.040673828124994,36.188427734375],[-5.62548828125,36.025927734374996],[-5.171484374999977,36.423779296875],[-4.674121093749989,36.5064453125],[-4.366845703124994,36.718115234375],[-2.111523437499983,36.776660156249996],[-1.797607421875,37.232861328125],[-1.3275390624999943,37.5611328125],[-0.8221679687499943,37.58076171875],[-0.6467773437499886,38.15185546875],[-0.3812499999999943,38.43564453125],[0.20156250000002274,38.759179687499994],[-0.20493164062497726,39.06259765625],[-0.32700195312497726,39.519873046875],[1.0329101562500114,41.062060546874996],[2.0826171875000057,41.287402343749996],[3.248046875,41.944238281249994],[3.21142578125,42.43115234375],[2.03271484375,42.353515625],[1.7060546875,42.503320312499994],[1.4283203125000057,42.5958984375],[-0.041162109374994316,42.689111328124994],[-1.2854492187499886,43.059619140624996],[-1.7940429687499773,43.40732421875]]],[[[-16.33447265625,28.379931640624996],[-16.90532226562499,28.339599609375],[-16.65800781249999,28.007177734375],[-16.33447265625,28.379931640624996]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":2,"SOVEREIGNT":"Spain","SOV_A3":"ESP","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Spain","ADM0_A3":"ESP","GEOU_DIF":0,"GEOUNIT":"Spain","GU_A3":"ESP","SU_DIF":0,"SUBUNIT":"Spain","SU_A3":"ESP","BRK_DIFF":0,"NAME":"Spain","NAME_LONG":"Spain","BRK_A3":"ESP","BRK_NAME":"Spain","BRK_GROUP":"","ABBREV":"Sp.","POSTAL":"E","FORMAL_EN":"Kingdom of Spain","FORMAL_FR":"","NAME_CIAWF":"Spain","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Spain","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":5,"MAPCOLOR13":5,"POP_EST":47076781,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":1393490,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"SP","ISO_A2":"ES","ISO_A2_EH":"ES","ISO_A3":"ESP","ISO_A3_EH":"ESP","ISO_N3":"724","ISO_N3_EH":"724","UN_A3":"724","WB_A2":"ES","WB_A3":"ESP","WOE_ID":23424950,"WOE_ID_EH":23424950,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ESP","ADM0_DIFF":"","ADM0_TLC":"ESP","ADM0_A3_US":"ESP","ADM0_A3_FR":"ESP","ADM0_A3_RU":"ESP","ADM0_A3_ES":"ESP","ADM0_A3_CN":"ESP","ADM0_A3_TW":"ESP","ADM0_A3_IN":"ESP","ADM0_A3_NP":"ESP","ADM0_A3_PK":"ESP","ADM0_A3_DE":"ESP","ADM0_A3_GB":"ESP","ADM0_A3_BR":"ESP","ADM0_A3_IL":"ESP","ADM0_A3_PS":"ESP","ADM0_A3_SA":"ESP","ADM0_A3_EG":"ESP","ADM0_A3_MA":"ESP","ADM0_A3_PT":"ESP","ADM0_A3_AR":"ESP","ADM0_A3_JP":"ESP","ADM0_A3_KO":"ESP","ADM0_A3_VN":"ESP","ADM0_A3_TR":"ESP","ADM0_A3_ID":"ESP","ADM0_A3_PL":"ESP","ADM0_A3_GR":"ESP","ADM0_A3_IT":"ESP","ADM0_A3_NL":"ESP","ADM0_A3_SE":"ESP","ADM0_A3_BD":"ESP","ADM0_A3_UA":"ESP","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":3,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":-3.464718,"LABEL_Y":40.090953,"NE_ID":1159320587,"WIKIDATAID":"Q29","NAME_AR":"إسبانيا","NAME_BN":"স্পেন","NAME_DE":"Spanien","NAME_EN":"Spain","NAME_ES":"España","NAME_FA":"اسپانیا","NAME_FR":"Espagne","NAME_EL":"Ισπανία","NAME_HE":"ספרד","NAME_HI":"स्पेन","NAME_HU":"Spanyolország","NAME_ID":"Spanyol","NAME_IT":"Spagna","NAME_JA":"スペイン","NAME_KO":"스페인","NAME_NL":"Spanje","NAME_PL":"Hiszpania","NAME_PT":"Espanha","NAME_RU":"Испания","NAME_SV":"Spanien","NAME_TR":"İspanya","NAME_UK":"Іспанія","NAME_UR":"ہسپانیہ","NAME_VI":"Tây Ban Nha","NAME_ZH":"西班牙","NAME_ZHT":"西班牙","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[126.63388671875003,37.7818359375],[126.74638671874999,37.1935546875],[126.21718750000002,36.870947265625],[126.54824218750002,36.47763671875],[126.71738281250003,35.768847656249996],[126.29111328125003,35.154150390625],[126.50830078125,34.350634765624996],[127.71484375,34.9546875],[128.44394531250003,34.870361328125],[128.5109375,35.100976562499994],[129.21416015625005,35.1818359375],[129.56171875,35.947656249999994],[129.403515625,36.052148437499994],[129.47343750000005,36.74189453125],[129.33515625,37.274560546874994],[128.61884765625,38.176074218749996],[128.37460937500003,38.623437499999994],[128.03896484375002,38.308544921875],[127.16953125000003,38.304541015625],[126.63388671875003,37.7818359375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"South Korea","SOV_A3":"KOR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"South Korea","ADM0_A3":"KOR","GEOU_DIF":0,"GEOUNIT":"South Korea","GU_A3":"KOR","SU_DIF":0,"SUBUNIT":"South Korea","SU_A3":"KOR","BRK_DIFF":0,"NAME":"South Korea","NAME_LONG":"Republic of Korea","BRK_A3":"KOR","BRK_NAME":"Republic of Korea","BRK_GROUP":"","ABBREV":"S.K.","POSTAL":"KR","FORMAL_EN":"Republic of Korea","FORMAL_FR":"","NAME_CIAWF":"Korea, South","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Korea, Rep.","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":1,"MAPCOLOR13":5,"POP_EST":51709098,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":1646739,"GDP_YEAR":2019,"ECONOMY":"4. Emerging region: MIKT","INCOME_GRP":"1. High income: OECD","FIPS_10":"KS","ISO_A2":"KR","ISO_A2_EH":"KR","ISO_A3":"KOR","ISO_A3_EH":"KOR","ISO_N3":"410","ISO_N3_EH":"410","UN_A3":"410","WB_A2":"KR","WB_A3":"KOR","WOE_ID":23424868,"WOE_ID_EH":23424868,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KOR","ADM0_DIFF":"","ADM0_TLC":"KOR","ADM0_A3_US":"KOR","ADM0_A3_FR":"KOR","ADM0_A3_RU":"KOR","ADM0_A3_ES":"KOR","ADM0_A3_CN":"KOR","ADM0_A3_TW":"KOR","ADM0_A3_IN":"KOR","ADM0_A3_NP":"KOR","ADM0_A3_PK":"KOR","ADM0_A3_DE":"KOR","ADM0_A3_GB":"KOR","ADM0_A3_BR":"KOR","ADM0_A3_IL":"KOR","ADM0_A3_PS":"KOR","ADM0_A3_SA":"KOR","ADM0_A3_EG":"KOR","ADM0_A3_MA":"KOR","ADM0_A3_PT":"KOR","ADM0_A3_AR":"KOR","ADM0_A3_JP":"KOR","ADM0_A3_KO":"KOR","ADM0_A3_VN":"KOR","ADM0_A3_TR":"KOR","ADM0_A3_ID":"KOR","ADM0_A3_PL":"KOR","ADM0_A3_GR":"KOR","ADM0_A3_IT":"KOR","ADM0_A3_NL":"KOR","ADM0_A3_SE":"KOR","ADM0_A3_BD":"KOR","ADM0_A3_UA":"KOR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":11,"LONG_LEN":17,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":7,"LABEL_X":128.129504,"LABEL_Y":36.384924,"NE_ID":1159320985,"WIKIDATAID":"Q884","NAME_AR":"كوريا الجنوبية","NAME_BN":"দক্ষিণ কোরিয়া","NAME_DE":"Südkorea","NAME_EN":"South Korea","NAME_ES":"Corea del Sur","NAME_FA":"کره جنوبی","NAME_FR":"Corée du Sud","NAME_EL":"Νότια Κορέα","NAME_HE":"קוריאה הדרומית","NAME_HI":"दक्षिण कोरिया","NAME_HU":"Dél-Korea","NAME_ID":"Korea Selatan","NAME_IT":"Corea del Sud","NAME_JA":"大韓民国","NAME_KO":"대한민국","NAME_NL":"Zuid-Korea","NAME_PL":"Korea Południowa","NAME_PT":"Coreia do Sul","NAME_RU":"Республика Корея","NAME_SV":"Sydkorea","NAME_TR":"Güney Kore","NAME_UK":"Південна Корея","NAME_UR":"جنوبی کوریا","NAME_VI":"Hàn Quốc","NAME_ZH":"大韩民国","NAME_ZHT":"大韓民國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[29.364843750000006,-22.193945312500006],[28.83984375,-22.48085937500001],[28.21015625000001,-22.693652343750003],[27.890527343750023,-23.07392578125001],[27.146386718750023,-23.5244140625],[26.835058593750006,-24.240820312500006],[26.39716796875001,-24.613574218750003],[25.912109375,-24.74746093750001],[25.583789062500017,-25.606250000000003],[24.748144531250006,-25.8173828125],[23.89375000000001,-25.600878906250003],[23.266015625000023,-25.2666015625],[22.878808593750023,-25.45791015625001],[22.640234375000006,-26.07119140625001],[22.090917968750006,-26.580175781250006],[21.646289062500017,-26.85419921875001],[20.739843750000006,-26.84882812500001],[20.626757812500017,-26.44384765625],[20.79316406250001,-25.915625000000006],[20.34521484375,-25.029882812500006],[19.98046875,-24.77675781250001],[19.98046875,-26.53115234375001],[19.98046875,-28.451269531250006],[19.671484375000006,-28.50390625],[19.02607421875001,-28.92792968750001],[18.310839843750017,-28.88623046875],[17.44794921875001,-28.69814453125001],[17.3857421875,-28.35322265625001],[17.056250000000006,-28.031054687500003],[16.755761718750023,-28.4521484375],[16.447558593750017,-28.61757812500001],[16.950000000000017,-29.403417968750006],[17.189062500000006,-30.09980468750001],[17.67744140625001,-31.01904296875],[18.210839843750023,-31.742480468750003],[18.31074218750001,-32.12246093750001],[18.250878906250023,-32.6521484375],[17.878222656250017,-32.961523437500006],[18.433007812500023,-33.71728515625],[18.354394531250023,-33.939062500000006],[18.80878906250001,-34.108203125],[19.63496093750001,-34.75332031250001],[20.020605468750006,-34.785742187500006],[20.529882812500006,-34.46308593750001],[21.060156250000006,-34.36464843750001],[21.788964843750023,-34.372656250000006],[22.245507812500023,-34.069140625],[23.268164062500006,-34.081152343750006],[23.585546875000006,-33.98515625],[24.8271484375,-34.1689453125],[25.0029296875,-33.9736328125],[25.63818359375,-34.01113281250001],[25.989550781250017,-33.71132812500001],[26.429492187500017,-33.7595703125],[27.077441406250017,-33.52119140625001],[27.860644531250017,-33.05390625000001],[28.85595703125,-32.29423828125],[30.288671875000006,-30.97011718750001],[31.33515625000001,-29.37812500000001],[31.778222656250023,-28.937109375000006],[32.285742187500006,-28.62148437500001],[32.534765625000006,-28.19970703125],[32.88613281250002,-26.84931640625001],[32.112890625000006,-26.839453125000006],[31.958398437500023,-27.30585937500001],[31.469531250000017,-27.295507812500006],[31.063378906250023,-27.1123046875],[30.794335937500023,-26.764257812500006],[30.803320312500006,-26.41347656250001],[31.207324218750017,-25.843359375000006],[31.415136718750006,-25.74658203125],[31.9482421875,-25.957617187500006],[31.98583984375,-24.46064453125001],[31.799609375000017,-23.892187500000006],[31.54560546875001,-23.48232421875001],[31.287890625000017,-22.40205078125001],[30.46015625000001,-22.32900390625001],[29.6630859375,-22.146289062500003],[29.364843750000006,-22.193945312500006]],[[28.736914062500006,-30.10195312500001],[28.39208984375,-30.147558593750006],[28.018164062500006,-30.64228515625001],[27.388476562500017,-30.31591796875],[27.0517578125,-29.6640625],[27.294531250000006,-29.519335937500003],[27.73554687500001,-28.940039062500006],[28.625781250000017,-28.58173828125001],[29.301367187500006,-29.08984375],[29.390722656250006,-29.26972656250001],[29.098046875000023,-29.919042968750006],[28.736914062500006,-30.10195312500001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"South Africa","SOV_A3":"ZAF","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"South Africa","ADM0_A3":"ZAF","GEOU_DIF":0,"GEOUNIT":"South Africa","GU_A3":"ZAF","SU_DIF":0,"SUBUNIT":"South Africa","SU_A3":"ZAF","BRK_DIFF":0,"NAME":"South Africa","NAME_LONG":"South Africa","BRK_A3":"ZAF","BRK_NAME":"South Africa","BRK_GROUP":"","ABBREV":"S.Af.","POSTAL":"ZA","FORMAL_EN":"Republic of South Africa","FORMAL_FR":"","NAME_CIAWF":"South Africa","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"South Africa","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":2,"POP_EST":58558270,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":351431,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"SF","ISO_A2":"ZA","ISO_A2_EH":"ZA","ISO_A3":"ZAF","ISO_A3_EH":"ZAF","ISO_N3":"710","ISO_N3_EH":"710","UN_A3":"710","WB_A2":"ZA","WB_A3":"ZAF","WOE_ID":23424942,"WOE_ID_EH":23424942,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ZAF","ADM0_DIFF":"","ADM0_TLC":"ZAF","ADM0_A3_US":"ZAF","ADM0_A3_FR":"ZAF","ADM0_A3_RU":"ZAF","ADM0_A3_ES":"ZAF","ADM0_A3_CN":"ZAF","ADM0_A3_TW":"ZAF","ADM0_A3_IN":"ZAF","ADM0_A3_NP":"ZAF","ADM0_A3_PK":"ZAF","ADM0_A3_DE":"ZAF","ADM0_A3_GB":"ZAF","ADM0_A3_BR":"ZAF","ADM0_A3_IL":"ZAF","ADM0_A3_PS":"ZAF","ADM0_A3_SA":"ZAF","ADM0_A3_EG":"ZAF","ADM0_A3_MA":"ZAF","ADM0_A3_PT":"ZAF","ADM0_A3_AR":"ZAF","ADM0_A3_JP":"ZAF","ADM0_A3_KO":"ZAF","ADM0_A3_VN":"ZAF","ADM0_A3_TR":"ZAF","ADM0_A3_ID":"ZAF","ADM0_A3_PL":"ZAF","ADM0_A3_GR":"ZAF","ADM0_A3_IT":"ZAF","ADM0_A3_NL":"ZAF","ADM0_A3_SE":"ZAF","ADM0_A3_BD":"ZAF","ADM0_A3_UA":"ZAF","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Southern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":23.665734,"LABEL_Y":-29.708776,"NE_ID":1159321431,"WIKIDATAID":"Q258","NAME_AR":"جنوب أفريقيا","NAME_BN":"দক্ষিণ আফ্রিকা","NAME_DE":"Südafrika","NAME_EN":"South Africa","NAME_ES":"Sudáfrica","NAME_FA":"آفریقای جنوبی","NAME_FR":"Afrique du Sud","NAME_EL":"Νότια Αφρική","NAME_HE":"דרום אפריקה","NAME_HI":"दक्षिण अफ़्रीका","NAME_HU":"Dél-afrikai Köztársaság","NAME_ID":"Afrika Selatan","NAME_IT":"Sudafrica","NAME_JA":"南アフリカ共和国","NAME_KO":"남아프리카 공화국","NAME_NL":"Zuid-Afrika","NAME_PL":"Południowa Afryka","NAME_PT":"África do Sul","NAME_RU":"ЮАР","NAME_SV":"Sydafrika","NAME_TR":"Güney Afrika Cumhuriyeti","NAME_UK":"Південно-Африканська Республіка","NAME_UR":"جنوبی افریقا","NAME_VI":"Cộng hòa Nam Phi","NAME_ZH":"南非","NAME_ZHT":"南非","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[41.53271484375,-1.6953125],[41.97988281250002,-0.9730468750000085],[43.46767578125002,0.6216308593749886],[44.33271484375001,1.3909667968749915],[44.92021484375002,1.8101562499999915],[46.05117187500002,2.4751464843749886],[46.87880859375002,3.28564453125],[47.97529296875001,4.497021484374997],[48.649023437500006,5.494384765625],[49.04931640625,6.173632812499989],[49.34853515625002,6.990527343749989],[50.10283203125002,8.199804687499991],[50.429785156250006,8.845263671874989],[50.82500000000002,9.428173828124997],[50.8984375,10.253124999999997],[51.140625,10.656884765624994],[51.08427734375002,11.335644531249997],[51.2548828125,11.830712890624994],[50.79228515625002,11.983691406249989],[50.11005859375001,11.529296875],[48.938574218750006,11.258447265624994],[48.938085937500006,9.451757812499991],[47.97822265625001,7.9970703125],[45.93496093750002,5.997216796874994],[44.940527343750006,4.912011718749994],[44.02812500000002,4.950976562499989],[43.53828125000001,4.84033203125],[43.01601562500002,4.5633300781249915],[42.791601562500006,4.2919921875],[42.02412109375001,4.137939453125],[41.88398437500001,3.977734374999997],[41.341796875,3.20166015625],[40.964453125000006,2.814648437499997],[40.97001953125002,1.378173828125],[40.97871093750001,-0.8703125000000114],[41.53271484375,-1.6953125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Somalia","SOV_A3":"SOM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Somalia","ADM0_A3":"SOM","GEOU_DIF":0,"GEOUNIT":"Somalia","GU_A3":"SOM","SU_DIF":0,"SUBUNIT":"Somalia","SU_A3":"SOM","BRK_DIFF":0,"NAME":"Somalia","NAME_LONG":"Somalia","BRK_A3":"SOM","BRK_NAME":"Somalia","BRK_GROUP":"","ABBREV":"Som.","POSTAL":"SO","FORMAL_EN":"Federal Republic of Somalia","FORMAL_FR":"","NAME_CIAWF":"Somalia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Somalia","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":8,"MAPCOLOR9":6,"MAPCOLOR13":7,"POP_EST":10192317.3,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":4719,"GDP_YEAR":2016,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"SO","ISO_A2":"SO","ISO_A2_EH":"SO","ISO_A3":"SOM","ISO_A3_EH":"SOM","ISO_N3":"706","ISO_N3_EH":"706","UN_A3":"706","WB_A2":"SO","WB_A3":"SOM","WOE_ID":-90,"WOE_ID_EH":23424949,"WOE_NOTE":"Includes Somaliland (2347021, 2347020, 2347017 and portion of 2347016)","ADM0_ISO":"SOM","ADM0_DIFF":"","ADM0_TLC":"SOM","ADM0_A3_US":"SOM","ADM0_A3_FR":"SOM","ADM0_A3_RU":"SOM","ADM0_A3_ES":"SOM","ADM0_A3_CN":"SOM","ADM0_A3_TW":"SOM","ADM0_A3_IN":"SOM","ADM0_A3_NP":"SOM","ADM0_A3_PK":"SOM","ADM0_A3_DE":"SOM","ADM0_A3_GB":"SOM","ADM0_A3_BR":"SOM","ADM0_A3_IL":"SOM","ADM0_A3_PS":"SOM","ADM0_A3_SA":"SOM","ADM0_A3_EG":"SOM","ADM0_A3_MA":"SOM","ADM0_A3_PT":"SOM","ADM0_A3_AR":"SOM","ADM0_A3_JP":"SOM","ADM0_A3_KO":"SOM","ADM0_A3_VN":"SOM","ADM0_A3_TR":"SOM","ADM0_A3_ID":"SOM","ADM0_A3_PL":"SOM","ADM0_A3_GR":"SOM","ADM0_A3_IT":"SOM","ADM0_A3_NL":"SOM","ADM0_A3_SE":"SOM","ADM0_A3_BD":"SOM","ADM0_A3_UA":"SOM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":45.19238,"LABEL_Y":3.568925,"NE_ID":1159321261,"WIKIDATAID":"Q1045","NAME_AR":"الصومال","NAME_BN":"সোমালিয়া","NAME_DE":"Somalia","NAME_EN":"Somalia","NAME_ES":"Somalia","NAME_FA":"سومالی","NAME_FR":"Somalie","NAME_EL":"Σομαλία","NAME_HE":"סומליה","NAME_HI":"सोमालिया","NAME_HU":"Szomália","NAME_ID":"Somalia","NAME_IT":"Somalia","NAME_JA":"ソマリア","NAME_KO":"소말리아","NAME_NL":"Somalië","NAME_PL":"Somalia","NAME_PT":"Somália","NAME_RU":"Сомали","NAME_SV":"Somalia","NAME_TR":"Somali","NAME_UK":"Сомалі","NAME_UR":"صومالیہ","NAME_VI":"Somalia","NAME_ZH":"索马里","NAME_ZHT":"索馬利亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[48.938574218750006,11.258447265624994],[48.674414062500006,11.322656249999994],[48.01923828125001,11.139355468749997],[47.40498046875001,11.174023437499997],[46.565039062500006,10.745996093749994],[45.81669921875002,10.835888671874997],[44.942968750000006,10.436718749999997],[44.38652343750002,10.430224609374989],[43.85273437500001,10.784277343749991],[43.24599609375002,11.499804687499989],[42.92275390625002,10.999316406249989],[42.65957031250002,10.621386718749989],[42.84160156250002,10.203076171874997],[43.181640625,9.879980468749991],[43.482519531250006,9.379492187499991],[44.02285156250002,8.986035156249997],[46.97822265625001,7.9970703125],[47.97822265625001,7.9970703125],[48.938085937500006,9.451757812499991],[48.938574218750006,11.258447265624994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Somaliland","SOV_A3":"SOL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Somaliland","ADM0_A3":"SOL","GEOU_DIF":0,"GEOUNIT":"Somaliland","GU_A3":"SOL","SU_DIF":0,"SUBUNIT":"Somaliland","SU_A3":"SOL","BRK_DIFF":0,"NAME":"Somaliland","NAME_LONG":"Somaliland","BRK_A3":"SOL","BRK_NAME":"Somaliland","BRK_GROUP":"","ABBREV":"Solnd.","POSTAL":"SL","FORMAL_EN":"Republic of Somaliland","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Disputed","NOTE_BRK":"Self admin.; Claimed by Somalia","NAME_SORT":"Somaliland","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":6,"MAPCOLOR9":5,"MAPCOLOR13":2,"POP_EST":5096159,"POP_RANK":13,"POP_YEAR":2014,"GDP_MD":17836,"GDP_YEAR":2013,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"-99","ISO_A2":"-99","ISO_A2_EH":"-99","ISO_A3":"-99","ISO_A3_EH":"-99","ISO_N3":"-99","ISO_N3_EH":"-99","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":-99,"WOE_ID_EH":-99,"WOE_NOTE":"Includes old states of 2347021, 2347020, 2347017 and portion of 2347016.","ADM0_ISO":"SOM","ADM0_DIFF":"1","ADM0_TLC":"SOL","ADM0_A3_US":"SOM","ADM0_A3_FR":"SOM","ADM0_A3_RU":"SOM","ADM0_A3_ES":"SOM","ADM0_A3_CN":"SOM","ADM0_A3_TW":"SOL","ADM0_A3_IN":"SOM","ADM0_A3_NP":"SOM","ADM0_A3_PK":"SOM","ADM0_A3_DE":"SOM","ADM0_A3_GB":"SOM","ADM0_A3_BR":"SOM","ADM0_A3_IL":"SOM","ADM0_A3_PS":"SOM","ADM0_A3_SA":"SOM","ADM0_A3_EG":"SOM","ADM0_A3_MA":"SOM","ADM0_A3_PT":"SOM","ADM0_A3_AR":"SOM","ADM0_A3_JP":"SOM","ADM0_A3_KO":"SOM","ADM0_A3_VN":"SOM","ADM0_A3_TR":"SOM","ADM0_A3_ID":"SOM","ADM0_A3_PL":"SOM","ADM0_A3_GR":"SOM","ADM0_A3_IT":"SOM","ADM0_A3_NL":"SOM","ADM0_A3_SE":"SOM","ADM0_A3_BD":"SOM","ADM0_A3_UA":"SOM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":4,"MIN_LABEL":4.5,"MAX_LABEL":9,"LABEL_X":46.731595,"LABEL_Y":9.443889,"NE_ID":1159321259,"WIKIDATAID":"Q34754","NAME_AR":"صوماليلاند","NAME_BN":"সোমালিল্যান্ড","NAME_DE":"Somaliland","NAME_EN":"Somaliland","NAME_ES":"Somalilandia","NAME_FA":"سومالیلند","NAME_FR":"Somaliland","NAME_EL":"Σομαλιλάνδη","NAME_HE":"סומלילנד","NAME_HI":"सोमालीदेश","NAME_HU":"Szomáliföld","NAME_ID":"Somaliland","NAME_IT":"Somaliland","NAME_JA":"ソマリランド","NAME_KO":"소말릴란드","NAME_NL":"Somaliland","NAME_PL":"Somaliland","NAME_PT":"Somalilândia","NAME_RU":"Сомалиленд","NAME_SV":"Somaliland","NAME_TR":"Somaliland","NAME_UK":"Сомаліленд","NAME_UR":"صومالی لینڈ","NAME_VI":"Somaliland","NAME_ZH":"索马里兰","NAME_ZHT":"索馬利蘭","FCLASS_ISO":"Unrecognized","TLC_DIFF":"1","FCLASS_TLC":"Admin-0 country","FCLASS_US":"Unrecognized","FCLASS_FR":"Unrecognized","FCLASS_RU":"Unrecognized","FCLASS_ES":"Unrecognized","FCLASS_CN":"Unrecognized","FCLASS_TW":"Admin-0 country","FCLASS_IN":"Unrecognized","FCLASS_NP":"Unrecognized","FCLASS_PK":"Unrecognized","FCLASS_DE":"Unrecognized","FCLASS_GB":"Unrecognized","FCLASS_BR":"Unrecognized","FCLASS_IL":"Unrecognized","FCLASS_PS":"Unrecognized","FCLASS_SA":"Unrecognized","FCLASS_EG":"Unrecognized","FCLASS_MA":"Unrecognized","FCLASS_PT":"Unrecognized","FCLASS_AR":"Unrecognized","FCLASS_JP":"Unrecognized","FCLASS_KO":"Unrecognized","FCLASS_VN":"Unrecognized","FCLASS_TR":"Unrecognized","FCLASS_ID":"Unrecognized","FCLASS_PL":"Unrecognized","FCLASS_GR":"Unrecognized","FCLASS_IT":"Unrecognized","FCLASS_NL":"Unrecognized","FCLASS_SE":"Unrecognized","FCLASS_BD":"Unrecognized","FCLASS_UA":"Unrecognized"}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[159.75039062500002,-9.272656250000011],[159.62187500000005,-9.532128906250009],[159.8537109375,-9.79150390625],[160.64921875000005,-9.928613281250009],[160.62548828125,-9.5888671875],[160.35458984375003,-9.421582031250011],[159.97060546875002,-9.433300781250011],[159.75039062500002,-9.272656250000011]]],[[[159.8791015625,-8.534277343750006],[159.84306640625005,-8.326953125000003],[159.109375,-7.903515625000011],[158.94404296875,-8.040722656250011],[159.8791015625,-8.534277343750006]]],[[[160.74941406250002,-8.31396484375],[160.59042968750003,-8.372753906250011],[160.87343750000002,-9.156835937500006],[161.25849609375,-9.31689453125],[160.99765625000003,-8.612011718750011],[160.74941406250002,-8.31396484375]]],[[[161.71533203125,-10.387304687500006],[161.53789062500005,-10.56640625],[162.12363281250003,-10.824414062500011],[162.10537109375002,-10.453808593750011],[161.71533203125,-10.387304687500006]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":3,"SOVEREIGNT":"Solomon Islands","SOV_A3":"SLB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Solomon Islands","ADM0_A3":"SLB","GEOU_DIF":0,"GEOUNIT":"Solomon Islands","GU_A3":"SLB","SU_DIF":0,"SUBUNIT":"Solomon Islands","SU_A3":"SLB","BRK_DIFF":0,"NAME":"Solomon Is.","NAME_LONG":"Solomon Islands","BRK_A3":"SLB","BRK_NAME":"Solomon Is.","BRK_GROUP":"","ABBREV":"S. Is.","POSTAL":"SB","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Solomon Islands","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Solomon Islands","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":6,"POP_EST":669823,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":1589,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"BP","ISO_A2":"SB","ISO_A2_EH":"SB","ISO_A3":"SLB","ISO_A3_EH":"SLB","ISO_N3":"090","ISO_N3_EH":"090","UN_A3":"090","WB_A2":"SB","WB_A3":"SLB","WOE_ID":23424766,"WOE_ID_EH":23424766,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SLB","ADM0_DIFF":"","ADM0_TLC":"SLB","ADM0_A3_US":"SLB","ADM0_A3_FR":"SLB","ADM0_A3_RU":"SLB","ADM0_A3_ES":"SLB","ADM0_A3_CN":"SLB","ADM0_A3_TW":"SLB","ADM0_A3_IN":"SLB","ADM0_A3_NP":"SLB","ADM0_A3_PK":"SLB","ADM0_A3_DE":"SLB","ADM0_A3_GB":"SLB","ADM0_A3_BR":"SLB","ADM0_A3_IL":"SLB","ADM0_A3_PS":"SLB","ADM0_A3_SA":"SLB","ADM0_A3_EG":"SLB","ADM0_A3_MA":"SLB","ADM0_A3_PT":"SLB","ADM0_A3_AR":"SLB","ADM0_A3_JP":"SLB","ADM0_A3_KO":"SLB","ADM0_A3_VN":"SLB","ADM0_A3_TR":"SLB","ADM0_A3_ID":"SLB","ADM0_A3_PL":"SLB","ADM0_A3_GR":"SLB","ADM0_A3_IT":"SLB","ADM0_A3_NL":"SLB","ADM0_A3_SE":"SLB","ADM0_A3_BD":"SLB","ADM0_A3_UA":"SLB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Melanesia","REGION_WB":"East Asia & Pacific","NAME_LEN":11,"LONG_LEN":15,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":159.170468,"LABEL_Y":-8.029548,"NE_ID":1159321249,"WIKIDATAID":"Q685","NAME_AR":"جزر سليمان","NAME_BN":"সলোমন দ্বীপপুঞ্জ","NAME_DE":"Salomonen","NAME_EN":"Solomon Islands","NAME_ES":"Islas Salomón","NAME_FA":"جزایر سلیمان","NAME_FR":"Îles Salomon","NAME_EL":"Νησιά Σολομώντα","NAME_HE":"איי שלמה","NAME_HI":"सोलोमन द्वीपसमूह","NAME_HU":"Salamon-szigetek","NAME_ID":"Kepulauan Solomon","NAME_IT":"Isole Salomone","NAME_JA":"ソロモン諸島","NAME_KO":"솔로몬 제도","NAME_NL":"Salomonseilanden","NAME_PL":"Wyspy Salomona","NAME_PT":"Ilhas Salomão","NAME_RU":"Соломоновы Острова","NAME_SV":"Salomonöarna","NAME_TR":"Solomon Adaları","NAME_UK":"Соломонові Острови","NAME_UR":"جزائر سلیمان","NAME_VI":"Quần đảo Solomon","NAME_ZH":"所罗门群岛","NAME_ZHT":"索羅門群島","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[22.538671875000006,49.072705078125],[21.6396484375,49.411962890625],[20.616113281250023,49.39169921875],[19.80224609375,49.192333984375],[19.44160156250001,49.597705078124996],[18.83222656250001,49.510791015624996],[18.160937500000017,49.257373046874996],[17.75849609375001,48.888134765625],[17.1884765625,48.8609375],[16.953125,48.598828125],[17.147363281250023,48.00595703125],[17.76191406250001,47.770166015624994],[18.724218750000006,47.787158203124996],[18.914160156250006,48.050830078124996],[19.89863281250001,48.13134765625],[20.490039062500017,48.526904296874996],[21.45136718750001,48.55224609375],[22.1318359375,48.405322265624996],[22.538671875000006,49.072705078125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Slovakia","SOV_A3":"SVK","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Slovakia","ADM0_A3":"SVK","GEOU_DIF":0,"GEOUNIT":"Slovakia","GU_A3":"SVK","SU_DIF":0,"SUBUNIT":"Slovakia","SU_A3":"SVK","BRK_DIFF":0,"NAME":"Slovakia","NAME_LONG":"Slovakia","BRK_A3":"SVK","BRK_NAME":"Slovakia","BRK_GROUP":"","ABBREV":"Svk.","POSTAL":"SK","FORMAL_EN":"Slovak Republic","FORMAL_FR":"","NAME_CIAWF":"Slovakia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Slovak Republic","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":9,"POP_EST":5454073,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":105079,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"LO","ISO_A2":"SK","ISO_A2_EH":"SK","ISO_A3":"SVK","ISO_A3_EH":"SVK","ISO_N3":"703","ISO_N3_EH":"703","UN_A3":"703","WB_A2":"SK","WB_A3":"SVK","WOE_ID":23424877,"WOE_ID_EH":23424877,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SVK","ADM0_DIFF":"","ADM0_TLC":"SVK","ADM0_A3_US":"SVK","ADM0_A3_FR":"SVK","ADM0_A3_RU":"SVK","ADM0_A3_ES":"SVK","ADM0_A3_CN":"SVK","ADM0_A3_TW":"SVK","ADM0_A3_IN":"SVK","ADM0_A3_NP":"SVK","ADM0_A3_PK":"SVK","ADM0_A3_DE":"SVK","ADM0_A3_GB":"SVK","ADM0_A3_BR":"SVK","ADM0_A3_IL":"SVK","ADM0_A3_PS":"SVK","ADM0_A3_SA":"SVK","ADM0_A3_EG":"SVK","ADM0_A3_MA":"SVK","ADM0_A3_PT":"SVK","ADM0_A3_AR":"SVK","ADM0_A3_JP":"SVK","ADM0_A3_KO":"SVK","ADM0_A3_VN":"SVK","ADM0_A3_TR":"SVK","ADM0_A3_ID":"SVK","ADM0_A3_PL":"SVK","ADM0_A3_GR":"SVK","ADM0_A3_IT":"SVK","ADM0_A3_NL":"SVK","ADM0_A3_SE":"SVK","ADM0_A3_BD":"SVK","ADM0_A3_UA":"SVK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":19.049868,"LABEL_Y":48.734044,"NE_ID":1159321283,"WIKIDATAID":"Q214","NAME_AR":"سلوفاكيا","NAME_BN":"স্লোভাকিয়া","NAME_DE":"Slowakei","NAME_EN":"Slovakia","NAME_ES":"Eslovaquia","NAME_FA":"اسلواکی","NAME_FR":"Slovaquie","NAME_EL":"Σλοβακία","NAME_HE":"סלובקיה","NAME_HI":"स्लोवाकिया","NAME_HU":"Szlovákia","NAME_ID":"Slowakia","NAME_IT":"Slovacchia","NAME_JA":"スロバキア","NAME_KO":"슬로바키아","NAME_NL":"Slowakije","NAME_PL":"Słowacja","NAME_PT":"Eslováquia","NAME_RU":"Словакия","NAME_SV":"Slovakien","NAME_TR":"Slovakya","NAME_UK":"Словаччина","NAME_UR":"سلوواکیہ","NAME_VI":"Slovakia","NAME_ZH":"斯洛伐克","NAME_ZHT":"斯洛伐克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[16.516210937500006,46.499902343749994],[16.093066406250017,46.86328125],[15.957617187500006,46.677636718749994],[15.000683593750011,46.6259765625],[14.503515625000006,46.417041015624996],[13.700000000000017,46.520263671875],[13.399511718750006,46.317529296874994],[13.719824218750006,45.58759765625],[13.577929687500017,45.516894531249996],[13.878710937500017,45.428369140624994],[15.339453125000006,45.467041015625],[15.624804687500017,45.834033203124996],[15.635937500000011,46.200732421874996],[16.516210937500006,46.499902343749994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Slovenia","SOV_A3":"SVN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Slovenia","ADM0_A3":"SVN","GEOU_DIF":0,"GEOUNIT":"Slovenia","GU_A3":"SVN","SU_DIF":0,"SUBUNIT":"Slovenia","SU_A3":"SVN","BRK_DIFF":0,"NAME":"Slovenia","NAME_LONG":"Slovenia","BRK_A3":"SVN","BRK_NAME":"Slovenia","BRK_GROUP":"","ABBREV":"Slo.","POSTAL":"SLO","FORMAL_EN":"Republic of Slovenia","FORMAL_FR":"","NAME_CIAWF":"Slovenia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Slovenia","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":2,"MAPCOLOR13":12,"POP_EST":2087946,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":54174,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"SI","ISO_A2":"SI","ISO_A2_EH":"SI","ISO_A3":"SVN","ISO_A3_EH":"SVN","ISO_N3":"705","ISO_N3_EH":"705","UN_A3":"705","WB_A2":"SI","WB_A3":"SVN","WOE_ID":23424945,"WOE_ID_EH":23424945,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SVN","ADM0_DIFF":"","ADM0_TLC":"SVN","ADM0_A3_US":"SVN","ADM0_A3_FR":"SVN","ADM0_A3_RU":"SVN","ADM0_A3_ES":"SVN","ADM0_A3_CN":"SVN","ADM0_A3_TW":"SVN","ADM0_A3_IN":"SVN","ADM0_A3_NP":"SVN","ADM0_A3_PK":"SVN","ADM0_A3_DE":"SVN","ADM0_A3_GB":"SVN","ADM0_A3_BR":"SVN","ADM0_A3_IL":"SVN","ADM0_A3_PS":"SVN","ADM0_A3_SA":"SVN","ADM0_A3_EG":"SVN","ADM0_A3_MA":"SVN","ADM0_A3_PT":"SVN","ADM0_A3_AR":"SVN","ADM0_A3_JP":"SVN","ADM0_A3_KO":"SVN","ADM0_A3_VN":"SVN","ADM0_A3_TR":"SVN","ADM0_A3_ID":"SVN","ADM0_A3_PL":"SVN","ADM0_A3_GR":"SVN","ADM0_A3_IT":"SVN","ADM0_A3_NL":"SVN","ADM0_A3_SE":"SVN","ADM0_A3_BD":"SVN","ADM0_A3_UA":"SVN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":14.915312,"LABEL_Y":46.06076,"NE_ID":1159321285,"WIKIDATAID":"Q215","NAME_AR":"سلوفينيا","NAME_BN":"স্লোভেনিয়া","NAME_DE":"Slowenien","NAME_EN":"Slovenia","NAME_ES":"Eslovenia","NAME_FA":"اسلوونی","NAME_FR":"Slovénie","NAME_EL":"Σλοβενία","NAME_HE":"סלובניה","NAME_HI":"स्लोवेनिया","NAME_HU":"Szlovénia","NAME_ID":"Slovenia","NAME_IT":"Slovenia","NAME_JA":"スロベニア","NAME_KO":"슬로베니아","NAME_NL":"Slovenië","NAME_PL":"Słowenia","NAME_PT":"Eslovénia","NAME_RU":"Словения","NAME_SV":"Slovenien","NAME_TR":"Slovenya","NAME_UK":"Словенія","NAME_UR":"سلووینیا","NAME_VI":"Slovenia","NAME_ZH":"斯洛文尼亚","NAME_ZHT":"斯洛維尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Singapore","SOV_A3":"SGP","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Singapore","ADM0_A3":"SGP","GEOU_DIF":0,"GEOUNIT":"Singapore","GU_A3":"SGP","SU_DIF":0,"SUBUNIT":"Singapore","SU_A3":"SGP","BRK_DIFF":0,"NAME":"Singapore","NAME_LONG":"Singapore","BRK_A3":"SGP","BRK_NAME":"Singapore","BRK_GROUP":"","ABBREV":"Sing.","POSTAL":"SG","FORMAL_EN":"Republic of Singapore","FORMAL_FR":"","NAME_CIAWF":"Singapore","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Singapore","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":5703569,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":372062,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"SN","ISO_A2":"SG","ISO_A2_EH":"SG","ISO_A3":"SGP","ISO_A3_EH":"SGP","ISO_N3":"702","ISO_N3_EH":"702","UN_A3":"702","WB_A2":"SG","WB_A3":"SGP","WOE_ID":23424948,"WOE_ID_EH":23424948,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SGP","ADM0_DIFF":"","ADM0_TLC":"SGP","ADM0_A3_US":"SGP","ADM0_A3_FR":"SGP","ADM0_A3_RU":"SGP","ADM0_A3_ES":"SGP","ADM0_A3_CN":"SGP","ADM0_A3_TW":"SGP","ADM0_A3_IN":"SGP","ADM0_A3_NP":"SGP","ADM0_A3_PK":"SGP","ADM0_A3_DE":"SGP","ADM0_A3_GB":"SGP","ADM0_A3_BR":"SGP","ADM0_A3_IL":"SGP","ADM0_A3_PS":"SGP","ADM0_A3_SA":"SGP","ADM0_A3_EG":"SGP","ADM0_A3_MA":"SGP","ADM0_A3_PT":"SGP","ADM0_A3_AR":"SGP","ADM0_A3_JP":"SGP","ADM0_A3_KO":"SGP","ADM0_A3_VN":"SGP","ADM0_A3_TR":"SGP","ADM0_A3_ID":"SGP","ADM0_A3_PL":"SGP","ADM0_A3_GR":"SGP","ADM0_A3_IT":"SGP","ADM0_A3_NL":"SGP","ADM0_A3_SE":"SGP","ADM0_A3_BD":"SGP","ADM0_A3_UA":"SGP","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":5,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":103.816925,"LABEL_Y":1.366587,"NE_ID":1159321247,"WIKIDATAID":"Q334","NAME_AR":"سنغافورة","NAME_BN":"সিঙ্গাপুর","NAME_DE":"Singapur","NAME_EN":"Singapore","NAME_ES":"Singapur","NAME_FA":"سنگاپور","NAME_FR":"Singapour","NAME_EL":"Σιγκαπούρη","NAME_HE":"סינגפור","NAME_HI":"सिंगापुर","NAME_HU":"Szingapúr","NAME_ID":"Singapura","NAME_IT":"Singapore","NAME_JA":"シンガポール","NAME_KO":"싱가포르","NAME_NL":"Singapore","NAME_PL":"Singapur","NAME_PT":"Singapura","NAME_RU":"Сингапур","NAME_SV":"Singapore","NAME_TR":"Singapur","NAME_UK":"Сінгапур","NAME_UR":"سنگاپور","NAME_VI":"Singapore","NAME_ZH":"新加坡","NAME_ZHT":"新加坡","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-10.283203125,8.485156249999989],[-10.500537109374989,8.687548828124989],[-10.690527343749977,9.314257812499989],[-11.205664062499977,9.977734374999997],[-11.911083984374983,9.993017578124991],[-12.50146484375,9.862158203124991],[-12.755859375,9.373583984374989],[-13.292675781249983,9.049218749999994],[-13.228417968749994,8.695898437499991],[-12.880957031249977,7.856640624999997],[-12.510449218749983,7.665722656249997],[-12.485644531249989,7.386279296874989],[-11.733447265624989,7.088574218749997],[-11.507519531249983,6.906542968749989],[-11.267675781249977,7.232617187499997],[-10.6474609375,7.7593749999999915],[-10.283203125,8.485156249999989]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Sierra Leone","SOV_A3":"SLE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Sierra Leone","ADM0_A3":"SLE","GEOU_DIF":0,"GEOUNIT":"Sierra Leone","GU_A3":"SLE","SU_DIF":0,"SUBUNIT":"Sierra Leone","SU_A3":"SLE","BRK_DIFF":0,"NAME":"Sierra Leone","NAME_LONG":"Sierra Leone","BRK_A3":"SLE","BRK_NAME":"Sierra Leone","BRK_GROUP":"","ABBREV":"S.L.","POSTAL":"SL","FORMAL_EN":"Republic of Sierra Leone","FORMAL_FR":"","NAME_CIAWF":"Sierra Leone","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Sierra Leone","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":7,"POP_EST":7813215,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":4121,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"SL","ISO_A2":"SL","ISO_A2_EH":"SL","ISO_A3":"SLE","ISO_A3_EH":"SLE","ISO_N3":"694","ISO_N3_EH":"694","UN_A3":"694","WB_A2":"SL","WB_A3":"SLE","WOE_ID":23424946,"WOE_ID_EH":23424946,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SLE","ADM0_DIFF":"","ADM0_TLC":"SLE","ADM0_A3_US":"SLE","ADM0_A3_FR":"SLE","ADM0_A3_RU":"SLE","ADM0_A3_ES":"SLE","ADM0_A3_CN":"SLE","ADM0_A3_TW":"SLE","ADM0_A3_IN":"SLE","ADM0_A3_NP":"SLE","ADM0_A3_PK":"SLE","ADM0_A3_DE":"SLE","ADM0_A3_GB":"SLE","ADM0_A3_BR":"SLE","ADM0_A3_IL":"SLE","ADM0_A3_PS":"SLE","ADM0_A3_SA":"SLE","ADM0_A3_EG":"SLE","ADM0_A3_MA":"SLE","ADM0_A3_PT":"SLE","ADM0_A3_AR":"SLE","ADM0_A3_JP":"SLE","ADM0_A3_KO":"SLE","ADM0_A3_VN":"SLE","ADM0_A3_TR":"SLE","ADM0_A3_ID":"SLE","ADM0_A3_PL":"SLE","ADM0_A3_GR":"SLE","ADM0_A3_IT":"SLE","ADM0_A3_NL":"SLE","ADM0_A3_SE":"SLE","ADM0_A3_BD":"SLE","ADM0_A3_UA":"SLE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-11.763677,"LABEL_Y":8.617449,"NE_ID":1159321251,"WIKIDATAID":"Q1044","NAME_AR":"سيراليون","NAME_BN":"সিয়েরা লিওন","NAME_DE":"Sierra Leone","NAME_EN":"Sierra Leone","NAME_ES":"Sierra Leona","NAME_FA":"سیرالئون","NAME_FR":"Sierra Leone","NAME_EL":"Σιέρα Λεόνε","NAME_HE":"סיירה לאון","NAME_HI":"सिएरा लियोन","NAME_HU":"Sierra Leone","NAME_ID":"Sierra Leone","NAME_IT":"Sierra Leone","NAME_JA":"シエラレオネ","NAME_KO":"시에라리온","NAME_NL":"Sierra Leone","NAME_PL":"Sierra Leone","NAME_PT":"Serra Leoa","NAME_RU":"Сьерра-Леоне","NAME_SV":"Sierra Leone","NAME_TR":"Sierra Leone","NAME_UK":"Сьєрра-Леоне","NAME_UR":"سیرالیون","NAME_VI":"Sierra Leone","NAME_ZH":"塞拉利昂","NAME_ZHT":"獅子山","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Seychelles","SOV_A3":"SYC","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Seychelles","ADM0_A3":"SYC","GEOU_DIF":0,"GEOUNIT":"Seychelles","GU_A3":"SYC","SU_DIF":0,"SUBUNIT":"Seychelles","SU_A3":"SYC","BRK_DIFF":0,"NAME":"Seychelles","NAME_LONG":"Seychelles","BRK_A3":"SYC","BRK_NAME":"Seychelles","BRK_GROUP":"","ABBREV":"Syc.","POSTAL":"SC","FORMAL_EN":"Republic of Seychelles","FORMAL_FR":"","NAME_CIAWF":"Seychelles","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Seychelles","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":8,"MAPCOLOR9":3,"MAPCOLOR13":1,"POP_EST":97625,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":1703,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"SE","ISO_A2":"SC","ISO_A2_EH":"SC","ISO_A3":"SYC","ISO_A3_EH":"SYC","ISO_N3":"690","ISO_N3_EH":"690","UN_A3":"690","WB_A2":"SC","WB_A3":"SYC","WOE_ID":23424941,"WOE_ID_EH":23424941,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SYC","ADM0_DIFF":"","ADM0_TLC":"SYC","ADM0_A3_US":"SYC","ADM0_A3_FR":"SYC","ADM0_A3_RU":"SYC","ADM0_A3_ES":"SYC","ADM0_A3_CN":"SYC","ADM0_A3_TW":"SYC","ADM0_A3_IN":"SYC","ADM0_A3_NP":"SYC","ADM0_A3_PK":"SYC","ADM0_A3_DE":"SYC","ADM0_A3_GB":"SYC","ADM0_A3_BR":"SYC","ADM0_A3_IL":"SYC","ADM0_A3_PS":"SYC","ADM0_A3_SA":"SYC","ADM0_A3_EG":"SYC","ADM0_A3_MA":"SYC","ADM0_A3_PT":"SYC","ADM0_A3_AR":"SYC","ADM0_A3_JP":"SYC","ADM0_A3_KO":"SYC","ADM0_A3_VN":"SYC","ADM0_A3_TR":"SYC","ADM0_A3_ID":"SYC","ADM0_A3_PL":"SYC","ADM0_A3_GR":"SYC","ADM0_A3_IT":"SYC","ADM0_A3_NL":"SYC","ADM0_A3_SE":"SYC","ADM0_A3_BD":"SYC","ADM0_A3_UA":"SYC","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":55.480175,"LABEL_Y":-4.676659,"NE_ID":1159321291,"WIKIDATAID":"Q1042","NAME_AR":"سيشل","NAME_BN":"সেশেলস","NAME_DE":"Seychellen","NAME_EN":"Seychelles","NAME_ES":"Seychelles","NAME_FA":"سیشل","NAME_FR":"Seychelles","NAME_EL":"Σεϋχέλλες","NAME_HE":"סיישל","NAME_HI":"सेशेल्स","NAME_HU":"Seychelle-szigetek","NAME_ID":"Seychelles","NAME_IT":"Seychelles","NAME_JA":"セーシェル","NAME_KO":"세이셸","NAME_NL":"Seychellen","NAME_PL":"Seszele","NAME_PT":"Seychelles","NAME_RU":"Сейшельские Острова","NAME_SV":"Seychellerna","NAME_TR":"Seyşeller","NAME_UK":"Сейшельські Острови","NAME_UR":"سیشیلز","NAME_VI":"Seychelles","NAME_ZH":"塞舌尔","NAME_ZHT":"塞席爾","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[22.705078125,44.23779296875],[21.384375000000006,44.870068359375],[21.491796875000006,45.122265625],[20.774218750000017,45.484423828124996],[20.775000000000006,45.749804687499996],[20.241796875000006,46.10859375],[19.53076171875,46.155175781249994],[18.905371093750006,45.93173828125],[19.055078125000023,45.527246093749994],[19.007128906250017,44.869189453124996],[19.356835937500023,44.858544921874994],[19.15185546875,44.302539062499996],[19.583789062500017,44.04345703125],[19.1943359375,43.53330078125],[19.551562500000017,43.212255859375],[20.344335937500006,42.827929687499996],[21.057031250000023,43.091699218749994],[21.390625,42.751416015625],[21.7529296875,42.669824218749994],[21.5625,42.247509765625],[22.344042968750017,42.31396484375],[22.466796875,42.84248046875],[22.976855468750017,43.18798828125],[22.554589843750023,43.454492187499994],[22.420800781250023,44.007421875],[22.705078125,44.23779296875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Republic of Serbia","SOV_A3":"SRB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Republic of Serbia","ADM0_A3":"SRB","GEOU_DIF":0,"GEOUNIT":"Republic of Serbia","GU_A3":"SRB","SU_DIF":0,"SUBUNIT":"Republic of Serbia","SU_A3":"SRB","BRK_DIFF":0,"NAME":"Serbia","NAME_LONG":"Serbia","BRK_A3":"SRB","BRK_NAME":"Serbia","BRK_GROUP":"","ABBREV":"Serb.","POSTAL":"RS","FORMAL_EN":"Republic of Serbia","FORMAL_FR":"","NAME_CIAWF":"Serbia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Serbia","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":2,"MAPCOLOR13":10,"POP_EST":6944975,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":51475,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"RI","ISO_A2":"RS","ISO_A2_EH":"RS","ISO_A3":"SRB","ISO_A3_EH":"SRB","ISO_N3":"688","ISO_N3_EH":"688","UN_A3":"688","WB_A2":"YF","WB_A3":"SRB","WOE_ID":-90,"WOE_ID_EH":20069818,"WOE_NOTE":"Expired WOE also contains Kosovo.","ADM0_ISO":"SRB","ADM0_DIFF":"","ADM0_TLC":"SRB","ADM0_A3_US":"SRB","ADM0_A3_FR":"SRB","ADM0_A3_RU":"SRB","ADM0_A3_ES":"SRB","ADM0_A3_CN":"SRB","ADM0_A3_TW":"SRB","ADM0_A3_IN":"SRB","ADM0_A3_NP":"SRB","ADM0_A3_PK":"SRB","ADM0_A3_DE":"SRB","ADM0_A3_GB":"SRB","ADM0_A3_BR":"SRB","ADM0_A3_IL":"SRB","ADM0_A3_PS":"SRB","ADM0_A3_SA":"SRB","ADM0_A3_EG":"SRB","ADM0_A3_MA":"SRB","ADM0_A3_PT":"SRB","ADM0_A3_AR":"SRB","ADM0_A3_JP":"SRB","ADM0_A3_KO":"SRB","ADM0_A3_VN":"SRB","ADM0_A3_TR":"SRB","ADM0_A3_ID":"SRB","ADM0_A3_PL":"SRB","ADM0_A3_GR":"SRB","ADM0_A3_IT":"SRB","ADM0_A3_NL":"SRB","ADM0_A3_SE":"SRB","ADM0_A3_BD":"SRB","ADM0_A3_UA":"SRB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":7,"LABEL_X":20.787989,"LABEL_Y":44.189919,"NE_ID":1159321267,"WIKIDATAID":"Q403","NAME_AR":"صربيا","NAME_BN":"সার্বিয়া","NAME_DE":"Serbien","NAME_EN":"Serbia","NAME_ES":"Serbia","NAME_FA":"صربستان","NAME_FR":"Serbie","NAME_EL":"Σερβία","NAME_HE":"סרביה","NAME_HI":"सर्बिया","NAME_HU":"Szerbia","NAME_ID":"Serbia","NAME_IT":"Serbia","NAME_JA":"セルビア","NAME_KO":"세르비아","NAME_NL":"Servië","NAME_PL":"Serbia","NAME_PT":"Sérvia","NAME_RU":"Сербия","NAME_SV":"Serbien","NAME_TR":"Sırbistan","NAME_UK":"Сербія","NAME_UR":"سربیا","NAME_VI":"Serbia","NAME_ZH":"塞尔维亚","NAME_ZHT":"塞爾維亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-12.280615234374977,14.809033203124997],[-12.858496093749977,15.242529296874991],[-13.258007812499983,15.700390624999997],[-13.40966796875,16.05917968749999],[-13.868457031249989,16.148144531249997],[-14.300097656249989,16.580273437499997],[-15.112646484374977,16.644921874999994],[-15.620800781249983,16.506591796875],[-16.168359374999994,16.547070312499997],[-16.441015624999977,16.204541015624997],[-16.535253906249977,15.83837890625],[-17.147167968749983,14.922021484374994],[-17.168066406249977,14.640625],[-16.56230468749999,13.587304687499994],[-15.509667968749994,13.586230468750003],[-15.834277343749989,13.156445312499997],[-16.648779296874977,13.154150390624991],[-16.763330078124994,13.064160156249997],[-16.711816406249994,12.354833984374991],[-15.574804687499977,12.490380859374994],[-15.196093749999989,12.679931640625],[-13.729248046875,12.673925781249991],[-13.082910156249994,12.633544921875],[-12.291210937499983,12.328027343749994],[-11.389404296875,12.404394531249991],[-11.390380859375,12.941992187499991],[-11.634960937499983,13.369873046875],[-12.05419921875,13.633056640625],[-12.019189453124994,14.206494140624997],[-12.280615234374977,14.809033203124997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Senegal","SOV_A3":"SEN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Senegal","ADM0_A3":"SEN","GEOU_DIF":0,"GEOUNIT":"Senegal","GU_A3":"SEN","SU_DIF":0,"SUBUNIT":"Senegal","SU_A3":"SEN","BRK_DIFF":0,"NAME":"Senegal","NAME_LONG":"Senegal","BRK_A3":"SEN","BRK_NAME":"Senegal","BRK_GROUP":"","ABBREV":"Sen.","POSTAL":"SN","FORMAL_EN":"Republic of Senegal","FORMAL_FR":"","NAME_CIAWF":"Senegal","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Senegal","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":6,"MAPCOLOR9":5,"MAPCOLOR13":5,"POP_EST":16296364,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":23578,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"SG","ISO_A2":"SN","ISO_A2_EH":"SN","ISO_A3":"SEN","ISO_A3_EH":"SEN","ISO_N3":"686","ISO_N3_EH":"686","UN_A3":"686","WB_A2":"SN","WB_A3":"SEN","WOE_ID":23424943,"WOE_ID_EH":23424943,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SEN","ADM0_DIFF":"","ADM0_TLC":"SEN","ADM0_A3_US":"SEN","ADM0_A3_FR":"SEN","ADM0_A3_RU":"SEN","ADM0_A3_ES":"SEN","ADM0_A3_CN":"SEN","ADM0_A3_TW":"SEN","ADM0_A3_IN":"SEN","ADM0_A3_NP":"SEN","ADM0_A3_PK":"SEN","ADM0_A3_DE":"SEN","ADM0_A3_GB":"SEN","ADM0_A3_BR":"SEN","ADM0_A3_IL":"SEN","ADM0_A3_PS":"SEN","ADM0_A3_SA":"SEN","ADM0_A3_EG":"SEN","ADM0_A3_MA":"SEN","ADM0_A3_PT":"SEN","ADM0_A3_AR":"SEN","ADM0_A3_JP":"SEN","ADM0_A3_KO":"SEN","ADM0_A3_VN":"SEN","ADM0_A3_TR":"SEN","ADM0_A3_ID":"SEN","ADM0_A3_PL":"SEN","ADM0_A3_GR":"SEN","ADM0_A3_IT":"SEN","ADM0_A3_NL":"SEN","ADM0_A3_SE":"SEN","ADM0_A3_BD":"SEN","ADM0_A3_UA":"SEN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":8,"LABEL_X":-14.778586,"LABEL_Y":15.138125,"NE_ID":1159321243,"WIKIDATAID":"Q1041","NAME_AR":"السنغال","NAME_BN":"সেনেগাল","NAME_DE":"Senegal","NAME_EN":"Senegal","NAME_ES":"Senegal","NAME_FA":"سنگال","NAME_FR":"Sénégal","NAME_EL":"Σενεγάλη","NAME_HE":"סנגל","NAME_HI":"सेनेगल","NAME_HU":"Szenegál","NAME_ID":"Senegal","NAME_IT":"Senegal","NAME_JA":"セネガル","NAME_KO":"세네갈","NAME_NL":"Senegal","NAME_PL":"Senegal","NAME_PT":"Senegal","NAME_RU":"Сенегал","NAME_SV":"Senegal","NAME_TR":"Senegal","NAME_UK":"Сенегал","NAME_UR":"سینیگال","NAME_VI":"Sénégal","NAME_ZH":"塞内加尔","NAME_ZHT":"塞內加爾","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[51.977636718750006,18.996142578125003],[53.66689453125002,19.559130859375003],[54.97734375000002,19.99594726562499],[55.64101562500002,22.001855468749994],[55.18583984375002,22.7041015625],[55.10429687500002,22.621484374999994],[52.55507812500002,22.932812499999997],[51.59257812500002,24.078857421875],[51.568359375,24.286181640625003],[51.26796875000002,24.607226562500003],[50.80439453125001,24.789257812499997],[50.55791015625002,25.086669921875],[50.03164062500002,26.110986328124994],[50.2138671875,26.308496093749994],[49.98613281250002,26.828906249999996],[49.4052734375,27.180957031249996],[48.90644531250001,27.629052734374994],[48.442480468750006,28.542919921874997],[47.67128906250002,28.533154296874997],[47.433203125000006,28.989550781249996],[46.53144531250001,29.096240234374996],[46.3564453125,29.063671874999997],[44.69082031250002,29.202343749999997],[42.85771484375002,30.49521484375],[42.07441406250001,31.080371093749996],[40.36933593750001,31.93896484375],[39.14541015625002,32.12451171875],[38.96230468750002,31.994921874999996],[36.958593750000006,31.491503906249996],[37.980078125000006,30.5],[37.63359375000002,30.313281249999996],[37.46923828125,29.995068359374997],[36.75527343750002,29.866015624999996],[36.47607421875,29.4951171875],[36.01542968750002,29.190478515624996],[34.950781250000006,29.353515625],[34.779882812500006,28.50732421875],[34.6162109375,28.148339843749994],[35.18046875000002,28.034863281249997],[35.58134765625002,27.432470703125],[36.249609375000006,26.594775390624996],[36.7626953125,25.75131835937499],[37.14882812500002,25.29111328124999],[37.18085937500001,24.820019531249997],[37.543066406250006,24.291650390624994],[37.91972656250002,24.18540039062499],[38.46416015625002,23.711865234374997],[38.94111328125001,22.8818359375],[39.09589843750001,22.392773437499997],[38.987890625000006,21.881738281249994],[39.09355468750002,21.310351562500003],[39.61367187500002,20.51767578124999],[40.080664062500006,20.265917968750003],[40.75917968750002,19.75546874999999],[41.11601562500002,19.082177734374994],[41.2294921875,18.678417968749997],[41.75,17.8857421875],[42.2939453125,17.434960937499994],[42.38330078125,17.122460937499994],[42.698828125000006,16.736962890624994],[42.79931640625,16.371777343749997],[43.1650390625,16.689404296874997],[43.19091796875,17.359375],[43.41796875,17.516259765624994],[43.9169921875,17.32470703125],[44.15595703125001,17.39853515624999],[45.148046875000006,17.427441406249997],[45.40654296875002,17.319775390624997],[46.31035156250002,17.23129882812499],[46.68203125000002,17.2685546875],[46.975683593750006,16.95346679687499],[47.44179687500002,17.111865234375003],[47.57958984375,17.44833984374999],[48.17216796875002,18.156933593749997],[49.0419921875,18.581787109375],[51.977636718750006,18.996142578125003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":2,"SOVEREIGNT":"Saudi Arabia","SOV_A3":"SAU","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Saudi Arabia","ADM0_A3":"SAU","GEOU_DIF":0,"GEOUNIT":"Saudi Arabia","GU_A3":"SAU","SU_DIF":0,"SUBUNIT":"Saudi Arabia","SU_A3":"SAU","BRK_DIFF":0,"NAME":"Saudi Arabia","NAME_LONG":"Saudi Arabia","BRK_A3":"SAU","BRK_NAME":"Saudi Arabia","BRK_GROUP":"","ABBREV":"Saud.","POSTAL":"SA","FORMAL_EN":"Kingdom of Saudi Arabia","FORMAL_FR":"","NAME_CIAWF":"Saudi Arabia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Saudi Arabia","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":1,"MAPCOLOR9":6,"MAPCOLOR13":7,"POP_EST":34268528,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":792966,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"SA","ISO_A2":"SA","ISO_A2_EH":"SA","ISO_A3":"SAU","ISO_A3_EH":"SAU","ISO_N3":"682","ISO_N3_EH":"682","UN_A3":"682","WB_A2":"SA","WB_A3":"SAU","WOE_ID":23424938,"WOE_ID_EH":23424938,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SAU","ADM0_DIFF":"","ADM0_TLC":"SAU","ADM0_A3_US":"SAU","ADM0_A3_FR":"SAU","ADM0_A3_RU":"SAU","ADM0_A3_ES":"SAU","ADM0_A3_CN":"SAU","ADM0_A3_TW":"SAU","ADM0_A3_IN":"SAU","ADM0_A3_NP":"SAU","ADM0_A3_PK":"SAU","ADM0_A3_DE":"SAU","ADM0_A3_GB":"SAU","ADM0_A3_BR":"SAU","ADM0_A3_IL":"SAU","ADM0_A3_PS":"SAU","ADM0_A3_SA":"SAU","ADM0_A3_EG":"SAU","ADM0_A3_MA":"SAU","ADM0_A3_PT":"SAU","ADM0_A3_AR":"SAU","ADM0_A3_JP":"SAU","ADM0_A3_KO":"SAU","ADM0_A3_VN":"SAU","ADM0_A3_TR":"SAU","ADM0_A3_ID":"SAU","ADM0_A3_PL":"SAU","ADM0_A3_GR":"SAU","ADM0_A3_IT":"SAU","ADM0_A3_NL":"SAU","ADM0_A3_SE":"SAU","ADM0_A3_BD":"SAU","ADM0_A3_UA":"SAU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":7,"LABEL_X":44.6996,"LABEL_Y":23.806908,"NE_ID":1159321225,"WIKIDATAID":"Q851","NAME_AR":"السعودية","NAME_BN":"সৌদি আরব","NAME_DE":"Saudi-Arabien","NAME_EN":"Saudi Arabia","NAME_ES":"Arabia Saudita","NAME_FA":"عربستان سعودی","NAME_FR":"Arabie saoudite","NAME_EL":"Σαουδική Αραβία","NAME_HE":"ערב הסעודית","NAME_HI":"सउदी अरब","NAME_HU":"Szaúd-Arábia","NAME_ID":"Arab Saudi","NAME_IT":"Arabia Saudita","NAME_JA":"サウジアラビア","NAME_KO":"사우디아라비아","NAME_NL":"Saoedi-Arabië","NAME_PL":"Arabia Saudyjska","NAME_PT":"Arábia Saudita","NAME_RU":"Саудовская Аравия","NAME_SV":"Saudiarabien","NAME_TR":"Suudi Arabistan","NAME_UK":"Саудівська Аравія","NAME_UR":"سعودی عرب","NAME_VI":"Ả Rập Saudi","NAME_ZH":"沙特阿拉伯","NAME_ZHT":"沙烏地阿拉伯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"São Tomé and Principe","SOV_A3":"STP","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"São Tomé and Principe","ADM0_A3":"STP","GEOU_DIF":0,"GEOUNIT":"São Tomé and Principe","GU_A3":"STP","SU_DIF":0,"SUBUNIT":"São Tomé and Principe","SU_A3":"STP","BRK_DIFF":0,"NAME":"São Tomé and Principe","NAME_LONG":"São Tomé and Principe","BRK_A3":"STP","BRK_NAME":"Sao Tome and Principe","BRK_GROUP":"","ABBREV":"S.T.P.","POSTAL":"ST","FORMAL_EN":"Democratic Republic of São Tomé and Principe","FORMAL_FR":"","NAME_CIAWF":"Sao Tome and Principe","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Sao Tome and Principe","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":6,"MAPCOLOR9":1,"MAPCOLOR13":7,"POP_EST":215056,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":418,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"TP","ISO_A2":"ST","ISO_A2_EH":"ST","ISO_A3":"STP","ISO_A3_EH":"STP","ISO_N3":"678","ISO_N3_EH":"678","UN_A3":"678","WB_A2":"ST","WB_A3":"STP","WOE_ID":23424966,"WOE_ID_EH":23424966,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"STP","ADM0_DIFF":"","ADM0_TLC":"STP","ADM0_A3_US":"STP","ADM0_A3_FR":"STP","ADM0_A3_RU":"STP","ADM0_A3_ES":"STP","ADM0_A3_CN":"STP","ADM0_A3_TW":"STP","ADM0_A3_IN":"STP","ADM0_A3_NP":"STP","ADM0_A3_PK":"STP","ADM0_A3_DE":"STP","ADM0_A3_GB":"STP","ADM0_A3_BR":"STP","ADM0_A3_IL":"STP","ADM0_A3_PS":"STP","ADM0_A3_SA":"STP","ADM0_A3_EG":"STP","ADM0_A3_MA":"STP","ADM0_A3_PT":"STP","ADM0_A3_AR":"STP","ADM0_A3_JP":"STP","ADM0_A3_KO":"STP","ADM0_A3_VN":"STP","ADM0_A3_TR":"STP","ADM0_A3_ID":"STP","ADM0_A3_PL":"STP","ADM0_A3_GR":"STP","ADM0_A3_IT":"STP","ADM0_A3_NL":"STP","ADM0_A3_SE":"STP","ADM0_A3_BD":"STP","ADM0_A3_UA":"STP","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":21,"LONG_LEN":21,"ABBREV_LEN":6,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":7.021,"LABEL_Y":0.9709,"NE_ID":1159321273,"WIKIDATAID":"Q1039","NAME_AR":"ساو تومي وبرينسيب","NAME_BN":"সাঁউ তুমি ও প্রিন্সিপি","NAME_DE":"São Tomé und Príncipe","NAME_EN":"São Tomé and Príncipe","NAME_ES":"Santo Tomé y Príncipe","NAME_FA":"سائوتومه و پرینسیپ","NAME_FR":"Sao Tomé-et-Principe","NAME_EL":"Σάο Τομέ και Πρίνσιπε","NAME_HE":"סאו טומה ופרינסיפה","NAME_HI":"साओ तोमे और प्रिन्सिपी","NAME_HU":"São Tomé és Príncipe","NAME_ID":"Sao Tome dan Principe","NAME_IT":"São Tomé e Príncipe","NAME_JA":"サントメ・プリンシペ","NAME_KO":"상투메 프린시페","NAME_NL":"Sao Tomé en Principe","NAME_PL":"Wyspy Świętego Tomasza i Książęca","NAME_PT":"São Tomé e Príncipe","NAME_RU":"Сан-Томе и Принсипи","NAME_SV":"São Tomé och Príncipe","NAME_TR":"São Tomé ve Príncipe","NAME_UK":"Сан-Томе і Принсіпі","NAME_UR":"ساؤ ٹومے و پرنسپے","NAME_VI":"São Tomé và Príncipe","NAME_ZH":"圣多美和普林西比","NAME_ZHT":"聖多美普林西比","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"San Marino","SOV_A3":"SMR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"San Marino","ADM0_A3":"SMR","GEOU_DIF":0,"GEOUNIT":"San Marino","GU_A3":"SMR","SU_DIF":0,"SUBUNIT":"San Marino","SU_A3":"SMR","BRK_DIFF":0,"NAME":"San Marino","NAME_LONG":"San Marino","BRK_A3":"SMR","BRK_NAME":"San Marino","BRK_GROUP":"","ABBREV":"S.M.","POSTAL":"RSM","FORMAL_EN":"Republic of San Marino","FORMAL_FR":"","NAME_CIAWF":"San Marino","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"San Marino","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":1,"MAPCOLOR13":6,"POP_EST":33860,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":1655,"GDP_YEAR":2018,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"SM","ISO_A2":"SM","ISO_A2_EH":"SM","ISO_A3":"SMR","ISO_A3_EH":"SMR","ISO_N3":"674","ISO_N3_EH":"674","UN_A3":"674","WB_A2":"SM","WB_A3":"SMR","WOE_ID":23424947,"WOE_ID_EH":23424947,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SMR","ADM0_DIFF":"","ADM0_TLC":"SMR","ADM0_A3_US":"SMR","ADM0_A3_FR":"SMR","ADM0_A3_RU":"SMR","ADM0_A3_ES":"SMR","ADM0_A3_CN":"SMR","ADM0_A3_TW":"SMR","ADM0_A3_IN":"SMR","ADM0_A3_NP":"SMR","ADM0_A3_PK":"SMR","ADM0_A3_DE":"SMR","ADM0_A3_GB":"SMR","ADM0_A3_BR":"SMR","ADM0_A3_IL":"SMR","ADM0_A3_PS":"SMR","ADM0_A3_SA":"SMR","ADM0_A3_EG":"SMR","ADM0_A3_MA":"SMR","ADM0_A3_PT":"SMR","ADM0_A3_AR":"SMR","ADM0_A3_JP":"SMR","ADM0_A3_KO":"SMR","ADM0_A3_VN":"SMR","ADM0_A3_TR":"SMR","ADM0_A3_ID":"SMR","ADM0_A3_PL":"SMR","ADM0_A3_GR":"SMR","ADM0_A3_IT":"SMR","ADM0_A3_NL":"SMR","ADM0_A3_SE":"SMR","ADM0_A3_BD":"SMR","ADM0_A3_UA":"SMR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":5,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":12.441206,"LABEL_Y":43.933916,"NE_ID":1159321255,"WIKIDATAID":"Q238","NAME_AR":"سان مارينو","NAME_BN":"সান মারিনো","NAME_DE":"San Marino","NAME_EN":"San Marino","NAME_ES":"San Marino","NAME_FA":"سان مارینو","NAME_FR":"Saint-Marin","NAME_EL":"Άγιος Μαρίνος","NAME_HE":"סן מרינו","NAME_HI":"सान मारिनो","NAME_HU":"San Marino","NAME_ID":"San Marino","NAME_IT":"San Marino","NAME_JA":"サンマリノ","NAME_KO":"산마리노","NAME_NL":"San Marino","NAME_PL":"San Marino","NAME_PT":"San Marino","NAME_RU":"Сан-Марино","NAME_SV":"San Marino","NAME_TR":"San Marino","NAME_UK":"Сан-Марино","NAME_UR":"سان مارینو","NAME_VI":"San Marino","NAME_ZH":"圣马力诺","NAME_ZHT":"聖馬力諾","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Samoa","SOV_A3":"WSM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Samoa","ADM0_A3":"WSM","GEOU_DIF":0,"GEOUNIT":"Samoa","GU_A3":"WSM","SU_DIF":0,"SUBUNIT":"Samoa","SU_A3":"WSM","BRK_DIFF":0,"NAME":"Samoa","NAME_LONG":"Samoa","BRK_A3":"WSM","BRK_NAME":"Samoa","BRK_GROUP":"","ABBREV":"Samoa","POSTAL":"WS","FORMAL_EN":"Independent State of Samoa","FORMAL_FR":"","NAME_CIAWF":"Samoa","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Samoa","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":6,"POP_EST":197097,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":852,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"WS","ISO_A2":"WS","ISO_A2_EH":"WS","ISO_A3":"WSM","ISO_A3_EH":"WSM","ISO_N3":"882","ISO_N3_EH":"882","UN_A3":"882","WB_A2":"WS","WB_A3":"WSM","WOE_ID":23424992,"WOE_ID_EH":23424992,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"WSM","ADM0_DIFF":"","ADM0_TLC":"WSM","ADM0_A3_US":"WSM","ADM0_A3_FR":"WSM","ADM0_A3_RU":"WSM","ADM0_A3_ES":"WSM","ADM0_A3_CN":"WSM","ADM0_A3_TW":"WSM","ADM0_A3_IN":"WSM","ADM0_A3_NP":"WSM","ADM0_A3_PK":"WSM","ADM0_A3_DE":"WSM","ADM0_A3_GB":"WSM","ADM0_A3_BR":"WSM","ADM0_A3_IL":"WSM","ADM0_A3_PS":"WSM","ADM0_A3_SA":"WSM","ADM0_A3_EG":"WSM","ADM0_A3_MA":"WSM","ADM0_A3_PT":"WSM","ADM0_A3_AR":"WSM","ADM0_A3_JP":"WSM","ADM0_A3_KO":"WSM","ADM0_A3_VN":"WSM","ADM0_A3_TR":"WSM","ADM0_A3_ID":"WSM","ADM0_A3_PL":"WSM","ADM0_A3_GR":"WSM","ADM0_A3_IT":"WSM","ADM0_A3_NL":"WSM","ADM0_A3_SE":"WSM","ADM0_A3_BD":"WSM","ADM0_A3_UA":"WSM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-172.438241,"LABEL_Y":-13.639139,"NE_ID":1159321423,"WIKIDATAID":"Q683","NAME_AR":"ساموا","NAME_BN":"সামোয়া","NAME_DE":"Samoa","NAME_EN":"Samoa","NAME_ES":"Samoa","NAME_FA":"ساموآ","NAME_FR":"Samoa","NAME_EL":"Σαμόα","NAME_HE":"סמואה","NAME_HI":"समोआ","NAME_HU":"Szamoa","NAME_ID":"Samoa","NAME_IT":"Samoa","NAME_JA":"サモア","NAME_KO":"사모아","NAME_NL":"Samoa","NAME_PL":"Samoa","NAME_PT":"Samoa","NAME_RU":"Самоа","NAME_SV":"Samoa","NAME_TR":"Samoa","NAME_UK":"Самоа","NAME_UR":"سامووا","NAME_VI":"Samoa","NAME_ZH":"萨摩亚","NAME_ZHT":"薩摩亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Saint Vincent and the Grenadines","SOV_A3":"VCT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Saint Vincent and the Grenadines","ADM0_A3":"VCT","GEOU_DIF":0,"GEOUNIT":"Saint Vincent and the Grenadines","GU_A3":"VCT","SU_DIF":0,"SUBUNIT":"Saint Vincent and the Grenadines","SU_A3":"VCT","BRK_DIFF":0,"NAME":"St. Vin. and Gren.","NAME_LONG":"Saint Vincent and the Grenadines","BRK_A3":"VCT","BRK_NAME":"St. Vin. and Gren.","BRK_GROUP":"","ABBREV":"St.V.G.","POSTAL":"VC","FORMAL_EN":"Saint Vincent and the Grenadines","FORMAL_FR":"","NAME_CIAWF":"Saint Vincent and the Grenadines","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"St. Vincent and the Grenadines","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":5,"MAPCOLOR13":7,"POP_EST":110589,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":824,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"VC","ISO_A2":"VC","ISO_A2_EH":"VC","ISO_A3":"VCT","ISO_A3_EH":"VCT","ISO_N3":"670","ISO_N3_EH":"670","UN_A3":"670","WB_A2":"VC","WB_A3":"VCT","WOE_ID":23424981,"WOE_ID_EH":23424981,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"VCT","ADM0_DIFF":"","ADM0_TLC":"VCT","ADM0_A3_US":"VCT","ADM0_A3_FR":"VCT","ADM0_A3_RU":"VCT","ADM0_A3_ES":"VCT","ADM0_A3_CN":"VCT","ADM0_A3_TW":"VCT","ADM0_A3_IN":"VCT","ADM0_A3_NP":"VCT","ADM0_A3_PK":"VCT","ADM0_A3_DE":"VCT","ADM0_A3_GB":"VCT","ADM0_A3_BR":"VCT","ADM0_A3_IL":"VCT","ADM0_A3_PS":"VCT","ADM0_A3_SA":"VCT","ADM0_A3_EG":"VCT","ADM0_A3_MA":"VCT","ADM0_A3_PT":"VCT","ADM0_A3_AR":"VCT","ADM0_A3_JP":"VCT","ADM0_A3_KO":"VCT","ADM0_A3_VN":"VCT","ADM0_A3_TR":"VCT","ADM0_A3_ID":"VCT","ADM0_A3_PL":"VCT","ADM0_A3_GR":"VCT","ADM0_A3_IT":"VCT","ADM0_A3_NL":"VCT","ADM0_A3_SE":"VCT","ADM0_A3_BD":"VCT","ADM0_A3_UA":"VCT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":18,"LONG_LEN":32,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-61.3359,"LABEL_Y":13.0879,"NE_ID":1159321409,"WIKIDATAID":"Q757","NAME_AR":"سانت فينسنت والغرينادين","NAME_BN":"সেন্ট ভিনসেন্ট ও গ্রেনাডাইন","NAME_DE":"St. Vincent und die Grenadinen","NAME_EN":"Saint Vincent and the Grenadines","NAME_ES":"San Vicente y las Granadinas","NAME_FA":"سنت وینسنت و گرنادینها","NAME_FR":"Saint-Vincent-et-les-Grenadines","NAME_EL":"Άγιος Βικέντιος και Γρεναδίνες","NAME_HE":"סנט וינסנט והגרנדינים","NAME_HI":"सन्त विन्सेण्ट और ग्रेनाडाइन्स","NAME_HU":"Saint Vincent és a Grenadine-szigetek","NAME_ID":"Saint Vincent dan Grenadine","NAME_IT":"Saint Vincent e Grenadine","NAME_JA":"セントビンセント・グレナディーン","NAME_KO":"세인트빈센트 그레나딘","NAME_NL":"Saint Vincent en de Grenadines","NAME_PL":"Saint Vincent i Grenadyny","NAME_PT":"São Vicente e Granadinas","NAME_RU":"Сент-Винсент и Гренадины","NAME_SV":"Saint Vincent och Grenadinerna","NAME_TR":"Saint Vincent ve Grenadinler","NAME_UK":"Сент-Вінсент і Гренадини","NAME_UR":"سینٹ وینسینٹ و گریناڈائنز","NAME_VI":"Saint Vincent và Grenadines","NAME_ZH":"圣文森特和格林纳丁斯","NAME_ZHT":"聖文森及格瑞那丁","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Saint Lucia","SOV_A3":"LCA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Saint Lucia","ADM0_A3":"LCA","GEOU_DIF":0,"GEOUNIT":"Saint Lucia","GU_A3":"LCA","SU_DIF":0,"SUBUNIT":"Saint Lucia","SU_A3":"LCA","BRK_DIFF":0,"NAME":"Saint Lucia","NAME_LONG":"Saint Lucia","BRK_A3":"LCA","BRK_NAME":"Saint Lucia","BRK_GROUP":"","ABBREV":"S.L.","POSTAL":"LC","FORMAL_EN":"Saint Lucia","FORMAL_FR":"","NAME_CIAWF":"Saint Lucia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"St. Lucia","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":4,"MAPCOLOR9":3,"MAPCOLOR13":4,"POP_EST":182790,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":2122,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"ST","ISO_A2":"LC","ISO_A2_EH":"LC","ISO_A3":"LCA","ISO_A3_EH":"LCA","ISO_N3":"662","ISO_N3_EH":"662","UN_A3":"662","WB_A2":"LC","WB_A3":"LCA","WOE_ID":23424951,"WOE_ID_EH":23424951,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LCA","ADM0_DIFF":"","ADM0_TLC":"LCA","ADM0_A3_US":"LCA","ADM0_A3_FR":"LCA","ADM0_A3_RU":"LCA","ADM0_A3_ES":"LCA","ADM0_A3_CN":"LCA","ADM0_A3_TW":"LCA","ADM0_A3_IN":"LCA","ADM0_A3_NP":"LCA","ADM0_A3_PK":"LCA","ADM0_A3_DE":"LCA","ADM0_A3_GB":"LCA","ADM0_A3_BR":"LCA","ADM0_A3_IL":"LCA","ADM0_A3_PS":"LCA","ADM0_A3_SA":"LCA","ADM0_A3_EG":"LCA","ADM0_A3_MA":"LCA","ADM0_A3_PT":"LCA","ADM0_A3_AR":"LCA","ADM0_A3_JP":"LCA","ADM0_A3_KO":"LCA","ADM0_A3_VN":"LCA","ADM0_A3_TR":"LCA","ADM0_A3_ID":"LCA","ADM0_A3_PL":"LCA","ADM0_A3_GR":"LCA","ADM0_A3_IT":"LCA","ADM0_A3_NL":"LCA","ADM0_A3_SE":"LCA","ADM0_A3_BD":"LCA","ADM0_A3_UA":"LCA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":4,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9.5,"LABEL_X":-60.980094,"LABEL_Y":13.892371,"NE_ID":1159321019,"WIKIDATAID":"Q760","NAME_AR":"سانت لوسيا","NAME_BN":"সেন্ট লুসিয়া","NAME_DE":"St. Lucia","NAME_EN":"Saint Lucia","NAME_ES":"Santa Lucía","NAME_FA":"سنت لوسیا","NAME_FR":"Sainte-Lucie","NAME_EL":"Αγία Λουκία","NAME_HE":"סנט לוסיה","NAME_HI":"सेंट लूसिया","NAME_HU":"Saint Lucia","NAME_ID":"Saint Lucia","NAME_IT":"Saint Lucia","NAME_JA":"セントルシア","NAME_KO":"세인트루시아","NAME_NL":"Saint Lucia","NAME_PL":"Saint Lucia","NAME_PT":"Santa Lúcia","NAME_RU":"Сент-Люсия","NAME_SV":"Saint Lucia","NAME_TR":"Saint Lucia","NAME_UK":"Сент-Люсія","NAME_UR":"سینٹ لوسیا","NAME_VI":"Saint Lucia","NAME_ZH":"圣卢西亚","NAME_ZHT":"聖露西亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Saint Kitts and Nevis","SOV_A3":"KNA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Saint Kitts and Nevis","ADM0_A3":"KNA","GEOU_DIF":0,"GEOUNIT":"Saint Kitts and Nevis","GU_A3":"KNA","SU_DIF":0,"SUBUNIT":"Saint Kitts and Nevis","SU_A3":"KNA","BRK_DIFF":0,"NAME":"St. Kitts and Nevis","NAME_LONG":"Saint Kitts and Nevis","BRK_A3":"KNA","BRK_NAME":"Saint Kitts and Nevis","BRK_GROUP":"","ABBREV":"St.K.N.","POSTAL":"KN","FORMAL_EN":"Federation of Saint Kitts and Nevis","FORMAL_FR":"","NAME_CIAWF":"Saint Kitts and Nevis","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"St. Kitts and Nevis","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":52834,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":1053,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"SC","ISO_A2":"KN","ISO_A2_EH":"KN","ISO_A3":"KNA","ISO_A3_EH":"KNA","ISO_N3":"659","ISO_N3_EH":"659","UN_A3":"659","WB_A2":"KN","WB_A3":"KNA","WOE_ID":23424940,"WOE_ID_EH":23424940,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KNA","ADM0_DIFF":"","ADM0_TLC":"KNA","ADM0_A3_US":"KNA","ADM0_A3_FR":"KNA","ADM0_A3_RU":"KNA","ADM0_A3_ES":"KNA","ADM0_A3_CN":"KNA","ADM0_A3_TW":"KNA","ADM0_A3_IN":"KNA","ADM0_A3_NP":"KNA","ADM0_A3_PK":"KNA","ADM0_A3_DE":"KNA","ADM0_A3_GB":"KNA","ADM0_A3_BR":"KNA","ADM0_A3_IL":"KNA","ADM0_A3_PS":"KNA","ADM0_A3_SA":"KNA","ADM0_A3_EG":"KNA","ADM0_A3_MA":"KNA","ADM0_A3_PT":"KNA","ADM0_A3_AR":"KNA","ADM0_A3_JP":"KNA","ADM0_A3_KO":"KNA","ADM0_A3_VN":"KNA","ADM0_A3_TR":"KNA","ADM0_A3_ID":"KNA","ADM0_A3_PL":"KNA","ADM0_A3_GR":"KNA","ADM0_A3_IT":"KNA","ADM0_A3_NL":"KNA","ADM0_A3_SE":"KNA","ADM0_A3_BD":"KNA","ADM0_A3_UA":"KNA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":19,"LONG_LEN":21,"ABBREV_LEN":7,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-62.757975,"LABEL_Y":17.336558,"NE_ID":1159320983,"WIKIDATAID":"Q763","NAME_AR":"سانت كيتس ونيفيس","NAME_BN":"সেন্ট কিট্স ও নেভিস","NAME_DE":"St. Kitts und Nevis","NAME_EN":"Saint Kitts and Nevis","NAME_ES":"San Cristóbal y Nieves","NAME_FA":"سنت کیتس و نویس","NAME_FR":"Saint-Christophe-et-Niévès","NAME_EL":"Άγιος Χριστόφορος και Νέβις","NAME_HE":"סנט קיטס ונוויס","NAME_HI":"सन्त किट्स और नेविस","NAME_HU":"Saint Kitts és Nevis","NAME_ID":"Saint Kitts dan Nevis","NAME_IT":"Saint Kitts e Nevis","NAME_JA":"セントクリストファー・ネイビス","NAME_KO":"세인트키츠 네비스","NAME_NL":"Saint Kitts en Nevis","NAME_PL":"Saint Kitts i Nevis","NAME_PT":"São Cristóvão e Nevis","NAME_RU":"Сент-Китс и Невис","NAME_SV":"Saint Kitts och Nevis","NAME_TR":"Saint Kitts ve Nevis","NAME_UK":"Сент-Кіттс і Невіс","NAME_UR":"سینٹ کیٹز و ناویس","NAME_VI":"Saint Kitts và Nevis","NAME_ZH":"圣基茨和尼维斯","NAME_ZHT":"聖克里斯多福與尼維斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[29.576953125000017,-1.3878906250000114],[29.12939453125,-1.8602539062500085],[29.1064453125,-2.233203125000003],[28.876367187500023,-2.4002929687500085],[29.01435546875001,-2.72021484375],[29.390234375000006,-2.80859375],[29.8681640625,-2.7164062500000057],[29.93017578125,-2.3395507812500114],[30.553613281250023,-2.4000976562500114],[30.828710937500006,-2.3384765625000057],[30.812597656250006,-1.5630859375000057],[30.50996093750001,-1.0672851562500085],[30.1015625,-1.36865234375],[29.576953125000017,-1.3878906250000114]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Rwanda","SOV_A3":"RWA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Rwanda","ADM0_A3":"RWA","GEOU_DIF":0,"GEOUNIT":"Rwanda","GU_A3":"RWA","SU_DIF":0,"SUBUNIT":"Rwanda","SU_A3":"RWA","BRK_DIFF":0,"NAME":"Rwanda","NAME_LONG":"Rwanda","BRK_A3":"RWA","BRK_NAME":"Rwanda","BRK_GROUP":"","ABBREV":"Rwa.","POSTAL":"RW","FORMAL_EN":"Republic of Rwanda","FORMAL_FR":"","NAME_CIAWF":"Rwanda","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Rwanda","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":10,"POP_EST":12626950,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":10354,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"RW","ISO_A2":"RW","ISO_A2_EH":"RW","ISO_A3":"RWA","ISO_A3_EH":"RWA","ISO_N3":"646","ISO_N3_EH":"646","UN_A3":"646","WB_A2":"RW","WB_A3":"RWA","WOE_ID":23424937,"WOE_ID_EH":23424937,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"RWA","ADM0_DIFF":"","ADM0_TLC":"RWA","ADM0_A3_US":"RWA","ADM0_A3_FR":"RWA","ADM0_A3_RU":"RWA","ADM0_A3_ES":"RWA","ADM0_A3_CN":"RWA","ADM0_A3_TW":"RWA","ADM0_A3_IN":"RWA","ADM0_A3_NP":"RWA","ADM0_A3_PK":"RWA","ADM0_A3_DE":"RWA","ADM0_A3_GB":"RWA","ADM0_A3_BR":"RWA","ADM0_A3_IL":"RWA","ADM0_A3_PS":"RWA","ADM0_A3_SA":"RWA","ADM0_A3_EG":"RWA","ADM0_A3_MA":"RWA","ADM0_A3_PT":"RWA","ADM0_A3_AR":"RWA","ADM0_A3_JP":"RWA","ADM0_A3_KO":"RWA","ADM0_A3_VN":"RWA","ADM0_A3_TR":"RWA","ADM0_A3_ID":"RWA","ADM0_A3_PL":"RWA","ADM0_A3_GR":"RWA","ADM0_A3_IT":"RWA","ADM0_A3_NL":"RWA","ADM0_A3_SE":"RWA","ADM0_A3_BD":"RWA","ADM0_A3_UA":"RWA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":30.103894,"LABEL_Y":-1.897196,"NE_ID":1159321219,"WIKIDATAID":"Q1037","NAME_AR":"رواندا","NAME_BN":"রুয়ান্ডা","NAME_DE":"Ruanda","NAME_EN":"Rwanda","NAME_ES":"Ruanda","NAME_FA":"رواندا","NAME_FR":"Rwanda","NAME_EL":"Ρουάντα","NAME_HE":"רואנדה","NAME_HI":"रवाण्डा","NAME_HU":"Ruanda","NAME_ID":"Rwanda","NAME_IT":"Ruanda","NAME_JA":"ルワンダ","NAME_KO":"르완다","NAME_NL":"Rwanda","NAME_PL":"Rwanda","NAME_PT":"Ruanda","NAME_RU":"Руанда","NAME_SV":"Rwanda","NAME_TR":"Ruanda","NAME_UK":"Руанда","NAME_UR":"روانڈا","NAME_VI":"Rwanda","NAME_ZH":"卢旺达","NAME_ZHT":"盧旺達","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-179.79853515625,68.9404296875],[-180,68.738671875],[-180,68.493896484375],[-180,68.24912109375],[-180,68.00439453125],[-180,67.759619140625],[-180,67.51484375],[-180,67.2701171875],[-180,67.025341796875],[-180,66.78056640625],[-180,66.53583984375],[-180,66.291064453125],[-180,66.0462890625],[-180,65.8015625],[-180,65.556787109375],[-180,65.311962890625],[-180,65.067236328125],[-179.352099609375,65.516748046875],[-179.7283203125,65.80380859375],[-178.879345703125,65.936474609375],[-178.310205078125,65.48486328125],[-177.05625,65.613623046875],[-176.09326171875,65.471044921875],[-175.853857421875,65.01083984375],[-175.3951171875,64.802392578125],[-174.318017578125,64.637646484375],[-173.729736328125,64.364501953125],[-173.009130859375,64.2974609375],[-172.9240234375,64.704931640625],[-172.21318359375,65.04814453125],[-172.211572265625,65.4251953125],[-170.66630859375,65.621533203125],[-170.191943359375,66.20126953125],[-171.795556640625,66.93173828125],[-172.640576171875,66.925],[-173.6796875,67.144775390625],[-174.447607421875,67.103125],[-175.34521484375,67.678076171875],[-177.40751953125,68.245166015625],[-178.873876953125,68.7541015625],[-179.79853515625,68.9404296875]]],[[[130.68730468750005,42.302539062499996],[131.15830078125003,42.626025390624996],[131.72207031250002,43.20263671875],[132.30380859375003,42.88330078125],[133.15996093750005,42.69697265625],[133.70937500000002,42.829931640625],[135.1310546875,43.525732421875],[135.87460937500003,44.37353515625],[136.14228515625,44.489111328125],[136.80351562500005,45.171142578125],[137.68544921875002,45.818359375],[138.3369140625,46.543408203125],[138.58681640625002,47.0572265625],[139.00136718750002,47.38330078125],[139.37265625000003,47.887353515624994],[140.17060546875,48.523681640625],[140.51718750000003,49.596142578125],[140.47636718750005,50.54599609375],[140.6876953125,51.232275390625],[141.48525390625002,52.178515624999996],[141.16982421875002,52.368408203125],[141.40205078125,53.183984375],[140.34707031250002,53.81259765625],[139.70742187500002,54.277148437499996],[138.69570312500002,54.32001953125],[138.66074218750003,53.744775390625],[138.2921875,53.592431640625],[137.3283203125,53.53896484375],[137.15537109375003,53.8216796875],[136.68300781250002,53.931298828125],[136.79726562500002,54.62099609375],[135.8515625,54.583935546875],[135.26250000000005,54.943310546875],[136.17519531250002,55.35224609375],[137.69150390625003,56.13935546875],[138.662109375,56.96552734375],[140.00234375000002,57.6875],[140.44687500000003,57.813671875],[140.68496093750002,58.212158203125],[141.75468750000005,58.745263671874994],[142.025390625,58.999658203124994],[143.19218750000005,59.3701171875],[145.55458984375002,59.413525390625],[145.931640625,59.198388671874994],[146.4443359375,59.43046875],[147.51445312500005,59.2685546875],[147.87460937500003,59.388037109375],[149.20498046875002,59.488183593749994],[149.642578125,59.770410156249994],[150.4572265625,59.590722656249994],[151.48574218750002,59.52412109375],[151.99003906250005,59.160058593749994],[152.88222656250002,58.9390625],[153.36113281250005,59.214794921875],[154.0109375,59.075537109375],[155.16669921875,59.36015625],[154.58251953125,59.540087890625],[154.29306640625003,59.833349609375],[154.97080078125003,60.37666015625],[155.85332031250005,60.7771484375],[156.62968750000005,61.2724609375],[156.68027343750003,61.480615234374994],[157.46933593750003,61.79892578125],[158.07011718750005,61.75361328125],[159.07666015625,61.922265624999994],[159.55234375000003,61.719482421875],[160.3173828125,61.793359374999994],[159.88310546875005,61.291796875],[160.7666015625,60.753320312499994],[162.392578125,61.662109375],[163.00927734375,61.79150390625],[163.33173828125,62.550927734374994],[164.25566406250005,62.69658203125],[164.00546875000003,61.343798828125],[163.7099609375,60.916796875],[162.97314453125,60.78291015625],[162.00361328125,60.420166015625],[161.75351562500003,60.152294921875],[159.84736328125,59.1271484375],[159.03691406250005,58.42392578125],[158.21044921875,58.025292968749994],[157.450390625,57.799267578125],[156.72841796875002,57.15224609375],[155.98251953125003,56.69521484375],[155.5548828125,55.348486328125],[155.6203125,54.864550781249996],[156.098828125,53.006494140625],[156.36474609375,52.509375],[156.50039062500002,51.47509765625],[156.74775390625,50.969287109374996],[158.103515625,51.809619140624996],[158.46347656250003,52.304980468749996],[158.60878906250002,52.8736328125],[159.89765625,53.38076171875],[159.84375,53.783642578125],[160.0744140625,54.18916015625],[160.77265625,54.541357421875],[161.72568359375003,54.532958984375],[162.10556640625003,54.7521484375],[161.72939453125002,55.3580078125],[162.0849609375,56.089648437499996],[162.52822265625002,56.260693359375],[163.33554687500003,56.23251953125],[163.25654296875,56.688037109374996],[162.80263671875002,56.811474609375],[162.779296875,57.3576171875],[163.2138671875,57.686816406249996],[162.4669921875,57.7662109375],[161.96005859375003,58.076904296875],[162.1416015625,58.447412109374994],[163.27285156250002,59.302587890625],[163.40996093750005,59.8349609375],[163.78007812500005,60.04111328125],[165.08457031250003,60.098583984375],[166.35214843750003,60.484814453125],[166.9640625,60.307031249999994],[168.13750000000005,60.57392578125],[169.2267578125,60.595947265625],[169.9826171875,60.06708984375],[170.60820312500005,60.434912109375],[172.3927734375,61.061767578125],[172.85654296875003,61.469189453125],[173.62343750000002,61.716064453125],[174.51435546875,61.823632812499994],[175.26787109375005,62.102392578125],[177.35126953125,62.587451171875],[179.12070312500003,62.320361328125],[179.5705078125,62.6875],[179.33232421875005,63.190185546875],[178.70644531250002,63.521533203125],[178.65029296875002,63.965283203125],[177.43291015625005,64.444482421875],[177.46718750000002,64.73681640625],[178.51953125,64.602978515625],[180,65.067236328125],[180,68.983447265625],[178.84833984375,69.38720703125],[176.92441406250003,69.64599609375],[176.10751953125003,69.860302734375],[173.27744140625003,69.823828125],[172.5595703125,69.968359375],[170.48681640625,70.107568359375],[170.5822265625,69.583349609375],[170.99541015625005,69.0453125],[170.53759765625,68.825390625],[169.60986328125,68.78603515625],[169.31064453125003,69.079541015625],[168.30302734375005,69.271484375],[167.628125,69.74033203125],[166.8203125,69.499560546875],[164.51328125000003,69.609130859375],[164.15957031250002,69.719287109375],[162.37568359375,69.649072265625],[161.53691406250005,69.379541015625],[159.83251953125,69.7849609375],[160.00644531250003,70.30966796875],[159.35068359375003,70.79072265625],[158.03701171875002,71.0392578125],[155.89521484375,71.0955078125],[153.794140625,70.87998046875],[152.5087890625,70.83447265625],[151.58242187500002,71.286962890625],[150.5998046875,71.5201171875],[149.50156250000003,72.164306640625],[148.40205078125,72.311962890625],[146.59414062500002,72.30244140625],[145.48574218750002,72.54208984375],[142.06142578125002,72.72080078125],[139.60117187500003,72.49609375],[139.69511718750005,71.700439453125],[138.11845703125005,71.566162109375],[137.3154296875,71.359423828125],[135.884765625,71.63056640625],[134.10283203125005,71.378955078125],[132.56230468750005,71.8953125],[131.56201171875,70.901025390625],[131.157421875,70.7421875],[129.7619140625,71.11953125],[128.35878906250002,72.088330078125],[129.41171875000003,72.315478515625],[128.888671875,73.190234375],[127.74033203125003,73.48154296875],[125.61708984375002,73.52060546875],[124.38808593750002,73.754833984375],[123.30507812500002,73.53291015625],[123.62226562500001,73.19326171875],[123.16035156250001,72.9548828125],[119.75039062500002,72.9791015625],[118.43027343750003,73.246533203125],[118.4501953125,73.589794921875],[115.33769531249999,73.702587890625],[114.060546875,73.58466796875],[112.14726562499999,73.708935546875],[110.26142578125001,74.017431640625],[109.85527343749999,73.4724609375],[107.75039062500002,73.17314453125],[106.47792968750002,73.139404296875],[107.27109375000003,73.621044921875],[108.19951171874999,73.694091796875],[109.84033203125,74.32197265625],[111.86826171875003,74.7400390625],[113.61357421874999,75.29296875],[113.87099609375002,75.856005859375],[112.61953125000002,76.383544921875],[111.11484375000003,76.723046875],[108.02792968750003,76.71845703125],[107.42978515625003,76.9265625],[104.91191406249999,77.17470703125],[105.89453125,77.4888671875],[104.01455078125002,77.730419921875],[103.13144531250003,77.62646484375],[100.98994140625001,76.990478515625],[100.32236328125003,76.479150390625],[96.87919921874999,75.9310546875],[94.57558593750002,76.1517578125],[93.5498046875,75.8541015625],[90.18496093750002,75.591064453125],[87.67138671875,75.12958984375],[86.65146484375003,74.682421875],[86.59140625000003,73.894287109375],[83.54472656249999,73.66650390625],[80.58320312500001,73.56845703125],[80.50966796875002,73.086083984375],[80.82705078125002,72.48828125],[82.18359375,72.237548828125],[82.98613281249999,71.748681640625],[81.51123046875,71.746142578125],[80.76249999999999,72.08916015625],[79.42207031250001,72.38076171875],[78.48261718750001,72.394970703125],[76.03242187500001,71.910400390625],[75.74140625000001,72.296240234375],[73.67177734375002,71.845068359375],[73.08623046875002,71.444921875],[74.31093750000002,70.65361328125],[73.56015625,69.7072265625],[73.77568359375002,69.1982421875],[74.81484375000002,69.090576171875],[76.0009765625,69.23505859375],[77.65068359374999,68.90302734375],[77.23847656250001,68.469580078125],[76.45917968750001,68.978271484375],[74.57958984375,68.751220703125],[74.39140625000002,68.42060546875],[74.76953125,67.766357421875],[74.07451171875002,67.414111328125],[73.79208984375,66.9953125],[72.41738281250002,66.560791015625],[71.9169921875,66.246728515625],[70.339453125,66.3423828125],[69.1943359375,66.578662109375],[69.87714843750001,66.845458984375],[70.939453125,66.54814453125],[71.55117187500002,66.76044921875],[72.5943359375,67.586962890625],[73.15214843750002,67.8650390625],[73.54804687500001,68.57451171875],[72.52734375,69.080517578125],[72.52968750000002,70.172509765625],[72.73164062500001,70.8228515625],[71.91201171875002,71.54794921875],[72.62441406250002,72.079443359375],[72.812109375,72.69140625],[71.50019531250001,72.913671875],[69.6451171875,72.89755859375],[69.0390625,72.669921875],[68.26923828125001,71.6828125],[66.917578125,71.282373046875],[66.66611328125,70.9005859375],[67.284765625,70.738720703125],[66.9263671875,70.0142578125],[67.064453125,69.693701171875],[68.005859375,69.480029296875],[68.54277343750002,68.96708984375],[69.14052734375002,68.950634765625],[68.50419921875002,68.3484375],[63.361425781250006,69.67529296875],[61.01591796875002,69.85146484375],[60.17060546875001,69.59091796875],[60.93359375,68.986767578125],[59.89736328125002,68.421923828125],[58.9189453125,69.00380859375],[57.12685546875002,68.55400390625],[56.04365234375001,68.648876953125],[54.56123046875001,68.273046875],[53.967871093750006,68.22734375],[53.80195312500001,68.9958984375],[52.55009765625002,68.592431640625],[50.8388671875,68.349951171875],[48.8779296875,67.73134765625],[47.87470703125001,67.5841796875],[47.709082031250006,67.04501953125],[46.69082031250002,66.825537109375],[45.98603515625001,66.853125],[44.939453125,67.47744140625],[45.52871093750002,67.757568359375],[46.6904296875,67.848828125],[45.89199218750002,68.4796875],[44.04804687500001,68.548828125],[44.22539062500002,67.99560546875],[43.78242187500001,67.2544921875],[44.29179687500002,67.099658203125],[44.48867187500002,66.67177734375],[44.09716796875,66.23505859375],[42.210546875000006,66.519677734375],[41.47578125000001,66.1234375],[39.816503906250006,65.59794921875],[40.28125,64.998095703125],[39.75800781250001,64.57705078125],[38.009375000000006,64.878759765625],[36.8828125,65.17236328125],[36.52822265625002,64.84736328125],[37.183691406250006,64.40849609375],[37.953710937500006,64.3201171875],[38.07080078125,64.025830078125],[37.44218750000002,63.813378906249994],[36.36494140625001,64.00283203125],[35.647070312500006,64.3783203125],[34.86953125000002,64.560009765625],[34.80351562500002,64.985986328125],[34.40644531250001,65.395751953125],[34.78632812500001,65.86455078125],[33.56669921875002,66.32099609375],[32.46367187500002,66.91630859375],[34.82460937500002,66.6111328125],[35.51347656250002,66.39580078125],[38.397558593750006,66.064453125],[39.2890625,66.13203125],[40.521582031250006,66.446630859375],[41.18896484375,66.826171875],[40.966406250000006,67.7134765625],[40.38066406250002,67.831884765625],[35.85791015625,69.191748046875],[33.68437500000002,69.31025390625],[32.37773437500002,69.4791015625],[32.94169921875002,69.75185546875],[31.98457031250001,69.953662109375],[30.869726562500006,69.783447265625],[28.9658203125,69.02197265625],[28.470703125,68.48837890625],[29.343847656250006,68.061865234375],[29.941210937500017,67.5474609375],[29.087011718750006,66.970947265625],[29.903417968750006,66.091064453125],[29.60419921875001,64.968408203125],[30.072851562500006,64.7650390625],[30.10810546875001,64.36611328125],[30.50390625,64.02060546875],[30.05537109375001,63.689013671875],[31.18085937500001,63.20830078125],[31.533984375000017,62.885400390624994],[31.28564453125,62.567822265625],[29.69013671875001,61.54609375],[27.797656250000017,60.5361328125],[28.65058593750001,60.610986328124994],[29.069140625000017,60.191455078125],[28.947265625,59.828759765624994],[28.013964843750017,59.724755859374994],[28.012500000000017,59.484277343749994],[27.464453125000006,58.84130859375],[27.48779296875,58.270068359375],[27.752832031250023,57.841015625],[27.351953125000023,57.528124999999996],[27.796875,57.316943359374996],[27.806054687500023,56.86708984375],[28.14794921875,56.142919921875],[29.482226562500017,55.6845703125],[30.23359375000001,55.84521484375],[30.906835937500006,55.57001953125],[31.12128906250001,54.648486328124996],[31.403613281250017,54.195947265625],[31.7919921875,54.055908203125],[32.70429687500001,53.336328125],[32.14199218750002,53.091162109375],[31.417871093750023,53.196044921875],[31.57734375000001,52.312304687499996],[31.76337890625001,52.10107421875],[32.507910156250006,52.308544921875],[33.73525390625002,52.344775390624996],[34.39785156250002,51.780419921875],[34.28066406250002,51.311669921874994],[35.31191406250002,51.043896484375],[35.41162109375,50.539697265624994],[36.61943359375002,50.209228515625],[37.4228515625,50.411474609375],[38.046875,49.92001953125],[38.25859375000002,50.05234375],[39.1748046875,49.85595703125],[39.78056640625002,49.572021484375],[40.07001953125001,49.20029296875],[39.6865234375,49.00791015625],[39.961035156250006,48.237939453124994],[39.735937500000006,47.84482421875],[38.90029296875002,47.855126953124994],[38.28740234375002,47.5591796875],[38.21435546875,47.091455078124994],[39.29345703125,47.105761718749996],[37.96796875000001,46.618017578125],[38.18359375,46.09482421875],[37.93310546875,46.001708984375],[37.64716796875001,45.377197265625],[36.94121093750002,45.289697265624994],[37.41132812500001,44.7353515625],[37.85146484375002,44.698828125],[38.181250000000006,44.419677734375],[38.71728515625,44.2880859375],[39.97832031250002,43.419824218749994],[40.648046875000006,43.53388671875],[41.58056640625,43.21923828125],[42.419042968750006,43.22421875],[43.78261718750002,42.747021484375],[43.95742187500002,42.566552734374994],[44.87099609375002,42.756396484374996],[45.7275390625,42.475048828125],[45.63857421875002,42.205078125],[46.42988281250001,41.890966796875],[46.74931640625002,41.81259765625],[47.26113281250002,41.315087890624994],[47.86113281250002,41.212744140625],[48.572851562500006,41.844482421875],[47.46318359375002,43.035058593749994],[47.50898437500001,43.509716796875],[47.22988281250002,44.1923828125],[46.753027343750006,44.420654296875],[47.52421875000002,45.601708984374994],[48.1591796875,45.73701171875],[49.23222656250002,46.337158203125],[48.61015625000002,46.566455078124996],[48.95937500000002,46.774609375],[48.109960937500006,47.745410156249996],[47.09326171875,47.947705078125],[47.00429687500002,48.284472656249996],[46.66093750000002,48.412255859374994],[46.70263671875,48.805566406249994],[47.014257812500006,49.09833984375],[46.80205078125002,49.367089843749994],[47.32646484375002,50.27353515625],[47.70576171875001,50.377978515624996],[48.43427734375001,49.828515624999994],[48.84326171875,50.013134765625],[48.80839843750002,50.601318359375],[49.498046875,51.08359375],[50.24687500000002,51.289501953125],[50.7939453125,51.72919921875],[51.60908203125001,51.483984375],[52.3310546875,51.681298828125],[52.57119140625002,51.481640625],[53.33808593750001,51.482373046875],[54.04150390625,51.115185546875],[54.421484375000006,50.780322265624996],[54.727148437500006,50.998095703124996],[55.54228515625002,50.601806640625],[55.79765625000002,50.60205078125],[56.49140625000001,51.01953125],[57.01171875,51.065185546875],[57.44218750000002,50.8888671875],[57.8388671875,51.091650390625],[58.35917968750002,51.063818359375],[58.88369140625002,50.69443359375],[59.81240234375002,50.58203125],[59.955175781250006,50.799267578125],[60.63798828125002,50.663720703124994],[61.38945312500002,50.86103515625],[61.585058593750006,51.2296875],[61.36308593750002,51.44189453125],[60.46474609375002,51.651171874999996],[60.065527343750006,51.97646484375],[60.937597656250006,52.280566406249996],[60.802343750000006,52.7447265625],[61.047460937500006,52.972460937499996],[61.974218750000006,52.94375],[62.0146484375,53.107861328125],[61.19921875,53.287158203124996],[60.9794921875,53.621728515625],[61.33369140625001,54.049267578125],[61.9287109375,53.946484375],[63.07392578125001,54.105224609375],[64.46123046875002,54.3841796875],[65.1578125,54.364404296875],[65.47695312500002,54.623291015625],[66.22265625,54.6673828125],[68.073828125,54.9595703125],[68.20625000000001,55.160937499999996],[68.97724609375001,55.389599609375],[70.18242187500002,55.162451171875],[70.73808593750002,55.30517578125],[71.185546875,54.59931640625],[71.09316406250002,54.212207031249996],[72.9140625,54.10732421875],[73.3994140625,53.811474609375],[73.2857421875,53.598388671875],[74.45195312500002,53.647265624999996],[76.2666015625,54.311962890625],[76.57568359375,53.942529296875],[77.70439453124999,53.379150390625],[78.47548828125002,52.638427734375],[79.46884765625003,51.493115234375],[79.98623046875002,50.774560546874994],[80.87734375000002,51.2814453125],[81.46591796875003,50.73984375],[82.49394531249999,50.727587890624996],[83.35732421875002,50.994580078125],[83.94511718749999,50.774658203125],[84.2578125,50.288232421874994],[84.98945312500001,50.061425781249994],[85.21015625000001,49.664843749999996],[86.18085937500001,49.499316406249996],[86.6142578125,49.609716796875],[87.32285156250003,49.085791015625],[87.81425781249999,49.1623046875],[88.19257812500001,49.451708984374996],[88.83164062500003,49.4484375],[89.65410156249999,49.71748046875],[89.64384765624999,49.90302734375],[91.80429687500003,50.693603515625],[94.25107421875003,50.556396484375],[94.61474609375,50.023730468749996],[95.52265625000001,49.91123046875],[95.85195312500002,50.012939453125],[96.98574218750002,49.8828125],[97.20859375000003,49.730810546875],[98.10341796875002,50.07783203125],[98.27949218750001,50.533251953124996],[97.82529296875003,50.985253906249994],[97.94687500000003,51.348437499999996],[98.8486328125,52.070068359375],[99.92167968749999,51.755517578125],[100.53623046875003,51.7134765625],[101.38125000000002,51.45263671875],[102.11152343750001,51.353466796875],[102.28837890624999,50.585107421874994],[102.68330078125001,50.387158203125],[103.63291015625003,50.138574218749994],[105.38359374999999,50.47373046875],[106.21787109375003,50.304589843749994],[106.71113281250001,50.31259765625],[107.23330078125002,49.989404296874994],[107.94785156250003,49.924707031249994],[108.03378906250003,49.593994140625],[108.61367187500002,49.322802734374996],[109.23671875000002,49.334912109375],[110.19990234375001,49.17041015625],[110.82792968749999,49.166162109374994],[111.33662109375001,49.355859374999994],[113.05556640625002,49.616259765624996],[113.16416015625003,49.797167968749996],[114.29707031250001,50.2744140625],[114.7431640625,50.233691406249996],[115.27451171875003,49.948876953124994],[116.13457031249999,50.010791015624996],[116.68330078125001,49.823779296874996],[117.87343750000002,49.513476562499996],[118.45156250000002,49.844482421875],[119.25986328125003,50.06640625],[119.19189453125,50.379833984375],[120.06689453125,51.60068359375],[120.74980468749999,52.096533203125],[120.65615234375002,52.566650390625],[120.09453124999999,52.78720703125],[120.7041015625,53.171826171875],[122.33779296875002,53.485009765625],[123.60781250000002,53.546533203125],[124.81230468749999,53.133837890624996],[125.64902343750003,53.042285156249996],[126.31289062500002,52.399755859375],[126.9248046875,51.100146484374996],[127.59023437500002,50.208984375],[127.50244140625,49.873437499999994],[127.99960937500003,49.568603515625],[128.70400390625002,49.600146484374996],[129.1201171875,49.362060546875],[129.49814453125003,49.388818359374994],[130.80429687500003,48.34150390625],[130.712109375,48.12763671875],[131.00273437500005,47.691455078124996],[132.56191406250002,47.768505859375],[133.14404296875,48.1056640625],[133.46835937500003,48.09716796875],[134.29335937500002,48.373437499999994],[134.56357421875003,48.321728515625],[134.75234375000002,47.7154296875],[134.16767578125,47.302197265625],[133.861328125,46.24775390625],[133.18603515625,45.49482421875],[132.93603515625,45.029931640624994],[131.9775390625,45.243994140625],[131.08232421875005,44.910009765625],[131.25527343750002,44.071582031249996],[131.26181640625003,43.433056640625],[131.0685546875,42.902246093749994],[130.57724609375003,42.81162109375],[130.52695312500003,42.535400390625],[130.68730468750005,42.302539062499996]]],[[[67.76533203125001,76.23759765625],[68.89980468750002,76.57294921875],[68.48574218750002,76.93369140625],[67.53496093750002,77.007763671875],[65.862890625,76.613330078125],[62.97148437500002,76.236669921875],[58.88125000000002,75.85478515625],[57.087500000000006,75.383837890625],[54.642675781250006,73.9595703125],[53.76289062500001,73.766162109375],[55.0068359375,73.453857421875],[56.9638671875,73.366552734375],[58.44140625,74.128857421875],[58.53466796875,74.49892578125],[60.22246093750002,74.79658203125],[61.35595703125,75.31484375],[66.28242187500001,75.98369140625],[67.76533203125001,76.23759765625]]],[[[55.31982421875,73.30830078125],[53.75322265625002,73.29326171875],[52.6220703125,72.3009765625],[51.58251953125,72.07119140625],[51.812597656250006,71.49130859375],[53.363867187500006,71.541650390625],[53.72236328125001,70.814453125],[54.601171875000006,70.680078125],[57.14589843750002,70.589111328125],[55.2978515625,71.9353515625],[55.35595703125,72.465087890625],[56.42958984375002,73.201171875],[55.31982421875,73.30830078125]]],[[[96.52656250000001,81.0755859375],[95.80068359375002,81.28046875],[93.06513671875001,80.9884765625],[93.26249999999999,80.791259765625],[91.52382812500002,80.358544921875],[93.87236328124999,80.010107421875],[97.17519531250002,80.241015625],[97.83183593749999,80.798291015625],[96.52656250000001,81.0755859375]]],[[[97.67451171875001,80.158251953125],[94.9873046875,80.096826171875],[93.07080078125,79.4953125],[94.65234375,79.127490234375],[97.55546874999999,78.8265625],[99.43955078125003,78.834228515625],[100.06123046875001,79.777099609375],[97.67451171875001,80.158251953125]]],[[[102.884765625,79.253955078125],[101.59062499999999,79.350439453125],[100.28398437499999,78.67919921875],[101.2041015625,78.191943359375],[103.71933593750003,78.258251953125],[105.31259765625003,78.49990234375],[105.14599609375,78.81884765625],[102.884765625,79.253955078125]]],[[[140.04873046875002,75.828955078125],[138.81396484375,76.19970703125],[137.501171875,75.90966796875],[137.00625000000002,75.235009765625],[138.09228515625,74.7974609375],[139.09912109375,74.65654296875],[141.9873046875,74.991259765625],[144.0197265625,75.044677734375],[145.25527343750002,75.585595703125],[143.68583984375005,75.863671875],[142.46035156250002,75.90361328125],[140.94414062500005,75.70048828125],[140.04873046875002,75.828955078125]]],[[[146.79521484375005,75.370751953125],[146.14853515625003,75.198291015625],[148.09238281250003,74.82568359375],[149.596875,74.772607421875],[150.64628906250005,74.944580078125],[150.10390625000002,75.21923828125],[146.79521484375005,75.370751953125]]],[[[178.8615234375,70.826416015625],[180,70.993017578125],[180,71.537744140625],[178.89111328125,71.231103515625],[178.8615234375,70.826416015625]]],[[[142.76103515625005,54.3939453125],[142.52617187500005,53.4474609375],[141.82353515625005,53.339501953125],[141.72236328125,51.736328125],[142.20673828125,51.222558593749994],[142.07109375000005,50.514990234375],[142.14228515625,49.569140624999996],[141.86630859375003,48.75009765625],[142.18173828125003,48.01337890625],[141.9640625,47.587451171874996],[142.03867187500003,47.140283203124994],[141.83037109375005,46.451074218749994],[142.20859375000003,46.0888671875],[142.57802734375002,46.70078125],[143.28232421875003,46.558984374999994],[143.00556640625,47.222705078124996],[142.55693359375005,47.737890625],[142.57421875,48.072167968749994],[143.10498046875,49.198828125],[144.27207031250003,49.311328124999996],[143.81601562500003,50.282617187499994],[143.45546875000002,51.471484374999996],[143.15556640625005,52.083740234375],[143.32363281250002,52.613574218749996],[143.2236328125,53.296044921875],[142.91796875,53.794238281249996],[142.76103515625005,54.3939453125]]],[[[-178.87646484375,71.57705078125],[-179.999951171875,71.537744140625],[-179.999951171875,70.993017578125],[-179.506689453125,70.9234375],[-177.82177734375,71.067578125],[-177.532177734375,71.2630859375],[-178.87646484375,71.57705078125]]],[[[50.265234375000006,69.185595703125],[49.225195312500006,69.51123046875],[48.63134765625,69.43603515625],[48.27880859375,69.04033203125],[48.6669921875,68.733154296875],[49.62626953125002,68.859716796875],[50.265234375000006,69.185595703125]]],[[[62.16777343750002,80.834765625],[59.59228515625,80.81650390625],[59.30439453125001,80.521533203125],[61.05126953125,80.418603515625],[62.16777343750002,80.834765625]]],[[[54.71894531250001,81.115966796875],[54.06660156250001,80.813623046875],[55.712500000000006,80.6373046875],[57.69414062500002,80.79228515625],[54.71894531250001,81.115966796875]]],[[[142.18486328125005,73.8958984375],[141.08476562500005,73.865869140625],[140.66279296875,73.452001953125],[143.19326171875002,73.220751953125],[143.34375,73.56875],[142.18486328125005,73.8958984375]]],[[[169.20078125000003,69.58046875],[169.37480468750005,69.8826171875],[168.35791015625,70.015673828125],[167.78886718750005,69.836865234375],[169.20078125000003,69.58046875]]],[[[163.63515625000002,58.603369140625],[164.61572265625,58.885595703125],[163.7609375,59.015039062499994],[163.63515625000002,58.603369140625]]],[[[148.59951171875002,45.317626953125],[147.76943359375002,45.190722656249996],[147.91376953125,44.990380859374994],[148.59951171875002,45.317626953125]]],[[[113.38720703125,74.400439453125],[112.08447265625,74.548974609375],[111.64296875000002,74.27294921875],[112.78242187500001,74.095068359375],[113.38720703125,74.400439453125]]],[[[60.45048828125002,69.93486328125],[59.00527343750002,70.465185546875],[58.47304687500002,70.266845703125],[59.578222656250006,69.738623046875],[60.45048828125002,69.93486328125]]],[[[20.957812500000017,55.27890625],[20.899804687500023,55.286669921874996],[20.520312500000017,54.994873046875],[19.974511718750023,54.921191406249996],[19.604394531250023,54.4591796875],[22.766210937500006,54.356787109375],[22.83125000000001,54.8384765625],[21.235742187500023,55.264111328125],[20.957812500000017,55.27890625]]],[[[33.59414062500008,46.09624023437499],[33.6648437500001,45.94707031249993],[32.508007812500125,45.403808593750114],[33.555175781250114,45.097656250000114],[33.45068359375,44.553662109375125],[33.9099609375001,44.38759765625002],[34.716894531250034,44.80712890625006],[35.087695312500045,44.80263671875002],[35.472558593750136,45.09848632812509],[36.39335937500016,45.06538085937507],[36.170507812500034,45.45307617187501],[35.37392578125008,45.353613281250034],[35.00167423940718,45.73338320565324],[34.686878348314735,45.97695049175155],[33.65996518914096,46.21957283155638],[33.59414062500008,46.09624023437499]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":2,"SOVEREIGNT":"Russia","SOV_A3":"RUS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Russia","ADM0_A3":"RUS","GEOU_DIF":0,"GEOUNIT":"Russia","GU_A3":"RUS","SU_DIF":0,"SUBUNIT":"Russia","SU_A3":"RUS","BRK_DIFF":0,"NAME":"Russia","NAME_LONG":"Russian Federation","BRK_A3":"RUS","BRK_NAME":"Russia","BRK_GROUP":"","ABBREV":"Rus.","POSTAL":"RUS","FORMAL_EN":"Russian Federation","FORMAL_FR":"","NAME_CIAWF":"Russia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Russian Federation","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":5,"MAPCOLOR9":7,"MAPCOLOR13":7,"POP_EST":144373535,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":1699876,"GDP_YEAR":2019,"ECONOMY":"3. Emerging region: BRIC","INCOME_GRP":"3. Upper middle income","FIPS_10":"RS","ISO_A2":"RU","ISO_A2_EH":"RU","ISO_A3":"RUS","ISO_A3_EH":"RUS","ISO_N3":"643","ISO_N3_EH":"643","UN_A3":"643","WB_A2":"RU","WB_A3":"RUS","WOE_ID":23424936,"WOE_ID_EH":23424936,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"RUS","ADM0_DIFF":"","ADM0_TLC":"RUS","ADM0_A3_US":"RUS","ADM0_A3_FR":"RUS","ADM0_A3_RU":"RUS","ADM0_A3_ES":"RUS","ADM0_A3_CN":"RUS","ADM0_A3_TW":"RUS","ADM0_A3_IN":"RUS","ADM0_A3_NP":"RUS","ADM0_A3_PK":"RUS","ADM0_A3_DE":"RUS","ADM0_A3_GB":"RUS","ADM0_A3_BR":"RUS","ADM0_A3_IL":"RUS","ADM0_A3_PS":"RUS","ADM0_A3_SA":"RUS","ADM0_A3_EG":"RUS","ADM0_A3_MA":"RUS","ADM0_A3_PT":"RUS","ADM0_A3_AR":"RUS","ADM0_A3_JP":"RUS","ADM0_A3_KO":"RUS","ADM0_A3_VN":"RUS","ADM0_A3_TR":"RUS","ADM0_A3_ID":"RUS","ADM0_A3_PL":"RUS","ADM0_A3_GR":"RUS","ADM0_A3_IT":"RUS","ADM0_A3_NL":"RUS","ADM0_A3_SE":"RUS","ADM0_A3_BD":"RUS","ADM0_A3_UA":"RUS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":18,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":5.2,"LABEL_X":44.686469,"LABEL_Y":58.249357,"NE_ID":1159321201,"WIKIDATAID":"Q159","NAME_AR":"روسيا","NAME_BN":"রাশিয়া","NAME_DE":"Russland","NAME_EN":"Russia","NAME_ES":"Rusia","NAME_FA":"روسیه","NAME_FR":"Russie","NAME_EL":"Ρωσία","NAME_HE":"רוסיה","NAME_HI":"रूस","NAME_HU":"Oroszország","NAME_ID":"Rusia","NAME_IT":"Russia","NAME_JA":"ロシア","NAME_KO":"러시아","NAME_NL":"Rusland","NAME_PL":"Rosja","NAME_PT":"Rússia","NAME_RU":"Россия","NAME_SV":"Ryssland","NAME_TR":"Rusya","NAME_UK":"Росія","NAME_UR":"روس","NAME_VI":"Nga","NAME_ZH":"俄罗斯","NAME_ZHT":"俄羅斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[28.212500000000006,45.450439453125],[28.099707031250006,45.972607421875],[28.24433593750001,46.45126953125],[28.07177734375,46.978417968749994],[27.3369140625,47.63974609375],[26.980761718750017,48.155029296875],[26.618945312500017,48.25986328125],[26.162695312500006,47.992529296875],[24.893359375000017,47.7177734375],[23.20263671875,48.084521484374996],[22.87666015625001,47.947265625],[22.290625000000006,47.727832031249996],[21.151953125000006,46.304345703124994],[20.241796875000006,46.10859375],[20.775000000000006,45.749804687499996],[20.774218750000017,45.484423828124996],[21.491796875000006,45.122265625],[21.384375000000006,44.870068359375],[22.705078125,44.23779296875],[23.224609375,43.873876953125],[25.4970703125,43.670800781249994],[26.2158203125,44.007275390625],[27.0869140625,44.167382812499994],[28.585351562500023,43.742236328124996],[28.645410156250023,44.295654296875],[29.048242187500023,44.757568359375],[29.557519531250023,44.843408203124994],[29.705859375000017,45.259912109374994],[29.223535156250023,45.4029296875],[28.7607421875,45.234130859375],[28.212500000000006,45.450439453125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Romania","SOV_A3":"ROU","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Romania","ADM0_A3":"ROU","GEOU_DIF":0,"GEOUNIT":"Romania","GU_A3":"ROU","SU_DIF":0,"SUBUNIT":"Romania","SU_A3":"ROU","BRK_DIFF":0,"NAME":"Romania","NAME_LONG":"Romania","BRK_A3":"ROU","BRK_NAME":"Romania","BRK_GROUP":"","ABBREV":"Rom.","POSTAL":"RO","FORMAL_EN":"Romania","FORMAL_FR":"","NAME_CIAWF":"Romania","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Romania","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":3,"MAPCOLOR13":13,"POP_EST":19356544,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":250077,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"3. Upper middle income","FIPS_10":"RO","ISO_A2":"RO","ISO_A2_EH":"RO","ISO_A3":"ROU","ISO_A3_EH":"ROU","ISO_N3":"642","ISO_N3_EH":"642","UN_A3":"642","WB_A2":"RO","WB_A3":"ROM","WOE_ID":23424933,"WOE_ID_EH":23424933,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ROU","ADM0_DIFF":"","ADM0_TLC":"ROU","ADM0_A3_US":"ROU","ADM0_A3_FR":"ROU","ADM0_A3_RU":"ROU","ADM0_A3_ES":"ROU","ADM0_A3_CN":"ROU","ADM0_A3_TW":"ROU","ADM0_A3_IN":"ROU","ADM0_A3_NP":"ROU","ADM0_A3_PK":"ROU","ADM0_A3_DE":"ROU","ADM0_A3_GB":"ROU","ADM0_A3_BR":"ROU","ADM0_A3_IL":"ROU","ADM0_A3_PS":"ROU","ADM0_A3_SA":"ROU","ADM0_A3_EG":"ROU","ADM0_A3_MA":"ROU","ADM0_A3_PT":"ROU","ADM0_A3_AR":"ROU","ADM0_A3_JP":"ROU","ADM0_A3_KO":"ROU","ADM0_A3_VN":"ROU","ADM0_A3_TR":"ROU","ADM0_A3_ID":"ROU","ADM0_A3_PL":"ROU","ADM0_A3_GR":"ROU","ADM0_A3_IT":"ROU","ADM0_A3_NL":"ROU","ADM0_A3_SE":"ROU","ADM0_A3_BD":"ROU","ADM0_A3_UA":"ROU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":24.972624,"LABEL_Y":45.733237,"NE_ID":1159321199,"WIKIDATAID":"Q218","NAME_AR":"رومانيا","NAME_BN":"রোমানিয়া","NAME_DE":"Rumänien","NAME_EN":"Romania","NAME_ES":"Rumania","NAME_FA":"رومانی","NAME_FR":"Roumanie","NAME_EL":"Ρουμανία","NAME_HE":"רומניה","NAME_HI":"रोमानिया","NAME_HU":"Románia","NAME_ID":"Rumania","NAME_IT":"Romania","NAME_JA":"ルーマニア","NAME_KO":"루마니아","NAME_NL":"Roemenië","NAME_PL":"Rumunia","NAME_PT":"Roménia","NAME_RU":"Румыния","NAME_SV":"Rumänien","NAME_TR":"Romanya","NAME_UK":"Румунія","NAME_UR":"رومانیہ","NAME_VI":"Romania","NAME_ZH":"罗马尼亚","NAME_ZHT":"羅馬尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[51.26796875000002,24.607226562500003],[51.60195312500002,25.14794921875],[51.4853515625,25.524707031250003],[51.543066406250006,25.902392578125003],[51.262304687500006,26.153271484374997],[51.00312500000001,25.9814453125],[50.76289062500001,25.444726562499994],[50.80439453125001,24.789257812499997],[51.26796875000002,24.607226562500003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Qatar","SOV_A3":"QAT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Qatar","ADM0_A3":"QAT","GEOU_DIF":0,"GEOUNIT":"Qatar","GU_A3":"QAT","SU_DIF":0,"SUBUNIT":"Qatar","SU_A3":"QAT","BRK_DIFF":0,"NAME":"Qatar","NAME_LONG":"Qatar","BRK_A3":"QAT","BRK_NAME":"Qatar","BRK_GROUP":"","ABBREV":"Qatar","POSTAL":"QA","FORMAL_EN":"State of Qatar","FORMAL_FR":"","NAME_CIAWF":"Qatar","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Qatar","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":4,"POP_EST":2832067,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":175837,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"QA","ISO_A2":"QA","ISO_A2_EH":"QA","ISO_A3":"QAT","ISO_A3_EH":"QAT","ISO_N3":"634","ISO_N3_EH":"634","UN_A3":"634","WB_A2":"QA","WB_A3":"QAT","WOE_ID":23424930,"WOE_ID_EH":23424930,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"QAT","ADM0_DIFF":"","ADM0_TLC":"QAT","ADM0_A3_US":"QAT","ADM0_A3_FR":"QAT","ADM0_A3_RU":"QAT","ADM0_A3_ES":"QAT","ADM0_A3_CN":"QAT","ADM0_A3_TW":"QAT","ADM0_A3_IN":"QAT","ADM0_A3_NP":"QAT","ADM0_A3_PK":"QAT","ADM0_A3_DE":"QAT","ADM0_A3_GB":"QAT","ADM0_A3_BR":"QAT","ADM0_A3_IL":"QAT","ADM0_A3_PS":"QAT","ADM0_A3_SA":"QAT","ADM0_A3_EG":"QAT","ADM0_A3_MA":"QAT","ADM0_A3_PT":"QAT","ADM0_A3_AR":"QAT","ADM0_A3_JP":"QAT","ADM0_A3_KO":"QAT","ADM0_A3_VN":"QAT","ADM0_A3_TR":"QAT","ADM0_A3_ID":"QAT","ADM0_A3_PL":"QAT","ADM0_A3_GR":"QAT","ADM0_A3_IT":"QAT","ADM0_A3_NL":"QAT","ADM0_A3_SE":"QAT","ADM0_A3_BD":"QAT","ADM0_A3_UA":"QAT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":51.143509,"LABEL_Y":25.237383,"NE_ID":1159321197,"WIKIDATAID":"Q846","NAME_AR":"قطر","NAME_BN":"কাতার","NAME_DE":"Katar","NAME_EN":"Qatar","NAME_ES":"Catar","NAME_FA":"قطر","NAME_FR":"Qatar","NAME_EL":"Κατάρ","NAME_HE":"קטר","NAME_HI":"क़तर","NAME_HU":"Katar","NAME_ID":"Qatar","NAME_IT":"Qatar","NAME_JA":"カタール","NAME_KO":"카타르","NAME_NL":"Qatar","NAME_PL":"Katar","NAME_PT":"Catar","NAME_RU":"Катар","NAME_SV":"Qatar","NAME_TR":"Katar","NAME_UK":"Катар","NAME_UR":"قطر","NAME_VI":"Qatar","NAME_ZH":"卡塔尔","NAME_ZHT":"卡達","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-8.777148437499989,41.941064453124994],[-8.655566406249989,41.0294921875],[-8.886621093749994,40.179443359375],[-9.148291015624977,39.542578125],[-9.374755859375,39.338281249999994],[-9.47412109375,38.730859374999994],[-8.914794921875,38.512109374999994],[-8.814160156249983,37.430810546874994],[-8.59765625,37.121337890625],[-7.834130859374994,37.005712890625],[-7.406152343749994,37.179443359375],[-7.503515624999977,37.585498046874996],[-7.185449218749994,38.00634765625],[-7.343017578125,38.457421874999994],[-7.046044921874994,38.907031249999996],[-7.445117187499989,39.536181640624996],[-7.036718749999977,39.71396484375],[-6.810156249999977,40.343115234375],[-6.928466796875,41.009130859375],[-6.212499999999977,41.532031249999996],[-6.618261718749977,41.9423828125],[-7.403613281249989,41.83369140625],[-7.920849609374983,41.883642578125],[-8.213085937499983,42.133691406249994],[-8.777148437499989,41.941064453124994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"Portugal","SOV_A3":"PRT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Portugal","ADM0_A3":"PRT","GEOU_DIF":0,"GEOUNIT":"Portugal","GU_A3":"PRT","SU_DIF":1,"SUBUNIT":"Portugal","SU_A3":"PR1","BRK_DIFF":0,"NAME":"Portugal","NAME_LONG":"Portugal","BRK_A3":"PR1","BRK_NAME":"Portugal","BRK_GROUP":"","ABBREV":"Port.","POSTAL":"P","FORMAL_EN":"Portuguese Republic","FORMAL_FR":"","NAME_CIAWF":"Portugal","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Portugal","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":7,"MAPCOLOR9":1,"MAPCOLOR13":4,"POP_EST":10269417,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":238785,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"PO","ISO_A2":"PT","ISO_A2_EH":"PT","ISO_A3":"PRT","ISO_A3_EH":"PRT","ISO_N3":"620","ISO_N3_EH":"620","UN_A3":"620","WB_A2":"PT","WB_A3":"PRT","WOE_ID":23424925,"WOE_ID_EH":23424925,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PR1","ADM0_DIFF":"","ADM0_TLC":"PR1","ADM0_A3_US":"PRT","ADM0_A3_FR":"PRT","ADM0_A3_RU":"PRT","ADM0_A3_ES":"PRT","ADM0_A3_CN":"PRT","ADM0_A3_TW":"PRT","ADM0_A3_IN":"PRT","ADM0_A3_NP":"PRT","ADM0_A3_PK":"PRT","ADM0_A3_DE":"PRT","ADM0_A3_GB":"PRT","ADM0_A3_BR":"PRT","ADM0_A3_IL":"PRT","ADM0_A3_PS":"PRT","ADM0_A3_SA":"PRT","ADM0_A3_EG":"PRT","ADM0_A3_MA":"PRT","ADM0_A3_PT":"PRT","ADM0_A3_AR":"PRT","ADM0_A3_JP":"PRT","ADM0_A3_KO":"PRT","ADM0_A3_VN":"PRT","ADM0_A3_TR":"PRT","ADM0_A3_ID":"PRT","ADM0_A3_PL":"PRT","ADM0_A3_GR":"PRT","ADM0_A3_IT":"PRT","ADM0_A3_NL":"PRT","ADM0_A3_SE":"PRT","ADM0_A3_BD":"PRT","ADM0_A3_UA":"PRT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-8.271754,"LABEL_Y":39.606675,"NE_ID":1159321187,"WIKIDATAID":"Q45","NAME_AR":"البرتغال","NAME_BN":"পর্তুগাল","NAME_DE":"Portugal","NAME_EN":"Portugal","NAME_ES":"Portugal","NAME_FA":"پرتغال","NAME_FR":"Portugal","NAME_EL":"Πορτογαλία","NAME_HE":"פורטוגל","NAME_HI":"पुर्तगाल","NAME_HU":"Portugália","NAME_ID":"Portugal","NAME_IT":"Portogallo","NAME_JA":"ポルトガル","NAME_KO":"포르투갈","NAME_NL":"Portugal","NAME_PL":"Portugalia","NAME_PT":"Portugal","NAME_RU":"Португалия","NAME_SV":"Portugal","NAME_TR":"Portekiz","NAME_UK":"Португалія","NAME_UR":"پرتگال","NAME_VI":"Bồ Đào Nha","NAME_ZH":"葡萄牙","NAME_ZHT":"葡萄牙","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[23.605273437500017,51.517919921875],[23.652441406250006,52.040380859375],[23.19697265625001,52.25693359375],[23.8447265625,52.664208984375],[23.887109375000023,53.0275390625],[23.484667968750017,53.939794921875],[23.45361328125,54.14345703125],[22.766210937500006,54.356787109375],[19.604394531250023,54.4591796875],[18.66962890625001,54.430908203125],[18.32343750000001,54.838183593749996],[17.26191406250001,54.729541015624996],[16.55976562500001,54.55380859375],[16.186328125000017,54.290380859375],[14.21142578125,53.950341796875],[14.213671875000017,53.870751953125],[14.258886718750006,53.729638671875],[14.41455078125,53.283496093749996],[14.128613281250011,52.878222656249996],[14.619433593750017,52.528515625],[14.752539062500006,52.081835937499996],[14.601660156250006,51.832373046875],[15.0166015625,51.252734374999996],[14.809375000000017,50.858984375],[16.007226562500023,50.611621093749996],[16.679101562500023,50.097460937499996],[17.151953125000006,50.378320312499994],[17.874804687500017,49.972265625],[18.562402343750023,49.879345703125],[18.83222656250001,49.510791015624996],[19.44160156250001,49.597705078124996],[19.80224609375,49.192333984375],[20.616113281250023,49.39169921875],[21.6396484375,49.411962890625],[22.538671875000006,49.072705078125],[22.6494140625,49.539013671875],[23.711718750000017,50.377343749999994],[24.105761718750017,50.844970703125],[23.605273437500017,51.517919921875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Poland","SOV_A3":"POL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Poland","ADM0_A3":"POL","GEOU_DIF":0,"GEOUNIT":"Poland","GU_A3":"POL","SU_DIF":0,"SUBUNIT":"Poland","SU_A3":"POL","BRK_DIFF":0,"NAME":"Poland","NAME_LONG":"Poland","BRK_A3":"POL","BRK_NAME":"Poland","BRK_GROUP":"","ABBREV":"Pol.","POSTAL":"PL","FORMAL_EN":"Republic of Poland","FORMAL_FR":"","NAME_CIAWF":"Poland","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Poland","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":7,"MAPCOLOR9":1,"MAPCOLOR13":2,"POP_EST":37970874,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":595858,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"PL","ISO_A2":"PL","ISO_A2_EH":"PL","ISO_A3":"POL","ISO_A3_EH":"POL","ISO_N3":"616","ISO_N3_EH":"616","UN_A3":"616","WB_A2":"PL","WB_A3":"POL","WOE_ID":23424923,"WOE_ID_EH":23424923,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"POL","ADM0_DIFF":"","ADM0_TLC":"POL","ADM0_A3_US":"POL","ADM0_A3_FR":"POL","ADM0_A3_RU":"POL","ADM0_A3_ES":"POL","ADM0_A3_CN":"POL","ADM0_A3_TW":"POL","ADM0_A3_IN":"POL","ADM0_A3_NP":"POL","ADM0_A3_PK":"POL","ADM0_A3_DE":"POL","ADM0_A3_GB":"POL","ADM0_A3_BR":"POL","ADM0_A3_IL":"POL","ADM0_A3_PS":"POL","ADM0_A3_SA":"POL","ADM0_A3_EG":"POL","ADM0_A3_MA":"POL","ADM0_A3_PT":"POL","ADM0_A3_AR":"POL","ADM0_A3_JP":"POL","ADM0_A3_KO":"POL","ADM0_A3_VN":"POL","ADM0_A3_TR":"POL","ADM0_A3_ID":"POL","ADM0_A3_PL":"POL","ADM0_A3_GR":"POL","ADM0_A3_IT":"POL","ADM0_A3_NL":"POL","ADM0_A3_SE":"POL","ADM0_A3_BD":"POL","ADM0_A3_UA":"POL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":7,"LABEL_X":19.490468,"LABEL_Y":51.990316,"NE_ID":1159321179,"WIKIDATAID":"Q36","NAME_AR":"بولندا","NAME_BN":"পোল্যান্ড","NAME_DE":"Polen","NAME_EN":"Poland","NAME_ES":"Polonia","NAME_FA":"لهستان","NAME_FR":"Pologne","NAME_EL":"Πολωνία","NAME_HE":"פולין","NAME_HI":"पोलैंड","NAME_HU":"Lengyelország","NAME_ID":"Polandia","NAME_IT":"Polonia","NAME_JA":"ポーランド","NAME_KO":"폴란드","NAME_NL":"Polen","NAME_PL":"Polska","NAME_PT":"Polónia","NAME_RU":"Польша","NAME_SV":"Polen","NAME_TR":"Polonya","NAME_UK":"Польща","NAME_UR":"پولینڈ","NAME_VI":"Ba Lan","NAME_ZH":"波兰","NAME_ZHT":"波蘭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[121.1015625,18.615283203125003],[120.59970703125003,18.507861328125003],[120.3583984375,17.63818359375],[120.40888671875001,16.955615234375003],[120.30527343750003,16.529248046874997],[120.38925781250003,16.221630859374997],[120.15976562500003,16.047656250000003],[119.83076171875001,16.326562499999994],[120.08212890625003,14.85107421875],[120.88808593750002,14.715771484374997],[120.92207031250001,14.493115234374997],[120.61679687500003,14.188037109375003],[121.20351562500002,13.640283203124994],[121.77792968750003,13.937646484374994],[122.40693359375001,13.492773437499991],[122.59521484375,13.907617187499994],[123.16328125000001,13.441748046874991],[123.31093750000002,13.044091796874994],[124.05976562500001,12.567089843749997],[124.14277343750001,13.035791015624994],[123.60810546875001,13.528076171875],[123.72597656250002,13.884326171875003],[123.43232421875001,13.966259765624997],[123.2314453125,13.747363281250003],[122.85605468750003,14.250781250000003],[122.49082031250003,14.322363281249991],[121.80048828125001,14.113867187499991],[121.69541015625003,14.7373046875],[121.39228515625001,15.324414062499997],[121.59531250000003,15.933251953124994],[122.13515625000002,16.184814453125],[122.51914062500003,17.12485351562499],[122.23681640625,17.434863281250003],[122.15097656250003,17.756494140624994],[122.2998046875,18.402783203124997],[121.84560546875002,18.29541015625],[121.1015625,18.615283203125003]]],[[[117.31113281250003,8.439599609374994],[117.98955078124999,8.877099609374994],[118.43496093750002,9.256005859374994],[118.78212890625002,9.916113281249991],[119.19150390625003,10.061083984374989],[119.68437499999999,10.551708984374997],[119.52666015624999,10.953173828124989],[118.11484375000003,9.3466796875],[117.884765625,9.240673828124997],[117.34990234374999,8.713574218749997],[117.31113281250003,8.439599609374994]]],[[[122.49619140625003,11.615087890624991],[122.103515625,11.642919921874991],[121.96435546875,10.871679687499991],[122.19765625000002,10.622900390624991],[122.76992187500002,10.823828124999991],[123.01650390625002,11.116503906249989],[123.15830078125003,11.535546874999994],[122.49619140625003,11.615087890624991]]],[[[123.130859375,9.064111328124994],[123.30839843749999,9.356982421874989],[123.16201171875002,9.8642578125],[123.56757812500001,10.78076171875],[123.25664062499999,10.993945312499989],[122.98330078125002,10.886621093749994],[122.81699218750003,10.503808593749994],[122.85556640625003,10.0869140625],[122.47148437499999,9.961523437499991],[122.5625,9.482812499999994],[123.130859375,9.064111328124994]]],[[[124.57460937500002,11.343066406249989],[124.44550781250001,10.923583984375],[124.78671875000003,10.781396484374994],[124.78076171875,10.168066406249991],[125.02656250000001,10.033105468749994],[125.25332031250002,10.263818359374994],[125.01318359375,10.785693359374989],[124.92998046874999,11.372851562499989],[124.57460937500002,11.343066406249989]]],[[[125.23955078124999,12.527880859374989],[124.29472656249999,12.5693359375],[124.38486328125003,12.243994140624991],[124.88427734375,11.775488281249991],[125.2333984375,11.145068359374989],[125.62812500000001,11.132031249999997],[125.45654296875,11.952539062499994],[125.53564453125,12.19140625],[125.23955078124999,12.527880859374989]]],[[[120.70439453124999,13.4794921875],[120.50830078125,13.260058593750003],[120.763671875,12.969824218749991],[120.92216796874999,12.511621093749994],[121.23671875000002,12.218798828124989],[121.54062500000003,12.63818359375],[121.52275390624999,13.131201171874991],[121.20273437500003,13.432324218749997],[120.70439453124999,13.4794921875]]],[[[126.00595703125003,9.320947265624994],[125.52089843750002,9.759130859374991],[125.53339843750001,9.140917968749989],[124.86894531249999,8.972265624999991],[124.73115234375001,8.56298828125],[124.45126953125003,8.606347656249994],[124.22578125000001,8.271386718749994],[123.4345703125,8.703320312499997],[123.017578125,8.398339843749994],[122.9111328125,8.156445312499997],[122.33710937500001,8.028417968749991],[122.1318359375,7.810498046874997],[122.04716796874999,7.363574218749989],[122.17617187500002,7.004199218749989],[122.49794921875002,7.672753906249994],[123.39091796874999,7.407519531249989],[123.49306640625002,7.807910156249989],[123.96845703125001,7.6646484374999915],[124.20664062500003,7.396435546874997],[123.98525390625002,6.993701171874989],[124.078125,6.404443359374994],[124.63632812500003,5.998193359374994],[125.45585937499999,5.664257812499997],[125.66796875,5.978662109374994],[125.58847656250003,6.465771484374997],[125.40097656250003,6.7957519531249915],[125.82441406250001,7.333300781249989],[126.080078125,6.733349609374997],[126.58154296875,7.247753906249997],[126.43535156249999,7.832812499999989],[126.31953125000001,8.8447265625],[126.193359375,9.276708984374991],[126.00595703125003,9.320947265624994]]],[[[123.37031250000001,9.449609374999994],[123.64335937499999,10.020214843749997],[123.9521484375,10.316601562499997],[123.71142578125,10.473681640624989],[123.38623046875,9.967089843749989],[123.37031250000001,9.449609374999994]]],[[[124.59384765625003,9.787207031249991],[124.5771484375,10.026708984374991],[124.1728515625,10.135205078124997],[123.81718749999999,9.8173828125],[123.93564453125003,9.623974609374997],[124.35986328125,9.630224609374991],[124.59384765625003,9.787207031249991]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Philippines","SOV_A3":"PHL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Philippines","ADM0_A3":"PHL","GEOU_DIF":0,"GEOUNIT":"Philippines","GU_A3":"PHL","SU_DIF":0,"SUBUNIT":"Philippines","SU_A3":"PHL","BRK_DIFF":0,"NAME":"Philippines","NAME_LONG":"Philippines","BRK_A3":"PHL","BRK_NAME":"Philippines","BRK_GROUP":"","ABBREV":"Phil.","POSTAL":"PH","FORMAL_EN":"Republic of the Philippines","FORMAL_FR":"","NAME_CIAWF":"Philippines","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Philippines","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":8,"POP_EST":108116615,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":376795,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"RP","ISO_A2":"PH","ISO_A2_EH":"PH","ISO_A3":"PHL","ISO_A3_EH":"PHL","ISO_N3":"608","ISO_N3_EH":"608","UN_A3":"608","WB_A2":"PH","WB_A3":"PHL","WOE_ID":23424934,"WOE_ID_EH":23424934,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PHL","ADM0_DIFF":"","ADM0_TLC":"PHL","ADM0_A3_US":"PHL","ADM0_A3_FR":"PHL","ADM0_A3_RU":"PHL","ADM0_A3_ES":"PHL","ADM0_A3_CN":"PHL","ADM0_A3_TW":"PHL","ADM0_A3_IN":"PHL","ADM0_A3_NP":"PHL","ADM0_A3_PK":"PHL","ADM0_A3_DE":"PHL","ADM0_A3_GB":"PHL","ADM0_A3_BR":"PHL","ADM0_A3_IL":"PHL","ADM0_A3_PS":"PHL","ADM0_A3_SA":"PHL","ADM0_A3_EG":"PHL","ADM0_A3_MA":"PHL","ADM0_A3_PT":"PHL","ADM0_A3_AR":"PHL","ADM0_A3_JP":"PHL","ADM0_A3_KO":"PHL","ADM0_A3_VN":"PHL","ADM0_A3_TR":"PHL","ADM0_A3_ID":"PHL","ADM0_A3_PL":"PHL","ADM0_A3_GR":"PHL","ADM0_A3_IT":"PHL","ADM0_A3_NL":"PHL","ADM0_A3_SE":"PHL","ADM0_A3_BD":"PHL","ADM0_A3_UA":"PHL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":7,"LABEL_X":122.465,"LABEL_Y":11.198,"NE_ID":1159321169,"WIKIDATAID":"Q928","NAME_AR":"الفلبين","NAME_BN":"ফিলিপাইন","NAME_DE":"Philippinen","NAME_EN":"Philippines","NAME_ES":"Filipinas","NAME_FA":"فیلیپین","NAME_FR":"Philippines","NAME_EL":"Φιλιππίνες","NAME_HE":"הפיליפינים","NAME_HI":"फ़िलीपीन्स","NAME_HU":"Fülöp-szigetek","NAME_ID":"Filipina","NAME_IT":"Filippine","NAME_JA":"フィリピン","NAME_KO":"필리핀","NAME_NL":"Filipijnen","NAME_PL":"Filipiny","NAME_PT":"Filipinas","NAME_RU":"Филиппины","NAME_SV":"Filippinerna","NAME_TR":"Filipinler","NAME_UK":"Філіппіни","NAME_UR":"فلپائن","NAME_VI":"Philippines","NAME_ZH":"菲律宾","NAME_ZHT":"菲律賓","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-69.96591796874999,-4.235937500000006],[-70.339501953125,-3.8143554687500085],[-70.735107421875,-3.781542968750003],[-70.07402343749999,-2.7501953125000114],[-70.91455078125,-2.218554687500003],[-71.39697265625,-2.3340820312500057],[-71.75253906249999,-2.1527343750000085],[-72.39560546874999,-2.4289062500000114],[-73.1544921875,-2.2782226562500085],[-73.19697265625,-1.8302734375000114],[-73.4962890625,-1.6930664062500114],[-73.664306640625,-1.2488281250000028],[-74.24638671874999,-0.9706054687500085],[-74.41787109375,-0.5806640625000057],[-74.8017578125,-0.20009765625000853],[-75.28447265624999,-0.10654296875000568],[-75.26323242187499,-0.5553710937500114],[-75.570556640625,-1.53125],[-76.089794921875,-2.133105468750003],[-76.6791015625,-2.5625976562500057],[-77.860595703125,-2.9816406250000114],[-78.34726562499999,-3.4312500000000057],[-78.41977539062499,-3.77685546875],[-79.07626953124999,-4.9906250000000085],[-79.33095703125,-4.927832031250006],[-79.63852539062499,-4.454882812500003],[-80.13955078125,-4.296093750000011],[-80.4884765625,-4.393652343750006],[-80.510009765625,-4.069531250000011],[-80.17924804687499,-3.877734375000003],[-80.324658203125,-3.3878906250000114],[-80.798583984375,-3.7310546875000057],[-81.283203125,-4.322265625],[-81.33662109375,-4.669531250000006],[-81.10849609374999,-5.02783203125],[-80.88271484375,-5.758984375000011],[-81.18051757812499,-5.9423828125],[-80.81162109374999,-6.2822265625],[-80.11025390625,-6.649609375000011],[-79.761962890625,-7.066503906250006],[-79.37724609374999,-7.835546875000006],[-78.76225585937499,-8.616992187500003],[-78.18559570312499,-10.089062500000011],[-77.736083984375,-10.836718750000003],[-77.633203125,-11.287792968750011],[-77.22031249999999,-11.663378906250003],[-77.152734375,-12.060351562500003],[-76.83212890624999,-12.348730468750006],[-76.18393554687499,-13.515234375000006],[-76.289013671875,-14.133105468750003],[-75.93388671874999,-14.633593750000003],[-75.533642578125,-14.899218750000003],[-75.104248046875,-15.411914062500003],[-74.14707031249999,-15.912500000000009],[-73.824951171875,-16.15283203125],[-72.46767578125,-16.708105468750006],[-72.111279296875,-17.002539062500006],[-71.5322265625,-17.29433593750001],[-71.33696289062499,-17.68251953125001],[-70.41826171874999,-18.34560546875001],[-69.92636718749999,-18.2060546875],[-69.85209960937499,-17.70380859375001],[-69.5109375,-17.50605468750001],[-69.62485351562499,-17.2001953125],[-69.020703125,-16.642187500000006],[-68.9134765625,-16.26191406250001],[-69.21757812499999,-16.14912109375001],[-69.41850585937499,-15.603417968750009],[-69.17246093749999,-15.236621093750003],[-69.37470703125,-14.962988281250006],[-69.23491210937499,-14.597070312500009],[-68.880322265625,-14.198828125000006],[-69.07412109375,-13.682812500000011],[-68.97861328124999,-12.880078125000011],[-68.68525390625,-12.501953125],[-69.57861328125,-10.951757812500006],[-70.22006835937499,-11.047656250000003],[-70.642333984375,-11.01025390625],[-70.6369140625,-9.478222656250011],[-71.237939453125,-9.966015625000011],[-72.181591796875,-10.003710937500003],[-72.379052734375,-9.510156250000009],[-73.209423828125,-9.411425781250003],[-72.9740234375,-8.9931640625],[-73.54912109374999,-8.345800781250006],[-74.00205078124999,-7.5560546875000085],[-73.749462890625,-7.3353515625000085],[-73.75810546874999,-6.90576171875],[-73.137353515625,-6.4658203125],[-73.235546875,-6.098437500000003],[-72.9798828125,-5.634863281250006],[-72.88706054687499,-5.122753906250011],[-72.69873046875,-5.067187500000003],[-71.8447265625,-4.50439453125],[-70.97368164062499,-4.3504882812500085],[-70.79951171875,-4.17333984375],[-69.96591796874999,-4.235937500000006]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Peru","SOV_A3":"PER","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Peru","ADM0_A3":"PER","GEOU_DIF":0,"GEOUNIT":"Peru","GU_A3":"PER","SU_DIF":0,"SUBUNIT":"Peru","SU_A3":"PER","BRK_DIFF":0,"NAME":"Peru","NAME_LONG":"Peru","BRK_A3":"PER","BRK_NAME":"Peru","BRK_GROUP":"","ABBREV":"Peru","POSTAL":"PE","FORMAL_EN":"Republic of Peru","FORMAL_FR":"","NAME_CIAWF":"Peru","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Peru","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":11,"POP_EST":32510453,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":226848,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"PE","ISO_A2":"PE","ISO_A2_EH":"PE","ISO_A3":"PER","ISO_A3_EH":"PER","ISO_N3":"604","ISO_N3_EH":"604","UN_A3":"604","WB_A2":"PE","WB_A3":"PER","WOE_ID":23424919,"WOE_ID_EH":23424919,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PER","ADM0_DIFF":"","ADM0_TLC":"PER","ADM0_A3_US":"PER","ADM0_A3_FR":"PER","ADM0_A3_RU":"PER","ADM0_A3_ES":"PER","ADM0_A3_CN":"PER","ADM0_A3_TW":"PER","ADM0_A3_IN":"PER","ADM0_A3_NP":"PER","ADM0_A3_PK":"PER","ADM0_A3_DE":"PER","ADM0_A3_GB":"PER","ADM0_A3_BR":"PER","ADM0_A3_IL":"PER","ADM0_A3_PS":"PER","ADM0_A3_SA":"PER","ADM0_A3_EG":"PER","ADM0_A3_MA":"PER","ADM0_A3_PT":"PER","ADM0_A3_AR":"PER","ADM0_A3_JP":"PER","ADM0_A3_KO":"PER","ADM0_A3_VN":"PER","ADM0_A3_TR":"PER","ADM0_A3_ID":"PER","ADM0_A3_PL":"PER","ADM0_A3_GR":"PER","ADM0_A3_IT":"PER","ADM0_A3_NL":"PER","ADM0_A3_SE":"PER","ADM0_A3_BD":"PER","ADM0_A3_UA":"PER","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":-72.90016,"LABEL_Y":-12.976679,"NE_ID":1159321163,"WIKIDATAID":"Q419","NAME_AR":"بيرو","NAME_BN":"পেরু","NAME_DE":"Peru","NAME_EN":"Peru","NAME_ES":"Perú","NAME_FA":"پرو","NAME_FR":"Pérou","NAME_EL":"Περού","NAME_HE":"פרו","NAME_HI":"पेरू","NAME_HU":"Peru","NAME_ID":"Peru","NAME_IT":"Perù","NAME_JA":"ペルー","NAME_KO":"페루","NAME_NL":"Peru","NAME_PL":"Peru","NAME_PT":"Peru","NAME_RU":"Перу","NAME_SV":"Peru","NAME_TR":"Peru","NAME_UK":"Перу","NAME_UR":"پیرو","NAME_VI":"Peru","NAME_ZH":"秘鲁","NAME_ZHT":"秘魯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-58.15976562499999,-20.164648437500006],[-58.18017578125,-19.81787109375],[-59.09052734375,-19.286230468750006],[-60.00737304687499,-19.29755859375001],[-61.7568359375,-19.645312500000003],[-61.916943359375,-20.05537109375001],[-62.276318359375,-20.5625],[-62.27666015624999,-21.066015625000006],[-62.65097656249999,-22.233691406250003],[-62.372509765625,-22.43916015625001],[-61.79853515625,-23.18203125000001],[-60.83984375,-23.85810546875001],[-59.892480468749994,-24.093554687500003],[-59.372949218749994,-24.453906250000003],[-58.365380859374994,-24.959277343750003],[-57.821679687499994,-25.13642578125001],[-57.587158203125,-25.405078125000003],[-57.890625,-26.00654296875001],[-58.203027343749994,-26.381445312500006],[-58.191308593749994,-26.629980468750006],[-58.641748046874994,-27.196093750000003],[-56.437158203124994,-27.553808593750006],[-56.1640625,-27.32148437500001],[-55.789990234375,-27.41640625000001],[-55.426660156249994,-27.00927734375],[-54.82548828124999,-26.65224609375001],[-54.677734375,-26.30878906250001],[-54.615869140624994,-25.57607421875001],[-54.47314453125,-25.22021484375],[-54.24179687499999,-24.04726562500001],[-54.62548828125,-23.8125],[-55.36630859374999,-23.991015625000003],[-55.654052734375,-22.810351562500003],[-55.84916992187499,-22.3076171875],[-56.523828124999994,-22.1025390625],[-56.937255859375,-22.271289062500003],[-57.98569335937499,-22.04638671875],[-57.830224609374994,-20.99794921875001],[-58.15976562499999,-20.164648437500006]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Paraguay","SOV_A3":"PRY","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Paraguay","ADM0_A3":"PRY","GEOU_DIF":0,"GEOUNIT":"Paraguay","GU_A3":"PRY","SU_DIF":0,"SUBUNIT":"Paraguay","SU_A3":"PRY","BRK_DIFF":0,"NAME":"Paraguay","NAME_LONG":"Paraguay","BRK_A3":"PRY","BRK_NAME":"Paraguay","BRK_GROUP":"","ABBREV":"Para.","POSTAL":"PY","FORMAL_EN":"Republic of Paraguay","FORMAL_FR":"","NAME_CIAWF":"Paraguay","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Paraguay","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":6,"MAPCOLOR13":2,"POP_EST":7044636,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":38145,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"PA","ISO_A2":"PY","ISO_A2_EH":"PY","ISO_A3":"PRY","ISO_A3_EH":"PRY","ISO_N3":"600","ISO_N3_EH":"600","UN_A3":"600","WB_A2":"PY","WB_A3":"PRY","WOE_ID":23424917,"WOE_ID_EH":23424917,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PRY","ADM0_DIFF":"","ADM0_TLC":"PRY","ADM0_A3_US":"PRY","ADM0_A3_FR":"PRY","ADM0_A3_RU":"PRY","ADM0_A3_ES":"PRY","ADM0_A3_CN":"PRY","ADM0_A3_TW":"PRY","ADM0_A3_IN":"PRY","ADM0_A3_NP":"PRY","ADM0_A3_PK":"PRY","ADM0_A3_DE":"PRY","ADM0_A3_GB":"PRY","ADM0_A3_BR":"PRY","ADM0_A3_IL":"PRY","ADM0_A3_PS":"PRY","ADM0_A3_SA":"PRY","ADM0_A3_EG":"PRY","ADM0_A3_MA":"PRY","ADM0_A3_PT":"PRY","ADM0_A3_AR":"PRY","ADM0_A3_JP":"PRY","ADM0_A3_KO":"PRY","ADM0_A3_VN":"PRY","ADM0_A3_TR":"PRY","ADM0_A3_ID":"PRY","ADM0_A3_PL":"PRY","ADM0_A3_GR":"PRY","ADM0_A3_IT":"PRY","ADM0_A3_NL":"PRY","ADM0_A3_SE":"PRY","ADM0_A3_BD":"PRY","ADM0_A3_UA":"PRY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-60.146394,"LABEL_Y":-21.674509,"NE_ID":1159321195,"WIKIDATAID":"Q733","NAME_AR":"باراغواي","NAME_BN":"প্যারাগুয়ে","NAME_DE":"Paraguay","NAME_EN":"Paraguay","NAME_ES":"Paraguay","NAME_FA":"پاراگوئه","NAME_FR":"Paraguay","NAME_EL":"Παραγουάη","NAME_HE":"פרגוואי","NAME_HI":"पैराग्वे","NAME_HU":"Paraguay","NAME_ID":"Paraguay","NAME_IT":"Paraguay","NAME_JA":"パラグアイ","NAME_KO":"파라과이","NAME_NL":"Paraguay","NAME_PL":"Paragwaj","NAME_PT":"Paraguai","NAME_RU":"Парагвай","NAME_SV":"Paraguay","NAME_TR":"Paraguay","NAME_UK":"Парагвай","NAME_UR":"پیراگوئے","NAME_VI":"Paraguay","NAME_ZH":"巴拉圭","NAME_ZHT":"巴拉圭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[152.9658203125,-4.75634765625],[153.12421875,-4.2523437500000085],[152.59843750000005,-3.9948242187500114],[152.6806640625,-4.4984375000000085],[152.9658203125,-4.75634765625]]],[[[151.91562500000003,-4.2967773437500085],[151.551953125,-4.345507812500003],[151.67119140625005,-4.88330078125],[151.32656250000002,-4.9603515625000085],[150.95292968750005,-5.4237304687500085],[150.29873046875002,-5.53564453125],[149.2453125,-5.573046875000003],[148.99921875,-5.484570312500011],[148.3447265625,-5.544921875],[148.40117187500005,-5.7650390625000085],[149.12656250000003,-6.127636718750011],[149.38232421875,-6.078125],[149.6525390625,-6.2904296875000085],[150.42832031250003,-6.276171875000003],[151.22929687500005,-5.919921875],[151.51513671875,-5.552343750000006],[151.8654296875,-5.5648437500000085],[152.14296875000002,-5.357031250000006],[152.01328125000003,-5.0038085937500085],[152.40000000000003,-4.731250000000003],[152.40566406250002,-4.3407226562500085],[151.91562500000003,-4.2967773437500085]]],[[[140.97617187500003,-9.118750000000006],[141.13320312500002,-9.221289062500006],[142.22958984375003,-9.169921875],[142.64716796875,-9.327832031250011],[143.3662109375,-8.961035156250006],[143.094921875,-8.311230468750011],[143.61376953125,-8.200390625000011],[144.50986328125003,-7.5673828125],[144.973828125,-7.8021484375000085],[146.033203125,-8.076367187500011],[146.69658203125005,-9.025390625],[147.76865234375003,-10.070117187500003],[149.7541015625,-10.35302734375],[150.016796875,-10.5771484375],[150.482421875,-10.636914062500011],[150.6669921875,-10.257128906250003],[149.87441406250002,-10.012988281250003],[149.76123046875,-9.805859375000011],[149.20302734375002,-9.406835937500006],[149.24765625000003,-9.070996093750011],[148.58310546875003,-9.0517578125],[148.24687500000005,-8.554296875000006],[148.12675781250005,-8.103613281250006],[147.72431640625,-7.876269531250003],[147.19003906250003,-7.378125000000011],[146.96074218750005,-6.928808593750006],[147.119140625,-6.7216796875],[147.84550781250005,-6.662402343750003],[147.80205078125005,-6.315234375000003],[147.37666015625,-5.950781250000006],[147.03427734375003,-5.919238281250003],[146.40341796875003,-5.6166015625000085],[145.85283203125005,-5.471289062500006],[145.76699218750002,-4.823046875000003],[145.33457031250003,-4.38525390625],[145.08779296875002,-4.34912109375],[144.477734375,-3.8252929687500057],[144.0158203125,-3.7835937500000085],[143.508984375,-3.43115234375],[142.90517578125002,-3.3207031250000085],[142.21152343750003,-3.08349609375],[141.18564453125003,-2.6278320312500085],[140.97343750000005,-2.6097656250000085],[140.97421875000003,-4.2264648437500085],[140.97519531250003,-6.905371093750006],[140.97617187500003,-9.118750000000006]]],[[[155.95761718750003,-6.686816406250003],[155.82255859375005,-6.380468750000006],[155.4669921875,-6.145117187500006],[154.9970703125,-5.5399414062500085],[154.74111328125002,-5.5453125000000085],[154.78193359375,-5.970703125],[155.2021484375,-6.3076171875],[155.34404296875005,-6.7216796875],[155.71933593750003,-6.86279296875],[155.95761718750003,-6.686816406250003]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Papua New Guinea","SOV_A3":"PNG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Papua New Guinea","ADM0_A3":"PNG","GEOU_DIF":0,"GEOUNIT":"Papua New Guinea","GU_A3":"PNG","SU_DIF":1,"SUBUNIT":"Papua New Guinea","SU_A3":"PN1","BRK_DIFF":0,"NAME":"Papua New Guinea","NAME_LONG":"Papua New Guinea","BRK_A3":"PN1","BRK_NAME":"Papua New Guinea","BRK_GROUP":"","ABBREV":"P.N.G.","POSTAL":"PG","FORMAL_EN":"Independent State of Papua New Guinea","FORMAL_FR":"","NAME_CIAWF":"Papua New Guinea","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Papua New Guinea","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":1,"POP_EST":8776109,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":24829,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"PP","ISO_A2":"PG","ISO_A2_EH":"PG","ISO_A3":"PNG","ISO_A3_EH":"PNG","ISO_N3":"598","ISO_N3_EH":"598","UN_A3":"598","WB_A2":"PG","WB_A3":"PNG","WOE_ID":23424926,"WOE_ID_EH":23424926,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PN1","ADM0_DIFF":"","ADM0_TLC":"PN1","ADM0_A3_US":"PNG","ADM0_A3_FR":"PNG","ADM0_A3_RU":"PNG","ADM0_A3_ES":"PNG","ADM0_A3_CN":"PNG","ADM0_A3_TW":"PNG","ADM0_A3_IN":"PNG","ADM0_A3_NP":"PNG","ADM0_A3_PK":"PNG","ADM0_A3_DE":"PNG","ADM0_A3_GB":"PNG","ADM0_A3_BR":"PNG","ADM0_A3_IL":"PNG","ADM0_A3_PS":"PNG","ADM0_A3_SA":"PNG","ADM0_A3_EG":"PNG","ADM0_A3_MA":"PNG","ADM0_A3_PT":"PNG","ADM0_A3_AR":"PNG","ADM0_A3_JP":"PNG","ADM0_A3_KO":"PNG","ADM0_A3_VN":"PNG","ADM0_A3_TR":"PNG","ADM0_A3_ID":"PNG","ADM0_A3_PL":"PNG","ADM0_A3_GR":"PNG","ADM0_A3_IT":"PNG","ADM0_A3_NL":"PNG","ADM0_A3_SE":"PNG","ADM0_A3_BD":"PNG","ADM0_A3_UA":"PNG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Melanesia","REGION_WB":"East Asia & Pacific","NAME_LEN":16,"LONG_LEN":16,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":7.5,"LABEL_X":143.910216,"LABEL_Y":-5.695285,"NE_ID":1159321173,"WIKIDATAID":"Q691","NAME_AR":"بابوا غينيا الجديدة","NAME_BN":"পাপুয়া নিউগিনি","NAME_DE":"Papua-Neuguinea","NAME_EN":"Papua New Guinea","NAME_ES":"Papúa Nueva Guinea","NAME_FA":"پاپوآ گینه نو","NAME_FR":"Papouasie-Nouvelle-Guinée","NAME_EL":"Παπούα Νέα Γουινέα","NAME_HE":"פפואה גינאה החדשה","NAME_HI":"पापुआ न्यू गिनी","NAME_HU":"Pápua Új-Guinea","NAME_ID":"Papua Nugini","NAME_IT":"Papua Nuova Guinea","NAME_JA":"パプアニューギニア","NAME_KO":"파푸아뉴기니","NAME_NL":"Papoea-Nieuw-Guinea","NAME_PL":"Papua-Nowa Gwinea","NAME_PT":"Papua-Nova Guiné","NAME_RU":"Папуа — Новая Гвинея","NAME_SV":"Papua Nya Guinea","NAME_TR":"Papua Yeni Gine","NAME_UK":"Папуа Нова Гвінея","NAME_UR":"پاپوا نیو گنی","NAME_VI":"Papua New Guinea","NAME_ZH":"巴布亚新几内亚","NAME_ZHT":"巴布亞紐幾內亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-77.37421875,8.658300781249991],[-78.082763671875,9.236279296874997],[-78.504345703125,9.406298828124989],[-79.577294921875,9.597851562499997],[-80.127099609375,9.209912109374997],[-80.83867187499999,8.88720703125],[-81.35478515624999,8.780566406249989],[-82.24418945312499,9.031494140625],[-82.56357421874999,9.57666015625],[-82.93984375,9.449169921874997],[-82.91704101562499,8.740332031249991],[-82.99755859375,8.367773437499991],[-82.879345703125,8.070654296874991],[-82.67954101562499,8.321972656249997],[-81.72763671874999,8.137548828124991],[-81.504150390625,7.72119140625],[-81.035107421875,7.711132812499997],[-80.84555664062499,7.2200683593749915],[-80.4388671875,7.274951171874989],[-80.0751953125,7.667041015624989],[-80.45810546874999,8.077050781249994],[-80.36870117187499,8.288769531249997],[-79.750439453125,8.595507812499989],[-79.44150390624999,9.006005859374994],[-79.086376953125,8.997167968749991],[-78.11386718749999,8.379589843749997],[-78.42158203125,8.060986328124997],[-78.1701171875,7.5437988281249915],[-77.90117187499999,7.2293457031249915],[-77.743896484375,7.5369628906249915],[-77.35078125,7.705859374999989],[-77.2123046875,8.033886718749997],[-77.37421875,8.658300781249991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Panama","SOV_A3":"PAN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Panama","ADM0_A3":"PAN","GEOU_DIF":0,"GEOUNIT":"Panama","GU_A3":"PAN","SU_DIF":0,"SUBUNIT":"Panama","SU_A3":"PAN","BRK_DIFF":0,"NAME":"Panama","NAME_LONG":"Panama","BRK_A3":"PAN","BRK_NAME":"Panama","BRK_GROUP":"","ABBREV":"Pan.","POSTAL":"PA","FORMAL_EN":"Republic of Panama","FORMAL_FR":"","NAME_CIAWF":"Panama","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Panama","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":4246439,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":66800,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"PM","ISO_A2":"PA","ISO_A2_EH":"PA","ISO_A3":"PAN","ISO_A3_EH":"PAN","ISO_N3":"591","ISO_N3_EH":"591","UN_A3":"591","WB_A2":"PA","WB_A3":"PAN","WOE_ID":23424924,"WOE_ID_EH":23424924,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PAN","ADM0_DIFF":"","ADM0_TLC":"PAN","ADM0_A3_US":"PAN","ADM0_A3_FR":"PAN","ADM0_A3_RU":"PAN","ADM0_A3_ES":"PAN","ADM0_A3_CN":"PAN","ADM0_A3_TW":"PAN","ADM0_A3_IN":"PAN","ADM0_A3_NP":"PAN","ADM0_A3_PK":"PAN","ADM0_A3_DE":"PAN","ADM0_A3_GB":"PAN","ADM0_A3_BR":"PAN","ADM0_A3_IL":"PAN","ADM0_A3_PS":"PAN","ADM0_A3_SA":"PAN","ADM0_A3_EG":"PAN","ADM0_A3_MA":"PAN","ADM0_A3_PT":"PAN","ADM0_A3_AR":"PAN","ADM0_A3_JP":"PAN","ADM0_A3_KO":"PAN","ADM0_A3_VN":"PAN","ADM0_A3_TR":"PAN","ADM0_A3_ID":"PAN","ADM0_A3_PL":"PAN","ADM0_A3_GR":"PAN","ADM0_A3_IT":"PAN","ADM0_A3_NL":"PAN","ADM0_A3_SE":"PAN","ADM0_A3_BD":"PAN","ADM0_A3_UA":"PAN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-80.352106,"LABEL_Y":8.72198,"NE_ID":1159321161,"WIKIDATAID":"Q804","NAME_AR":"بنما","NAME_BN":"পানামা","NAME_DE":"Panama","NAME_EN":"Panama","NAME_ES":"Panamá","NAME_FA":"پاناما","NAME_FR":"Panama","NAME_EL":"Παναμάς","NAME_HE":"פנמה","NAME_HI":"पनामा","NAME_HU":"Panama","NAME_ID":"Panama","NAME_IT":"Panama","NAME_JA":"パナマ","NAME_KO":"파나마","NAME_NL":"Panama","NAME_PL":"Panama","NAME_PT":"Panamá","NAME_RU":"Панама","NAME_SV":"Panama","NAME_TR":"Panama","NAME_UK":"Панама","NAME_UR":"پاناما","NAME_VI":"Panama","NAME_ZH":"巴拿马","NAME_ZHT":"巴拿馬","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":6,"SOVEREIGNT":"Palau","SOV_A3":"PLW","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Palau","ADM0_A3":"PLW","GEOU_DIF":0,"GEOUNIT":"Palau","GU_A3":"PLW","SU_DIF":0,"SUBUNIT":"Palau","SU_A3":"PLW","BRK_DIFF":0,"NAME":"Palau","NAME_LONG":"Palau","BRK_A3":"PLW","BRK_NAME":"Palau","BRK_GROUP":"","ABBREV":"Palau","POSTAL":"PW","FORMAL_EN":"Republic of Palau","FORMAL_FR":"","NAME_CIAWF":"Palau","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Palau","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":12,"POP_EST":18008,"POP_RANK":6,"POP_YEAR":2019,"GDP_MD":268,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"PS","ISO_A2":"PW","ISO_A2_EH":"PW","ISO_A3":"PLW","ISO_A3_EH":"PLW","ISO_N3":"585","ISO_N3_EH":"585","UN_A3":"585","WB_A2":"PW","WB_A3":"PLW","WOE_ID":23424927,"WOE_ID_EH":23424927,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PLW","ADM0_DIFF":"","ADM0_TLC":"PLW","ADM0_A3_US":"PLW","ADM0_A3_FR":"PLW","ADM0_A3_RU":"PLW","ADM0_A3_ES":"PLW","ADM0_A3_CN":"PLW","ADM0_A3_TW":"PLW","ADM0_A3_IN":"PLW","ADM0_A3_NP":"PLW","ADM0_A3_PK":"PLW","ADM0_A3_DE":"PLW","ADM0_A3_GB":"PLW","ADM0_A3_BR":"PLW","ADM0_A3_IL":"PLW","ADM0_A3_PS":"PLW","ADM0_A3_SA":"PLW","ADM0_A3_EG":"PLW","ADM0_A3_MA":"PLW","ADM0_A3_PT":"PLW","ADM0_A3_AR":"PLW","ADM0_A3_JP":"PLW","ADM0_A3_KO":"PLW","ADM0_A3_VN":"PLW","ADM0_A3_TR":"PLW","ADM0_A3_ID":"PLW","ADM0_A3_PL":"PLW","ADM0_A3_GR":"PLW","ADM0_A3_IT":"PLW","ADM0_A3_NL":"PLW","ADM0_A3_SE":"PLW","ADM0_A3_BD":"PLW","ADM0_A3_UA":"PLW","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":134.580157,"LABEL_Y":7.518252,"NE_ID":1159321171,"WIKIDATAID":"Q695","NAME_AR":"بالاو","NAME_BN":"পালাউ","NAME_DE":"Palau","NAME_EN":"Palau","NAME_ES":"Palaos","NAME_FA":"پالائو","NAME_FR":"Palaos","NAME_EL":"Παλάου","NAME_HE":"פלאו","NAME_HI":"पलाउ","NAME_HU":"Palau","NAME_ID":"Palau","NAME_IT":"Palau","NAME_JA":"パラオ","NAME_KO":"팔라우","NAME_NL":"Palau","NAME_PL":"Palau","NAME_PT":"Palau","NAME_RU":"Палау","NAME_SV":"Palau","NAME_TR":"Palau","NAME_UK":"Республіка Палау","NAME_UR":"پلاؤ","NAME_VI":"Palau","NAME_ZH":"帕劳","NAME_ZHT":"帛琉","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[76.76689453124999,35.66171875],[75.94511718750002,36.017578125],[75.84023437500002,36.649707031249996],[75.3466796875,36.913476562499994],[74.54140625000002,37.02216796875],[74.00185546875002,36.823095703125],[73.769140625,36.888476562499996],[72.62285156250002,36.82958984375],[71.62050781250002,36.436474609375],[71.18505859375,36.04208984375],[71.42753906250002,35.833740234375],[71.62050781250002,35.183007812499994],[70.96562500000002,34.53037109375],[71.05156250000002,34.049707031249994],[69.86806640625002,33.89765625],[70.2841796875,33.369042968749994],[69.92011718750001,33.1125],[69.5015625,33.020068359374996],[69.24140625000001,32.433544921875],[69.279296875,31.936816406249996],[68.86894531250002,31.634228515624997],[68.21396484375,31.807373046875],[67.57822265625,31.506494140624994],[67.28730468750001,31.217822265624996],[66.92431640625,31.305615234374997],[66.39716796875001,30.91220703125],[66.17705078125002,29.835595703124994],[65.09550781250002,29.559472656249994],[64.52109375,29.564501953124996],[64.09873046875,29.391943359375],[63.56757812500001,29.497998046874997],[62.4765625,29.408349609374994],[60.843359375000006,29.858691406249996],[61.318359375,29.372607421874996],[61.623046875,28.7916015625],[61.88984375000001,28.546533203124994],[62.35302734375,28.414746093749997],[62.73974609375,28.00205078125],[62.76298828125002,27.250195312499997],[63.16679687500002,27.252490234374996],[63.168066406250006,26.665576171874996],[62.43925781250002,26.56103515625],[61.86982421875001,26.242431640625],[61.66865234375001,25.768994140624997],[61.587890625,25.202343749999997],[62.31533203125002,25.134912109374994],[62.57246093750001,25.25473632812499],[63.49140625000001,25.210839843749994],[63.72089843750001,25.385888671874994],[64.65898437500002,25.18408203125],[64.77666015625002,25.307324218749997],[65.6796875,25.355273437500003],[66.42861328125002,25.575341796874994],[66.69863281250002,25.226318359375],[66.70302734375002,24.86093749999999],[67.171484375,24.756103515625],[67.30937500000002,24.1748046875],[67.66845703125,23.810986328124997],[68.1650390625,23.857324218749994],[68.72412109375,23.964697265625034],[68.728125,24.265625],[69.5591796875,24.273095703124994],[69.71621093750002,24.172607421875],[70.54677734375002,24.41831054687499],[71.04404296875,24.400097656249997],[71.0478515625,24.687744140625057],[70.65205078125001,25.422900390625102],[70.2646484375,25.70654296875],[70.077734375,26.071972656249997],[70.1568359375,26.471435546875],[69.47001953125002,26.804443359375],[69.56796874999992,27.174609375000102],[70.14453125,27.849023437500023],[70.40371093750002,28.025048828124966],[70.73740234374998,27.729003906250057],[71.87031250000001,27.9625],[72.34189453125,28.751904296874997],[72.9033203125,29.028759765624997],[73.38164062500002,29.934374999999996],[73.80917968749998,30.093359375000034],[73.89931640625002,30.435351562500045],[74.6328125,31.03466796875],[74.50996093750001,31.712939453124996],[75.33349609375,32.279199218749966],[74.6578125,32.518945312499994],[73.99423828125,33.2421875],[74.14999999999998,33.50698242187502],[73.96123046875002,34.653466796874994],[74.300390625,34.765380859375],[75.70917968750001,34.50307617187508],[76.59443359375001,34.73583984375],[77.04863281249999,35.109912109374996],[76.76689453124999,35.66171875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Pakistan","SOV_A3":"PAK","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Pakistan","ADM0_A3":"PAK","GEOU_DIF":0,"GEOUNIT":"Pakistan","GU_A3":"PAK","SU_DIF":0,"SUBUNIT":"Pakistan","SU_A3":"PAK","BRK_DIFF":0,"NAME":"Pakistan","NAME_LONG":"Pakistan","BRK_A3":"PAK","BRK_NAME":"Pakistan","BRK_GROUP":"","ABBREV":"Pak.","POSTAL":"PK","FORMAL_EN":"Islamic Republic of Pakistan","FORMAL_FR":"","NAME_CIAWF":"Pakistan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Pakistan","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":11,"POP_EST":216565318,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":278221,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"PK","ISO_A2":"PK","ISO_A2_EH":"PK","ISO_A3":"PAK","ISO_A3_EH":"PAK","ISO_N3":"586","ISO_N3_EH":"586","UN_A3":"586","WB_A2":"PK","WB_A3":"PAK","WOE_ID":23424922,"WOE_ID_EH":23424922,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PAK","ADM0_DIFF":"","ADM0_TLC":"PAK","ADM0_A3_US":"PAK","ADM0_A3_FR":"PAK","ADM0_A3_RU":"PAK","ADM0_A3_ES":"PAK","ADM0_A3_CN":"PAK","ADM0_A3_TW":"PAK","ADM0_A3_IN":"PAK","ADM0_A3_NP":"PAK","ADM0_A3_PK":"PAK","ADM0_A3_DE":"PAK","ADM0_A3_GB":"PAK","ADM0_A3_BR":"PAK","ADM0_A3_IL":"PAK","ADM0_A3_PS":"PAK","ADM0_A3_SA":"PAK","ADM0_A3_EG":"PAK","ADM0_A3_MA":"PAK","ADM0_A3_PT":"PAK","ADM0_A3_AR":"PAK","ADM0_A3_JP":"PAK","ADM0_A3_KO":"PAK","ADM0_A3_VN":"PAK","ADM0_A3_TR":"PAK","ADM0_A3_ID":"PAK","ADM0_A3_PL":"PAK","ADM0_A3_GR":"PAK","ADM0_A3_IT":"PAK","ADM0_A3_NL":"PAK","ADM0_A3_SE":"PAK","ADM0_A3_BD":"PAK","ADM0_A3_UA":"PAK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":7,"LABEL_X":68.545632,"LABEL_Y":29.328389,"NE_ID":1159321153,"WIKIDATAID":"Q843","NAME_AR":"باكستان","NAME_BN":"পাকিস্তান","NAME_DE":"Pakistan","NAME_EN":"Pakistan","NAME_ES":"Pakistán","NAME_FA":"پاکستان","NAME_FR":"Pakistan","NAME_EL":"Πακιστάν","NAME_HE":"פקיסטן","NAME_HI":"पाकिस्तान","NAME_HU":"Pakisztán","NAME_ID":"Pakistan","NAME_IT":"Pakistan","NAME_JA":"パキスタン","NAME_KO":"파키스탄","NAME_NL":"Pakistan","NAME_PL":"Pakistan","NAME_PT":"Paquistão","NAME_RU":"Пакистан","NAME_SV":"Pakistan","NAME_TR":"Pakistan","NAME_UK":"Пакистан","NAME_UR":"پاکستان","NAME_VI":"Pakistan","NAME_ZH":"巴基斯坦","NAME_ZHT":"巴基斯坦","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[53.08564453125001,16.648388671874997],[53.60986328125,16.759960937499997],[54.06816406250002,17.005517578124994],[55.06416015625001,17.03891601562499],[55.479101562500006,17.84326171875],[56.27031250000002,17.95078124999999],[56.55078125,18.165966796874997],[56.65507812500002,18.587353515624997],[57.17656250000002,18.902587890625],[57.811621093750006,19.01708984375],[57.71513671875002,19.60693359375],[57.86181640625,20.244140625],[58.474218750000006,20.406884765624994],[58.89570312500001,21.11279296875],[59.37148437500002,21.498828125000003],[59.80000000000001,22.219921874999997],[58.57802734375002,23.643457031249994],[57.219824218750006,23.922753906249994],[56.640625,24.47031249999999],[56.38798828125002,24.979199218749997],[56.06386718750002,24.73876953125],[55.79570312500002,24.868115234374997],[55.760839843750006,24.24267578125],[55.19990234375001,23.03476562499999],[55.18583984375002,22.7041015625],[55.64101562500002,22.001855468749994],[54.97734375000002,19.99594726562499],[53.66689453125002,19.559130859375003],[51.977636718750006,18.996142578125003],[52.72919921875001,17.30039062499999],[53.08564453125001,16.648388671874997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"Oman","SOV_A3":"OMN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Oman","ADM0_A3":"OMN","GEOU_DIF":0,"GEOUNIT":"Oman","GU_A3":"OMN","SU_DIF":0,"SUBUNIT":"Oman","SU_A3":"OMN","BRK_DIFF":0,"NAME":"Oman","NAME_LONG":"Oman","BRK_A3":"OMN","BRK_NAME":"Oman","BRK_GROUP":"","ABBREV":"Oman","POSTAL":"OM","FORMAL_EN":"Sultanate of Oman","FORMAL_FR":"","NAME_CIAWF":"Oman","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Oman","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":6,"POP_EST":4974986,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":76331,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"MU","ISO_A2":"OM","ISO_A2_EH":"OM","ISO_A3":"OMN","ISO_A3_EH":"OMN","ISO_N3":"512","ISO_N3_EH":"512","UN_A3":"512","WB_A2":"OM","WB_A3":"OMN","WOE_ID":23424898,"WOE_ID_EH":23424898,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"OMN","ADM0_DIFF":"","ADM0_TLC":"OMN","ADM0_A3_US":"OMN","ADM0_A3_FR":"OMN","ADM0_A3_RU":"OMN","ADM0_A3_ES":"OMN","ADM0_A3_CN":"OMN","ADM0_A3_TW":"OMN","ADM0_A3_IN":"OMN","ADM0_A3_NP":"OMN","ADM0_A3_PK":"OMN","ADM0_A3_DE":"OMN","ADM0_A3_GB":"OMN","ADM0_A3_BR":"OMN","ADM0_A3_IL":"OMN","ADM0_A3_PS":"OMN","ADM0_A3_SA":"OMN","ADM0_A3_EG":"OMN","ADM0_A3_MA":"OMN","ADM0_A3_PT":"OMN","ADM0_A3_AR":"OMN","ADM0_A3_JP":"OMN","ADM0_A3_KO":"OMN","ADM0_A3_VN":"OMN","ADM0_A3_TR":"OMN","ADM0_A3_ID":"OMN","ADM0_A3_PL":"OMN","ADM0_A3_GR":"OMN","ADM0_A3_IT":"OMN","ADM0_A3_NL":"OMN","ADM0_A3_SE":"OMN","ADM0_A3_BD":"OMN","ADM0_A3_UA":"OMN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":57.336553,"LABEL_Y":22.120427,"NE_ID":1159321151,"WIKIDATAID":"Q842","NAME_AR":"سلطنة عمان","NAME_BN":"ওমান","NAME_DE":"Oman","NAME_EN":"Oman","NAME_ES":"Omán","NAME_FA":"عمان","NAME_FR":"Oman","NAME_EL":"Ομάν","NAME_HE":"עומאן","NAME_HI":"ओमान","NAME_HU":"Omán","NAME_ID":"Oman","NAME_IT":"Oman","NAME_JA":"オマーン","NAME_KO":"오만","NAME_NL":"Oman","NAME_PL":"Oman","NAME_PT":"Omã","NAME_RU":"Оман","NAME_SV":"Oman","NAME_TR":"Umman","NAME_UK":"Оман","NAME_UR":"عمان","NAME_VI":"Oman","NAME_ZH":"阿曼","NAME_ZHT":"阿曼","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[20.622167968750006,69.036865234375],[21.62177734375001,69.270703125],[22.410937500000017,68.719873046875],[23.85400390625,68.805908203125],[24.94140625,68.59326171875],[25.748339843750017,68.99013671875],[26.011523437500017,69.65263671875],[26.525390625,69.9150390625],[27.889941406250017,70.061669921875],[29.1416015625,69.671435546875],[28.9658203125,69.02197265625],[30.869726562500006,69.783447265625],[29.792089843750006,69.727880859375],[29.601367187500017,69.9767578125],[30.944140625000017,70.2744140625],[29.102343750000017,70.8607421875],[27.597070312500023,71.09130859375],[25.768164062500006,70.853173828125],[24.658007812500017,71.001025390625],[24.420019531250006,70.702001953125],[23.046484375000006,70.10185546875],[22.6845703125,70.374755859375],[21.400390625,70.174462890625],[21.1630859375,69.889501953125],[20.068945312500006,69.883447265625],[18.29316406250001,69.47509765625],[18.101464843750023,69.156298828125],[16.65185546875,68.62578125],[16.064550781250006,68.19990234375],[14.798925781250006,67.809326171875],[14.754980468750006,67.4990234375],[13.104687500000011,66.539404296875],[12.97607421875,66.019189453125],[12.272851562500023,65.5681640625],[12.15966796875,65.178955078125],[11.349902343750017,64.905908203125],[9.7080078125,63.864892578124994],[9.696875000000006,63.624560546875],[8.398144531250011,63.535107421875],[8.1005859375,63.090966796874994],[7.008496093750011,62.957666015624994],[7.283789062500006,62.602294921875],[6.352929687500023,62.6111328125],[5.533300781250006,62.310888671875],[4.927832031250006,61.710693359375],[5.049121093750017,60.70751953125],[5.244042968750023,60.569580078125],[5.131640625000017,59.226464843749994],[5.84521484375,59.353466796875],[5.706835937500017,58.5236328125],[7.0048828125,58.02421875],[8.166113281250006,58.1453125],[9.618457031250017,58.946044921875],[10.83447265625,59.183935546875],[11.388281250000006,59.036523437499994],[11.798144531250017,59.289892578125],[11.680761718750006,59.59228515625],[12.486132812500017,60.106787109375],[12.588671875000017,60.450732421875],[12.294140625000011,61.002685546875],[12.880761718750023,61.352294921875],[12.155371093750006,61.720751953125],[12.303515625000017,62.285595703125],[12.218164062500023,63.000634765624994],[11.999902343750023,63.29169921875],[12.662500000000023,63.940478515625],[13.960546875000006,64.014013671875],[14.07763671875,64.464013671875],[13.650292968750023,64.58154296875],[14.479687500000011,65.30146484375],[14.543261718750017,66.129345703125],[15.422949218750006,66.48984375],[16.40351562500001,67.05498046875],[16.12744140625,67.425830078125],[17.324609375000023,68.10380859375],[17.91669921875001,67.964892578125],[18.37861328125001,68.56240234375],[19.969824218750006,68.356396484375],[20.622167968750006,69.036865234375]]],[[[21.60810546875001,78.595703125],[20.227929687500023,78.47783203125],[21.6083984375,77.916064453125],[22.05683593750001,77.501171875],[23.841210937500023,77.49775390625],[24.23828125,77.89853515625],[23.11669921875,77.99150390625],[21.60810546875001,78.595703125]]],[[[20.897851562500023,80.249951171875],[18.343847656250006,80.0595703125],[18.725000000000023,79.7607421875],[20.861132812500017,79.3978515625],[23.94775390625,79.194287109375],[25.641210937500006,79.40302734375],[27.198632812500023,79.906591796875],[26.86083984375,80.160009765625],[22.450781250000006,80.40224609375],[20.897851562500023,80.249951171875]]],[[[16.786718750000006,79.90673828125],[15.816113281250011,79.6818359375],[13.383593750000017,79.48076171875],[12.753515625000006,79.77578125],[10.865917968750011,79.79658203125],[11.773828125000023,78.71640625],[13.680566406250023,78.028125],[14.920800781250023,77.688818359375],[14.365820312500006,77.23447265625],[16.700488281250017,76.579296875],[18.439257812500017,78.025048828125],[19.76875000000001,78.622705078125],[21.388769531250006,78.7404296875],[20.45820312500001,79.129248046875],[19.089453125000006,79.15703125],[18.581445312500023,79.57158203125],[16.786718750000006,79.90673828125]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Norway","SOV_A3":"NOR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"","ADMIN":"Norway","ADM0_A3":"NOR","GEOU_DIF":0,"GEOUNIT":"Norway","GU_A3":"NOR","SU_DIF":0,"SUBUNIT":"Norway","SU_A3":"NOR","BRK_DIFF":0,"NAME":"Norway","NAME_LONG":"Norway","BRK_A3":"NOR","BRK_NAME":"Norway","BRK_GROUP":"","ABBREV":"Nor.","POSTAL":"N","FORMAL_EN":"Kingdom of Norway","FORMAL_FR":"","NAME_CIAWF":"Norway","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Norway","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":8,"MAPCOLOR13":12,"POP_EST":5347896,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":403336,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"-99","ISO_A2":"-99","ISO_A2_EH":"NO","ISO_A3":"-99","ISO_A3_EH":"NOR","ISO_N3":"-99","ISO_N3_EH":"578","UN_A3":"-99","WB_A2":"-99","WB_A3":"-99","WOE_ID":-90,"WOE_ID_EH":23424910,"WOE_NOTE":"Does not include Svalbard, Jan Mayen, or Bouvet Islands (28289410).","ADM0_ISO":"NOR","ADM0_DIFF":"","ADM0_TLC":"NOR","ADM0_A3_US":"NOR","ADM0_A3_FR":"NOR","ADM0_A3_RU":"NOR","ADM0_A3_ES":"NOR","ADM0_A3_CN":"NOR","ADM0_A3_TW":"NOR","ADM0_A3_IN":"NOR","ADM0_A3_NP":"NOR","ADM0_A3_PK":"NOR","ADM0_A3_DE":"NOR","ADM0_A3_GB":"NOR","ADM0_A3_BR":"NOR","ADM0_A3_IL":"NOR","ADM0_A3_PS":"NOR","ADM0_A3_SA":"NOR","ADM0_A3_EG":"NOR","ADM0_A3_MA":"NOR","ADM0_A3_PT":"NOR","ADM0_A3_AR":"NOR","ADM0_A3_JP":"NOR","ADM0_A3_KO":"NOR","ADM0_A3_VN":"NOR","ADM0_A3_TR":"NOR","ADM0_A3_ID":"NOR","ADM0_A3_PL":"NOR","ADM0_A3_GR":"NOR","ADM0_A3_IT":"NOR","ADM0_A3_NL":"NOR","ADM0_A3_SE":"NOR","ADM0_A3_BD":"NOR","ADM0_A3_UA":"NOR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7,"LABEL_X":9.679975,"LABEL_Y":61.357092,"NE_ID":1159321109,"WIKIDATAID":"Q20","NAME_AR":"النرويج","NAME_BN":"নরওয়ে","NAME_DE":"Norwegen","NAME_EN":"Norway","NAME_ES":"Noruega","NAME_FA":"نروژ","NAME_FR":"Norvège","NAME_EL":"Νορβηγία","NAME_HE":"נורווגיה","NAME_HI":"नॉर्वे","NAME_HU":"Norvégia","NAME_ID":"Norwegia","NAME_IT":"Norvegia","NAME_JA":"ノルウェー","NAME_KO":"노르웨이","NAME_NL":"Noorwegen","NAME_PL":"Norwegia","NAME_PT":"Noruega","NAME_RU":"Норвегия","NAME_SV":"Norge","NAME_TR":"Norveç","NAME_UK":"Норвегія","NAME_UR":"ناروے","NAME_VI":"Na Uy","NAME_ZH":"挪威","NAME_ZHT":"挪威","FCLASS_ISO":"Unrecognized","TLC_DIFF":"","FCLASS_TLC":"Unrecognized","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[128.37460937500003,38.623437499999994],[127.7861328125,39.084130859374994],[127.39453125,39.207910156249994],[127.56816406250005,39.781982421875],[128.30449218750005,40.035937499999996],[129.70869140625,40.857324218749994],[129.75634765625,41.712255859375],[130.45751953125,42.301708984375],[130.68730468750005,42.302539062499996],[130.52695312500003,42.535400390625],[130.24033203125003,42.891796875],[129.89824218750005,42.99814453125],[129.7197265625,42.474999999999994],[129.313671875,42.41357421875],[128.92343750000003,42.038232421874994],[128.04521484375005,41.9875],[128.29091796875002,41.562792968749996],[128.11123046875002,41.3892578125],[127.1796875,41.53134765625],[126.90351562500001,41.781054687499996],[125.98906249999999,40.904638671875],[124.88935546875001,40.459814453125],[124.36210937499999,40.004052734374994],[124.55742187499999,39.790576171874996],[125.36083984375,39.526611328125],[125.40966796875,39.288378906249996],[125.0673828125,38.55673828125],[124.69091796875,38.129199218749996],[125.19316406249999,38.03779296875],[125.44931640625003,37.730224609375],[125.94169921874999,37.873681640624994],[126.63388671875003,37.7818359375],[127.16953125000003,38.304541015625],[128.03896484375002,38.308544921875],[128.37460937500003,38.623437499999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"North Korea","SOV_A3":"PRK","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"North Korea","ADM0_A3":"PRK","GEOU_DIF":0,"GEOUNIT":"North Korea","GU_A3":"PRK","SU_DIF":0,"SUBUNIT":"North Korea","SU_A3":"PRK","BRK_DIFF":0,"NAME":"North Korea","NAME_LONG":"Dem. Rep. Korea","BRK_A3":"PRK","BRK_NAME":"Dem. Rep. Korea","BRK_GROUP":"","ABBREV":"N.K.","POSTAL":"KP","FORMAL_EN":"Democratic People's Republic of Korea","FORMAL_FR":"","NAME_CIAWF":"Korea, North","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Korea, Dem. Rep.","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":5,"MAPCOLOR9":3,"MAPCOLOR13":9,"POP_EST":25666161,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":40000,"GDP_YEAR":2016,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"KN","ISO_A2":"KP","ISO_A2_EH":"KP","ISO_A3":"PRK","ISO_A3_EH":"PRK","ISO_N3":"408","ISO_N3_EH":"408","UN_A3":"408","WB_A2":"KP","WB_A3":"PRK","WOE_ID":23424865,"WOE_ID_EH":23424865,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PRK","ADM0_DIFF":"","ADM0_TLC":"PRK","ADM0_A3_US":"PRK","ADM0_A3_FR":"PRK","ADM0_A3_RU":"PRK","ADM0_A3_ES":"PRK","ADM0_A3_CN":"PRK","ADM0_A3_TW":"PRK","ADM0_A3_IN":"PRK","ADM0_A3_NP":"PRK","ADM0_A3_PK":"PRK","ADM0_A3_DE":"PRK","ADM0_A3_GB":"PRK","ADM0_A3_BR":"PRK","ADM0_A3_IL":"PRK","ADM0_A3_PS":"PRK","ADM0_A3_SA":"PRK","ADM0_A3_EG":"PRK","ADM0_A3_MA":"PRK","ADM0_A3_PT":"PRK","ADM0_A3_AR":"PRK","ADM0_A3_JP":"PRK","ADM0_A3_KO":"PRK","ADM0_A3_VN":"PRK","ADM0_A3_TR":"PRK","ADM0_A3_ID":"PRK","ADM0_A3_PL":"PRK","ADM0_A3_GR":"PRK","ADM0_A3_IT":"PRK","ADM0_A3_NL":"PRK","ADM0_A3_SE":"PRK","ADM0_A3_BD":"PRK","ADM0_A3_UA":"PRK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":11,"LONG_LEN":15,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":126.444516,"LABEL_Y":39.885252,"NE_ID":1159321181,"WIKIDATAID":"Q423","NAME_AR":"كوريا الشمالية","NAME_BN":"উত্তর কোরিয়া","NAME_DE":"Nordkorea","NAME_EN":"North Korea","NAME_ES":"Corea del Norte","NAME_FA":"کره شمالی","NAME_FR":"Corée du Nord","NAME_EL":"Βόρεια Κορέα","NAME_HE":"קוריאה הצפונית","NAME_HI":"उत्तर कोरिया","NAME_HU":"Észak-Korea","NAME_ID":"Korea Utara","NAME_IT":"Corea del Nord","NAME_JA":"朝鮮民主主義人民共和国","NAME_KO":"조선민주주의인민공화국","NAME_NL":"Noord-Korea","NAME_PL":"Korea Północna","NAME_PT":"Coreia do Norte","NAME_RU":"КНДР","NAME_SV":"Nordkorea","NAME_TR":"Kuzey Kore","NAME_UK":"Корейська Народно-Демократична Республіка","NAME_UR":"شمالی کوریا","NAME_VI":"Cộng hòa Dân chủ Nhân dân Triều Tiên","NAME_ZH":"朝鲜民主主义人民共和国","NAME_ZHT":"朝鮮民主主義人民共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[13.606347656250023,13.70458984375],[13.323828125000006,13.670849609374997],[12.65478515625,13.326562499999994],[12.463183593750017,13.09375],[11.411914062500017,13.353613281249991],[10.958886718750023,13.371533203124997],[10.184667968750006,13.270117187499991],[9.615917968750011,12.810644531249991],[8.750585937500006,12.908154296874997],[8.095019531250017,13.291162109374994],[7.788671875000006,13.337890625],[7.056738281250006,13.000195312499997],[6.804296875000006,13.107666015625],[6.386328125000006,13.603613281249991],[5.491992187500017,13.872851562500003],[4.823339843750006,13.759765625],[4.147558593750006,13.457714843749997],[3.9478515625000057,12.775048828124994],[3.6466796875000114,12.529980468749997],[3.5954101562500114,11.6962890625],[3.48779296875,11.395410156249994],[3.7164062500000057,11.07958984375],[3.83447265625,10.607421875],[3.5765625000000227,10.268359374999989],[3.5572265625000057,9.907324218749991],[3.3251953125,9.778466796874994],[3.044921875,9.083837890624991],[2.7748046875000227,9.048535156249997],[2.68603515625,7.873730468749997],[2.7746093750000114,6.711718749999989],[2.7064453125000227,6.3692382812499915],[4.125878906250023,6.411376953125],[4.431347656250011,6.348583984374997],[4.861035156250011,6.026318359374997],[5.232421875,5.483789062499994],[5.587792968750023,4.647216796875],[6.076562500000023,4.2906249999999915],[6.757031250000011,4.343554687499989],[7.154687500000023,4.514404296875],[8.293066406250006,4.5576171875],[8.555859375000011,4.7552246093749915],[8.800976562500011,5.197460937499997],[9.060156250000006,6.009082031249989],[10.1435546875,6.9964355468749915],[10.606250000000017,7.0630859374999915],[11.032519531250017,6.697900390624994],[11.1533203125,6.437939453124997],[11.551660156250023,6.697265625],[11.767382812500017,7.272265624999989],[12.016015625000023,7.589746093749994],[12.403515625000011,8.595556640624991],[12.806542968750023,8.886621093749994],[12.929492187500017,9.42626953125],[13.175488281250011,9.539648437499991],[13.269921875000023,10.036181640624989],[13.535351562500011,10.605078124999991],[13.89208984375,11.140087890624997],[14.559765625000011,11.492285156249991],[14.627148437500011,12.108691406249989],[14.197460937500011,12.3837890625],[14.06396484375,13.078515624999994],[13.606347656250023,13.70458984375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Nigeria","SOV_A3":"NGA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Nigeria","ADM0_A3":"NGA","GEOU_DIF":0,"GEOUNIT":"Nigeria","GU_A3":"NGA","SU_DIF":0,"SUBUNIT":"Nigeria","SU_A3":"NGA","BRK_DIFF":0,"NAME":"Nigeria","NAME_LONG":"Nigeria","BRK_A3":"NGA","BRK_NAME":"Nigeria","BRK_GROUP":"","ABBREV":"Nigeria","POSTAL":"NG","FORMAL_EN":"Federal Republic of Nigeria","FORMAL_FR":"","NAME_CIAWF":"Nigeria","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Nigeria","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":2,"POP_EST":200963599,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":448120,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"NI","ISO_A2":"NG","ISO_A2_EH":"NG","ISO_A3":"NGA","ISO_A3_EH":"NGA","ISO_N3":"566","ISO_N3_EH":"566","UN_A3":"566","WB_A2":"NG","WB_A3":"NGA","WOE_ID":23424908,"WOE_ID_EH":23424908,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NGA","ADM0_DIFF":"","ADM0_TLC":"NGA","ADM0_A3_US":"NGA","ADM0_A3_FR":"NGA","ADM0_A3_RU":"NGA","ADM0_A3_ES":"NGA","ADM0_A3_CN":"NGA","ADM0_A3_TW":"NGA","ADM0_A3_IN":"NGA","ADM0_A3_NP":"NGA","ADM0_A3_PK":"NGA","ADM0_A3_DE":"NGA","ADM0_A3_GB":"NGA","ADM0_A3_BR":"NGA","ADM0_A3_IL":"NGA","ADM0_A3_PS":"NGA","ADM0_A3_SA":"NGA","ADM0_A3_EG":"NGA","ADM0_A3_MA":"NGA","ADM0_A3_PT":"NGA","ADM0_A3_AR":"NGA","ADM0_A3_JP":"NGA","ADM0_A3_KO":"NGA","ADM0_A3_VN":"NGA","ADM0_A3_TR":"NGA","ADM0_A3_ID":"NGA","ADM0_A3_PL":"NGA","ADM0_A3_GR":"NGA","ADM0_A3_IT":"NGA","ADM0_A3_NL":"NGA","ADM0_A3_SE":"NGA","ADM0_A3_BD":"NGA","ADM0_A3_UA":"NGA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":7.50322,"LABEL_Y":9.439799,"NE_ID":1159321089,"WIKIDATAID":"Q1033","NAME_AR":"نيجيريا","NAME_BN":"নাইজেরিয়া","NAME_DE":"Nigeria","NAME_EN":"Nigeria","NAME_ES":"Nigeria","NAME_FA":"نیجریه","NAME_FR":"Nigeria","NAME_EL":"Νιγηρία","NAME_HE":"ניגריה","NAME_HI":"नाईजीरिया","NAME_HU":"Nigéria","NAME_ID":"Nigeria","NAME_IT":"Nigeria","NAME_JA":"ナイジェリア","NAME_KO":"나이지리아","NAME_NL":"Nigeria","NAME_PL":"Nigeria","NAME_PT":"Nigéria","NAME_RU":"Нигерия","NAME_SV":"Nigeria","NAME_TR":"Nijerya","NAME_UK":"Нігерія","NAME_UR":"نائجیریا","NAME_VI":"Nigeria","NAME_ZH":"尼日利亚","NAME_ZHT":"奈及利亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[13.606347656250023,13.70458984375],[13.4482421875,14.380664062500003],[14.367968750000017,15.750146484374994],[15.474316406250011,16.908398437499997],[15.735058593750011,19.904052734375],[15.948828125000006,20.303173828124997],[15.587109375000011,20.733300781249994],[15.607324218750023,20.954394531250003],[15.181835937500011,21.523388671874997],[15.172265625000023,21.922070312499997],[14.97900390625,22.99619140624999],[14.230761718750017,22.618457031250003],[13.481250000000017,23.18017578125],[11.967871093750006,23.517871093750003],[9.378710937500017,21.991406249999997],[7.481738281250017,20.873095703125003],[5.836621093750011,19.479150390624994],[4.227636718750006,19.142773437499997],[4.234667968750017,16.996386718750003],[4.121289062500011,16.357714843750003],[3.876953125,15.755273437499994],[3.5042968750000227,15.356347656249994],[1.3001953125000227,15.272265625000003],[0.9600585937500057,14.986914062499991],[0.21748046875001137,14.911474609374991],[0.16386718750001705,14.497216796874994],[0.6181640625,13.703417968750003],[0.9777343750000114,13.551953124999997],[0.9873046875,13.041894531249994],[1.56494140625,12.635400390624994],[2.0738281250000057,12.713964843749991],[2.0914062500000057,12.277978515624994],[2.38916015625,11.897070312499991],[2.366015625000017,12.221923828125],[2.8781250000000114,12.367724609374989],[3.5954101562500114,11.6962890625],[3.6466796875000114,12.529980468749997],[3.9478515625000057,12.775048828124994],[4.147558593750006,13.457714843749997],[4.823339843750006,13.759765625],[5.491992187500017,13.872851562500003],[6.386328125000006,13.603613281249991],[6.804296875000006,13.107666015625],[7.056738281250006,13.000195312499997],[7.788671875000006,13.337890625],[8.095019531250017,13.291162109374994],[8.750585937500006,12.908154296874997],[9.615917968750011,12.810644531249991],[10.184667968750006,13.270117187499991],[10.958886718750023,13.371533203124997],[11.411914062500017,13.353613281249991],[12.463183593750017,13.09375],[12.65478515625,13.326562499999994],[13.323828125000006,13.670849609374997],[13.606347656250023,13.70458984375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Niger","SOV_A3":"NER","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Niger","ADM0_A3":"NER","GEOU_DIF":0,"GEOUNIT":"Niger","GU_A3":"NER","SU_DIF":0,"SUBUNIT":"Niger","SU_A3":"NER","BRK_DIFF":0,"NAME":"Niger","NAME_LONG":"Niger","BRK_A3":"NER","BRK_NAME":"Niger","BRK_GROUP":"","ABBREV":"Niger","POSTAL":"NE","FORMAL_EN":"Republic of Niger","FORMAL_FR":"","NAME_CIAWF":"Niger","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Niger","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":3,"MAPCOLOR13":13,"POP_EST":23310715,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":12911,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"NG","ISO_A2":"NE","ISO_A2_EH":"NE","ISO_A3":"NER","ISO_A3_EH":"NER","ISO_N3":"562","ISO_N3_EH":"562","UN_A3":"562","WB_A2":"NE","WB_A3":"NER","WOE_ID":23424906,"WOE_ID_EH":23424906,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NER","ADM0_DIFF":"","ADM0_TLC":"NER","ADM0_A3_US":"NER","ADM0_A3_FR":"NER","ADM0_A3_RU":"NER","ADM0_A3_ES":"NER","ADM0_A3_CN":"NER","ADM0_A3_TW":"NER","ADM0_A3_IN":"NER","ADM0_A3_NP":"NER","ADM0_A3_PK":"NER","ADM0_A3_DE":"NER","ADM0_A3_GB":"NER","ADM0_A3_BR":"NER","ADM0_A3_IL":"NER","ADM0_A3_PS":"NER","ADM0_A3_SA":"NER","ADM0_A3_EG":"NER","ADM0_A3_MA":"NER","ADM0_A3_PT":"NER","ADM0_A3_AR":"NER","ADM0_A3_JP":"NER","ADM0_A3_KO":"NER","ADM0_A3_VN":"NER","ADM0_A3_TR":"NER","ADM0_A3_ID":"NER","ADM0_A3_PL":"NER","ADM0_A3_GR":"NER","ADM0_A3_IT":"NER","ADM0_A3_NL":"NER","ADM0_A3_SE":"NER","ADM0_A3_BD":"NER","ADM0_A3_UA":"NER","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":9.504356,"LABEL_Y":17.446195,"NE_ID":1159321087,"WIKIDATAID":"Q1032","NAME_AR":"النيجر","NAME_BN":"নাইজার","NAME_DE":"Niger","NAME_EN":"Niger","NAME_ES":"Níger","NAME_FA":"نیجر","NAME_FR":"Niger","NAME_EL":"Νίγηρας","NAME_HE":"ניז'ר","NAME_HI":"नाइजर","NAME_HU":"Niger","NAME_ID":"Niger","NAME_IT":"Niger","NAME_JA":"ニジェール","NAME_KO":"니제르","NAME_NL":"Niger","NAME_PL":"Niger","NAME_PT":"Níger","NAME_RU":"Нигер","NAME_SV":"Niger","NAME_TR":"Nijer","NAME_UK":"Нігер","NAME_UR":"نائجر","NAME_VI":"Niger","NAME_ZH":"尼日尔","NAME_ZHT":"尼日","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-83.15751953124999,14.993066406249994],[-83.86728515624999,14.794482421875003],[-84.645947265625,14.661083984374997],[-84.98515624999999,14.75244140625],[-85.17949218749999,14.343310546875003],[-85.78671874999999,13.844433593749997],[-86.15122070312499,13.994580078124997],[-86.33173828125,13.770068359375003],[-86.733642578125,13.763476562500003],[-86.710693359375,13.313378906249994],[-87.05917968749999,12.991455078125],[-87.33725585937499,12.979248046875],[-87.66752929687499,12.903564453125],[-86.755615234375,12.156640624999994],[-86.468896484375,11.73828125],[-85.7443359375,11.062109374999991],[-85.62138671874999,11.184472656249994],[-84.9091796875,10.9453125],[-84.348291015625,10.979882812499994],[-84.168359375,10.780371093749991],[-83.6419921875,10.917236328125],[-83.86787109375,11.300048828125],[-83.6517578125,11.642041015624997],[-83.76933593749999,11.931640625],[-83.5109375,12.411816406249997],[-83.567333984375,13.3203125],[-83.4123046875,13.996484374999994],[-83.187744140625,14.340087890625],[-83.29921875,14.7490234375],[-83.15751953124999,14.993066406249994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Nicaragua","SOV_A3":"NIC","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Nicaragua","ADM0_A3":"NIC","GEOU_DIF":0,"GEOUNIT":"Nicaragua","GU_A3":"NIC","SU_DIF":0,"SUBUNIT":"Nicaragua","SU_A3":"NIC","BRK_DIFF":0,"NAME":"Nicaragua","NAME_LONG":"Nicaragua","BRK_A3":"NIC","BRK_NAME":"Nicaragua","BRK_GROUP":"","ABBREV":"Nic.","POSTAL":"NI","FORMAL_EN":"Republic of Nicaragua","FORMAL_FR":"","NAME_CIAWF":"Nicaragua","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Nicaragua","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":9,"POP_EST":6545502,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":12520,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"NU","ISO_A2":"NI","ISO_A2_EH":"NI","ISO_A3":"NIC","ISO_A3_EH":"NIC","ISO_N3":"558","ISO_N3_EH":"558","UN_A3":"558","WB_A2":"NI","WB_A3":"NIC","WOE_ID":23424915,"WOE_ID_EH":23424915,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NIC","ADM0_DIFF":"","ADM0_TLC":"NIC","ADM0_A3_US":"NIC","ADM0_A3_FR":"NIC","ADM0_A3_RU":"NIC","ADM0_A3_ES":"NIC","ADM0_A3_CN":"NIC","ADM0_A3_TW":"NIC","ADM0_A3_IN":"NIC","ADM0_A3_NP":"NIC","ADM0_A3_PK":"NIC","ADM0_A3_DE":"NIC","ADM0_A3_GB":"NIC","ADM0_A3_BR":"NIC","ADM0_A3_IL":"NIC","ADM0_A3_PS":"NIC","ADM0_A3_SA":"NIC","ADM0_A3_EG":"NIC","ADM0_A3_MA":"NIC","ADM0_A3_PT":"NIC","ADM0_A3_AR":"NIC","ADM0_A3_JP":"NIC","ADM0_A3_KO":"NIC","ADM0_A3_VN":"NIC","ADM0_A3_TR":"NIC","ADM0_A3_ID":"NIC","ADM0_A3_PL":"NIC","ADM0_A3_GR":"NIC","ADM0_A3_IT":"NIC","ADM0_A3_NL":"NIC","ADM0_A3_SE":"NIC","ADM0_A3_BD":"NIC","ADM0_A3_UA":"NIC","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-85.069347,"LABEL_Y":12.670697,"NE_ID":1159321091,"WIKIDATAID":"Q811","NAME_AR":"نيكاراغوا","NAME_BN":"নিকারাগুয়া","NAME_DE":"Nicaragua","NAME_EN":"Nicaragua","NAME_ES":"Nicaragua","NAME_FA":"نیکاراگوئه","NAME_FR":"Nicaragua","NAME_EL":"Νικαράγουα","NAME_HE":"ניקרגואה","NAME_HI":"निकारागुआ","NAME_HU":"Nicaragua","NAME_ID":"Nikaragua","NAME_IT":"Nicaragua","NAME_JA":"ニカラグア","NAME_KO":"니카라과","NAME_NL":"Nicaragua","NAME_PL":"Nikaragua","NAME_PT":"Nicarágua","NAME_RU":"Никарагуа","NAME_SV":"Nicaragua","NAME_TR":"Nikaragua","NAME_UK":"Нікарагуа","NAME_UR":"نکاراگوا","NAME_VI":"Nicaragua","NAME_ZH":"尼加拉瓜","NAME_ZHT":"尼加拉瓜","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[173.11533203125003,-41.279296875],[172.98867187500002,-40.848242187500006],[172.640625,-40.51826171875001],[172.13945312500005,-40.947265625],[172.0107421875,-41.444726562499994],[171.48623046875002,-41.79472656250002],[171.25703125,-42.46533203125],[170.74160156250002,-42.927343750000006],[170.30283203125003,-43.10761718750001],[169.66152343750002,-43.591210937499994],[168.80644531250005,-43.99199218750002],[168.36660156250002,-44.08203125],[167.78701171875002,-44.59501953125002],[167.19453125,-44.963476562500006],[166.73398437500003,-45.543554687500006],[166.73154296875003,-46.197851562500006],[167.68222656250003,-46.192968750000006],[168.18916015625,-46.362207031249994],[168.38212890625005,-46.605371093749994],[169.68662109375003,-46.551660156249994],[170.70058593750002,-45.68427734375001],[171.11328125,-45.03925781250001],[171.442578125,-44.135839843750006],[172.38525390625,-43.82958984375],[172.92060546875,-43.89140625000002],[172.71855468750005,-43.2587890625],[173.22119140625,-42.9765625],[173.5451171875,-42.517968749999994],[174.28310546875002,-41.740624999999994],[174.09238281250003,-41.50517578125002],[174.30253906250005,-41.01953125],[173.73789062500003,-40.98896484375001],[173.11533203125003,-41.279296875]]],[[[173.26943359375002,-34.93476562500001],[173.11669921875,-35.20527343750001],[173.94511718750005,-36.175878906250006],[174.44687500000003,-36.45087890625001],[174.4755859375,-36.94189453125],[174.78203125000005,-36.94375000000001],[174.72919921875,-37.44873046875],[174.92802734375005,-37.8044921875],[174.59736328125,-38.785058593749994],[173.84433593750003,-39.13935546875001],[173.93437500000005,-39.50908203125002],[175.00927734375,-39.9521484375],[175.2541015625,-40.28935546875002],[175.16250000000002,-40.62158203125],[174.63535156250003,-41.289453124999994],[175.309765625,-41.61064453125002],[175.98291015625,-41.213281249999994],[176.84218750000002,-40.157812500000006],[177.10986328125,-39.67314453125002],[176.9541015625,-39.367578124999994],[177.40751953125005,-39.081152343750006],[177.96562500000005,-39.142480468749994],[177.97617187500003,-38.722265625000006],[178.26767578125003,-38.551171874999994],[178.53623046875003,-37.69208984375001],[178.00917968750002,-37.55488281250001],[177.3359375,-37.990820312500006],[176.1083984375,-37.645117187500006],[175.876171875,-36.95771484375001],[175.46083984375002,-36.475683593750006],[175.29951171875,-36.993261718750006],[174.72246093750005,-36.84121093750001],[174.80214843750002,-36.30947265625001],[174.39101562500002,-35.77373046875],[174.54345703125,-35.58203125],[174.3203125,-35.246679687500006],[173.8439453125,-35.02626953125001],[173.26943359375002,-34.93476562500001]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"New Zealand","SOV_A3":"NZ1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"New Zealand","ADM0_A3":"NZL","GEOU_DIF":0,"GEOUNIT":"New Zealand","GU_A3":"NZL","SU_DIF":0,"SUBUNIT":"New Zealand","SU_A3":"NZL","BRK_DIFF":0,"NAME":"New Zealand","NAME_LONG":"New Zealand","BRK_A3":"NZL","BRK_NAME":"New Zealand","BRK_GROUP":"","ABBREV":"N.Z.","POSTAL":"NZ","FORMAL_EN":"New Zealand","FORMAL_FR":"","NAME_CIAWF":"New Zealand","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"New Zealand","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":4,"POP_EST":4917000,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":206928,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"NZ","ISO_A2":"NZ","ISO_A2_EH":"NZ","ISO_A3":"NZL","ISO_A3_EH":"NZL","ISO_N3":"554","ISO_N3_EH":"554","UN_A3":"554","WB_A2":"NZ","WB_A3":"NZL","WOE_ID":23424916,"WOE_ID_EH":23424916,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NZL","ADM0_DIFF":"","ADM0_TLC":"NZL","ADM0_A3_US":"NZL","ADM0_A3_FR":"NZL","ADM0_A3_RU":"NZL","ADM0_A3_ES":"NZL","ADM0_A3_CN":"NZL","ADM0_A3_TW":"NZL","ADM0_A3_IN":"NZL","ADM0_A3_NP":"NZL","ADM0_A3_PK":"NZL","ADM0_A3_DE":"NZL","ADM0_A3_GB":"NZL","ADM0_A3_BR":"NZL","ADM0_A3_IL":"NZL","ADM0_A3_PS":"NZL","ADM0_A3_SA":"NZL","ADM0_A3_EG":"NZL","ADM0_A3_MA":"NZL","ADM0_A3_PT":"NZL","ADM0_A3_AR":"NZL","ADM0_A3_JP":"NZL","ADM0_A3_KO":"NZL","ADM0_A3_VN":"NZL","ADM0_A3_TR":"NZL","ADM0_A3_ID":"NZL","ADM0_A3_PL":"NZL","ADM0_A3_GR":"NZL","ADM0_A3_IT":"NZL","ADM0_A3_NL":"NZL","ADM0_A3_SE":"NZL","ADM0_A3_BD":"NZL","ADM0_A3_UA":"NZL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Australia and New Zealand","REGION_WB":"East Asia & Pacific","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":6.7,"LABEL_X":172.787,"LABEL_Y":-39.759,"NE_ID":1159321135,"WIKIDATAID":"Q664","NAME_AR":"نيوزيلندا","NAME_BN":"নিউজিল্যান্ড","NAME_DE":"Neuseeland","NAME_EN":"New Zealand","NAME_ES":"Nueva Zelanda","NAME_FA":"نیوزیلند","NAME_FR":"Nouvelle-Zélande","NAME_EL":"Νέα Ζηλανδία","NAME_HE":"ניו זילנד","NAME_HI":"न्यूज़ीलैण्ड","NAME_HU":"Új-Zéland","NAME_ID":"Selandia Baru","NAME_IT":"Nuova Zelanda","NAME_JA":"ニュージーランド","NAME_KO":"뉴질랜드","NAME_NL":"Nieuw-Zeeland","NAME_PL":"Nowa Zelandia","NAME_PT":"Nova Zelândia","NAME_RU":"Новая Зеландия","NAME_SV":"Nya Zeeland","NAME_TR":"Yeni Zelanda","NAME_UK":"Нова Зеландія","NAME_UR":"نیوزی لینڈ","NAME_VI":"New Zealand","NAME_ZH":"新西兰","NAME_ZHT":"新西蘭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"New Zealand","SOV_A3":"NZ1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Niue","ADM0_A3":"NIU","GEOU_DIF":0,"GEOUNIT":"Niue","GU_A3":"NIU","SU_DIF":0,"SUBUNIT":"Niue","SU_A3":"NIU","BRK_DIFF":0,"NAME":"Niue","NAME_LONG":"Niue","BRK_A3":"NIU","BRK_NAME":"Niue","BRK_GROUP":"","ABBREV":"Niue","POSTAL":"NU","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Niue","NOTE_ADM0":"Assoc. with N.Z.","NOTE_BRK":"Assoc. with N.Z.","NAME_SORT":"Niue","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":4,"POP_EST":1620,"POP_RANK":3,"POP_YEAR":2018,"GDP_MD":10,"GDP_YEAR":2003,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"NE","ISO_A2":"NU","ISO_A2_EH":"NU","ISO_A3":"NIU","ISO_A3_EH":"NIU","ISO_N3":"570","ISO_N3_EH":"570","UN_A3":"570","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424904,"WOE_ID_EH":23424904,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NIU","ADM0_DIFF":"","ADM0_TLC":"NIU","ADM0_A3_US":"NIU","ADM0_A3_FR":"NIU","ADM0_A3_RU":"NIU","ADM0_A3_ES":"NIU","ADM0_A3_CN":"NIU","ADM0_A3_TW":"NIU","ADM0_A3_IN":"NIU","ADM0_A3_NP":"NIU","ADM0_A3_PK":"NIU","ADM0_A3_DE":"NIU","ADM0_A3_GB":"NIU","ADM0_A3_BR":"NIU","ADM0_A3_IL":"NIU","ADM0_A3_PS":"NIU","ADM0_A3_SA":"NIU","ADM0_A3_EG":"NIU","ADM0_A3_MA":"NIU","ADM0_A3_PT":"NIU","ADM0_A3_AR":"NIU","ADM0_A3_JP":"NIU","ADM0_A3_KO":"NIU","ADM0_A3_VN":"NIU","ADM0_A3_TR":"NIU","ADM0_A3_ID":"NIU","ADM0_A3_PL":"NIU","ADM0_A3_GR":"NIU","ADM0_A3_IT":"NIU","ADM0_A3_NL":"NIU","ADM0_A3_SE":"NIU","ADM0_A3_BD":"NIU","ADM0_A3_UA":"NIU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-169.862565,"LABEL_Y":-19.045956,"NE_ID":1159321133,"WIKIDATAID":"Q34020","NAME_AR":"نييوي","NAME_BN":"নিউয়ে","NAME_DE":"Niue","NAME_EN":"Niue","NAME_ES":"Niue","NAME_FA":"نیووی","NAME_FR":"Niue","NAME_EL":"Νιούε","NAME_HE":"ניואה","NAME_HI":"निउए","NAME_HU":"Niue","NAME_ID":"Niue","NAME_IT":"Niue","NAME_JA":"ニウエ","NAME_KO":"니우에","NAME_NL":"Niue","NAME_PL":"Niue","NAME_PT":"Niue","NAME_RU":"Ниуэ","NAME_SV":"Niue","NAME_TR":"Niue","NAME_UK":"Ніуе","NAME_UR":"نیووے","NAME_VI":"Niue","NAME_ZH":"纽埃","NAME_ZHT":"紐埃","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"New Zealand","SOV_A3":"NZ1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Cook Islands","ADM0_A3":"COK","GEOU_DIF":0,"GEOUNIT":"Cook Islands","GU_A3":"COK","SU_DIF":0,"SUBUNIT":"Cook Islands","SU_A3":"COK","BRK_DIFF":0,"NAME":"Cook Is.","NAME_LONG":"Cook Islands","BRK_A3":"COK","BRK_NAME":"Cook Is.","BRK_GROUP":"","ABBREV":"Cook Is.","POSTAL":"CK","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"Cook Islands","NOTE_ADM0":"Assoc. with N.Z.","NOTE_BRK":"Assoc. with N.Z.","NAME_SORT":"Cook Islands","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":4,"POP_EST":17459,"POP_RANK":6,"POP_YEAR":2016,"GDP_MD":244,"GDP_YEAR":2010,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"CW","ISO_A2":"CK","ISO_A2_EH":"CK","ISO_A3":"COK","ISO_A3_EH":"COK","ISO_N3":"184","ISO_N3_EH":"184","UN_A3":"184","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424795,"WOE_ID_EH":23424795,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"COK","ADM0_DIFF":"","ADM0_TLC":"COK","ADM0_A3_US":"COK","ADM0_A3_FR":"COK","ADM0_A3_RU":"COK","ADM0_A3_ES":"COK","ADM0_A3_CN":"COK","ADM0_A3_TW":"COK","ADM0_A3_IN":"COK","ADM0_A3_NP":"COK","ADM0_A3_PK":"COK","ADM0_A3_DE":"COK","ADM0_A3_GB":"COK","ADM0_A3_BR":"COK","ADM0_A3_IL":"COK","ADM0_A3_PS":"COK","ADM0_A3_SA":"COK","ADM0_A3_EG":"COK","ADM0_A3_MA":"COK","ADM0_A3_PT":"COK","ADM0_A3_AR":"COK","ADM0_A3_JP":"COK","ADM0_A3_KO":"COK","ADM0_A3_VN":"COK","ADM0_A3_TR":"COK","ADM0_A3_ID":"COK","ADM0_A3_PL":"COK","ADM0_A3_GR":"COK","ADM0_A3_IT":"COK","ADM0_A3_NL":"COK","ADM0_A3_SE":"COK","ADM0_A3_BD":"COK","ADM0_A3_UA":"COK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":8,"LONG_LEN":12,"ABBREV_LEN":8,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-159.785675,"LABEL_Y":-21.215993,"NE_ID":1159321129,"WIKIDATAID":"Q26988","NAME_AR":"جزر كوك","NAME_BN":"কুক দ্বীপপুঞ্জ","NAME_DE":"Cookinseln","NAME_EN":"Cook Islands","NAME_ES":"Islas Cook","NAME_FA":"جزایر کوک","NAME_FR":"Îles Cook","NAME_EL":"Νήσοι Κουκ","NAME_HE":"איי קוק","NAME_HI":"कुक द्वीपसमूह","NAME_HU":"Cook-szigetek","NAME_ID":"Kepulauan Cook","NAME_IT":"Isole Cook","NAME_JA":"クック諸島","NAME_KO":"쿡 제도","NAME_NL":"Cookeilanden","NAME_PL":"Wyspy Cooka","NAME_PT":"Ilhas Cook","NAME_RU":"Острова Кука","NAME_SV":"Cooköarna","NAME_TR":"Cook Adaları","NAME_UK":"Острови Кука","NAME_UR":"جزائر کک","NAME_VI":"Quần đảo Cook","NAME_ZH":"库克群岛","NAME_ZHT":"庫克群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[5.993945312500017,50.750439453125],[5.894726562500011,50.984228515625],[6.193261718750023,51.488916015624994],[5.948535156250017,51.76240234375],[6.741796875000006,51.910888671875],[7.03515625,52.380224609375],[7.197265625,53.282275390624996],[6.816210937500017,53.441162109375],[6.062207031250011,53.407080078125],[4.678320312500006,52.809765625],[4.482812500000023,52.3091796875],[3.5869140625,51.453906249999996],[4.226171875000006,51.386474609375],[4.50341796875,51.47470703125],[5.8271484375,51.125634765624994],[5.993945312500017,50.750439453125]]],[[[4.226171875000006,51.386474609375],[3.35009765625,51.377685546875],[3.9020507812500114,51.207666015624994],[4.226171875000006,51.386474609375]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Netherlands","SOV_A3":"NL1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Netherlands","ADM0_A3":"NLD","GEOU_DIF":0,"GEOUNIT":"Netherlands","GU_A3":"NLD","SU_DIF":0,"SUBUNIT":"Netherlands","SU_A3":"NLD","BRK_DIFF":0,"NAME":"Netherlands","NAME_LONG":"Netherlands","BRK_A3":"NLD","BRK_NAME":"Netherlands","BRK_GROUP":"","ABBREV":"Neth.","POSTAL":"NL","FORMAL_EN":"Kingdom of the Netherlands","FORMAL_FR":"","NAME_CIAWF":"Netherlands","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Netherlands","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":9,"POP_EST":17332850,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":907050,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"NL","ISO_A2":"NL","ISO_A2_EH":"NL","ISO_A3":"NLD","ISO_A3_EH":"NLD","ISO_N3":"528","ISO_N3_EH":"528","UN_A3":"528","WB_A2":"NL","WB_A3":"NLD","WOE_ID":-90,"WOE_ID_EH":23424909,"WOE_NOTE":"Doesn't include new former units of Netherlands Antilles (24549811, 24549808, and 24549809)","ADM0_ISO":"NLD","ADM0_DIFF":"","ADM0_TLC":"NLD","ADM0_A3_US":"NLD","ADM0_A3_FR":"NLD","ADM0_A3_RU":"NLD","ADM0_A3_ES":"NLD","ADM0_A3_CN":"NLD","ADM0_A3_TW":"NLD","ADM0_A3_IN":"NLD","ADM0_A3_NP":"NLD","ADM0_A3_PK":"NLD","ADM0_A3_DE":"NLD","ADM0_A3_GB":"NLD","ADM0_A3_BR":"NLD","ADM0_A3_IL":"NLD","ADM0_A3_PS":"NLD","ADM0_A3_SA":"NLD","ADM0_A3_EG":"NLD","ADM0_A3_MA":"NLD","ADM0_A3_PT":"NLD","ADM0_A3_AR":"NLD","ADM0_A3_JP":"NLD","ADM0_A3_KO":"NLD","ADM0_A3_VN":"NLD","ADM0_A3_TR":"NLD","ADM0_A3_ID":"NLD","ADM0_A3_PL":"NLD","ADM0_A3_GR":"NLD","ADM0_A3_IT":"NLD","ADM0_A3_NL":"NLD","ADM0_A3_SE":"NLD","ADM0_A3_BD":"NLD","ADM0_A3_UA":"NLD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":10,"LABEL_X":5.61144,"LABEL_Y":52.422211,"NE_ID":1159321101,"WIKIDATAID":"Q55","NAME_AR":"هولندا","NAME_BN":"নেদারল্যান্ডস","NAME_DE":"Niederlande","NAME_EN":"Netherlands","NAME_ES":"Países Bajos","NAME_FA":"هلند","NAME_FR":"Pays-Bas","NAME_EL":"Ολλανδία","NAME_HE":"הולנד","NAME_HI":"नीदरलैण्ड","NAME_HU":"Hollandia","NAME_ID":"Belanda","NAME_IT":"Paesi Bassi","NAME_JA":"オランダ","NAME_KO":"네덜란드","NAME_NL":"Nederland","NAME_PL":"Holandia","NAME_PT":"Países Baixos","NAME_RU":"Нидерланды","NAME_SV":"Nederländerna","NAME_TR":"Hollanda","NAME_UK":"Нідерланди","NAME_UR":"نیدرلینڈز","NAME_VI":"Hà Lan","NAME_ZH":"荷兰","NAME_ZHT":"荷蘭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":5,"SOVEREIGNT":"Netherlands","SOV_A3":"NL1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Aruba","ADM0_A3":"ABW","GEOU_DIF":0,"GEOUNIT":"Aruba","GU_A3":"ABW","SU_DIF":0,"SUBUNIT":"Aruba","SU_A3":"ABW","BRK_DIFF":0,"NAME":"Aruba","NAME_LONG":"Aruba","BRK_A3":"ABW","BRK_NAME":"Aruba","BRK_GROUP":"","ABBREV":"Aruba","POSTAL":"AW","FORMAL_EN":"Aruba","FORMAL_FR":"","NAME_CIAWF":"Aruba","NOTE_ADM0":"Neth.","NOTE_BRK":"","NAME_SORT":"Aruba","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":9,"POP_EST":106314,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":3056,"GDP_YEAR":2017,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"AA","ISO_A2":"AW","ISO_A2_EH":"AW","ISO_A3":"ABW","ISO_A3_EH":"ABW","ISO_N3":"533","ISO_N3_EH":"533","UN_A3":"533","WB_A2":"AW","WB_A3":"ABW","WOE_ID":23424736,"WOE_ID_EH":23424736,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ABW","ADM0_DIFF":"","ADM0_TLC":"ABW","ADM0_A3_US":"ABW","ADM0_A3_FR":"ABW","ADM0_A3_RU":"ABW","ADM0_A3_ES":"ABW","ADM0_A3_CN":"ABW","ADM0_A3_TW":"ABW","ADM0_A3_IN":"ABW","ADM0_A3_NP":"ABW","ADM0_A3_PK":"ABW","ADM0_A3_DE":"ABW","ADM0_A3_GB":"ABW","ADM0_A3_BR":"ABW","ADM0_A3_IL":"ABW","ADM0_A3_PS":"ABW","ADM0_A3_SA":"ABW","ADM0_A3_EG":"ABW","ADM0_A3_MA":"ABW","ADM0_A3_PT":"ABW","ADM0_A3_AR":"ABW","ADM0_A3_JP":"ABW","ADM0_A3_KO":"ABW","ADM0_A3_VN":"ABW","ADM0_A3_TR":"ABW","ADM0_A3_ID":"ABW","ADM0_A3_PL":"ABW","ADM0_A3_GR":"ABW","ADM0_A3_IT":"ABW","ADM0_A3_NL":"ABW","ADM0_A3_SE":"ABW","ADM0_A3_BD":"ABW","ADM0_A3_UA":"ABW","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":4,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-69.972795,"LABEL_Y":12.5174,"NE_ID":1159321097,"WIKIDATAID":"Q21203","NAME_AR":"أروبا","NAME_BN":"আরুবা","NAME_DE":"Aruba","NAME_EN":"Aruba","NAME_ES":"Aruba","NAME_FA":"آروبا","NAME_FR":"Aruba","NAME_EL":"Αρούμπα","NAME_HE":"ארובה","NAME_HI":"अरूबा","NAME_HU":"Aruba","NAME_ID":"Aruba","NAME_IT":"Aruba","NAME_JA":"アルバ","NAME_KO":"아루바","NAME_NL":"Aruba","NAME_PL":"Aruba","NAME_PT":"Aruba","NAME_RU":"Аруба","NAME_SV":"Aruba","NAME_TR":"Aruba","NAME_UK":"Аруба","NAME_UR":"اروبا","NAME_VI":"Aruba","NAME_ZH":"阿鲁巴","NAME_ZHT":"阿魯巴","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":5,"SOVEREIGNT":"Netherlands","SOV_A3":"NL1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Curaçao","ADM0_A3":"CUW","GEOU_DIF":0,"GEOUNIT":"Curaçao","GU_A3":"CUW","SU_DIF":0,"SUBUNIT":"Curaçao","SU_A3":"CUW","BRK_DIFF":0,"NAME":"Curaçao","NAME_LONG":"Curaçao","BRK_A3":"CUW","BRK_NAME":"Curaçao","BRK_GROUP":"","ABBREV":"Cur.","POSTAL":"CW","FORMAL_EN":"Curaçao","FORMAL_FR":"","NAME_CIAWF":"Curacao","NOTE_ADM0":"Neth.","NOTE_BRK":"","NAME_SORT":"Curaçao","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":9,"POP_EST":157538,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":3101,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"NT","ISO_A2":"CW","ISO_A2_EH":"CW","ISO_A3":"CUW","ISO_A3_EH":"CUW","ISO_N3":"531","ISO_N3_EH":"531","UN_A3":"531","WB_A2":"CW","WB_A3":"CUW","WOE_ID":-90,"WOE_ID_EH":24549810,"WOE_NOTE":"Expired subunits of Netherlands Antilles (23424914).","ADM0_ISO":"CUW","ADM0_DIFF":"","ADM0_TLC":"CUW","ADM0_A3_US":"CUW","ADM0_A3_FR":"CUW","ADM0_A3_RU":"CUW","ADM0_A3_ES":"CUW","ADM0_A3_CN":"CUW","ADM0_A3_TW":"CUW","ADM0_A3_IN":"CUW","ADM0_A3_NP":"CUW","ADM0_A3_PK":"CUW","ADM0_A3_DE":"CUW","ADM0_A3_GB":"CUW","ADM0_A3_BR":"CUW","ADM0_A3_IL":"CUW","ADM0_A3_PS":"CUW","ADM0_A3_SA":"CUW","ADM0_A3_EG":"CUW","ADM0_A3_MA":"CUW","ADM0_A3_PT":"CUW","ADM0_A3_AR":"CUW","ADM0_A3_JP":"CUW","ADM0_A3_KO":"CUW","ADM0_A3_VN":"CUW","ADM0_A3_TR":"CUW","ADM0_A3_ID":"CUW","ADM0_A3_PL":"CUW","ADM0_A3_GR":"CUW","ADM0_A3_IT":"CUW","ADM0_A3_NL":"CUW","ADM0_A3_SE":"CUW","ADM0_A3_BD":"CUW","ADM0_A3_UA":"CUW","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":4,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-68.920578,"LABEL_Y":12.145039,"NE_ID":1159321099,"WIKIDATAID":"Q25279","NAME_AR":"كوراساو","NAME_BN":"কিউরাসাও","NAME_DE":"Curaçao","NAME_EN":"Curaçao","NAME_ES":"Curazao","NAME_FA":"کوراسائو","NAME_FR":"Curaçao","NAME_EL":"Κουρασάο","NAME_HE":"קוראסאו","NAME_HI":"कुराकाओ","NAME_HU":"Curaçao","NAME_ID":"Curaçao","NAME_IT":"Curaçao","NAME_JA":"キュラソー","NAME_KO":"퀴라소","NAME_NL":"Curaçao","NAME_PL":"Curaçao","NAME_PT":"Curaçao","NAME_RU":"Кюрасао","NAME_SV":"Curaçao","NAME_TR":"Curaçao","NAME_UK":"Кюрасао","NAME_UR":"کیوراساؤ","NAME_VI":"Curaçao","NAME_ZH":"库拉索","NAME_ZHT":"古拉索","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[88.10976562499997,27.870605468749943],[87.14140624999999,27.838330078124997],[86.55449218749999,28.085205078125],[86.40869140625,27.928662109374997],[85.67832031250003,28.27744140625],[85.12246093750002,28.315966796874996],[85.15908203125002,28.592236328124997],[84.71425781250002,28.595556640625],[84.22871093750001,28.911767578124994],[84.10136718749999,29.219970703125],[83.58349609375,29.18359375],[83.15546875000001,29.612646484375],[82.85429687499999,29.683398437499996],[82.15898437499999,30.115185546874997],[82.04335937500002,30.3267578125],[81.41718750000001,30.337597656249997],[81.01025390625,30.164501953124997],[80.40185546875,29.730273437499996],[80.07070312500002,28.830175781250034],[80.58701171875003,28.649609374999997],[81.85263671875003,27.867089843749994],[81.98769531250002,27.913769531249997],[82.7333984375,27.518994140624997],[83.28974609375001,27.370996093749994],[84.09101562499995,27.491357421875136],[84.61015624999999,27.298681640625],[84.68535156249999,27.041015625],[85.29296875,26.741015624999996],[86.36611328125002,26.574414062499997],[86.70136718750001,26.43505859375],[87.01640624999999,26.555419921875057],[87.28740234374993,26.360302734375125],[88.05488281250001,26.43002929687492],[88.16152343750002,26.724804687500125],[87.984375,27.133935546874994],[88.10976562499997,27.870605468749943]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Nepal","SOV_A3":"NPL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Nepal","ADM0_A3":"NPL","GEOU_DIF":0,"GEOUNIT":"Nepal","GU_A3":"NPL","SU_DIF":0,"SUBUNIT":"Nepal","SU_A3":"NPL","BRK_DIFF":0,"NAME":"Nepal","NAME_LONG":"Nepal","BRK_A3":"NPL","BRK_NAME":"Nepal","BRK_GROUP":"","ABBREV":"Nepal","POSTAL":"NP","FORMAL_EN":"Nepal","FORMAL_FR":"","NAME_CIAWF":"Nepal","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Nepal","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":12,"POP_EST":28608710,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":30641,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"NP","ISO_A2":"NP","ISO_A2_EH":"NP","ISO_A3":"NPL","ISO_A3_EH":"NPL","ISO_N3":"524","ISO_N3_EH":"524","UN_A3":"524","WB_A2":"NP","WB_A3":"NPL","WOE_ID":23424911,"WOE_ID_EH":23424911,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NPL","ADM0_DIFF":"","ADM0_TLC":"NPL","ADM0_A3_US":"NPL","ADM0_A3_FR":"NPL","ADM0_A3_RU":"NPL","ADM0_A3_ES":"NPL","ADM0_A3_CN":"NPL","ADM0_A3_TW":"NPL","ADM0_A3_IN":"NPL","ADM0_A3_NP":"NPL","ADM0_A3_PK":"NPL","ADM0_A3_DE":"NPL","ADM0_A3_GB":"NPL","ADM0_A3_BR":"NPL","ADM0_A3_IL":"NPL","ADM0_A3_PS":"NPL","ADM0_A3_SA":"NPL","ADM0_A3_EG":"NPL","ADM0_A3_MA":"NPL","ADM0_A3_PT":"NPL","ADM0_A3_AR":"NPL","ADM0_A3_JP":"NPL","ADM0_A3_KO":"NPL","ADM0_A3_VN":"NPL","ADM0_A3_TR":"NPL","ADM0_A3_ID":"NPL","ADM0_A3_PL":"NPL","ADM0_A3_GR":"NPL","ADM0_A3_IT":"NPL","ADM0_A3_NL":"NPL","ADM0_A3_SE":"NPL","ADM0_A3_BD":"NPL","ADM0_A3_UA":"NPL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":83.639914,"LABEL_Y":28.297925,"NE_ID":1159321121,"WIKIDATAID":"Q837","NAME_AR":"نيبال","NAME_BN":"নেপাল","NAME_DE":"Nepal","NAME_EN":"Nepal","NAME_ES":"Nepal","NAME_FA":"نپال","NAME_FR":"Népal","NAME_EL":"Νεπάλ","NAME_HE":"נפאל","NAME_HI":"नेपाल","NAME_HU":"Nepál","NAME_ID":"Nepal","NAME_IT":"Nepal","NAME_JA":"ネパール","NAME_KO":"네팔","NAME_NL":"Nepal","NAME_PL":"Nepal","NAME_PT":"Nepal","NAME_RU":"Непал","NAME_SV":"Nepal","NAME_TR":"Nepal","NAME_UK":"Непал","NAME_UR":"نیپال","NAME_VI":"Nepal","NAME_ZH":"尼泊尔","NAME_ZHT":"尼泊爾","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Nauru","SOV_A3":"NRU","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Nauru","ADM0_A3":"NRU","GEOU_DIF":0,"GEOUNIT":"Nauru","GU_A3":"NRU","SU_DIF":0,"SUBUNIT":"Nauru","SU_A3":"NRU","BRK_DIFF":0,"NAME":"Nauru","NAME_LONG":"Nauru","BRK_A3":"NRU","BRK_NAME":"Nauru","BRK_GROUP":"","ABBREV":"Nauru","POSTAL":"NR","FORMAL_EN":"Republic of Nauru","FORMAL_FR":"","NAME_CIAWF":"Nauru","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Nauru","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":7,"MAPCOLOR9":6,"MAPCOLOR13":9,"POP_EST":12581,"POP_RANK":6,"POP_YEAR":2019,"GDP_MD":118,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"NR","ISO_A2":"NR","ISO_A2_EH":"NR","ISO_A3":"NRU","ISO_A3_EH":"NRU","ISO_N3":"520","ISO_N3_EH":"520","UN_A3":"520","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424912,"WOE_ID_EH":23424912,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NRU","ADM0_DIFF":"","ADM0_TLC":"NRU","ADM0_A3_US":"NRU","ADM0_A3_FR":"NRU","ADM0_A3_RU":"NRU","ADM0_A3_ES":"NRU","ADM0_A3_CN":"NRU","ADM0_A3_TW":"NRU","ADM0_A3_IN":"NRU","ADM0_A3_NP":"NRU","ADM0_A3_PK":"NRU","ADM0_A3_DE":"NRU","ADM0_A3_GB":"NRU","ADM0_A3_BR":"NRU","ADM0_A3_IL":"NRU","ADM0_A3_PS":"NRU","ADM0_A3_SA":"NRU","ADM0_A3_EG":"NRU","ADM0_A3_MA":"NRU","ADM0_A3_PT":"NRU","ADM0_A3_AR":"NRU","ADM0_A3_JP":"NRU","ADM0_A3_KO":"NRU","ADM0_A3_VN":"NRU","ADM0_A3_TR":"NRU","ADM0_A3_ID":"NRU","ADM0_A3_PL":"NRU","ADM0_A3_GR":"NRU","ADM0_A3_IT":"NRU","ADM0_A3_NL":"NRU","ADM0_A3_SE":"NRU","ADM0_A3_BD":"NRU","ADM0_A3_UA":"NRU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":166.932644,"LABEL_Y":-0.520261,"NE_ID":1159321123,"WIKIDATAID":"Q697","NAME_AR":"ناورو","NAME_BN":"নাউরু","NAME_DE":"Nauru","NAME_EN":"Nauru","NAME_ES":"Nauru","NAME_FA":"نائورو","NAME_FR":"Nauru","NAME_EL":"Ναουρού","NAME_HE":"נאורו","NAME_HI":"नौरु","NAME_HU":"Nauru","NAME_ID":"Nauru","NAME_IT":"Nauru","NAME_JA":"ナウル","NAME_KO":"나우루","NAME_NL":"Nauru","NAME_PL":"Nauru","NAME_PT":"Nauru","NAME_RU":"Науру","NAME_SV":"Nauru","NAME_TR":"Nauru","NAME_UK":"Науру","NAME_UR":"ناورو","NAME_VI":"Nauru","NAME_ZH":"瑙鲁","NAME_ZHT":"諾魯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[23.380664062500017,-17.640625],[21.416894531250023,-18.00068359375001],[20.625097656250006,-17.996679687500006],[20.392968750000023,-17.88740234375001],[19.076464843750017,-17.817675781250003],[18.718066406250017,-17.703222656250006],[18.396386718750023,-17.3994140625],[16.531054687500017,-17.39082031250001],[13.93798828125,-17.388769531250006],[13.403710937500023,-17.0078125],[13.101171875000006,-16.96767578125001],[12.548144531250017,-17.212695312500003],[11.743066406250023,-17.24921875000001],[11.77587890625,-18.001757812500003],[12.095703125,-18.54091796875001],[12.458203125000011,-18.9267578125],[13.168359375000023,-20.184667968750006],[13.450585937500023,-20.91669921875001],[13.973242187500006,-21.767578125],[14.321875000000006,-22.18994140625],[14.525976562500006,-22.70253906250001],[14.473828125000011,-23.28115234375001],[14.501562500000006,-24.201953125000003],[14.837109375000011,-25.033203125],[14.84521484375,-25.725683593750006],[14.9677734375,-26.31806640625001],[15.341503906250011,-27.386523437500003],[15.719042968750017,-27.9658203125],[16.447558593750017,-28.61757812500001],[16.755761718750023,-28.4521484375],[17.056250000000006,-28.031054687500003],[17.3857421875,-28.35322265625001],[17.44794921875001,-28.69814453125001],[18.310839843750017,-28.88623046875],[19.02607421875001,-28.92792968750001],[19.671484375000006,-28.50390625],[19.98046875,-28.451269531250006],[19.98046875,-26.53115234375001],[19.98046875,-24.77675781250001],[19.977343750000017,-22.00019531250001],[20.970996093750017,-22.00019531250001],[20.976171875000006,-19.74433593750001],[20.97412109375,-18.31884765625],[23.298632812500017,-18.02734375],[23.58056640625,-18.452929687500003],[24.358984375000006,-17.97822265625001],[25.2587890625,-17.793554687500006],[24.932421875000017,-17.54345703125],[24.27490234375,-17.481054687500006],[23.380664062500017,-17.640625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Namibia","SOV_A3":"NAM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Namibia","ADM0_A3":"NAM","GEOU_DIF":0,"GEOUNIT":"Namibia","GU_A3":"NAM","SU_DIF":0,"SUBUNIT":"Namibia","SU_A3":"NAM","BRK_DIFF":0,"NAME":"Namibia","NAME_LONG":"Namibia","BRK_A3":"NAM","BRK_NAME":"Namibia","BRK_GROUP":"","ABBREV":"Nam.","POSTAL":"NA","FORMAL_EN":"Republic of Namibia","FORMAL_FR":"","NAME_CIAWF":"Namibia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Namibia","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":1,"MAPCOLOR13":7,"POP_EST":2494530,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":12366,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"WA","ISO_A2":"NA","ISO_A2_EH":"NA","ISO_A3":"NAM","ISO_A3_EH":"NAM","ISO_N3":"516","ISO_N3_EH":"516","UN_A3":"516","WB_A2":"NA","WB_A3":"NAM","WOE_ID":23424987,"WOE_ID_EH":23424987,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NAM","ADM0_DIFF":"","ADM0_TLC":"NAM","ADM0_A3_US":"NAM","ADM0_A3_FR":"NAM","ADM0_A3_RU":"NAM","ADM0_A3_ES":"NAM","ADM0_A3_CN":"NAM","ADM0_A3_TW":"NAM","ADM0_A3_IN":"NAM","ADM0_A3_NP":"NAM","ADM0_A3_PK":"NAM","ADM0_A3_DE":"NAM","ADM0_A3_GB":"NAM","ADM0_A3_BR":"NAM","ADM0_A3_IL":"NAM","ADM0_A3_PS":"NAM","ADM0_A3_SA":"NAM","ADM0_A3_EG":"NAM","ADM0_A3_MA":"NAM","ADM0_A3_PT":"NAM","ADM0_A3_AR":"NAM","ADM0_A3_JP":"NAM","ADM0_A3_KO":"NAM","ADM0_A3_VN":"NAM","ADM0_A3_TR":"NAM","ADM0_A3_ID":"NAM","ADM0_A3_PL":"NAM","ADM0_A3_GR":"NAM","ADM0_A3_IT":"NAM","ADM0_A3_NL":"NAM","ADM0_A3_SE":"NAM","ADM0_A3_BD":"NAM","ADM0_A3_UA":"NAM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Southern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7.5,"LABEL_X":17.108166,"LABEL_Y":-20.575298,"NE_ID":1159321085,"WIKIDATAID":"Q1030","NAME_AR":"ناميبيا","NAME_BN":"নামিবিয়া","NAME_DE":"Namibia","NAME_EN":"Namibia","NAME_ES":"Namibia","NAME_FA":"نامیبیا","NAME_FR":"Namibie","NAME_EL":"Ναμίμπια","NAME_HE":"נמיביה","NAME_HI":"नामीबिया","NAME_HU":"Namíbia","NAME_ID":"Namibia","NAME_IT":"Namibia","NAME_JA":"ナミビア","NAME_KO":"나미비아","NAME_NL":"Namibië","NAME_PL":"Namibia","NAME_PT":"Namíbia","NAME_RU":"Намибия","NAME_SV":"Namibia","NAME_TR":"Namibya","NAME_UK":"Намібія","NAME_UR":"نمیبیا","NAME_VI":"Namibia","NAME_ZH":"纳米比亚","NAME_ZHT":"納米比亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[31.287890625000017,-22.40205078125001],[31.54560546875001,-23.48232421875001],[31.799609375000017,-23.892187500000006],[31.98583984375,-24.46064453125001],[31.9482421875,-25.957617187500006],[32.112890625000006,-26.839453125000006],[32.88613281250002,-26.84931640625001],[32.93359375,-26.25234375000001],[32.590429687500006,-26.00410156250001],[32.79218750000001,-25.644335937500003],[33.34746093750002,-25.26093750000001],[34.60732421875002,-24.8212890625],[35.15595703125001,-24.54140625000001],[35.438085937500006,-24.171191406250003],[35.37041015625002,-23.79824218750001],[35.57539062500001,-22.96308593750001],[35.31572265625002,-22.39687500000001],[35.267675781250006,-21.650976562500006],[34.98232421875002,-20.806250000000006],[34.69814453125002,-20.404394531250006],[34.75576171875002,-19.82197265625001],[34.947851562500006,-19.81269531250001],[35.65126953125002,-19.163867187500003],[36.540136718750006,-18.518164062500006],[37.24453125000002,-17.73994140625001],[38.14492187500002,-17.242773437500006],[39.08437500000002,-16.97285156250001],[39.84462890625002,-16.435644531250006],[40.10878906250002,-15.979296875000003],[40.55898437500002,-15.473437500000003],[40.83515625000001,-14.79150390625],[40.63994140625002,-14.390039062500009],[40.54511718750001,-13.462890625],[40.58085937500002,-12.635546875000003],[40.40283203125,-11.33203125],[40.544531250000006,-11.065625000000011],[40.46357421875001,-10.46435546875],[39.98867187500002,-10.82080078125],[39.32158203125002,-11.12255859375],[38.79472656250002,-11.228906250000009],[38.491796875000006,-11.413281250000011],[37.92021484375002,-11.294726562500003],[37.54169921875001,-11.675097656250003],[36.97890625000002,-11.566992187500006],[36.518652343750006,-11.716210937500009],[35.78544921875002,-11.452929687500003],[35.630957031250006,-11.58203125],[34.95947265625,-11.578125],[34.65957031250002,-11.588671875000003],[34.36083984375,-12.210546875000006],[34.56367187500001,-13.360156250000003],[35.24746093750002,-13.896875000000009],[35.84716796875,-14.6708984375],[35.75527343750002,-16.05830078125001],[35.358496093750006,-16.16054687500001],[35.16718750000001,-16.56025390625001],[35.29042968750002,-17.096972656250003],[34.3955078125,-16.19921875],[34.24824218750001,-15.887500000000003],[34.54082031250002,-15.297265625000009],[34.50527343750002,-14.59814453125],[34.33251953125,-14.408593750000009],[33.63642578125001,-14.568164062500003],[33.201757812500006,-14.013378906250011],[31.728906250000023,-14.49609375],[30.231835937500023,-14.990332031250006],[30.396093750000006,-15.64306640625],[30.437792968750017,-15.995312500000011],[31.236230468750023,-16.02363281250001],[31.939843750000023,-16.428808593750006],[32.243261718750006,-16.44873046875],[32.94804687500002,-16.71230468750001],[32.99306640625002,-18.35957031250001],[32.71650390625001,-19.00185546875001],[33.00673828125002,-19.873828125000003],[32.477636718750006,-20.712988281250006],[32.37109375,-21.33486328125001],[31.287890625000017,-22.40205078125001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Mozambique","SOV_A3":"MOZ","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Mozambique","ADM0_A3":"MOZ","GEOU_DIF":0,"GEOUNIT":"Mozambique","GU_A3":"MOZ","SU_DIF":0,"SUBUNIT":"Mozambique","SU_A3":"MOZ","BRK_DIFF":0,"NAME":"Mozambique","NAME_LONG":"Mozambique","BRK_A3":"MOZ","BRK_NAME":"Mozambique","BRK_GROUP":"","ABBREV":"Moz.","POSTAL":"MZ","FORMAL_EN":"Republic of Mozambique","FORMAL_FR":"","NAME_CIAWF":"Mozambique","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Mozambique","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":2,"MAPCOLOR9":1,"MAPCOLOR13":4,"POP_EST":30366036,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":15291,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"MZ","ISO_A2":"MZ","ISO_A2_EH":"MZ","ISO_A3":"MOZ","ISO_A3_EH":"MOZ","ISO_N3":"508","ISO_N3_EH":"508","UN_A3":"508","WB_A2":"MZ","WB_A3":"MOZ","WOE_ID":23424902,"WOE_ID_EH":23424902,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MOZ","ADM0_DIFF":"","ADM0_TLC":"MOZ","ADM0_A3_US":"MOZ","ADM0_A3_FR":"MOZ","ADM0_A3_RU":"MOZ","ADM0_A3_ES":"MOZ","ADM0_A3_CN":"MOZ","ADM0_A3_TW":"MOZ","ADM0_A3_IN":"MOZ","ADM0_A3_NP":"MOZ","ADM0_A3_PK":"MOZ","ADM0_A3_DE":"MOZ","ADM0_A3_GB":"MOZ","ADM0_A3_BR":"MOZ","ADM0_A3_IL":"MOZ","ADM0_A3_PS":"MOZ","ADM0_A3_SA":"MOZ","ADM0_A3_EG":"MOZ","ADM0_A3_MA":"MOZ","ADM0_A3_PT":"MOZ","ADM0_A3_AR":"MOZ","ADM0_A3_JP":"MOZ","ADM0_A3_KO":"MOZ","ADM0_A3_VN":"MOZ","ADM0_A3_TR":"MOZ","ADM0_A3_ID":"MOZ","ADM0_A3_PL":"MOZ","ADM0_A3_GR":"MOZ","ADM0_A3_IT":"MOZ","ADM0_A3_NL":"MOZ","ADM0_A3_SE":"MOZ","ADM0_A3_BD":"MOZ","ADM0_A3_UA":"MOZ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":37.83789,"LABEL_Y":-13.94323,"NE_ID":1159321073,"WIKIDATAID":"Q1029","NAME_AR":"موزمبيق","NAME_BN":"মোজাম্বিক","NAME_DE":"Mosambik","NAME_EN":"Mozambique","NAME_ES":"Mozambique","NAME_FA":"موزامبیک","NAME_FR":"Mozambique","NAME_EL":"Μοζαμβίκη","NAME_HE":"מוזמביק","NAME_HI":"मोज़ाम्बीक","NAME_HU":"Mozambik","NAME_ID":"Mozambik","NAME_IT":"Mozambico","NAME_JA":"モザンビーク","NAME_KO":"모잠비크","NAME_NL":"Mozambique","NAME_PL":"Mozambik","NAME_PT":"Moçambique","NAME_RU":"Мозамбик","NAME_SV":"Moçambique","NAME_TR":"Mozambik","NAME_UK":"Мозамбік","NAME_UR":"موزمبیق","NAME_VI":"Mozambique","NAME_ZH":"莫桑比克","NAME_ZHT":"莫三比克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-2.2196289062499943,35.10419921875],[-2.8399414062499773,35.127832031249994],[-3.6932617187499943,35.27998046875],[-4.329980468749994,35.161474609375],[-5.105371093749994,35.4677734375],[-5.397363281249994,35.9298828125],[-5.9248046875,35.785791015624994],[-6.353124999999977,34.77607421875],[-6.900976562499977,33.969042968749996],[-7.562353515624977,33.640283203124994],[-8.301171874999994,33.374365234375],[-9.245849609375,32.5724609375],[-9.347460937499989,32.086376953125],[-9.808691406249977,31.424609374999996],[-9.87548828125,30.717919921874994],[-9.652929687499977,30.447558593749996],[-9.667089843749977,30.109277343749994],[-10.486474609374994,29.06494140625],[-11.080957031249994,28.713769531249994],[-11.43017578125,28.382031249999997],[-11.986083984375,28.129296874999994],[-12.948925781249983,27.91416015625],[-13.175976562499983,27.655712890624997],[-13.575781249999977,26.735107421875],[-14.413867187499989,26.253710937499996],[-14.794921875,25.40415039062499],[-14.856054687499977,24.87158203125],[-15.038867187499989,24.548828125],[-15.586328124999994,24.07275390625],[-16.21025390624999,23.097900390625],[-16.514404296875,22.33349609375],[-16.930859374999983,21.89999999999999],[-17.003076171874994,21.420703125000003],[-15.750927734374983,21.49082031249999],[-14.8408203125,21.45078124999999],[-14.630859375,21.86093749999999],[-14.22119140625,22.31015624999999],[-14.02099609375,23.41074218749999],[-13.770947265624983,23.79062499999999],[-13.310986328124983,23.98105468749999],[-13.06103515625,24.40097656249999],[-12.43115234375,24.83066406249999],[-12.03076171875,26.030859375],[-11.718212890624983,26.1041015625],[-11.337890625,26.6333984375],[-11.392578125,26.8833984375],[-10.922802734374983,27.0103515625],[-10.25146484375,26.8609375],[-9.7353515625,26.8609375],[-9.413037109374983,27.0884765625],[-8.753857421874983,27.191015625],[-8.683349609375,27.656445312499997],[-8.659912109375,28.718603515625],[-7.685156249999977,29.349511718749994],[-7.094921874999983,29.625195312499997],[-6.635351562499977,29.568798828124997],[-6.500878906249994,29.809130859374996],[-5.448779296874989,29.956933593749994],[-4.96826171875,30.465380859374996],[-4.322851562499977,30.698876953124994],[-3.8333984374999943,31.197802734374996],[-3.8267578124999773,31.661914062499996],[-3.0173828124999886,31.834277343749996],[-2.930859374999983,32.042529296874996],[-2.4483886718749943,32.12998046875],[-1.275341796874983,32.089013671874994],[-1.0655273437499773,32.468310546874996],[-1.510009765625,32.87763671875],[-1.67919921875,33.318652343749996],[-1.795605468749983,34.751904296875],[-2.2196289062499943,35.10419921875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Morocco","SOV_A3":"MAR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Morocco","ADM0_A3":"MAR","GEOU_DIF":0,"GEOUNIT":"Morocco","GU_A3":"MAR","SU_DIF":0,"SUBUNIT":"Morocco","SU_A3":"MAR","BRK_DIFF":0,"NAME":"Morocco","NAME_LONG":"Morocco","BRK_A3":"MAR","BRK_NAME":"Morocco","BRK_GROUP":"","ABBREV":"Mor.","POSTAL":"MA","FORMAL_EN":"Kingdom of Morocco","FORMAL_FR":"","NAME_CIAWF":"Morocco","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Morocco","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":9,"POP_EST":36471769,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":119700,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"MO","ISO_A2":"MA","ISO_A2_EH":"MA","ISO_A3":"MAR","ISO_A3_EH":"MAR","ISO_N3":"504","ISO_N3_EH":"504","UN_A3":"504","WB_A2":"MA","WB_A3":"MAR","WOE_ID":23424893,"WOE_ID_EH":23424893,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MAR","ADM0_DIFF":"","ADM0_TLC":"MAR","ADM0_A3_US":"MAR","ADM0_A3_FR":"MAR","ADM0_A3_RU":"MAR","ADM0_A3_ES":"MAR","ADM0_A3_CN":"MAR","ADM0_A3_TW":"MAR","ADM0_A3_IN":"MAR","ADM0_A3_NP":"MAR","ADM0_A3_PK":"MAR","ADM0_A3_DE":"MAR","ADM0_A3_GB":"MAR","ADM0_A3_BR":"MAR","ADM0_A3_IL":"MAR","ADM0_A3_PS":"MAR","ADM0_A3_SA":"MAR","ADM0_A3_EG":"MAR","ADM0_A3_MA":"MAR","ADM0_A3_PT":"MAR","ADM0_A3_AR":"MAR","ADM0_A3_JP":"MAR","ADM0_A3_KO":"MAR","ADM0_A3_VN":"MAR","ADM0_A3_TR":"MAR","ADM0_A3_ID":"MAR","ADM0_A3_PL":"MAR","ADM0_A3_GR":"MAR","ADM0_A3_IT":"MAR","ADM0_A3_NL":"MAR","ADM0_A3_SE":"MAR","ADM0_A3_BD":"MAR","ADM0_A3_UA":"MAR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":8,"LABEL_X":-7.187296,"LABEL_Y":31.650723,"NE_ID":1159321035,"WIKIDATAID":"Q1028","NAME_AR":"المغرب","NAME_BN":"মরক্কো","NAME_DE":"Marokko","NAME_EN":"Morocco","NAME_ES":"Marruecos","NAME_FA":"مراکش","NAME_FR":"Maroc","NAME_EL":"Μαρόκο","NAME_HE":"מרוקו","NAME_HI":"मोरक्को","NAME_HU":"Marokkó","NAME_ID":"Maroko","NAME_IT":"Marocco","NAME_JA":"モロッコ","NAME_KO":"모로코","NAME_NL":"Marokko","NAME_PL":"Maroko","NAME_PT":"Marrocos","NAME_RU":"Марокко","NAME_SV":"Marocko","NAME_TR":"Fas","NAME_UK":"Марокко","NAME_UR":"مراکش","NAME_VI":"Maroc","NAME_ZH":"摩洛哥","NAME_ZHT":"摩洛哥","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-8.683349609375,27.656445312499997],[-8.753857421874983,27.191015625],[-9.413037109374983,27.0884765625],[-9.7353515625,26.8609375],[-10.25146484375,26.8609375],[-10.922802734374983,27.0103515625],[-11.392578125,26.8833984375],[-11.337890625,26.6333984375],[-11.718212890624983,26.1041015625],[-12.03076171875,26.030859375],[-12.43115234375,24.83066406249999],[-13.06103515625,24.40097656249999],[-13.310986328124983,23.98105468749999],[-13.770947265624983,23.79062499999999],[-14.02099609375,23.41074218749999],[-14.22119140625,22.31015624999999],[-14.630859375,21.86093749999999],[-14.8408203125,21.45078124999999],[-15.750927734374983,21.49082031249999],[-17.003076171874994,21.420703125000003],[-17.048046874999983,20.80615234375],[-16.964550781249983,21.329248046874994],[-15.231201171875,21.331298828125],[-13.016210937499977,21.333935546874997],[-13.094335937499977,22.495996093749994],[-13.031494140625,23.000244140625],[-12.620410156249989,23.27133789062499],[-12.0234375,23.467578125000003],[-12.016308593749983,25.995410156250003],[-10.376123046874994,25.99545898437499],[-8.682226562499977,25.995507812499994],[-8.683349609375,27.285937499999996],[-8.683349609375,27.656445312499997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":7,"SOVEREIGNT":"Western Sahara","SOV_A3":"SAH","ADM0_DIF":0,"LEVEL":2,"TYPE":"Indeterminate","TLC":"1","ADMIN":"Western Sahara","ADM0_A3":"SAH","GEOU_DIF":0,"GEOUNIT":"Western Sahara","GU_A3":"SAH","SU_DIF":0,"SUBUNIT":"Western Sahara","SU_A3":"SAH","BRK_DIFF":1,"NAME":"W. Sahara","NAME_LONG":"Western Sahara","BRK_A3":"B28","BRK_NAME":"W. Sahara","BRK_GROUP":"","ABBREV":"W. Sah.","POSTAL":"WS","FORMAL_EN":"Sahrawi Arab Democratic Republic","FORMAL_FR":"","NAME_CIAWF":"Western Sahara","NOTE_ADM0":"","NOTE_BRK":"Self admin.; Claimed by Morocco","NAME_SORT":"Western Sahara","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":7,"MAPCOLOR9":4,"MAPCOLOR13":4,"POP_EST":603253,"POP_RANK":11,"POP_YEAR":2017,"GDP_MD":907,"GDP_YEAR":2007,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"WI","ISO_A2":"EH","ISO_A2_EH":"EH","ISO_A3":"ESH","ISO_A3_EH":"ESH","ISO_N3":"732","ISO_N3_EH":"732","UN_A3":"732","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424990,"WOE_ID_EH":23424990,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"B28","ADM0_DIFF":"","ADM0_TLC":"B28","ADM0_A3_US":"SAH","ADM0_A3_FR":"MAR","ADM0_A3_RU":"SAH","ADM0_A3_ES":"SAH","ADM0_A3_CN":"SAH","ADM0_A3_TW":"SAH","ADM0_A3_IN":"MAR","ADM0_A3_NP":"SAH","ADM0_A3_PK":"SAH","ADM0_A3_DE":"SAH","ADM0_A3_GB":"SAH","ADM0_A3_BR":"SAH","ADM0_A3_IL":"SAH","ADM0_A3_PS":"MAR","ADM0_A3_SA":"MAR","ADM0_A3_EG":"SAH","ADM0_A3_MA":"MAR","ADM0_A3_PT":"SAH","ADM0_A3_AR":"SAH","ADM0_A3_JP":"SAH","ADM0_A3_KO":"SAH","ADM0_A3_VN":"SAH","ADM0_A3_TR":"MAR","ADM0_A3_ID":"MAR","ADM0_A3_PL":"MAR","ADM0_A3_GR":"SAH","ADM0_A3_IT":"SAH","ADM0_A3_NL":"MAR","ADM0_A3_SE":"SAH","ADM0_A3_BD":"SAH","ADM0_A3_UA":"SAH","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":9,"LONG_LEN":14,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":4.7,"MIN_LABEL":6,"MAX_LABEL":11,"LABEL_X":-12.630304,"LABEL_Y":23.967592,"NE_ID":1159321223,"WIKIDATAID":"Q6250","NAME_AR":"الصحراء الغربية","NAME_BN":"পশ্চিম সাহারা","NAME_DE":"Westsahara","NAME_EN":"Western Sahara","NAME_ES":"Sahara Occidental","NAME_FA":"صحرای غربی","NAME_FR":"Sahara occidental","NAME_EL":"Δυτική Σαχάρα","NAME_HE":"סהרה המערבית","NAME_HI":"पश्चिमी सहारा","NAME_HU":"Nyugat-Szahara","NAME_ID":"Sahara Barat","NAME_IT":"Sahara Occidentale","NAME_JA":"西サハラ","NAME_KO":"서사하라","NAME_NL":"Westelijke Sahara","NAME_PL":"Sahara Zachodnia","NAME_PT":"Sara Ocidental","NAME_RU":"Западная Сахара","NAME_SV":"Västsahara","NAME_TR":"Batı Sahra","NAME_UK":"Західна Сахара","NAME_UR":"مغربی صحارا","NAME_VI":"Tây Sahara","NAME_ZH":"西撒哈拉","NAME_ZHT":"西撒哈拉","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"Unrecognized","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"Unrecognized","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"Unrecognized","FCLASS_SA":"Unrecognized","FCLASS_EG":"","FCLASS_MA":"Unrecognized","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"Unrecognized","FCLASS_ID":"Unrecognized","FCLASS_PL":"Unrecognized","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"Unrecognized","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[19.1943359375,43.53330078125],[18.940234375000017,43.496728515624994],[18.44384765625,42.96845703125],[18.436328125000017,42.559716796874994],[18.517480468750023,42.432910156249996],[19.342382812500006,41.869091796875],[19.280664062500023,42.17255859375],[19.65449218750001,42.628564453124994],[20.06396484375,42.547265624999994],[20.344335937500006,42.827929687499996],[19.551562500000017,43.212255859375],[19.1943359375,43.53330078125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Montenegro","SOV_A3":"MNE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Montenegro","ADM0_A3":"MNE","GEOU_DIF":0,"GEOUNIT":"Montenegro","GU_A3":"MNE","SU_DIF":0,"SUBUNIT":"Montenegro","SU_A3":"MNE","BRK_DIFF":0,"NAME":"Montenegro","NAME_LONG":"Montenegro","BRK_A3":"MNE","BRK_NAME":"Montenegro","BRK_GROUP":"","ABBREV":"Mont.","POSTAL":"ME","FORMAL_EN":"Montenegro","FORMAL_FR":"","NAME_CIAWF":"Montenegro","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Montenegro","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":5,"POP_EST":622137,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":5542,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"MJ","ISO_A2":"ME","ISO_A2_EH":"ME","ISO_A3":"MNE","ISO_A3_EH":"MNE","ISO_N3":"499","ISO_N3_EH":"499","UN_A3":"499","WB_A2":"ME","WB_A3":"MNE","WOE_ID":20069817,"WOE_ID_EH":20069817,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MNE","ADM0_DIFF":"","ADM0_TLC":"MNE","ADM0_A3_US":"MNE","ADM0_A3_FR":"MNE","ADM0_A3_RU":"MNE","ADM0_A3_ES":"MNE","ADM0_A3_CN":"MNE","ADM0_A3_TW":"MNE","ADM0_A3_IN":"MNE","ADM0_A3_NP":"MNE","ADM0_A3_PK":"MNE","ADM0_A3_DE":"MNE","ADM0_A3_GB":"MNE","ADM0_A3_BR":"MNE","ADM0_A3_IL":"MNE","ADM0_A3_PS":"MNE","ADM0_A3_SA":"MNE","ADM0_A3_EG":"MNE","ADM0_A3_MA":"MNE","ADM0_A3_PT":"MNE","ADM0_A3_AR":"MNE","ADM0_A3_JP":"MNE","ADM0_A3_KO":"MNE","ADM0_A3_VN":"MNE","ADM0_A3_TR":"MNE","ADM0_A3_ID":"MNE","ADM0_A3_PL":"MNE","ADM0_A3_GR":"MNE","ADM0_A3_IT":"MNE","ADM0_A3_NL":"MNE","ADM0_A3_SE":"MNE","ADM0_A3_BD":"MNE","ADM0_A3_UA":"MNE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":19.143727,"LABEL_Y":42.803101,"NE_ID":1159321069,"WIKIDATAID":"Q236","NAME_AR":"الجبل الأسود","NAME_BN":"মন্টিনিগ্রো","NAME_DE":"Montenegro","NAME_EN":"Montenegro","NAME_ES":"Montenegro","NAME_FA":"مونتهنگرو","NAME_FR":"Monténégro","NAME_EL":"Μαυροβούνιο","NAME_HE":"מונטנגרו","NAME_HI":"मॉन्टेनीग्रो","NAME_HU":"Montenegró","NAME_ID":"Montenegro","NAME_IT":"Montenegro","NAME_JA":"モンテネグロ","NAME_KO":"몬테네그로","NAME_NL":"Montenegro","NAME_PL":"Czarnogóra","NAME_PT":"Montenegro","NAME_RU":"Черногория","NAME_SV":"Montenegro","NAME_TR":"Karadağ","NAME_UK":"Чорногорія","NAME_UR":"مونٹینیگرو","NAME_VI":"Montenegro","NAME_ZH":"黑山","NAME_ZHT":"蒙特內哥羅","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[87.81425781249999,49.1623046875],[87.97968750000001,48.555126953125],[88.51708984375,48.38447265625],[89.04765624999999,48.0025390625],[89.56093750000002,48.003955078124996],[90.31328124999999,47.676171874999994],[90.49619140625003,47.28515625],[90.86992187499999,46.954492187499994],[91.03388671875001,46.52900390625],[91.00175781249999,46.035791015624994],[90.66181640625001,45.525244140625],[90.87724609374999,45.196093749999996],[91.58437500000002,45.076513671875],[92.78789062499999,45.0357421875],[93.65644531250001,44.9009765625],[94.71201171875003,44.350830078125],[95.35029296875001,44.278076171875],[95.91250000000002,43.206494140625],[96.38544921875001,42.720361328124994],[97.20566406250003,42.789794921875],[99.46787109375003,42.568212890625],[99.98378906250002,42.67734375],[101.7138671875,42.4658203125],[101.97294921874999,42.215869140624996],[103.07285156250003,42.00595703125],[103.71113281250001,41.751318359375],[104.49824218750001,41.877001953124996],[104.49824218750001,41.65869140625],[105.19707031249999,41.738037109375],[106.77001953125,42.288720703124994],[108.17119140624999,42.447314453124996],[109.44316406249999,42.455957031249994],[110.400390625,42.773681640625],[111.00722656250002,43.34140625],[111.93320312500003,43.71142578125],[111.40224609375002,44.36728515625],[111.89804687500003,45.0640625],[113.58701171875003,44.745703125],[114.0302734375,44.942578125],[114.51718750000003,45.364599609375],[115.68105468750002,45.458251953125],[116.24062500000002,45.79599609375],[116.56259765625003,46.289794921875],[117.33339843750002,46.36201171875],[118.30869140625003,46.717041015625],[119.70664062500003,46.606005859374996],[119.89785156250002,46.857812499999994],[119.71113281250001,47.15],[118.49843750000002,47.983984375],[117.76835937499999,47.987890625],[117.35078125000001,47.652197265625],[116.76054687499999,47.869775390624994],[115.89824218749999,47.686914062499994],[115.5576171875,47.94501953125],[116.68330078125001,49.823779296874996],[116.13457031249999,50.010791015624996],[115.27451171875003,49.948876953124994],[114.7431640625,50.233691406249996],[114.29707031250001,50.2744140625],[113.16416015625003,49.797167968749996],[113.05556640625002,49.616259765624996],[111.33662109375001,49.355859374999994],[110.82792968749999,49.166162109374994],[110.19990234375001,49.17041015625],[109.23671875000002,49.334912109375],[108.61367187500002,49.322802734374996],[108.03378906250003,49.593994140625],[107.94785156250003,49.924707031249994],[107.23330078125002,49.989404296874994],[106.71113281250001,50.31259765625],[106.21787109375003,50.304589843749994],[105.38359374999999,50.47373046875],[103.63291015625003,50.138574218749994],[102.68330078125001,50.387158203125],[102.28837890624999,50.585107421874994],[102.11152343750001,51.353466796875],[101.38125000000002,51.45263671875],[100.53623046875003,51.7134765625],[99.92167968749999,51.755517578125],[98.8486328125,52.070068359375],[97.94687500000003,51.348437499999996],[97.82529296875003,50.985253906249994],[98.27949218750001,50.533251953124996],[98.10341796875002,50.07783203125],[97.20859375000003,49.730810546875],[96.98574218750002,49.8828125],[95.85195312500002,50.012939453125],[95.52265625000001,49.91123046875],[94.61474609375,50.023730468749996],[94.25107421875003,50.556396484375],[91.80429687500003,50.693603515625],[89.64384765624999,49.90302734375],[89.65410156249999,49.71748046875],[88.83164062500003,49.4484375],[88.19257812500001,49.451708984374996],[87.81425781249999,49.1623046875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Mongolia","SOV_A3":"MNG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Mongolia","ADM0_A3":"MNG","GEOU_DIF":0,"GEOUNIT":"Mongolia","GU_A3":"MNG","SU_DIF":0,"SUBUNIT":"Mongolia","SU_A3":"MNG","BRK_DIFF":0,"NAME":"Mongolia","NAME_LONG":"Mongolia","BRK_A3":"MNG","BRK_NAME":"Mongolia","BRK_GROUP":"","ABBREV":"Mong.","POSTAL":"MN","FORMAL_EN":"Mongolia","FORMAL_FR":"","NAME_CIAWF":"Mongolia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Mongolia","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":5,"MAPCOLOR9":5,"MAPCOLOR13":6,"POP_EST":3225167,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":13996,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"MG","ISO_A2":"MN","ISO_A2_EH":"MN","ISO_A3":"MNG","ISO_A3_EH":"MNG","ISO_N3":"496","ISO_N3_EH":"496","UN_A3":"496","WB_A2":"MN","WB_A3":"MNG","WOE_ID":23424887,"WOE_ID_EH":23424887,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MNG","ADM0_DIFF":"","ADM0_TLC":"MNG","ADM0_A3_US":"MNG","ADM0_A3_FR":"MNG","ADM0_A3_RU":"MNG","ADM0_A3_ES":"MNG","ADM0_A3_CN":"MNG","ADM0_A3_TW":"MNG","ADM0_A3_IN":"MNG","ADM0_A3_NP":"MNG","ADM0_A3_PK":"MNG","ADM0_A3_DE":"MNG","ADM0_A3_GB":"MNG","ADM0_A3_BR":"MNG","ADM0_A3_IL":"MNG","ADM0_A3_PS":"MNG","ADM0_A3_SA":"MNG","ADM0_A3_EG":"MNG","ADM0_A3_MA":"MNG","ADM0_A3_PT":"MNG","ADM0_A3_AR":"MNG","ADM0_A3_JP":"MNG","ADM0_A3_KO":"MNG","ADM0_A3_VN":"MNG","ADM0_A3_TR":"MNG","ADM0_A3_ID":"MNG","ADM0_A3_PL":"MNG","ADM0_A3_GR":"MNG","ADM0_A3_IT":"MNG","ADM0_A3_NL":"MNG","ADM0_A3_SE":"MNG","ADM0_A3_BD":"MNG","ADM0_A3_UA":"MNG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7,"LABEL_X":104.150405,"LABEL_Y":45.997488,"NE_ID":1159321071,"WIKIDATAID":"Q711","NAME_AR":"منغوليا","NAME_BN":"মঙ্গোলিয়া","NAME_DE":"Mongolei","NAME_EN":"Mongolia","NAME_ES":"Mongolia","NAME_FA":"مغولستان","NAME_FR":"Mongolie","NAME_EL":"Μογγολία","NAME_HE":"מונגוליה","NAME_HI":"मंगोलिया","NAME_HU":"Mongólia","NAME_ID":"Mongolia","NAME_IT":"Mongolia","NAME_JA":"モンゴル国","NAME_KO":"몽골","NAME_NL":"Mongolië","NAME_PL":"Mongolia","NAME_PT":"Mongólia","NAME_RU":"Монголия","NAME_SV":"Mongoliet","NAME_TR":"Moğolistan","NAME_UK":"Монголія","NAME_UR":"منگولیا","NAME_VI":"Mông Cổ","NAME_ZH":"蒙古国","NAME_ZHT":"蒙古國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[26.618945312500017,48.25986328125],[26.980761718750017,48.155029296875],[27.3369140625,47.63974609375],[28.07177734375,46.978417968749994],[28.24433593750001,46.45126953125],[28.099707031250006,45.972607421875],[28.212500000000006,45.450439453125],[28.94775390625,46.049951171874994],[29.146289062500017,46.526904296874996],[29.837890625,46.350537109375],[29.877832031250023,46.828906249999996],[29.54931640625,47.246826171875],[29.159765625000006,47.4556640625],[29.19482421875,47.882421875],[27.549218750000023,48.477734375],[26.618945312500017,48.25986328125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Moldova","SOV_A3":"MDA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Moldova","ADM0_A3":"MDA","GEOU_DIF":0,"GEOUNIT":"Moldova","GU_A3":"MDA","SU_DIF":0,"SUBUNIT":"Moldova","SU_A3":"MDA","BRK_DIFF":0,"NAME":"Moldova","NAME_LONG":"Moldova","BRK_A3":"MDA","BRK_NAME":"Moldova","BRK_GROUP":"","ABBREV":"Mda.","POSTAL":"MD","FORMAL_EN":"Republic of Moldova","FORMAL_FR":"","NAME_CIAWF":"Moldova","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Moldova","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":5,"MAPCOLOR9":4,"MAPCOLOR13":12,"POP_EST":2657637,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":11968,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"MD","ISO_A2":"MD","ISO_A2_EH":"MD","ISO_A3":"MDA","ISO_A3_EH":"MDA","ISO_N3":"498","ISO_N3_EH":"498","UN_A3":"498","WB_A2":"MD","WB_A3":"MDA","WOE_ID":23424885,"WOE_ID_EH":23424885,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MDA","ADM0_DIFF":"","ADM0_TLC":"MDA","ADM0_A3_US":"MDA","ADM0_A3_FR":"MDA","ADM0_A3_RU":"MDA","ADM0_A3_ES":"MDA","ADM0_A3_CN":"MDA","ADM0_A3_TW":"MDA","ADM0_A3_IN":"MDA","ADM0_A3_NP":"MDA","ADM0_A3_PK":"MDA","ADM0_A3_DE":"MDA","ADM0_A3_GB":"MDA","ADM0_A3_BR":"MDA","ADM0_A3_IL":"MDA","ADM0_A3_PS":"MDA","ADM0_A3_SA":"MDA","ADM0_A3_EG":"MDA","ADM0_A3_MA":"MDA","ADM0_A3_PT":"MDA","ADM0_A3_AR":"MDA","ADM0_A3_JP":"MDA","ADM0_A3_KO":"MDA","ADM0_A3_VN":"MDA","ADM0_A3_TR":"MDA","ADM0_A3_ID":"MDA","ADM0_A3_PL":"MDA","ADM0_A3_GR":"MDA","ADM0_A3_IT":"MDA","ADM0_A3_NL":"MDA","ADM0_A3_SE":"MDA","ADM0_A3_BD":"MDA","ADM0_A3_UA":"MDA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":28.487904,"LABEL_Y":47.434999,"NE_ID":1159321045,"WIKIDATAID":"Q217","NAME_AR":"مولدوفا","NAME_BN":"মলদোভা","NAME_DE":"Republik Moldau","NAME_EN":"Moldova","NAME_ES":"Moldavia","NAME_FA":"مولداوی","NAME_FR":"Moldavie","NAME_EL":"Μολδαβία","NAME_HE":"מולדובה","NAME_HI":"मॉल्डोवा","NAME_HU":"Moldova","NAME_ID":"Moldova","NAME_IT":"Moldavia","NAME_JA":"モルドバ","NAME_KO":"몰도바","NAME_NL":"Moldavië","NAME_PL":"Mołdawia","NAME_PT":"Moldávia","NAME_RU":"Молдавия","NAME_SV":"Moldavien","NAME_TR":"Moldova","NAME_UK":"Молдова","NAME_UR":"مالدووا","NAME_VI":"Moldova","NAME_ZH":"摩尔多瓦","NAME_ZHT":"摩爾多瓦","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":6,"LABELRANK":6,"SOVEREIGNT":"Monaco","SOV_A3":"MCO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Monaco","ADM0_A3":"MCO","GEOU_DIF":0,"GEOUNIT":"Monaco","GU_A3":"MCO","SU_DIF":0,"SUBUNIT":"Monaco","SU_A3":"MCO","BRK_DIFF":0,"NAME":"Monaco","NAME_LONG":"Monaco","BRK_A3":"MCO","BRK_NAME":"Monaco","BRK_GROUP":"","ABBREV":"Mco.","POSTAL":"MC","FORMAL_EN":"Principality of Monaco","FORMAL_FR":"","NAME_CIAWF":"Monaco","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Monaco","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":2,"MAPCOLOR13":12,"POP_EST":38964,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":7188,"GDP_YEAR":2018,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"MN","ISO_A2":"MC","ISO_A2_EH":"MC","ISO_A3":"MCO","ISO_A3_EH":"MCO","ISO_N3":"492","ISO_N3_EH":"492","UN_A3":"492","WB_A2":"MC","WB_A3":"MCO","WOE_ID":23424892,"WOE_ID_EH":23424892,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MCO","ADM0_DIFF":"","ADM0_TLC":"MCO","ADM0_A3_US":"MCO","ADM0_A3_FR":"MCO","ADM0_A3_RU":"MCO","ADM0_A3_ES":"MCO","ADM0_A3_CN":"MCO","ADM0_A3_TW":"MCO","ADM0_A3_IN":"MCO","ADM0_A3_NP":"MCO","ADM0_A3_PK":"MCO","ADM0_A3_DE":"MCO","ADM0_A3_GB":"MCO","ADM0_A3_BR":"MCO","ADM0_A3_IL":"MCO","ADM0_A3_PS":"MCO","ADM0_A3_SA":"MCO","ADM0_A3_EG":"MCO","ADM0_A3_MA":"MCO","ADM0_A3_PT":"MCO","ADM0_A3_AR":"MCO","ADM0_A3_JP":"MCO","ADM0_A3_KO":"MCO","ADM0_A3_VN":"MCO","ADM0_A3_TR":"MCO","ADM0_A3_ID":"MCO","ADM0_A3_PL":"MCO","ADM0_A3_GR":"MCO","ADM0_A3_IT":"MCO","ADM0_A3_NL":"MCO","ADM0_A3_SE":"MCO","ADM0_A3_BD":"MCO","ADM0_A3_UA":"MCO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":5,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":7.398291,"LABEL_Y":43.739652,"NE_ID":1159321043,"WIKIDATAID":"Q235","NAME_AR":"موناكو","NAME_BN":"মোনাকো","NAME_DE":"Monaco","NAME_EN":"Monaco","NAME_ES":"Mónaco","NAME_FA":"موناکو","NAME_FR":"Monaco","NAME_EL":"Μονακό","NAME_HE":"מונקו","NAME_HI":"मोनैको","NAME_HU":"Monaco","NAME_ID":"Monako","NAME_IT":"Principato di Monaco","NAME_JA":"モナコ","NAME_KO":"모나코","NAME_NL":"Monaco","NAME_PL":"Monako","NAME_PT":"Mónaco","NAME_RU":"Монако","NAME_SV":"Monaco","NAME_TR":"Monako","NAME_UK":"Монако","NAME_UR":"موناکو","NAME_VI":"Monaco","NAME_ZH":"摩纳哥","NAME_ZHT":"摩納哥","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-117.128271484375,32.533349609374994],[-116.66215820312499,31.564892578124997],[-116.062158203125,30.804150390624997],[-115.673828125,29.756396484374996],[-114.99350585937499,29.384423828124994],[-114.1455078125,28.605419921874997],[-114.048486328125,28.426171874999994],[-114.3005859375,27.872998046874997],[-114.99350585937499,27.736035156249997],[-114.445263671875,27.218164062499994],[-113.840966796875,26.966503906249997],[-113.59853515625,26.7212890625],[-113.20576171875,26.856982421874996],[-113.020751953125,26.583251953125],[-112.37724609375,26.213916015624996],[-112.05576171874999,25.488232421874997],[-112.07255859375,24.840039062499997],[-111.4193359375,24.329003906249994],[-110.3626953125,23.604931640624997],[-109.92343749999999,22.885888671874994],[-109.458056640625,23.214746093749994],[-109.420849609375,23.480126953124994],[-110.02280273437499,24.174609375000003],[-110.54697265624999,24.214160156250003],[-110.67724609375,24.788525390624997],[-111.034423828125,25.52695312499999],[-111.29160156249999,25.789794921875],[-111.56967773437499,26.7076171875],[-112.00908203125,26.967089843749996],[-112.32919921874999,27.5234375],[-112.734033203125,27.825976562499996],[-112.870849609375,28.424218749999994],[-113.49970703125,28.926708984374997],[-113.75546874999999,29.367480468749996],[-114.372607421875,29.830224609374994],[-114.64975585937499,30.238134765625],[-114.63330078125,30.506884765624996],[-114.881884765625,31.156396484374994],[-114.839501953125,31.798535156249997],[-114.14931640625,31.507373046874996],[-113.04672851562499,31.179248046874996],[-113.11044921874999,30.793310546875],[-112.73837890624999,29.98544921875],[-112.22348632812499,29.269482421874997],[-112.161767578125,29.018896484375],[-111.680078125,28.470556640625],[-111.12138671875,27.966992187499997],[-110.52988281249999,27.864208984374997],[-110.477783203125,27.322656249999994],[-109.943994140625,27.079345703125],[-109.75478515625,26.702929687499996],[-109.482861328125,26.710351562499994],[-109.19970703125,26.305224609374996],[-109.42563476562499,26.032568359375],[-109.3849609375,25.72714843749999],[-108.373681640625,25.1943359375],[-107.951171875,24.614892578124994],[-106.935498046875,23.881249999999994],[-106.40224609375,23.195605468750003],[-105.791796875,22.627490234375003],[-105.64912109375,21.988085937500003],[-105.20869140625,21.49082031249999],[-105.237060546875,21.119189453125003],[-105.66943359375,20.38559570312499],[-105.482080078125,19.97607421875],[-104.9384765625,19.309375000000003],[-103.91245117187499,18.82846679687499],[-103.4416015625,18.325390624999997],[-102.69956054687499,18.06284179687499],[-101.8470703125,17.922265624999994],[-101.60029296875,17.651562499999997],[-100.847802734375,17.200488281250003],[-100.02451171874999,16.92050781249999],[-99.690673828125,16.719628906249994],[-98.76220703125,16.53476562499999],[-98.52031249999999,16.304833984374994],[-97.75478515625,15.966845703125003],[-97.18466796874999,15.909277343749991],[-96.51083984374999,15.651904296875003],[-95.46440429687499,15.974707031249991],[-94.90043945312499,16.41748046875],[-94.6615234375,16.201904296875],[-94.374169921875,16.28476562499999],[-93.91606445312499,16.05356445312499],[-92.80893554687499,15.138574218749994],[-92.23515624999999,14.54541015625],[-92.07480468749999,15.07421875],[-92.187158203125,15.320898437499991],[-91.736572265625,16.07016601562499],[-90.44716796875,16.072705078124997],[-90.4169921875,16.391015624999994],[-91.409619140625,17.255859375],[-90.99296874999999,17.25244140625],[-90.98916015625,17.81640625],[-89.16147460937499,17.814843749999994],[-88.80634765625,17.965527343749997],[-88.52299804687499,18.44589843749999],[-88.295654296875,18.472412109375],[-88.19677734375,18.719677734374997],[-87.76181640624999,18.44614257812499],[-87.424755859375,19.58334960937499],[-87.4671875,20.10214843749999],[-86.864697265625,20.885058593750003],[-86.82407226562499,21.421679687500003],[-88.13164062499999,21.615869140624994],[-88.87871093749999,21.414111328125003],[-89.819775390625,21.274609374999997],[-90.35312499999999,21.009423828124994],[-90.484130859375,20.556347656249997],[-90.507080078125,19.911865234375],[-90.7392578125,19.352246093749997],[-91.34306640624999,18.900585937499997],[-91.27524414062499,18.624462890624997],[-91.802978515625,18.470605468749994],[-91.973779296875,18.715869140625003],[-92.710107421875,18.61166992187499],[-92.884765625,18.468652343749994],[-93.55234374999999,18.430468750000003],[-94.18901367187499,18.195263671874997],[-94.54619140624999,18.174853515625003],[-94.79814453124999,18.514599609374997],[-95.1818359375,18.700732421875003],[-95.82109374999999,18.754638671875],[-96.28955078125,19.34375],[-96.4560546875,19.869775390624994],[-97.12143554687499,20.614990234375],[-97.63754882812499,21.603662109374994],[-97.8578125,22.62451171875],[-97.66767578125,24.38999023437499],[-97.507080078125,25.014550781249994],[-97.146240234375,25.961474609375003],[-97.358154296875,25.870507812499994],[-98.08281249999999,26.064453125],[-99.10776367187499,26.446923828124994],[-99.4435546875,27.036669921874996],[-99.505322265625,27.54833984375],[-100.296044921875,28.327685546874996],[-100.658642578125,29.068554687499997],[-101.440380859375,29.77685546875],[-102.2689453125,29.87119140625],[-102.73417968749999,29.643945312499994],[-102.8919921875,29.21640625],[-103.25771484375,29.001123046874994],[-104.400634765625,29.57373046875],[-104.97880859375,30.645947265624997],[-106.25571289062499,31.544677734375],[-106.45322265624999,31.770166015624994],[-108.21181640625,31.779345703124996],[-108.21445312499999,31.329443359375],[-111.0419921875,31.32421875],[-112.93896484375,31.916259765625],[-114.8359375,32.50830078125],[-114.724755859375,32.71533203125],[-117.128271484375,32.533349609374994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Mexico","SOV_A3":"MEX","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Mexico","ADM0_A3":"MEX","GEOU_DIF":0,"GEOUNIT":"Mexico","GU_A3":"MEX","SU_DIF":0,"SUBUNIT":"Mexico","SU_A3":"MEX","BRK_DIFF":0,"NAME":"Mexico","NAME_LONG":"Mexico","BRK_A3":"MEX","BRK_NAME":"Mexico","BRK_GROUP":"","ABBREV":"Mex.","POSTAL":"MX","FORMAL_EN":"United Mexican States","FORMAL_FR":"","NAME_CIAWF":"Mexico","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Mexico","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":1,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":127575529,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":1268870,"GDP_YEAR":2019,"ECONOMY":"4. Emerging region: MIKT","INCOME_GRP":"3. Upper middle income","FIPS_10":"MX","ISO_A2":"MX","ISO_A2_EH":"MX","ISO_A3":"MEX","ISO_A3_EH":"MEX","ISO_N3":"484","ISO_N3_EH":"484","UN_A3":"484","WB_A2":"MX","WB_A3":"MEX","WOE_ID":23424900,"WOE_ID_EH":23424900,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MEX","ADM0_DIFF":"","ADM0_TLC":"MEX","ADM0_A3_US":"MEX","ADM0_A3_FR":"MEX","ADM0_A3_RU":"MEX","ADM0_A3_ES":"MEX","ADM0_A3_CN":"MEX","ADM0_A3_TW":"MEX","ADM0_A3_IN":"MEX","ADM0_A3_NP":"MEX","ADM0_A3_PK":"MEX","ADM0_A3_DE":"MEX","ADM0_A3_GB":"MEX","ADM0_A3_BR":"MEX","ADM0_A3_IL":"MEX","ADM0_A3_PS":"MEX","ADM0_A3_SA":"MEX","ADM0_A3_EG":"MEX","ADM0_A3_MA":"MEX","ADM0_A3_PT":"MEX","ADM0_A3_AR":"MEX","ADM0_A3_JP":"MEX","ADM0_A3_KO":"MEX","ADM0_A3_VN":"MEX","ADM0_A3_TR":"MEX","ADM0_A3_ID":"MEX","ADM0_A3_PL":"MEX","ADM0_A3_GR":"MEX","ADM0_A3_IT":"MEX","ADM0_A3_NL":"MEX","ADM0_A3_SE":"MEX","ADM0_A3_BD":"MEX","ADM0_A3_UA":"MEX","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":6.7,"LABEL_X":-102.289448,"LABEL_Y":23.919988,"NE_ID":1159321055,"WIKIDATAID":"Q96","NAME_AR":"المكسيك","NAME_BN":"মেক্সিকো","NAME_DE":"Mexiko","NAME_EN":"Mexico","NAME_ES":"México","NAME_FA":"مکزیک","NAME_FR":"Mexique","NAME_EL":"Μεξικό","NAME_HE":"מקסיקו","NAME_HI":"मेक्सिको","NAME_HU":"Mexikó","NAME_ID":"Meksiko","NAME_IT":"Messico","NAME_JA":"メキシコ","NAME_KO":"멕시코","NAME_NL":"Mexico","NAME_PL":"Meksyk","NAME_PT":"México","NAME_RU":"Мексика","NAME_SV":"Mexiko","NAME_TR":"Meksika","NAME_UK":"Мексика","NAME_UR":"میکسیکو","NAME_VI":"México","NAME_ZH":"墨西哥","NAME_ZHT":"墨西哥","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Mauritius","SOV_A3":"MUS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Mauritius","ADM0_A3":"MUS","GEOU_DIF":0,"GEOUNIT":"Mauritius","GU_A3":"MUS","SU_DIF":0,"SUBUNIT":"Mauritius","SU_A3":"MUS","BRK_DIFF":0,"NAME":"Mauritius","NAME_LONG":"Mauritius","BRK_A3":"MUS","BRK_NAME":"Mauritius","BRK_GROUP":"","ABBREV":"Mus.","POSTAL":"MU","FORMAL_EN":"Republic of Mauritius","FORMAL_FR":"","NAME_CIAWF":"Mauritius","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Mauritius","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":5,"MAPCOLOR13":7,"POP_EST":1265711,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":14048,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"MP","ISO_A2":"MU","ISO_A2_EH":"MU","ISO_A3":"MUS","ISO_A3_EH":"MUS","ISO_N3":"480","ISO_N3_EH":"480","UN_A3":"480","WB_A2":"MU","WB_A3":"MUS","WOE_ID":23424894,"WOE_ID_EH":23424894,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MUS","ADM0_DIFF":"","ADM0_TLC":"MUS","ADM0_A3_US":"MUS","ADM0_A3_FR":"MUS","ADM0_A3_RU":"MUS","ADM0_A3_ES":"MUS","ADM0_A3_CN":"MUS","ADM0_A3_TW":"MUS","ADM0_A3_IN":"MUS","ADM0_A3_NP":"MUS","ADM0_A3_PK":"MUS","ADM0_A3_DE":"MUS","ADM0_A3_GB":"MUS","ADM0_A3_BR":"MUS","ADM0_A3_IL":"MUS","ADM0_A3_PS":"MUS","ADM0_A3_SA":"MUS","ADM0_A3_EG":"MUS","ADM0_A3_MA":"MUS","ADM0_A3_PT":"MUS","ADM0_A3_AR":"MUS","ADM0_A3_JP":"MUS","ADM0_A3_KO":"MUS","ADM0_A3_VN":"MUS","ADM0_A3_TR":"MUS","ADM0_A3_ID":"MUS","ADM0_A3_PL":"MUS","ADM0_A3_GR":"MUS","ADM0_A3_IT":"MUS","ADM0_A3_NL":"MUS","ADM0_A3_SE":"MUS","ADM0_A3_BD":"MUS","ADM0_A3_UA":"MUS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":57.565848,"LABEL_Y":-20.299506,"NE_ID":1159321079,"WIKIDATAID":"Q1027","NAME_AR":"موريشيوس","NAME_BN":"মরিশাস","NAME_DE":"Mauritius","NAME_EN":"Mauritius","NAME_ES":"Mauricio","NAME_FA":"موریس","NAME_FR":"Maurice","NAME_EL":"Μαυρίκιος","NAME_HE":"מאוריציוס","NAME_HI":"मॉरिशस","NAME_HU":"Mauritius","NAME_ID":"Mauritius","NAME_IT":"Mauritius","NAME_JA":"モーリシャス","NAME_KO":"모리셔스","NAME_NL":"Mauritius","NAME_PL":"Mauritius","NAME_PT":"Maurícia","NAME_RU":"Маврикий","NAME_SV":"Mauritius","NAME_TR":"Mauritius","NAME_UK":"Маврикій","NAME_UR":"موریشس","NAME_VI":"Mauritius","NAME_ZH":"毛里求斯","NAME_ZHT":"模里西斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-12.280615234374977,14.809033203124997],[-11.872851562499989,14.995166015625003],[-11.760156249999994,15.425537109375],[-11.502685546875,15.636816406249991],[-10.895605468749977,15.150488281249991],[-10.696582031249989,15.422656250000003],[-9.94140625,15.373779296875],[-9.176806640624989,15.49609375],[-7.559374999999989,15.496142578125003],[-5.512499999999989,15.496289062499997],[-5.359912109374989,16.282861328124994],[-5.628662109375,16.568652343750003],[-5.884082031249989,18.798876953125003],[-6.083398437499994,20.539501953124997],[-6.368115234374983,23.026123046875],[-6.594091796874977,24.99462890625],[-4.822607421874977,24.99560546875],[-6.238671874999994,25.848193359375003],[-8.683349609375,27.285937499999996],[-8.682226562499977,25.995507812499994],[-10.376123046874994,25.99545898437499],[-12.016308593749983,25.995410156250003],[-12.0234375,23.467578125000003],[-12.620410156249989,23.27133789062499],[-13.031494140625,23.000244140625],[-13.094335937499977,22.495996093749994],[-13.016210937499977,21.333935546874997],[-15.231201171875,21.331298828125],[-16.964550781249983,21.329248046874994],[-17.048046874999983,20.80615234375],[-16.429785156249977,20.65234375],[-16.21044921875,20.227929687499994],[-16.283398437499983,19.787158203125003],[-16.51445312499999,19.361962890624994],[-16.213085937499983,19.003320312499994],[-16.0849609375,18.521191406249997],[-16.07890624999999,17.545849609374997],[-16.535742187499977,16.286816406249997],[-16.535253906249977,15.83837890625],[-16.441015624999977,16.204541015624997],[-16.168359374999994,16.547070312499997],[-15.620800781249983,16.506591796875],[-15.112646484374977,16.644921874999994],[-14.300097656249989,16.580273437499997],[-13.868457031249989,16.148144531249997],[-13.40966796875,16.05917968749999],[-13.258007812499983,15.700390624999997],[-12.858496093749977,15.242529296874991],[-12.280615234374977,14.809033203124997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":3,"SOVEREIGNT":"Mauritania","SOV_A3":"MRT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Mauritania","ADM0_A3":"MRT","GEOU_DIF":0,"GEOUNIT":"Mauritania","GU_A3":"MRT","SU_DIF":0,"SUBUNIT":"Mauritania","SU_A3":"MRT","BRK_DIFF":0,"NAME":"Mauritania","NAME_LONG":"Mauritania","BRK_A3":"MRT","BRK_NAME":"Mauritania","BRK_GROUP":"","ABBREV":"Mrt.","POSTAL":"MR","FORMAL_EN":"Islamic Republic of Mauritania","FORMAL_FR":"","NAME_CIAWF":"Mauritania","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Mauritania","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":2,"MAPCOLOR13":1,"POP_EST":4525696,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":7600,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"MR","ISO_A2":"MR","ISO_A2_EH":"MR","ISO_A3":"MRT","ISO_A3_EH":"MRT","ISO_N3":"478","ISO_N3_EH":"478","UN_A3":"478","WB_A2":"MR","WB_A3":"MRT","WOE_ID":23424896,"WOE_ID_EH":23424896,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MRT","ADM0_DIFF":"","ADM0_TLC":"MRT","ADM0_A3_US":"MRT","ADM0_A3_FR":"MRT","ADM0_A3_RU":"MRT","ADM0_A3_ES":"MRT","ADM0_A3_CN":"MRT","ADM0_A3_TW":"MRT","ADM0_A3_IN":"MRT","ADM0_A3_NP":"MRT","ADM0_A3_PK":"MRT","ADM0_A3_DE":"MRT","ADM0_A3_GB":"MRT","ADM0_A3_BR":"MRT","ADM0_A3_IL":"MRT","ADM0_A3_PS":"MRT","ADM0_A3_SA":"MRT","ADM0_A3_EG":"MRT","ADM0_A3_MA":"MRT","ADM0_A3_PT":"MRT","ADM0_A3_AR":"MRT","ADM0_A3_JP":"MRT","ADM0_A3_KO":"MRT","ADM0_A3_VN":"MRT","ADM0_A3_TR":"MRT","ADM0_A3_ID":"MRT","ADM0_A3_PL":"MRT","ADM0_A3_GR":"MRT","ADM0_A3_IT":"MRT","ADM0_A3_NL":"MRT","ADM0_A3_SE":"MRT","ADM0_A3_BD":"MRT","ADM0_A3_UA":"MRT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-9.740299,"LABEL_Y":19.587062,"NE_ID":1159321075,"WIKIDATAID":"Q1025","NAME_AR":"موريتانيا","NAME_BN":"মৌরিতানিয়া","NAME_DE":"Mauretanien","NAME_EN":"Mauritania","NAME_ES":"Mauritania","NAME_FA":"موریتانی","NAME_FR":"Mauritanie","NAME_EL":"Μαυριτανία","NAME_HE":"מאוריטניה","NAME_HI":"मॉरीतानिया","NAME_HU":"Mauritánia","NAME_ID":"Mauritania","NAME_IT":"Mauritania","NAME_JA":"モーリタニア","NAME_KO":"모리타니","NAME_NL":"Mauritanië","NAME_PL":"Mauretania","NAME_PT":"Mauritânia","NAME_RU":"Мавритания","NAME_SV":"Mauretanien","NAME_TR":"Moritanya","NAME_UK":"Мавританія","NAME_UR":"موریتانیہ","NAME_VI":"Mauritanie","NAME_ZH":"毛里塔尼亚","NAME_ZHT":"茅利塔尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":5,"SOVEREIGNT":"Malta","SOV_A3":"MLT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Malta","ADM0_A3":"MLT","GEOU_DIF":0,"GEOUNIT":"Malta","GU_A3":"MLT","SU_DIF":0,"SUBUNIT":"Malta","SU_A3":"MLT","BRK_DIFF":0,"NAME":"Malta","NAME_LONG":"Malta","BRK_A3":"MLT","BRK_NAME":"Malta","BRK_GROUP":"","ABBREV":"Malta","POSTAL":"M","FORMAL_EN":"Republic of Malta","FORMAL_FR":"","NAME_CIAWF":"Malta","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Malta","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":502653,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":14989,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"MT","ISO_A2":"MT","ISO_A2_EH":"MT","ISO_A3":"MLT","ISO_A3_EH":"MLT","ISO_N3":"470","ISO_N3_EH":"470","UN_A3":"470","WB_A2":"MT","WB_A3":"MLT","WOE_ID":23424897,"WOE_ID_EH":23424897,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MLT","ADM0_DIFF":"","ADM0_TLC":"MLT","ADM0_A3_US":"MLT","ADM0_A3_FR":"MLT","ADM0_A3_RU":"MLT","ADM0_A3_ES":"MLT","ADM0_A3_CN":"MLT","ADM0_A3_TW":"MLT","ADM0_A3_IN":"MLT","ADM0_A3_NP":"MLT","ADM0_A3_PK":"MLT","ADM0_A3_DE":"MLT","ADM0_A3_GB":"MLT","ADM0_A3_BR":"MLT","ADM0_A3_IL":"MLT","ADM0_A3_PS":"MLT","ADM0_A3_SA":"MLT","ADM0_A3_EG":"MLT","ADM0_A3_MA":"MLT","ADM0_A3_PT":"MLT","ADM0_A3_AR":"MLT","ADM0_A3_JP":"MLT","ADM0_A3_KO":"MLT","ADM0_A3_VN":"MLT","ADM0_A3_TR":"MLT","ADM0_A3_ID":"MLT","ADM0_A3_PL":"MLT","ADM0_A3_GR":"MLT","ADM0_A3_IT":"MLT","ADM0_A3_NL":"MLT","ADM0_A3_SE":"MLT","ADM0_A3_BD":"MLT","ADM0_A3_UA":"MLT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Middle East & North Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":14.433005,"LABEL_Y":35.892886,"NE_ID":1159321065,"WIKIDATAID":"Q233","NAME_AR":"مالطا","NAME_BN":"মাল্টা","NAME_DE":"Malta","NAME_EN":"Malta","NAME_ES":"Malta","NAME_FA":"مالت","NAME_FR":"Malte","NAME_EL":"Μάλτα","NAME_HE":"מלטה","NAME_HI":"माल्टा","NAME_HU":"Málta","NAME_ID":"Malta","NAME_IT":"Malta","NAME_JA":"マルタ","NAME_KO":"몰타","NAME_NL":"Malta","NAME_PL":"Malta","NAME_PT":"Malta","NAME_RU":"Мальта","NAME_SV":"Malta","NAME_TR":"Malta","NAME_UK":"Мальта","NAME_UR":"مالٹا","NAME_VI":"Malta","NAME_ZH":"马耳他","NAME_ZHT":"馬耳他","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-11.389404296875,12.404394531249991],[-11.30517578125,12.015429687499989],[-10.933203124999977,12.205175781249991],[-10.677343749999977,11.8994140625],[-10.274853515624983,12.212646484375],[-9.820703124999994,12.04248046875],[-9.043066406249977,12.40234375],[-8.822021484375,11.673242187499994],[-8.407470703125,11.386279296874989],[-8.231494140624989,10.43798828125],[-7.990624999999994,10.162499999999994],[-7.6611328125,10.427441406249997],[-7.104882812499994,10.203515624999994],[-6.693261718749994,10.349462890624991],[-6.261132812499994,10.724072265624997],[-6.034570312499994,10.19482421875],[-5.523535156249977,10.426025390625],[-5.490478515625,11.042382812499994],[-5.299853515624989,11.205957031249994],[-5.288134765624989,11.827929687499989],[-4.797949218749977,12.032128906249994],[-4.4287109375,12.337597656249997],[-4.480615234374994,12.672216796874991],[-4.227099609374989,12.793701171875],[-4.328710937499977,13.119042968749994],[-4.051171874999994,13.382421874999991],[-3.5757812499999773,13.194189453124991],[-3.3017578125,13.28076171875],[-3.198437499999983,13.6728515625],[-2.457226562499983,14.274121093749997],[-2.113232421874983,14.16845703125],[-1.767773437499983,14.486035156249997],[-1.049560546875,14.819531249999997],[-0.760449218749983,15.047753906249994],[-0.23588867187498863,15.059423828124991],[0.21748046875001137,14.911474609374991],[0.9600585937500057,14.986914062499991],[1.3001953125000227,15.272265625000003],[3.5042968750000227,15.356347656249994],[3.876953125,15.755273437499994],[4.121289062500011,16.357714843750003],[4.234667968750017,16.996386718750003],[4.227636718750006,19.142773437499997],[3.40087890625,18.988427734374994],[3.1060546875000057,19.150097656249997],[3.255859375,19.410937500000003],[3.2037109375000057,19.789697265624994],[2.4061523437500227,20.063867187499994],[2.2193359375000057,20.247802734375],[1.6854492187500227,20.378369140624997],[1.1657226562500114,20.817431640625003],[1.1455078125,21.102246093749997],[-1.29296875,22.696533203125],[-3.2578613281249886,23.981250000000003],[-4.822607421874977,24.99560546875],[-6.594091796874977,24.99462890625],[-6.368115234374983,23.026123046875],[-6.083398437499994,20.539501953124997],[-5.884082031249989,18.798876953125003],[-5.628662109375,16.568652343750003],[-5.359912109374989,16.282861328124994],[-5.512499999999989,15.496289062499997],[-7.559374999999989,15.496142578125003],[-9.176806640624989,15.49609375],[-9.94140625,15.373779296875],[-10.696582031249989,15.422656250000003],[-10.895605468749977,15.150488281249991],[-11.502685546875,15.636816406249991],[-11.760156249999994,15.425537109375],[-11.872851562499989,14.995166015625003],[-12.280615234374977,14.809033203124997],[-12.019189453124994,14.206494140624997],[-12.05419921875,13.633056640625],[-11.634960937499983,13.369873046875],[-11.390380859375,12.941992187499991],[-11.389404296875,12.404394531249991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Mali","SOV_A3":"MLI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Mali","ADM0_A3":"MLI","GEOU_DIF":0,"GEOUNIT":"Mali","GU_A3":"MLI","SU_DIF":0,"SUBUNIT":"Mali","SU_A3":"MLI","BRK_DIFF":0,"NAME":"Mali","NAME_LONG":"Mali","BRK_A3":"MLI","BRK_NAME":"Mali","BRK_GROUP":"","ABBREV":"Mali","POSTAL":"ML","FORMAL_EN":"Republic of Mali","FORMAL_FR":"","NAME_CIAWF":"Mali","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Mali","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":7,"POP_EST":19658031,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":17279,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"ML","ISO_A2":"ML","ISO_A2_EH":"ML","ISO_A3":"MLI","ISO_A3_EH":"MLI","ISO_N3":"466","ISO_N3_EH":"466","UN_A3":"466","WB_A2":"ML","WB_A3":"MLI","WOE_ID":23424891,"WOE_ID_EH":23424891,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MLI","ADM0_DIFF":"","ADM0_TLC":"MLI","ADM0_A3_US":"MLI","ADM0_A3_FR":"MLI","ADM0_A3_RU":"MLI","ADM0_A3_ES":"MLI","ADM0_A3_CN":"MLI","ADM0_A3_TW":"MLI","ADM0_A3_IN":"MLI","ADM0_A3_NP":"MLI","ADM0_A3_PK":"MLI","ADM0_A3_DE":"MLI","ADM0_A3_GB":"MLI","ADM0_A3_BR":"MLI","ADM0_A3_IL":"MLI","ADM0_A3_PS":"MLI","ADM0_A3_SA":"MLI","ADM0_A3_EG":"MLI","ADM0_A3_MA":"MLI","ADM0_A3_PT":"MLI","ADM0_A3_AR":"MLI","ADM0_A3_JP":"MLI","ADM0_A3_KO":"MLI","ADM0_A3_VN":"MLI","ADM0_A3_TR":"MLI","ADM0_A3_ID":"MLI","ADM0_A3_PL":"MLI","ADM0_A3_GR":"MLI","ADM0_A3_IT":"MLI","ADM0_A3_NL":"MLI","ADM0_A3_SE":"MLI","ADM0_A3_BD":"MLI","ADM0_A3_UA":"MLI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7,"LABEL_X":-2.038455,"LABEL_Y":18.692713,"NE_ID":1159321063,"WIKIDATAID":"Q912","NAME_AR":"مالي","NAME_BN":"মালি","NAME_DE":"Mali","NAME_EN":"Mali","NAME_ES":"Malí","NAME_FA":"مالی","NAME_FR":"Mali","NAME_EL":"Μάλι","NAME_HE":"מאלי","NAME_HI":"माली","NAME_HU":"Mali","NAME_ID":"Mali","NAME_IT":"Mali","NAME_JA":"マリ共和国","NAME_KO":"말리","NAME_NL":"Mali","NAME_PL":"Mali","NAME_PT":"Mali","NAME_RU":"Мали","NAME_SV":"Mali","NAME_TR":"Mali","NAME_UK":"Малі","NAME_UR":"مالی","NAME_VI":"Mali","NAME_ZH":"马里","NAME_ZHT":"馬利共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":5,"SOVEREIGNT":"Maldives","SOV_A3":"MDV","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Maldives","ADM0_A3":"MDV","GEOU_DIF":0,"GEOUNIT":"Maldives","GU_A3":"MDV","SU_DIF":0,"SUBUNIT":"Maldives","SU_A3":"MDV","BRK_DIFF":0,"NAME":"Maldives","NAME_LONG":"Maldives","BRK_A3":"MDV","BRK_NAME":"Maldives","BRK_GROUP":"","ABBREV":"Mald.","POSTAL":"MV","FORMAL_EN":"Republic of Maldives","FORMAL_FR":"","NAME_CIAWF":"Maldives","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Maldives","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":1,"MAPCOLOR13":7,"POP_EST":530953,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":5642,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"MV","ISO_A2":"MV","ISO_A2_EH":"MV","ISO_A3":"MDV","ISO_A3_EH":"MDV","ISO_N3":"462","ISO_N3_EH":"462","UN_A3":"462","WB_A2":"MV","WB_A3":"MDV","WOE_ID":23424899,"WOE_ID_EH":23424899,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MDV","ADM0_DIFF":"","ADM0_TLC":"MDV","ADM0_A3_US":"MDV","ADM0_A3_FR":"MDV","ADM0_A3_RU":"MDV","ADM0_A3_ES":"MDV","ADM0_A3_CN":"MDV","ADM0_A3_TW":"MDV","ADM0_A3_IN":"MDV","ADM0_A3_NP":"MDV","ADM0_A3_PK":"MDV","ADM0_A3_DE":"MDV","ADM0_A3_GB":"MDV","ADM0_A3_BR":"MDV","ADM0_A3_IL":"MDV","ADM0_A3_PS":"MDV","ADM0_A3_SA":"MDV","ADM0_A3_EG":"MDV","ADM0_A3_MA":"MDV","ADM0_A3_PT":"MDV","ADM0_A3_AR":"MDV","ADM0_A3_JP":"MDV","ADM0_A3_KO":"MDV","ADM0_A3_VN":"MDV","ADM0_A3_TR":"MDV","ADM0_A3_ID":"MDV","ADM0_A3_PL":"MDV","ADM0_A3_GR":"MDV","ADM0_A3_IT":"MDV","ADM0_A3_NL":"MDV","ADM0_A3_SE":"MDV","ADM0_A3_BD":"MDV","ADM0_A3_UA":"MDV","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":73.507554,"LABEL_Y":4.174441,"NE_ID":1159321053,"WIKIDATAID":"Q826","NAME_AR":"المالديف","NAME_BN":"মালদ্বীপ","NAME_DE":"Malediven","NAME_EN":"Maldives","NAME_ES":"Maldivas","NAME_FA":"مالدیو","NAME_FR":"Maldives","NAME_EL":"Μαλδίβες","NAME_HE":"האיים המלדיביים","NAME_HI":"मालदीव","NAME_HU":"Maldív-szigetek","NAME_ID":"Maladewa","NAME_IT":"Maldive","NAME_JA":"モルディブ","NAME_KO":"몰디브","NAME_NL":"Maldiven","NAME_PL":"Malediwy","NAME_PT":"Maldivas","NAME_RU":"Мальдивы","NAME_SV":"Maldiverna","NAME_TR":"Maldivler","NAME_UK":"Мальдіви","NAME_UR":"مالدیپ","NAME_VI":"Maldives","NAME_ZH":"马尔代夫","NAME_ZHT":"馬爾地夫","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[100.119140625,6.4419921874999915],[100.34326171875,5.984179687499989],[100.35263671875003,5.587695312499989],[100.61455078124999,4.652246093749994],[100.71542968750003,3.9662109374999943],[101.29990234375003,3.2532714843749915],[101.29550781250003,2.885205078124997],[102.72714843750003,1.8555664062499915],[103.69453125000001,1.4496582031249972],[104.28847656250002,1.4806640624999972],[103.81220703125001,2.5804687499999943],[103.439453125,2.93310546875],[103.36201171875001,3.7691406249999915],[103.46875,4.393261718749997],[103.41582031249999,4.850292968749997],[102.982421875,5.524951171874989],[102.10107421875,6.242236328124989],[101.87363281250003,5.8252929687499915],[101.55605468750002,5.907763671874989],[101.25703125000001,5.789355468749989],[101.05351562499999,6.242578124999994],[100.34541015625001,6.5499023437499915],[100.119140625,6.4419921874999915]]],[[[117.57441406250001,4.170605468749997],[118.498046875,4.362353515624989],[118.18535156249999,4.828515624999994],[119.13222656250002,5.100488281249994],[119.22343749999999,5.412646484374989],[118.59482421875003,5.592089843749989],[118.11582031250003,5.862499999999997],[118.00380859375002,6.0533203124999915],[117.6171875,5.940722656249989],[117.64570312500001,6.473681640624989],[117.29404296875003,6.676904296874994],[116.49472656250003,6.521679687499997],[116.13837890625001,6.129541015624994],[115.796875,5.5361328125],[115.41904296875003,5.4131835937499915],[115.51982421874999,5.0489257812499915],[115.14003906250002,4.8997558593749915],[115.02675781250002,4.899707031249989],[114.74667968750003,4.718066406249989],[114.84023437500002,4.393212890624994],[114.60830078125002,4.023974609374989],[114.06386718750002,4.592675781249994],[113.92392578125003,4.243212890624989],[113.04472656249999,3.2052246093749943],[112.7373046875,3.0704589843749943],[111.72773437500001,2.8538085937499886],[111.2421875,2.435742187499997],[111.15419921875002,1.73876953125],[110.93994140625,1.517333984375],[110.34921875000003,1.7197265625],[109.98457031250001,1.7176269531249915],[109.62890625,2.027539062499997],[109.65400390625001,1.6148925781249943],[110.50576171875002,0.8619628906249943],[110.93808593750003,1.017333984375],[111.76972656250001,0.9994628906249972],[112.07851562500002,1.1433593749999886],[112.18574218750001,1.4390624999999915],[112.47617187500003,1.55908203125],[113.62226562500001,1.2359374999999915],[113.90234375,1.4342773437499972],[114.5458984375,1.4671386718749915],[114.83056640625,1.9800292968749886],[114.78642578124999,2.25048828125],[115.17910156250002,2.523193359375],[115.08632812500002,2.8411132812499886],[115.45439453124999,3.0343261718749943],[115.56845703125003,3.9387695312499886],[115.89619140625001,4.348681640624989],[117.1005859375,4.337060546874994],[117.57441406250001,4.170605468749997]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Malaysia","SOV_A3":"MYS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Malaysia","ADM0_A3":"MYS","GEOU_DIF":0,"GEOUNIT":"Malaysia","GU_A3":"MYS","SU_DIF":0,"SUBUNIT":"Malaysia","SU_A3":"MYS","BRK_DIFF":0,"NAME":"Malaysia","NAME_LONG":"Malaysia","BRK_A3":"MYS","BRK_NAME":"Malaysia","BRK_GROUP":"","ABBREV":"Malay.","POSTAL":"MY","FORMAL_EN":"Malaysia","FORMAL_FR":"","NAME_CIAWF":"Malaysia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Malaysia","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":4,"MAPCOLOR9":3,"MAPCOLOR13":6,"POP_EST":31949777,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":364681,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"MY","ISO_A2":"MY","ISO_A2_EH":"MY","ISO_A3":"MYS","ISO_A3_EH":"MYS","ISO_N3":"458","ISO_N3_EH":"458","UN_A3":"458","WB_A2":"MY","WB_A3":"MYS","WOE_ID":23424901,"WOE_ID_EH":23424901,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MYS","ADM0_DIFF":"","ADM0_TLC":"MYS","ADM0_A3_US":"MYS","ADM0_A3_FR":"MYS","ADM0_A3_RU":"MYS","ADM0_A3_ES":"MYS","ADM0_A3_CN":"MYS","ADM0_A3_TW":"MYS","ADM0_A3_IN":"MYS","ADM0_A3_NP":"MYS","ADM0_A3_PK":"MYS","ADM0_A3_DE":"MYS","ADM0_A3_GB":"MYS","ADM0_A3_BR":"MYS","ADM0_A3_IL":"MYS","ADM0_A3_PS":"MYS","ADM0_A3_SA":"MYS","ADM0_A3_EG":"MYS","ADM0_A3_MA":"MYS","ADM0_A3_PT":"MYS","ADM0_A3_AR":"MYS","ADM0_A3_JP":"MYS","ADM0_A3_KO":"MYS","ADM0_A3_VN":"MYS","ADM0_A3_TR":"MYS","ADM0_A3_ID":"MYS","ADM0_A3_PL":"MYS","ADM0_A3_GR":"MYS","ADM0_A3_IT":"MYS","ADM0_A3_NL":"MYS","ADM0_A3_SE":"MYS","ADM0_A3_BD":"MYS","ADM0_A3_UA":"MYS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":113.83708,"LABEL_Y":2.528667,"NE_ID":1159321083,"WIKIDATAID":"Q833","NAME_AR":"ماليزيا","NAME_BN":"মালয়েশিয়া","NAME_DE":"Malaysia","NAME_EN":"Malaysia","NAME_ES":"Malasia","NAME_FA":"مالزی","NAME_FR":"Malaisie","NAME_EL":"Μαλαισία","NAME_HE":"מלזיה","NAME_HI":"मलेशिया","NAME_HU":"Malajzia","NAME_ID":"Malaysia","NAME_IT":"Malaysia","NAME_JA":"マレーシア","NAME_KO":"말레이시아","NAME_NL":"Maleisië","NAME_PL":"Malezja","NAME_PT":"Malásia","NAME_RU":"Малайзия","NAME_SV":"Malaysia","NAME_TR":"Malezya","NAME_UK":"Малайзія","NAME_UR":"ملائیشیا","NAME_VI":"Malaysia","NAME_ZH":"马来西亚","NAME_ZHT":"馬來西亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[33.201757812500006,-14.013378906250011],[33.63642578125001,-14.568164062500003],[34.33251953125,-14.408593750000009],[34.50527343750002,-14.59814453125],[34.54082031250002,-15.297265625000009],[34.24824218750001,-15.887500000000003],[34.3955078125,-16.19921875],[35.29042968750002,-17.096972656250003],[35.16718750000001,-16.56025390625001],[35.358496093750006,-16.16054687500001],[35.75527343750002,-16.05830078125001],[35.84716796875,-14.6708984375],[35.24746093750002,-13.896875000000009],[34.56367187500001,-13.360156250000003],[34.36083984375,-12.210546875000006],[34.65957031250002,-11.588671875000003],[34.95947265625,-11.578125],[34.59765625,-11.037500000000009],[34.66181640625001,-10.710058593750006],[34.52421875000002,-10.030175781250009],[34.320898437500006,-9.731542968750006],[32.919921875,-9.407421875000011],[33.35097656250002,-9.862207031250009],[33.65908203125002,-10.590527343750011],[33.261328125000006,-10.893359375000003],[33.37978515625002,-11.157910156250011],[33.22636718750002,-11.534863281250011],[33.25234375000002,-12.112597656250003],[33.39794921875,-12.489843750000006],[33.021582031250006,-12.630468750000006],[32.96757812500002,-13.225000000000009],[32.67207031250001,-13.6103515625],[32.99208984375002,-14.022167968750011],[33.201757812500006,-14.013378906250011]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":6,"SOVEREIGNT":"Malawi","SOV_A3":"MWI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Malawi","ADM0_A3":"MWI","GEOU_DIF":0,"GEOUNIT":"Malawi","GU_A3":"MWI","SU_DIF":0,"SUBUNIT":"Malawi","SU_A3":"MWI","BRK_DIFF":0,"NAME":"Malawi","NAME_LONG":"Malawi","BRK_A3":"MWI","BRK_NAME":"Malawi","BRK_GROUP":"","ABBREV":"Mal.","POSTAL":"MW","FORMAL_EN":"Republic of Malawi","FORMAL_FR":"","NAME_CIAWF":"Malawi","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Malawi","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":5,"POP_EST":18628747,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":7666,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"MI","ISO_A2":"MW","ISO_A2_EH":"MW","ISO_A3":"MWI","ISO_A3_EH":"MWI","ISO_N3":"454","ISO_N3_EH":"454","UN_A3":"454","WB_A2":"MW","WB_A3":"MWI","WOE_ID":23424889,"WOE_ID_EH":23424889,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MWI","ADM0_DIFF":"","ADM0_TLC":"MWI","ADM0_A3_US":"MWI","ADM0_A3_FR":"MWI","ADM0_A3_RU":"MWI","ADM0_A3_ES":"MWI","ADM0_A3_CN":"MWI","ADM0_A3_TW":"MWI","ADM0_A3_IN":"MWI","ADM0_A3_NP":"MWI","ADM0_A3_PK":"MWI","ADM0_A3_DE":"MWI","ADM0_A3_GB":"MWI","ADM0_A3_BR":"MWI","ADM0_A3_IL":"MWI","ADM0_A3_PS":"MWI","ADM0_A3_SA":"MWI","ADM0_A3_EG":"MWI","ADM0_A3_MA":"MWI","ADM0_A3_PT":"MWI","ADM0_A3_AR":"MWI","ADM0_A3_JP":"MWI","ADM0_A3_KO":"MWI","ADM0_A3_VN":"MWI","ADM0_A3_TR":"MWI","ADM0_A3_ID":"MWI","ADM0_A3_PL":"MWI","ADM0_A3_GR":"MWI","ADM0_A3_IT":"MWI","ADM0_A3_NL":"MWI","ADM0_A3_SE":"MWI","ADM0_A3_BD":"MWI","ADM0_A3_UA":"MWI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":33.608082,"LABEL_Y":-13.386737,"NE_ID":1159321081,"WIKIDATAID":"Q1020","NAME_AR":"مالاوي","NAME_BN":"মালাউই","NAME_DE":"Malawi","NAME_EN":"Malawi","NAME_ES":"Malaui","NAME_FA":"مالاوی","NAME_FR":"Malawi","NAME_EL":"Μαλάουι","NAME_HE":"מלאווי","NAME_HI":"मलावी","NAME_HU":"Malawi","NAME_ID":"Malawi","NAME_IT":"Malawi","NAME_JA":"マラウイ","NAME_KO":"말라위","NAME_NL":"Malawi","NAME_PL":"Malawi","NAME_PT":"Malawi","NAME_RU":"Малави","NAME_SV":"Malawi","NAME_TR":"Malavi","NAME_UK":"Малаві","NAME_UR":"ملاوی","NAME_VI":"Malawi","NAME_ZH":"马拉维","NAME_ZHT":"馬拉威","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[49.53828125000001,-12.43212890625],[49.20703125,-12.07958984375],[48.89960937500001,-12.45849609375],[48.796484375000006,-13.267480468750009],[47.99550781250002,-13.96044921875],[47.8115234375,-14.544824218750009],[46.47509765625,-15.513476562500003],[46.33144531250002,-15.713671875000003],[45.7001953125,-15.813769531250003],[45.598242187500006,-15.992578125000009],[45.16679687500002,-15.982812500000009],[44.9091796875,-16.17451171875001],[44.476171875000006,-16.21728515625],[44.42138671875,-16.70263671875],[43.97939453125002,-17.3916015625],[44.0400390625,-18.28847656250001],[44.23310546875001,-18.74062500000001],[44.23876953125,-19.0751953125],[44.448828125000006,-19.4287109375],[44.23964843750002,-20.379687500000003],[43.80019531250002,-21.17919921875],[43.50185546875002,-21.3564453125],[43.2666015625,-22.04931640625],[43.39785156250002,-22.886328125000006],[43.722265625000006,-23.52968750000001],[43.6875,-24.35791015625],[44.03535156250001,-24.995703125000006],[44.34589843750001,-25.22607421875],[44.81289062500002,-25.33417968750001],[45.115234375,-25.543066406250006],[45.50800781250001,-25.56318359375001],[46.15869140625,-25.23037109375001],[46.728515625,-25.14990234375],[47.177343750000006,-24.787207031250006],[47.55800781250002,-23.874609375000006],[47.90839843750001,-22.4658203125],[48.35078125000001,-21.34902343750001],[48.607031250000006,-20.45751953125],[49.47783203125002,-17.898535156250006],[49.437109375000006,-17.3466796875],[49.767187500000006,-16.81513671875001],[49.8310546875,-16.255859375],[49.64990234375,-15.566992187500006],[49.892578125,-15.457714843750011],[50.208984375,-15.96044921875],[50.48271484375002,-15.385644531250009],[50.2353515625,-14.732031250000006],[50.173828125,-14.040234375000011],[49.9375,-13.072265625],[49.53828125000001,-12.43212890625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Madagascar","SOV_A3":"MDG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Madagascar","ADM0_A3":"MDG","GEOU_DIF":0,"GEOUNIT":"Madagascar","GU_A3":"MDG","SU_DIF":0,"SUBUNIT":"Madagascar","SU_A3":"MDG","BRK_DIFF":0,"NAME":"Madagascar","NAME_LONG":"Madagascar","BRK_A3":"MDG","BRK_NAME":"Madagascar","BRK_GROUP":"","ABBREV":"Mad.","POSTAL":"MG","FORMAL_EN":"Republic of Madagascar","FORMAL_FR":"","NAME_CIAWF":"Madagascar","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Madagascar","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":5,"MAPCOLOR9":2,"MAPCOLOR13":3,"POP_EST":26969307,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":14114,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"MA","ISO_A2":"MG","ISO_A2_EH":"MG","ISO_A3":"MDG","ISO_A3_EH":"MDG","ISO_N3":"450","ISO_N3_EH":"450","UN_A3":"450","WB_A2":"MG","WB_A3":"MDG","WOE_ID":23424883,"WOE_ID_EH":23424883,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MDG","ADM0_DIFF":"","ADM0_TLC":"MDG","ADM0_A3_US":"MDG","ADM0_A3_FR":"MDG","ADM0_A3_RU":"MDG","ADM0_A3_ES":"MDG","ADM0_A3_CN":"MDG","ADM0_A3_TW":"MDG","ADM0_A3_IN":"MDG","ADM0_A3_NP":"MDG","ADM0_A3_PK":"MDG","ADM0_A3_DE":"MDG","ADM0_A3_GB":"MDG","ADM0_A3_BR":"MDG","ADM0_A3_IL":"MDG","ADM0_A3_PS":"MDG","ADM0_A3_SA":"MDG","ADM0_A3_EG":"MDG","ADM0_A3_MA":"MDG","ADM0_A3_PT":"MDG","ADM0_A3_AR":"MDG","ADM0_A3_JP":"MDG","ADM0_A3_KO":"MDG","ADM0_A3_VN":"MDG","ADM0_A3_TR":"MDG","ADM0_A3_ID":"MDG","ADM0_A3_PL":"MDG","ADM0_A3_GR":"MDG","ADM0_A3_IT":"MDG","ADM0_A3_NL":"MDG","ADM0_A3_SE":"MDG","ADM0_A3_BD":"MDG","ADM0_A3_UA":"MDG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":7,"LABEL_X":46.704241,"LABEL_Y":-18.628288,"NE_ID":1159321051,"WIKIDATAID":"Q1019","NAME_AR":"مدغشقر","NAME_BN":"মাদাগাস্কার","NAME_DE":"Madagaskar","NAME_EN":"Madagascar","NAME_ES":"Madagascar","NAME_FA":"ماداگاسکار","NAME_FR":"Madagascar","NAME_EL":"Μαδαγασκάρη","NAME_HE":"מדגסקר","NAME_HI":"मेडागास्कर","NAME_HU":"Madagaszkár","NAME_ID":"Madagaskar","NAME_IT":"Madagascar","NAME_JA":"マダガスカル","NAME_KO":"마다가스카르","NAME_NL":"Madagaskar","NAME_PL":"Madagaskar","NAME_PT":"Madagáscar","NAME_RU":"Мадагаскар","NAME_SV":"Madagaskar","NAME_TR":"Madagaskar","NAME_UK":"Мадагаскар","NAME_UR":"مڈغاسکر","NAME_VI":"Madagascar","NAME_ZH":"马达加斯加","NAME_ZHT":"馬達加斯加","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[21.5625,42.247509765625],[21.05976562500001,42.171289062499994],[20.566210937500017,41.873681640624994],[20.48896484375001,41.272607421874994],[20.964257812500023,40.849902343749996],[21.575781250000006,40.868945312499996],[21.929492187500017,41.107421875],[22.493554687500023,41.118505859375],[22.916015625,41.336279296875],[23.005664062500017,41.716943359374994],[22.836816406250023,41.993603515625],[22.344042968750017,42.31396484375],[21.5625,42.247509765625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"North Macedonia","SOV_A3":"MKD","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"North Macedonia","ADM0_A3":"MKD","GEOU_DIF":0,"GEOUNIT":"North Macedonia","GU_A3":"MKD","SU_DIF":0,"SUBUNIT":"North Macedonia","SU_A3":"MKD","BRK_DIFF":0,"NAME":"North Macedonia","NAME_LONG":"North Macedonia","BRK_A3":"MKD","BRK_NAME":"North Macedonia","BRK_GROUP":"","ABBREV":"N. Mac.","POSTAL":"NM","FORMAL_EN":"Republic of North Macedonia","FORMAL_FR":"","NAME_CIAWF":"North Macedonia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"North Macedonia","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":2083459,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":12547,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"MK","ISO_A2":"MK","ISO_A2_EH":"MK","ISO_A3":"MKD","ISO_A3_EH":"MKD","ISO_N3":"807","ISO_N3_EH":"807","UN_A3":"807","WB_A2":"MK","WB_A3":"MKD","WOE_ID":23424890,"WOE_ID_EH":23424890,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MKD","ADM0_DIFF":"","ADM0_TLC":"MKD","ADM0_A3_US":"MKD","ADM0_A3_FR":"MKD","ADM0_A3_RU":"MKD","ADM0_A3_ES":"MKD","ADM0_A3_CN":"MKD","ADM0_A3_TW":"MKD","ADM0_A3_IN":"MKD","ADM0_A3_NP":"MKD","ADM0_A3_PK":"MKD","ADM0_A3_DE":"MKD","ADM0_A3_GB":"MKD","ADM0_A3_BR":"MKD","ADM0_A3_IL":"MKD","ADM0_A3_PS":"MKD","ADM0_A3_SA":"MKD","ADM0_A3_EG":"MKD","ADM0_A3_MA":"MKD","ADM0_A3_PT":"MKD","ADM0_A3_AR":"MKD","ADM0_A3_JP":"MKD","ADM0_A3_KO":"MKD","ADM0_A3_VN":"MKD","ADM0_A3_TR":"MKD","ADM0_A3_ID":"MKD","ADM0_A3_PL":"MKD","ADM0_A3_GR":"MKD","ADM0_A3_IT":"MKD","ADM0_A3_NL":"MKD","ADM0_A3_SE":"MKD","ADM0_A3_BD":"MKD","ADM0_A3_UA":"MKD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":15,"LONG_LEN":15,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":21.555839,"LABEL_Y":41.558223,"NE_ID":1159321061,"WIKIDATAID":"Q221","NAME_AR":"مقدونيا الشمالية","NAME_BN":"উত্তর মেসিডোনিয়া","NAME_DE":"Nordmazedonien","NAME_EN":"North Macedonia","NAME_ES":"Macedonia del Norte","NAME_FA":"مقدونیه شمالی","NAME_FR":"Macédoine du Nord","NAME_EL":"Βόρεια Μακεδονία","NAME_HE":"מקדוניה הצפונית","NAME_HI":"उत्तर मैसिडोनिया","NAME_HU":"Észak-Macedónia","NAME_ID":"Republik Makedonia Utara","NAME_IT":"Macedonia del Nord","NAME_JA":"北マケドニア","NAME_KO":"북마케도니아","NAME_NL":"Noord-Macedonië","NAME_PL":"Macedonia Północna","NAME_PT":"Macedónia do Norte","NAME_RU":"Северная Македония","NAME_SV":"Nordmakedonien","NAME_TR":"Kuzey Makedonya","NAME_UK":"Північна Македонія","NAME_UR":"شمالی مقدونیہ","NAME_VI":"Bắc Macedonia","NAME_ZH":"北马其顿","NAME_ZHT":"北馬其頓","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[6.116503906250017,50.120996093749994],[5.744042968750023,49.91962890625],[5.789746093750011,49.53828125],[6.344335937500006,49.452734375],[6.4873046875,49.798486328124994],[6.116503906250017,50.120996093749994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Luxembourg","SOV_A3":"LUX","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Luxembourg","ADM0_A3":"LUX","GEOU_DIF":0,"GEOUNIT":"Luxembourg","GU_A3":"LUX","SU_DIF":0,"SUBUNIT":"Luxembourg","SU_A3":"LUX","BRK_DIFF":0,"NAME":"Luxembourg","NAME_LONG":"Luxembourg","BRK_A3":"LUX","BRK_NAME":"Luxembourg","BRK_GROUP":"","ABBREV":"Lux.","POSTAL":"L","FORMAL_EN":"Grand Duchy of Luxembourg","FORMAL_FR":"","NAME_CIAWF":"Luxembourg","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Luxembourg","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":7,"MAPCOLOR9":3,"MAPCOLOR13":7,"POP_EST":619896,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":71104,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"LU","ISO_A2":"LU","ISO_A2_EH":"LU","ISO_A3":"LUX","ISO_A3_EH":"LUX","ISO_N3":"442","ISO_N3_EH":"442","UN_A3":"442","WB_A2":"LU","WB_A3":"LUX","WOE_ID":23424881,"WOE_ID_EH":23424881,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LUX","ADM0_DIFF":"","ADM0_TLC":"LUX","ADM0_A3_US":"LUX","ADM0_A3_FR":"LUX","ADM0_A3_RU":"LUX","ADM0_A3_ES":"LUX","ADM0_A3_CN":"LUX","ADM0_A3_TW":"LUX","ADM0_A3_IN":"LUX","ADM0_A3_NP":"LUX","ADM0_A3_PK":"LUX","ADM0_A3_DE":"LUX","ADM0_A3_GB":"LUX","ADM0_A3_BR":"LUX","ADM0_A3_IL":"LUX","ADM0_A3_PS":"LUX","ADM0_A3_SA":"LUX","ADM0_A3_EG":"LUX","ADM0_A3_MA":"LUX","ADM0_A3_PT":"LUX","ADM0_A3_AR":"LUX","ADM0_A3_JP":"LUX","ADM0_A3_KO":"LUX","ADM0_A3_VN":"LUX","ADM0_A3_TR":"LUX","ADM0_A3_ID":"LUX","ADM0_A3_PL":"LUX","ADM0_A3_GR":"LUX","ADM0_A3_IT":"LUX","ADM0_A3_NL":"LUX","ADM0_A3_SE":"LUX","ADM0_A3_BD":"LUX","ADM0_A3_UA":"LUX","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":5,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5.7,"MAX_LABEL":10,"LABEL_X":6.07762,"LABEL_Y":49.733732,"NE_ID":1159321031,"WIKIDATAID":"Q32","NAME_AR":"لوكسمبورغ","NAME_BN":"লুক্সেমবুর্গ","NAME_DE":"Luxemburg","NAME_EN":"Luxembourg","NAME_ES":"Luxemburgo","NAME_FA":"لوکزامبورگ","NAME_FR":"Luxembourg","NAME_EL":"Λουξεμβούργο","NAME_HE":"לוקסמבורג","NAME_HI":"लक्ज़मबर्ग","NAME_HU":"Luxemburg","NAME_ID":"Luksemburg","NAME_IT":"Lussemburgo","NAME_JA":"ルクセンブルク","NAME_KO":"룩셈부르크","NAME_NL":"Luxemburg","NAME_PL":"Luksemburg","NAME_PT":"Luxemburgo","NAME_RU":"Люксембург","NAME_SV":"Luxemburg","NAME_TR":"Lüksemburg","NAME_UK":"Люксембург","NAME_UR":"لکسمبرگ","NAME_VI":"Luxembourg","NAME_ZH":"卢森堡","NAME_ZHT":"盧森堡","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[22.766210937500006,54.356787109375],[23.45361328125,54.14345703125],[23.484667968750017,53.939794921875],[24.768164062500006,53.974658203124996],[25.54736328125,54.331835937499996],[25.859277343750023,54.919287109375],[26.175195312500023,55.003271484375],[26.593554687500017,55.667529296874996],[24.90302734375001,56.398193359375],[24.120703125000006,56.2642578125],[22.084570312500006,56.40673828125],[21.04609375000001,56.070068359375],[21.235742187500023,55.264111328125],[22.83125000000001,54.8384765625],[22.766210937500006,54.356787109375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":5,"SOVEREIGNT":"Lithuania","SOV_A3":"LTU","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Lithuania","ADM0_A3":"LTU","GEOU_DIF":0,"GEOUNIT":"Lithuania","GU_A3":"LTU","SU_DIF":0,"SUBUNIT":"Lithuania","SU_A3":"LTU","BRK_DIFF":0,"NAME":"Lithuania","NAME_LONG":"Lithuania","BRK_A3":"LTU","BRK_NAME":"Lithuania","BRK_GROUP":"","ABBREV":"Lith.","POSTAL":"LT","FORMAL_EN":"Republic of Lithuania","FORMAL_FR":"","NAME_CIAWF":"Lithuania","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Lithuania","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":3,"MAPCOLOR13":9,"POP_EST":2786844,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":54627,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"3. Upper middle income","FIPS_10":"LH","ISO_A2":"LT","ISO_A2_EH":"LT","ISO_A3":"LTU","ISO_A3_EH":"LTU","ISO_N3":"440","ISO_N3_EH":"440","UN_A3":"440","WB_A2":"LT","WB_A3":"LTU","WOE_ID":23424875,"WOE_ID_EH":23424875,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LTU","ADM0_DIFF":"","ADM0_TLC":"LTU","ADM0_A3_US":"LTU","ADM0_A3_FR":"LTU","ADM0_A3_RU":"LTU","ADM0_A3_ES":"LTU","ADM0_A3_CN":"LTU","ADM0_A3_TW":"LTU","ADM0_A3_IN":"LTU","ADM0_A3_NP":"LTU","ADM0_A3_PK":"LTU","ADM0_A3_DE":"LTU","ADM0_A3_GB":"LTU","ADM0_A3_BR":"LTU","ADM0_A3_IL":"LTU","ADM0_A3_PS":"LTU","ADM0_A3_SA":"LTU","ADM0_A3_EG":"LTU","ADM0_A3_MA":"LTU","ADM0_A3_PT":"LTU","ADM0_A3_AR":"LTU","ADM0_A3_JP":"LTU","ADM0_A3_KO":"LTU","ADM0_A3_VN":"LTU","ADM0_A3_TR":"LTU","ADM0_A3_ID":"LTU","ADM0_A3_PL":"LTU","ADM0_A3_GR":"LTU","ADM0_A3_IT":"LTU","ADM0_A3_NL":"LTU","ADM0_A3_SE":"LTU","ADM0_A3_BD":"LTU","ADM0_A3_UA":"LTU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":24.089932,"LABEL_Y":55.103703,"NE_ID":1159321029,"WIKIDATAID":"Q37","NAME_AR":"ليتوانيا","NAME_BN":"লিথুয়ানিয়া","NAME_DE":"Litauen","NAME_EN":"Lithuania","NAME_ES":"Lituania","NAME_FA":"لیتوانی","NAME_FR":"Lituanie","NAME_EL":"Λιθουανία","NAME_HE":"ליטא","NAME_HI":"लिथुआनिया","NAME_HU":"Litvánia","NAME_ID":"Lituania","NAME_IT":"Lituania","NAME_JA":"リトアニア","NAME_KO":"리투아니아","NAME_NL":"Litouwen","NAME_PL":"Litwa","NAME_PT":"Lituânia","NAME_RU":"Литва","NAME_SV":"Litauen","NAME_TR":"Litvanya","NAME_UK":"Литва","NAME_UR":"لتھووینیا","NAME_VI":"Litva","NAME_ZH":"立陶宛","NAME_ZHT":"立陶宛","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Liechtenstein","SOV_A3":"LIE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Liechtenstein","ADM0_A3":"LIE","GEOU_DIF":0,"GEOUNIT":"Liechtenstein","GU_A3":"LIE","SU_DIF":0,"SUBUNIT":"Liechtenstein","SU_A3":"LIE","BRK_DIFF":0,"NAME":"Liechtenstein","NAME_LONG":"Liechtenstein","BRK_A3":"LIE","BRK_NAME":"Liechtenstein","BRK_GROUP":"","ABBREV":"Liech.","POSTAL":"FL","FORMAL_EN":"Principality of Liechtenstein","FORMAL_FR":"","NAME_CIAWF":"Liechtenstein","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Liechtenstein","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":4,"MAPCOLOR9":2,"MAPCOLOR13":9,"POP_EST":38019,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":6876,"GDP_YEAR":2018,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"LS","ISO_A2":"LI","ISO_A2_EH":"LI","ISO_A3":"LIE","ISO_A3_EH":"LIE","ISO_N3":"438","ISO_N3_EH":"438","UN_A3":"438","WB_A2":"LI","WB_A3":"LIE","WOE_ID":23424879,"WOE_ID_EH":23424879,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LIE","ADM0_DIFF":"","ADM0_TLC":"LIE","ADM0_A3_US":"LIE","ADM0_A3_FR":"LIE","ADM0_A3_RU":"LIE","ADM0_A3_ES":"LIE","ADM0_A3_CN":"LIE","ADM0_A3_TW":"LIE","ADM0_A3_IN":"LIE","ADM0_A3_NP":"LIE","ADM0_A3_PK":"LIE","ADM0_A3_DE":"LIE","ADM0_A3_GB":"LIE","ADM0_A3_BR":"LIE","ADM0_A3_IL":"LIE","ADM0_A3_PS":"LIE","ADM0_A3_SA":"LIE","ADM0_A3_EG":"LIE","ADM0_A3_MA":"LIE","ADM0_A3_PT":"LIE","ADM0_A3_AR":"LIE","ADM0_A3_JP":"LIE","ADM0_A3_KO":"LIE","ADM0_A3_VN":"LIE","ADM0_A3_TR":"LIE","ADM0_A3_ID":"LIE","ADM0_A3_PL":"LIE","ADM0_A3_GR":"LIE","ADM0_A3_IT":"LIE","ADM0_A3_NL":"LIE","ADM0_A3_SE":"LIE","ADM0_A3_BD":"LIE","ADM0_A3_UA":"LIE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":13,"LONG_LEN":13,"ABBREV_LEN":6,"TINY":6,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":9.559439,"LABEL_Y":47.111405,"NE_ID":1159321021,"WIKIDATAID":"Q347","NAME_AR":"ليختنشتاين","NAME_BN":"লিশটেনস্টাইন","NAME_DE":"Liechtenstein","NAME_EN":"Liechtenstein","NAME_ES":"Liechtenstein","NAME_FA":"لیختناشتاین","NAME_FR":"Liechtenstein","NAME_EL":"Λίχτενσταϊν","NAME_HE":"ליכטנשטיין","NAME_HI":"लिक्टेन्स्टाइन","NAME_HU":"Liechtenstein","NAME_ID":"Liechtenstein","NAME_IT":"Liechtenstein","NAME_JA":"リヒテンシュタイン","NAME_KO":"리히텐슈타인","NAME_NL":"Liechtenstein","NAME_PL":"Liechtenstein","NAME_PT":"Liechtenstein","NAME_RU":"Лихтенштейн","NAME_SV":"Liechtenstein","NAME_TR":"Lihtenştayn","NAME_UK":"Ліхтенштейн","NAME_UR":"لیختینستائن","NAME_VI":"Liechtenstein","NAME_ZH":"列支敦士登","NAME_ZHT":"列支敦斯登","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[9.518750000000011,30.229394531249994],[9.310253906250011,30.115234375],[9.672656250000017,29.5669921875],[9.842578125000017,28.966992187499997],[9.916015625,27.785693359374996],[9.74755859375,27.330859374999996],[9.859375,26.551953124999997],[9.491406250000011,26.333740234375],[9.4482421875,26.067138671875],[10.000683593750011,25.332080078125003],[10.255859375,24.591015624999997],[10.686132812500006,24.55136718749999],[11.536914062500017,24.290820312500003],[11.967871093750006,23.517871093750003],[13.481250000000017,23.18017578125],[14.230761718750017,22.618457031250003],[14.97900390625,22.99619140624999],[15.984082031250011,23.445214843749994],[18.231347656250023,22.33554687499999],[19.668554687500006,21.62583007812499],[21.5849609375,20.679492187500003],[23.980273437500017,19.496630859375003],[23.980273437500017,19.99594726562499],[24.9794921875,20.002587890624994],[24.980273437500017,21.995849609375],[24.980273437500017,24.01694335937499],[24.980273437500017,26.487109374999996],[24.980273437500017,29.181884765625],[24.726464843750023,30.2505859375],[24.973925781250017,30.776562499999997],[24.85273437500001,31.334814453125],[25.150488281250006,31.654980468749997],[24.683886718750017,32.015966796875],[24.129687500000017,32.009228515625],[23.28632812500001,32.213818359375],[23.090625000000017,32.61875],[22.187402343750023,32.918261718749996],[21.63593750000001,32.937304687499996],[20.62109375,32.58017578125],[20.121484375000023,32.21875],[19.926367187500006,31.817529296874994],[20.150976562500006,31.07861328125],[19.713281250000023,30.48837890625],[19.29169921875001,30.2880859375],[18.936425781250023,30.290429687499994],[18.1904296875,30.777294921874997],[17.349218750000006,31.081494140624997],[16.123046875,31.264453124999996],[15.496386718750017,31.656787109374996],[15.176562500000017,32.391162109374996],[14.513378906250011,32.511083984375],[14.237109375000017,32.68125],[13.283496093750017,32.9146484375],[12.753515625000006,32.801074218749996],[12.279882812500006,32.858544921874994],[11.504589843750011,33.181933593749996],[11.504980468750006,32.413671875],[10.826367187500011,32.0806640625],[10.114941406250011,31.463769531249994],[10.216406250000006,30.783203125],[9.89501953125,30.3873046875],[9.518750000000011,30.229394531249994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Libya","SOV_A3":"LBY","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Libya","ADM0_A3":"LBY","GEOU_DIF":0,"GEOUNIT":"Libya","GU_A3":"LBY","SU_DIF":0,"SUBUNIT":"Libya","SU_A3":"LBY","BRK_DIFF":0,"NAME":"Libya","NAME_LONG":"Libya","BRK_A3":"LBY","BRK_NAME":"Libya","BRK_GROUP":"","ABBREV":"Libya","POSTAL":"LY","FORMAL_EN":"Libya","FORMAL_FR":"","NAME_CIAWF":"Libya","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Libya","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":11,"POP_EST":6777452,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":52091,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"LY","ISO_A2":"LY","ISO_A2_EH":"LY","ISO_A3":"LBY","ISO_A3_EH":"LBY","ISO_N3":"434","ISO_N3_EH":"434","UN_A3":"434","WB_A2":"LY","WB_A3":"LBY","WOE_ID":23424882,"WOE_ID_EH":23424882,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LBY","ADM0_DIFF":"","ADM0_TLC":"LBY","ADM0_A3_US":"LBY","ADM0_A3_FR":"LBY","ADM0_A3_RU":"LBY","ADM0_A3_ES":"LBY","ADM0_A3_CN":"LBY","ADM0_A3_TW":"LBY","ADM0_A3_IN":"LBY","ADM0_A3_NP":"LBY","ADM0_A3_PK":"LBY","ADM0_A3_DE":"LBY","ADM0_A3_GB":"LBY","ADM0_A3_BR":"LBY","ADM0_A3_IL":"LBY","ADM0_A3_PS":"LBY","ADM0_A3_SA":"LBY","ADM0_A3_EG":"LBY","ADM0_A3_MA":"LBY","ADM0_A3_PT":"LBY","ADM0_A3_AR":"LBY","ADM0_A3_JP":"LBY","ADM0_A3_KO":"LBY","ADM0_A3_VN":"LBY","ADM0_A3_TR":"LBY","ADM0_A3_ID":"LBY","ADM0_A3_PL":"LBY","ADM0_A3_GR":"LBY","ADM0_A3_IT":"LBY","ADM0_A3_NL":"LBY","ADM0_A3_SE":"LBY","ADM0_A3_BD":"LBY","ADM0_A3_UA":"LBY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":18.011015,"LABEL_Y":26.638944,"NE_ID":1159321017,"WIKIDATAID":"Q1016","NAME_AR":"ليبيا","NAME_BN":"লিবিয়া","NAME_DE":"Libyen","NAME_EN":"Libya","NAME_ES":"Libia","NAME_FA":"لیبی","NAME_FR":"Libye","NAME_EL":"Λιβύη","NAME_HE":"לוב","NAME_HI":"लीबिया","NAME_HU":"Líbia","NAME_ID":"Libya","NAME_IT":"Libia","NAME_JA":"リビア","NAME_KO":"리비아","NAME_NL":"Libië","NAME_PL":"Libia","NAME_PT":"Líbia","NAME_RU":"Ливия","NAME_SV":"Libyen","NAME_TR":"Libya","NAME_UK":"Лівія","NAME_UR":"لیبیا","NAME_VI":"Libya","NAME_ZH":"利比亚","NAME_ZHT":"利比亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-11.507519531249983,6.906542968749989],[-10.2763671875,6.07763671875],[-9.132177734374977,5.054638671874997],[-8.259033203125,4.589990234374994],[-7.544970703124989,4.351318359375],[-7.568896484374989,5.0806640624999915],[-7.429833984374994,5.324511718749989],[-7.454394531249989,5.84130859375],[-7.796533203124994,5.97509765625],[-7.888623046874983,6.23486328125],[-8.603564453124989,6.5078125],[-8.332568359374989,6.801562499999989],[-8.296630859375,7.074023437499989],[-8.486425781249977,7.558496093749994],[-8.708300781249989,7.658886718749997],[-8.8896484375,7.2626953125],[-9.117578124999994,7.2159179687499915],[-9.459765624999989,7.442529296874994],[-9.368945312499989,7.639550781249994],[-9.518261718749983,8.346093749999994],[-9.768261718749983,8.534570312499994],[-10.283203125,8.485156249999989],[-10.6474609375,7.7593749999999915],[-11.267675781249977,7.232617187499997],[-11.507519531249983,6.906542968749989]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Liberia","SOV_A3":"LBR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Liberia","ADM0_A3":"LBR","GEOU_DIF":0,"GEOUNIT":"Liberia","GU_A3":"LBR","SU_DIF":0,"SUBUNIT":"Liberia","SU_A3":"LBR","BRK_DIFF":0,"NAME":"Liberia","NAME_LONG":"Liberia","BRK_A3":"LBR","BRK_NAME":"Liberia","BRK_GROUP":"","ABBREV":"Liberia","POSTAL":"LR","FORMAL_EN":"Republic of Liberia","FORMAL_FR":"","NAME_CIAWF":"Liberia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Liberia","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":9,"POP_EST":4937374,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":3070,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"LI","ISO_A2":"LR","ISO_A2_EH":"LR","ISO_A3":"LBR","ISO_A3_EH":"LBR","ISO_N3":"430","ISO_N3_EH":"430","UN_A3":"430","WB_A2":"LR","WB_A3":"LBR","WOE_ID":23424876,"WOE_ID_EH":23424876,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LBR","ADM0_DIFF":"","ADM0_TLC":"LBR","ADM0_A3_US":"LBR","ADM0_A3_FR":"LBR","ADM0_A3_RU":"LBR","ADM0_A3_ES":"LBR","ADM0_A3_CN":"LBR","ADM0_A3_TW":"LBR","ADM0_A3_IN":"LBR","ADM0_A3_NP":"LBR","ADM0_A3_PK":"LBR","ADM0_A3_DE":"LBR","ADM0_A3_GB":"LBR","ADM0_A3_BR":"LBR","ADM0_A3_IL":"LBR","ADM0_A3_PS":"LBR","ADM0_A3_SA":"LBR","ADM0_A3_EG":"LBR","ADM0_A3_MA":"LBR","ADM0_A3_PT":"LBR","ADM0_A3_AR":"LBR","ADM0_A3_JP":"LBR","ADM0_A3_KO":"LBR","ADM0_A3_VN":"LBR","ADM0_A3_TR":"LBR","ADM0_A3_ID":"LBR","ADM0_A3_PL":"LBR","ADM0_A3_GR":"LBR","ADM0_A3_IT":"LBR","ADM0_A3_NL":"LBR","ADM0_A3_SE":"LBR","ADM0_A3_BD":"LBR","ADM0_A3_UA":"LBR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-9.460379,"LABEL_Y":6.447177,"NE_ID":1159321015,"WIKIDATAID":"Q1014","NAME_AR":"ليبيريا","NAME_BN":"লাইবেরিয়া","NAME_DE":"Liberia","NAME_EN":"Liberia","NAME_ES":"Liberia","NAME_FA":"لیبریا","NAME_FR":"Liberia","NAME_EL":"Λιβερία","NAME_HE":"ליבריה","NAME_HI":"लाइबेरिया","NAME_HU":"Libéria","NAME_ID":"Liberia","NAME_IT":"Liberia","NAME_JA":"リベリア","NAME_KO":"라이베리아","NAME_NL":"Liberia","NAME_PL":"Liberia","NAME_PT":"Libéria","NAME_RU":"Либерия","NAME_SV":"Liberia","NAME_TR":"Liberya","NAME_UK":"Ліберія","NAME_UR":"لائبیریا","NAME_VI":"Liberia","NAME_ZH":"利比里亚","NAME_ZHT":"賴比瑞亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[28.736914062500006,-30.10195312500001],[29.098046875000023,-29.919042968750006],[29.390722656250006,-29.26972656250001],[29.301367187500006,-29.08984375],[28.625781250000017,-28.58173828125001],[27.73554687500001,-28.940039062500006],[27.294531250000006,-29.519335937500003],[27.0517578125,-29.6640625],[27.388476562500017,-30.31591796875],[28.018164062500006,-30.64228515625001],[28.39208984375,-30.147558593750006],[28.736914062500006,-30.10195312500001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Lesotho","SOV_A3":"LSO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Lesotho","ADM0_A3":"LSO","GEOU_DIF":0,"GEOUNIT":"Lesotho","GU_A3":"LSO","SU_DIF":0,"SUBUNIT":"Lesotho","SU_A3":"LSO","BRK_DIFF":0,"NAME":"Lesotho","NAME_LONG":"Lesotho","BRK_A3":"LSO","BRK_NAME":"Lesotho","BRK_GROUP":"","ABBREV":"Les.","POSTAL":"LS","FORMAL_EN":"Kingdom of Lesotho","FORMAL_FR":"","NAME_CIAWF":"Lesotho","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Lesotho","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":5,"MAPCOLOR9":2,"MAPCOLOR13":8,"POP_EST":2125268,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":2376,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"LT","ISO_A2":"LS","ISO_A2_EH":"LS","ISO_A3":"LSO","ISO_A3_EH":"LSO","ISO_N3":"426","ISO_N3_EH":"426","UN_A3":"426","WB_A2":"LS","WB_A3":"LSO","WOE_ID":23424880,"WOE_ID_EH":23424880,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LSO","ADM0_DIFF":"","ADM0_TLC":"LSO","ADM0_A3_US":"LSO","ADM0_A3_FR":"LSO","ADM0_A3_RU":"LSO","ADM0_A3_ES":"LSO","ADM0_A3_CN":"LSO","ADM0_A3_TW":"LSO","ADM0_A3_IN":"LSO","ADM0_A3_NP":"LSO","ADM0_A3_PK":"LSO","ADM0_A3_DE":"LSO","ADM0_A3_GB":"LSO","ADM0_A3_BR":"LSO","ADM0_A3_IL":"LSO","ADM0_A3_PS":"LSO","ADM0_A3_SA":"LSO","ADM0_A3_EG":"LSO","ADM0_A3_MA":"LSO","ADM0_A3_PT":"LSO","ADM0_A3_AR":"LSO","ADM0_A3_JP":"LSO","ADM0_A3_KO":"LSO","ADM0_A3_VN":"LSO","ADM0_A3_TR":"LSO","ADM0_A3_ID":"LSO","ADM0_A3_PL":"LSO","ADM0_A3_GR":"LSO","ADM0_A3_IT":"LSO","ADM0_A3_NL":"LSO","ADM0_A3_SE":"LSO","ADM0_A3_BD":"LSO","ADM0_A3_UA":"LSO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Southern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":28.246639,"LABEL_Y":-29.480158,"NE_ID":1159321027,"WIKIDATAID":"Q1013","NAME_AR":"ليسوتو","NAME_BN":"লেসোথো","NAME_DE":"Lesotho","NAME_EN":"Lesotho","NAME_ES":"Lesoto","NAME_FA":"لسوتو","NAME_FR":"Lesotho","NAME_EL":"Λεσότο","NAME_HE":"לסוטו","NAME_HI":"लेसोथो","NAME_HU":"Lesotho","NAME_ID":"Lesotho","NAME_IT":"Lesotho","NAME_JA":"レソト","NAME_KO":"레소토","NAME_NL":"Lesotho","NAME_PL":"Lesotho","NAME_PT":"Lesoto","NAME_RU":"Лесото","NAME_SV":"Lesotho","NAME_TR":"Lesotho","NAME_UK":"Лесото","NAME_UR":"لیسوتھو","NAME_VI":"Lesotho","NAME_ZH":"莱索托","NAME_ZHT":"賴索托","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[35.97626953125001,34.629199218749996],[35.10859375000001,33.08369140625],[35.411230468750006,33.07568359375],[35.84072265625002,33.415673828124994],[35.869140625,33.43173828125],[35.9423828125,33.667578125],[36.5849609375,34.221240234374996],[36.43300781250002,34.6134765625],[35.97626953125001,34.629199218749996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Lebanon","SOV_A3":"LBN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Lebanon","ADM0_A3":"LBN","GEOU_DIF":0,"GEOUNIT":"Lebanon","GU_A3":"LBN","SU_DIF":0,"SUBUNIT":"Lebanon","SU_A3":"LBN","BRK_DIFF":0,"NAME":"Lebanon","NAME_LONG":"Lebanon","BRK_A3":"LBN","BRK_NAME":"Lebanon","BRK_GROUP":"","ABBREV":"Leb.","POSTAL":"LB","FORMAL_EN":"Lebanese Republic","FORMAL_FR":"","NAME_CIAWF":"Lebanon","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Lebanon","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":12,"POP_EST":6855713,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":51991,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"LE","ISO_A2":"LB","ISO_A2_EH":"LB","ISO_A3":"LBN","ISO_A3_EH":"LBN","ISO_N3":"422","ISO_N3_EH":"422","UN_A3":"422","WB_A2":"LB","WB_A3":"LBN","WOE_ID":23424873,"WOE_ID_EH":23424873,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LBN","ADM0_DIFF":"","ADM0_TLC":"LBN","ADM0_A3_US":"LBN","ADM0_A3_FR":"LBN","ADM0_A3_RU":"LBN","ADM0_A3_ES":"LBN","ADM0_A3_CN":"LBN","ADM0_A3_TW":"LBN","ADM0_A3_IN":"LBN","ADM0_A3_NP":"LBN","ADM0_A3_PK":"LBN","ADM0_A3_DE":"LBN","ADM0_A3_GB":"LBN","ADM0_A3_BR":"LBN","ADM0_A3_IL":"LBN","ADM0_A3_PS":"LBN","ADM0_A3_SA":"LBN","ADM0_A3_EG":"LBN","ADM0_A3_MA":"LBN","ADM0_A3_PT":"LBN","ADM0_A3_AR":"LBN","ADM0_A3_JP":"LBN","ADM0_A3_KO":"LBN","ADM0_A3_VN":"LBN","ADM0_A3_TR":"LBN","ADM0_A3_ID":"LBN","ADM0_A3_PL":"LBN","ADM0_A3_GR":"LBN","ADM0_A3_IT":"LBN","ADM0_A3_NL":"LBN","ADM0_A3_SE":"LBN","ADM0_A3_BD":"LBN","ADM0_A3_UA":"LBN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":35.992892,"LABEL_Y":34.133368,"NE_ID":1159321013,"WIKIDATAID":"Q822","NAME_AR":"لبنان","NAME_BN":"লেবানন","NAME_DE":"Libanon","NAME_EN":"Lebanon","NAME_ES":"Líbano","NAME_FA":"لبنان","NAME_FR":"Liban","NAME_EL":"Λίβανος","NAME_HE":"לבנון","NAME_HI":"लेबनान","NAME_HU":"Libanon","NAME_ID":"Lebanon","NAME_IT":"Libano","NAME_JA":"レバノン","NAME_KO":"레바논","NAME_NL":"Libanon","NAME_PL":"Liban","NAME_PT":"Líbano","NAME_RU":"Ливан","NAME_SV":"Libanon","NAME_TR":"Lübnan","NAME_UK":"Ліван","NAME_UR":"لبنان","NAME_VI":"Liban","NAME_ZH":"黎巴嫩","NAME_ZHT":"黎巴嫩","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[26.593554687500017,55.667529296874996],[27.576757812500006,55.798779296875],[28.14794921875,56.142919921875],[27.806054687500023,56.86708984375],[27.796875,57.316943359374996],[27.351953125000023,57.528124999999996],[26.532617187500023,57.531005859375],[25.991113281250023,57.838183593749996],[25.11103515625001,58.063427734375],[24.322558593750017,57.87060546875],[24.403222656250023,57.324999999999996],[23.647753906250017,56.971044921875],[22.554589843750023,57.724267578125],[21.72871093750001,57.57099609375],[21.0712890625,56.82373046875],[21.04609375000001,56.070068359375],[22.084570312500006,56.40673828125],[24.120703125000006,56.2642578125],[24.90302734375001,56.398193359375],[26.593554687500017,55.667529296874996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Latvia","SOV_A3":"LVA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Latvia","ADM0_A3":"LVA","GEOU_DIF":0,"GEOUNIT":"Latvia","GU_A3":"LVA","SU_DIF":0,"SUBUNIT":"Latvia","SU_A3":"LVA","BRK_DIFF":0,"NAME":"Latvia","NAME_LONG":"Latvia","BRK_A3":"LVA","BRK_NAME":"Latvia","BRK_GROUP":"","ABBREV":"Lat.","POSTAL":"LV","FORMAL_EN":"Republic of Latvia","FORMAL_FR":"","NAME_CIAWF":"Latvia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Latvia","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":7,"MAPCOLOR9":6,"MAPCOLOR13":13,"POP_EST":1912789,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":34102,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"3. Upper middle income","FIPS_10":"LG","ISO_A2":"LV","ISO_A2_EH":"LV","ISO_A3":"LVA","ISO_A3_EH":"LVA","ISO_N3":"428","ISO_N3_EH":"428","UN_A3":"428","WB_A2":"LV","WB_A3":"LVA","WOE_ID":23424874,"WOE_ID_EH":23424874,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LVA","ADM0_DIFF":"","ADM0_TLC":"LVA","ADM0_A3_US":"LVA","ADM0_A3_FR":"LVA","ADM0_A3_RU":"LVA","ADM0_A3_ES":"LVA","ADM0_A3_CN":"LVA","ADM0_A3_TW":"LVA","ADM0_A3_IN":"LVA","ADM0_A3_NP":"LVA","ADM0_A3_PK":"LVA","ADM0_A3_DE":"LVA","ADM0_A3_GB":"LVA","ADM0_A3_BR":"LVA","ADM0_A3_IL":"LVA","ADM0_A3_PS":"LVA","ADM0_A3_SA":"LVA","ADM0_A3_EG":"LVA","ADM0_A3_MA":"LVA","ADM0_A3_PT":"LVA","ADM0_A3_AR":"LVA","ADM0_A3_JP":"LVA","ADM0_A3_KO":"LVA","ADM0_A3_VN":"LVA","ADM0_A3_TR":"LVA","ADM0_A3_ID":"LVA","ADM0_A3_PL":"LVA","ADM0_A3_GR":"LVA","ADM0_A3_IT":"LVA","ADM0_A3_NL":"LVA","ADM0_A3_SE":"LVA","ADM0_A3_BD":"LVA","ADM0_A3_UA":"LVA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":25.458723,"LABEL_Y":57.066872,"NE_ID":1159321033,"WIKIDATAID":"Q211","NAME_AR":"لاتفيا","NAME_BN":"লাতভিয়া","NAME_DE":"Lettland","NAME_EN":"Latvia","NAME_ES":"Letonia","NAME_FA":"لتونی","NAME_FR":"Lettonie","NAME_EL":"Λετονία","NAME_HE":"לטביה","NAME_HI":"लातविया","NAME_HU":"Lettország","NAME_ID":"Latvia","NAME_IT":"Lettonia","NAME_JA":"ラトビア","NAME_KO":"라트비아","NAME_NL":"Letland","NAME_PL":"Łotwa","NAME_PT":"Letónia","NAME_RU":"Латвия","NAME_SV":"Lettland","NAME_TR":"Letonya","NAME_UK":"Латвія","NAME_UR":"لٹویا","NAME_VI":"Latvia","NAME_ZH":"拉脱维亚","NAME_ZHT":"拉脫維亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[102.12744140625,22.379199218750003],[101.67148437500003,22.462304687499994],[101.52451171874998,22.253662109375],[101.73652343750001,21.826513671874977],[101.70478515625001,21.150146484375],[101.22441406249999,21.22373046874999],[101.13886718750001,21.56748046874999],[100.75664062499999,21.312646484374994],[100.24931640624999,20.730273437500003],[100.12246093750002,20.316650390625],[100.54306640625003,20.088671875000003],[100.39765625000001,19.756103515625],[100.62548828125,19.49985351562509],[101.15468750000002,19.57919921874999],[101.28632812499995,18.977148437500034],[101.05058593749999,18.407031250000003],[101.11328125,18.03354492187499],[100.90849609374999,17.583886718749994],[101.10517578125001,17.479541015625102],[102.10146484375002,18.210644531249997],[102.71757812499999,17.892236328124994],[103.05136718750003,18.028515624999997],[103.36699218749999,18.42333984375],[103.94960937500002,18.318994140624994],[104.81601562499998,17.30029296875],[104.75058593750003,16.64755859374999],[105.04716796874999,16.16025390624999],[105.40625,15.987451171875023],[105.6220703125,15.699951171875],[105.51318359375,15.360888671875003],[105.4755859375,14.530126953124991],[105.18330078125001,14.346240234375003],[105.90449218750001,13.924511718749997],[105.97890625000002,14.343017578125],[106.50146484375,14.578222656250034],[106.81992187500003,14.314697265624943],[107.51943359375002,14.705078125],[107.65312499999999,15.255224609374991],[107.18955078125003,15.747265624999997],[107.39638671875002,16.043017578125003],[106.69609374999999,16.458984375],[106.50224609374999,16.9541015625],[105.69140625,17.737841796874932],[105.45820312500001,18.154296875],[105.08583984375002,18.450097656249994],[105.11513671875002,18.678857421875023],[104.71650390624995,18.803417968749955],[103.89638671875002,19.339990234375023],[104.03203124999999,19.67514648437499],[104.54628906250002,19.610546874999997],[104.92792968750001,20.018115234375003],[104.61884765624995,20.374511718750114],[104.58320312500001,20.646679687499955],[104.05205078124999,20.941210937500102],[103.63505859374999,20.697070312500003],[103.1044921875,20.891650390625003],[102.85117187500003,21.265917968750003],[102.94863281250002,21.569775390624997],[102.12744140625,22.379199218750003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Laos","SOV_A3":"LAO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Laos","ADM0_A3":"LAO","GEOU_DIF":0,"GEOUNIT":"Laos","GU_A3":"LAO","SU_DIF":0,"SUBUNIT":"Laos","SU_A3":"LAO","BRK_DIFF":0,"NAME":"Laos","NAME_LONG":"Lao PDR","BRK_A3":"LAO","BRK_NAME":"Laos","BRK_GROUP":"","ABBREV":"Laos","POSTAL":"LA","FORMAL_EN":"Lao People's Democratic Republic","FORMAL_FR":"","NAME_CIAWF":"Laos","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Lao PDR","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":1,"MAPCOLOR13":9,"POP_EST":7169455,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":18173,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"LA","ISO_A2":"LA","ISO_A2_EH":"LA","ISO_A3":"LAO","ISO_A3_EH":"LAO","ISO_N3":"418","ISO_N3_EH":"418","UN_A3":"418","WB_A2":"LA","WB_A3":"LAO","WOE_ID":23424872,"WOE_ID_EH":23424872,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"LAO","ADM0_DIFF":"","ADM0_TLC":"LAO","ADM0_A3_US":"LAO","ADM0_A3_FR":"LAO","ADM0_A3_RU":"LAO","ADM0_A3_ES":"LAO","ADM0_A3_CN":"LAO","ADM0_A3_TW":"LAO","ADM0_A3_IN":"LAO","ADM0_A3_NP":"LAO","ADM0_A3_PK":"LAO","ADM0_A3_DE":"LAO","ADM0_A3_GB":"LAO","ADM0_A3_BR":"LAO","ADM0_A3_IL":"LAO","ADM0_A3_PS":"LAO","ADM0_A3_SA":"LAO","ADM0_A3_EG":"LAO","ADM0_A3_MA":"LAO","ADM0_A3_PT":"LAO","ADM0_A3_AR":"LAO","ADM0_A3_JP":"LAO","ADM0_A3_KO":"LAO","ADM0_A3_VN":"LAO","ADM0_A3_TR":"LAO","ADM0_A3_ID":"LAO","ADM0_A3_PL":"LAO","ADM0_A3_GR":"LAO","ADM0_A3_IT":"LAO","ADM0_A3_NL":"LAO","ADM0_A3_SE":"LAO","ADM0_A3_BD":"LAO","ADM0_A3_UA":"LAO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":4,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":102.533912,"LABEL_Y":19.431821,"NE_ID":1159321011,"WIKIDATAID":"Q819","NAME_AR":"لاوس","NAME_BN":"লাওস","NAME_DE":"Laos","NAME_EN":"Laos","NAME_ES":"Laos","NAME_FA":"لائوس","NAME_FR":"Laos","NAME_EL":"Λάος","NAME_HE":"לאוס","NAME_HI":"लाओस","NAME_HU":"Laosz","NAME_ID":"Laos","NAME_IT":"Laos","NAME_JA":"ラオス","NAME_KO":"라오스","NAME_NL":"Laos","NAME_PL":"Laos","NAME_PT":"Laos","NAME_RU":"Лаос","NAME_SV":"Laos","NAME_TR":"Laos","NAME_UK":"Лаос","NAME_UR":"لاؤس","NAME_VI":"Lào","NAME_ZH":"老挝","NAME_ZHT":"寮國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[70.9580078125,40.2388671875],[70.45136718750001,40.049218749999994],[69.966796875,40.20224609375],[69.5302734375,40.097314453124994],[69.2291015625,39.761083984375],[69.59882812500001,39.573779296874996],[70.60781250000002,39.564404296875],[70.73310546875001,39.41328125],[71.404296875,39.5978515625],[72.04277343750002,39.3521484375],[73.2349609375,39.374560546874996],[73.63164062500002,39.448876953124994],[73.9146484375,39.606494140624996],[73.99160156250002,40.043115234374994],[74.41191406250002,40.13720703125],[75.0044921875,40.449511718749996],[75.58349609375,40.605322265625],[75.87197265625002,40.30322265625],[76.48017578125001,40.449511718749996],[76.82402343749999,40.982324218749994],[78.12343750000002,41.075634765625],[78.36240234375003,41.371630859374996],[79.29355468750003,41.7828125],[80.21621093750002,42.032421875],[80.20937500000002,42.1900390625],[79.49013671875002,42.457568359374996],[79.16484374999999,42.759033203125],[78.52421874999999,42.864648437499994],[75.78955078125,42.932910156249996],[75.04765625000002,42.90439453125],[74.20908203125,43.240380859374994],[73.55625,43.002783203125],[73.28291015625001,42.5041015625],[71.81679687500002,42.822167968749994],[71.25664062500002,42.733544921874994],[70.94677734375,42.248681640624994],[70.84189453125,42.01962890625],[70.18095703125002,41.571435546874994],[70.78242187500001,41.262499999999996],[71.40839843750001,41.136035156249996],[71.79248046875,41.413134765624996],[72.62041015625002,40.8837890625],[73.112890625,40.786035156249994],[71.69248046875,40.15234375],[70.9580078125,40.2388671875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Kyrgyzstan","SOV_A3":"KGZ","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Kyrgyzstan","ADM0_A3":"KGZ","GEOU_DIF":0,"GEOUNIT":"Kyrgyzstan","GU_A3":"KGZ","SU_DIF":0,"SUBUNIT":"Kyrgyzstan","SU_A3":"KGZ","BRK_DIFF":0,"NAME":"Kyrgyzstan","NAME_LONG":"Kyrgyzstan","BRK_A3":"KGZ","BRK_NAME":"Kyrgyzstan","BRK_GROUP":"","ABBREV":"Kgz.","POSTAL":"KG","FORMAL_EN":"Kyrgyz Republic","FORMAL_FR":"","NAME_CIAWF":"Kyrgyzstan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Kyrgyz Republic","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":7,"MAPCOLOR9":7,"MAPCOLOR13":6,"POP_EST":6456900,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":8454,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"5. Low income","FIPS_10":"KG","ISO_A2":"KG","ISO_A2_EH":"KG","ISO_A3":"KGZ","ISO_A3_EH":"KGZ","ISO_N3":"417","ISO_N3_EH":"417","UN_A3":"417","WB_A2":"KG","WB_A3":"KGZ","WOE_ID":23424864,"WOE_ID_EH":23424864,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KGZ","ADM0_DIFF":"","ADM0_TLC":"KGZ","ADM0_A3_US":"KGZ","ADM0_A3_FR":"KGZ","ADM0_A3_RU":"KGZ","ADM0_A3_ES":"KGZ","ADM0_A3_CN":"KGZ","ADM0_A3_TW":"KGZ","ADM0_A3_IN":"KGZ","ADM0_A3_NP":"KGZ","ADM0_A3_PK":"KGZ","ADM0_A3_DE":"KGZ","ADM0_A3_GB":"KGZ","ADM0_A3_BR":"KGZ","ADM0_A3_IL":"KGZ","ADM0_A3_PS":"KGZ","ADM0_A3_SA":"KGZ","ADM0_A3_EG":"KGZ","ADM0_A3_MA":"KGZ","ADM0_A3_PT":"KGZ","ADM0_A3_AR":"KGZ","ADM0_A3_JP":"KGZ","ADM0_A3_KO":"KGZ","ADM0_A3_VN":"KGZ","ADM0_A3_TR":"KGZ","ADM0_A3_ID":"KGZ","ADM0_A3_PL":"KGZ","ADM0_A3_GR":"KGZ","ADM0_A3_IT":"KGZ","ADM0_A3_NL":"KGZ","ADM0_A3_SE":"KGZ","ADM0_A3_BD":"KGZ","ADM0_A3_UA":"KGZ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Central Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":74.532637,"LABEL_Y":41.66854,"NE_ID":1159320977,"WIKIDATAID":"Q813","NAME_AR":"قيرغيزستان","NAME_BN":"কিরগিজস্তান","NAME_DE":"Kirgisistan","NAME_EN":"Kyrgyzstan","NAME_ES":"Kirguistán","NAME_FA":"قرقیزستان","NAME_FR":"Kirghizistan","NAME_EL":"Κιργιζία","NAME_HE":"קירגיזסטן","NAME_HI":"किर्गिज़स्तान","NAME_HU":"Kirgizisztán","NAME_ID":"Kirgizstan","NAME_IT":"Kirghizistan","NAME_JA":"キルギス","NAME_KO":"키르기스스탄","NAME_NL":"Kirgizië","NAME_PL":"Kirgistan","NAME_PT":"Quirguistão","NAME_RU":"Киргизия","NAME_SV":"Kirgizistan","NAME_TR":"Kırgızistan","NAME_UK":"Киргизстан","NAME_UR":"کرغیزستان","NAME_VI":"Kyrgyzstan","NAME_ZH":"吉尔吉斯斯坦","NAME_ZHT":"吉爾吉斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[48.442480468750006,28.542919921874997],[48.18378906250001,28.979394531249994],[47.96962890625002,29.61669921875],[47.97871093750001,29.982812499999994],[47.67275390625002,30.095605468749994],[47.114355468750006,29.961328124999994],[46.905859375000006,29.537499999999994],[46.53144531250001,29.096240234374996],[47.433203125000006,28.989550781249996],[47.67128906250002,28.533154296874997],[48.442480468750006,28.542919921874997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Kuwait","SOV_A3":"KWT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Kuwait","ADM0_A3":"KWT","GEOU_DIF":0,"GEOUNIT":"Kuwait","GU_A3":"KWT","SU_DIF":0,"SUBUNIT":"Kuwait","SU_A3":"KWT","BRK_DIFF":0,"NAME":"Kuwait","NAME_LONG":"Kuwait","BRK_A3":"KWT","BRK_NAME":"Kuwait","BRK_GROUP":"","ABBREV":"Kwt.","POSTAL":"KW","FORMAL_EN":"State of Kuwait","FORMAL_FR":"","NAME_CIAWF":"Kuwait","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Kuwait","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":2,"POP_EST":4207083,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":134628,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"KU","ISO_A2":"KW","ISO_A2_EH":"KW","ISO_A3":"KWT","ISO_A3_EH":"KWT","ISO_N3":"414","ISO_N3_EH":"414","UN_A3":"414","WB_A2":"KW","WB_A3":"KWT","WOE_ID":23424870,"WOE_ID_EH":23424870,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KWT","ADM0_DIFF":"","ADM0_TLC":"KWT","ADM0_A3_US":"KWT","ADM0_A3_FR":"KWT","ADM0_A3_RU":"KWT","ADM0_A3_ES":"KWT","ADM0_A3_CN":"KWT","ADM0_A3_TW":"KWT","ADM0_A3_IN":"KWT","ADM0_A3_NP":"KWT","ADM0_A3_PK":"KWT","ADM0_A3_DE":"KWT","ADM0_A3_GB":"KWT","ADM0_A3_BR":"KWT","ADM0_A3_IL":"KWT","ADM0_A3_PS":"KWT","ADM0_A3_SA":"KWT","ADM0_A3_EG":"KWT","ADM0_A3_MA":"KWT","ADM0_A3_PT":"KWT","ADM0_A3_AR":"KWT","ADM0_A3_JP":"KWT","ADM0_A3_KO":"KWT","ADM0_A3_VN":"KWT","ADM0_A3_TR":"KWT","ADM0_A3_ID":"KWT","ADM0_A3_PL":"KWT","ADM0_A3_GR":"KWT","ADM0_A3_IT":"KWT","ADM0_A3_NL":"KWT","ADM0_A3_SE":"KWT","ADM0_A3_BD":"KWT","ADM0_A3_UA":"KWT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":47.313999,"LABEL_Y":29.413628,"NE_ID":1159321009,"WIKIDATAID":"Q817","NAME_AR":"الكويت","NAME_BN":"কুয়েত","NAME_DE":"Kuwait","NAME_EN":"Kuwait","NAME_ES":"Kuwait","NAME_FA":"کویت","NAME_FR":"Koweït","NAME_EL":"Κουβέιτ","NAME_HE":"כווית","NAME_HI":"कुवैत","NAME_HU":"Kuvait","NAME_ID":"Kuwait","NAME_IT":"Kuwait","NAME_JA":"クウェート","NAME_KO":"쿠웨이트","NAME_NL":"Koeweit","NAME_PL":"Kuwejt","NAME_PT":"Kuwait","NAME_RU":"Кувейт","NAME_SV":"Kuwait","NAME_TR":"Kuveyt","NAME_UK":"Кувейт","NAME_UR":"کویت","NAME_VI":"Kuwait","NAME_ZH":"科威特","NAME_ZHT":"科威特","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[20.344335937500006,42.827929687499996],[20.06396484375,42.547265624999994],[20.485449218750006,42.223388671875],[20.566210937500017,41.873681640624994],[21.05976562500001,42.171289062499994],[21.5625,42.247509765625],[21.7529296875,42.669824218749994],[21.390625,42.751416015625],[21.057031250000023,43.091699218749994],[20.344335937500006,42.827929687499996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Kosovo","SOV_A3":"KOS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Disputed","TLC":"1","ADMIN":"Kosovo","ADM0_A3":"KOS","GEOU_DIF":0,"GEOUNIT":"Kosovo","GU_A3":"KOS","SU_DIF":0,"SUBUNIT":"Kosovo","SU_A3":"KOS","BRK_DIFF":0,"NAME":"Kosovo","NAME_LONG":"Kosovo","BRK_A3":"KOS","BRK_NAME":"Kosovo","BRK_GROUP":"","ABBREV":"Kos.","POSTAL":"KO","FORMAL_EN":"Republic of Kosovo","FORMAL_FR":"","NAME_CIAWF":"Kosovo","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Kosovo","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":11,"POP_EST":1794248,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":7926,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"KV","ISO_A2":"-99","ISO_A2_EH":"XK","ISO_A3":"-99","ISO_A3_EH":"-99","ISO_N3":"-99","ISO_N3_EH":"-99","UN_A3":"-099","WB_A2":"KV","WB_A3":"KSV","WOE_ID":-90,"WOE_ID_EH":29389201,"WOE_NOTE":"Subunit of Serbia in WOE still; should include 29389201, 29389207, 29389218, 29389209 and 29389214.","ADM0_ISO":"SRB","ADM0_DIFF":"1","ADM0_TLC":"KOS","ADM0_A3_US":"KOS","ADM0_A3_FR":"KOS","ADM0_A3_RU":"SRB","ADM0_A3_ES":"SRB","ADM0_A3_CN":"SRB","ADM0_A3_TW":"KOS","ADM0_A3_IN":"SRB","ADM0_A3_NP":"SRB","ADM0_A3_PK":"KOS","ADM0_A3_DE":"KOS","ADM0_A3_GB":"SRB","ADM0_A3_BR":"KOS","ADM0_A3_IL":"KOS","ADM0_A3_PS":"SRB","ADM0_A3_SA":"KOS","ADM0_A3_EG":"KOS","ADM0_A3_MA":"SRB","ADM0_A3_PT":"KOS","ADM0_A3_AR":"SRB","ADM0_A3_JP":"KOS","ADM0_A3_KO":"KOS","ADM0_A3_VN":"SRB","ADM0_A3_TR":"KOS","ADM0_A3_ID":"SRB","ADM0_A3_PL":"KOS","ADM0_A3_GR":"SRB","ADM0_A3_IT":"KOS","ADM0_A3_NL":"KOS","ADM0_A3_SE":"KOS","ADM0_A3_BD":"KOS","ADM0_A3_UA":"SRB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":20.860719,"LABEL_Y":42.593587,"NE_ID":1159321007,"WIKIDATAID":"Q1246","NAME_AR":"كوسوفو","NAME_BN":"কসোভো","NAME_DE":"Kosovo","NAME_EN":"Kosovo","NAME_ES":"Kosovo","NAME_FA":"کوزووو","NAME_FR":"Kosovo","NAME_EL":"Κοσσυφοπέδιο","NAME_HE":"קוסובו","NAME_HI":"कोसोवो गणराज्य","NAME_HU":"Koszovó","NAME_ID":"Kosovo","NAME_IT":"Kosovo","NAME_JA":"コソボ共和国","NAME_KO":"코소보","NAME_NL":"Kosovo","NAME_PL":"Kosowo","NAME_PT":"Kosovo","NAME_RU":"Республика Косово","NAME_SV":"Kosovo","NAME_TR":"Kosova","NAME_UK":"Косово","NAME_UR":"کوسووہ","NAME_VI":"Kosovo","NAME_ZH":"科索沃","NAME_ZHT":"科索沃","FCLASS_ISO":"Unrecognized","TLC_DIFF":"1","FCLASS_TLC":"Admin-0 country","FCLASS_US":"Admin-0 country","FCLASS_FR":"Admin-0 country","FCLASS_RU":"Admin-1 region","FCLASS_ES":"Unrecognized","FCLASS_CN":"Unrecognized","FCLASS_TW":"Admin-0 country","FCLASS_IN":"Admin-1 region","FCLASS_NP":"Unrecognized","FCLASS_PK":"Admin-0 country","FCLASS_DE":"Admin-0 country","FCLASS_GB":"Admin-0 country","FCLASS_BR":"Unrecognized","FCLASS_IL":"Admin-0 country","FCLASS_PS":"Unrecognized","FCLASS_SA":"Admin-0 country","FCLASS_EG":"Admin-0 country","FCLASS_MA":"Unrecognized","FCLASS_PT":"Admin-0 country","FCLASS_AR":"Unrecognized","FCLASS_JP":"Admin-0 country","FCLASS_KO":"Admin-0 country","FCLASS_VN":"Unrecognized","FCLASS_TR":"Admin-0 country","FCLASS_ID":"Unrecognized","FCLASS_PL":"Admin-0 country","FCLASS_GR":"Unrecognized","FCLASS_IT":"Admin-0 country","FCLASS_NL":"Admin-0 country","FCLASS_SE":"Admin-0 country","FCLASS_BD":"Admin-0 country","FCLASS_UA":"Unrecognized"}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":6,"SOVEREIGNT":"Kiribati","SOV_A3":"KIR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Kiribati","ADM0_A3":"KIR","GEOU_DIF":0,"GEOUNIT":"Kiribati","GU_A3":"KIR","SU_DIF":0,"SUBUNIT":"Kiribati","SU_A3":"KIR","BRK_DIFF":0,"NAME":"Kiribati","NAME_LONG":"Kiribati","BRK_A3":"KIR","BRK_NAME":"Kiribati","BRK_GROUP":"","ABBREV":"Kir.","POSTAL":"KI","FORMAL_EN":"Republic of Kiribati","FORMAL_FR":"","NAME_CIAWF":"Kiribati","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Kiribati","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":7,"MAPCOLOR9":6,"MAPCOLOR13":12,"POP_EST":117606,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":194,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"KR","ISO_A2":"KI","ISO_A2_EH":"KI","ISO_A3":"KIR","ISO_A3_EH":"KIR","ISO_N3":"296","ISO_N3_EH":"296","UN_A3":"296","WB_A2":"KI","WB_A3":"KIR","WOE_ID":23424867,"WOE_ID_EH":23424867,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KIR","ADM0_DIFF":"","ADM0_TLC":"KIR","ADM0_A3_US":"KIR","ADM0_A3_FR":"KIR","ADM0_A3_RU":"KIR","ADM0_A3_ES":"KIR","ADM0_A3_CN":"KIR","ADM0_A3_TW":"KIR","ADM0_A3_IN":"KIR","ADM0_A3_NP":"KIR","ADM0_A3_PK":"KIR","ADM0_A3_DE":"KIR","ADM0_A3_GB":"KIR","ADM0_A3_BR":"KIR","ADM0_A3_IL":"KIR","ADM0_A3_PS":"KIR","ADM0_A3_SA":"KIR","ADM0_A3_EG":"KIR","ADM0_A3_MA":"KIR","ADM0_A3_PT":"KIR","ADM0_A3_AR":"KIR","ADM0_A3_JP":"KIR","ADM0_A3_KO":"KIR","ADM0_A3_VN":"KIR","ADM0_A3_TR":"KIR","ADM0_A3_ID":"KIR","ADM0_A3_PL":"KIR","ADM0_A3_GR":"KIR","ADM0_A3_IT":"KIR","ADM0_A3_NL":"KIR","ADM0_A3_SE":"KIR","ADM0_A3_BD":"KIR","ADM0_A3_UA":"KIR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Micronesia","REGION_WB":"East Asia & Pacific","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-157.384577,"LABEL_Y":1.820437,"NE_ID":1159320981,"WIKIDATAID":"Q710","NAME_AR":"كيريباتي","NAME_BN":"কিরিবাস","NAME_DE":"Kiribati","NAME_EN":"Kiribati","NAME_ES":"Kiribati","NAME_FA":"کیریباتی","NAME_FR":"Kiribati","NAME_EL":"Κιριμπάτι","NAME_HE":"קיריבטי","NAME_HI":"किरिबाती","NAME_HU":"Kiribati","NAME_ID":"Kiribati","NAME_IT":"Kiribati","NAME_JA":"キリバス","NAME_KO":"키리바시","NAME_NL":"Kiribati","NAME_PL":"Kiribati","NAME_PT":"Kiribati","NAME_RU":"Кирибати","NAME_SV":"Kiribati","NAME_TR":"Kiribati","NAME_UK":"Кірибаті","NAME_UR":"کیریباتی","NAME_VI":"Kiribati","NAME_ZH":"基里巴斯","NAME_ZHT":"吉里巴斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[33.90322265625002,-1.0020507812500057],[33.97939453125002,-1.0020507812500057],[35.8369140625,-2.03662109375],[37.64384765625002,-3.04541015625],[37.60869140625002,-3.460253906250003],[37.79726562500002,-3.6744140625000057],[39.221777343750006,-4.6923828125],[39.49091796875001,-4.4784179687500085],[40.11542968750001,-3.2505859375000057],[40.22246093750002,-2.6883789062500085],[40.644140625000006,-2.5394531250000085],[40.99550781250002,-1.9505859375000085],[41.53271484375,-1.6953125],[40.97871093750001,-0.8703125000000114],[40.97001953125002,1.378173828125],[40.964453125000006,2.814648437499997],[41.341796875,3.20166015625],[41.88398437500001,3.977734374999997],[41.22089843750001,3.943554687499997],[40.765234375000006,4.2730468749999915],[39.84218750000002,3.8514648437499943],[39.49443359375002,3.4561035156249886],[38.08613281250001,3.6488281249999943],[36.90556640625002,4.4114746093749915],[36.08193359375002,4.44970703125],[35.76308593750002,4.808007812499994],[35.74501953125002,5.343994140625],[35.26835937500002,5.4922851562499915],[33.97607421875,4.22021484375],[34.1650390625,3.81298828125],[34.39287109375002,3.6915039062499915],[34.447851562500006,3.1634765624999943],[34.74248046875002,2.818115234375],[34.96406250000001,2.0624023437499943],[34.96523437500002,1.6433593749999886],[34.78759765625,1.230712890625],[34.48173828125002,1.0421386718749943],[33.94316406250002,0.17377929687499716],[33.90322265625002,-1.0020507812500057]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":2,"SOVEREIGNT":"Kenya","SOV_A3":"KEN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Kenya","ADM0_A3":"KEN","GEOU_DIF":0,"GEOUNIT":"Kenya","GU_A3":"KEN","SU_DIF":0,"SUBUNIT":"Kenya","SU_A3":"KEN","BRK_DIFF":0,"NAME":"Kenya","NAME_LONG":"Kenya","BRK_A3":"KEN","BRK_NAME":"Kenya","BRK_GROUP":"","ABBREV":"Ken.","POSTAL":"KE","FORMAL_EN":"Republic of Kenya","FORMAL_FR":"","NAME_CIAWF":"Kenya","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Kenya","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":2,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":52573973,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":95503,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"5. Low income","FIPS_10":"KE","ISO_A2":"KE","ISO_A2_EH":"KE","ISO_A3":"KEN","ISO_A3_EH":"KEN","ISO_N3":"404","ISO_N3_EH":"404","UN_A3":"404","WB_A2":"KE","WB_A3":"KEN","WOE_ID":23424863,"WOE_ID_EH":23424863,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KEN","ADM0_DIFF":"","ADM0_TLC":"KEN","ADM0_A3_US":"KEN","ADM0_A3_FR":"KEN","ADM0_A3_RU":"KEN","ADM0_A3_ES":"KEN","ADM0_A3_CN":"KEN","ADM0_A3_TW":"KEN","ADM0_A3_IN":"KEN","ADM0_A3_NP":"KEN","ADM0_A3_PK":"KEN","ADM0_A3_DE":"KEN","ADM0_A3_GB":"KEN","ADM0_A3_BR":"KEN","ADM0_A3_IL":"KEN","ADM0_A3_PS":"KEN","ADM0_A3_SA":"KEN","ADM0_A3_EG":"KEN","ADM0_A3_MA":"KEN","ADM0_A3_PT":"KEN","ADM0_A3_AR":"KEN","ADM0_A3_JP":"KEN","ADM0_A3_KO":"KEN","ADM0_A3_VN":"KEN","ADM0_A3_TR":"KEN","ADM0_A3_ID":"KEN","ADM0_A3_PL":"KEN","ADM0_A3_GR":"KEN","ADM0_A3_IT":"KEN","ADM0_A3_NL":"KEN","ADM0_A3_SE":"KEN","ADM0_A3_BD":"KEN","ADM0_A3_UA":"KEN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":37.907632,"LABEL_Y":0.549043,"NE_ID":1159320971,"WIKIDATAID":"Q114","NAME_AR":"كينيا","NAME_BN":"কেনিয়া","NAME_DE":"Kenia","NAME_EN":"Kenya","NAME_ES":"Kenia","NAME_FA":"کنیا","NAME_FR":"Kenya","NAME_EL":"Κένυα","NAME_HE":"קניה","NAME_HI":"कीनिया","NAME_HU":"Kenya","NAME_ID":"Kenya","NAME_IT":"Kenya","NAME_JA":"ケニア","NAME_KO":"케냐","NAME_NL":"Kenia","NAME_PL":"Kenia","NAME_PT":"Quénia","NAME_RU":"Кения","NAME_SV":"Kenya","NAME_TR":"Kenya","NAME_UK":"Кенія","NAME_UR":"کینیا","NAME_VI":"Kenya","NAME_ZH":"肯尼亚","NAME_ZHT":"肯亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[70.94677734375,42.248681640624994],[71.25664062500002,42.733544921874994],[71.81679687500002,42.822167968749994],[73.28291015625001,42.5041015625],[73.55625,43.002783203125],[74.20908203125,43.240380859374994],[75.04765625000002,42.90439453125],[75.78955078125,42.932910156249996],[78.52421874999999,42.864648437499994],[79.16484374999999,42.759033203125],[79.49013671875002,42.457568359374996],[80.20937500000002,42.1900390625],[80.1650390625,42.66552734375],[80.78574218750003,43.161572265625],[80.35527343749999,44.097265625],[80.45546875000002,44.74609375],[80.05917968750003,45.0064453125],[81.60205078125,45.310839843749996],[82.47871093750001,45.123583984374996],[82.32666015625,45.519921874999994],[83.00410156250001,47.033496093749996],[83.19306640625001,47.186572265624996],[84.7861328125,46.830712890624994],[85.65664062500002,47.254638671875],[85.52597656250003,47.915625],[85.74941406250002,48.385058593749996],[86.54941406250003,48.528613281249996],[86.75312500000001,49.008837890624996],[87.32285156250003,49.085791015625],[86.6142578125,49.609716796875],[86.18085937500001,49.499316406249996],[85.21015625000001,49.664843749999996],[84.98945312500001,50.061425781249994],[84.2578125,50.288232421874994],[83.94511718749999,50.774658203125],[83.35732421875002,50.994580078125],[82.49394531249999,50.727587890624996],[81.46591796875003,50.73984375],[80.87734375000002,51.2814453125],[79.98623046875002,50.774560546874994],[79.46884765625003,51.493115234375],[78.47548828125002,52.638427734375],[77.70439453124999,53.379150390625],[76.57568359375,53.942529296875],[76.2666015625,54.311962890625],[74.45195312500002,53.647265624999996],[73.2857421875,53.598388671875],[73.3994140625,53.811474609375],[72.9140625,54.10732421875],[71.09316406250002,54.212207031249996],[71.185546875,54.59931640625],[70.73808593750002,55.30517578125],[70.18242187500002,55.162451171875],[68.97724609375001,55.389599609375],[68.20625000000001,55.160937499999996],[68.073828125,54.9595703125],[66.22265625,54.6673828125],[65.47695312500002,54.623291015625],[65.1578125,54.364404296875],[64.46123046875002,54.3841796875],[63.07392578125001,54.105224609375],[61.9287109375,53.946484375],[61.33369140625001,54.049267578125],[60.9794921875,53.621728515625],[61.19921875,53.287158203124996],[62.0146484375,53.107861328125],[61.974218750000006,52.94375],[61.047460937500006,52.972460937499996],[60.802343750000006,52.7447265625],[60.937597656250006,52.280566406249996],[60.065527343750006,51.97646484375],[60.46474609375002,51.651171874999996],[61.36308593750002,51.44189453125],[61.585058593750006,51.2296875],[61.38945312500002,50.86103515625],[60.63798828125002,50.663720703124994],[59.955175781250006,50.799267578125],[59.81240234375002,50.58203125],[58.88369140625002,50.69443359375],[58.35917968750002,51.063818359375],[57.8388671875,51.091650390625],[57.44218750000002,50.8888671875],[57.01171875,51.065185546875],[56.49140625000001,51.01953125],[55.79765625000002,50.60205078125],[55.54228515625002,50.601806640625],[54.727148437500006,50.998095703124996],[54.421484375000006,50.780322265624996],[54.04150390625,51.115185546875],[53.33808593750001,51.482373046875],[52.57119140625002,51.481640625],[52.3310546875,51.681298828125],[51.60908203125001,51.483984375],[50.7939453125,51.72919921875],[50.24687500000002,51.289501953125],[49.498046875,51.08359375],[48.80839843750002,50.601318359375],[48.84326171875,50.013134765625],[48.43427734375001,49.828515624999994],[47.70576171875001,50.377978515624996],[47.32646484375002,50.27353515625],[46.80205078125002,49.367089843749994],[47.014257812500006,49.09833984375],[46.70263671875,48.805566406249994],[46.66093750000002,48.412255859374994],[47.00429687500002,48.284472656249996],[47.09326171875,47.947705078125],[48.109960937500006,47.745410156249996],[48.95937500000002,46.774609375],[48.61015625000002,46.566455078124996],[49.23222656250002,46.337158203125],[49.34746093750002,46.519140625],[49.99980468750002,46.63427734375],[50.41933593750002,46.8794921875],[51.17802734375002,47.110156249999996],[52.18876953125002,46.839501953124994],[52.916015625,46.954394531249996],[53.17021484375002,46.66904296875],[53.13525390625,46.191650390625],[52.77382812500002,45.57275390625],[52.53105468750002,45.3986328125],[51.41572265625001,45.357861328125],[50.8603515625,44.628759765625],[50.40947265625002,44.6240234375],[50.331152343750006,44.325488281249996],[50.83076171875001,44.192773437499994],[51.3017578125,43.482373046875],[51.84414062500002,42.910449218749996],[52.59658203125002,42.760156249999994],[52.49384765625001,41.78037109375],[53.250097656250006,42.205859374999996],[54.12099609375002,42.335205078125],[54.90371093750002,41.919091796874994],[55.54521484375002,41.262744140624996],[55.97744140625002,41.322216796875],[55.97646484375002,43.388085937499994],[55.975683593750006,44.994921874999996],[58.555273437500006,45.55537109375],[61.007910156250006,44.393798828125],[61.160742187500006,44.168603515624994],[61.990234375,43.492138671875],[63.20703125,43.627978515624996],[64.44316406250002,43.551171874999994],[64.90546875000001,43.714697265625],[65.49619140625,43.310546875],[65.80302734375002,42.876953125],[66.10029296875001,42.9908203125],[66.00957031250002,42.0048828125],[66.4986328125,41.994873046875],[66.66865234375001,41.270751953125],[66.81425781250002,41.142382812499996],[67.93574218750001,41.196582031249996],[68.29189453125002,40.656103515625],[69.06494140625,41.366943359375],[70.09560546875002,41.8205078125],[70.416015625,42.078564453125],[70.94677734375,42.248681640624994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":3,"SOVEREIGNT":"Kazakhstan","SOV_A3":"KA1","ADM0_DIF":1,"LEVEL":1,"TYPE":"Sovereignty","TLC":"1","ADMIN":"Kazakhstan","ADM0_A3":"KAZ","GEOU_DIF":0,"GEOUNIT":"Kazakhstan","GU_A3":"KAZ","SU_DIF":0,"SUBUNIT":"Kazakhstan","SU_A3":"KAZ","BRK_DIFF":0,"NAME":"Kazakhstan","NAME_LONG":"Kazakhstan","BRK_A3":"KAZ","BRK_NAME":"Kazakhstan","BRK_GROUP":"","ABBREV":"Kaz.","POSTAL":"KZ","FORMAL_EN":"Republic of Kazakhstan","FORMAL_FR":"","NAME_CIAWF":"Kazakhstan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Kazakhstan","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":1,"MAPCOLOR9":6,"MAPCOLOR13":1,"POP_EST":18513930,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":181665,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"KZ","ISO_A2":"KZ","ISO_A2_EH":"KZ","ISO_A3":"KAZ","ISO_A3_EH":"KAZ","ISO_N3":"398","ISO_N3_EH":"398","UN_A3":"398","WB_A2":"KZ","WB_A3":"KAZ","WOE_ID":-90,"WOE_ID_EH":23424871,"WOE_NOTE":"Includes Baykonur Cosmodrome as an Admin-1 states provinces","ADM0_ISO":"KAZ","ADM0_DIFF":"","ADM0_TLC":"KAZ","ADM0_A3_US":"KAZ","ADM0_A3_FR":"KAZ","ADM0_A3_RU":"KAZ","ADM0_A3_ES":"KAZ","ADM0_A3_CN":"KAZ","ADM0_A3_TW":"KAZ","ADM0_A3_IN":"KAZ","ADM0_A3_NP":"KAZ","ADM0_A3_PK":"KAZ","ADM0_A3_DE":"KAZ","ADM0_A3_GB":"KAZ","ADM0_A3_BR":"KAZ","ADM0_A3_IL":"KAZ","ADM0_A3_PS":"KAZ","ADM0_A3_SA":"KAZ","ADM0_A3_EG":"KAZ","ADM0_A3_MA":"KAZ","ADM0_A3_PT":"KAZ","ADM0_A3_AR":"KAZ","ADM0_A3_JP":"KAZ","ADM0_A3_KO":"KAZ","ADM0_A3_VN":"KAZ","ADM0_A3_TR":"KAZ","ADM0_A3_ID":"KAZ","ADM0_A3_PL":"KAZ","ADM0_A3_GR":"KAZ","ADM0_A3_IT":"KAZ","ADM0_A3_NL":"KAZ","ADM0_A3_SE":"KAZ","ADM0_A3_BD":"KAZ","ADM0_A3_UA":"KAZ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Central Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":7,"LABEL_X":68.685548,"LABEL_Y":49.054149,"NE_ID":1159320967,"WIKIDATAID":"Q232","NAME_AR":"كازاخستان","NAME_BN":"কাজাখস্তান","NAME_DE":"Kasachstan","NAME_EN":"Kazakhstan","NAME_ES":"Kazajistán","NAME_FA":"قزاقستان","NAME_FR":"Kazakhstan","NAME_EL":"Καζακστάν","NAME_HE":"קזחסטן","NAME_HI":"कज़ाख़िस्तान","NAME_HU":"Kazahsztán","NAME_ID":"Kazakhstan","NAME_IT":"Kazakistan","NAME_JA":"カザフスタン","NAME_KO":"카자흐스탄","NAME_NL":"Kazachstan","NAME_PL":"Kazachstan","NAME_PT":"Cazaquistão","NAME_RU":"Казахстан","NAME_SV":"Kazakstan","NAME_TR":"Kazakistan","NAME_UK":"Казахстан","NAME_UR":"قازقستان","NAME_VI":"Kazakhstan","NAME_ZH":"哈萨克斯坦","NAME_ZHT":"哈薩克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[35.78730468750001,32.734912109374996],[35.55146484375001,32.3955078125],[35.55898437500002,31.765527343749994],[35.45058593750002,31.479296874999996],[35.43925781250002,31.132421875],[35.17402343750001,30.52392578125],[34.97343750000002,29.555029296875],[34.950781250000006,29.353515625],[36.01542968750002,29.190478515624996],[36.47607421875,29.4951171875],[36.75527343750002,29.866015624999996],[37.46923828125,29.995068359374997],[37.63359375000002,30.313281249999996],[37.980078125000006,30.5],[36.958593750000006,31.491503906249996],[38.96230468750002,31.994921874999996],[39.14541015625002,32.12451171875],[38.773535156250006,33.372216796874994],[36.818359375,32.317285156249994],[36.3720703125,32.3869140625],[35.78730468750001,32.734912109374996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Jordan","SOV_A3":"JOR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Jordan","ADM0_A3":"JOR","GEOU_DIF":0,"GEOUNIT":"Jordan","GU_A3":"JOR","SU_DIF":0,"SUBUNIT":"Jordan","SU_A3":"JOR","BRK_DIFF":0,"NAME":"Jordan","NAME_LONG":"Jordan","BRK_A3":"JOR","BRK_NAME":"Jordan","BRK_GROUP":"","ABBREV":"Jord.","POSTAL":"J","FORMAL_EN":"Hashemite Kingdom of Jordan","FORMAL_FR":"","NAME_CIAWF":"Jordan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Jordan","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":4,"POP_EST":10101694,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":44502,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"JO","ISO_A2":"JO","ISO_A2_EH":"JO","ISO_A3":"JOR","ISO_A3_EH":"JOR","ISO_N3":"400","ISO_N3_EH":"400","UN_A3":"400","WB_A2":"JO","WB_A3":"JOR","WOE_ID":23424860,"WOE_ID_EH":23424860,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"JOR","ADM0_DIFF":"","ADM0_TLC":"JOR","ADM0_A3_US":"JOR","ADM0_A3_FR":"JOR","ADM0_A3_RU":"JOR","ADM0_A3_ES":"JOR","ADM0_A3_CN":"JOR","ADM0_A3_TW":"JOR","ADM0_A3_IN":"JOR","ADM0_A3_NP":"JOR","ADM0_A3_PK":"JOR","ADM0_A3_DE":"JOR","ADM0_A3_GB":"JOR","ADM0_A3_BR":"JOR","ADM0_A3_IL":"JOR","ADM0_A3_PS":"JOR","ADM0_A3_SA":"JOR","ADM0_A3_EG":"JOR","ADM0_A3_MA":"JOR","ADM0_A3_PT":"JOR","ADM0_A3_AR":"JOR","ADM0_A3_JP":"JOR","ADM0_A3_KO":"JOR","ADM0_A3_VN":"JOR","ADM0_A3_TR":"JOR","ADM0_A3_ID":"JOR","ADM0_A3_PL":"JOR","ADM0_A3_GR":"JOR","ADM0_A3_IT":"JOR","ADM0_A3_NL":"JOR","ADM0_A3_SE":"JOR","ADM0_A3_BD":"JOR","ADM0_A3_UA":"JOR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":36.375991,"LABEL_Y":30.805025,"NE_ID":1159320935,"WIKIDATAID":"Q810","NAME_AR":"الأردن","NAME_BN":"জর্ডান","NAME_DE":"Jordanien","NAME_EN":"Jordan","NAME_ES":"Jordania","NAME_FA":"اردن","NAME_FR":"Jordanie","NAME_EL":"Ιορδανία","NAME_HE":"ירדן","NAME_HI":"जॉर्डन","NAME_HU":"Jordánia","NAME_ID":"Yordania","NAME_IT":"Giordania","NAME_JA":"ヨルダン","NAME_KO":"요르단","NAME_NL":"Jordanië","NAME_PL":"Jordania","NAME_PT":"Jordânia","NAME_RU":"Иордания","NAME_SV":"Jordanien","NAME_TR":"Ürdün","NAME_UK":"Йорданія","NAME_UR":"اردن","NAME_VI":"Jordan","NAME_ZH":"约旦","NAME_ZHT":"約旦","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[143.82431640625003,44.116992187499996],[142.7041015625,44.819189453125],[141.9376953125,45.509521484375],[141.5830078125,45.15595703125],[141.7822265625,44.716357421874996],[141.6447265625,44.019433593749994],[141.29628906250002,43.199658203125],[140.78066406250002,43.214990234374994],[139.89111328125,42.649218749999996],[139.82089843750003,42.387597656249994],[140.1083984375,41.912939453125],[139.9953125,41.576416015625],[140.3849609375,41.519287109375],[140.65986328125,41.815576171874994],[140.31523437500005,42.334277343749996],[140.70976562500005,42.555615234375],[140.98613281250005,42.342138671875],[141.85136718750005,42.579052734375],[143.2365234375,42.0001953125],[143.42949218750005,42.418896484375],[143.96933593750003,42.881396484374996],[144.63076171875002,42.946923828124994],[145.34746093750005,43.176708984375],[145.10107421875,43.764550781249994],[144.79853515625,43.940234374999996],[143.82431640625003,44.116992187499996]]],[[[131.17460937500005,33.602587890624996],[130.953125,33.872021484375],[130.48378906250002,33.834619140624994],[130.36503906250005,33.63447265625],[129.580078125,33.236279296875],[130.64052734375002,32.61923828125],[130.19443359375003,32.090771484375],[130.32197265625,31.601464843749994],[130.20068359375,31.291894531249994],[130.58876953125002,31.178515624999996],[131.33720703125005,31.404687499999994],[131.73212890625,32.592822265624996],[131.97666015625003,32.8439453125],[131.89658203125003,33.25458984375],[131.5830078125,33.652392578124996],[131.17460937500005,33.602587890624996]]],[[[134.357421875,34.25634765625],[134.07587890625,34.3583984375],[133.58203125,34.017138671874996],[132.78427734375003,33.992431640625],[132.36591796875,33.512451171875],[132.4951171875,32.9166015625],[132.97724609375,32.8419921875],[133.28593750000005,33.3599609375],[133.63203125,33.510986328125],[134.181640625,33.247216796874994],[134.37705078125003,33.6083984375],[134.73886718750003,33.8205078125],[134.63750000000005,34.226611328124996],[134.357421875,34.25634765625]]],[[[141.22929687500005,41.37265625],[141.11855468750002,40.882275390625],[140.28125,40.846093749999994],[139.9228515625,40.598437499999996],[139.90800781250005,40.021728515625],[140.04814453125005,39.463720703125],[139.40097656250003,38.142578125],[138.88505859375005,37.8439453125],[138.31992187500003,37.218408203124994],[137.51406250000002,36.951562499999994],[137.34257812500005,36.770361328125],[136.69814453125002,36.742041015625],[136.00625000000002,35.990576171875],[136.09531250000003,35.767626953124996],[135.68027343750003,35.503125],[135.17431640625,35.7470703125],[134.2140625,35.5392578125],[133.37646484375,35.458837890625],[132.92294921875003,35.511279296874996],[131.35439453125002,34.41318359375],[131.00419921875005,34.392578125],[130.91884765625002,33.975732421874994],[131.74052734375005,34.052050781249996],[132.09023437500002,33.85546875],[132.23808593750005,34.227001953125],[133.14238281250005,34.30244140625],[133.96826171875,34.527294921875],[134.20830078125005,34.697656249999994],[134.74003906250005,34.765234375],[135.384765625,34.500439453125],[135.10009765625,34.288378906249996],[135.17539062500003,33.898046875],[135.45283203125,33.553369140624994],[135.9162109375,33.56171875],[136.32988281250005,34.17685546875],[136.8537109375,34.324072265625],[136.53300781250005,34.678369140624994],[136.88457031250005,34.805859375],[138.18906250000003,34.596337890624994],[138.5771484375,35.086474609374996],[138.9826171875,34.698388671874994],[139.24941406250002,35.27802734375],[139.65000000000003,35.409130859375],[139.79921875000002,34.956933593749994],[140.41650390625,35.266992187499994],[140.45742187500002,35.51025390625],[140.8740234375,35.724951171875],[140.62197265625002,36.059228515624994],[140.62734375000002,36.502783203125],[140.96835937500003,37.00205078125],[141.036328125,37.467236328125],[140.9279296875,37.949609374999994],[141.1083984375,38.337939453124996],[141.46748046875,38.404150390625],[141.65859375000002,38.974853515625],[141.90078125000002,39.111328125],[141.97783203125005,39.84443359375],[141.7970703125,40.291162109374994],[141.46279296875002,40.611132812499996],[141.22929687500005,41.37265625]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"Japan","SOV_A3":"JPN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Japan","ADM0_A3":"JPN","GEOU_DIF":0,"GEOUNIT":"Japan","GU_A3":"JPN","SU_DIF":0,"SUBUNIT":"Japan","SU_A3":"JPN","BRK_DIFF":0,"NAME":"Japan","NAME_LONG":"Japan","BRK_A3":"JPN","BRK_NAME":"Japan","BRK_GROUP":"","ABBREV":"Japan","POSTAL":"J","FORMAL_EN":"Japan","FORMAL_FR":"","NAME_CIAWF":"Japan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Japan","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":5,"MAPCOLOR13":4,"POP_EST":126264931,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":5081769,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"JA","ISO_A2":"JP","ISO_A2_EH":"JP","ISO_A3":"JPN","ISO_A3_EH":"JPN","ISO_N3":"392","ISO_N3_EH":"392","UN_A3":"392","WB_A2":"JP","WB_A3":"JPN","WOE_ID":23424856,"WOE_ID_EH":23424856,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"JPN","ADM0_DIFF":"","ADM0_TLC":"JPN","ADM0_A3_US":"JPN","ADM0_A3_FR":"JPN","ADM0_A3_RU":"JPN","ADM0_A3_ES":"JPN","ADM0_A3_CN":"JPN","ADM0_A3_TW":"JPN","ADM0_A3_IN":"JPN","ADM0_A3_NP":"JPN","ADM0_A3_PK":"JPN","ADM0_A3_DE":"JPN","ADM0_A3_GB":"JPN","ADM0_A3_BR":"JPN","ADM0_A3_IL":"JPN","ADM0_A3_PS":"JPN","ADM0_A3_SA":"JPN","ADM0_A3_EG":"JPN","ADM0_A3_MA":"JPN","ADM0_A3_PT":"JPN","ADM0_A3_AR":"JPN","ADM0_A3_JP":"JPN","ADM0_A3_KO":"JPN","ADM0_A3_VN":"JPN","ADM0_A3_TR":"JPN","ADM0_A3_ID":"JPN","ADM0_A3_PL":"JPN","ADM0_A3_GR":"JPN","ADM0_A3_IT":"JPN","ADM0_A3_NL":"JPN","ADM0_A3_SE":"JPN","ADM0_A3_BD":"JPN","ADM0_A3_UA":"JPN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":7,"LABEL_X":138.44217,"LABEL_Y":36.142538,"NE_ID":1159320937,"WIKIDATAID":"Q17","NAME_AR":"اليابان","NAME_BN":"জাপান","NAME_DE":"Japan","NAME_EN":"Japan","NAME_ES":"Japón","NAME_FA":"ژاپن","NAME_FR":"Japon","NAME_EL":"Ιαπωνία","NAME_HE":"יפן","NAME_HI":"जापान","NAME_HU":"Japán","NAME_ID":"Jepang","NAME_IT":"Giappone","NAME_JA":"日本","NAME_KO":"일본","NAME_NL":"Japan","NAME_PL":"Japonia","NAME_PT":"Japão","NAME_RU":"Япония","NAME_SV":"Japan","NAME_TR":"Japonya","NAME_UK":"Японія","NAME_UR":"جاپان","NAME_VI":"Nhật Bản","NAME_ZH":"日本","NAME_ZHT":"日本","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-77.261474609375,18.457421874999994],[-77.8734375,18.522216796875],[-78.21669921875,18.44809570312499],[-77.76816406249999,17.877392578124997],[-77.36142578124999,17.833691406249997],[-76.85322265625,17.97373046874999],[-76.524609375,17.8662109375],[-76.349853515625,18.15185546875],[-77.261474609375,18.457421874999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Jamaica","SOV_A3":"JAM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Jamaica","ADM0_A3":"JAM","GEOU_DIF":0,"GEOUNIT":"Jamaica","GU_A3":"JAM","SU_DIF":0,"SUBUNIT":"Jamaica","SU_A3":"JAM","BRK_DIFF":0,"NAME":"Jamaica","NAME_LONG":"Jamaica","BRK_A3":"JAM","BRK_NAME":"Jamaica","BRK_GROUP":"","ABBREV":"Jam.","POSTAL":"J","FORMAL_EN":"Jamaica","FORMAL_FR":"","NAME_CIAWF":"Jamaica","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Jamaica","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":4,"MAPCOLOR13":10,"POP_EST":2948279,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":16458,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"JM","ISO_A2":"JM","ISO_A2_EH":"JM","ISO_A3":"JAM","ISO_A3_EH":"JAM","ISO_N3":"388","ISO_N3_EH":"388","UN_A3":"388","WB_A2":"JM","WB_A3":"JAM","WOE_ID":23424858,"WOE_ID_EH":23424858,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"JAM","ADM0_DIFF":"","ADM0_TLC":"JAM","ADM0_A3_US":"JAM","ADM0_A3_FR":"JAM","ADM0_A3_RU":"JAM","ADM0_A3_ES":"JAM","ADM0_A3_CN":"JAM","ADM0_A3_TW":"JAM","ADM0_A3_IN":"JAM","ADM0_A3_NP":"JAM","ADM0_A3_PK":"JAM","ADM0_A3_DE":"JAM","ADM0_A3_GB":"JAM","ADM0_A3_BR":"JAM","ADM0_A3_IL":"JAM","ADM0_A3_PS":"JAM","ADM0_A3_SA":"JAM","ADM0_A3_EG":"JAM","ADM0_A3_MA":"JAM","ADM0_A3_PT":"JAM","ADM0_A3_AR":"JAM","ADM0_A3_JP":"JAM","ADM0_A3_KO":"JAM","ADM0_A3_VN":"JAM","ADM0_A3_TR":"JAM","ADM0_A3_ID":"JAM","ADM0_A3_PL":"JAM","ADM0_A3_GR":"JAM","ADM0_A3_IT":"JAM","ADM0_A3_NL":"JAM","ADM0_A3_SE":"JAM","ADM0_A3_BD":"JAM","ADM0_A3_UA":"JAM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-77.318767,"LABEL_Y":18.137124,"NE_ID":1159320931,"WIKIDATAID":"Q766","NAME_AR":"جامايكا","NAME_BN":"জ্যামাইকা","NAME_DE":"Jamaika","NAME_EN":"Jamaica","NAME_ES":"Jamaica","NAME_FA":"جامائیکا","NAME_FR":"Jamaïque","NAME_EL":"Τζαμάικα","NAME_HE":"ג'מייקה","NAME_HI":"जमैका","NAME_HU":"Jamaica","NAME_ID":"Jamaika","NAME_IT":"Giamaica","NAME_JA":"ジャマイカ","NAME_KO":"자메이카","NAME_NL":"Jamaica","NAME_PL":"Jamajka","NAME_PT":"Jamaica","NAME_RU":"Ямайка","NAME_SV":"Jamaica","NAME_TR":"Jamaika","NAME_UK":"Ямайка","NAME_UR":"جمیکا","NAME_VI":"Jamaica","NAME_ZH":"牙买加","NAME_ZHT":"牙買加","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[7.021093750000006,45.92578125],[7.153417968750006,45.400927734374996],[6.627734375000017,45.117968749999996],[7.030664062500023,44.716699218749994],[6.96728515625,44.280029296875],[7.651464843750006,44.033642578125],[7.4931640625,43.767138671874996],[8.081640625000006,43.9189453125],[8.765820312500011,44.422314453125],[10.047656250000017,44.019970703125],[10.708398437500023,42.936328124999996],[11.637304687500006,42.287548828125],[12.630859375,41.469677734375],[13.088671875000017,41.24384765625],[13.7333984375,41.235644531249996],[14.102343750000017,40.8271484375],[14.765722656250006,40.668408203125],[14.950878906250011,40.239013671875],[15.692773437500023,39.990185546875],[16.02363281250001,39.35361328125],[16.19677734375,38.759228515625],[15.972363281250011,38.71259765625],[15.724511718750023,37.939111328124994],[16.05683593750001,37.941845703125],[16.54560546875001,38.409082031249994],[16.558984375000023,38.714794921875],[17.174609375000017,38.998095703124996],[17.114550781250017,39.380615234375],[16.597753906250006,39.638916015625],[16.52998046875001,39.859667968749996],[16.92822265625,40.458056640624996],[17.865039062500017,40.280175781249994],[18.077929687500017,39.936962890625],[18.48583984375,40.104833984375],[17.954980468750023,40.655175781249994],[17.103417968750023,41.062158203124994],[16.012597656250023,41.435400390625],[15.964062500000011,41.939453125],[15.168750000000017,41.934033203125],[14.866113281250023,42.052539062499996],[14.010449218750011,42.68955078125],[13.564160156250011,43.5712890625],[12.396289062500017,44.223876953125],[12.248339843750017,44.722509765625],[12.5234375,44.96796875],[12.274316406250023,45.446044921875],[13.206347656250017,45.771386718749994],[13.719824218750006,45.58759765625],[13.399511718750006,46.317529296874994],[13.700000000000017,46.520263671875],[12.388281250000006,46.70263671875],[12.154101562500017,46.93525390625],[11.244433593750017,46.97568359375],[11.025097656250011,46.79697265625],[10.452832031250011,46.86494140625],[9.939257812500017,46.36181640625],[9.251074218750006,46.286767578124994],[8.953710937500006,45.830029296875],[8.458398437500023,46.245898437499996],[7.9931640625,46.015917968749996],[7.021093750000006,45.92578125]]],[[[15.576562500000023,38.2203125],[14.845898437500011,38.171679687499996],[14.505957031250006,38.0455078125],[13.681542968750023,38.000732421875],[13.351660156250006,38.180517578125],[12.435546875,37.819775390625],[14.501855468750023,36.798681640625],[15.112597656250017,36.687841796875],[15.294531250000006,37.01328125],[15.099511718750023,37.45859375],[15.576562500000023,38.2203125]]],[[[9.632031250000011,40.88203125],[9.283007812500017,41.20166015625],[8.18994140625,40.651611328125],[8.471289062500006,40.29267578125],[8.418164062500011,39.205712890624994],[8.88134765625,38.912890624999996],[9.056347656250011,39.239160156249994],[9.5625,39.166015625],[9.805273437500006,40.499560546874996],[9.632031250000011,40.88203125]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Italy","SOV_A3":"ITA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Italy","ADM0_A3":"ITA","GEOU_DIF":0,"GEOUNIT":"Italy","GU_A3":"ITA","SU_DIF":0,"SUBUNIT":"Italy","SU_A3":"ITA","BRK_DIFF":0,"NAME":"Italy","NAME_LONG":"Italy","BRK_A3":"ITA","BRK_NAME":"Italy","BRK_GROUP":"","ABBREV":"Italy","POSTAL":"I","FORMAL_EN":"Italian Republic","FORMAL_FR":"","NAME_CIAWF":"Italy","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Italy","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":7,"MAPCOLOR9":8,"MAPCOLOR13":7,"POP_EST":60297396,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":2003576,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"IT","ISO_A2":"IT","ISO_A2_EH":"IT","ISO_A3":"ITA","ISO_A3_EH":"ITA","ISO_N3":"380","ISO_N3_EH":"380","UN_A3":"380","WB_A2":"IT","WB_A3":"ITA","WOE_ID":23424853,"WOE_ID_EH":23424853,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ITA","ADM0_DIFF":"","ADM0_TLC":"ITA","ADM0_A3_US":"ITA","ADM0_A3_FR":"ITA","ADM0_A3_RU":"ITA","ADM0_A3_ES":"ITA","ADM0_A3_CN":"ITA","ADM0_A3_TW":"ITA","ADM0_A3_IN":"ITA","ADM0_A3_NP":"ITA","ADM0_A3_PK":"ITA","ADM0_A3_DE":"ITA","ADM0_A3_GB":"ITA","ADM0_A3_BR":"ITA","ADM0_A3_IL":"ITA","ADM0_A3_PS":"ITA","ADM0_A3_SA":"ITA","ADM0_A3_EG":"ITA","ADM0_A3_MA":"ITA","ADM0_A3_PT":"ITA","ADM0_A3_AR":"ITA","ADM0_A3_JP":"ITA","ADM0_A3_KO":"ITA","ADM0_A3_VN":"ITA","ADM0_A3_TR":"ITA","ADM0_A3_ID":"ITA","ADM0_A3_PL":"ITA","ADM0_A3_GR":"ITA","ADM0_A3_IT":"ITA","ADM0_A3_NL":"ITA","ADM0_A3_SE":"ITA","ADM0_A3_BD":"ITA","ADM0_A3_UA":"ITA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":11.076907,"LABEL_Y":44.732482,"NE_ID":1159320919,"WIKIDATAID":"Q38","NAME_AR":"إيطاليا","NAME_BN":"ইতালি","NAME_DE":"Italien","NAME_EN":"Italy","NAME_ES":"Italia","NAME_FA":"ایتالیا","NAME_FR":"Italie","NAME_EL":"Ιταλία","NAME_HE":"איטליה","NAME_HI":"इटली","NAME_HU":"Olaszország","NAME_ID":"Italia","NAME_IT":"Italia","NAME_JA":"イタリア","NAME_KO":"이탈리아","NAME_NL":"Italië","NAME_PL":"Włochy","NAME_PT":"Itália","NAME_RU":"Италия","NAME_SV":"Italien","NAME_TR":"İtalya","NAME_UK":"Італія","NAME_UR":"اطالیہ","NAME_VI":"Ý","NAME_ZH":"意大利","NAME_ZHT":"義大利","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[35.84072265625002,33.415673828124994],[35.411230468750006,33.07568359375],[35.10859375000001,33.08369140625],[34.67841796875001,31.895703124999997],[34.47734375000002,31.584863281249994],[34.24531250000001,31.208300781249996],[34.904296875,29.477343749999996],[34.97343750000002,29.555029296875],[35.17402343750001,30.52392578125],[35.43925781250002,31.132421875],[35.45058593750002,31.479296874999996],[34.95097656250002,31.602294921875],[34.95595703125002,32.160937499999996],[35.19326171875002,32.534423828125],[35.55146484375001,32.3955078125],[35.78730468750001,32.734912109374996],[35.81612458460434,33.36187853338469],[35.84072265625002,33.415673828124994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Israel","SOV_A3":"IS1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Disputed","TLC":"1","ADMIN":"Israel","ADM0_A3":"ISR","GEOU_DIF":0,"GEOUNIT":"Israel","GU_A3":"ISR","SU_DIF":0,"SUBUNIT":"Israel","SU_A3":"ISR","BRK_DIFF":1,"NAME":"Israel","NAME_LONG":"Israel","BRK_A3":"ISR","BRK_NAME":"Israel","BRK_GROUP":"","ABBREV":"Isr.","POSTAL":"IS","FORMAL_EN":"State of Israel","FORMAL_FR":"","NAME_CIAWF":"Israel","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Israel","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":9,"POP_EST":9053300,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":394652,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"-99","ISO_A2":"IL","ISO_A2_EH":"IL","ISO_A3":"ISR","ISO_A3_EH":"ISR","ISO_N3":"376","ISO_N3_EH":"376","UN_A3":"376","WB_A2":"IL","WB_A3":"ISR","WOE_ID":23424852,"WOE_ID_EH":23424852,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ISR","ADM0_DIFF":"","ADM0_TLC":"ISR","ADM0_A3_US":"ISR","ADM0_A3_FR":"ISR","ADM0_A3_RU":"ISR","ADM0_A3_ES":"ISR","ADM0_A3_CN":"ISR","ADM0_A3_TW":"ISR","ADM0_A3_IN":"ISR","ADM0_A3_NP":"ISR","ADM0_A3_PK":"PSX","ADM0_A3_DE":"ISR","ADM0_A3_GB":"ISR","ADM0_A3_BR":"ISR","ADM0_A3_IL":"ISR","ADM0_A3_PS":"ISR","ADM0_A3_SA":"PSX","ADM0_A3_EG":"ISR","ADM0_A3_MA":"ISR","ADM0_A3_PT":"ISR","ADM0_A3_AR":"ISR","ADM0_A3_JP":"ISR","ADM0_A3_KO":"ISR","ADM0_A3_VN":"ISR","ADM0_A3_TR":"ISR","ADM0_A3_ID":"ISR","ADM0_A3_PL":"ISR","ADM0_A3_GR":"ISR","ADM0_A3_IT":"ISR","ADM0_A3_NL":"ISR","ADM0_A3_SE":"ISR","ADM0_A3_BD":"PSX","ADM0_A3_UA":"ISR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":34.847915,"LABEL_Y":30.911148,"NE_ID":1159320895,"WIKIDATAID":"Q801","NAME_AR":"إسرائيل","NAME_BN":"ইসরায়েল","NAME_DE":"Israel","NAME_EN":"Israel","NAME_ES":"Israel","NAME_FA":"اسرائیل","NAME_FR":"Israël","NAME_EL":"Ισραήλ","NAME_HE":"ישראל","NAME_HI":"इज़राइल","NAME_HU":"Izrael","NAME_ID":"Israel","NAME_IT":"Israele","NAME_JA":"イスラエル","NAME_KO":"이스라엘","NAME_NL":"Israël","NAME_PL":"Izrael","NAME_PT":"Israel","NAME_RU":"Израиль","NAME_SV":"Israel","NAME_TR":"İsrail","NAME_UK":"Ізраїль","NAME_UR":"اسرائیل","NAME_VI":"Israel","NAME_ZH":"以色列","NAME_ZHT":"以色列","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"Unrecognized","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"Unrecognized","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"Unrecognized","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[34.47734375000002,31.584863281249994],[34.19814453125002,31.322607421875],[34.24531250000001,31.208300781249996],[34.47734375000002,31.584863281249994]]],[[[35.55146484375001,32.3955078125],[35.19326171875002,32.534423828125],[34.95595703125002,32.160937499999996],[34.95097656250002,31.602294921875],[35.45058593750002,31.479296874999996],[35.55898437500002,31.765527343749994],[35.55146484375001,32.3955078125]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Israel","SOV_A3":"IS1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Indeterminate","TLC":"1","ADMIN":"Palestine","ADM0_A3":"PSX","GEOU_DIF":0,"GEOUNIT":"Palestine","GU_A3":"PSX","SU_DIF":0,"SUBUNIT":"Palestine","SU_A3":"PSX","BRK_DIFF":0,"NAME":"Palestine","NAME_LONG":"Palestine","BRK_A3":"PSX","BRK_NAME":"Palestine","BRK_GROUP":"","ABBREV":"Pal.","POSTAL":"PAL","FORMAL_EN":"West Bank and Gaza","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"","NOTE_BRK":"Partial self-admin.","NAME_SORT":"Palestine (West Bank and Gaza)","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":8,"POP_EST":4685306,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":16276,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"-99","ISO_A2":"PS","ISO_A2_EH":"PS","ISO_A3":"PSE","ISO_A3_EH":"PSE","ISO_N3":"275","ISO_N3_EH":"275","UN_A3":"275","WB_A2":"GZ","WB_A3":"WBG","WOE_ID":28289408,"WOE_ID_EH":28289408,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PSX","ADM0_DIFF":"","ADM0_TLC":"PSX","ADM0_A3_US":"PSX","ADM0_A3_FR":"PSX","ADM0_A3_RU":"PSX","ADM0_A3_ES":"PSX","ADM0_A3_CN":"PSX","ADM0_A3_TW":"PSX","ADM0_A3_IN":"PSX","ADM0_A3_NP":"PSX","ADM0_A3_PK":"PSX","ADM0_A3_DE":"PSX","ADM0_A3_GB":"PSX","ADM0_A3_BR":"PSX","ADM0_A3_IL":"PSX","ADM0_A3_PS":"PSX","ADM0_A3_SA":"PSX","ADM0_A3_EG":"PSX","ADM0_A3_MA":"PSX","ADM0_A3_PT":"PSX","ADM0_A3_AR":"PSX","ADM0_A3_JP":"PSX","ADM0_A3_KO":"PSX","ADM0_A3_VN":"PSX","ADM0_A3_TR":"PSX","ADM0_A3_ID":"PSX","ADM0_A3_PL":"PSX","ADM0_A3_GR":"PSX","ADM0_A3_IT":"PSX","ADM0_A3_NL":"PSX","ADM0_A3_SE":"PSX","ADM0_A3_BD":"PSX","ADM0_A3_UA":"PSX","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":7,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":35.291341,"LABEL_Y":32.047431,"NE_ID":1159320899,"WIKIDATAID":"Q23792","NAME_AR":"فلسطين","NAME_BN":"ফিলিস্তিন অঞ্চল","NAME_DE":"Palästina","NAME_EN":"Palestine","NAME_ES":"Palestina","NAME_FA":"فلسطین","NAME_FR":"Palestine","NAME_EL":"Παλαιστίνη","NAME_HE":"ארץ ישראל","NAME_HI":"फ़िलिस्तीनी राज्यक्षेत्र","NAME_HU":"Palesztina","NAME_ID":"Palestina","NAME_IT":"Palestina","NAME_JA":"パレスチナ","NAME_KO":"팔레스타인","NAME_NL":"Palestina","NAME_PL":"Palestyna","NAME_PT":"Palestina","NAME_RU":"Палестина","NAME_SV":"Palestina","NAME_TR":"Filistin","NAME_UK":"Палестина","NAME_UR":"فلسطین","NAME_VI":"Palestine","NAME_ZH":"巴勒斯坦","NAME_ZHT":"巴勒斯坦地區","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"Admin-0 country","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"Admin-0 country","FCLASS_SA":"Admin-0 country","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"Admin-0 country","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-7.218652343749994,55.0919921875],[-7.246679687499977,55.35302734375],[-8.274609374999983,55.146289062499996],[-8.763916015625,54.681201171874996],[-8.623144531249977,54.346875],[-9.995947265624977,54.276025390625],[-9.79541015625,53.394970703125],[-9.299218749999994,53.09755859375],[-9.955810546875,52.136669921875],[-10.378710937499989,51.86875],[-8.813427734374983,51.584912109375],[-7.527294921874983,52.098876953125],[-6.561083984374989,52.188818359375],[-6.027392578124989,52.927099609375],[-6.218017578125,54.088720703125],[-7.355175781249983,54.121240234375],[-8.118261718749977,54.4142578125],[-7.218652343749994,55.0919921875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":3,"SOVEREIGNT":"Ireland","SOV_A3":"IRL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Ireland","ADM0_A3":"IRL","GEOU_DIF":0,"GEOUNIT":"Ireland","GU_A3":"IRL","SU_DIF":0,"SUBUNIT":"Ireland","SU_A3":"IRL","BRK_DIFF":0,"NAME":"Ireland","NAME_LONG":"Ireland","BRK_A3":"IRL","BRK_NAME":"Ireland","BRK_GROUP":"","ABBREV":"Ire.","POSTAL":"IRL","FORMAL_EN":"Ireland","FORMAL_FR":"","NAME_CIAWF":"Ireland","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Ireland","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":3,"MAPCOLOR9":2,"MAPCOLOR13":2,"POP_EST":4941444,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":388698,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"EI","ISO_A2":"IE","ISO_A2_EH":"IE","ISO_A3":"IRL","ISO_A3_EH":"IRL","ISO_N3":"372","ISO_N3_EH":"372","UN_A3":"372","WB_A2":"IE","WB_A3":"IRL","WOE_ID":23424803,"WOE_ID_EH":23424803,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"IRL","ADM0_DIFF":"","ADM0_TLC":"IRL","ADM0_A3_US":"IRL","ADM0_A3_FR":"IRL","ADM0_A3_RU":"IRL","ADM0_A3_ES":"IRL","ADM0_A3_CN":"IRL","ADM0_A3_TW":"IRL","ADM0_A3_IN":"IRL","ADM0_A3_NP":"IRL","ADM0_A3_PK":"IRL","ADM0_A3_DE":"IRL","ADM0_A3_GB":"IRL","ADM0_A3_BR":"IRL","ADM0_A3_IL":"IRL","ADM0_A3_PS":"IRL","ADM0_A3_SA":"IRL","ADM0_A3_EG":"IRL","ADM0_A3_MA":"IRL","ADM0_A3_PT":"IRL","ADM0_A3_AR":"IRL","ADM0_A3_JP":"IRL","ADM0_A3_KO":"IRL","ADM0_A3_VN":"IRL","ADM0_A3_TR":"IRL","ADM0_A3_ID":"IRL","ADM0_A3_PL":"IRL","ADM0_A3_GR":"IRL","ADM0_A3_IT":"IRL","ADM0_A3_NL":"IRL","ADM0_A3_SE":"IRL","ADM0_A3_BD":"IRL","ADM0_A3_UA":"IRL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-7.798588,"LABEL_Y":53.078726,"NE_ID":1159320877,"WIKIDATAID":"Q27","NAME_AR":"جمهورية أيرلندا","NAME_BN":"প্রজাতন্ত্রী আয়ারল্যান্ড","NAME_DE":"Irland","NAME_EN":"Ireland","NAME_ES":"Irlanda","NAME_FA":"ایرلند","NAME_FR":"Irlande","NAME_EL":"Δημοκρατία της Ιρλανδίας","NAME_HE":"אירלנד","NAME_HI":"आयरलैण्ड","NAME_HU":"Írország","NAME_ID":"Republik Irlandia","NAME_IT":"Irlanda","NAME_JA":"アイルランド","NAME_KO":"아일랜드","NAME_NL":"Ierland","NAME_PL":"Irlandia","NAME_PT":"República da Irlanda","NAME_RU":"Ирландия","NAME_SV":"Irland","NAME_TR":"İrlanda","NAME_UK":"Ірландія","NAME_UR":"جمہوریہ آئرلینڈ","NAME_VI":"Cộng hòa Ireland","NAME_ZH":"爱尔兰","NAME_ZHT":"愛爾蘭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[42.358984375000006,37.10859375],[41.78857421875,36.59716796875],[41.41679687500002,36.5146484375],[41.24560546875,36.073388671874994],[41.354101562500006,35.640429687499996],[41.19472656250002,34.768994140625],[40.98701171875001,34.429052734375],[40.689453125,34.33203125],[38.773535156250006,33.372216796874994],[39.14541015625002,32.12451171875],[40.36933593750001,31.93896484375],[42.07441406250001,31.080371093749996],[42.85771484375002,30.49521484375],[44.69082031250002,29.202343749999997],[46.3564453125,29.063671874999997],[46.53144531250001,29.096240234374996],[46.905859375000006,29.537499999999994],[47.114355468750006,29.961328124999994],[47.67275390625002,30.095605468749994],[47.97871093750001,29.982812499999994],[48.546484375000006,29.962353515624997],[48.01494140625002,30.465624999999996],[48.01064453125002,30.989794921874996],[47.67949218750002,31.002392578124997],[47.82998046875002,31.79443359375],[47.37128906250001,32.423730468749994],[47.12138671875002,32.466601562499996],[46.377050781250006,32.929248046874996],[45.397070312500006,33.970849609374994],[45.437597656250006,34.41513671875],[45.67812500000002,34.7984375],[46.1337890625,35.12763671875],[45.72343750000002,35.836669921875],[45.36162109375002,36.01533203125],[44.76513671875,37.142431640625],[42.77460937500001,37.371874999999996],[42.358984375000006,37.10859375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Iraq","SOV_A3":"IRQ","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Iraq","ADM0_A3":"IRQ","GEOU_DIF":0,"GEOUNIT":"Iraq","GU_A3":"IRQ","SU_DIF":0,"SUBUNIT":"Iraq","SU_A3":"IRQ","BRK_DIFF":0,"NAME":"Iraq","NAME_LONG":"Iraq","BRK_A3":"IRQ","BRK_NAME":"Iraq","BRK_GROUP":"","ABBREV":"Iraq","POSTAL":"IRQ","FORMAL_EN":"Republic of Iraq","FORMAL_FR":"","NAME_CIAWF":"Iraq","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Iraq","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":3,"MAPCOLOR13":1,"POP_EST":39309783,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":234094,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"IZ","ISO_A2":"IQ","ISO_A2_EH":"IQ","ISO_A3":"IRQ","ISO_A3_EH":"IRQ","ISO_N3":"368","ISO_N3_EH":"368","UN_A3":"368","WB_A2":"IQ","WB_A3":"IRQ","WOE_ID":23424855,"WOE_ID_EH":23424855,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"IRQ","ADM0_DIFF":"","ADM0_TLC":"IRQ","ADM0_A3_US":"IRQ","ADM0_A3_FR":"IRQ","ADM0_A3_RU":"IRQ","ADM0_A3_ES":"IRQ","ADM0_A3_CN":"IRQ","ADM0_A3_TW":"IRQ","ADM0_A3_IN":"IRQ","ADM0_A3_NP":"IRQ","ADM0_A3_PK":"IRQ","ADM0_A3_DE":"IRQ","ADM0_A3_GB":"IRQ","ADM0_A3_BR":"IRQ","ADM0_A3_IL":"IRQ","ADM0_A3_PS":"IRQ","ADM0_A3_SA":"IRQ","ADM0_A3_EG":"IRQ","ADM0_A3_MA":"IRQ","ADM0_A3_PT":"IRQ","ADM0_A3_AR":"IRQ","ADM0_A3_JP":"IRQ","ADM0_A3_KO":"IRQ","ADM0_A3_VN":"IRQ","ADM0_A3_TR":"IRQ","ADM0_A3_ID":"IRQ","ADM0_A3_PL":"IRQ","ADM0_A3_GR":"IRQ","ADM0_A3_IT":"IRQ","ADM0_A3_NL":"IRQ","ADM0_A3_SE":"IRQ","ADM0_A3_BD":"IRQ","ADM0_A3_UA":"IRQ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7.5,"LABEL_X":43.26181,"LABEL_Y":33.09403,"NE_ID":1159320887,"WIKIDATAID":"Q796","NAME_AR":"العراق","NAME_BN":"ইরাক","NAME_DE":"Irak","NAME_EN":"Iraq","NAME_ES":"Irak","NAME_FA":"عراق","NAME_FR":"Irak","NAME_EL":"Ιράκ","NAME_HE":"עיראק","NAME_HI":"इराक","NAME_HU":"Irak","NAME_ID":"Irak","NAME_IT":"Iraq","NAME_JA":"イラク","NAME_KO":"이라크","NAME_NL":"Irak","NAME_PL":"Irak","NAME_PT":"Iraque","NAME_RU":"Ирак","NAME_SV":"Irak","NAME_TR":"Irak","NAME_UK":"Ірак","NAME_UR":"عراق","NAME_VI":"Iraq","NAME_ZH":"伊拉克","NAME_ZHT":"伊拉克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[53.914160156250006,37.343554687499996],[54.017187500000006,36.952490234375],[52.19013671875001,36.621728515624994],[51.11855468750002,36.742578124999994],[50.533203125,37.013671875],[50.130468750000006,37.407128906249994],[49.47011718750002,37.4966796875],[49.08095703125002,37.667578125],[48.868750000000006,38.435498046875],[48.59267578125002,38.411083984375],[48.02324218750002,38.81904296875],[48.24199218750002,38.978955078125],[47.99589843750002,39.683935546875],[47.77285156250002,39.648583984374994],[46.49062500000002,38.906689453125],[46.11445312500001,38.877783203125],[45.47968750000001,39.006249999999994],[44.81718750000002,39.650439453124996],[44.02324218750002,39.37744140625],[44.43085937500001,38.356787109375],[44.21132812500002,37.908056640625],[44.56123046875001,37.74462890625],[44.76513671875,37.142431640625],[45.36162109375002,36.01533203125],[45.72343750000002,35.836669921875],[46.1337890625,35.12763671875],[45.67812500000002,34.7984375],[45.437597656250006,34.41513671875],[45.397070312500006,33.970849609374994],[46.377050781250006,32.929248046874996],[47.12138671875002,32.466601562499996],[47.37128906250001,32.423730468749994],[47.82998046875002,31.79443359375],[47.67949218750002,31.002392578124997],[48.01064453125002,30.989794921874996],[48.01494140625002,30.465624999999996],[48.546484375000006,29.962353515624997],[48.91914062500001,30.120898437499996],[49.55488281250001,30.028955078124994],[49.98310546875001,30.209374999999994],[50.64960937500001,29.420068359374994],[50.67519531250002,29.14658203125],[51.06201171875,28.726123046874996],[51.278906250000006,28.13134765625],[51.66630859375002,27.844970703125],[52.47587890625002,27.616503906249996],[52.69160156250001,27.323388671874994],[53.45498046875002,26.943261718749994],[53.70576171875001,26.7255859375],[54.89580078125002,26.556689453124996],[55.65029296875002,26.9775390625],[56.35615234375001,27.200244140624996],[56.98222656250002,26.905468749999997],[57.334570312500006,25.791552734375003],[57.79609375000001,25.653027343749997],[58.7978515625,25.554589843749994],[59.04609375000001,25.417285156250003],[59.4560546875,25.481494140625003],[60.66386718750002,25.2822265625],[61.412207031250006,25.102099609375003],[61.587890625,25.202343749999997],[61.66865234375001,25.768994140624997],[61.86982421875001,26.242431640625],[62.43925781250002,26.56103515625],[63.168066406250006,26.665576171874996],[63.16679687500002,27.252490234374996],[62.76298828125002,27.250195312499997],[62.73974609375,28.00205078125],[62.35302734375,28.414746093749997],[61.88984375000001,28.546533203124994],[61.623046875,28.7916015625],[61.318359375,29.372607421874996],[60.843359375000006,29.858691406249996],[61.7841796875,30.831933593749994],[61.66015625,31.382421875],[60.854101562500006,31.483251953125],[60.82929687500001,32.249414062499994],[60.560546875,33.137841796874994],[60.9169921875,33.505224609375],[60.510839843750006,33.638916015625],[60.48574218750002,34.094775390624996],[61.080078125,34.855615234374994],[61.26201171875002,35.619580078125],[61.11962890625,36.642578125],[60.34130859375,36.637646484375],[60.06279296875002,36.962890625],[59.56220703125001,37.17890625],[59.240820312500006,37.520751953125],[58.8154296875,37.683496093749994],[58.43574218750001,37.638525390625],[57.423828125,37.947705078125],[57.19355468750001,38.21640625],[56.44062500000001,38.249414062499994],[56.22880859375002,38.073388671874994],[55.57841796875002,38.099755859374994],[55.07558593750002,37.902490234374994],[54.745214843750006,37.501904296875],[53.914160156250006,37.343554687499996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"Iran","SOV_A3":"IRN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Iran","ADM0_A3":"IRN","GEOU_DIF":0,"GEOUNIT":"Iran","GU_A3":"IRN","SU_DIF":0,"SUBUNIT":"Iran","SU_A3":"IRN","BRK_DIFF":0,"NAME":"Iran","NAME_LONG":"Iran","BRK_A3":"IRN","BRK_NAME":"Iran","BRK_GROUP":"","ABBREV":"Iran","POSTAL":"IRN","FORMAL_EN":"Islamic Republic of Iran","FORMAL_FR":"","NAME_CIAWF":"Iran","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Iran, Islamic Rep.","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":3,"MAPCOLOR9":4,"MAPCOLOR13":13,"POP_EST":82913906,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":453996,"GDP_YEAR":2018,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"IR","ISO_A2":"IR","ISO_A2_EH":"IR","ISO_A3":"IRN","ISO_A3_EH":"IRN","ISO_N3":"364","ISO_N3_EH":"364","UN_A3":"364","WB_A2":"IR","WB_A3":"IRN","WOE_ID":23424851,"WOE_ID_EH":23424851,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"IRN","ADM0_DIFF":"","ADM0_TLC":"IRN","ADM0_A3_US":"IRN","ADM0_A3_FR":"IRN","ADM0_A3_RU":"IRN","ADM0_A3_ES":"IRN","ADM0_A3_CN":"IRN","ADM0_A3_TW":"IRN","ADM0_A3_IN":"IRN","ADM0_A3_NP":"IRN","ADM0_A3_PK":"IRN","ADM0_A3_DE":"IRN","ADM0_A3_GB":"IRN","ADM0_A3_BR":"IRN","ADM0_A3_IL":"IRN","ADM0_A3_PS":"IRN","ADM0_A3_SA":"IRN","ADM0_A3_EG":"IRN","ADM0_A3_MA":"IRN","ADM0_A3_PT":"IRN","ADM0_A3_AR":"IRN","ADM0_A3_JP":"IRN","ADM0_A3_KO":"IRN","ADM0_A3_VN":"IRN","ADM0_A3_TR":"IRN","ADM0_A3_ID":"IRN","ADM0_A3_PL":"IRN","ADM0_A3_GR":"IRN","ADM0_A3_IT":"IRN","ADM0_A3_NL":"IRN","ADM0_A3_SE":"IRN","ADM0_A3_BD":"IRN","ADM0_A3_UA":"IRN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":6.7,"LABEL_X":54.931495,"LABEL_Y":32.166225,"NE_ID":1159320881,"WIKIDATAID":"Q794","NAME_AR":"إيران","NAME_BN":"ইরান","NAME_DE":"Iran","NAME_EN":"Iran","NAME_ES":"Irán","NAME_FA":"ایران","NAME_FR":"Iran","NAME_EL":"Ιράν","NAME_HE":"איראן","NAME_HI":"ईरान","NAME_HU":"Irán","NAME_ID":"Iran","NAME_IT":"Iran","NAME_JA":"イラン","NAME_KO":"이란","NAME_NL":"Iran","NAME_PL":"Iran","NAME_PT":"Irão","NAME_RU":"Иран","NAME_SV":"Iran","NAME_TR":"İran","NAME_UK":"Іран","NAME_UR":"ایران","NAME_VI":"Iran","NAME_ZH":"伊朗","NAME_ZHT":"伊朗","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[97.48154296875003,1.465087890625],[97.24423828125003,1.4236328124999886],[97.40537109375003,0.9469726562499972],[97.87646484375,0.6283203124999943],[97.93193359374999,0.9739257812499886],[97.48154296875003,1.465087890625]]],[[[99.16386718749999,-1.7779296875000057],[99.26728515625001,-1.6277343750000028],[98.86904296875002,-0.9156250000000057],[98.60175781250001,-1.1978515625000057],[98.87431640624999,-1.6636718750000057],[99.16386718749999,-1.7779296875000057]]],[[[116.64082031250001,-8.613867187500006],[116.73408203125001,-8.386914062500011],[116.40156250000001,-8.204199218750006],[116.06113281250003,-8.437402343750009],[116.07646484374999,-8.744921875000003],[116.37724609374999,-8.929003906250003],[116.64082031250001,-8.613867187500006]]],[[[115.44785156250003,-8.155175781250009],[114.47529296875001,-8.119433593750003],[115.23613281249999,-8.797558593750011],[115.70429687500001,-8.407128906250009],[115.44785156250003,-8.155175781250009]]],[[[106.04570312499999,-1.66943359375],[105.58544921875,-1.5267578125000085],[105.13339843750003,-2.0425781250000057],[105.78583984375001,-2.1813476562500114],[105.99873046875001,-2.8249023437500114],[106.54677734375002,-3.0555664062500085],[106.67880859375003,-2.7040039062500085],[106.36591796875001,-2.46484375],[106.04570312499999,-1.66943359375]]],[[[122.64511718750003,-5.2694335937500085],[122.70195312499999,-4.61865234375],[122.36894531249999,-4.767187500000006],[122.39628906249999,-5.06982421875],[122.64511718750003,-5.2694335937500085]]],[[[108.20722656250001,-2.9976562500000057],[108.07441406250001,-2.596972656250003],[107.66630859374999,-2.5663085937500085],[107.61445312500001,-3.2093750000000085],[108.20722656250001,-2.9976562500000057]]],[[[135.3830078125,-0.6513671875],[135.83876953125002,-1.1194335937500028],[135.8935546875,-0.7257812500000114],[135.3830078125,-0.6513671875]]],[[[135.47421875000003,-1.591796875],[136.192578125,-1.8591796875000028],[136.20156250000002,-1.6549804687500114],[135.47421875000003,-1.591796875]]],[[[128.15302734375,-1.6605468750000085],[127.74296875000005,-1.3602539062500085],[127.56162109375003,-1.728515625],[128.15302734375,-1.6605468750000085]]],[[[124.96953124999999,-1.7054687500000085],[124.380859375,-1.6875],[124.41777343749999,-2.005175781250003],[124.83447265625,-1.8944335937500085],[124.96953124999999,-1.7054687500000085]]],[[[131.32558593750002,-7.99951171875],[131.69111328125,-7.4388671875000085],[131.26005859375005,-7.470507812500003],[131.08681640625002,-7.865039062500003],[131.32558593750002,-7.99951171875]]],[[[126.80097656250001,-7.6678710937500085],[126.60957031250001,-7.57177734375],[125.84316406250002,-7.816699218750003],[126.47207031250002,-7.950390625000011],[126.80097656250001,-7.6678710937500085]]],[[[96.49257812500002,5.2293457031249915],[96.13330078125,5.2942871093749915],[95.84130859375,5.5145019531249915],[95.39609375000003,5.628808593749994],[95.20664062500003,5.2840332031249915],[95.49472656250003,4.761376953124994],[96.44472656250002,3.8163085937499943],[96.96894531250001,3.575146484374997],[97.39130859375001,2.975292968749997],[97.5908203125,2.8465820312499943],[97.70078125000003,2.3585449218749943],[98.56425781249999,1.9021484374999886],[98.79638671875,1.49462890625],[99.1591796875,0.35175781249999716],[99.59765625,0.10244140624999432],[100.30820312500003,-0.82666015625],[100.48652343750001,-1.2991210937500028],[100.85527343749999,-1.9341796875000057],[100.84804687500002,-2.1439453125000085],[101.57861328125,-3.1669921875],[102.12753906250003,-3.5992187500000057],[102.53769531250003,-4.152148437500003],[102.9189453125,-4.470703125],[103.83144531250002,-5.07958984375],[104.6015625,-5.904589843750003],[104.63955078125002,-5.5204101562500085],[105.08134765624999,-5.7455078125000085],[105.34941406249999,-5.549511718750011],[105.61855468750002,-5.799609375000003],[105.81611328125001,-5.676562500000003],[105.88720703125,-5.009570312500003],[105.84375,-3.6136718750000085],[106.04433593750002,-3.106250000000003],[105.58203125,-2.491992187500003],[105.39697265625,-2.380175781250003],[104.66845703125,-2.385546875000003],[104.84521484375,-2.0929687500000114],[104.56875000000002,-1.9217773437500085],[104.36054687500001,-1.0383789062500028],[103.72109375000002,-0.88671875],[103.43115234375,-0.5335937500000085],[103.42851562499999,-0.19179687500000853],[103.78671875000003,0.046972656249991473],[103.47890625000002,0.48017578124999716],[103.06650390625003,0.49199218749998863],[102.84941406249999,0.7154785156249943],[102.46923828125,0.779296875],[102.1572265625,1.2588867187499915],[101.78476562500003,1.6213867187499886],[101.47666015625003,1.6930664062499972],[101.04619140624999,2.2574707031249943],[100.68525390625001,2.120068359374997],[100.45703125,2.2574218749999915],[99.73232421875002,3.183056640624997],[98.30732421875001,4.0928710937499915],[98.24843750000002,4.41455078125],[97.54716796874999,5.205859374999989],[96.49257812500002,5.2293457031249915]]],[[[122.78291015625001,-8.611718750000009],[122.603515625,-8.402441406250006],[122.26308593750002,-8.624902343750009],[121.96650390625001,-8.455175781250006],[121.44453125000001,-8.577832031250011],[120.61025390625002,-8.240429687500011],[119.91826171874999,-8.445117187500003],[119.80791015624999,-8.697656250000009],[121.03525390625003,-8.935449218750009],[121.6513671875,-8.898730468750003],[122.78291015625001,-8.611718750000009]]],[[[120.01249999999999,-9.374707031250011],[119.18564453125003,-9.384472656250011],[119.08544921875,-9.706933593750009],[119.60107421875,-9.773535156250006],[120.14482421874999,-10.200097656250009],[120.43916015625001,-10.294042968750006],[120.83261718750003,-10.037500000000009],[120.50371093749999,-9.674023437500011],[120.01249999999999,-9.374707031250011]]],[[[118.24238281250001,-8.317773437500009],[118.11748046874999,-8.122265625000011],[117.56708984375001,-8.426367187500006],[117.16484374999999,-8.3671875],[116.83505859375003,-8.532421875000011],[116.78847656250002,-9.00634765625],[117.06132812499999,-9.099023437500009],[118.18994140625,-8.840527343750011],[119.00625000000002,-8.749609375000006],[118.98779296875,-8.337695312500003],[118.24238281250001,-8.317773437500009]]],[[[124.88886718750001,0.9953124999999972],[125.23378906250002,1.5022949218749915],[124.9892578125,1.7010253906249915],[124.27363281250001,1.0222656249999886],[123.8466796875,0.8381835937499886],[123.27812499999999,0.9280761718749915],[122.89248046875002,0.8499999999999943],[122.43662109375003,1.01806640625],[121.591796875,1.0679687499999915],[121.44003906250003,1.2144042968749886],[120.912109375,1.2889648437499943],[120.5166015625,0.8175292968749943],[120.26953125,0.9708007812499915],[119.80927734375001,0.23867187499999432],[119.77167968750001,-0.48359375000001137],[119.30898437500002,-1.408203125],[119.32187500000003,-1.9296875],[119.09218750000002,-2.48291015625],[118.78369140625,-2.7647460937500057],[118.8125,-3.1566406250000085],[118.99462890625,-3.53759765625],[119.41982421875002,-3.475390625000003],[119.62363281250003,-4.034375000000011],[119.61171875000002,-4.423535156250011],[119.37617187500001,-5.4248046875],[119.71728515625,-5.693359375],[120.31162109375003,-5.541601562500006],[120.279296875,-5.146093750000006],[120.42011718750001,-4.617382812500011],[120.36250000000001,-4.085742187500003],[120.43662109375003,-3.707324218750003],[120.25410156250001,-3.0528320312500057],[120.65361328124999,-2.6675781250000057],[121.05214843750002,-2.7516601562500114],[121.05429687500003,-3.1670898437500057],[120.91425781250001,-3.5557617187500057],[121.61806640625002,-4.0926757812500085],[121.48652343750001,-4.5810546875],[121.9169921875,-4.847949218750003],[122.20712890625003,-4.496386718750003],[122.89736328125002,-4.34912109375],[122.87734375000002,-4.109082031250011],[122.2529296875,-3.620410156250003],[122.39902343750003,-3.2008789062500114],[121.84824218750003,-2.33154296875],[121.34882812500001,-1.9459960937500114],[121.71875,-1.86279296875],[122.50664062499999,-1.3478515625000114],[122.88876953125003,-0.7551757812500028],[122.27998046875001,-0.7570312500000114],[121.96962890625002,-0.9333007812500114],[121.51933593749999,-0.8555664062500057],[121.03369140625,-1.4065429687500028],[120.66738281250002,-1.3701171875],[120.517578125,-1.0394531250000085],[120.09746093749999,-0.64990234375],[120.01328125000003,-0.19619140625000853],[120.34902343750002,0.44921875],[121.42578125,0.49482421874999716],[121.84199218750001,0.43657226562498863],[123.08251953125,0.48583984375],[123.26542968749999,0.32661132812499716],[123.75380859375002,0.3055175781249915],[124.42753906249999,0.4706054687499943],[124.88886718750001,0.9953124999999972]]],[[[107.37392578125002,-6.007617187500003],[107.04628906250002,-5.9041992187500085],[106.8251953125,-6.098242187500006],[106.07499999999999,-5.914160156250006],[105.86826171875003,-6.116406250000011],[105.48369140624999,-6.781542968750003],[106.51972656250001,-7.0537109375],[106.63144531250003,-7.41552734375],[107.28496093749999,-7.4716796875],[107.91748046875,-7.72412109375],[108.45175781250003,-7.796972656250006],[108.7412109375,-7.667089843750006],[109.28164062500002,-7.704882812500003],[110.03867187500003,-7.8905273437500085],[110.60722656249999,-8.1494140625],[111.50996093750001,-8.305078125000009],[112.67880859375003,-8.4091796875],[113.25332031250002,-8.286718750000006],[114.58378906249999,-8.769628906250006],[114.38691406250001,-8.405175781250009],[114.44423828125002,-7.895605468750006],[114.07070312500002,-7.633007812500011],[113.24843750000002,-7.7181640625000085],[112.79453125000003,-7.552441406250011],[112.53925781250001,-6.926464843750011],[112.08730468750002,-6.893359375000003],[111.54033203124999,-6.648242187500003],[111.15439453125003,-6.669042968750006],[110.73691406250003,-6.472363281250011],[110.42626953125,-6.947265625],[108.67783203125003,-6.79052734375],[108.29501953125003,-6.2650390625000085],[107.66679687499999,-6.2158203125],[107.37392578125002,-6.007617187500003]]],[[[109.62890625,2.027539062499997],[109.37851562500003,1.9227050781249915],[109.07587890625001,1.4958984374999886],[108.90585937500003,0.7939453125],[108.94453125000001,0.35566406249999716],[109.25751953125001,0.031152343749994316],[109.16054687500002,-0.49492187500000284],[109.45380859375001,-0.8687500000000057],[109.78740234374999,-1.0113281250000057],[110.01923828125001,-1.3988281250000085],[110.23261718750001,-2.925097656250003],[110.57402343749999,-2.891406250000003],[111.04433593750002,-3.0557617187500057],[111.36757812500002,-2.9336914062500057],[111.82304687499999,-3.0572265625000057],[111.82207031249999,-3.532519531250003],[112.28496093749999,-3.3209960937500114],[112.60029296875001,-3.4004882812500057],[112.97148437499999,-3.1871093750000057],[113.52597656250003,-3.18408203125],[113.79580078125002,-3.4562500000000114],[114.08222656250001,-3.2789062500000057],[114.5361328125,-3.494433593750003],[114.69355468750001,-4.169726562500003],[115.95615234375003,-3.595019531250003],[116.33066406250003,-2.902148437500003],[116.5654296875,-2.2997070312500085],[116.42353515625001,-2.052539062500003],[116.55449218749999,-1.4739257812500028],[117.5625,-0.7708984375000085],[117.462890625,-0.32373046875],[117.52216796875001,0.23588867187498863],[117.7451171875,0.7296386718749943],[118.19609374999999,0.8743652343749915],[118.53476562500003,0.8135253906249886],[118.98496093750003,0.9821289062499972],[118.08037109374999,1.7018554687499972],[117.86464843750002,1.9684082031249943],[118.06660156250001,2.317822265624997],[117.61064453124999,3.0643554687499943],[117.16640625000002,3.591992187499997],[117.6298828125,3.6363281249999915],[117.57441406250001,4.170605468749997],[117.1005859375,4.337060546874994],[115.89619140625001,4.348681640624989],[115.56845703125003,3.9387695312499886],[115.45439453124999,3.0343261718749943],[115.08632812500002,2.8411132812499886],[115.17910156250002,2.523193359375],[114.78642578124999,2.25048828125],[114.83056640625,1.9800292968749886],[114.5458984375,1.4671386718749915],[113.90234375,1.4342773437499972],[113.62226562500001,1.2359374999999915],[112.47617187500003,1.55908203125],[112.18574218750001,1.4390624999999915],[112.07851562500002,1.1433593749999886],[111.76972656250001,0.9994628906249972],[110.93808593750003,1.017333984375],[110.50576171875002,0.8619628906249943],[109.65400390625001,1.6148925781249943],[109.62890625,2.027539062499997]]],[[[127.73271484375005,0.84814453125],[127.65283203125,1.0138671874999972],[128.01171875,1.3317382812499972],[128.0109375,1.7012207031249886],[127.63173828125002,1.8437011718749972],[127.42031250000002,1.251953125],[127.55537109375001,0.4896484374999943],[127.70869140625001,0.2880859375],[127.69160156250001,-0.24189453125001137],[128.04638671875,-0.7060546875],[127.88740234375001,0.29833984375],[127.98310546875001,0.47187499999999716],[128.6916015625,0.3603515625],[128.298828125,0.8768066406249915],[128.70263671875,1.1063964843749972],[128.68837890625002,1.5725585937499886],[128.42412109375005,1.5175292968749972],[128.16074218750003,1.1578124999999915],[127.73271484375005,0.84814453125]]],[[[129.75468750000005,-2.8658203125000057],[129.42734375000003,-2.7907226562500114],[128.19853515625005,-2.8659179687500114],[128.08212890625003,-3.18408203125],[128.41923828125005,-3.416015625],[128.96748046875,-3.3260742187500085],[129.46767578125002,-3.4532226562500057],[129.84414062500002,-3.3271484375],[130.80507812500002,-3.857714843750003],[130.85996093750003,-3.5703125],[130.3791015625,-2.9893554687500057],[129.75468750000005,-2.8658203125000057]]],[[[126.86113281249999,-3.087890625],[126.02646484375003,-3.1705078125000057],[126.21455078125001,-3.6051757812500114],[126.68632812499999,-3.8236328125000085],[127.22958984375003,-3.6330078125000114],[127.22734375000005,-3.3910156250000085],[126.86113281249999,-3.087890625]]],[[[124.92226562500002,-8.942480468750006],[124.44443359375003,-9.190332031250009],[124.03632812500001,-9.341601562500003],[123.70937500000002,-9.614843750000006],[123.58925781250002,-9.966796875],[123.85761718750001,-10.343554687500003],[124.42753906249999,-10.148632812500011],[125.06816406249999,-9.511914062500011],[124.92226562500002,-8.942480468750006]]],[[[134.74697265625002,-5.70703125],[134.34130859375,-5.712890625],[134.44111328125,-6.3348632812500085],[134.755859375,-6.170605468750011],[134.74697265625002,-5.70703125]]],[[[134.53681640625,-6.4422851562500085],[134.16806640625003,-6.17626953125],[134.05917968750003,-6.769335937500003],[134.35595703125,-6.8148437500000085],[134.53681640625,-6.4422851562500085]]],[[[138.5353515625,-8.273632812500011],[138.98906250000005,-7.696093750000003],[138.76982421875005,-7.390429687500003],[138.29550781250003,-7.4384765625],[138.00751953125,-7.6416015625],[137.68515625000003,-8.26220703125],[138.29628906250002,-8.405175781250009],[138.5353515625,-8.273632812500011]]],[[[140.97343750000005,-2.6097656250000085],[140.62255859375,-2.44580078125],[139.78955078125,-2.3482421875000057],[138.64980468750002,-1.7911132812500057],[137.80625000000003,-1.4832031250000028],[137.12343750000002,-1.8409179687500057],[136.84326171875,-2.1976562500000085],[136.38994140625005,-2.2733398437500085],[136.24326171875003,-2.5831054687500057],[135.48662109375005,-3.3451171875000085],[135.03740234375005,-3.3331054687500057],[134.15566406250002,-2.1952148437500085],[134.10585937500002,-1.7209960937500028],[134.25957031250005,-1.3629882812500114],[133.97451171875002,-0.7443359375000114],[133.47265625,-0.7261718750000057],[132.62509765625003,-0.35888671875],[132.12841796875,-0.4541015625],[131.80429687500003,-0.7038085937500114],[131.25722656250002,-0.85546875],[131.29375000000005,-1.3934570312500085],[131.93037109375,-1.5596679687500057],[132.0234375,-1.9903320312500057],[132.3076171875,-2.2422851562500057],[132.96279296875002,-2.2725585937500057],[133.92158203125,-2.10205078125],[133.90488281250003,-2.390917968750003],[133.60869140625005,-2.547167968750003],[133.19101562500003,-2.437792968750003],[132.34824218750003,-2.97509765625],[132.75136718750002,-3.2946289062500114],[132.75390625,-3.70361328125],[132.96855468750005,-4.094921875000011],[133.24873046875,-4.062304687500003],[133.65312500000005,-3.3643554687500057],[133.973828125,-3.8179687500000057],[134.14707031250003,-3.7967773437500085],[135.19560546875005,-4.45068359375],[135.9796875,-4.530859375000006],[136.61884765625,-4.8187500000000085],[137.08925781250002,-4.924414062500006],[137.75908203125005,-5.256152343750003],[138.2521484375,-5.688183593750011],[138.438671875,-6.343359375000006],[138.86455078125005,-6.8583984375],[138.74794921875002,-7.25146484375],[139.08798828125003,-7.587207031250003],[138.85615234375,-8.145117187500006],[139.38564453125002,-8.189062500000006],[139.934765625,-8.101171875000006],[140.97617187500003,-9.118750000000006],[140.97519531250003,-6.905371093750006],[140.97421875000003,-4.2264648437500085],[140.97343750000005,-2.6097656250000085]]],[[[113.84453124999999,-7.1053710937500085],[113.97470703125003,-6.873046875],[112.86806640625002,-6.89990234375],[112.76376953125003,-7.1396484375],[113.470703125,-7.218457031250011],[113.84453124999999,-7.1053710937500085]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"Indonesia","SOV_A3":"IDN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Indonesia","ADM0_A3":"IDN","GEOU_DIF":0,"GEOUNIT":"Indonesia","GU_A3":"IDN","SU_DIF":0,"SUBUNIT":"Indonesia","SU_A3":"IDN","BRK_DIFF":0,"NAME":"Indonesia","NAME_LONG":"Indonesia","BRK_A3":"IDN","BRK_NAME":"Indonesia","BRK_GROUP":"","ABBREV":"Indo.","POSTAL":"INDO","FORMAL_EN":"Republic of Indonesia","FORMAL_FR":"","NAME_CIAWF":"Indonesia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Indonesia","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":11,"POP_EST":270625568,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":1119190,"GDP_YEAR":2019,"ECONOMY":"4. Emerging region: MIKT","INCOME_GRP":"4. Lower middle income","FIPS_10":"ID","ISO_A2":"ID","ISO_A2_EH":"ID","ISO_A3":"IDN","ISO_A3_EH":"IDN","ISO_N3":"360","ISO_N3_EH":"360","UN_A3":"360","WB_A2":"ID","WB_A3":"IDN","WOE_ID":23424846,"WOE_ID_EH":23424846,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"IDN","ADM0_DIFF":"","ADM0_TLC":"IDN","ADM0_A3_US":"IDN","ADM0_A3_FR":"IDN","ADM0_A3_RU":"IDN","ADM0_A3_ES":"IDN","ADM0_A3_CN":"IDN","ADM0_A3_TW":"IDN","ADM0_A3_IN":"IDN","ADM0_A3_NP":"IDN","ADM0_A3_PK":"IDN","ADM0_A3_DE":"IDN","ADM0_A3_GB":"IDN","ADM0_A3_BR":"IDN","ADM0_A3_IL":"IDN","ADM0_A3_PS":"IDN","ADM0_A3_SA":"IDN","ADM0_A3_EG":"IDN","ADM0_A3_MA":"IDN","ADM0_A3_PT":"IDN","ADM0_A3_AR":"IDN","ADM0_A3_JP":"IDN","ADM0_A3_KO":"IDN","ADM0_A3_VN":"IDN","ADM0_A3_TR":"IDN","ADM0_A3_ID":"IDN","ADM0_A3_PL":"IDN","ADM0_A3_GR":"IDN","ADM0_A3_IT":"IDN","ADM0_A3_NL":"IDN","ADM0_A3_SE":"IDN","ADM0_A3_BD":"IDN","ADM0_A3_UA":"IDN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":101.892949,"LABEL_Y":-0.954404,"NE_ID":1159320845,"WIKIDATAID":"Q252","NAME_AR":"إندونيسيا","NAME_BN":"ইন্দোনেশিয়া","NAME_DE":"Indonesien","NAME_EN":"Indonesia","NAME_ES":"Indonesia","NAME_FA":"اندونزی","NAME_FR":"Indonésie","NAME_EL":"Ινδονησία","NAME_HE":"אינדונזיה","NAME_HI":"इंडोनेशिया","NAME_HU":"Indonézia","NAME_ID":"Indonesia","NAME_IT":"Indonesia","NAME_JA":"インドネシア","NAME_KO":"인도네시아","NAME_NL":"Indonesië","NAME_PL":"Indonezja","NAME_PT":"Indonésia","NAME_RU":"Индонезия","NAME_SV":"Indonesien","NAME_TR":"Endonezya","NAME_UK":"Індонезія","NAME_UR":"انڈونیشیا","NAME_VI":"Indonesia","NAME_ZH":"印度尼西亚","NAME_ZHT":"印度尼西亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[68.1650390625,23.857324218749994],[68.64072265625003,23.189941406250114],[69.23593749999998,22.848535156250023],[69.66464843750009,22.759082031250102],[70.25117187500007,22.970898437500068],[70.17724609375006,22.572753906249943],[69.00878906250006,22.196777343750114],[70.12734375000002,21.094677734375125],[70.71933593750003,20.740429687500068],[71.02460937500007,20.73886718750009],[72.01523437500009,21.155712890625125],[72.25400390625003,21.531005859375],[72.03720703125009,21.82304687499999],[72.33261718750009,22.270214843749955],[72.59013671875016,22.27812499999999],[72.54306640624998,21.69658203124999],[72.81386718750008,21.117187500000057],[72.8811523437501,20.56318359375001],[72.66777343750016,19.83095703125008],[72.87089843750016,18.683056640624955],[73.15605468750016,17.621923828124977],[73.33759765625001,16.459863281250023],[73.47607421874994,16.05424804687499],[73.9319335937501,15.39697265625],[73.94921875000006,15.074755859375102],[74.38222656250002,14.494726562500034],[74.6708984375,13.667626953125136],[74.77050781250006,13.077343750000125],[75.19667968750002,12.057519531250023],[75.72382812500013,11.361767578125011],[75.92255859375013,10.784082031250136],[76.34648437499999,9.922119140625],[76.32460937500014,9.452099609375011],[76.55341796875001,8.902783203125011],[76.96689453125009,8.407275390624932],[77.517578125,8.078320312500068],[78.06015625000003,8.384570312499932],[78.19248046874998,8.890869140625057],[78.42148437500009,9.105029296874989],[78.97958984375015,9.268554687500114],[78.99628906249995,9.68310546875],[79.39052734375002,10.305957031250045],[79.83818359375005,10.322558593750045],[79.84863281250006,11.196875000000034],[79.75410156250001,11.575292968750034],[79.85849609375015,11.988769531250057],[80.22910156250015,12.690332031249966],[80.34238281250009,13.361328125000057],[80.11171875000002,14.212207031250045],[80.16542968750014,14.577832031250125],[80.05341796875007,15.074023437499932],[80.29345703125011,15.710742187499989],[80.64658203125009,15.895019531250057],[80.97871093750007,15.758349609375102],[81.2385742187501,16.263964843750045],[81.76191406250013,16.32949218750008],[82.25878906250011,16.559863281249932],[82.35957031250001,17.09619140625],[83.19833984375003,17.608984374999977],[83.654296875,18.069873046875102],[84.10410156250015,18.29267578125001],[84.77099609375011,19.125390625000023],[85.57499999999999,19.69291992187499],[86.27949218750013,19.919433593749943],[86.75039062500014,20.313232421875057],[86.97548828125002,20.70014648437501],[86.85957031250001,21.23671875000008],[87.10068359375009,21.500781250000045],[87.94843749999995,21.825439453124943],[88.25371093749999,21.622314453124943],[89.05166015625002,21.654101562500045],[89.05146484375001,22.093164062500136],[88.74082031250003,23.43662109374999],[88.5673828125,23.67441406249999],[88.73359375000001,24.230908203124997],[88.1455078125,24.485791015624997],[88.45625000000001,25.188427734374997],[88.45234375000001,25.574414062499997],[88.08457031249998,25.888232421875045],[88.4404296875,26.369482421875],[89.10830078125002,26.20224609375009],[89.28925781250001,26.03759765625],[89.82294921875001,25.94140625],[89.81406250000003,25.305371093749997],[90.43935546875002,25.15771484375],[92.04970703125002,25.169482421875003],[92.25126953124993,24.895068359375045],[91.876953125,24.1953125],[91.36708984375002,24.093505859375],[91.16044921874999,23.66064453125],[91.31523437499999,23.104394531249994],[91.61953125000002,22.979687500000068],[91.93789062500002,23.504687500000003],[92.24609374999994,23.683593749999943],[92.36162109374999,22.929003906250003],[92.49140625000001,22.68540039062499],[92.57490234374995,21.97807617187499],[92.96455078125001,22.00375976562499],[93.16201171875002,22.360205078125034],[93.07871093750003,22.718212890624997],[93.36601562499999,23.132519531249997],[93.41494140625002,23.682080078124997],[93.30732421874995,24.021875000000136],[94.12763671875001,23.87646484375],[94.29306640625003,24.32187499999999],[94.70761718750003,25.048730468749994],[94.62285156249999,25.41000976562499],[95.13242187500003,26.041259765625],[95.12871093749999,26.59726562500009],[96.06142578125002,27.217089843749996],[96.66572265625001,27.339257812499994],[97.33515625000001,27.937744140625],[97.32246093750001,28.217968749999997],[96.60263671875003,28.459912109375125],[96.43574218750001,29.050683593749994],[96.03535156250001,29.447167968749994],[95.42021484374999,29.054296875],[94.76943359375002,29.17587890625],[94.623046875,29.312402343749994],[93.90224609375002,28.80322265625],[93.20654296875,28.5908203125],[92.70185546875001,28.147119140624994],[92.66435546874999,27.948925781249997],[91.97763671875003,27.730371093749994],[91.63193359375003,27.759960937499997],[91.5947265625,27.557666015624996],[92.08339843750002,27.290625],[91.99833984374999,26.85498046875],[90.73964843750002,26.771679687500068],[90.34589843750001,26.890332031249997],[89.76386718750001,26.701562500000023],[88.85761718750001,26.961474609374996],[88.89140624999999,27.316064453124994],[88.84882812500001,27.86865234375],[88.62109375,28.091845703124996],[88.10976562499997,27.870605468749943],[87.984375,27.133935546874994],[88.16152343750002,26.724804687500125],[88.05488281250001,26.43002929687492],[87.28740234374993,26.360302734375125],[87.01640624999999,26.555419921875057],[86.70136718750001,26.43505859375],[86.36611328125002,26.574414062499997],[85.29296875,26.741015624999996],[84.68535156249999,27.041015625],[84.61015624999999,27.298681640625],[84.09101562499995,27.491357421875136],[83.28974609375001,27.370996093749994],[82.7333984375,27.518994140624997],[81.98769531250002,27.913769531249997],[81.85263671875003,27.867089843749994],[80.58701171875003,28.649609374999997],[80.07070312500002,28.830175781250034],[80.40185546875,29.730273437499996],[81.01025390625,30.164501953124997],[80.68212890625,30.414843749999996],[80.19121093749999,30.568408203124996],[80.1943359375,30.759228515625125],[79.5654296875,30.949072265625],[79.10712890625001,31.402636718749996],[78.79160156250003,31.293652343750125],[78.73544921875003,31.957958984374997],[78.3896484375,32.51987304687498],[79.21933593750003,32.50107421875],[79.11250000000001,33.22626953125001],[78.80185546875003,33.49970703125],[78.75302734375003,34.087695312499996],[78.93642578125002,34.35195312500002],[78.28203124999999,34.65390625],[77.79941406250003,35.495898437500045],[77.04863281249999,35.109912109374996],[76.59443359375001,34.73583984375],[75.70917968750001,34.50307617187508],[74.300390625,34.765380859375],[73.96123046875002,34.653466796874994],[74.14999999999998,33.50698242187502],[73.99423828125,33.2421875],[74.6578125,32.518945312499994],[75.33349609375,32.279199218749966],[74.50996093750001,31.712939453124996],[74.6328125,31.03466796875],[73.89931640625002,30.435351562500045],[73.80917968749998,30.093359375000034],[73.38164062500002,29.934374999999996],[72.9033203125,29.028759765624997],[72.34189453125,28.751904296874997],[71.87031250000001,27.9625],[70.73740234374998,27.729003906250057],[70.40371093750002,28.025048828124966],[70.14453125,27.849023437500023],[69.56796874999992,27.174609375000102],[69.47001953125002,26.804443359375],[70.1568359375,26.471435546875],[70.077734375,26.071972656249997],[70.2646484375,25.70654296875],[70.65205078125001,25.422900390625102],[71.0478515625,24.687744140625057],[71.04404296875,24.400097656249997],[70.54677734375002,24.41831054687499],[69.71621093750002,24.172607421875],[69.5591796875,24.273095703124994],[68.728125,24.265625],[68.72412109375,23.964697265625034],[68.1650390625,23.857324218749994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"India","SOV_A3":"IND","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"India","ADM0_A3":"IND","GEOU_DIF":0,"GEOUNIT":"India","GU_A3":"IND","SU_DIF":0,"SUBUNIT":"India","SU_A3":"IND","BRK_DIFF":0,"NAME":"India","NAME_LONG":"India","BRK_A3":"IND","BRK_NAME":"India","BRK_GROUP":"","ABBREV":"India","POSTAL":"IND","FORMAL_EN":"Republic of India","FORMAL_FR":"","NAME_CIAWF":"India","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"India","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":2,"MAPCOLOR13":2,"POP_EST":1366417754,"POP_RANK":18,"POP_YEAR":2019,"GDP_MD":2868929,"GDP_YEAR":2019,"ECONOMY":"3. Emerging region: BRIC","INCOME_GRP":"4. Lower middle income","FIPS_10":"IN","ISO_A2":"IN","ISO_A2_EH":"IN","ISO_A3":"IND","ISO_A3_EH":"IND","ISO_N3":"356","ISO_N3_EH":"356","UN_A3":"356","WB_A2":"IN","WB_A3":"IND","WOE_ID":23424848,"WOE_ID_EH":23424848,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"IND","ADM0_DIFF":"","ADM0_TLC":"IND","ADM0_A3_US":"IND","ADM0_A3_FR":"IND","ADM0_A3_RU":"IND","ADM0_A3_ES":"IND","ADM0_A3_CN":"IND","ADM0_A3_TW":"IND","ADM0_A3_IN":"IND","ADM0_A3_NP":"IND","ADM0_A3_PK":"IND","ADM0_A3_DE":"IND","ADM0_A3_GB":"IND","ADM0_A3_BR":"IND","ADM0_A3_IL":"IND","ADM0_A3_PS":"IND","ADM0_A3_SA":"IND","ADM0_A3_EG":"IND","ADM0_A3_MA":"IND","ADM0_A3_PT":"IND","ADM0_A3_AR":"IND","ADM0_A3_JP":"IND","ADM0_A3_KO":"IND","ADM0_A3_VN":"IND","ADM0_A3_TR":"IND","ADM0_A3_ID":"IND","ADM0_A3_PL":"IND","ADM0_A3_GR":"IND","ADM0_A3_IT":"IND","ADM0_A3_NL":"IND","ADM0_A3_SE":"IND","ADM0_A3_BD":"IND","ADM0_A3_UA":"IND","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":79.358105,"LABEL_Y":22.686852,"NE_ID":1159320847,"WIKIDATAID":"Q668","NAME_AR":"الهند","NAME_BN":"ভারত","NAME_DE":"Indien","NAME_EN":"India","NAME_ES":"India","NAME_FA":"هند","NAME_FR":"Inde","NAME_EL":"Ινδία","NAME_HE":"הודו","NAME_HI":"भारत","NAME_HU":"India","NAME_ID":"India","NAME_IT":"India","NAME_JA":"インド","NAME_KO":"인도","NAME_NL":"India","NAME_PL":"Indie","NAME_PT":"Índia","NAME_RU":"Индия","NAME_SV":"Indien","NAME_TR":"Hindistan","NAME_UK":"Індія","NAME_UR":"بھارت","NAME_VI":"Ấn Độ","NAME_ZH":"印度","NAME_ZHT":"印度","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-15.543115234374994,66.228515625],[-15.985400390624989,66.5146484375],[-16.748437499999994,66.131640625],[-18.777539062499983,66.168798828125],[-20.356591796874994,66.033251953125],[-20.356640624999983,65.71904296875],[-21.22998046875,65.42060546875],[-21.303466796875,65.87646484375],[-22.426123046874977,66.430126953125],[-23.527929687499977,66.164404296875],[-24.223974609374977,65.48720703125],[-22.902490234374994,65.58046875],[-22.005761718749994,65.49345703125],[-22.683984374999994,65.0263671875],[-21.950341796874994,64.514990234375],[-21.832763671875,64.205419921875],[-20.198144531249994,63.555810546874994],[-18.65361328124999,63.406689453125],[-17.81572265624999,63.71298828125],[-16.640332031249983,63.865478515625],[-16.060449218749994,64.11123046875],[-14.547070312499983,64.445947265625],[-13.569677734374977,65.068115234375],[-13.616015624999989,65.487158203125],[-14.757519531249983,65.7556640625],[-14.740429687499983,66.050830078125],[-15.543115234374994,66.228515625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Iceland","SOV_A3":"ISL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Iceland","ADM0_A3":"ISL","GEOU_DIF":0,"GEOUNIT":"Iceland","GU_A3":"ISL","SU_DIF":0,"SUBUNIT":"Iceland","SU_A3":"ISL","BRK_DIFF":0,"NAME":"Iceland","NAME_LONG":"Iceland","BRK_A3":"ISL","BRK_NAME":"Iceland","BRK_GROUP":"","ABBREV":"Iceland","POSTAL":"IS","FORMAL_EN":"Republic of Iceland","FORMAL_FR":"","NAME_CIAWF":"Iceland","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Iceland","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":9,"POP_EST":361313,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":24188,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"IC","ISO_A2":"IS","ISO_A2_EH":"IS","ISO_A3":"ISL","ISO_A3_EH":"ISL","ISO_N3":"352","ISO_N3_EH":"352","UN_A3":"352","WB_A2":"IS","WB_A3":"ISL","WOE_ID":23424845,"WOE_ID_EH":23424845,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ISL","ADM0_DIFF":"","ADM0_TLC":"ISL","ADM0_A3_US":"ISL","ADM0_A3_FR":"ISL","ADM0_A3_RU":"ISL","ADM0_A3_ES":"ISL","ADM0_A3_CN":"ISL","ADM0_A3_TW":"ISL","ADM0_A3_IN":"ISL","ADM0_A3_NP":"ISL","ADM0_A3_PK":"ISL","ADM0_A3_DE":"ISL","ADM0_A3_GB":"ISL","ADM0_A3_BR":"ISL","ADM0_A3_IL":"ISL","ADM0_A3_PS":"ISL","ADM0_A3_SA":"ISL","ADM0_A3_EG":"ISL","ADM0_A3_MA":"ISL","ADM0_A3_PT":"ISL","ADM0_A3_AR":"ISL","ADM0_A3_JP":"ISL","ADM0_A3_KO":"ISL","ADM0_A3_VN":"ISL","ADM0_A3_TR":"ISL","ADM0_A3_ID":"ISL","ADM0_A3_PL":"ISL","ADM0_A3_GR":"ISL","ADM0_A3_IT":"ISL","ADM0_A3_NL":"ISL","ADM0_A3_SE":"ISL","ADM0_A3_BD":"ISL","ADM0_A3_UA":"ISL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":-18.673711,"LABEL_Y":64.779286,"NE_ID":1159320917,"WIKIDATAID":"Q189","NAME_AR":"آيسلندا","NAME_BN":"আইসল্যান্ড","NAME_DE":"Island","NAME_EN":"Iceland","NAME_ES":"Islandia","NAME_FA":"ایسلند","NAME_FR":"Islande","NAME_EL":"Ισλανδία","NAME_HE":"איסלנד","NAME_HI":"आइसलैण्ड","NAME_HU":"Izland","NAME_ID":"Islandia","NAME_IT":"Islanda","NAME_JA":"アイスランド","NAME_KO":"아이슬란드","NAME_NL":"IJsland","NAME_PL":"Islandia","NAME_PT":"Islândia","NAME_RU":"Исландия","NAME_SV":"Island","NAME_TR":"İzlanda","NAME_UK":"Ісландія","NAME_UR":"آئس لینڈ","NAME_VI":"Iceland","NAME_ZH":"冰岛","NAME_ZHT":"冰島","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[22.1318359375,48.405322265624996],[21.45136718750001,48.55224609375],[20.490039062500017,48.526904296874996],[19.89863281250001,48.13134765625],[18.914160156250006,48.050830078124996],[18.724218750000006,47.787158203124996],[17.76191406250001,47.770166015624994],[17.147363281250023,48.00595703125],[16.434375000000017,47.367431640625],[16.453417968750017,47.006787109375],[16.093066406250017,46.86328125],[16.516210937500006,46.499902343749994],[17.310644531250006,45.996142578124996],[17.9638671875,45.770263671875],[18.905371093750006,45.93173828125],[19.53076171875,46.155175781249994],[20.241796875000006,46.10859375],[21.151953125000006,46.304345703124994],[22.290625000000006,47.727832031249996],[22.87666015625001,47.947265625],[22.1318359375,48.405322265624996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Hungary","SOV_A3":"HUN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Hungary","ADM0_A3":"HUN","GEOU_DIF":0,"GEOUNIT":"Hungary","GU_A3":"HUN","SU_DIF":0,"SUBUNIT":"Hungary","SU_A3":"HUN","BRK_DIFF":0,"NAME":"Hungary","NAME_LONG":"Hungary","BRK_A3":"HUN","BRK_NAME":"Hungary","BRK_GROUP":"","ABBREV":"Hun.","POSTAL":"HU","FORMAL_EN":"Republic of Hungary","FORMAL_FR":"","NAME_CIAWF":"Hungary","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Hungary","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":6,"MAPCOLOR9":1,"MAPCOLOR13":5,"POP_EST":9769949,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":163469,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"HU","ISO_A2":"HU","ISO_A2_EH":"HU","ISO_A3":"HUN","ISO_A3_EH":"HUN","ISO_N3":"348","ISO_N3_EH":"348","UN_A3":"348","WB_A2":"HU","WB_A3":"HUN","WOE_ID":23424844,"WOE_ID_EH":23424844,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"HUN","ADM0_DIFF":"","ADM0_TLC":"HUN","ADM0_A3_US":"HUN","ADM0_A3_FR":"HUN","ADM0_A3_RU":"HUN","ADM0_A3_ES":"HUN","ADM0_A3_CN":"HUN","ADM0_A3_TW":"HUN","ADM0_A3_IN":"HUN","ADM0_A3_NP":"HUN","ADM0_A3_PK":"HUN","ADM0_A3_DE":"HUN","ADM0_A3_GB":"HUN","ADM0_A3_BR":"HUN","ADM0_A3_IL":"HUN","ADM0_A3_PS":"HUN","ADM0_A3_SA":"HUN","ADM0_A3_EG":"HUN","ADM0_A3_MA":"HUN","ADM0_A3_PT":"HUN","ADM0_A3_AR":"HUN","ADM0_A3_JP":"HUN","ADM0_A3_KO":"HUN","ADM0_A3_VN":"HUN","ADM0_A3_TR":"HUN","ADM0_A3_ID":"HUN","ADM0_A3_PL":"HUN","ADM0_A3_GR":"HUN","ADM0_A3_IT":"HUN","ADM0_A3_NL":"HUN","ADM0_A3_SE":"HUN","ADM0_A3_BD":"HUN","ADM0_A3_UA":"HUN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":19.447867,"LABEL_Y":47.086841,"NE_ID":1159320841,"WIKIDATAID":"Q28","NAME_AR":"المجر","NAME_BN":"হাঙ্গেরি","NAME_DE":"Ungarn","NAME_EN":"Hungary","NAME_ES":"Hungría","NAME_FA":"مجارستان","NAME_FR":"Hongrie","NAME_EL":"Ουγγαρία","NAME_HE":"הונגריה","NAME_HI":"हंगरी","NAME_HU":"Magyarország","NAME_ID":"Hongaria","NAME_IT":"Ungheria","NAME_JA":"ハンガリー","NAME_KO":"헝가리","NAME_NL":"Hongarije","NAME_PL":"Węgry","NAME_PT":"Hungria","NAME_RU":"Венгрия","NAME_SV":"Ungern","NAME_TR":"Macaristan","NAME_UK":"Угорщина","NAME_UR":"ہنگری","NAME_VI":"Hungary","NAME_ZH":"匈牙利","NAME_ZHT":"匈牙利","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-83.15751953124999,14.993066406249994],[-83.36918945312499,15.239990234375],[-83.76044921875,15.220361328124994],[-84.26142578125,15.822607421874991],[-84.97373046874999,15.989892578124994],[-85.48369140624999,15.899511718749991],[-85.78398437499999,16.002832031249994],[-86.356640625,15.783203125],[-86.9072265625,15.762353515624994],[-87.6181640625,15.909863281249997],[-88.22832031249999,15.72900390625],[-88.97641601562499,15.142675781249991],[-89.22236328125,14.866064453124991],[-89.36259765624999,14.416015625],[-88.51254882812499,13.978955078124997],[-88.151025390625,13.987353515625003],[-87.71533203125,13.812695312499997],[-87.814208984375,13.399169921875],[-87.48911132812499,13.352929687499994],[-87.33725585937499,12.979248046875],[-87.05917968749999,12.991455078125],[-86.710693359375,13.313378906249994],[-86.733642578125,13.763476562500003],[-86.33173828125,13.770068359375003],[-86.15122070312499,13.994580078124997],[-85.78671874999999,13.844433593749997],[-85.17949218749999,14.343310546875003],[-84.98515624999999,14.75244140625],[-84.645947265625,14.661083984374997],[-83.86728515624999,14.794482421875003],[-83.15751953124999,14.993066406249994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Honduras","SOV_A3":"HND","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Honduras","ADM0_A3":"HND","GEOU_DIF":0,"GEOUNIT":"Honduras","GU_A3":"HND","SU_DIF":0,"SUBUNIT":"Honduras","SU_A3":"HND","BRK_DIFF":0,"NAME":"Honduras","NAME_LONG":"Honduras","BRK_A3":"HND","BRK_NAME":"Honduras","BRK_GROUP":"","ABBREV":"Hond.","POSTAL":"HN","FORMAL_EN":"Republic of Honduras","FORMAL_FR":"","NAME_CIAWF":"Honduras","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Honduras","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":5,"MAPCOLOR9":2,"MAPCOLOR13":5,"POP_EST":9746117,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":25095,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"HO","ISO_A2":"HN","ISO_A2_EH":"HN","ISO_A3":"HND","ISO_A3_EH":"HND","ISO_N3":"340","ISO_N3_EH":"340","UN_A3":"340","WB_A2":"HN","WB_A3":"HND","WOE_ID":23424841,"WOE_ID_EH":23424841,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"HND","ADM0_DIFF":"","ADM0_TLC":"HND","ADM0_A3_US":"HND","ADM0_A3_FR":"HND","ADM0_A3_RU":"HND","ADM0_A3_ES":"HND","ADM0_A3_CN":"HND","ADM0_A3_TW":"HND","ADM0_A3_IN":"HND","ADM0_A3_NP":"HND","ADM0_A3_PK":"HND","ADM0_A3_DE":"HND","ADM0_A3_GB":"HND","ADM0_A3_BR":"HND","ADM0_A3_IL":"HND","ADM0_A3_PS":"HND","ADM0_A3_SA":"HND","ADM0_A3_EG":"HND","ADM0_A3_MA":"HND","ADM0_A3_PT":"HND","ADM0_A3_AR":"HND","ADM0_A3_JP":"HND","ADM0_A3_KO":"HND","ADM0_A3_VN":"HND","ADM0_A3_TR":"HND","ADM0_A3_ID":"HND","ADM0_A3_PL":"HND","ADM0_A3_GR":"HND","ADM0_A3_IT":"HND","ADM0_A3_NL":"HND","ADM0_A3_SE":"HND","ADM0_A3_BD":"HND","ADM0_A3_UA":"HND","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":-86.887604,"LABEL_Y":14.794801,"NE_ID":1159320827,"WIKIDATAID":"Q783","NAME_AR":"هندوراس","NAME_BN":"হন্ডুরাস","NAME_DE":"Honduras","NAME_EN":"Honduras","NAME_ES":"Honduras","NAME_FA":"هندوراس","NAME_FR":"Honduras","NAME_EL":"Ονδούρα","NAME_HE":"הונדורס","NAME_HI":"हौण्डुरस","NAME_HU":"Honduras","NAME_ID":"Honduras","NAME_IT":"Honduras","NAME_JA":"ホンジュラス","NAME_KO":"온두라스","NAME_NL":"Honduras","NAME_PL":"Honduras","NAME_PT":"Honduras","NAME_RU":"Гондурас","NAME_SV":"Honduras","NAME_TR":"Honduras","NAME_UK":"Гондурас","NAME_UR":"ہونڈوراس","NAME_VI":"Honduras","NAME_ZH":"洪都拉斯","NAME_ZHT":"宏都拉斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.779248046875,19.718164062499994],[-72.63701171874999,19.90087890625],[-73.11777343749999,19.90380859375],[-73.052734375,19.610742187499994],[-72.70322265624999,19.441064453124994],[-72.81108398437499,19.071582031250003],[-72.34765625,18.674951171874994],[-72.78935546874999,18.434814453125],[-74.227734375,18.66269531249999],[-74.41904296874999,18.34619140625],[-73.8849609375,18.041894531249994],[-73.38515625,18.251171874999997],[-72.87666015625,18.151757812499994],[-72.05986328124999,18.228564453125003],[-71.768310546875,18.03916015624999],[-71.65703124999999,19.130761718749994],[-71.779248046875,19.718164062499994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Haiti","SOV_A3":"HTI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Haiti","ADM0_A3":"HTI","GEOU_DIF":0,"GEOUNIT":"Haiti","GU_A3":"HTI","SU_DIF":0,"SUBUNIT":"Haiti","SU_A3":"HTI","BRK_DIFF":0,"NAME":"Haiti","NAME_LONG":"Haiti","BRK_A3":"HTI","BRK_NAME":"Haiti","BRK_GROUP":"","ABBREV":"Haiti","POSTAL":"HT","FORMAL_EN":"Republic of Haiti","FORMAL_FR":"","NAME_CIAWF":"Haiti","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Haiti","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":7,"MAPCOLOR13":2,"POP_EST":11263077,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":14332,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"HA","ISO_A2":"HT","ISO_A2_EH":"HT","ISO_A3":"HTI","ISO_A3_EH":"HTI","ISO_N3":"332","ISO_N3_EH":"332","UN_A3":"332","WB_A2":"HT","WB_A3":"HTI","WOE_ID":23424839,"WOE_ID_EH":23424839,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"HTI","ADM0_DIFF":"","ADM0_TLC":"HTI","ADM0_A3_US":"HTI","ADM0_A3_FR":"HTI","ADM0_A3_RU":"HTI","ADM0_A3_ES":"HTI","ADM0_A3_CN":"HTI","ADM0_A3_TW":"HTI","ADM0_A3_IN":"HTI","ADM0_A3_NP":"HTI","ADM0_A3_PK":"HTI","ADM0_A3_DE":"HTI","ADM0_A3_GB":"HTI","ADM0_A3_BR":"HTI","ADM0_A3_IL":"HTI","ADM0_A3_PS":"HTI","ADM0_A3_SA":"HTI","ADM0_A3_EG":"HTI","ADM0_A3_MA":"HTI","ADM0_A3_PT":"HTI","ADM0_A3_AR":"HTI","ADM0_A3_JP":"HTI","ADM0_A3_KO":"HTI","ADM0_A3_VN":"HTI","ADM0_A3_TR":"HTI","ADM0_A3_ID":"HTI","ADM0_A3_PL":"HTI","ADM0_A3_GR":"HTI","ADM0_A3_IT":"HTI","ADM0_A3_NL":"HTI","ADM0_A3_SE":"HTI","ADM0_A3_BD":"HTI","ADM0_A3_UA":"HTI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-72.224051,"LABEL_Y":19.263784,"NE_ID":1159320839,"WIKIDATAID":"Q790","NAME_AR":"هايتي","NAME_BN":"হাইতি","NAME_DE":"Haiti","NAME_EN":"Haiti","NAME_ES":"Haití","NAME_FA":"هائیتی","NAME_FR":"Haïti","NAME_EL":"Αϊτή","NAME_HE":"האיטי","NAME_HI":"हैती","NAME_HU":"Haiti","NAME_ID":"Haiti","NAME_IT":"Haiti","NAME_JA":"ハイチ","NAME_KO":"아이티","NAME_NL":"Haïti","NAME_PL":"Haiti","NAME_PT":"Haiti","NAME_RU":"Республика Гаити","NAME_SV":"Haiti","NAME_TR":"Haiti","NAME_UK":"Гаїті","NAME_UR":"ہیٹی","NAME_VI":"Haiti","NAME_ZH":"海地","NAME_ZHT":"海地","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-60.742138671875,5.202050781249994],[-60.142041015625,5.238818359374989],[-59.990673828125,5.0828613281249915],[-60.11113281249999,4.511181640624997],[-59.83334960937499,4.4759277343749915],[-59.55112304687499,3.933544921874997],[-59.854394531249994,3.5874999999999915],[-59.9943359375,2.6899902343749886],[-59.75522460937499,2.274121093749997],[-59.75620117187499,1.900634765625],[-59.231201171875,1.3760253906249886],[-58.8625,1.20361328125],[-58.511865234374994,1.28466796875],[-58.34067382812499,1.5875488281249943],[-57.59443359375,1.7041015625],[-57.118896484375,2.0139648437499886],[-56.83671874999999,1.8812499999999943],[-56.482812499999994,1.942138671875],[-56.704345703125,2.0364746093749915],[-57.20981445312499,2.8828125],[-57.303662109375,3.3770996093749943],[-57.54960937499999,3.3528320312499886],[-57.832666015624994,3.675976562499997],[-58.05449218749999,4.171923828124989],[-57.711083984374994,4.9910644531249915],[-57.331005859375,5.020166015624994],[-57.194775390625,5.5484374999999915],[-57.19023437499999,6.097314453124994],[-57.982568359374994,6.785888671875],[-58.48056640624999,7.038134765624989],[-58.626611328124994,7.5458984375],[-59.20024414062499,8.074609374999994],[-60.017529296875,8.54931640625],[-59.83164062499999,8.305957031249989],[-60.032421875,8.053564453124991],[-60.513623046875,7.813183593749997],[-60.71923828125,7.498681640624994],[-60.39501953125,6.945361328124989],[-61.14560546874999,6.694531249999997],[-61.12871093749999,6.214306640624997],[-61.37680664062499,5.906982421875],[-60.742138671875,5.202050781249994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Guyana","SOV_A3":"GUY","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Guyana","ADM0_A3":"GUY","GEOU_DIF":0,"GEOUNIT":"Guyana","GU_A3":"GUY","SU_DIF":0,"SUBUNIT":"Guyana","SU_A3":"GUY","BRK_DIFF":0,"NAME":"Guyana","NAME_LONG":"Guyana","BRK_A3":"GUY","BRK_NAME":"Guyana","BRK_GROUP":"","ABBREV":"Guy.","POSTAL":"GY","FORMAL_EN":"Co-operative Republic of Guyana","FORMAL_FR":"","NAME_CIAWF":"Guyana","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Guyana","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":8,"POP_EST":782766,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":5173,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"GY","ISO_A2":"GY","ISO_A2_EH":"GY","ISO_A3":"GUY","ISO_A3_EH":"GUY","ISO_N3":"328","ISO_N3_EH":"328","UN_A3":"328","WB_A2":"GY","WB_A3":"GUY","WOE_ID":23424836,"WOE_ID_EH":23424836,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GUY","ADM0_DIFF":"","ADM0_TLC":"GUY","ADM0_A3_US":"GUY","ADM0_A3_FR":"GUY","ADM0_A3_RU":"GUY","ADM0_A3_ES":"GUY","ADM0_A3_CN":"GUY","ADM0_A3_TW":"GUY","ADM0_A3_IN":"GUY","ADM0_A3_NP":"GUY","ADM0_A3_PK":"GUY","ADM0_A3_DE":"GUY","ADM0_A3_GB":"GUY","ADM0_A3_BR":"GUY","ADM0_A3_IL":"GUY","ADM0_A3_PS":"GUY","ADM0_A3_SA":"GUY","ADM0_A3_EG":"GUY","ADM0_A3_MA":"GUY","ADM0_A3_PT":"GUY","ADM0_A3_AR":"GUY","ADM0_A3_JP":"GUY","ADM0_A3_KO":"GUY","ADM0_A3_VN":"GUY","ADM0_A3_TR":"GUY","ADM0_A3_ID":"GUY","ADM0_A3_PL":"GUY","ADM0_A3_GR":"GUY","ADM0_A3_IT":"GUY","ADM0_A3_NL":"GUY","ADM0_A3_SE":"GUY","ADM0_A3_BD":"GUY","ADM0_A3_UA":"GUY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-58.942643,"LABEL_Y":5.124317,"NE_ID":1159320817,"WIKIDATAID":"Q734","NAME_AR":"غيانا","NAME_BN":"গায়ানা","NAME_DE":"Guyana","NAME_EN":"Guyana","NAME_ES":"Guyana","NAME_FA":"گویان","NAME_FR":"Guyana","NAME_EL":"Γουιάνα","NAME_HE":"גיאנה","NAME_HI":"गयाना","NAME_HU":"Guyana","NAME_ID":"Guyana","NAME_IT":"Guyana","NAME_JA":"ガイアナ","NAME_KO":"가이아나","NAME_NL":"Guyana","NAME_PL":"Gujana","NAME_PT":"Guiana","NAME_RU":"Гайана","NAME_SV":"Guyana","NAME_TR":"Guyana","NAME_UK":"Гаяна","NAME_UR":"گیانا","NAME_VI":"Guyana","NAME_ZH":"圭亚那","NAME_ZHT":"圭亞那","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-16.711816406249994,12.354833984374991],[-16.138427734375,11.917285156249989],[-15.501904296874983,11.723779296874994],[-15.393115234374989,11.217236328124997],[-15.043017578124989,10.940136718749997],[-14.682958984374977,11.508496093749997],[-13.732763671874977,11.736035156249997],[-13.729248046875,12.673925781249991],[-15.196093749999989,12.679931640625],[-15.574804687499977,12.490380859374994],[-16.711816406249994,12.354833984374991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Guinea-Bissau","SOV_A3":"GNB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Guinea-Bissau","ADM0_A3":"GNB","GEOU_DIF":0,"GEOUNIT":"Guinea-Bissau","GU_A3":"GNB","SU_DIF":0,"SUBUNIT":"Guinea-Bissau","SU_A3":"GNB","BRK_DIFF":0,"NAME":"Guinea-Bissau","NAME_LONG":"Guinea-Bissau","BRK_A3":"GNB","BRK_NAME":"Guinea-Bissau","BRK_GROUP":"","ABBREV":"GnB.","POSTAL":"GW","FORMAL_EN":"Republic of Guinea-Bissau","FORMAL_FR":"","NAME_CIAWF":"Guinea-Bissau","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Guinea-Bissau","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":5,"MAPCOLOR9":3,"MAPCOLOR13":4,"POP_EST":1920922,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":1339,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"PU","ISO_A2":"GW","ISO_A2_EH":"GW","ISO_A3":"GNB","ISO_A3_EH":"GNB","ISO_N3":"624","ISO_N3_EH":"624","UN_A3":"624","WB_A2":"GW","WB_A3":"GNB","WOE_ID":23424929,"WOE_ID_EH":23424929,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GNB","ADM0_DIFF":"","ADM0_TLC":"GNB","ADM0_A3_US":"GNB","ADM0_A3_FR":"GNB","ADM0_A3_RU":"GNB","ADM0_A3_ES":"GNB","ADM0_A3_CN":"GNB","ADM0_A3_TW":"GNB","ADM0_A3_IN":"GNB","ADM0_A3_NP":"GNB","ADM0_A3_PK":"GNB","ADM0_A3_DE":"GNB","ADM0_A3_GB":"GNB","ADM0_A3_BR":"GNB","ADM0_A3_IL":"GNB","ADM0_A3_PS":"GNB","ADM0_A3_SA":"GNB","ADM0_A3_EG":"GNB","ADM0_A3_MA":"GNB","ADM0_A3_PT":"GNB","ADM0_A3_AR":"GNB","ADM0_A3_JP":"GNB","ADM0_A3_KO":"GNB","ADM0_A3_VN":"GNB","ADM0_A3_TR":"GNB","ADM0_A3_ID":"GNB","ADM0_A3_PL":"GNB","ADM0_A3_GR":"GNB","ADM0_A3_IT":"GNB","ADM0_A3_NL":"GNB","ADM0_A3_SE":"GNB","ADM0_A3_BD":"GNB","ADM0_A3_UA":"GNB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":13,"LONG_LEN":13,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-14.52413,"LABEL_Y":12.163712,"NE_ID":1159320799,"WIKIDATAID":"Q1007","NAME_AR":"غينيا بيساو","NAME_BN":"গিনি-বিসাউ","NAME_DE":"Guinea-Bissau","NAME_EN":"Guinea-Bissau","NAME_ES":"Guinea-Bisáu","NAME_FA":"گینه بیسائو","NAME_FR":"Guinée-Bissau","NAME_EL":"Γουινέα-Μπισσάου","NAME_HE":"גינאה ביסאו","NAME_HI":"गिनी-बिसाऊ","NAME_HU":"Bissau-Guinea","NAME_ID":"Guinea-Bissau","NAME_IT":"Guinea-Bissau","NAME_JA":"ギニアビサウ","NAME_KO":"기니비사우","NAME_NL":"Guinee-Bissau","NAME_PL":"Gwinea Bissau","NAME_PT":"Guiné-Bissau","NAME_RU":"Гвинея-Бисау","NAME_SV":"Guinea-Bissau","NAME_TR":"Gine-Bissau","NAME_UK":"Гвінея-Бісау","NAME_UR":"گنی بساؤ","NAME_VI":"Guiné-Bissau","NAME_ZH":"几内亚比绍","NAME_ZHT":"幾內亞比索","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-10.283203125,8.485156249999989],[-9.768261718749983,8.534570312499994],[-9.518261718749983,8.346093749999994],[-9.368945312499989,7.639550781249994],[-9.459765624999989,7.442529296874994],[-9.117578124999994,7.2159179687499915],[-8.8896484375,7.2626953125],[-8.708300781249989,7.658886718749997],[-8.486425781249977,7.558496093749994],[-8.231884765624983,7.5567382812499915],[-7.823583984374977,8.467675781249994],[-7.950976562499989,8.786816406249997],[-7.896191406249983,9.415869140624991],[-8.136962890625,9.495703124999991],[-8.136621093749994,10.022070312499991],[-7.990624999999994,10.162499999999994],[-8.231494140624989,10.43798828125],[-8.407470703125,11.386279296874989],[-8.822021484375,11.673242187499994],[-9.043066406249977,12.40234375],[-9.820703124999994,12.04248046875],[-10.274853515624983,12.212646484375],[-10.677343749999977,11.8994140625],[-10.933203124999977,12.205175781249991],[-11.30517578125,12.015429687499989],[-11.389404296875,12.404394531249991],[-12.291210937499983,12.328027343749994],[-13.082910156249994,12.633544921875],[-13.729248046875,12.673925781249991],[-13.732763671874977,11.736035156249997],[-14.682958984374977,11.508496093749997],[-15.043017578124989,10.940136718749997],[-14.775927734374989,10.931640625],[-14.426904296874994,10.248339843749989],[-13.700488281249989,9.851269531249997],[-13.292675781249983,9.049218749999994],[-12.755859375,9.373583984374989],[-12.50146484375,9.862158203124991],[-11.911083984374983,9.993017578124991],[-11.205664062499977,9.977734374999997],[-10.690527343749977,9.314257812499989],[-10.500537109374989,8.687548828124989],[-10.283203125,8.485156249999989]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Guinea","SOV_A3":"GIN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Guinea","ADM0_A3":"GIN","GEOU_DIF":0,"GEOUNIT":"Guinea","GU_A3":"GIN","SU_DIF":0,"SUBUNIT":"Guinea","SU_A3":"GIN","BRK_DIFF":0,"NAME":"Guinea","NAME_LONG":"Guinea","BRK_A3":"GIN","BRK_NAME":"Guinea","BRK_GROUP":"","ABBREV":"Gin.","POSTAL":"GN","FORMAL_EN":"Republic of Guinea","FORMAL_FR":"","NAME_CIAWF":"Guinea","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Guinea","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":7,"MAPCOLOR13":2,"POP_EST":12771246,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":12296,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"GV","ISO_A2":"GN","ISO_A2_EH":"GN","ISO_A3":"GIN","ISO_A3_EH":"GIN","ISO_N3":"324","ISO_N3_EH":"324","UN_A3":"324","WB_A2":"GN","WB_A3":"GIN","WOE_ID":23424835,"WOE_ID_EH":23424835,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GIN","ADM0_DIFF":"","ADM0_TLC":"GIN","ADM0_A3_US":"GIN","ADM0_A3_FR":"GIN","ADM0_A3_RU":"GIN","ADM0_A3_ES":"GIN","ADM0_A3_CN":"GIN","ADM0_A3_TW":"GIN","ADM0_A3_IN":"GIN","ADM0_A3_NP":"GIN","ADM0_A3_PK":"GIN","ADM0_A3_DE":"GIN","ADM0_A3_GB":"GIN","ADM0_A3_BR":"GIN","ADM0_A3_IL":"GIN","ADM0_A3_PS":"GIN","ADM0_A3_SA":"GIN","ADM0_A3_EG":"GIN","ADM0_A3_MA":"GIN","ADM0_A3_PT":"GIN","ADM0_A3_AR":"GIN","ADM0_A3_JP":"GIN","ADM0_A3_KO":"GIN","ADM0_A3_VN":"GIN","ADM0_A3_TR":"GIN","ADM0_A3_ID":"GIN","ADM0_A3_PL":"GIN","ADM0_A3_GR":"GIN","ADM0_A3_IT":"GIN","ADM0_A3_NL":"GIN","ADM0_A3_SE":"GIN","ADM0_A3_BD":"GIN","ADM0_A3_UA":"GIN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-10.016402,"LABEL_Y":10.618516,"NE_ID":1159320795,"WIKIDATAID":"Q1006","NAME_AR":"غينيا","NAME_BN":"গিনি","NAME_DE":"Guinea","NAME_EN":"Guinea","NAME_ES":"Guinea","NAME_FA":"گینه","NAME_FR":"Guinée","NAME_EL":"Γουινέα","NAME_HE":"גינאה","NAME_HI":"गिनी","NAME_HU":"Guinea","NAME_ID":"Guinea","NAME_IT":"Guinea","NAME_JA":"ギニア","NAME_KO":"기니","NAME_NL":"Guinee","NAME_PL":"Gwinea","NAME_PT":"Guiné","NAME_RU":"Гвинея","NAME_SV":"Guinea","NAME_TR":"Gine","NAME_UK":"Гвінея","NAME_UR":"جمہوریہ گنی","NAME_VI":"Guinée","NAME_ZH":"几内亚","NAME_ZHT":"幾內亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-92.23515624999999,14.54541015625],[-91.819091796875,14.228222656249997],[-91.14604492187499,13.925585937500003],[-90.60693359375,13.929003906250003],[-90.09521484375,13.736523437499997],[-89.872705078125,14.045605468749997],[-89.36259765624999,14.416015625],[-89.22236328125,14.866064453124991],[-88.97641601562499,15.142675781249991],[-88.22832031249999,15.72900390625],[-88.89404296875,15.890625],[-89.2375,15.894433593749994],[-89.16147460937499,17.814843749999994],[-90.98916015625,17.81640625],[-90.99296874999999,17.25244140625],[-91.409619140625,17.255859375],[-90.4169921875,16.391015624999994],[-90.44716796875,16.072705078124997],[-91.736572265625,16.07016601562499],[-92.187158203125,15.320898437499991],[-92.07480468749999,15.07421875],[-92.23515624999999,14.54541015625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Guatemala","SOV_A3":"GTM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Guatemala","ADM0_A3":"GTM","GEOU_DIF":0,"GEOUNIT":"Guatemala","GU_A3":"GTM","SU_DIF":0,"SUBUNIT":"Guatemala","SU_A3":"GTM","BRK_DIFF":0,"NAME":"Guatemala","NAME_LONG":"Guatemala","BRK_A3":"GTM","BRK_NAME":"Guatemala","BRK_GROUP":"","ABBREV":"Guat.","POSTAL":"GT","FORMAL_EN":"Republic of Guatemala","FORMAL_FR":"","NAME_CIAWF":"Guatemala","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Guatemala","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":3,"MAPCOLOR9":3,"MAPCOLOR13":6,"POP_EST":16604026,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":76710,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"GT","ISO_A2":"GT","ISO_A2_EH":"GT","ISO_A3":"GTM","ISO_A3_EH":"GTM","ISO_N3":"320","ISO_N3_EH":"320","UN_A3":"320","WB_A2":"GT","WB_A3":"GTM","WOE_ID":23424834,"WOE_ID_EH":23424834,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GTM","ADM0_DIFF":"","ADM0_TLC":"GTM","ADM0_A3_US":"GTM","ADM0_A3_FR":"GTM","ADM0_A3_RU":"GTM","ADM0_A3_ES":"GTM","ADM0_A3_CN":"GTM","ADM0_A3_TW":"GTM","ADM0_A3_IN":"GTM","ADM0_A3_NP":"GTM","ADM0_A3_PK":"GTM","ADM0_A3_DE":"GTM","ADM0_A3_GB":"GTM","ADM0_A3_BR":"GTM","ADM0_A3_IL":"GTM","ADM0_A3_PS":"GTM","ADM0_A3_SA":"GTM","ADM0_A3_EG":"GTM","ADM0_A3_MA":"GTM","ADM0_A3_PT":"GTM","ADM0_A3_AR":"GTM","ADM0_A3_JP":"GTM","ADM0_A3_KO":"GTM","ADM0_A3_VN":"GTM","ADM0_A3_TR":"GTM","ADM0_A3_ID":"GTM","ADM0_A3_PL":"GTM","ADM0_A3_GR":"GTM","ADM0_A3_IT":"GTM","ADM0_A3_NL":"GTM","ADM0_A3_SE":"GTM","ADM0_A3_BD":"GTM","ADM0_A3_UA":"GTM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":5,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-90.497134,"LABEL_Y":14.982133,"NE_ID":1159320815,"WIKIDATAID":"Q774","NAME_AR":"غواتيمالا","NAME_BN":"গুয়াতেমালা","NAME_DE":"Guatemala","NAME_EN":"Guatemala","NAME_ES":"Guatemala","NAME_FA":"گواتمالا","NAME_FR":"Guatemala","NAME_EL":"Γουατεμάλα","NAME_HE":"גואטמלה","NAME_HI":"ग्वाटेमाला","NAME_HU":"Guatemala","NAME_ID":"Guatemala","NAME_IT":"Guatemala","NAME_JA":"グアテマラ","NAME_KO":"과테말라","NAME_NL":"Guatemala","NAME_PL":"Gwatemala","NAME_PT":"Guatemala","NAME_RU":"Гватемала","NAME_SV":"Guatemala","NAME_TR":"Guatemala","NAME_UK":"Гватемала","NAME_UR":"گواتیمالا","NAME_VI":"Guatemala","NAME_ZH":"危地马拉","NAME_ZHT":"瓜地馬拉","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Grenada","SOV_A3":"GRD","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Grenada","ADM0_A3":"GRD","GEOU_DIF":0,"GEOUNIT":"Grenada","GU_A3":"GRD","SU_DIF":0,"SUBUNIT":"Grenada","SU_A3":"GRD","BRK_DIFF":0,"NAME":"Grenada","NAME_LONG":"Grenada","BRK_A3":"GRD","BRK_NAME":"Grenada","BRK_GROUP":"","ABBREV":"Gren.","POSTAL":"GD","FORMAL_EN":"Grenada","FORMAL_FR":"","NAME_CIAWF":"Grenada","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Grenada","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":4,"MAPCOLOR9":3,"MAPCOLOR13":6,"POP_EST":112003,"POP_RANK":9,"POP_YEAR":2019,"GDP_MD":1210,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"GJ","ISO_A2":"GD","ISO_A2_EH":"GD","ISO_A3":"GRD","ISO_A3_EH":"GRD","ISO_N3":"308","ISO_N3_EH":"308","UN_A3":"308","WB_A2":"GD","WB_A3":"GRD","WOE_ID":23424826,"WOE_ID_EH":23424826,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GRD","ADM0_DIFF":"","ADM0_TLC":"GRD","ADM0_A3_US":"GRD","ADM0_A3_FR":"GRD","ADM0_A3_RU":"GRD","ADM0_A3_ES":"GRD","ADM0_A3_CN":"GRD","ADM0_A3_TW":"GRD","ADM0_A3_IN":"GRD","ADM0_A3_NP":"GRD","ADM0_A3_PK":"GRD","ADM0_A3_DE":"GRD","ADM0_A3_GB":"GRD","ADM0_A3_BR":"GRD","ADM0_A3_IL":"GRD","ADM0_A3_PS":"GRD","ADM0_A3_SA":"GRD","ADM0_A3_EG":"GRD","ADM0_A3_MA":"GRD","ADM0_A3_PT":"GRD","ADM0_A3_AR":"GRD","ADM0_A3_JP":"GRD","ADM0_A3_KO":"GRD","ADM0_A3_VN":"GRD","ADM0_A3_TR":"GRD","ADM0_A3_ID":"GRD","ADM0_A3_PL":"GRD","ADM0_A3_GR":"GRD","ADM0_A3_IT":"GRD","ADM0_A3_NL":"GRD","ADM0_A3_SE":"GRD","ADM0_A3_BD":"GRD","ADM0_A3_UA":"GRD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-61.680461,"LABEL_Y":12.113156,"NE_ID":1159320813,"WIKIDATAID":"Q769","NAME_AR":"غرينادا","NAME_BN":"গ্রেনাডা","NAME_DE":"Grenada","NAME_EN":"Grenada","NAME_ES":"Granada","NAME_FA":"گرنادا","NAME_FR":"Grenade","NAME_EL":"Γρενάδα","NAME_HE":"גרנדה","NAME_HI":"ग्रेनाडा","NAME_HU":"Grenada","NAME_ID":"Grenada","NAME_IT":"Grenada","NAME_JA":"グレナダ","NAME_KO":"그레나다","NAME_NL":"Grenada","NAME_PL":"Grenada","NAME_PT":"Granada","NAME_RU":"Гренада","NAME_SV":"Grenada","NAME_TR":"Grenada","NAME_UK":"Гренада","NAME_UR":"گریناڈا","NAME_VI":"Grenada","NAME_ZH":"格林纳达","NAME_ZHT":"格瑞那達","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[23.415429687500023,38.958642578124994],[23.25214843750001,38.801220703125],[23.7587890625,38.401220703125],[24.099023437500023,38.67099609375],[23.415429687500023,38.958642578124994]]],[[[23.85224609375001,35.535449218749996],[23.561621093750006,35.295166015625],[24.463671875000017,35.1603515625],[24.7998046875,34.934472656249994],[25.745019531250023,35.142724609374994],[25.475683593750006,35.306201171874996],[24.721289062500006,35.4248046875],[24.312890625000023,35.363818359374996],[23.85224609375001,35.535449218749996]]],[[[26.320898437500006,41.716552734375],[26.155175781250023,41.434863281249996],[25.25117187500001,41.243554687499994],[24.056054687500023,41.527246093749994],[23.635156250000023,41.386767578124996],[22.916015625,41.336279296875],[22.493554687500023,41.118505859375],[21.929492187500017,41.107421875],[21.575781250000006,40.868945312499996],[20.964257812500023,40.849902343749996],[21.031054687500017,40.658642578125],[20.65742187500001,40.1173828125],[20.001269531250017,39.709423828125],[20.30078125,39.327099609375],[20.779687500000023,39.008544921875],[21.113183593750023,38.384667968749994],[21.472558593750023,38.32138671875],[22.421679687500017,38.438525390624996],[22.799609375000017,37.981201171875],[21.82470703125,38.328125],[21.403710937500023,38.196679687499994],[21.14501953125,37.919287109375],[21.5712890625,37.541015625],[21.582910156250023,37.080957031249994],[22.080468750000023,37.028955078124994],[22.6083984375,36.779736328125],[23.073535156250017,36.774951171874996],[22.765039062500023,37.393310546875],[23.161523437500023,37.333837890625],[23.193652343750017,37.959033203124996],[23.580468750000023,38.010546874999996],[23.96699218750001,38.275],[23.2529296875,38.66123046875],[22.96552734375001,39.030908203124994],[22.919042968750006,39.62890625],[22.592187500000023,40.036914062499996],[22.629492187500006,40.495556640625],[23.31201171875,40.216455078124994],[23.66455078125,40.223828125],[23.87890625,40.544384765625],[24.3837890625,40.912744140624994],[25.1044921875,40.9947265625],[26.038964843750023,40.7267578125],[26.624902343750023,41.401757812499994],[26.320898437500006,41.716552734375]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":3,"SOVEREIGNT":"Greece","SOV_A3":"GRC","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Greece","ADM0_A3":"GRC","GEOU_DIF":0,"GEOUNIT":"Greece","GU_A3":"GRC","SU_DIF":0,"SUBUNIT":"Greece","SU_A3":"GRC","BRK_DIFF":0,"NAME":"Greece","NAME_LONG":"Greece","BRK_A3":"GRC","BRK_NAME":"Greece","BRK_GROUP":"","ABBREV":"Greece","POSTAL":"GR","FORMAL_EN":"Hellenic Republic","FORMAL_FR":"","NAME_CIAWF":"Greece","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Greece","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":9,"POP_EST":10716322,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":209852,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"GR","ISO_A2":"GR","ISO_A2_EH":"GR","ISO_A3":"GRC","ISO_A3_EH":"GRC","ISO_N3":"300","ISO_N3_EH":"300","UN_A3":"300","WB_A2":"GR","WB_A3":"GRC","WOE_ID":23424833,"WOE_ID_EH":23424833,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GRC","ADM0_DIFF":"","ADM0_TLC":"GRC","ADM0_A3_US":"GRC","ADM0_A3_FR":"GRC","ADM0_A3_RU":"GRC","ADM0_A3_ES":"GRC","ADM0_A3_CN":"GRC","ADM0_A3_TW":"GRC","ADM0_A3_IN":"GRC","ADM0_A3_NP":"GRC","ADM0_A3_PK":"GRC","ADM0_A3_DE":"GRC","ADM0_A3_GB":"GRC","ADM0_A3_BR":"GRC","ADM0_A3_IL":"GRC","ADM0_A3_PS":"GRC","ADM0_A3_SA":"GRC","ADM0_A3_EG":"GRC","ADM0_A3_MA":"GRC","ADM0_A3_PT":"GRC","ADM0_A3_AR":"GRC","ADM0_A3_JP":"GRC","ADM0_A3_KO":"GRC","ADM0_A3_VN":"GRC","ADM0_A3_TR":"GRC","ADM0_A3_ID":"GRC","ADM0_A3_PL":"GRC","ADM0_A3_GR":"GRC","ADM0_A3_IT":"GRC","ADM0_A3_NL":"GRC","ADM0_A3_SE":"GRC","ADM0_A3_BD":"GRC","ADM0_A3_UA":"GRC","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":8,"LABEL_X":21.72568,"LABEL_Y":39.492763,"NE_ID":1159320811,"WIKIDATAID":"Q41","NAME_AR":"اليونان","NAME_BN":"গ্রিস","NAME_DE":"Griechenland","NAME_EN":"Greece","NAME_ES":"Grecia","NAME_FA":"یونان","NAME_FR":"Grèce","NAME_EL":"Ελλάδα","NAME_HE":"יוון","NAME_HI":"यूनान","NAME_HU":"Görögország","NAME_ID":"Yunani","NAME_IT":"Grecia","NAME_JA":"ギリシャ","NAME_KO":"그리스","NAME_NL":"Griekenland","NAME_PL":"Grecja","NAME_PT":"Grécia","NAME_RU":"Греция","NAME_SV":"Grekland","NAME_TR":"Yunanistan","NAME_UK":"Греція","NAME_UR":"یونان","NAME_VI":"Hy Lạp","NAME_ZH":"希腊","NAME_ZHT":"希臘","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-0.068603515625,11.115624999999994],[-0.701416015625,10.988964843749997],[-2.8299316406249773,10.998388671874991],[-2.9148925781249773,10.592333984374989],[-2.78662109375,10.401904296874989],[-2.6958496093749886,9.481347656249994],[-2.7466796874999773,9.109619140625],[-2.505859375,8.208740234375],[-2.789746093749983,7.931933593749989],[-2.985791015624983,7.204882812499989],[-3.235791015624983,6.8072265624999915],[-3.2005859374999943,6.3482421874999915],[-2.7952148437499886,5.184521484374997],[-3.0191406249999773,5.130810546874997],[-3.0867187499999886,5.128320312499994],[-3.114013671875,5.088671874999989],[-2.0018554687499943,4.762451171875],[-1.6384765624999886,4.980859374999994],[-0.7977050781249773,5.226708984374994],[0.25966796875002274,5.75732421875],[0.94970703125,5.810253906249997],[1.1872070312500114,6.089404296874989],[0.7369140625000057,6.452587890624997],[0.5255859375000114,6.8509277343749915],[0.634765625,7.353662109374994],[0.5835937500000057,8.145800781249989],[0.6880859375000057,8.304248046874989],[0.41533203125001705,8.652734374999994],[0.5290039062500114,9.358300781249994],[0.26191406250001137,9.49560546875],[0.36269531250002274,10.236474609374994],[-0.05771484374997726,10.630615234375],[-0.068603515625,11.115624999999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Ghana","SOV_A3":"GHA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Ghana","ADM0_A3":"GHA","GEOU_DIF":0,"GEOUNIT":"Ghana","GU_A3":"GHA","SU_DIF":0,"SUBUNIT":"Ghana","SU_A3":"GHA","BRK_DIFF":0,"NAME":"Ghana","NAME_LONG":"Ghana","BRK_A3":"GHA","BRK_NAME":"Ghana","BRK_GROUP":"","ABBREV":"Ghana","POSTAL":"GH","FORMAL_EN":"Republic of Ghana","FORMAL_FR":"","NAME_CIAWF":"Ghana","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Ghana","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":3,"MAPCOLOR9":1,"MAPCOLOR13":4,"POP_EST":30417856,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":66983,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"GH","ISO_A2":"GH","ISO_A2_EH":"GH","ISO_A3":"GHA","ISO_A3_EH":"GHA","ISO_N3":"288","ISO_N3_EH":"288","UN_A3":"288","WB_A2":"GH","WB_A3":"GHA","WOE_ID":23424824,"WOE_ID_EH":23424824,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GHA","ADM0_DIFF":"","ADM0_TLC":"GHA","ADM0_A3_US":"GHA","ADM0_A3_FR":"GHA","ADM0_A3_RU":"GHA","ADM0_A3_ES":"GHA","ADM0_A3_CN":"GHA","ADM0_A3_TW":"GHA","ADM0_A3_IN":"GHA","ADM0_A3_NP":"GHA","ADM0_A3_PK":"GHA","ADM0_A3_DE":"GHA","ADM0_A3_GB":"GHA","ADM0_A3_BR":"GHA","ADM0_A3_IL":"GHA","ADM0_A3_PS":"GHA","ADM0_A3_SA":"GHA","ADM0_A3_EG":"GHA","ADM0_A3_MA":"GHA","ADM0_A3_PT":"GHA","ADM0_A3_AR":"GHA","ADM0_A3_JP":"GHA","ADM0_A3_KO":"GHA","ADM0_A3_VN":"GHA","ADM0_A3_TR":"GHA","ADM0_A3_ID":"GHA","ADM0_A3_PL":"GHA","ADM0_A3_GR":"GHA","ADM0_A3_IT":"GHA","ADM0_A3_NL":"GHA","ADM0_A3_SE":"GHA","ADM0_A3_BD":"GHA","ADM0_A3_UA":"GHA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":8,"LABEL_X":-1.036941,"LABEL_Y":7.717639,"NE_ID":1159320793,"WIKIDATAID":"Q117","NAME_AR":"غانا","NAME_BN":"ঘানা","NAME_DE":"Ghana","NAME_EN":"Ghana","NAME_ES":"Ghana","NAME_FA":"غنا","NAME_FR":"Ghana","NAME_EL":"Γκάνα","NAME_HE":"גאנה","NAME_HI":"घाना","NAME_HU":"Ghána","NAME_ID":"Ghana","NAME_IT":"Ghana","NAME_JA":"ガーナ","NAME_KO":"가나","NAME_NL":"Ghana","NAME_PL":"Ghana","NAME_PT":"Gana","NAME_RU":"Гана","NAME_SV":"Ghana","NAME_TR":"Gana","NAME_UK":"Гана","NAME_UR":"گھانا","NAME_VI":"Ghana","NAME_ZH":"加纳","NAME_ZHT":"迦納","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[9.524023437500006,47.524218749999996],[10.312792968750017,47.313427734375],[10.430371093750011,47.541064453124996],[11.297949218750006,47.42490234375],[11.716796875,47.58349609375],[12.685839843750017,47.669335937499994],[12.814257812500017,48.16083984375],[13.409375000000011,48.394140625],[13.814746093750017,48.766943359375],[12.632031250000011,49.461230468749996],[12.27734375,50.181445312499996],[12.45263671875,50.3498046875],[14.369042968750023,50.898730468749996],[14.809375000000017,50.858984375],[15.0166015625,51.252734374999996],[14.601660156250006,51.832373046875],[14.752539062500006,52.081835937499996],[14.619433593750017,52.528515625],[14.128613281250011,52.878222656249996],[14.41455078125,53.283496093749996],[14.258886718750006,53.729638671875],[13.865527343750017,53.853369140625],[13.028613281250017,54.41103515625],[12.575390625000011,54.4673828125],[12.111328125,54.168310546875],[11.399609375000011,53.944628906249996],[10.360449218750006,54.438330078125],[9.73974609375,54.825537109375],[8.670312500000023,54.90341796875],[8.957226562500011,54.538330078125],[8.897753906250017,53.835693359375],[8.538476562500023,53.556884765625],[8.00927734375,53.690722656249996],[7.285253906250006,53.68134765625],[7.197265625,53.282275390624996],[7.03515625,52.380224609375],[6.741796875000006,51.910888671875],[5.948535156250017,51.76240234375],[6.193261718750023,51.488916015624994],[5.894726562500011,50.984228515625],[5.993945312500017,50.750439453125],[6.364453125000011,50.316162109375],[6.116503906250017,50.120996093749994],[6.4873046875,49.798486328124994],[6.344335937500006,49.452734375],[6.735449218750006,49.160595703125],[7.450585937500023,49.152197265625],[8.134863281250006,48.973583984375],[7.584179687500011,48.064306640625],[7.615625000000023,47.592724609375],[8.617871093750011,47.76611328125],[9.524023437500006,47.524218749999996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Germany","SOV_A3":"DEU","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Germany","ADM0_A3":"DEU","GEOU_DIF":0,"GEOUNIT":"Germany","GU_A3":"DEU","SU_DIF":0,"SUBUNIT":"Germany","SU_A3":"DEU","BRK_DIFF":0,"NAME":"Germany","NAME_LONG":"Germany","BRK_A3":"DEU","BRK_NAME":"Germany","BRK_GROUP":"","ABBREV":"Ger.","POSTAL":"D","FORMAL_EN":"Federal Republic of Germany","FORMAL_FR":"","NAME_CIAWF":"Germany","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Germany","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":5,"MAPCOLOR9":5,"MAPCOLOR13":1,"POP_EST":83132799,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":3861123,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"GM","ISO_A2":"DE","ISO_A2_EH":"DE","ISO_A3":"DEU","ISO_A3_EH":"DEU","ISO_N3":"276","ISO_N3_EH":"276","UN_A3":"276","WB_A2":"DE","WB_A3":"DEU","WOE_ID":23424829,"WOE_ID_EH":23424829,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"DEU","ADM0_DIFF":"","ADM0_TLC":"DEU","ADM0_A3_US":"DEU","ADM0_A3_FR":"DEU","ADM0_A3_RU":"DEU","ADM0_A3_ES":"DEU","ADM0_A3_CN":"DEU","ADM0_A3_TW":"DEU","ADM0_A3_IN":"DEU","ADM0_A3_NP":"DEU","ADM0_A3_PK":"DEU","ADM0_A3_DE":"DEU","ADM0_A3_GB":"DEU","ADM0_A3_BR":"DEU","ADM0_A3_IL":"DEU","ADM0_A3_PS":"DEU","ADM0_A3_SA":"DEU","ADM0_A3_EG":"DEU","ADM0_A3_MA":"DEU","ADM0_A3_PT":"DEU","ADM0_A3_AR":"DEU","ADM0_A3_JP":"DEU","ADM0_A3_KO":"DEU","ADM0_A3_VN":"DEU","ADM0_A3_TR":"DEU","ADM0_A3_ID":"DEU","ADM0_A3_PL":"DEU","ADM0_A3_GR":"DEU","ADM0_A3_IT":"DEU","ADM0_A3_NL":"DEU","ADM0_A3_SE":"DEU","ADM0_A3_BD":"DEU","ADM0_A3_UA":"DEU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":9.678348,"LABEL_Y":50.961733,"NE_ID":1159320539,"WIKIDATAID":"Q183","NAME_AR":"ألمانيا","NAME_BN":"জার্মানি","NAME_DE":"Deutschland","NAME_EN":"Germany","NAME_ES":"Alemania","NAME_FA":"آلمان","NAME_FR":"Allemagne","NAME_EL":"Γερμανία","NAME_HE":"גרמניה","NAME_HI":"जर्मनी","NAME_HU":"Németország","NAME_ID":"Jerman","NAME_IT":"Germania","NAME_JA":"ドイツ","NAME_KO":"독일","NAME_NL":"Duitsland","NAME_PL":"Niemcy","NAME_PT":"Alemanha","NAME_RU":"Германия","NAME_SV":"Tyskland","NAME_TR":"Almanya","NAME_UK":"Німеччина","NAME_UR":"جرمنی","NAME_VI":"Đức","NAME_ZH":"德国","NAME_ZHT":"德國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[43.439453125,41.10712890625],[45.00136718750002,41.290966796875],[45.28095703125001,41.449560546875],[46.45791015625002,41.070214843749994],[46.61894531250002,41.34375],[46.18212890625,41.657080078125],[46.42988281250001,41.890966796875],[45.63857421875002,42.205078125],[45.7275390625,42.475048828125],[44.87099609375002,42.756396484374996],[43.95742187500002,42.566552734374994],[43.78261718750002,42.747021484375],[42.419042968750006,43.22421875],[41.58056640625,43.21923828125],[40.648046875000006,43.53388671875],[39.97832031250002,43.419824218749994],[40.83662109375001,43.0634765625],[41.48876953125,42.659326171874994],[41.76298828125002,41.970019531249996],[41.51005859375002,41.517480468749994],[42.466406250000006,41.439843749999994],[42.78789062500002,41.563720703125],[43.439453125,41.10712890625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Georgia","SOV_A3":"GEO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Georgia","ADM0_A3":"GEO","GEOU_DIF":0,"GEOUNIT":"Georgia","GU_A3":"GEO","SU_DIF":0,"SUBUNIT":"Georgia","SU_A3":"GEO","BRK_DIFF":0,"NAME":"Georgia","NAME_LONG":"Georgia","BRK_A3":"GEO","BRK_NAME":"Georgia","BRK_GROUP":"","ABBREV":"Geo.","POSTAL":"GE","FORMAL_EN":"Georgia","FORMAL_FR":"","NAME_CIAWF":"Georgia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Georgia","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":2,"POP_EST":3720382,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":17477,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"GG","ISO_A2":"GE","ISO_A2_EH":"GE","ISO_A3":"GEO","ISO_A3_EH":"GEO","ISO_N3":"268","ISO_N3_EH":"268","UN_A3":"268","WB_A2":"GE","WB_A3":"GEO","WOE_ID":23424823,"WOE_ID_EH":23424823,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GEO","ADM0_DIFF":"","ADM0_TLC":"GEO","ADM0_A3_US":"GEO","ADM0_A3_FR":"GEO","ADM0_A3_RU":"GEO","ADM0_A3_ES":"GEO","ADM0_A3_CN":"GEO","ADM0_A3_TW":"GEO","ADM0_A3_IN":"GEO","ADM0_A3_NP":"GEO","ADM0_A3_PK":"GEO","ADM0_A3_DE":"GEO","ADM0_A3_GB":"GEO","ADM0_A3_BR":"GEO","ADM0_A3_IL":"GEO","ADM0_A3_PS":"GEO","ADM0_A3_SA":"GEO","ADM0_A3_EG":"GEO","ADM0_A3_MA":"GEO","ADM0_A3_PT":"GEO","ADM0_A3_AR":"GEO","ADM0_A3_JP":"GEO","ADM0_A3_KO":"GEO","ADM0_A3_VN":"GEO","ADM0_A3_TR":"GEO","ADM0_A3_ID":"GEO","ADM0_A3_PL":"GEO","ADM0_A3_GR":"GEO","ADM0_A3_IT":"GEO","ADM0_A3_NL":"GEO","ADM0_A3_SE":"GEO","ADM0_A3_BD":"GEO","ADM0_A3_UA":"GEO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":43.735724,"LABEL_Y":41.870087,"NE_ID":1159320779,"WIKIDATAID":"Q230","NAME_AR":"جورجيا","NAME_BN":"জর্জিয়া","NAME_DE":"Georgien","NAME_EN":"Georgia","NAME_ES":"Georgia","NAME_FA":"گرجستان","NAME_FR":"Géorgie","NAME_EL":"Γεωργία","NAME_HE":"גאורגיה","NAME_HI":"जॉर्जिया","NAME_HU":"Grúzia","NAME_ID":"Georgia","NAME_IT":"Georgia","NAME_JA":"ジョージア","NAME_KO":"조지아","NAME_NL":"Georgië","NAME_PL":"Gruzja","NAME_PT":"Geórgia","NAME_RU":"Грузия","NAME_SV":"Georgien","NAME_TR":"Gürcistan","NAME_UK":"Грузія","NAME_UR":"جارجیا","NAME_VI":"Gruzia","NAME_ZH":"格鲁吉亚","NAME_ZHT":"喬治亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-16.56230468749999,13.587304687499994],[-16.824804687499977,13.341064453125],[-16.763330078124994,13.064160156249997],[-16.648779296874977,13.154150390624991],[-15.834277343749989,13.156445312499997],[-15.509667968749994,13.586230468750003],[-16.56230468749999,13.587304687499994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Gambia","SOV_A3":"GMB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Gambia","ADM0_A3":"GMB","GEOU_DIF":0,"GEOUNIT":"Gambia","GU_A3":"GMB","SU_DIF":0,"SUBUNIT":"Gambia","SU_A3":"GMB","BRK_DIFF":0,"NAME":"Gambia","NAME_LONG":"The Gambia","BRK_A3":"GMB","BRK_NAME":"Gambia","BRK_GROUP":"","ABBREV":"Gambia","POSTAL":"GM","FORMAL_EN":"Republic of the Gambia","FORMAL_FR":"","NAME_CIAWF":"Gambia, The","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Gambia, The","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":2347706,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":1826,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"GA","ISO_A2":"GM","ISO_A2_EH":"GM","ISO_A3":"GMB","ISO_A3_EH":"GMB","ISO_N3":"270","ISO_N3_EH":"270","UN_A3":"270","WB_A2":"GM","WB_A3":"GMB","WOE_ID":23424821,"WOE_ID_EH":23424821,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GMB","ADM0_DIFF":"","ADM0_TLC":"GMB","ADM0_A3_US":"GMB","ADM0_A3_FR":"GMB","ADM0_A3_RU":"GMB","ADM0_A3_ES":"GMB","ADM0_A3_CN":"GMB","ADM0_A3_TW":"GMB","ADM0_A3_IN":"GMB","ADM0_A3_NP":"GMB","ADM0_A3_PK":"GMB","ADM0_A3_DE":"GMB","ADM0_A3_GB":"GMB","ADM0_A3_BR":"GMB","ADM0_A3_IL":"GMB","ADM0_A3_PS":"GMB","ADM0_A3_SA":"GMB","ADM0_A3_EG":"GMB","ADM0_A3_MA":"GMB","ADM0_A3_PT":"GMB","ADM0_A3_AR":"GMB","ADM0_A3_JP":"GMB","ADM0_A3_KO":"GMB","ADM0_A3_VN":"GMB","ADM0_A3_TR":"GMB","ADM0_A3_ID":"GMB","ADM0_A3_PL":"GMB","ADM0_A3_GR":"GMB","ADM0_A3_IT":"GMB","ADM0_A3_NL":"GMB","ADM0_A3_SE":"GMB","ADM0_A3_BD":"GMB","ADM0_A3_UA":"GMB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":10,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-14.998318,"LABEL_Y":13.641721,"NE_ID":1159320797,"WIKIDATAID":"Q1005","NAME_AR":"غامبيا","NAME_BN":"গাম্বিয়া","NAME_DE":"Gambia","NAME_EN":"The Gambia","NAME_ES":"Gambia","NAME_FA":"گامبیا","NAME_FR":"Gambie","NAME_EL":"Γκάμπια","NAME_HE":"גמביה","NAME_HI":"गाम्बिया","NAME_HU":"Gambia","NAME_ID":"Gambia","NAME_IT":"Gambia","NAME_JA":"ガンビア","NAME_KO":"감비아","NAME_NL":"Gambia","NAME_PL":"Gambia","NAME_PT":"Gâmbia","NAME_RU":"Гамбия","NAME_SV":"Gambia","NAME_TR":"Gambiya","NAME_UK":"Гамбія","NAME_UR":"گیمبیا","NAME_VI":"Gambia","NAME_ZH":"冈比亚","NAME_ZHT":"甘比亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[13.293554687500006,2.161572265624997],[13.220312500000006,2.2564453124999915],[11.348437500000017,2.2997070312499943],[11.328710937500006,2.167431640624997],[11.335351562500023,0.9997070312499972],[9.5908203125,1.031982421875],[9.296679687500017,-0.35126953125001137],[8.821386718750006,-0.7083984375000085],[9.064648437500011,-1.29833984375],[9.330664062500006,-1.5345703125000085],[9.265625,-1.8250976562500085],[9.759472656250011,-2.5185546875],[10.34765625,-3.0130859375000085],[11.130175781250017,-3.916308593750003],[11.504296875000023,-3.520312500000003],[11.934179687500006,-3.3185546875000114],[11.537792968750011,-2.836718750000003],[11.5751953125,-2.3970703125000057],[12.446386718750006,-2.3299804687500085],[12.43212890625,-1.9289062500000114],[12.793554687500006,-1.9318359375000114],[12.991992187500017,-2.3133789062500085],[13.464941406250006,-2.3954101562500085],[13.784375000000011,-2.1637695312500114],[14.08740234375,-2.4668945312500057],[14.383984375000011,-1.8900390625000085],[14.480566406250006,-0.6183593750000114],[13.860058593750011,-0.20332031250001137],[13.884570312500017,0.19082031249999432],[14.087500000000006,0.5365722656249972],[14.434472656250023,0.8114746093749972],[14.180859375000011,1.3702148437499915],[13.851367187500017,1.4187499999999886],[13.274121093750011,1.2410156249999886],[13.162695312500006,1.6480957031249943],[13.293554687500006,2.161572265624997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Gabon","SOV_A3":"GAB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Gabon","ADM0_A3":"GAB","GEOU_DIF":0,"GEOUNIT":"Gabon","GU_A3":"GAB","SU_DIF":0,"SUBUNIT":"Gabon","SU_A3":"GAB","BRK_DIFF":0,"NAME":"Gabon","NAME_LONG":"Gabon","BRK_A3":"GAB","BRK_NAME":"Gabon","BRK_GROUP":"","ABBREV":"Gabon","POSTAL":"GA","FORMAL_EN":"Gabonese Republic","FORMAL_FR":"","NAME_CIAWF":"Gabon","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Gabon","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":5,"POP_EST":2172579,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":16874,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"GB","ISO_A2":"GA","ISO_A2_EH":"GA","ISO_A3":"GAB","ISO_A3_EH":"GAB","ISO_N3":"266","ISO_N3_EH":"266","UN_A3":"266","WB_A2":"GA","WB_A3":"GAB","WOE_ID":23424822,"WOE_ID_EH":23424822,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GAB","ADM0_DIFF":"","ADM0_TLC":"GAB","ADM0_A3_US":"GAB","ADM0_A3_FR":"GAB","ADM0_A3_RU":"GAB","ADM0_A3_ES":"GAB","ADM0_A3_CN":"GAB","ADM0_A3_TW":"GAB","ADM0_A3_IN":"GAB","ADM0_A3_NP":"GAB","ADM0_A3_PK":"GAB","ADM0_A3_DE":"GAB","ADM0_A3_GB":"GAB","ADM0_A3_BR":"GAB","ADM0_A3_IL":"GAB","ADM0_A3_PS":"GAB","ADM0_A3_SA":"GAB","ADM0_A3_EG":"GAB","ADM0_A3_MA":"GAB","ADM0_A3_PT":"GAB","ADM0_A3_AR":"GAB","ADM0_A3_JP":"GAB","ADM0_A3_KO":"GAB","ADM0_A3_VN":"GAB","ADM0_A3_TR":"GAB","ADM0_A3_ID":"GAB","ADM0_A3_PL":"GAB","ADM0_A3_GR":"GAB","ADM0_A3_IT":"GAB","ADM0_A3_NL":"GAB","ADM0_A3_SE":"GAB","ADM0_A3_BD":"GAB","ADM0_A3_UA":"GAB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":11.835939,"LABEL_Y":-0.437739,"NE_ID":1159320693,"WIKIDATAID":"Q1000","NAME_AR":"الغابون","NAME_BN":"গ্যাবন","NAME_DE":"Gabun","NAME_EN":"Gabon","NAME_ES":"Gabón","NAME_FA":"گابن","NAME_FR":"Gabon","NAME_EL":"Γκαμπόν","NAME_HE":"גבון","NAME_HI":"गबॉन","NAME_HU":"Gabon","NAME_ID":"Gabon","NAME_IT":"Gabon","NAME_JA":"ガボン","NAME_KO":"가봉","NAME_NL":"Gabon","NAME_PL":"Gabon","NAME_PT":"Gabão","NAME_RU":"Габон","NAME_SV":"Gabon","NAME_TR":"Gabon","NAME_UK":"Габон","NAME_UR":"گیبون","NAME_VI":"Gabon","NAME_ZH":"加蓬","NAME_ZHT":"加彭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[9.480371093750023,42.805419921875],[8.713085937500011,42.549755859375],[8.807519531250023,41.58837890625],[9.186132812500006,41.384912109374994],[9.550683593750023,42.129736328125],[9.480371093750023,42.805419921875]]],[[[7.615625000000023,47.592724609375],[7.584179687500011,48.064306640625],[8.134863281250006,48.973583984375],[7.450585937500023,49.152197265625],[6.735449218750006,49.160595703125],[6.344335937500006,49.452734375],[5.789746093750011,49.53828125],[4.867578125000023,49.788134765624996],[4.174609375000017,50.246484374999994],[2.8397460937500227,50.711767578125],[2.52490234375,51.097119140625],[1.9125000000000227,50.990624999999994],[1.5794921875000227,50.7392578125],[1.551562500000017,50.2939453125],[1.2455078125000227,49.9982421875],[0.18671875000001137,49.703027343749994],[-0.16347656249999432,49.296777343749994],[-1.1385253906249773,49.387890625],[-1.2586425781249773,49.68017578125],[-1.8564453125,49.6837890625],[-1.4376464843749943,48.641406249999996],[-2.4461914062499943,48.648291015625],[-2.692333984374983,48.53681640625],[-3.2314453125,48.8408203125],[-4.720751953124989,48.539892578125],[-4.393164062499977,48.367626953125],[-4.629199218749989,48.085791015625],[-4.312109374999977,47.822900390624994],[-3.1588378906249943,47.694677734375],[-2.0188964843749773,47.037646484374996],[-1.7865234374999943,46.51484375],[-1.1462890624999886,46.311376953125],[-1.0660156249999773,45.8056640625],[-1.2455078124999943,44.559863281249996],[-1.48486328125,43.563769531249996],[-1.7940429687499773,43.40732421875],[-1.2854492187499886,43.059619140624996],[-0.041162109374994316,42.689111328124994],[1.4283203125000057,42.5958984375],[1.7060546875,42.503320312499994],[2.03271484375,42.353515625],[3.21142578125,42.43115234375],[3.0517578125,42.91513671875],[3.2588867187500057,43.193212890625],[4.052636718750023,43.593066406249996],[4.628710937500017,43.387109374999994],[5.059765625000011,43.44453125],[5.406542968750017,43.228515625],[6.115917968750011,43.07236328125],[6.494042968750023,43.169287109375],[7.377734375000017,43.731738281249996],[7.438671875000011,43.750439453125],[7.4931640625,43.767138671874996],[7.651464843750006,44.033642578125],[6.96728515625,44.280029296875],[7.030664062500023,44.716699218749994],[6.627734375000017,45.117968749999996],[7.153417968750006,45.400927734374996],[7.021093750000006,45.92578125],[6.758105468750017,46.415771484375],[6.060253906250011,46.428173828125],[7.000585937500006,47.322509765625],[7.615625000000023,47.592724609375]]],[[[55.79736328125,-21.33935546875],[55.66191406250002,-20.90625],[55.31132812500002,-20.904101562500003],[55.36269531250002,-21.27363281250001],[55.79736328125,-21.33935546875]]],[[[-54.61625976562499,2.3267578124999915],[-54.130078125,2.121044921874997],[-53.7677734375,2.3548339843749915],[-52.96484375,2.183544921874997],[-52.700634765625,2.3636718749999943],[-51.990624999999994,3.7020019531249915],[-51.65253906249998,4.061279296875],[-51.919580078124994,4.524316406249994],[-52.29052734375,4.942187499999989],[-52.899316406249994,5.425048828125],[-53.45444335937499,5.5634765625],[-53.84716796875,5.7822265625],[-54.15595703125,5.3589843749999915],[-54.45219726562499,5.013476562499989],[-54.350732421874994,4.054101562499994],[-53.990478515625,3.589550781249997],[-54.203125,3.13818359375],[-54.1955078125,2.81787109375],[-54.61625976562499,2.3267578124999915]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"France","ADM0_A3":"FRA","GEOU_DIF":0,"GEOUNIT":"France","GU_A3":"FRA","SU_DIF":0,"SUBUNIT":"France","SU_A3":"FRA","BRK_DIFF":0,"NAME":"France","NAME_LONG":"France","BRK_A3":"FRA","BRK_NAME":"France","BRK_GROUP":"","ABBREV":"Fr.","POSTAL":"F","FORMAL_EN":"French Republic","FORMAL_FR":"","NAME_CIAWF":"France","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"France","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":67059887,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":2715518,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"FR","ISO_A2":"-99","ISO_A2_EH":"FR","ISO_A3":"-99","ISO_A3_EH":"FRA","ISO_N3":"-99","ISO_N3_EH":"250","UN_A3":"250","WB_A2":"FR","WB_A3":"FRA","WOE_ID":-90,"WOE_ID_EH":23424819,"WOE_NOTE":"Includes only Metropolitan France (including Corsica)","ADM0_ISO":"FRA","ADM0_DIFF":"","ADM0_TLC":"FRA","ADM0_A3_US":"FRA","ADM0_A3_FR":"FRA","ADM0_A3_RU":"FRA","ADM0_A3_ES":"FRA","ADM0_A3_CN":"FRA","ADM0_A3_TW":"FRA","ADM0_A3_IN":"FRA","ADM0_A3_NP":"FRA","ADM0_A3_PK":"FRA","ADM0_A3_DE":"FRA","ADM0_A3_GB":"FRA","ADM0_A3_BR":"FRA","ADM0_A3_IL":"FRA","ADM0_A3_PS":"FRA","ADM0_A3_SA":"FRA","ADM0_A3_EG":"FRA","ADM0_A3_MA":"FRA","ADM0_A3_PT":"FRA","ADM0_A3_AR":"FRA","ADM0_A3_JP":"FRA","ADM0_A3_KO":"FRA","ADM0_A3_VN":"FRA","ADM0_A3_TR":"FRA","ADM0_A3_ID":"FRA","ADM0_A3_PL":"FRA","ADM0_A3_GR":"FRA","ADM0_A3_IT":"FRA","ADM0_A3_NL":"FRA","ADM0_A3_SE":"FRA","ADM0_A3_BD":"FRA","ADM0_A3_UA":"FRA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":3,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":2.552275,"LABEL_Y":46.696113,"NE_ID":1159320637,"WIKIDATAID":"Q142","NAME_AR":"فرنسا","NAME_BN":"ফ্রান্স","NAME_DE":"Frankreich","NAME_EN":"France","NAME_ES":"Francia","NAME_FA":"فرانسه","NAME_FR":"France","NAME_EL":"Γαλλία","NAME_HE":"צרפת","NAME_HI":"फ़्रान्स","NAME_HU":"Franciaország","NAME_ID":"Prancis","NAME_IT":"Francia","NAME_JA":"フランス","NAME_KO":"프랑스","NAME_NL":"Frankrijk","NAME_PL":"Francja","NAME_PT":"França","NAME_RU":"Франция","NAME_SV":"Frankrike","NAME_TR":"Fransa","NAME_UK":"Франція","NAME_UR":"فرانس","NAME_VI":"Pháp","NAME_ZH":"法国","NAME_ZHT":"法國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":4,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Saint Pierre and Miquelon","ADM0_A3":"SPM","GEOU_DIF":0,"GEOUNIT":"Saint Pierre and Miquelon","GU_A3":"SPM","SU_DIF":0,"SUBUNIT":"Saint Pierre and Miquelon","SU_A3":"SPM","BRK_DIFF":0,"NAME":"St. Pierre and Miquelon","NAME_LONG":"Saint Pierre and Miquelon","BRK_A3":"SPM","BRK_NAME":"St. Pierre and Miquelon","BRK_GROUP":"","ABBREV":"St. P.M.","POSTAL":"PM","FORMAL_EN":"Saint Pierre and Miquelon","FORMAL_FR":"","NAME_CIAWF":"Saint Pierre and Miquelon","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"St. Pierre and Miquelon","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":5997,"POP_RANK":5,"POP_YEAR":2017,"GDP_MD":215,"GDP_YEAR":2016,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"3. Upper middle income","FIPS_10":"SB","ISO_A2":"PM","ISO_A2_EH":"PM","ISO_A3":"SPM","ISO_A3_EH":"SPM","ISO_N3":"666","ISO_N3_EH":"666","UN_A3":"666","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424939,"WOE_ID_EH":23424939,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SPM","ADM0_DIFF":"","ADM0_TLC":"SPM","ADM0_A3_US":"SPM","ADM0_A3_FR":"SPM","ADM0_A3_RU":"SPM","ADM0_A3_ES":"SPM","ADM0_A3_CN":"SPM","ADM0_A3_TW":"SPM","ADM0_A3_IN":"SPM","ADM0_A3_NP":"SPM","ADM0_A3_PK":"SPM","ADM0_A3_DE":"SPM","ADM0_A3_GB":"SPM","ADM0_A3_BR":"SPM","ADM0_A3_IL":"SPM","ADM0_A3_PS":"SPM","ADM0_A3_SA":"SPM","ADM0_A3_EG":"SPM","ADM0_A3_MA":"SPM","ADM0_A3_PT":"SPM","ADM0_A3_AR":"SPM","ADM0_A3_JP":"SPM","ADM0_A3_KO":"SPM","ADM0_A3_VN":"SPM","ADM0_A3_TR":"SPM","ADM0_A3_ID":"SPM","ADM0_A3_PL":"SPM","ADM0_A3_GR":"SPM","ADM0_A3_IT":"SPM","ADM0_A3_NL":"SPM","ADM0_A3_SE":"SPM","ADM0_A3_BD":"SPM","ADM0_A3_UA":"SPM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Northern America","REGION_WB":"North America","NAME_LEN":23,"LONG_LEN":25,"ABBREV_LEN":8,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-56.332352,"LABEL_Y":47.040344,"NE_ID":1159320647,"WIKIDATAID":"Q34617","NAME_AR":"سان بيير وميكلون","NAME_BN":"সাঁ পিয়ের ও মিকলোঁ","NAME_DE":"Saint-Pierre und Miquelon","NAME_EN":"Saint Pierre and Miquelon","NAME_ES":"San Pedro y Miquelón","NAME_FA":"سن پیر و میکلن","NAME_FR":"Saint-Pierre-et-Miquelon","NAME_EL":"Σαιν-Πιερ και Μικελόν","NAME_HE":"סן-פייר ומיקלון","NAME_HI":"सन्त पियर और मिकलान","NAME_HU":"Saint-Pierre és Miquelon","NAME_ID":"Saint Pierre dan Miquelon","NAME_IT":"Saint-Pierre e Miquelon","NAME_JA":"サンピエール島・ミクロン島","NAME_KO":"생피에르 미클롱","NAME_NL":"Saint-Pierre en Miquelon","NAME_PL":"Saint-Pierre i Miquelon","NAME_PT":"Saint-Pierre e Miquelon","NAME_RU":"Сен-Пьер и Микелон","NAME_SV":"Saint-Pierre och Miquelon","NAME_TR":"Saint Pierre ve Miquelon","NAME_UK":"Сен-П'єр і Мікелон","NAME_UR":"سینٹ پیئر و میکیلون","NAME_VI":"Saint-Pierre và Miquelon","NAME_ZH":"圣皮埃尔和密克隆","NAME_ZHT":"聖皮埃與密克隆群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Wallis and Futuna","ADM0_A3":"WLF","GEOU_DIF":0,"GEOUNIT":"Wallis and Futuna","GU_A3":"WLF","SU_DIF":0,"SUBUNIT":"Wallis and Futuna","SU_A3":"WLF","BRK_DIFF":0,"NAME":"Wallis and Futuna Is.","NAME_LONG":"Wallis and Futuna Islands","BRK_A3":"WLF","BRK_NAME":"Wallis and Futuna Islands","BRK_GROUP":"","ABBREV":"Wlf.","POSTAL":"WF","FORMAL_EN":"Wallis and Futuna Islands","FORMAL_FR":"","NAME_CIAWF":"Wallis and Futuna","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"Wallis and Futuna","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":11558,"POP_RANK":6,"POP_YEAR":2018,"GDP_MD":60,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"WF","ISO_A2":"WF","ISO_A2_EH":"WF","ISO_A3":"WLF","ISO_A3_EH":"WLF","ISO_N3":"876","ISO_N3_EH":"876","UN_A3":"876","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424989,"WOE_ID_EH":23424989,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"WLF","ADM0_DIFF":"","ADM0_TLC":"WLF","ADM0_A3_US":"WLF","ADM0_A3_FR":"WLF","ADM0_A3_RU":"WLF","ADM0_A3_ES":"WLF","ADM0_A3_CN":"WLF","ADM0_A3_TW":"WLF","ADM0_A3_IN":"WLF","ADM0_A3_NP":"WLF","ADM0_A3_PK":"WLF","ADM0_A3_DE":"WLF","ADM0_A3_GB":"WLF","ADM0_A3_BR":"WLF","ADM0_A3_IL":"WLF","ADM0_A3_PS":"WLF","ADM0_A3_SA":"WLF","ADM0_A3_EG":"WLF","ADM0_A3_MA":"WLF","ADM0_A3_PT":"WLF","ADM0_A3_AR":"WLF","ADM0_A3_JP":"WLF","ADM0_A3_KO":"WLF","ADM0_A3_VN":"WLF","ADM0_A3_TR":"WLF","ADM0_A3_ID":"WLF","ADM0_A3_PL":"WLF","ADM0_A3_GR":"WLF","ADM0_A3_IT":"WLF","ADM0_A3_NL":"WLF","ADM0_A3_SE":"WLF","ADM0_A3_BD":"WLF","ADM0_A3_UA":"WLF","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":21,"LONG_LEN":25,"ABBREV_LEN":4,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4.7,"MAX_LABEL":9,"LABEL_X":-178.137436,"LABEL_Y":-14.286415,"NE_ID":1159320649,"WIKIDATAID":"Q35555","NAME_AR":"واليس وفوتونا","NAME_BN":"ওয়ালিস ও ফুটুনা","NAME_DE":"Wallis und Futuna","NAME_EN":"Wallis and Futuna","NAME_ES":"Wallis y Futuna","NAME_FA":"والیس و فوتونا","NAME_FR":"Wallis-et-Futuna","NAME_EL":"Ουαλίς και Φουτουνά","NAME_HE":"ואליס ופוטונה","NAME_HI":"वालिस और फ़्यूचूना","NAME_HU":"Wallis és Futuna","NAME_ID":"Wallis dan Futuna","NAME_IT":"Wallis e Futuna","NAME_JA":"ウォリス・フツナ","NAME_KO":"왈리스 푸투나","NAME_NL":"Wallis en Futuna","NAME_PL":"Wallis i Futuna","NAME_PT":"Wallis e Futuna","NAME_RU":"Уоллис и Футуна","NAME_SV":"Wallis- och Futunaöarna","NAME_TR":"Wallis ve Futuna Adaları","NAME_UK":"Волліс і Футуна","NAME_UR":"والس و فتونہ","NAME_VI":"Wallis và Futuna","NAME_ZH":"瓦利斯和富图纳","NAME_ZHT":"瓦利斯和富圖納","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Saint Martin","ADM0_A3":"MAF","GEOU_DIF":0,"GEOUNIT":"Saint Martin","GU_A3":"MAF","SU_DIF":0,"SUBUNIT":"Saint Martin","SU_A3":"MAF","BRK_DIFF":0,"NAME":"St-Martin","NAME_LONG":"Saint-Martin","BRK_A3":"MAF","BRK_NAME":"Saint-Martin","BRK_GROUP":"","ABBREV":"St. M.","POSTAL":"MF","FORMAL_EN":"Saint-Martin (French part)","FORMAL_FR":"","NAME_CIAWF":"Saint Martin","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"St. Martin (French part)","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":38002,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":562,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"RN","ISO_A2":"MF","ISO_A2_EH":"MF","ISO_A3":"MAF","ISO_A3_EH":"MAF","ISO_N3":"663","ISO_N3_EH":"663","UN_A3":"663","WB_A2":"MF","WB_A3":"MAF","WOE_ID":56042305,"WOE_ID_EH":56042305,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MAF","ADM0_DIFF":"","ADM0_TLC":"MAF","ADM0_A3_US":"MAF","ADM0_A3_FR":"MAF","ADM0_A3_RU":"MAF","ADM0_A3_ES":"MAF","ADM0_A3_CN":"MAF","ADM0_A3_TW":"MAF","ADM0_A3_IN":"MAF","ADM0_A3_NP":"MAF","ADM0_A3_PK":"MAF","ADM0_A3_DE":"MAF","ADM0_A3_GB":"MAF","ADM0_A3_BR":"MAF","ADM0_A3_IL":"MAF","ADM0_A3_PS":"MAF","ADM0_A3_SA":"MAF","ADM0_A3_EG":"MAF","ADM0_A3_MA":"MAF","ADM0_A3_PT":"MAF","ADM0_A3_AR":"MAF","ADM0_A3_JP":"MAF","ADM0_A3_KO":"MAF","ADM0_A3_VN":"MAF","ADM0_A3_TR":"MAF","ADM0_A3_ID":"MAF","ADM0_A3_PL":"MAF","ADM0_A3_GR":"MAF","ADM0_A3_IT":"MAF","ADM0_A3_NL":"MAF","ADM0_A3_SE":"MAF","ADM0_A3_BD":"MAF","ADM0_A3_UA":"MAF","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":9,"LONG_LEN":12,"ABBREV_LEN":6,"TINY":4,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-63.049399,"LABEL_Y":18.081302,"NE_ID":1159320639,"WIKIDATAID":"Q126125","NAME_AR":"تجمع سان مارتين","NAME_BN":"সেন্ট-মার্টিন","NAME_DE":"Saint-Martin","NAME_EN":"Saint Martin","NAME_ES":"San Martín","NAME_FA":"سنت مارتین فرانسه","NAME_FR":"Saint-Martin","NAME_EL":"Άγιος Μαρτίνος","NAME_HE":"סן מרטן","NAME_HI":"सेंट मार्टिन की सामूहिकता","NAME_HU":"Saint-Martin","NAME_ID":"Saint Martin","NAME_IT":"Saint-Martin","NAME_JA":"サン・マルタン","NAME_KO":"생마르탱","NAME_NL":"Sint-Maarten","NAME_PL":"Saint-Martin","NAME_PT":"São Martinho","NAME_RU":"Сен-Мартен","NAME_SV":"Saint Martin","NAME_TR":"Saint Martin","NAME_UK":"Сен-Мартен","NAME_UR":"سینٹ مارٹن","NAME_VI":"Saint-Martin","NAME_ZH":"法属圣马丁","NAME_ZHT":"法屬聖馬丁","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Saint Barthelemy","ADM0_A3":"BLM","GEOU_DIF":0,"GEOUNIT":"Saint Barthelemy","GU_A3":"BLM","SU_DIF":0,"SUBUNIT":"Saint Barthelemy","SU_A3":"BLM","BRK_DIFF":0,"NAME":"St-Barthélemy","NAME_LONG":"Saint-Barthélemy","BRK_A3":"BLM","BRK_NAME":"St-Barthélemy","BRK_GROUP":"","ABBREV":"St. B.","POSTAL":"BL","FORMAL_EN":"Saint-Barthélemy","FORMAL_FR":"","NAME_CIAWF":"Saint Barthelemy","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"St-Barthélemy","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":9961,"POP_RANK":5,"POP_YEAR":2017,"GDP_MD":255,"GDP_YEAR":2016,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"TB","ISO_A2":"BL","ISO_A2_EH":"BL","ISO_A3":"BLM","ISO_A3_EH":"BLM","ISO_N3":"652","ISO_N3_EH":"652","UN_A3":"652","WB_A2":"-99","WB_A3":"-99","WOE_ID":56042304,"WOE_ID_EH":56042304,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BLM","ADM0_DIFF":"","ADM0_TLC":"BLM","ADM0_A3_US":"BLM","ADM0_A3_FR":"BLM","ADM0_A3_RU":"BLM","ADM0_A3_ES":"BLM","ADM0_A3_CN":"BLM","ADM0_A3_TW":"BLM","ADM0_A3_IN":"BLM","ADM0_A3_NP":"BLM","ADM0_A3_PK":"BLM","ADM0_A3_DE":"BLM","ADM0_A3_GB":"BLM","ADM0_A3_BR":"BLM","ADM0_A3_IL":"BLM","ADM0_A3_PS":"BLM","ADM0_A3_SA":"BLM","ADM0_A3_EG":"BLM","ADM0_A3_MA":"BLM","ADM0_A3_PT":"BLM","ADM0_A3_AR":"BLM","ADM0_A3_JP":"BLM","ADM0_A3_KO":"BLM","ADM0_A3_VN":"BLM","ADM0_A3_TR":"BLM","ADM0_A3_ID":"BLM","ADM0_A3_PL":"BLM","ADM0_A3_GR":"BLM","ADM0_A3_IT":"BLM","ADM0_A3_NL":"BLM","ADM0_A3_SE":"BLM","ADM0_A3_BD":"BLM","ADM0_A3_UA":"BLM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":13,"LONG_LEN":16,"ABBREV_LEN":6,"TINY":4,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5.7,"MAX_LABEL":10,"LABEL_X":-62.833193,"LABEL_Y":17.901987,"NE_ID":1159320633,"WIKIDATAID":"Q25362","NAME_AR":"سان بارتيلمي","NAME_BN":"সেন্ট-বার্থেলেমি","NAME_DE":"Saint-Barthélemy","NAME_EN":"Saint Barthélemy","NAME_ES":"San Bartolomé","NAME_FA":"سنت بارثلمی","NAME_FR":"Saint-Barthélemy","NAME_EL":"Άγιος Βαρθολομαίος","NAME_HE":"סן ברתלמי","NAME_HI":"सेंट बार्थेलेमी","NAME_HU":"Saint-Barthélemy","NAME_ID":"Saint-Barthélemy","NAME_IT":"Saint-Barthélemy","NAME_JA":"サン・バルテルミー島","NAME_KO":"생바르텔레미","NAME_NL":"Saint-Barthélemy","NAME_PL":"Saint-Barthélemy","NAME_PT":"Coletividade de São Bartolomeu","NAME_RU":"Сен-Бартелеми","NAME_SV":"Saint-Barthélemy","NAME_TR":"Saint Barthélemy","NAME_UK":"Сен-Бартельмі","NAME_UR":"سینٹ بارتھیملے","NAME_VI":"Saint-Barthélemy","NAME_ZH":"圣巴泰勒米","NAME_ZHT":"聖巴瑟米","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"French Polynesia","ADM0_A3":"PYF","GEOU_DIF":0,"GEOUNIT":"French Polynesia","GU_A3":"PYF","SU_DIF":0,"SUBUNIT":"French Polynesia","SU_A3":"PYF","BRK_DIFF":0,"NAME":"Fr. Polynesia","NAME_LONG":"French Polynesia","BRK_A3":"PYF","BRK_NAME":"Fr. Polynesia","BRK_GROUP":"","ABBREV":"Fr. Poly.","POSTAL":"PF","FORMAL_EN":"French Polynesia","FORMAL_FR":"","NAME_CIAWF":"French Polynesia","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"French Polynesia","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":279287,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":5490,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"FP","ISO_A2":"PF","ISO_A2_EH":"PF","ISO_A3":"PYF","ISO_A3_EH":"PYF","ISO_N3":"258","ISO_N3_EH":"258","UN_A3":"258","WB_A2":"PF","WB_A3":"PYF","WOE_ID":23424817,"WOE_ID_EH":23424817,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"PYF","ADM0_DIFF":"","ADM0_TLC":"PYF","ADM0_A3_US":"PYF","ADM0_A3_FR":"PYF","ADM0_A3_RU":"PYF","ADM0_A3_ES":"PYF","ADM0_A3_CN":"PYF","ADM0_A3_TW":"PYF","ADM0_A3_IN":"PYF","ADM0_A3_NP":"PYF","ADM0_A3_PK":"PYF","ADM0_A3_DE":"PYF","ADM0_A3_GB":"PYF","ADM0_A3_BR":"PYF","ADM0_A3_IL":"PYF","ADM0_A3_PS":"PYF","ADM0_A3_SA":"PYF","ADM0_A3_EG":"PYF","ADM0_A3_MA":"PYF","ADM0_A3_PT":"PYF","ADM0_A3_AR":"PYF","ADM0_A3_JP":"PYF","ADM0_A3_KO":"PYF","ADM0_A3_VN":"PYF","ADM0_A3_TR":"PYF","ADM0_A3_ID":"PYF","ADM0_A3_PL":"PYF","ADM0_A3_GR":"PYF","ADM0_A3_IT":"PYF","ADM0_A3_NL":"PYF","ADM0_A3_SE":"PYF","ADM0_A3_BD":"PYF","ADM0_A3_UA":"PYF","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":13,"LONG_LEN":16,"ABBREV_LEN":9,"TINY":2,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":3.5,"MAX_LABEL":8.5,"LABEL_X":-149.46157,"LABEL_Y":-17.628081,"NE_ID":1159320643,"WIKIDATAID":"Q30971","NAME_AR":"بولينزيا الفرنسية","NAME_BN":"ফরাসি পলিনেশিয়া","NAME_DE":"Französisch-Polynesien","NAME_EN":"French Polynesia","NAME_ES":"Polinesia Francesa","NAME_FA":"پلینزی فرانسه","NAME_FR":"Polynésie française","NAME_EL":"Γαλλική Πολυνησία","NAME_HE":"פולינזיה הצרפתית","NAME_HI":"फ़्रान्सीसी पॉलिनेशिया","NAME_HU":"Francia Polinézia","NAME_ID":"Polinesia Prancis","NAME_IT":"Polinesia francese","NAME_JA":"フランス領ポリネシア","NAME_KO":"프랑스령 폴리네시아","NAME_NL":"Frans-Polynesië","NAME_PL":"Polinezja Francuska","NAME_PT":"Polinésia Francesa","NAME_RU":"Французская Полинезия","NAME_SV":"Franska Polynesien","NAME_TR":"Fransız Polinezyası","NAME_UK":"Французька Полінезія","NAME_UR":"فرانسیسی پولینیشیا","NAME_VI":"Polynésie thuộc Pháp","NAME_ZH":"法属波利尼西亚","NAME_ZHT":"法屬玻里尼西亞","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[164.20234375,-20.24609375],[164.16972656250005,-20.48017578125001],[164.45468750000003,-20.8291015625],[165.24199218750005,-21.525488281250006],[166.09609375000002,-21.956640625000006],[166.77412109375,-22.37617187500001],[166.9423828125,-22.090136718750003],[165.66279296875,-21.267187500000006],[165.19179687500002,-20.768847656250003],[164.43593750000002,-20.2822265625],[164.20234375,-20.24609375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"New Caledonia","ADM0_A3":"NCL","GEOU_DIF":0,"GEOUNIT":"New Caledonia","GU_A3":"NCL","SU_DIF":0,"SUBUNIT":"New Caledonia","SU_A3":"NCL","BRK_DIFF":0,"NAME":"New Caledonia","NAME_LONG":"New Caledonia","BRK_A3":"NCL","BRK_NAME":"New Caledonia","BRK_GROUP":"","ABBREV":"New C.","POSTAL":"NC","FORMAL_EN":"New Caledonia","FORMAL_FR":"Nouvelle-Calédonie","NAME_CIAWF":"New Caledonia","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"New Caledonia","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":287800,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":10770,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"NC","ISO_A2":"NC","ISO_A2_EH":"NC","ISO_A3":"NCL","ISO_A3_EH":"NCL","ISO_N3":"540","ISO_N3_EH":"540","UN_A3":"540","WB_A2":"NC","WB_A3":"NCL","WOE_ID":23424903,"WOE_ID_EH":23424903,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NCL","ADM0_DIFF":"","ADM0_TLC":"NCL","ADM0_A3_US":"NCL","ADM0_A3_FR":"NCL","ADM0_A3_RU":"NCL","ADM0_A3_ES":"NCL","ADM0_A3_CN":"NCL","ADM0_A3_TW":"NCL","ADM0_A3_IN":"NCL","ADM0_A3_NP":"NCL","ADM0_A3_PK":"NCL","ADM0_A3_DE":"NCL","ADM0_A3_GB":"NCL","ADM0_A3_BR":"NCL","ADM0_A3_IL":"NCL","ADM0_A3_PS":"NCL","ADM0_A3_SA":"NCL","ADM0_A3_EG":"NCL","ADM0_A3_MA":"NCL","ADM0_A3_PT":"NCL","ADM0_A3_AR":"NCL","ADM0_A3_JP":"NCL","ADM0_A3_KO":"NCL","ADM0_A3_VN":"NCL","ADM0_A3_TR":"NCL","ADM0_A3_ID":"NCL","ADM0_A3_PL":"NCL","ADM0_A3_GR":"NCL","ADM0_A3_IT":"NCL","ADM0_A3_NL":"NCL","ADM0_A3_SE":"NCL","ADM0_A3_BD":"NCL","ADM0_A3_UA":"NCL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Melanesia","REGION_WB":"East Asia & Pacific","NAME_LEN":13,"LONG_LEN":13,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4.6,"MAX_LABEL":8,"LABEL_X":165.084004,"LABEL_Y":-21.064697,"NE_ID":1159320641,"WIKIDATAID":"Q33788","NAME_AR":"كاليدونيا الجديدة","NAME_BN":"নতুন ক্যালিডোনিয়া","NAME_DE":"Neukaledonien","NAME_EN":"New Caledonia","NAME_ES":"Nueva Caledonia","NAME_FA":"کالدونیای جدید","NAME_FR":"Nouvelle-Calédonie","NAME_EL":"Νέα Καληδονία","NAME_HE":"קלדוניה החדשה","NAME_HI":"नया कैलेडोनिया","NAME_HU":"Új-Kaledónia","NAME_ID":"Kaledonia Baru","NAME_IT":"Nuova Caledonia","NAME_JA":"ニューカレドニア","NAME_KO":"누벨칼레도니","NAME_NL":"Nieuw-Caledonië","NAME_PL":"Nowa Kaledonia","NAME_PT":"Nova Caledónia","NAME_RU":"Новая Каледония","NAME_SV":"Nya Kaledonien","NAME_TR":"Yeni Kaledonya","NAME_UK":"Нова Каледонія","NAME_UR":"نیو کیلیڈونیا","NAME_VI":"Nouvelle-Calédonie","NAME_ZH":"新喀里多尼亚","NAME_ZHT":"新喀里多尼亞","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[69.18486328125002,-49.10957031250001],[68.8720703125,-49.4443359375],[69.612890625,-49.650976562500006],[69.915625,-49.348535156249994],[69.18486328125002,-49.10957031250001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"France","SOV_A3":"FR1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"French Southern and Antarctic Lands","ADM0_A3":"ATF","GEOU_DIF":0,"GEOUNIT":"French Southern and Antarctic Lands","GU_A3":"ATF","SU_DIF":0,"SUBUNIT":"French Southern and Antarctic Lands","SU_A3":"ATF","BRK_DIFF":0,"NAME":"Fr. S. Antarctic Lands","NAME_LONG":"French Southern and Antarctic Lands","BRK_A3":"ATF","BRK_NAME":"Fr. S. and Antarctic Lands","BRK_GROUP":"","ABBREV":"Fr. S.A.L.","POSTAL":"TF","FORMAL_EN":"Territory of the French Southern and Antarctic Lands","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Fr.","NOTE_BRK":"","NAME_SORT":"French Southern and Antarctic Lands","NAME_ALT":"","MAPCOLOR7":7,"MAPCOLOR8":5,"MAPCOLOR9":9,"MAPCOLOR13":11,"POP_EST":140,"POP_RANK":1,"POP_YEAR":2017,"GDP_MD":16,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"FS","ISO_A2":"TF","ISO_A2_EH":"TF","ISO_A3":"ATF","ISO_A3_EH":"ATF","ISO_N3":"260","ISO_N3_EH":"260","UN_A3":"260","WB_A2":"-99","WB_A3":"-99","WOE_ID":28289406,"WOE_ID_EH":28289406,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ATF","ADM0_DIFF":"","ADM0_TLC":"ATF","ADM0_A3_US":"ATF","ADM0_A3_FR":"ATF","ADM0_A3_RU":"ATF","ADM0_A3_ES":"ATF","ADM0_A3_CN":"ATF","ADM0_A3_TW":"ATF","ADM0_A3_IN":"ATF","ADM0_A3_NP":"ATF","ADM0_A3_PK":"ATF","ADM0_A3_DE":"ATF","ADM0_A3_GB":"ATF","ADM0_A3_BR":"ATF","ADM0_A3_IL":"ATF","ADM0_A3_PS":"ATF","ADM0_A3_SA":"ATF","ADM0_A3_EG":"ATF","ADM0_A3_MA":"ATF","ADM0_A3_PT":"ATF","ADM0_A3_AR":"ATF","ADM0_A3_JP":"ATF","ADM0_A3_KO":"ATF","ADM0_A3_VN":"ATF","ADM0_A3_TR":"ATF","ADM0_A3_ID":"ATF","ADM0_A3_PL":"ATF","ADM0_A3_GR":"ATF","ADM0_A3_IT":"ATF","ADM0_A3_NL":"ATF","ADM0_A3_SE":"ATF","ADM0_A3_BD":"ATF","ADM0_A3_UA":"ATF","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Africa","SUBREGION":"Seven seas (open ocean)","REGION_WB":"Sub-Saharan Africa","NAME_LEN":22,"LONG_LEN":35,"ABBREV_LEN":10,"TINY":2,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":69.122136,"LABEL_Y":-49.303721,"NE_ID":1159320631,"WIKIDATAID":"Q129003","NAME_AR":"أراض فرنسية جنوبية وأنتارتيكية","NAME_BN":"ফ্র. এস. অ্যান্ড অ্যান্টার্কটিক ল্যান্ড","NAME_DE":"Französische Süd- und Antarktisgebiete","NAME_EN":"French Southern and Antarctic Lands","NAME_ES":"Tierras Australes y Antárticas Francesas","NAME_FA":"سرزمینهای جنوبی و جنوبگانی فرانسه","NAME_FR":"Terres australes et antarctiques françaises","NAME_EL":"Γαλλικά Νότια και Ανταρκτικά Εδάφη","NAME_HE":"הארצות הדרומיות והאנטארקטיות של צרפת","NAME_HI":"दक्षिण फ्रांसीसी और अंटार्कटिक लैंड","NAME_HU":"Francia déli és antarktiszi területek","NAME_ID":"Daratan Selatan dan Antarktika Perancis","NAME_IT":"Terre australi e antartiche francesi","NAME_JA":"フランス領南方・南極地域","NAME_KO":"프랑스령 남방 및 남극","NAME_NL":"Franse Zuidelijke Gebieden","NAME_PL":"Francuskie Terytoria Południowe i Antarktyczne","NAME_PT":"Terras Austrais e Antárticas Francesas","NAME_RU":"Французские Южные и Антарктические территории","NAME_SV":"Franska sydterritorierna","NAME_TR":"Fransız Güney ve Antarktika Toprakları","NAME_UK":"Французькі Південні і Антарктичні території","NAME_UR":"سرزمین جنوبی فرانسیسیہ و انٹارکٹیکا","NAME_VI":"Vùng đất phía Nam và châu Nam Cực thuộc Pháp","NAME_ZH":"法属南部和南极领地","NAME_ZHT":"法屬南部和南極領地","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Finland","SOV_A3":"FI1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Aland","ADM0_A3":"ALD","GEOU_DIF":0,"GEOUNIT":"Aland","GU_A3":"ALD","SU_DIF":0,"SUBUNIT":"Aland","SU_A3":"ALD","BRK_DIFF":0,"NAME":"Åland","NAME_LONG":"Åland Islands","BRK_A3":"ALD","BRK_NAME":"Åland","BRK_GROUP":"","ABBREV":"Åland","POSTAL":"AI","FORMAL_EN":"Åland Islands","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Fin.","NOTE_BRK":"","NAME_SORT":"Aland","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":6,"POP_EST":29884,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":1563,"GDP_YEAR":2016,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"-99","ISO_A2":"AX","ISO_A2_EH":"AX","ISO_A3":"ALA","ISO_A3_EH":"ALA","ISO_N3":"248","ISO_N3_EH":"248","UN_A3":"248","WB_A2":"-99","WB_A3":"-99","WOE_ID":12577865,"WOE_ID_EH":12577865,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ALD","ADM0_DIFF":"","ADM0_TLC":"ALD","ADM0_A3_US":"ALD","ADM0_A3_FR":"ALD","ADM0_A3_RU":"ALD","ADM0_A3_ES":"ALD","ADM0_A3_CN":"ALD","ADM0_A3_TW":"ALD","ADM0_A3_IN":"ALD","ADM0_A3_NP":"ALD","ADM0_A3_PK":"ALD","ADM0_A3_DE":"ALD","ADM0_A3_GB":"ALD","ADM0_A3_BR":"ALD","ADM0_A3_IL":"ALD","ADM0_A3_PS":"ALD","ADM0_A3_SA":"ALD","ADM0_A3_EG":"ALD","ADM0_A3_MA":"ALD","ADM0_A3_PT":"ALD","ADM0_A3_AR":"ALD","ADM0_A3_JP":"ALD","ADM0_A3_KO":"ALD","ADM0_A3_VN":"ALD","ADM0_A3_TR":"ALD","ADM0_A3_ID":"ALD","ADM0_A3_PL":"ALD","ADM0_A3_GR":"ALD","ADM0_A3_IT":"ALD","ADM0_A3_NL":"ALD","ADM0_A3_SE":"ALD","ADM0_A3_BD":"ALD","ADM0_A3_UA":"ALD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":5,"LONG_LEN":13,"ABBREV_LEN":5,"TINY":5,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":19.869671,"LABEL_Y":60.156467,"NE_ID":1159320621,"WIKIDATAID":"Q5689","NAME_AR":"جزر أولاند","NAME_BN":"অলান্দ দ্বীপপুঞ্জ","NAME_DE":"Åland","NAME_EN":"Åland","NAME_ES":"Åland","NAME_FA":"جزایر الند","NAME_FR":"Åland","NAME_EL":"Ώλαντ","NAME_HE":"אולנד","NAME_HI":"ऑलैण्ड द्वीपसमूह","NAME_HU":"Åland","NAME_ID":"Åland","NAME_IT":"Isole Åland","NAME_JA":"オーランド諸島","NAME_KO":"올란드 제도","NAME_NL":"Åland","NAME_PL":"Wyspy Alandzkie","NAME_PT":"Åland","NAME_RU":"Аландские острова","NAME_SV":"Åland","NAME_TR":"Åland","NAME_UK":"Аландські острови","NAME_UR":"جزائر ایلانڈ","NAME_VI":"Åland","NAME_ZH":"奥兰","NAME_ZHT":"奧蘭","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"Unrecognized","FCLASS_ES":"","FCLASS_CN":"Unrecognized","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[24.15546875000001,65.8052734375],[25.34785156250001,65.479248046875],[25.372656250000006,65.00947265625],[24.557910156250017,64.801025390625],[23.24873046875001,63.896142578124994],[22.243261718750006,63.437939453125],[21.103613281250006,62.622949218749994],[21.255957031250006,61.989648437499994],[21.60595703125,61.591552734375],[21.36054687500001,60.96748046875],[21.43603515625,60.59638671875],[22.57587890625001,60.35908203125],[22.79345703125,60.076806640624994],[23.721777343750006,59.965673828125],[25.65644531250001,60.333203125],[27.797656250000017,60.5361328125],[29.69013671875001,61.54609375],[31.28564453125,62.567822265625],[31.533984375000017,62.885400390624994],[31.18085937500001,63.20830078125],[30.05537109375001,63.689013671875],[30.50390625,64.02060546875],[30.10810546875001,64.36611328125],[30.072851562500006,64.7650390625],[29.60419921875001,64.968408203125],[29.903417968750006,66.091064453125],[29.087011718750006,66.970947265625],[29.941210937500017,67.5474609375],[29.343847656250006,68.061865234375],[28.470703125,68.48837890625],[28.9658203125,69.02197265625],[29.1416015625,69.671435546875],[27.889941406250017,70.061669921875],[26.525390625,69.9150390625],[26.011523437500017,69.65263671875],[25.748339843750017,68.99013671875],[24.94140625,68.59326171875],[23.85400390625,68.805908203125],[22.410937500000017,68.719873046875],[21.62177734375001,69.270703125],[20.622167968750006,69.036865234375],[21.997460937500023,68.52060546875],[22.78242187500001,68.391015625],[23.63886718750001,67.95439453125],[23.468066406250017,67.449951171875],[23.988574218750017,66.810546875],[23.701171875,66.48076171875],[24.15546875000001,65.8052734375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Finland","SOV_A3":"FI1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Finland","ADM0_A3":"FIN","GEOU_DIF":0,"GEOUNIT":"Finland","GU_A3":"FIN","SU_DIF":0,"SUBUNIT":"Finland","SU_A3":"FIN","BRK_DIFF":0,"NAME":"Finland","NAME_LONG":"Finland","BRK_A3":"FIN","BRK_NAME":"Finland","BRK_GROUP":"","ABBREV":"Fin.","POSTAL":"FIN","FORMAL_EN":"Republic of Finland","FORMAL_FR":"","NAME_CIAWF":"Finland","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Finland","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":6,"POP_EST":5520314,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":269296,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"FI","ISO_A2":"FI","ISO_A2_EH":"FI","ISO_A3":"FIN","ISO_A3_EH":"FIN","ISO_N3":"246","ISO_N3_EH":"246","UN_A3":"246","WB_A2":"FI","WB_A3":"FIN","WOE_ID":23424812,"WOE_ID_EH":23424812,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"FIN","ADM0_DIFF":"","ADM0_TLC":"FIN","ADM0_A3_US":"FIN","ADM0_A3_FR":"FIN","ADM0_A3_RU":"FIN","ADM0_A3_ES":"FIN","ADM0_A3_CN":"FIN","ADM0_A3_TW":"FIN","ADM0_A3_IN":"FIN","ADM0_A3_NP":"FIN","ADM0_A3_PK":"FIN","ADM0_A3_DE":"FIN","ADM0_A3_GB":"FIN","ADM0_A3_BR":"FIN","ADM0_A3_IL":"FIN","ADM0_A3_PS":"FIN","ADM0_A3_SA":"FIN","ADM0_A3_EG":"FIN","ADM0_A3_MA":"FIN","ADM0_A3_PT":"FIN","ADM0_A3_AR":"FIN","ADM0_A3_JP":"FIN","ADM0_A3_KO":"FIN","ADM0_A3_VN":"FIN","ADM0_A3_TR":"FIN","ADM0_A3_ID":"FIN","ADM0_A3_PL":"FIN","ADM0_A3_GR":"FIN","ADM0_A3_IT":"FIN","ADM0_A3_NL":"FIN","ADM0_A3_SE":"FIN","ADM0_A3_BD":"FIN","ADM0_A3_UA":"FIN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":27.276449,"LABEL_Y":63.252361,"NE_ID":1159320623,"WIKIDATAID":"Q33","NAME_AR":"فنلندا","NAME_BN":"ফিনল্যান্ড","NAME_DE":"Finnland","NAME_EN":"Finland","NAME_ES":"Finlandia","NAME_FA":"فنلاند","NAME_FR":"Finlande","NAME_EL":"Φινλανδία","NAME_HE":"פינלנד","NAME_HI":"फ़िनलैण्ड","NAME_HU":"Finnország","NAME_ID":"Finlandia","NAME_IT":"Finlandia","NAME_JA":"フィンランド","NAME_KO":"핀란드","NAME_NL":"Finland","NAME_PL":"Finlandia","NAME_PT":"Finlândia","NAME_RU":"Финляндия","NAME_SV":"Finland","NAME_TR":"Finlandiya","NAME_UK":"Фінляндія","NAME_UR":"فن لینڈ","NAME_VI":"Phần Lan","NAME_ZH":"芬兰","NAME_ZHT":"芬蘭","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[179.99921875,-16.168554687500006],[180,-16.152929687500006],[179.5517578125,-16.24990234375001],[178.80507812500002,-16.631445312500006],[179.0068359375,-16.900195312500003],[179.9279296875,-16.744433593750003],[179.74814453125003,-16.4462890625],[179.99921875,-16.168554687500006]]],[[[178.28017578125002,-17.37197265625001],[177.61796875000005,-17.461035156250006],[177.26396484375005,-17.86347656250001],[177.32138671875003,-18.07753906250001],[177.84707031250002,-18.2548828125],[178.66767578125,-18.080859375000003],[178.59160156250005,-17.651464843750006],[178.28017578125002,-17.37197265625001]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Fiji","SOV_A3":"FJI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Fiji","ADM0_A3":"FJI","GEOU_DIF":0,"GEOUNIT":"Fiji","GU_A3":"FJI","SU_DIF":0,"SUBUNIT":"Fiji","SU_A3":"FJI","BRK_DIFF":0,"NAME":"Fiji","NAME_LONG":"Fiji","BRK_A3":"FJI","BRK_NAME":"Fiji","BRK_GROUP":"","ABBREV":"Fiji","POSTAL":"FJ","FORMAL_EN":"Republic of Fiji","FORMAL_FR":"","NAME_CIAWF":"Fiji","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Fiji","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":1,"MAPCOLOR9":2,"MAPCOLOR13":2,"POP_EST":889953,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":5496,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"FJ","ISO_A2":"FJ","ISO_A2_EH":"FJ","ISO_A3":"FJI","ISO_A3_EH":"FJI","ISO_N3":"242","ISO_N3_EH":"242","UN_A3":"242","WB_A2":"FJ","WB_A3":"FJI","WOE_ID":23424813,"WOE_ID_EH":23424813,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"FJI","ADM0_DIFF":"","ADM0_TLC":"FJI","ADM0_A3_US":"FJI","ADM0_A3_FR":"FJI","ADM0_A3_RU":"FJI","ADM0_A3_ES":"FJI","ADM0_A3_CN":"FJI","ADM0_A3_TW":"FJI","ADM0_A3_IN":"FJI","ADM0_A3_NP":"FJI","ADM0_A3_PK":"FJI","ADM0_A3_DE":"FJI","ADM0_A3_GB":"FJI","ADM0_A3_BR":"FJI","ADM0_A3_IL":"FJI","ADM0_A3_PS":"FJI","ADM0_A3_SA":"FJI","ADM0_A3_EG":"FJI","ADM0_A3_MA":"FJI","ADM0_A3_PT":"FJI","ADM0_A3_AR":"FJI","ADM0_A3_JP":"FJI","ADM0_A3_KO":"FJI","ADM0_A3_VN":"FJI","ADM0_A3_TR":"FJI","ADM0_A3_ID":"FJI","ADM0_A3_PL":"FJI","ADM0_A3_GR":"FJI","ADM0_A3_IT":"FJI","ADM0_A3_NL":"FJI","ADM0_A3_SE":"FJI","ADM0_A3_BD":"FJI","ADM0_A3_UA":"FJI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Melanesia","REGION_WB":"East Asia & Pacific","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":177.975427,"LABEL_Y":-17.826099,"NE_ID":1159320625,"WIKIDATAID":"Q712","NAME_AR":"فيجي","NAME_BN":"ফিজি","NAME_DE":"Fidschi","NAME_EN":"Fiji","NAME_ES":"Fiyi","NAME_FA":"فیجی","NAME_FR":"Fidji","NAME_EL":"Φίτζι","NAME_HE":"פיג'י","NAME_HI":"फ़िजी","NAME_HU":"Fidzsi-szigetek","NAME_ID":"Fiji","NAME_IT":"Figi","NAME_JA":"フィジー","NAME_KO":"피지","NAME_NL":"Fiji","NAME_PL":"Fidżi","NAME_PT":"Fiji","NAME_RU":"Фиджи","NAME_SV":"Fiji","NAME_TR":"Fiji","NAME_UK":"Фіджі","NAME_UR":"فجی","NAME_VI":"Fiji","NAME_ZH":"斐济","NAME_ZHT":"斐濟","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[35.26835937500002,5.4922851562499915],[35.74501953125002,5.343994140625],[35.76308593750002,4.808007812499994],[36.08193359375002,4.44970703125],[36.90556640625002,4.4114746093749915],[38.08613281250001,3.6488281249999943],[39.49443359375002,3.4561035156249886],[39.84218750000002,3.8514648437499943],[40.765234375000006,4.2730468749999915],[41.22089843750001,3.943554687499997],[41.88398437500001,3.977734374999997],[42.02412109375001,4.137939453125],[42.791601562500006,4.2919921875],[43.01601562500002,4.5633300781249915],[43.53828125000001,4.84033203125],[44.02812500000002,4.950976562499989],[44.940527343750006,4.912011718749994],[45.93496093750002,5.997216796874994],[47.97822265625001,7.9970703125],[46.97822265625001,7.9970703125],[44.02285156250002,8.986035156249997],[43.482519531250006,9.379492187499991],[43.181640625,9.879980468749991],[42.84160156250002,10.203076171874997],[42.65957031250002,10.621386718749989],[42.92275390625002,10.999316406249989],[42.557714843750006,11.080761718749997],[41.79824218750002,10.98046875],[41.76650390625002,11.589111328125],[42.378515625000006,12.466406249999991],[41.76503906250002,13.183935546874991],[41.362890625000006,13.499804687500003],[40.76953125,14.144482421874997],[40.22148437500002,14.43115234375],[39.07421875,14.628222656250003],[38.50439453125,14.424414062499991],[37.88417968750002,14.852294921875],[37.57119140625002,14.149072265624994],[37.25722656250002,14.453759765624994],[37.024511718750006,14.27197265625],[36.52431640625002,14.2568359375],[36.390625,13.626074218749991],[36.21220703125002,13.271093749999991],[36.107519531250006,12.726464843749994],[35.59609375000002,12.537304687499997],[35.1123046875,11.816552734374994],[34.93144531250002,10.864794921874989],[34.571875000000006,10.880175781249989],[34.27568359375002,10.528124999999989],[34.29150390625,10.124755859375],[34.078125,9.461523437499991],[34.09453125000002,8.582226562499997],[33.95332031250001,8.443505859374994],[33.23427734375002,8.396386718749994],[33.01259765625002,7.9515136718749915],[33.22597656250002,7.760644531249994],[33.666113281250006,7.6709960937499915],[34.06425781250002,7.225732421874994],[34.71064453125001,6.660302734374994],[35.08193359375002,5.673144531249989],[35.26835937500002,5.4922851562499915]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Ethiopia","SOV_A3":"ETH","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Ethiopia","ADM0_A3":"ETH","GEOU_DIF":0,"GEOUNIT":"Ethiopia","GU_A3":"ETH","SU_DIF":0,"SUBUNIT":"Ethiopia","SU_A3":"ETH","BRK_DIFF":0,"NAME":"Ethiopia","NAME_LONG":"Ethiopia","BRK_A3":"ETH","BRK_NAME":"Ethiopia","BRK_GROUP":"","ABBREV":"Eth.","POSTAL":"ET","FORMAL_EN":"Federal Democratic Republic of Ethiopia","FORMAL_FR":"","NAME_CIAWF":"Ethiopia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Ethiopia","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":13,"POP_EST":112078730,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":95912,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"ET","ISO_A2":"ET","ISO_A2_EH":"ET","ISO_A3":"ETH","ISO_A3_EH":"ETH","ISO_N3":"231","ISO_N3_EH":"231","UN_A3":"231","WB_A2":"ET","WB_A3":"ETH","WOE_ID":23424808,"WOE_ID_EH":23424808,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ETH","ADM0_DIFF":"","ADM0_TLC":"ETH","ADM0_A3_US":"ETH","ADM0_A3_FR":"ETH","ADM0_A3_RU":"ETH","ADM0_A3_ES":"ETH","ADM0_A3_CN":"ETH","ADM0_A3_TW":"ETH","ADM0_A3_IN":"ETH","ADM0_A3_NP":"ETH","ADM0_A3_PK":"ETH","ADM0_A3_DE":"ETH","ADM0_A3_GB":"ETH","ADM0_A3_BR":"ETH","ADM0_A3_IL":"ETH","ADM0_A3_PS":"ETH","ADM0_A3_SA":"ETH","ADM0_A3_EG":"ETH","ADM0_A3_MA":"ETH","ADM0_A3_PT":"ETH","ADM0_A3_AR":"ETH","ADM0_A3_JP":"ETH","ADM0_A3_KO":"ETH","ADM0_A3_VN":"ETH","ADM0_A3_TR":"ETH","ADM0_A3_ID":"ETH","ADM0_A3_PL":"ETH","ADM0_A3_GR":"ETH","ADM0_A3_IT":"ETH","ADM0_A3_NL":"ETH","ADM0_A3_SE":"ETH","ADM0_A3_BD":"ETH","ADM0_A3_UA":"ETH","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":39.0886,"LABEL_Y":8.032795,"NE_ID":1159320617,"WIKIDATAID":"Q115","NAME_AR":"إثيوبيا","NAME_BN":"ইথিওপিয়া","NAME_DE":"Äthiopien","NAME_EN":"Ethiopia","NAME_ES":"Etiopía","NAME_FA":"اتیوپی","NAME_FR":"Éthiopie","NAME_EL":"Αιθιοπία","NAME_HE":"אתיופיה","NAME_HI":"इथियोपिया","NAME_HU":"Etiópia","NAME_ID":"Ethiopia","NAME_IT":"Etiopia","NAME_JA":"エチオピア","NAME_KO":"에티오피아","NAME_NL":"Ethiopië","NAME_PL":"Etiopia","NAME_PT":"Etiópia","NAME_RU":"Эфиопия","NAME_SV":"Etiopien","NAME_TR":"Etiyopya","NAME_UK":"Ефіопія","NAME_UR":"ایتھوپیا","NAME_VI":"Ethiopia","NAME_ZH":"埃塞俄比亚","NAME_ZHT":"衣索比亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[27.351953125000023,57.528124999999996],[27.752832031250023,57.841015625],[27.48779296875,58.270068359375],[27.464453125000006,58.84130859375],[28.012500000000017,59.484277343749994],[26.974707031250006,59.450634765625],[25.50927734375,59.639013671875],[24.38037109375,59.47265625],[23.494433593750017,59.195654296875],[23.50927734375,58.658544921875],[23.767578125,58.36083984375],[24.529101562500017,58.354248046875],[24.322558593750017,57.87060546875],[25.11103515625001,58.063427734375],[25.991113281250023,57.838183593749996],[26.532617187500023,57.531005859375],[27.351953125000023,57.528124999999996]]],[[[22.61738281250001,58.621240234374994],[22.081347656250017,58.478125],[22.152929687500006,58.11533203125],[23.292871093750023,58.48349609375],[22.61738281250001,58.621240234374994]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Estonia","SOV_A3":"EST","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Estonia","ADM0_A3":"EST","GEOU_DIF":0,"GEOUNIT":"Estonia","GU_A3":"EST","SU_DIF":0,"SUBUNIT":"Estonia","SU_A3":"EST","BRK_DIFF":0,"NAME":"Estonia","NAME_LONG":"Estonia","BRK_A3":"EST","BRK_NAME":"Estonia","BRK_GROUP":"","ABBREV":"Est.","POSTAL":"EST","FORMAL_EN":"Republic of Estonia","FORMAL_FR":"","NAME_CIAWF":"Estonia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Estonia","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":1,"MAPCOLOR13":10,"POP_EST":1326590,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":31471,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"EN","ISO_A2":"EE","ISO_A2_EH":"EE","ISO_A3":"EST","ISO_A3_EH":"EST","ISO_N3":"233","ISO_N3_EH":"233","UN_A3":"233","WB_A2":"EE","WB_A3":"EST","WOE_ID":23424805,"WOE_ID_EH":23424805,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"EST","ADM0_DIFF":"","ADM0_TLC":"EST","ADM0_A3_US":"EST","ADM0_A3_FR":"EST","ADM0_A3_RU":"EST","ADM0_A3_ES":"EST","ADM0_A3_CN":"EST","ADM0_A3_TW":"EST","ADM0_A3_IN":"EST","ADM0_A3_NP":"EST","ADM0_A3_PK":"EST","ADM0_A3_DE":"EST","ADM0_A3_GB":"EST","ADM0_A3_BR":"EST","ADM0_A3_IL":"EST","ADM0_A3_PS":"EST","ADM0_A3_SA":"EST","ADM0_A3_EG":"EST","ADM0_A3_MA":"EST","ADM0_A3_PT":"EST","ADM0_A3_AR":"EST","ADM0_A3_JP":"EST","ADM0_A3_KO":"EST","ADM0_A3_VN":"EST","ADM0_A3_TR":"EST","ADM0_A3_ID":"EST","ADM0_A3_PL":"EST","ADM0_A3_GR":"EST","ADM0_A3_IT":"EST","ADM0_A3_NL":"EST","ADM0_A3_SE":"EST","ADM0_A3_BD":"EST","ADM0_A3_UA":"EST","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":25.867126,"LABEL_Y":58.724865,"NE_ID":1159320615,"WIKIDATAID":"Q191","NAME_AR":"إستونيا","NAME_BN":"এস্তোনিয়া","NAME_DE":"Estland","NAME_EN":"Estonia","NAME_ES":"Estonia","NAME_FA":"استونی","NAME_FR":"Estonie","NAME_EL":"Εσθονία","NAME_HE":"אסטוניה","NAME_HI":"एस्टोनिया","NAME_HU":"Észtország","NAME_ID":"Estonia","NAME_IT":"Estonia","NAME_JA":"エストニア","NAME_KO":"에스토니아","NAME_NL":"Estland","NAME_PL":"Estonia","NAME_PT":"Estónia","NAME_RU":"Эстония","NAME_SV":"Estland","NAME_TR":"Estonya","NAME_UK":"Естонія","NAME_UR":"استونیا","NAME_VI":"Estonia","NAME_ZH":"爱沙尼亚","NAME_ZHT":"愛沙尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[36.52431640625002,14.2568359375],[37.024511718750006,14.27197265625],[37.25722656250002,14.453759765624994],[37.57119140625002,14.149072265624994],[37.88417968750002,14.852294921875],[38.50439453125,14.424414062499991],[39.07421875,14.628222656250003],[40.22148437500002,14.43115234375],[40.76953125,14.144482421874997],[41.362890625000006,13.499804687500003],[41.76503906250002,13.183935546874991],[42.378515625000006,12.466406249999991],[42.67011718750001,12.376562499999991],[43.11669921875,12.708593749999991],[42.79619140625002,12.8642578125],[42.2451171875,13.587646484375],[41.658203125,13.983056640624994],[41.17646484375001,14.620312499999997],[40.2041015625,15.014111328124997],[39.86376953125,15.470312499999991],[39.50654296875001,15.532128906249994],[39.298925781250006,15.921093749999997],[39.142578125,16.729150390624994],[38.911718750000006,17.427148437499994],[38.609472656250006,18.005078124999997],[38.253515625000006,17.584765625000003],[37.78242187500001,17.4580078125],[37.41103515625002,17.061718749999997],[37.00898437500001,17.058886718750003],[36.91376953125001,16.296191406250003],[36.4267578125,15.132080078125],[36.52431640625002,14.2568359375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Eritrea","SOV_A3":"ERI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Eritrea","ADM0_A3":"ERI","GEOU_DIF":0,"GEOUNIT":"Eritrea","GU_A3":"ERI","SU_DIF":0,"SUBUNIT":"Eritrea","SU_A3":"ERI","BRK_DIFF":0,"NAME":"Eritrea","NAME_LONG":"Eritrea","BRK_A3":"ERI","BRK_NAME":"Eritrea","BRK_GROUP":"","ABBREV":"Erit.","POSTAL":"ER","FORMAL_EN":"State of Eritrea","FORMAL_FR":"","NAME_CIAWF":"Eritrea","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Eritrea","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":2,"MAPCOLOR13":12,"POP_EST":6081196,"POP_RANK":13,"POP_YEAR":2020,"GDP_MD":2065,"GDP_YEAR":2011,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"ER","ISO_A2":"ER","ISO_A2_EH":"ER","ISO_A3":"ERI","ISO_A3_EH":"ERI","ISO_N3":"232","ISO_N3_EH":"232","UN_A3":"232","WB_A2":"ER","WB_A3":"ERI","WOE_ID":23424806,"WOE_ID_EH":23424806,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ERI","ADM0_DIFF":"","ADM0_TLC":"ERI","ADM0_A3_US":"ERI","ADM0_A3_FR":"ERI","ADM0_A3_RU":"ERI","ADM0_A3_ES":"ERI","ADM0_A3_CN":"ERI","ADM0_A3_TW":"ERI","ADM0_A3_IN":"ERI","ADM0_A3_NP":"ERI","ADM0_A3_PK":"ERI","ADM0_A3_DE":"ERI","ADM0_A3_GB":"ERI","ADM0_A3_BR":"ERI","ADM0_A3_IL":"ERI","ADM0_A3_PS":"ERI","ADM0_A3_SA":"ERI","ADM0_A3_EG":"ERI","ADM0_A3_MA":"ERI","ADM0_A3_PT":"ERI","ADM0_A3_AR":"ERI","ADM0_A3_JP":"ERI","ADM0_A3_KO":"ERI","ADM0_A3_VN":"ERI","ADM0_A3_TR":"ERI","ADM0_A3_ID":"ERI","ADM0_A3_PL":"ERI","ADM0_A3_GR":"ERI","ADM0_A3_IT":"ERI","ADM0_A3_NL":"ERI","ADM0_A3_SE":"ERI","ADM0_A3_BD":"ERI","ADM0_A3_UA":"ERI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":38.285566,"LABEL_Y":15.787401,"NE_ID":1159320581,"WIKIDATAID":"Q986","NAME_AR":"إريتريا","NAME_BN":"ইরিত্রিয়া","NAME_DE":"Eritrea","NAME_EN":"Eritrea","NAME_ES":"Eritrea","NAME_FA":"اریتره","NAME_FR":"Érythrée","NAME_EL":"Ερυθραία","NAME_HE":"אריתריאה","NAME_HI":"इरित्रिया","NAME_HU":"Eritrea","NAME_ID":"Eritrea","NAME_IT":"Eritrea","NAME_JA":"エリトリア","NAME_KO":"에리트레아","NAME_NL":"Eritrea","NAME_PL":"Erytrea","NAME_PT":"Eritreia","NAME_RU":"Эритрея","NAME_SV":"Eritrea","NAME_TR":"Eritre","NAME_UK":"Еритрея","NAME_UR":"اریتریا","NAME_VI":"Eritrea","NAME_ZH":"厄立特里亚","NAME_ZHT":"厄利垂亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[8.735742187500023,3.75830078125],[8.474902343750017,3.2646484375],[8.704003906250023,3.2236328125],[8.946093750000017,3.6275390624999915],[8.735742187500023,3.75830078125]]],[[[11.328710937500006,2.167431640624997],[9.979882812500023,2.1677734374999886],[9.80078125,2.304443359375],[9.807031250000023,1.927490234375],[9.385937500000011,1.1392578124999915],[9.5908203125,1.031982421875],[11.335351562500023,0.9997070312499972],[11.328710937500006,2.167431640624997]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Equatorial Guinea","SOV_A3":"GNQ","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Equatorial Guinea","ADM0_A3":"GNQ","GEOU_DIF":0,"GEOUNIT":"Equatorial Guinea","GU_A3":"GNQ","SU_DIF":0,"SUBUNIT":"Equatorial Guinea","SU_A3":"GNQ","BRK_DIFF":0,"NAME":"Eq. Guinea","NAME_LONG":"Equatorial Guinea","BRK_A3":"GNQ","BRK_NAME":"Eq. Guinea","BRK_GROUP":"","ABBREV":"Eq. G.","POSTAL":"GQ","FORMAL_EN":"Republic of Equatorial Guinea","FORMAL_FR":"","NAME_CIAWF":"Equatorial Guinea","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Equatorial Guinea","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":8,"POP_EST":1355986,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":11026,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"EK","ISO_A2":"GQ","ISO_A2_EH":"GQ","ISO_A3":"GNQ","ISO_A3_EH":"GNQ","ISO_N3":"226","ISO_N3_EH":"226","UN_A3":"226","WB_A2":"GQ","WB_A3":"GNQ","WOE_ID":23424804,"WOE_ID_EH":23424804,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GNQ","ADM0_DIFF":"","ADM0_TLC":"GNQ","ADM0_A3_US":"GNQ","ADM0_A3_FR":"GNQ","ADM0_A3_RU":"GNQ","ADM0_A3_ES":"GNQ","ADM0_A3_CN":"GNQ","ADM0_A3_TW":"GNQ","ADM0_A3_IN":"GNQ","ADM0_A3_NP":"GNQ","ADM0_A3_PK":"GNQ","ADM0_A3_DE":"GNQ","ADM0_A3_GB":"GNQ","ADM0_A3_BR":"GNQ","ADM0_A3_IL":"GNQ","ADM0_A3_PS":"GNQ","ADM0_A3_SA":"GNQ","ADM0_A3_EG":"GNQ","ADM0_A3_MA":"GNQ","ADM0_A3_PT":"GNQ","ADM0_A3_AR":"GNQ","ADM0_A3_JP":"GNQ","ADM0_A3_KO":"GNQ","ADM0_A3_VN":"GNQ","ADM0_A3_TR":"GNQ","ADM0_A3_ID":"GNQ","ADM0_A3_PL":"GNQ","ADM0_A3_GR":"GNQ","ADM0_A3_IT":"GNQ","ADM0_A3_NL":"GNQ","ADM0_A3_SE":"GNQ","ADM0_A3_BD":"GNQ","ADM0_A3_UA":"GNQ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":17,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":8.9902,"LABEL_Y":2.333,"NE_ID":1159320801,"WIKIDATAID":"Q983","NAME_AR":"غينيا الاستوائية","NAME_BN":"বিষুবীয় গিনি","NAME_DE":"Äquatorialguinea","NAME_EN":"Equatorial Guinea","NAME_ES":"Guinea Ecuatorial","NAME_FA":"گینه استوایی","NAME_FR":"Guinée équatoriale","NAME_EL":"Ισημερινή Γουινέα","NAME_HE":"גינאה המשוונית","NAME_HI":"भूमध्यरेखीय गिनी","NAME_HU":"Egyenlítői-Guinea","NAME_ID":"Guinea Khatulistiwa","NAME_IT":"Guinea Equatoriale","NAME_JA":"赤道ギニア","NAME_KO":"적도 기니","NAME_NL":"Equatoriaal-Guinea","NAME_PL":"Gwinea Równikowa","NAME_PT":"Guiné Equatorial","NAME_RU":"Экваториальная Гвинея","NAME_SV":"Ekvatorialguinea","NAME_TR":"Ekvator Ginesi","NAME_UK":"Екваторіальна Гвінея","NAME_UR":"استوائی گنی","NAME_VI":"Guinea Xích Đạo","NAME_ZH":"赤道几内亚","NAME_ZHT":"赤道幾內亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-89.36259765624999,14.416015625],[-89.872705078125,14.045605468749997],[-90.09521484375,13.736523437499997],[-89.80419921875,13.560107421875003],[-89.27763671874999,13.478076171875003],[-88.51201171874999,13.183935546874991],[-87.930859375,13.1806640625],[-87.814208984375,13.399169921875],[-87.71533203125,13.812695312499997],[-88.151025390625,13.987353515625003],[-88.51254882812499,13.978955078124997],[-89.36259765624999,14.416015625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"El Salvador","SOV_A3":"SLV","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"El Salvador","ADM0_A3":"SLV","GEOU_DIF":0,"GEOUNIT":"El Salvador","GU_A3":"SLV","SU_DIF":0,"SUBUNIT":"El Salvador","SU_A3":"SLV","BRK_DIFF":0,"NAME":"El Salvador","NAME_LONG":"El Salvador","BRK_A3":"SLV","BRK_NAME":"El Salvador","BRK_GROUP":"","ABBREV":"El. S.","POSTAL":"SV","FORMAL_EN":"Republic of El Salvador","FORMAL_FR":"","NAME_CIAWF":"El Salvador","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"El Salvador","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":6,"MAPCOLOR13":8,"POP_EST":6453553,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":27022,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"ES","ISO_A2":"SV","ISO_A2_EH":"SV","ISO_A3":"SLV","ISO_A3_EH":"SLV","ISO_N3":"222","ISO_N3_EH":"222","UN_A3":"222","WB_A2":"SV","WB_A3":"SLV","WOE_ID":23424807,"WOE_ID_EH":23424807,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"SLV","ADM0_DIFF":"","ADM0_TLC":"SLV","ADM0_A3_US":"SLV","ADM0_A3_FR":"SLV","ADM0_A3_RU":"SLV","ADM0_A3_ES":"SLV","ADM0_A3_CN":"SLV","ADM0_A3_TW":"SLV","ADM0_A3_IN":"SLV","ADM0_A3_NP":"SLV","ADM0_A3_PK":"SLV","ADM0_A3_DE":"SLV","ADM0_A3_GB":"SLV","ADM0_A3_BR":"SLV","ADM0_A3_IL":"SLV","ADM0_A3_PS":"SLV","ADM0_A3_SA":"SLV","ADM0_A3_EG":"SLV","ADM0_A3_MA":"SLV","ADM0_A3_PT":"SLV","ADM0_A3_AR":"SLV","ADM0_A3_JP":"SLV","ADM0_A3_KO":"SLV","ADM0_A3_VN":"SLV","ADM0_A3_TR":"SLV","ADM0_A3_ID":"SLV","ADM0_A3_PL":"SLV","ADM0_A3_GR":"SLV","ADM0_A3_IT":"SLV","ADM0_A3_NL":"SLV","ADM0_A3_SE":"SLV","ADM0_A3_BD":"SLV","ADM0_A3_UA":"SLV","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-88.890124,"LABEL_Y":13.685371,"NE_ID":1159321253,"WIKIDATAID":"Q792","NAME_AR":"السلفادور","NAME_BN":"এল সালভাদোর","NAME_DE":"El Salvador","NAME_EN":"El Salvador","NAME_ES":"El Salvador","NAME_FA":"السالوادور","NAME_FR":"Salvador","NAME_EL":"Ελ Σαλβαδόρ","NAME_HE":"אל סלוודור","NAME_HI":"अल साल्वाडोर","NAME_HU":"Salvador","NAME_ID":"El Salvador","NAME_IT":"El Salvador","NAME_JA":"エルサルバドル","NAME_KO":"엘살바도르","NAME_NL":"El Salvador","NAME_PL":"Salwador","NAME_PT":"El Salvador","NAME_RU":"Сальвадор","NAME_SV":"El Salvador","NAME_TR":"El Salvador","NAME_UK":"Сальвадор","NAME_UR":"ایل سیلواڈور","NAME_VI":"El Salvador","NAME_ZH":"萨尔瓦多","NAME_ZHT":"薩爾瓦多","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[36.87138671875002,21.996728515624994],[36.22968750000001,22.628808593749994],[35.697851562500006,22.946191406249994],[35.52275390625002,23.442529296874994],[35.62470703125001,24.06601562499999],[35.19414062500002,24.475146484375003],[34.56513671875001,25.691162109375],[33.959082031250006,26.6490234375],[33.89306640625,27.049462890624994],[33.5498046875,27.607373046874997],[33.54707031250001,27.898144531249997],[32.89824218750002,28.565234374999996],[32.6318359375,28.992236328124996],[32.72148437500002,29.521777343749996],[33.075781250000006,29.073046874999996],[33.24775390625001,28.567724609375],[33.76025390625,28.047656249999996],[34.22011718750002,27.764306640624994],[34.39970703125002,28.016015624999994],[34.736425781250006,29.27060546875],[34.904296875,29.477343749999996],[34.24531250000001,31.208300781249996],[34.19814453125002,31.322607421875],[33.66650390625,31.130419921874996],[33.1298828125,31.168164062499997],[32.10175781250001,31.092822265624996],[31.193945312500006,31.587597656249997],[30.700488281250017,31.403857421874996],[30.395117187500006,31.4576171875],[29.591601562500017,31.011523437499996],[29.072070312500017,30.830273437499997],[28.51484375000001,31.050439453124994],[27.967578125000017,31.097412109375],[27.248046875,31.377880859374997],[25.89326171875001,31.620898437499996],[25.382226562500023,31.51279296875],[25.150488281250006,31.654980468749997],[24.85273437500001,31.334814453125],[24.973925781250017,30.776562499999997],[24.726464843750023,30.2505859375],[24.980273437500017,29.181884765625],[24.980273437500017,26.487109374999996],[24.980273437500017,24.01694335937499],[24.980273437500017,21.995849609375],[28.036425781250017,21.995361328125],[29.564550781250006,21.9951171875],[31.434472656250023,21.995849609375],[33.91845703125,21.996240234374994],[36.87138671875002,21.996728515624994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Egypt","SOV_A3":"EGY","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Egypt","ADM0_A3":"EGY","GEOU_DIF":0,"GEOUNIT":"Egypt","GU_A3":"EGY","SU_DIF":0,"SUBUNIT":"Egypt","SU_A3":"EGY","BRK_DIFF":0,"NAME":"Egypt","NAME_LONG":"Egypt","BRK_A3":"EGY","BRK_NAME":"Egypt","BRK_GROUP":"","ABBREV":"Egypt","POSTAL":"EG","FORMAL_EN":"Arab Republic of Egypt","FORMAL_FR":"","NAME_CIAWF":"Egypt","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Egypt, Arab Rep.","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":6,"MAPCOLOR9":7,"MAPCOLOR13":2,"POP_EST":100388073,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":303092,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"EG","ISO_A2":"EG","ISO_A2_EH":"EG","ISO_A3":"EGY","ISO_A3_EH":"EGY","ISO_N3":"818","ISO_N3_EH":"818","UN_A3":"818","WB_A2":"EG","WB_A3":"EGY","WOE_ID":23424802,"WOE_ID_EH":23424802,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"EGY","ADM0_DIFF":"","ADM0_TLC":"EGY","ADM0_A3_US":"EGY","ADM0_A3_FR":"EGY","ADM0_A3_RU":"EGY","ADM0_A3_ES":"EGY","ADM0_A3_CN":"EGY","ADM0_A3_TW":"EGY","ADM0_A3_IN":"EGY","ADM0_A3_NP":"EGY","ADM0_A3_PK":"EGY","ADM0_A3_DE":"EGY","ADM0_A3_GB":"EGY","ADM0_A3_BR":"EGY","ADM0_A3_IL":"EGY","ADM0_A3_PS":"EGY","ADM0_A3_SA":"EGY","ADM0_A3_EG":"EGY","ADM0_A3_MA":"EGY","ADM0_A3_PT":"EGY","ADM0_A3_AR":"EGY","ADM0_A3_JP":"EGY","ADM0_A3_KO":"EGY","ADM0_A3_VN":"EGY","ADM0_A3_TR":"EGY","ADM0_A3_ID":"EGY","ADM0_A3_PL":"EGY","ADM0_A3_GR":"EGY","ADM0_A3_IT":"EGY","ADM0_A3_NL":"EGY","ADM0_A3_SE":"EGY","ADM0_A3_BD":"EGY","ADM0_A3_UA":"EGY","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":29.445837,"LABEL_Y":26.186173,"NE_ID":1159320575,"WIKIDATAID":"Q79","NAME_AR":"مصر","NAME_BN":"মিশর","NAME_DE":"Ägypten","NAME_EN":"Egypt","NAME_ES":"Egipto","NAME_FA":"مصر","NAME_FR":"Égypte","NAME_EL":"Αίγυπτος","NAME_HE":"מצרים","NAME_HI":"मिस्र","NAME_HU":"Egyiptom","NAME_ID":"Mesir","NAME_IT":"Egitto","NAME_JA":"エジプト","NAME_KO":"이집트","NAME_NL":"Egypte","NAME_PL":"Egipt","NAME_PT":"Egito","NAME_RU":"Египет","NAME_SV":"Egypten","NAME_TR":"Mısır","NAME_UK":"Єгипет","NAME_UR":"مصر","NAME_VI":"Ai Cập","NAME_ZH":"埃及","NAME_ZHT":"埃及","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-75.28447265624999,-0.10654296875000568],[-75.87978515625,0.15097656249999147],[-76.31103515625,0.448486328125],[-76.49462890625,0.23544921874999147],[-77.42275390625,0.42485351562498863],[-77.46767578125,0.6365234374999886],[-78.31210937499999,1.0460937499999972],[-78.85966796874999,1.4553710937499886],[-78.899658203125,1.2062499999999972],[-79.7412109375,0.9797851562499886],[-80.08828125,0.7847656249999915],[-80.02499999999999,0.41015625],[-80.13339843749999,-0.006054687500011369],[-80.48227539062499,-0.3682617187500057],[-80.55390625,-0.8479492187500028],[-80.90239257812499,-1.0789062500000028],[-80.801416015625,-1.3833984375000057],[-80.77036132812499,-2.07666015625],[-80.96279296875,-2.189257812500003],[-80.45009765625,-2.6259765625],[-79.7298828125,-2.5791015625],[-79.92158203125,-3.090136718750003],[-80.324658203125,-3.3878906250000114],[-80.17924804687499,-3.877734375000003],[-80.510009765625,-4.069531250000011],[-80.4884765625,-4.393652343750006],[-80.13955078125,-4.296093750000011],[-79.63852539062499,-4.454882812500003],[-79.33095703125,-4.927832031250006],[-79.07626953124999,-4.9906250000000085],[-78.41977539062499,-3.77685546875],[-78.34726562499999,-3.4312500000000057],[-77.860595703125,-2.9816406250000114],[-76.6791015625,-2.5625976562500057],[-76.089794921875,-2.133105468750003],[-75.570556640625,-1.53125],[-75.26323242187499,-0.5553710937500114],[-75.28447265624999,-0.10654296875000568]]],[[[-91.27216796875,0.025146484375],[-91.36918945312499,-0.2872070312500057],[-90.905517578125,-0.9405273437500057],[-90.79965820312499,-0.7520507812500057],[-91.27216796875,0.025146484375]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Ecuador","SOV_A3":"ECU","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Ecuador","ADM0_A3":"ECU","GEOU_DIF":0,"GEOUNIT":"Ecuador","GU_A3":"ECU","SU_DIF":0,"SUBUNIT":"Ecuador","SU_A3":"ECU","BRK_DIFF":0,"NAME":"Ecuador","NAME_LONG":"Ecuador","BRK_A3":"ECU","BRK_NAME":"Ecuador","BRK_GROUP":"","ABBREV":"Ecu.","POSTAL":"EC","FORMAL_EN":"Republic of Ecuador","FORMAL_FR":"","NAME_CIAWF":"Ecuador","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Ecuador","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":5,"MAPCOLOR9":2,"MAPCOLOR13":12,"POP_EST":17373662,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":107435,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"EC","ISO_A2":"EC","ISO_A2_EH":"EC","ISO_A3":"ECU","ISO_A3_EH":"ECU","ISO_N3":"218","ISO_N3_EH":"218","UN_A3":"218","WB_A2":"EC","WB_A3":"ECU","WOE_ID":23424801,"WOE_ID_EH":23424801,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ECU","ADM0_DIFF":"","ADM0_TLC":"ECU","ADM0_A3_US":"ECU","ADM0_A3_FR":"ECU","ADM0_A3_RU":"ECU","ADM0_A3_ES":"ECU","ADM0_A3_CN":"ECU","ADM0_A3_TW":"ECU","ADM0_A3_IN":"ECU","ADM0_A3_NP":"ECU","ADM0_A3_PK":"ECU","ADM0_A3_DE":"ECU","ADM0_A3_GB":"ECU","ADM0_A3_BR":"ECU","ADM0_A3_IL":"ECU","ADM0_A3_PS":"ECU","ADM0_A3_SA":"ECU","ADM0_A3_EG":"ECU","ADM0_A3_MA":"ECU","ADM0_A3_PT":"ECU","ADM0_A3_AR":"ECU","ADM0_A3_JP":"ECU","ADM0_A3_KO":"ECU","ADM0_A3_VN":"ECU","ADM0_A3_TR":"ECU","ADM0_A3_ID":"ECU","ADM0_A3_PL":"ECU","ADM0_A3_GR":"ECU","ADM0_A3_IT":"ECU","ADM0_A3_NL":"ECU","ADM0_A3_SE":"ECU","ADM0_A3_BD":"ECU","ADM0_A3_UA":"ECU","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-78.188375,"LABEL_Y":-1.259076,"NE_ID":1159320567,"WIKIDATAID":"Q736","NAME_AR":"الإكوادور","NAME_BN":"ইকুয়েডর","NAME_DE":"Ecuador","NAME_EN":"Ecuador","NAME_ES":"Ecuador","NAME_FA":"اکوادور","NAME_FR":"Équateur","NAME_EL":"Εκουαδόρ","NAME_HE":"אקוודור","NAME_HI":"ईक्वाडोर","NAME_HU":"Ecuador","NAME_ID":"Ekuador","NAME_IT":"Ecuador","NAME_JA":"エクアドル","NAME_KO":"에콰도르","NAME_NL":"Ecuador","NAME_PL":"Ekwador","NAME_PT":"Equador","NAME_RU":"Эквадор","NAME_SV":"Ecuador","NAME_TR":"Ekvador","NAME_UK":"Еквадор","NAME_UR":"ایکواڈور","NAME_VI":"Ecuador","NAME_ZH":"厄瓜多尔","NAME_ZHT":"厄瓜多爾","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.768310546875,18.03916015624999],[-71.395703125,17.64609374999999],[-71.02783203125,18.273193359375],[-70.18310546875,18.251757812500003],[-69.770654296875,18.443554687499997],[-68.9349609375,18.408007812500003],[-68.658837890625,18.22202148437499],[-68.35927734375,18.5380859375],[-68.684765625,18.90478515625],[-69.739404296875,19.299218749999994],[-70.12944335937499,19.636132812499994],[-70.95415039062499,19.913964843749994],[-71.557763671875,19.89536132812499],[-71.779248046875,19.718164062499994],[-71.65703124999999,19.130761718749994],[-71.768310546875,18.03916015624999]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Dominican Republic","SOV_A3":"DOM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Dominican Republic","ADM0_A3":"DOM","GEOU_DIF":0,"GEOUNIT":"Dominican Republic","GU_A3":"DOM","SU_DIF":0,"SUBUNIT":"Dominican Republic","SU_A3":"DOM","BRK_DIFF":0,"NAME":"Dominican Rep.","NAME_LONG":"Dominican Republic","BRK_A3":"DOM","BRK_NAME":"Dominican Rep.","BRK_GROUP":"","ABBREV":"Dom. Rep.","POSTAL":"DO","FORMAL_EN":"Dominican Republic","FORMAL_FR":"","NAME_CIAWF":"Dominican Republic","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Dominican Republic","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":7,"POP_EST":10738958,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":88941,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"DR","ISO_A2":"DO","ISO_A2_EH":"DO","ISO_A3":"DOM","ISO_A3_EH":"DOM","ISO_N3":"214","ISO_N3_EH":"214","UN_A3":"214","WB_A2":"DO","WB_A3":"DOM","WOE_ID":23424800,"WOE_ID_EH":23424800,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"DOM","ADM0_DIFF":"","ADM0_TLC":"DOM","ADM0_A3_US":"DOM","ADM0_A3_FR":"DOM","ADM0_A3_RU":"DOM","ADM0_A3_ES":"DOM","ADM0_A3_CN":"DOM","ADM0_A3_TW":"DOM","ADM0_A3_IN":"DOM","ADM0_A3_NP":"DOM","ADM0_A3_PK":"DOM","ADM0_A3_DE":"DOM","ADM0_A3_GB":"DOM","ADM0_A3_BR":"DOM","ADM0_A3_IL":"DOM","ADM0_A3_PS":"DOM","ADM0_A3_SA":"DOM","ADM0_A3_EG":"DOM","ADM0_A3_MA":"DOM","ADM0_A3_PT":"DOM","ADM0_A3_AR":"DOM","ADM0_A3_JP":"DOM","ADM0_A3_KO":"DOM","ADM0_A3_VN":"DOM","ADM0_A3_TR":"DOM","ADM0_A3_ID":"DOM","ADM0_A3_PL":"DOM","ADM0_A3_GR":"DOM","ADM0_A3_IT":"DOM","ADM0_A3_NL":"DOM","ADM0_A3_SE":"DOM","ADM0_A3_BD":"DOM","ADM0_A3_UA":"DOM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":14,"LONG_LEN":18,"ABBREV_LEN":9,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":-70.653998,"LABEL_Y":19.104137,"NE_ID":1159320563,"WIKIDATAID":"Q786","NAME_AR":"جمهورية الدومينيكان","NAME_BN":"ডোমিনিকান প্রজাতন্ত্র","NAME_DE":"Dominikanische Republik","NAME_EN":"Dominican Republic","NAME_ES":"República Dominicana","NAME_FA":"جمهوری دومینیکن","NAME_FR":"République dominicaine","NAME_EL":"Δομινικανή Δημοκρατία","NAME_HE":"הרפובליקה הדומיניקנית","NAME_HI":"डोमिनिकन गणराज्य","NAME_HU":"Dominikai Köztársaság","NAME_ID":"Republik Dominika","NAME_IT":"Repubblica Dominicana","NAME_JA":"ドミニカ共和国","NAME_KO":"도미니카 공화국","NAME_NL":"Dominicaanse Republiek","NAME_PL":"Dominikana","NAME_PT":"República Dominicana","NAME_RU":"Доминиканская Республика","NAME_SV":"Dominikanska republiken","NAME_TR":"Dominik Cumhuriyeti","NAME_UK":"Домініканська Республіка","NAME_UR":"جمہوریہ ڈومینیکن","NAME_VI":"Cộng hòa Dominica","NAME_ZH":"多米尼加","NAME_ZHT":"多明尼加","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Dominica","SOV_A3":"DMA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Dominica","ADM0_A3":"DMA","GEOU_DIF":0,"GEOUNIT":"Dominica","GU_A3":"DMA","SU_DIF":0,"SUBUNIT":"Dominica","SU_A3":"DMA","BRK_DIFF":0,"NAME":"Dominica","NAME_LONG":"Dominica","BRK_A3":"DMA","BRK_NAME":"Dominica","BRK_GROUP":"","ABBREV":"D'inca","POSTAL":"DM","FORMAL_EN":"Commonwealth of Dominica","FORMAL_FR":"","NAME_CIAWF":"Dominica","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Dominica","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":2,"MAPCOLOR13":12,"POP_EST":71808,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":582,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"DO","ISO_A2":"DM","ISO_A2_EH":"DM","ISO_A3":"DMA","ISO_A3_EH":"DMA","ISO_N3":"212","ISO_N3_EH":"212","UN_A3":"212","WB_A2":"DM","WB_A3":"DMA","WOE_ID":23424798,"WOE_ID_EH":23424798,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"DMA","ADM0_DIFF":"","ADM0_TLC":"DMA","ADM0_A3_US":"DMA","ADM0_A3_FR":"DMA","ADM0_A3_RU":"DMA","ADM0_A3_ES":"DMA","ADM0_A3_CN":"DMA","ADM0_A3_TW":"DMA","ADM0_A3_IN":"DMA","ADM0_A3_NP":"DMA","ADM0_A3_PK":"DMA","ADM0_A3_DE":"DMA","ADM0_A3_GB":"DMA","ADM0_A3_BR":"DMA","ADM0_A3_IL":"DMA","ADM0_A3_PS":"DMA","ADM0_A3_SA":"DMA","ADM0_A3_EG":"DMA","ADM0_A3_MA":"DMA","ADM0_A3_PT":"DMA","ADM0_A3_AR":"DMA","ADM0_A3_JP":"DMA","ADM0_A3_KO":"DMA","ADM0_A3_VN":"DMA","ADM0_A3_TR":"DMA","ADM0_A3_ID":"DMA","ADM0_A3_PL":"DMA","ADM0_A3_GR":"DMA","ADM0_A3_IT":"DMA","ADM0_A3_NL":"DMA","ADM0_A3_SE":"DMA","ADM0_A3_BD":"DMA","ADM0_A3_UA":"DMA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":6,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-61.344958,"LABEL_Y":15.458829,"NE_ID":1159320543,"WIKIDATAID":"Q784","NAME_AR":"دومينيكا","NAME_BN":"ডোমিনিকা","NAME_DE":"Dominica","NAME_EN":"Dominica","NAME_ES":"Dominica","NAME_FA":"دومینیکا","NAME_FR":"Dominique","NAME_EL":"Δομινίκα","NAME_HE":"דומיניקה","NAME_HI":"डोमिनिका","NAME_HU":"Dominikai Közösség","NAME_ID":"Dominika","NAME_IT":"Dominica","NAME_JA":"ドミニカ国","NAME_KO":"도미니카 연방","NAME_NL":"Dominica","NAME_PL":"Dominika","NAME_PT":"Dominica","NAME_RU":"Доминика","NAME_SV":"Dominica","NAME_TR":"Dominika","NAME_UK":"Домініка","NAME_UR":"ڈومینیکا","NAME_VI":"Dominica","NAME_ZH":"多米尼克","NAME_ZHT":"多米尼克","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[43.24599609375002,11.499804687499989],[42.79902343750001,11.739404296874994],[43.272070312500006,11.969531249999989],[43.409765625000006,12.18994140625],[43.11669921875,12.708593749999991],[42.67011718750001,12.376562499999991],[42.378515625000006,12.466406249999991],[41.76650390625002,11.589111328125],[41.79824218750002,10.98046875],[42.557714843750006,11.080761718749997],[42.92275390625002,10.999316406249989],[43.24599609375002,11.499804687499989]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Djibouti","SOV_A3":"DJI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Djibouti","ADM0_A3":"DJI","GEOU_DIF":0,"GEOUNIT":"Djibouti","GU_A3":"DJI","SU_DIF":0,"SUBUNIT":"Djibouti","SU_A3":"DJI","BRK_DIFF":0,"NAME":"Djibouti","NAME_LONG":"Djibouti","BRK_A3":"DJI","BRK_NAME":"Djibouti","BRK_GROUP":"","ABBREV":"Dji.","POSTAL":"DJ","FORMAL_EN":"Republic of Djibouti","FORMAL_FR":"","NAME_CIAWF":"Djibouti","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Djibouti","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":4,"MAPCOLOR13":8,"POP_EST":973560,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":3324,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"DJ","ISO_A2":"DJ","ISO_A2_EH":"DJ","ISO_A3":"DJI","ISO_A3_EH":"DJI","ISO_N3":"262","ISO_N3_EH":"262","UN_A3":"262","WB_A2":"DJ","WB_A3":"DJI","WOE_ID":23424797,"WOE_ID_EH":23424797,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"DJI","ADM0_DIFF":"","ADM0_TLC":"DJI","ADM0_A3_US":"DJI","ADM0_A3_FR":"DJI","ADM0_A3_RU":"DJI","ADM0_A3_ES":"DJI","ADM0_A3_CN":"DJI","ADM0_A3_TW":"DJI","ADM0_A3_IN":"DJI","ADM0_A3_NP":"DJI","ADM0_A3_PK":"DJI","ADM0_A3_DE":"DJI","ADM0_A3_GB":"DJI","ADM0_A3_BR":"DJI","ADM0_A3_IL":"DJI","ADM0_A3_PS":"DJI","ADM0_A3_SA":"DJI","ADM0_A3_EG":"DJI","ADM0_A3_MA":"DJI","ADM0_A3_PT":"DJI","ADM0_A3_AR":"DJI","ADM0_A3_JP":"DJI","ADM0_A3_KO":"DJI","ADM0_A3_VN":"DJI","ADM0_A3_TR":"DJI","ADM0_A3_ID":"DJI","ADM0_A3_PL":"DJI","ADM0_A3_GR":"DJI","ADM0_A3_IT":"DJI","ADM0_A3_NL":"DJI","ADM0_A3_SE":"DJI","ADM0_A3_BD":"DJI","ADM0_A3_UA":"DJI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":42.498825,"LABEL_Y":11.976343,"NE_ID":1159320541,"WIKIDATAID":"Q977","NAME_AR":"جيبوتي","NAME_BN":"জিবুতি","NAME_DE":"Dschibuti","NAME_EN":"Djibouti","NAME_ES":"Yibuti","NAME_FA":"جیبوتی","NAME_FR":"Djibouti","NAME_EL":"Τζιμπουτί","NAME_HE":"ג'יבוטי","NAME_HI":"जिबूती","NAME_HU":"Dzsibuti","NAME_ID":"Djibouti","NAME_IT":"Gibuti","NAME_JA":"ジブチ","NAME_KO":"지부티","NAME_NL":"Djibouti","NAME_PL":"Dżibuti","NAME_PT":"Djibouti","NAME_RU":"Джибути","NAME_SV":"Djibouti","NAME_TR":"Cibuti","NAME_UK":"Джибуті","NAME_UR":"جبوتی","NAME_VI":"Djibouti","NAME_ZH":"吉布提","NAME_ZHT":"吉布地","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-29.952880859375,83.56484375],[-32.98442382812499,83.599609375],[-43.194580078125,83.255126953125],[-46.478173828124994,82.951904296875],[-44.238867187500006,82.3681640625],[-45.29106445312499,81.82880859375],[-48.861181640625006,82.405419921875],[-50.894433593749994,81.89521484375],[-52.7755859375,82.321728515625],[-54.72587890624999,82.3513671875],[-58.71738281249999,82.09306640625],[-61.20292968749999,81.746875],[-61.435986328125,81.13359375],[-62.99326171874999,81.206982421875],[-66.99589843749999,80.41298828125],[-66.84365234375,80.076220703125],[-64.79228515624999,80.000634765625],[-65.96787109374999,79.132373046875],[-67.48222656249999,79.11689453125],[-68.99345703124999,78.857421875],[-72.39560546874999,78.504345703125],[-72.81806640625,78.1943359375],[-69.35136718749999,77.467138671875],[-70.86284179687499,77.175439453125],[-70.79282226562499,76.869091796875],[-69.25205078124999,76.6861328125],[-69.37290039062499,76.331884765625],[-66.826171875,75.968798828125],[-63.438867187499994,76.339453125],[-61.188232421875,76.157861328125],[-58.51621093749999,75.6890625],[-58.603466796875,75.385302734375],[-56.80131835937499,74.6716796875],[-56.70634765624999,74.219189453125],[-55.92949218749999,73.89541015625],[-56.10405273437499,73.558154296875],[-54.737939453124994,72.872509765625],[-55.601708984374994,72.453466796875],[-55.315576171874994,72.110693359375],[-55.59404296874999,71.553515625],[-54.68906249999999,71.367236328125],[-53.476025390625,71.640185546875],[-53.11704101562499,71.312890625],[-51.13007812499998,70.971728515625],[-51.52446289062499,70.439453125],[-52.405224609375,70.686767578125],[-54.16582031249999,70.8201171875],[-54.01445312499999,70.4216796875],[-52.254638671875,70.058935546875],[-50.5,69.935791015625],[-51.249414062499994,68.73994140625],[-53.039453124999994,68.610888671875],[-53.57797851562499,67.83681640625],[-53.41879882812499,67.574560546875],[-53.884423828124994,67.135546875],[-53.03828125,66.826806640625],[-53.634716796875,66.413671875],[-52.259033203125,65.154931640625],[-52.093408203124994,64.41591796875],[-51.451074218749994,63.90478515625],[-51.468847656250006,63.64228515625],[-50.33833007812498,62.828759765624994],[-50.319238281249994,62.473193359375],[-49.553466796875,62.23271484375],[-49.2890625,61.58994140625],[-48.92207031249998,61.27744140625],[-47.796240234375006,60.828857421875],[-46.87446289062498,60.81640625],[-46.01171875,61.096826171874994],[-46.046630859375,60.61572265625],[-45.379248046875006,60.2029296875],[-44.06547851562499,59.9248046875],[-43.32011718749999,59.928124999999994],[-42.717041015625,60.767480468749994],[-42.41874999999999,61.537011718749994],[-42.110205078125006,61.8572265625],[-42.32148437499998,62.152734374999994],[-42.152978515624994,62.56845703125],[-40.550390625000006,63.725244140624994],[-40.78173828125,64.22177734375],[-40.182226562500006,64.479931640625],[-40.65546874999998,64.91533203125],[-39.57792968749999,65.340771484375],[-39.9609375,65.556201171875],[-37.75419921874999,65.59306640625],[-36.37919921874999,65.830810546875],[-34.6328125,66.434765625],[-34.101660156250006,66.725927734375],[-33.156982421875,67.626708984375],[-32.274804687499994,67.9228515625],[-32.13725585937499,68.384912109375],[-30.97856445312499,68.061328125],[-29.868505859375006,68.311572265625],[-29.24951171875,68.298779296875],[-26.341406249999977,68.7021484375],[-23.088232421874977,69.882958984375],[-23.173242187499994,70.114599609375],[-26.747265624999983,70.475537109375],[-28.540917968749994,70.476904296875],[-27.68876953124999,70.99345703125],[-26.717919921874994,70.95048828125],[-25.74223632812499,71.18359375],[-24.37700195312499,71.14638671875],[-23.79179687499999,70.55517578125],[-23.327832031249983,70.4509765625],[-21.522656249999983,70.526220703125],[-21.75224609374999,71.4783203125],[-22.013330078124994,71.688818359375],[-24.666845703124977,72.437353515625],[-24.069042968749983,72.49873046875],[-22.293212890625,72.11953125],[-22.036328124999983,72.91845703125],[-22.18505859375,73.269873046875],[-20.509667968749994,73.49287109375],[-20.367285156249977,73.8482421875],[-21.12944335937499,74.110888671875],[-19.369140625,74.284033203125],[-19.22509765625,74.4794921875],[-20.484960937499977,75.3142578125],[-19.425976562499983,75.229833984375],[-19.508984374999983,75.75751953125],[-20.103613281249977,76.219091796875],[-21.569091796875,76.293701171875],[-21.877343749999994,76.573486328125],[-20.942089843749983,76.88701171875],[-18.51030273437499,76.778173828125],[-18.339013671874994,77.215283203125],[-20.23193359375,77.368408203125],[-20.86259765624999,77.911865234375],[-20.955664062499977,78.555029296875],[-19.074951171875,79.15234375],[-19.283593749999994,79.683154296875],[-20.13847656249999,79.803369140625],[-19.42919921875,80.25771484375],[-16.868408203125,80.1982421875],[-16.760595703124977,80.573388671875],[-14.503564453124994,80.76328125],[-11.52880859375,81.4240234375],[-12.19287109375,81.64912109375],[-15.555517578124977,81.83359375],[-17.226220703124994,81.430419921875],[-21.146582031249977,81.695166015625],[-21.337988281249977,82.068701171875],[-25.148828124999994,82.001123046875],[-21.520654296874994,82.59541015625],[-24.470312499999977,82.877392578125],[-25.947412109374994,83.2896484375],[-29.952880859375,83.56484375]]],[[[-52.73115234375,69.9447265625],[-53.375146484374994,70.2212890625],[-54.830468749999994,70.161083984375],[-54.804101562499994,69.630517578125],[-53.78305664062499,69.506298828125],[-53.57841796874999,69.256640625],[-52.11259765624999,69.489111328125],[-52.045312499999994,69.8072265625],[-52.73115234375,69.9447265625]]],[[[-25.432324218749983,70.921337890625],[-27.708935546874983,70.897119140625],[-27.89799804687499,70.45400390625],[-25.402246093749994,70.652685546875],[-25.432324218749983,70.921337890625]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Denmark","SOV_A3":"DN1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Greenland","ADM0_A3":"GRL","GEOU_DIF":0,"GEOUNIT":"Greenland","GU_A3":"GRL","SU_DIF":0,"SUBUNIT":"Greenland","SU_A3":"GRL","BRK_DIFF":0,"NAME":"Greenland","NAME_LONG":"Greenland","BRK_A3":"GRL","BRK_NAME":"Greenland","BRK_GROUP":"","ABBREV":"Grlnd.","POSTAL":"GL","FORMAL_EN":"Greenland","FORMAL_FR":"","NAME_CIAWF":"Greenland","NOTE_ADM0":"Den.","NOTE_BRK":"","NAME_SORT":"Greenland","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":12,"POP_EST":56225,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":3051,"GDP_YEAR":2018,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"GL","ISO_A2":"GL","ISO_A2_EH":"GL","ISO_A3":"GRL","ISO_A3_EH":"GRL","ISO_N3":"304","ISO_N3_EH":"304","UN_A3":"304","WB_A2":"GL","WB_A3":"GRL","WOE_ID":23424828,"WOE_ID_EH":23424828,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"GRL","ADM0_DIFF":"","ADM0_TLC":"GRL","ADM0_A3_US":"GRL","ADM0_A3_FR":"GRL","ADM0_A3_RU":"GRL","ADM0_A3_ES":"GRL","ADM0_A3_CN":"GRL","ADM0_A3_TW":"GRL","ADM0_A3_IN":"GRL","ADM0_A3_NP":"GRL","ADM0_A3_PK":"GRL","ADM0_A3_DE":"GRL","ADM0_A3_GB":"GRL","ADM0_A3_BR":"GRL","ADM0_A3_IL":"GRL","ADM0_A3_PS":"GRL","ADM0_A3_SA":"GRL","ADM0_A3_EG":"GRL","ADM0_A3_MA":"GRL","ADM0_A3_PT":"GRL","ADM0_A3_AR":"GRL","ADM0_A3_JP":"GRL","ADM0_A3_KO":"GRL","ADM0_A3_VN":"GRL","ADM0_A3_TR":"GRL","ADM0_A3_ID":"GRL","ADM0_A3_PL":"GRL","ADM0_A3_GR":"GRL","ADM0_A3_IT":"GRL","ADM0_A3_NL":"GRL","ADM0_A3_SE":"GRL","ADM0_A3_BD":"GRL","ADM0_A3_UA":"GRL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Northern America","REGION_WB":"Europe & Central Asia","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":-39.335251,"LABEL_Y":74.319387,"NE_ID":1159320551,"WIKIDATAID":"Q223","NAME_AR":"جرينلاند","NAME_BN":"গ্রিনল্যান্ড","NAME_DE":"Grönland","NAME_EN":"Greenland","NAME_ES":"Groenlandia","NAME_FA":"گرینلند","NAME_FR":"Groenland","NAME_EL":"Γροιλανδία","NAME_HE":"גרינלנד","NAME_HI":"ग्रीनलैण्ड","NAME_HU":"Grönland","NAME_ID":"Greenland","NAME_IT":"Groenlandia","NAME_JA":"グリーンランド","NAME_KO":"그린란드","NAME_NL":"Groenland","NAME_PL":"Grenlandia","NAME_PT":"Groenlândia","NAME_RU":"Гренландия","NAME_SV":"Grönland","NAME_TR":"Grönland","NAME_UK":"Гренландія","NAME_UR":"گرین لینڈ","NAME_VI":"Greenland","NAME_ZH":"格陵兰","NAME_ZHT":"格陵蘭","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Denmark","SOV_A3":"DN1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Faroe Islands","ADM0_A3":"FRO","GEOU_DIF":0,"GEOUNIT":"Faroe Islands","GU_A3":"FRO","SU_DIF":0,"SUBUNIT":"Faroe Islands","SU_A3":"FRO","BRK_DIFF":0,"NAME":"Faeroe Is.","NAME_LONG":"Faeroe Islands","BRK_A3":"FRO","BRK_NAME":"Faeroe Islands","BRK_GROUP":"","ABBREV":"Faeroe Is.","POSTAL":"FO","FORMAL_EN":"Føroyar Is. (Faeroe Is.)","FORMAL_FR":"","NAME_CIAWF":"Faroe Islands","NOTE_ADM0":"Den.","NOTE_BRK":"","NAME_SORT":"Faeroe Islands","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":12,"POP_EST":48678,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":3116,"GDP_YEAR":2018,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"FO","ISO_A2":"FO","ISO_A2_EH":"FO","ISO_A3":"FRO","ISO_A3_EH":"FRO","ISO_N3":"234","ISO_N3_EH":"234","UN_A3":"234","WB_A2":"FO","WB_A3":"FRO","WOE_ID":23424816,"WOE_ID_EH":23424816,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"FRO","ADM0_DIFF":"","ADM0_TLC":"FRO","ADM0_A3_US":"FRO","ADM0_A3_FR":"FRO","ADM0_A3_RU":"FRO","ADM0_A3_ES":"FRO","ADM0_A3_CN":"FRO","ADM0_A3_TW":"FRO","ADM0_A3_IN":"FRO","ADM0_A3_NP":"FRO","ADM0_A3_PK":"FRO","ADM0_A3_DE":"FRO","ADM0_A3_GB":"FRO","ADM0_A3_BR":"FRO","ADM0_A3_IL":"FRO","ADM0_A3_PS":"FRO","ADM0_A3_SA":"FRO","ADM0_A3_EG":"FRO","ADM0_A3_MA":"FRO","ADM0_A3_PT":"FRO","ADM0_A3_AR":"FRO","ADM0_A3_JP":"FRO","ADM0_A3_KO":"FRO","ADM0_A3_VN":"FRO","ADM0_A3_TR":"FRO","ADM0_A3_ID":"FRO","ADM0_A3_PL":"FRO","ADM0_A3_GR":"FRO","ADM0_A3_IT":"FRO","ADM0_A3_NL":"FRO","ADM0_A3_SE":"FRO","ADM0_A3_BD":"FRO","ADM0_A3_UA":"FRO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":14,"ABBREV_LEN":10,"TINY":3,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-7.058429,"LABEL_Y":62.185604,"NE_ID":1159320549,"WIKIDATAID":"Q4628","NAME_AR":"جزر فارو","NAME_BN":"ফ্যারো দ্বীপপুঞ্জ","NAME_DE":"Färöer","NAME_EN":"Faroe Islands","NAME_ES":"Islas Feroe","NAME_FA":"جزایر فارو","NAME_FR":"îles Féroé","NAME_EL":"Νήσοι Φερόες","NAME_HE":"איי פארו","NAME_HI":"फ़रो द्वीपसमूह","NAME_HU":"Feröer","NAME_ID":"Kepulauan Faroe","NAME_IT":"Fær Øer","NAME_JA":"フェロー諸島","NAME_KO":"페로 제도","NAME_NL":"Faeröer","NAME_PL":"Wyspy Owcze","NAME_PT":"Ilhas Feroe","NAME_RU":"Фарерские острова","NAME_SV":"Färöarna","NAME_TR":"Faroe Adaları","NAME_UK":"Фарерські острови","NAME_UR":"جزائرفارو","NAME_VI":"Quần đảo Faroe","NAME_ZH":"法罗群岛","NAME_ZHT":"法羅群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[12.568750000000023,55.78505859375],[12.218945312500011,56.11865234375],[10.978906250000023,55.721533203125],[11.286328125000011,55.204443359375],[11.65380859375,55.1869140625],[12.568750000000023,55.78505859375]]],[[[9.73974609375,54.825537109375],[9.591113281250017,55.493212890624996],[10.183007812500023,55.865185546875],[10.28271484375,56.6205078125],[10.537109375,57.448535156249996],[9.962304687500023,57.58095703125],[9.554296875000006,57.232470703124996],[8.618554687500023,57.111279296875],[8.163964843750023,56.606884765625],[8.132128906250017,55.5998046875],[8.615917968750011,55.418212890625],[8.670312500000023,54.90341796875],[9.73974609375,54.825537109375]]],[[[10.645117187500006,55.609814453125],[9.860644531250017,55.515478515625],[9.98876953125,55.16318359375],[10.785253906250006,55.1333984375],[10.645117187500006,55.609814453125]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Denmark","SOV_A3":"DN1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Denmark","ADM0_A3":"DNK","GEOU_DIF":0,"GEOUNIT":"Denmark","GU_A3":"DNK","SU_DIF":0,"SUBUNIT":"Denmark","SU_A3":"DNK","BRK_DIFF":0,"NAME":"Denmark","NAME_LONG":"Denmark","BRK_A3":"DNK","BRK_NAME":"Denmark","BRK_GROUP":"","ABBREV":"Den.","POSTAL":"DK","FORMAL_EN":"Kingdom of Denmark","FORMAL_FR":"","NAME_CIAWF":"Denmark","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Denmark","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":12,"POP_EST":5818553,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":350104,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"DA","ISO_A2":"DK","ISO_A2_EH":"DK","ISO_A3":"DNK","ISO_A3_EH":"DNK","ISO_N3":"208","ISO_N3_EH":"208","UN_A3":"208","WB_A2":"DK","WB_A3":"DNK","WOE_ID":23424796,"WOE_ID_EH":23424796,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"DNK","ADM0_DIFF":"","ADM0_TLC":"DNK","ADM0_A3_US":"DNK","ADM0_A3_FR":"DNK","ADM0_A3_RU":"DNK","ADM0_A3_ES":"DNK","ADM0_A3_CN":"DNK","ADM0_A3_TW":"DNK","ADM0_A3_IN":"DNK","ADM0_A3_NP":"DNK","ADM0_A3_PK":"DNK","ADM0_A3_DE":"DNK","ADM0_A3_GB":"DNK","ADM0_A3_BR":"DNK","ADM0_A3_IL":"DNK","ADM0_A3_PS":"DNK","ADM0_A3_SA":"DNK","ADM0_A3_EG":"DNK","ADM0_A3_MA":"DNK","ADM0_A3_PT":"DNK","ADM0_A3_AR":"DNK","ADM0_A3_JP":"DNK","ADM0_A3_KO":"DNK","ADM0_A3_VN":"DNK","ADM0_A3_TR":"DNK","ADM0_A3_ID":"DNK","ADM0_A3_PL":"DNK","ADM0_A3_GR":"DNK","ADM0_A3_IT":"DNK","ADM0_A3_NL":"DNK","ADM0_A3_SE":"DNK","ADM0_A3_BD":"DNK","ADM0_A3_UA":"DNK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Northern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":9.018163,"LABEL_Y":55.966965,"NE_ID":1159320547,"WIKIDATAID":"Q35","NAME_AR":"الدنمارك","NAME_BN":"ডেনমার্ক","NAME_DE":"Dänemark","NAME_EN":"Denmark","NAME_ES":"Dinamarca","NAME_FA":"دانمارک","NAME_FR":"Danemark","NAME_EL":"Δανία","NAME_HE":"דנמרק","NAME_HI":"डेनमार्क","NAME_HU":"Dánia","NAME_ID":"Denmark","NAME_IT":"Danimarca","NAME_JA":"デンマーク","NAME_KO":"덴마크","NAME_NL":"Denemarken","NAME_PL":"Dania","NAME_PT":"Dinamarca","NAME_RU":"Дания","NAME_SV":"Danmark","NAME_TR":"Danimarka","NAME_UK":"Данія","NAME_UR":"ڈنمارک","NAME_VI":"Đan Mạch","NAME_ZH":"丹麦","NAME_ZHT":"丹麥","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[18.83222656250001,49.510791015624996],[18.562402343750023,49.879345703125],[17.874804687500017,49.972265625],[17.151953125000006,50.378320312499994],[16.679101562500023,50.097460937499996],[16.007226562500023,50.611621093749996],[14.809375000000017,50.858984375],[14.369042968750023,50.898730468749996],[12.45263671875,50.3498046875],[12.27734375,50.181445312499996],[12.632031250000011,49.461230468749996],[13.814746093750017,48.766943359375],[14.049121093750017,48.602490234375],[14.691308593750023,48.59921875],[14.97216796875,48.983935546874996],[16.057226562500006,48.754785156249994],[16.477929687500023,48.800097656249996],[16.953125,48.598828125],[17.1884765625,48.8609375],[17.75849609375001,48.888134765625],[18.160937500000017,49.257373046874996],[18.83222656250001,49.510791015624996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Czechia","SOV_A3":"CZE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Czechia","ADM0_A3":"CZE","GEOU_DIF":0,"GEOUNIT":"Czechia","GU_A3":"CZE","SU_DIF":0,"SUBUNIT":"Czechia","SU_A3":"CZE","BRK_DIFF":0,"NAME":"Czechia","NAME_LONG":"Czech Republic","BRK_A3":"CZE","BRK_NAME":"Czechia","BRK_GROUP":"","ABBREV":"Cz.","POSTAL":"CZ","FORMAL_EN":"Czech Republic","FORMAL_FR":"la République tchèque","NAME_CIAWF":"Czechia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Czechia","NAME_ALT":"Česko","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":2,"MAPCOLOR13":6,"POP_EST":10669709,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":250680,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"EZ","ISO_A2":"CZ","ISO_A2_EH":"CZ","ISO_A3":"CZE","ISO_A3_EH":"CZE","ISO_N3":"203","ISO_N3_EH":"203","UN_A3":"203","WB_A2":"CZ","WB_A3":"CZE","WOE_ID":23424810,"WOE_ID_EH":23424810,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CZE","ADM0_DIFF":"","ADM0_TLC":"CZE","ADM0_A3_US":"CZE","ADM0_A3_FR":"CZE","ADM0_A3_RU":"CZE","ADM0_A3_ES":"CZE","ADM0_A3_CN":"CZE","ADM0_A3_TW":"CZE","ADM0_A3_IN":"CZE","ADM0_A3_NP":"CZE","ADM0_A3_PK":"CZE","ADM0_A3_DE":"CZE","ADM0_A3_GB":"CZE","ADM0_A3_BR":"CZE","ADM0_A3_IL":"CZE","ADM0_A3_PS":"CZE","ADM0_A3_SA":"CZE","ADM0_A3_EG":"CZE","ADM0_A3_MA":"CZE","ADM0_A3_PT":"CZE","ADM0_A3_AR":"CZE","ADM0_A3_JP":"CZE","ADM0_A3_KO":"CZE","ADM0_A3_VN":"CZE","ADM0_A3_TR":"CZE","ADM0_A3_ID":"CZE","ADM0_A3_PL":"CZE","ADM0_A3_GR":"CZE","ADM0_A3_IT":"CZE","ADM0_A3_NL":"CZE","ADM0_A3_SE":"CZE","ADM0_A3_BD":"CZE","ADM0_A3_UA":"CZE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":14,"ABBREV_LEN":3,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":15.377555,"LABEL_Y":49.882364,"NE_ID":1159320535,"WIKIDATAID":"Q213","NAME_AR":"التشيك","NAME_BN":"চেক প্রজাতন্ত্র","NAME_DE":"Tschechien","NAME_EN":"Czech Republic","NAME_ES":"República Checa","NAME_FA":"جمهوری چک","NAME_FR":"Tchéquie","NAME_EL":"Τσεχία","NAME_HE":"צ'כיה","NAME_HI":"चेक गणराज्य","NAME_HU":"Csehország","NAME_ID":"Republik Ceko","NAME_IT":"Repubblica Ceca","NAME_JA":"チェコ","NAME_KO":"체코","NAME_NL":"Tsjechië","NAME_PL":"Czechy","NAME_PT":"Chéquia","NAME_RU":"Чехия","NAME_SV":"Tjeckien","NAME_TR":"Çek Cumhuriyeti","NAME_UK":"Чехія","NAME_UR":"چیک جمہوریہ","NAME_VI":"Cộng hòa Séc","NAME_ZH":"捷克","NAME_ZHT":"捷克共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[34.004492187500006,35.065234374999996],[33.941992187500006,35.292041015624996],[32.94160156250001,35.390429687499996],[32.71269531250002,35.171044921874994],[34.004492187500006,35.065234374999996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Northern Cyprus","SOV_A3":"CYN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Northern Cyprus","ADM0_A3":"CYN","GEOU_DIF":0,"GEOUNIT":"Northern Cyprus","GU_A3":"CYN","SU_DIF":0,"SUBUNIT":"Northern Cyprus","SU_A3":"CYN","BRK_DIFF":0,"NAME":"N. Cyprus","NAME_LONG":"Northern Cyprus","BRK_A3":"CYN","BRK_NAME":"N. Cyprus","BRK_GROUP":"","ABBREV":"N. Cy.","POSTAL":"CN","FORMAL_EN":"Turkish Republic of Northern Cyprus","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Self admin.","NOTE_BRK":"Self admin.; Claimed by Cyprus","NAME_SORT":"Cyprus, Northern","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":8,"POP_EST":326000,"POP_RANK":10,"POP_YEAR":2017,"GDP_MD":3600,"GDP_YEAR":2013,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"-99","ISO_A2":"-99","ISO_A2_EH":"-99","ISO_A3":"-99","ISO_A3_EH":"-99","ISO_N3":"-99","ISO_N3_EH":"-99","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":-90,"WOE_ID_EH":23424995,"WOE_NOTE":"WOE lists as subunit of united Cyprus","ADM0_ISO":"CYP","ADM0_DIFF":"1","ADM0_TLC":"CYN","ADM0_A3_US":"CYP","ADM0_A3_FR":"CYP","ADM0_A3_RU":"CYP","ADM0_A3_ES":"CYP","ADM0_A3_CN":"CYP","ADM0_A3_TW":"CYP","ADM0_A3_IN":"CYP","ADM0_A3_NP":"CYP","ADM0_A3_PK":"CYP","ADM0_A3_DE":"CYP","ADM0_A3_GB":"CYP","ADM0_A3_BR":"CYP","ADM0_A3_IL":"CYP","ADM0_A3_PS":"CYP","ADM0_A3_SA":"CYP","ADM0_A3_EG":"CYP","ADM0_A3_MA":"CYP","ADM0_A3_PT":"CYP","ADM0_A3_AR":"CYP","ADM0_A3_JP":"CYP","ADM0_A3_KO":"CYP","ADM0_A3_VN":"CYP","ADM0_A3_TR":"CYN","ADM0_A3_ID":"CYP","ADM0_A3_PL":"CYP","ADM0_A3_GR":"CYP","ADM0_A3_IT":"CYP","ADM0_A3_NL":"CYP","ADM0_A3_SE":"CYP","ADM0_A3_BD":"CYP","ADM0_A3_UA":"CYP","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":9,"LONG_LEN":15,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":6,"MAX_LABEL":10,"LABEL_X":33.692434,"LABEL_Y":35.216071,"NE_ID":1159320531,"WIKIDATAID":"Q23681","NAME_AR":"قبرص الشمالية","NAME_BN":"উত্তর সাইপ্রাস","NAME_DE":"Türkische Republik Nordzypern","NAME_EN":"Turkish Republic of Northern Cyprus","NAME_ES":"República Turca del Norte de Chipre","NAME_FA":"جمهوری ترک قبرس شمالی","NAME_FR":"Chypre du Nord","NAME_EL":"Τουρκική Δημοκρατία της Βόρειας Κύπρου","NAME_HE":"הרפובליקה הטורקית של צפון קפריסין","NAME_HI":"उत्तरी साइप्रस","NAME_HU":"Észak-Ciprus","NAME_ID":"Republik Turki Siprus Utara","NAME_IT":"Cipro del Nord","NAME_JA":"北キプロス・トルコ共和国","NAME_KO":"북키프로스","NAME_NL":"Noord-Cyprus","NAME_PL":"Cypr Północny","NAME_PT":"República Turca do Chipre do Norte","NAME_RU":"Турецкая Республика Северного Кипра","NAME_SV":"Nordcypern","NAME_TR":"Kuzey Kıbrıs Türk Cumhuriyeti","NAME_UK":"Турецька Республіка Північного Кіпру","NAME_UR":"ترک جمہوریہ شمالی قبرص","NAME_VI":"Bắc Síp","NAME_ZH":"北塞浦路斯土耳其共和国","NAME_ZHT":"北賽普勒斯土耳其共和國","FCLASS_ISO":"Unrecognized","TLC_DIFF":"1","FCLASS_TLC":"Admin-0 country","FCLASS_US":"Admin-0 breakaway and disputed","FCLASS_FR":"Unrecognized","FCLASS_RU":"Unrecognized","FCLASS_ES":"Unrecognized","FCLASS_CN":"Unrecognized","FCLASS_TW":"Unrecognized","FCLASS_IN":"Unrecognized","FCLASS_NP":"Unrecognized","FCLASS_PK":"Unrecognized","FCLASS_DE":"Unrecognized","FCLASS_GB":"Unrecognized","FCLASS_BR":"Unrecognized","FCLASS_IL":"Unrecognized","FCLASS_PS":"Unrecognized","FCLASS_SA":"Unrecognized","FCLASS_EG":"Unrecognized","FCLASS_MA":"Unrecognized","FCLASS_PT":"Unrecognized","FCLASS_AR":"Unrecognized","FCLASS_JP":"Unrecognized","FCLASS_KO":"Unrecognized","FCLASS_VN":"Unrecognized","FCLASS_TR":"Admin-0 country","FCLASS_ID":"Unrecognized","FCLASS_PL":"Unrecognized","FCLASS_GR":"Unrecognized","FCLASS_IT":"Unrecognized","FCLASS_NL":"Unrecognized","FCLASS_SE":"Unrecognized","FCLASS_BD":"Unrecognized","FCLASS_UA":"Unrecognized"}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[32.71269531250002,35.171044921874994],[32.31718750000002,34.9533203125],[32.44902343750002,34.729443359375],[32.94179687500002,34.57587890625],[34.004492187500006,35.065234374999996],[32.71269531250002,35.171044921874994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Cyprus","SOV_A3":"CYP","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Cyprus","ADM0_A3":"CYP","GEOU_DIF":0,"GEOUNIT":"Cyprus","GU_A3":"CYP","SU_DIF":0,"SUBUNIT":"Cyprus","SU_A3":"CYP","BRK_DIFF":0,"NAME":"Cyprus","NAME_LONG":"Cyprus","BRK_A3":"CYP","BRK_NAME":"Cyprus","BRK_GROUP":"","ABBREV":"Cyp.","POSTAL":"CY","FORMAL_EN":"Republic of Cyprus","FORMAL_FR":"","NAME_CIAWF":"Cyprus","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Cyprus","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":3,"MAPCOLOR13":7,"POP_EST":1198575,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":24948,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"CY","ISO_A2":"CY","ISO_A2_EH":"CY","ISO_A3":"CYP","ISO_A3_EH":"CYP","ISO_N3":"196","ISO_N3_EH":"196","UN_A3":"196","WB_A2":"CY","WB_A3":"CYP","WOE_ID":-90,"WOE_ID_EH":23424994,"WOE_NOTE":"WOE lists as subunit of united Cyprus","ADM0_ISO":"CYP","ADM0_DIFF":"","ADM0_TLC":"CYP","ADM0_A3_US":"CYP","ADM0_A3_FR":"CYP","ADM0_A3_RU":"CYP","ADM0_A3_ES":"CYP","ADM0_A3_CN":"CYP","ADM0_A3_TW":"CYP","ADM0_A3_IN":"CYP","ADM0_A3_NP":"CYP","ADM0_A3_PK":"CYP","ADM0_A3_DE":"CYP","ADM0_A3_GB":"CYP","ADM0_A3_BR":"CYP","ADM0_A3_IL":"CYP","ADM0_A3_PS":"CYP","ADM0_A3_SA":"CYP","ADM0_A3_EG":"CYP","ADM0_A3_MA":"CYP","ADM0_A3_PT":"CYP","ADM0_A3_AR":"CYP","ADM0_A3_JP":"CYP","ADM0_A3_KO":"CYP","ADM0_A3_VN":"CYP","ADM0_A3_TR":"CYP","ADM0_A3_ID":"CYP","ADM0_A3_PL":"CYP","ADM0_A3_GR":"CYP","ADM0_A3_IT":"CYP","ADM0_A3_NL":"CYP","ADM0_A3_SE":"CYP","ADM0_A3_BD":"CYP","ADM0_A3_UA":"CYP","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":33.084182,"LABEL_Y":34.913329,"NE_ID":1159320533,"WIKIDATAID":"Q229","NAME_AR":"قبرص","NAME_BN":"সাইপ্রাস","NAME_DE":"Republik Zypern","NAME_EN":"Cyprus","NAME_ES":"Chipre","NAME_FA":"قبرس","NAME_FR":"Chypre","NAME_EL":"Κύπρος","NAME_HE":"קפריסין","NAME_HI":"साइप्रस","NAME_HU":"Ciprus","NAME_ID":"Siprus","NAME_IT":"Cipro","NAME_JA":"キプロス","NAME_KO":"키프로스","NAME_NL":"Cyprus","NAME_PL":"Cypr","NAME_PT":"Chipre","NAME_RU":"Кипр","NAME_SV":"Cypern","NAME_TR":"Kıbrıs Cumhuriyeti","NAME_UK":"Кіпр","NAME_UR":"قبرص","NAME_VI":"Cộng hòa Síp","NAME_ZH":"塞浦路斯","NAME_ZHT":"賽普勒斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-81.83745117187499,23.163037109374997],[-82.10136718749999,23.1904296875],[-83.2578125,22.967578125000003],[-84.044921875,22.666015625],[-84.361279296875,22.37890625],[-84.3263671875,22.07431640624999],[-83.379638671875,22.22299804687499],[-82.738037109375,22.689257812500003],[-81.90341796874999,22.679003906250003],[-81.81621093749999,22.2001953125],[-80.9619140625,22.052880859374994],[-80.49907226562499,22.063525390625003],[-80.23134765625,21.87216796874999],[-79.2744140625,21.562646484374994],[-78.636474609375,21.515527343749994],[-78.49077148437499,21.0537109375],[-77.997314453125,20.715380859375003],[-77.22958984374999,20.643749999999997],[-77.21337890625,20.30039062499999],[-77.715087890625,19.85546875],[-76.158447265625,19.98974609375],[-75.11640625,19.901416015625003],[-74.25283203125,20.07968749999999],[-74.882568359375,20.650634765625],[-75.6427734375,20.73349609374999],[-75.72294921874999,21.111035156249997],[-76.647412109375,21.28452148437499],[-77.497265625,21.871630859375003],[-77.86503906249999,21.900585937499997],[-78.686474609375,22.366845703124994],[-79.27568359374999,22.407617187499994],[-79.67666015625,22.743066406249994],[-80.650146484375,23.103076171875003],[-81.17861328125,23.05966796874999],[-81.83745117187499,23.163037109374997]]],[[[-82.561767578125,21.571679687499994],[-82.71455078125,21.890283203124994],[-83.08251953125,21.791406249999994],[-82.853173828125,21.443896484375003],[-82.561767578125,21.571679687499994]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Cuba","SOV_A3":"CU1","ADM0_DIF":1,"LEVEL":1,"TYPE":"Sovereignty","TLC":"1","ADMIN":"Cuba","ADM0_A3":"CUB","GEOU_DIF":0,"GEOUNIT":"Cuba","GU_A3":"CUB","SU_DIF":0,"SUBUNIT":"Cuba","SU_A3":"CUB","BRK_DIFF":0,"NAME":"Cuba","NAME_LONG":"Cuba","BRK_A3":"CUB","BRK_NAME":"Cuba","BRK_GROUP":"","ABBREV":"Cuba","POSTAL":"CU","FORMAL_EN":"Republic of Cuba","FORMAL_FR":"","NAME_CIAWF":"Cuba","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Cuba","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":5,"MAPCOLOR9":3,"MAPCOLOR13":4,"POP_EST":11333483,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":100023,"GDP_YEAR":2018,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"CU","ISO_A2":"CU","ISO_A2_EH":"CU","ISO_A3":"CUB","ISO_A3_EH":"CUB","ISO_N3":"192","ISO_N3_EH":"192","UN_A3":"192","WB_A2":"CU","WB_A3":"CUB","WOE_ID":23424793,"WOE_ID_EH":23424793,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CUB","ADM0_DIFF":"","ADM0_TLC":"CUB","ADM0_A3_US":"CUB","ADM0_A3_FR":"CUB","ADM0_A3_RU":"CUB","ADM0_A3_ES":"CUB","ADM0_A3_CN":"CUB","ADM0_A3_TW":"CUB","ADM0_A3_IN":"CUB","ADM0_A3_NP":"CUB","ADM0_A3_PK":"CUB","ADM0_A3_DE":"CUB","ADM0_A3_GB":"CUB","ADM0_A3_BR":"CUB","ADM0_A3_IL":"CUB","ADM0_A3_PS":"CUB","ADM0_A3_SA":"CUB","ADM0_A3_EG":"CUB","ADM0_A3_MA":"CUB","ADM0_A3_PT":"CUB","ADM0_A3_AR":"CUB","ADM0_A3_JP":"CUB","ADM0_A3_KO":"CUB","ADM0_A3_VN":"CUB","ADM0_A3_TR":"CUB","ADM0_A3_ID":"CUB","ADM0_A3_PL":"CUB","ADM0_A3_GR":"CUB","ADM0_A3_IT":"CUB","ADM0_A3_NL":"CUB","ADM0_A3_SE":"CUB","ADM0_A3_BD":"CUB","ADM0_A3_UA":"CUB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.7,"MAX_LABEL":8,"LABEL_X":-77.975855,"LABEL_Y":21.334024,"NE_ID":1159320527,"WIKIDATAID":"Q241","NAME_AR":"كوبا","NAME_BN":"কিউবা","NAME_DE":"Kuba","NAME_EN":"Cuba","NAME_ES":"Cuba","NAME_FA":"کوبا","NAME_FR":"Cuba","NAME_EL":"Κούβα","NAME_HE":"קובה","NAME_HI":"क्यूबा","NAME_HU":"Kuba","NAME_ID":"Kuba","NAME_IT":"Cuba","NAME_JA":"キューバ","NAME_KO":"쿠바","NAME_NL":"Cuba","NAME_PL":"Kuba","NAME_PT":"Cuba","NAME_RU":"Куба","NAME_SV":"Kuba","NAME_TR":"Küba","NAME_UK":"Куба","NAME_UR":"کیوبا","NAME_VI":"Cuba","NAME_ZH":"古巴","NAME_ZHT":"古巴","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[13.577929687500017,45.516894531249996],[13.629296875000023,45.108203124999996],[13.9658203125,44.83564453125],[14.386132812500023,45.342138671875],[14.854589843750006,45.081005859375],[15.122949218750023,44.256787109375],[15.941503906250006,43.656640624999994],[16.903125000000017,43.392431640625],[17.58515625000001,42.938378906249994],[17.624804687500017,43.042773437499996],[16.214257812500023,44.215136718749996],[15.736621093750017,44.7658203125],[15.7880859375,45.178955078125],[16.293359375000023,45.008837890624996],[16.530664062500023,45.216699218749994],[17.812792968750017,45.078125],[18.66259765625,45.077441406249996],[19.007128906250017,44.869189453124996],[19.055078125000023,45.527246093749994],[18.905371093750006,45.93173828125],[17.9638671875,45.770263671875],[17.310644531250006,45.996142578124996],[16.516210937500006,46.499902343749994],[15.635937500000011,46.200732421874996],[15.624804687500017,45.834033203124996],[15.339453125000006,45.467041015625],[13.878710937500017,45.428369140624994],[13.577929687500017,45.516894531249996]]],[[[18.436328125000017,42.559716796874994],[17.667578125000006,42.897119140624994],[18.517480468750023,42.432910156249996],[18.436328125000017,42.559716796874994]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Croatia","SOV_A3":"HRV","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Croatia","ADM0_A3":"HRV","GEOU_DIF":0,"GEOUNIT":"Croatia","GU_A3":"HRV","SU_DIF":0,"SUBUNIT":"Croatia","SU_A3":"HRV","BRK_DIFF":0,"NAME":"Croatia","NAME_LONG":"Croatia","BRK_A3":"HRV","BRK_NAME":"Croatia","BRK_GROUP":"","ABBREV":"Cro.","POSTAL":"HR","FORMAL_EN":"Republic of Croatia","FORMAL_FR":"","NAME_CIAWF":"Croatia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Croatia","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":4,"MAPCOLOR9":5,"MAPCOLOR13":1,"POP_EST":4067500,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":60752,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"HR","ISO_A2":"HR","ISO_A2_EH":"HR","ISO_A3":"HRV","ISO_A3_EH":"HRV","ISO_N3":"191","ISO_N3_EH":"191","UN_A3":"191","WB_A2":"HR","WB_A3":"HRV","WOE_ID":23424843,"WOE_ID_EH":23424843,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"HRV","ADM0_DIFF":"","ADM0_TLC":"HRV","ADM0_A3_US":"HRV","ADM0_A3_FR":"HRV","ADM0_A3_RU":"HRV","ADM0_A3_ES":"HRV","ADM0_A3_CN":"HRV","ADM0_A3_TW":"HRV","ADM0_A3_IN":"HRV","ADM0_A3_NP":"HRV","ADM0_A3_PK":"HRV","ADM0_A3_DE":"HRV","ADM0_A3_GB":"HRV","ADM0_A3_BR":"HRV","ADM0_A3_IL":"HRV","ADM0_A3_PS":"HRV","ADM0_A3_SA":"HRV","ADM0_A3_EG":"HRV","ADM0_A3_MA":"HRV","ADM0_A3_PT":"HRV","ADM0_A3_AR":"HRV","ADM0_A3_JP":"HRV","ADM0_A3_KO":"HRV","ADM0_A3_VN":"HRV","ADM0_A3_TR":"HRV","ADM0_A3_ID":"HRV","ADM0_A3_PL":"HRV","ADM0_A3_GR":"HRV","ADM0_A3_IT":"HRV","ADM0_A3_NL":"HRV","ADM0_A3_SE":"HRV","ADM0_A3_BD":"HRV","ADM0_A3_UA":"HRV","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":16.37241,"LABEL_Y":45.805799,"NE_ID":1159320833,"WIKIDATAID":"Q224","NAME_AR":"كرواتيا","NAME_BN":"ক্রোয়েশিয়া","NAME_DE":"Kroatien","NAME_EN":"Croatia","NAME_ES":"Croacia","NAME_FA":"کرواسی","NAME_FR":"Croatie","NAME_EL":"Κροατία","NAME_HE":"קרואטיה","NAME_HI":"क्रोएशिया","NAME_HU":"Horvátország","NAME_ID":"Kroasia","NAME_IT":"Croazia","NAME_JA":"クロアチア","NAME_KO":"크로아티아","NAME_NL":"Kroatië","NAME_PL":"Chorwacja","NAME_PT":"Croácia","NAME_RU":"Хорватия","NAME_SV":"Kroatien","NAME_TR":"Hırvatistan","NAME_UK":"Хорватія","NAME_UR":"کروشیا","NAME_VI":"Croatia","NAME_ZH":"克罗地亚","NAME_ZHT":"克羅地亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-7.990624999999994,10.162499999999994],[-8.136621093749994,10.022070312499991],[-8.136962890625,9.495703124999991],[-7.896191406249983,9.415869140624991],[-7.950976562499989,8.786816406249997],[-7.823583984374977,8.467675781249994],[-8.231884765624983,7.5567382812499915],[-8.486425781249977,7.558496093749994],[-8.296630859375,7.074023437499989],[-8.332568359374989,6.801562499999989],[-8.603564453124989,6.5078125],[-7.888623046874983,6.23486328125],[-7.796533203124994,5.97509765625],[-7.454394531249989,5.84130859375],[-7.429833984374994,5.324511718749989],[-7.568896484374989,5.0806640624999915],[-7.544970703124989,4.351318359375],[-6.845166015624983,4.6714843749999915],[-5.564746093749989,5.0894531249999915],[-4.037207031249977,5.230126953124994],[-3.0191406249999773,5.130810546874997],[-2.7952148437499886,5.184521484374997],[-3.2005859374999943,6.3482421874999915],[-3.235791015624983,6.8072265624999915],[-2.985791015624983,7.204882812499989],[-2.789746093749983,7.931933593749989],[-2.505859375,8.208740234375],[-2.7466796874999773,9.109619140625],[-2.6958496093749886,9.481347656249994],[-3.2235351562499943,9.895458984374997],[-3.877636718749983,9.894921874999994],[-4.625830078124977,9.713574218749997],[-4.969921874999983,9.930078124999994],[-5.099853515625,10.241601562499994],[-5.523535156249977,10.426025390625],[-6.034570312499994,10.19482421875],[-6.261132812499994,10.724072265624997],[-6.693261718749994,10.349462890624991],[-7.104882812499994,10.203515624999994],[-7.6611328125,10.427441406249997],[-7.990624999999994,10.162499999999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":3,"SOVEREIGNT":"Ivory Coast","SOV_A3":"CIV","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Ivory Coast","ADM0_A3":"CIV","GEOU_DIF":0,"GEOUNIT":"Ivory Coast","GU_A3":"CIV","SU_DIF":0,"SUBUNIT":"Ivory Coast","SU_A3":"CIV","BRK_DIFF":0,"NAME":"Côte d'Ivoire","NAME_LONG":"Côte d'Ivoire","BRK_A3":"CIV","BRK_NAME":"Côte d'Ivoire","BRK_GROUP":"","ABBREV":"I.C.","POSTAL":"CI","FORMAL_EN":"Republic of Ivory Coast","FORMAL_FR":"Republic of Cote D'Ivoire","NAME_CIAWF":"Cote D'ivoire","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Côte d'Ivoire","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":6,"MAPCOLOR9":3,"MAPCOLOR13":3,"POP_EST":25716544,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":58539,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"IV","ISO_A2":"CI","ISO_A2_EH":"CI","ISO_A3":"CIV","ISO_A3_EH":"CIV","ISO_N3":"384","ISO_N3_EH":"384","UN_A3":"384","WB_A2":"CI","WB_A3":"CIV","WOE_ID":23424854,"WOE_ID_EH":23424854,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CIV","ADM0_DIFF":"","ADM0_TLC":"CIV","ADM0_A3_US":"CIV","ADM0_A3_FR":"CIV","ADM0_A3_RU":"CIV","ADM0_A3_ES":"CIV","ADM0_A3_CN":"CIV","ADM0_A3_TW":"CIV","ADM0_A3_IN":"CIV","ADM0_A3_NP":"CIV","ADM0_A3_PK":"CIV","ADM0_A3_DE":"CIV","ADM0_A3_GB":"CIV","ADM0_A3_BR":"CIV","ADM0_A3_IL":"CIV","ADM0_A3_PS":"CIV","ADM0_A3_SA":"CIV","ADM0_A3_EG":"CIV","ADM0_A3_MA":"CIV","ADM0_A3_PT":"CIV","ADM0_A3_AR":"CIV","ADM0_A3_JP":"CIV","ADM0_A3_KO":"CIV","ADM0_A3_VN":"CIV","ADM0_A3_TR":"CIV","ADM0_A3_ID":"CIV","ADM0_A3_PL":"CIV","ADM0_A3_GR":"CIV","ADM0_A3_IT":"CIV","ADM0_A3_NL":"CIV","ADM0_A3_SE":"CIV","ADM0_A3_BD":"CIV","ADM0_A3_UA":"CIV","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":13,"LONG_LEN":13,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":8,"LABEL_X":-5.568618,"LABEL_Y":7.49139,"NE_ID":1159320507,"WIKIDATAID":"Q1008","NAME_AR":"ساحل العاج","NAME_BN":"কোত দিভোয়ার","NAME_DE":"Elfenbeinküste","NAME_EN":"Ivory Coast","NAME_ES":"Costa de Marfil","NAME_FA":"ساحل عاج","NAME_FR":"Côte d'Ivoire","NAME_EL":"Ακτή Ελεφαντοστού","NAME_HE":"חוף השנהב","NAME_HI":"कोत दिव्वार","NAME_HU":"Elefántcsontpart","NAME_ID":"Pantai Gading","NAME_IT":"Costa d'Avorio","NAME_JA":"コートジボワール","NAME_KO":"코트디부아르","NAME_NL":"Ivoorkust","NAME_PL":"Wybrzeże Kości Słoniowej","NAME_PT":"Costa do Marfim","NAME_RU":"Кот-д’Ивуар","NAME_SV":"Elfenbenskusten","NAME_TR":"Fildişi Sahili","NAME_UK":"Кот-д'Івуар","NAME_UR":"کوت داوواغ","NAME_VI":"Bờ Biển Ngà","NAME_ZH":"科特迪瓦","NAME_ZHT":"象牙海岸","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-82.56357421874999,9.57666015625],[-82.77841796874999,9.669531249999991],[-83.4482421875,10.465917968749991],[-83.6419921875,10.917236328125],[-84.168359375,10.780371093749991],[-84.348291015625,10.979882812499994],[-84.9091796875,10.9453125],[-85.62138671874999,11.184472656249994],[-85.7443359375,11.062109374999991],[-85.667236328125,10.745019531249994],[-85.83061523437499,10.398144531249997],[-85.62485351562499,9.902441406249991],[-85.114501953125,9.581787109375],[-84.65888671875,9.646679687499997],[-83.89555664062499,9.276416015624989],[-83.63725585937499,9.035351562499997],[-83.73408203125,8.614453124999997],[-83.16240234374999,8.588183593749989],[-82.879345703125,8.070654296874991],[-82.99755859375,8.367773437499991],[-82.91704101562499,8.740332031249991],[-82.93984375,9.449169921874997],[-82.56357421874999,9.57666015625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Costa Rica","SOV_A3":"CRI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Costa Rica","ADM0_A3":"CRI","GEOU_DIF":0,"GEOUNIT":"Costa Rica","GU_A3":"CRI","SU_DIF":0,"SUBUNIT":"Costa Rica","SU_A3":"CRI","BRK_DIFF":0,"NAME":"Costa Rica","NAME_LONG":"Costa Rica","BRK_A3":"CRI","BRK_NAME":"Costa Rica","BRK_GROUP":"","ABBREV":"C.R.","POSTAL":"CR","FORMAL_EN":"Republic of Costa Rica","FORMAL_FR":"","NAME_CIAWF":"Costa Rica","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Costa Rica","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":4,"MAPCOLOR13":2,"POP_EST":5047561,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":61801,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"CS","ISO_A2":"CR","ISO_A2_EH":"CR","ISO_A3":"CRI","ISO_A3_EH":"CRI","ISO_N3":"188","ISO_N3_EH":"188","UN_A3":"188","WB_A2":"CR","WB_A3":"CRI","WOE_ID":23424791,"WOE_ID_EH":23424791,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CRI","ADM0_DIFF":"","ADM0_TLC":"CRI","ADM0_A3_US":"CRI","ADM0_A3_FR":"CRI","ADM0_A3_RU":"CRI","ADM0_A3_ES":"CRI","ADM0_A3_CN":"CRI","ADM0_A3_TW":"CRI","ADM0_A3_IN":"CRI","ADM0_A3_NP":"CRI","ADM0_A3_PK":"CRI","ADM0_A3_DE":"CRI","ADM0_A3_GB":"CRI","ADM0_A3_BR":"CRI","ADM0_A3_IL":"CRI","ADM0_A3_PS":"CRI","ADM0_A3_SA":"CRI","ADM0_A3_EG":"CRI","ADM0_A3_MA":"CRI","ADM0_A3_PT":"CRI","ADM0_A3_AR":"CRI","ADM0_A3_JP":"CRI","ADM0_A3_KO":"CRI","ADM0_A3_VN":"CRI","ADM0_A3_TR":"CRI","ADM0_A3_ID":"CRI","ADM0_A3_PL":"CRI","ADM0_A3_GR":"CRI","ADM0_A3_IT":"CRI","ADM0_A3_NL":"CRI","ADM0_A3_SE":"CRI","ADM0_A3_BD":"CRI","ADM0_A3_UA":"CRI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":8,"LABEL_X":-84.077922,"LABEL_Y":10.0651,"NE_ID":1159320525,"WIKIDATAID":"Q800","NAME_AR":"كوستاريكا","NAME_BN":"কোস্টা রিকা","NAME_DE":"Costa Rica","NAME_EN":"Costa Rica","NAME_ES":"Costa Rica","NAME_FA":"کاستاریکا","NAME_FR":"Costa Rica","NAME_EL":"Κόστα Ρίκα","NAME_HE":"קוסטה ריקה","NAME_HI":"कोस्टा रीका","NAME_HU":"Costa Rica","NAME_ID":"Kosta Rika","NAME_IT":"Costa Rica","NAME_JA":"コスタリカ","NAME_KO":"코스타리카","NAME_NL":"Costa Rica","NAME_PL":"Kostaryka","NAME_PT":"Costa Rica","NAME_RU":"Коста-Рика","NAME_SV":"Costa Rica","NAME_TR":"Kosta Rika","NAME_UK":"Коста-Рика","NAME_UR":"کوسٹاریکا","NAME_VI":"Costa Rica","NAME_ZH":"哥斯达黎加","NAME_ZHT":"哥斯大黎加","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[30.75117187500001,-8.193652343750003],[30.31318359375001,-7.203710937500006],[29.70966796875001,-6.616894531250011],[29.480078125000006,-6.025000000000006],[29.594140625000023,-5.6507812500000085],[29.3427734375,-4.983105468750011],[29.403222656250023,-4.449316406250006],[29.223242187500006,-3.9108398437500114],[29.224414062500017,-3.053515625000003],[29.01435546875001,-2.72021484375],[28.876367187500023,-2.4002929687500085],[29.1064453125,-2.233203125000003],[29.12939453125,-1.8602539062500085],[29.576953125000017,-1.3878906250000114],[29.561914062500023,-0.9773437500000028],[29.717675781250023,0.09833984374999716],[29.934472656250023,0.4990234375],[29.94287109375,0.8192382812499943],[30.94257812500001,1.6828124999999972],[31.252734375000017,2.0445800781249943],[31.176367187500006,2.2700683593749886],[30.728613281250006,2.4553710937499886],[30.83857421875001,3.49072265625],[30.50830078125,3.835693359375],[30.194921875000006,3.98193359375],[29.676855468750006,4.5869140625],[29.151464843750006,4.38818359375],[28.72705078125,4.5049804687499915],[28.19208984375001,4.350244140624994],[27.7880859375,4.644677734374994],[27.4033203125,5.109179687499989],[27.11494140625001,5.1978515624999915],[26.822070312500017,5.062402343749994],[25.52509765625001,5.3121093749999915],[25.249316406250017,5.024560546874994],[24.765527343750023,4.930078124999994],[24.31982421875,4.994140625],[23.41718750000001,4.663134765624989],[22.755761718750023,4.646679687499997],[22.422167968750017,4.134960937499997],[21.53759765625,4.244824218749997],[20.55810546875,4.462695312499989],[20.226367187500017,4.829638671874989],[19.806542968750023,5.089306640624997],[19.5009765625,5.127490234374989],[19.06855468750001,4.891406249999989],[18.567480468750006,4.257568359375],[18.6103515625,3.4784179687499943],[18.49091796875001,2.9244140624999915],[18.072167968750023,2.0132812499999915],[18.05781250000001,1.5348632812499972],[17.902441406250006,1.1180664062499943],[17.8876953125,0.234130859375],[17.72412109375,-0.27753906250001137],[17.752832031250023,-0.5490234375000114],[17.27880859375,-0.9996093750000057],[16.8798828125,-1.2258789062500028],[16.54072265625001,-1.8401367187500028],[16.21533203125,-2.1778320312500057],[16.217382812500006,-3.0302734375],[16.146777343750017,-3.464160156250003],[15.872460937500023,-3.9342773437500114],[15.60009765625,-4.030957031250011],[14.707910156250023,-4.8817382812500085],[14.410742187500006,-4.831250000000011],[14.358300781250023,-4.299414062500006],[13.414941406250023,-4.83740234375],[13.07275390625,-4.634765625],[12.829687500000006,-4.736621093750003],[12.522363281250023,-5.14892578125],[12.503710937500017,-5.69580078125],[12.213671875000017,-5.7586914062500085],[12.411718750000006,-5.986328125],[13.068164062500017,-5.864843750000006],[14.398632812500011,-5.892675781250006],[16.315234375000017,-5.8656250000000085],[16.7177734375,-6.241406250000011],[16.742968750000017,-6.618457031250003],[16.984765625000023,-7.257421875000006],[17.536035156250023,-8.075878906250011],[18.653417968750006,-7.93603515625],[19.3408203125,-7.966601562500003],[19.527636718750017,-7.1444335937500085],[19.87519531250001,-6.986328125],[20.482226562500017,-6.915820312500003],[20.607812500000023,-7.2777343750000085],[21.751074218750006,-7.305468750000003],[21.905371093750006,-8.693359375],[21.81318359375001,-9.46875],[22.19775390625,-10.040625000000006],[22.30244140625001,-10.396679687500011],[22.27880859375,-11.194140625000003],[22.56103515625,-11.055859375000011],[23.833886718750023,-11.013671875],[23.96650390625001,-10.871777343750011],[24.319921875000006,-11.07177734375],[24.5185546875,-11.4384765625],[25.184863281250017,-11.242968750000003],[25.349414062500017,-11.623046875],[26.025976562500006,-11.89013671875],[26.59638671875001,-11.972070312500009],[26.949609375000023,-11.898828125000009],[27.04609375000001,-11.615917968750011],[27.53339843750001,-12.1953125],[28.357714843750017,-12.482031250000006],[29.014257812500006,-13.368847656250011],[29.55419921875,-13.248925781250009],[29.795312500000023,-13.392773437500011],[29.79511718750001,-12.155468750000011],[29.427539062500017,-12.431250000000006],[29.064355468750023,-12.348828125000011],[28.482519531250006,-11.812109375000006],[28.357226562500017,-11.483007812500006],[28.63886718750001,-10.669238281250003],[28.63007812500001,-9.831250000000011],[28.400683593750017,-9.224804687500011],[28.917773437500017,-8.700585937500009],[28.972265625000006,-8.464941406250006],[30.75117187500001,-8.193652343750003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Democratic Republic of the Congo","SOV_A3":"COD","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Democratic Republic of the Congo","ADM0_A3":"COD","GEOU_DIF":0,"GEOUNIT":"Democratic Republic of the Congo","GU_A3":"COD","SU_DIF":0,"SUBUNIT":"Democratic Republic of the Congo","SU_A3":"COD","BRK_DIFF":0,"NAME":"Dem. Rep. Congo","NAME_LONG":"Democratic Republic of the Congo","BRK_A3":"COD","BRK_NAME":"Democratic Republic of the Congo","BRK_GROUP":"","ABBREV":"D.R.C.","POSTAL":"DRC","FORMAL_EN":"Democratic Republic of the Congo","FORMAL_FR":"","NAME_CIAWF":"Congo, Democratic Republic of the","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Congo, Dem. Rep.","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":7,"POP_EST":86790567,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":50400,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"CG","ISO_A2":"CD","ISO_A2_EH":"CD","ISO_A3":"COD","ISO_A3_EH":"COD","ISO_N3":"180","ISO_N3_EH":"180","UN_A3":"180","WB_A2":"ZR","WB_A3":"ZAR","WOE_ID":23424780,"WOE_ID_EH":23424780,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"COD","ADM0_DIFF":"","ADM0_TLC":"COD","ADM0_A3_US":"COD","ADM0_A3_FR":"COD","ADM0_A3_RU":"COD","ADM0_A3_ES":"COD","ADM0_A3_CN":"COD","ADM0_A3_TW":"COD","ADM0_A3_IN":"COD","ADM0_A3_NP":"COD","ADM0_A3_PK":"COD","ADM0_A3_DE":"COD","ADM0_A3_GB":"COD","ADM0_A3_BR":"COD","ADM0_A3_IL":"COD","ADM0_A3_PS":"COD","ADM0_A3_SA":"COD","ADM0_A3_EG":"COD","ADM0_A3_MA":"COD","ADM0_A3_PT":"COD","ADM0_A3_AR":"COD","ADM0_A3_JP":"COD","ADM0_A3_KO":"COD","ADM0_A3_VN":"COD","ADM0_A3_TR":"COD","ADM0_A3_ID":"COD","ADM0_A3_PL":"COD","ADM0_A3_GR":"COD","ADM0_A3_IT":"COD","ADM0_A3_NL":"COD","ADM0_A3_SE":"COD","ADM0_A3_BD":"COD","ADM0_A3_UA":"COD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":15,"LONG_LEN":32,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":23.458829,"LABEL_Y":-1.858167,"NE_ID":1159320513,"WIKIDATAID":"Q974","NAME_AR":"جمهورية الكونغو الديمقراطية","NAME_BN":"গণতান্ত্রিক কঙ্গো প্রজাতন্ত্র","NAME_DE":"Demokratische Republik Kongo","NAME_EN":"Democratic Republic of the Congo","NAME_ES":"República Democrática del Congo","NAME_FA":"جمهوری دموکراتیک کنگو","NAME_FR":"République démocratique du Congo","NAME_EL":"Λαϊκή Δημοκρατία του Κονγκό","NAME_HE":"הרפובליקה הדמוקרטית של קונגו","NAME_HI":"कांगो लोकतान्त्रिक गणराज्य","NAME_HU":"Kongói Demokratikus Köztársaság","NAME_ID":"Republik Demokratik Kongo","NAME_IT":"Repubblica Democratica del Congo","NAME_JA":"コンゴ民主共和国","NAME_KO":"콩고 민주 공화국","NAME_NL":"Congo-Kinshasa","NAME_PL":"Demokratyczna Republika Konga","NAME_PT":"República Democrática do Congo","NAME_RU":"Демократическая Республика Конго","NAME_SV":"Kongo-Kinshasa","NAME_TR":"Demokratik Kongo Cumhuriyeti","NAME_UK":"Демократична Республіка Конго","NAME_UR":"جمہوری جمہوریہ کانگو","NAME_VI":"Cộng hòa Dân chủ Congo","NAME_ZH":"刚果民主共和国","NAME_ZHT":"剛果民主共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[11.130175781250017,-3.916308593750003],[11.777539062500011,-4.5658203125000085],[12.018359375000017,-5.0042968750000085],[12.384570312500017,-4.619140625],[12.881054687500011,-4.445117187500003],[13.07275390625,-4.634765625],[13.414941406250023,-4.83740234375],[14.358300781250023,-4.299414062500006],[14.410742187500006,-4.831250000000011],[14.707910156250023,-4.8817382812500085],[15.60009765625,-4.030957031250011],[15.872460937500023,-3.9342773437500114],[16.146777343750017,-3.464160156250003],[16.217382812500006,-3.0302734375],[16.21533203125,-2.1778320312500057],[16.54072265625001,-1.8401367187500028],[16.8798828125,-1.2258789062500028],[17.27880859375,-0.9996093750000057],[17.752832031250023,-0.5490234375000114],[17.72412109375,-0.27753906250001137],[17.8876953125,0.234130859375],[17.902441406250006,1.1180664062499943],[18.05781250000001,1.5348632812499972],[18.072167968750023,2.0132812499999915],[18.49091796875001,2.9244140624999915],[18.6103515625,3.4784179687499943],[18.160937500000017,3.4998046874999886],[17.43798828125,3.6846191406249886],[16.67333984375,3.5352050781249886],[16.468554687500017,2.831738281249997],[16.183398437500017,2.2700683593749886],[16.059375000000017,1.6762207031249972],[15.741601562500023,1.9149902343749972],[14.902441406250006,2.0123046874999915],[14.484082031250011,2.154736328124997],[13.293554687500006,2.161572265624997],[13.162695312500006,1.6480957031249943],[13.274121093750011,1.2410156249999886],[13.851367187500017,1.4187499999999886],[14.180859375000011,1.3702148437499915],[14.434472656250023,0.8114746093749972],[14.087500000000006,0.5365722656249972],[13.884570312500017,0.19082031249999432],[13.860058593750011,-0.20332031250001137],[14.480566406250006,-0.6183593750000114],[14.383984375000011,-1.8900390625000085],[14.08740234375,-2.4668945312500057],[13.784375000000011,-2.1637695312500114],[13.464941406250006,-2.3954101562500085],[12.991992187500017,-2.3133789062500085],[12.793554687500006,-1.9318359375000114],[12.43212890625,-1.9289062500000114],[12.446386718750006,-2.3299804687500085],[11.5751953125,-2.3970703125000057],[11.537792968750011,-2.836718750000003],[11.934179687500006,-3.3185546875000114],[11.504296875000023,-3.520312500000003],[11.130175781250017,-3.916308593750003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Republic of the Congo","SOV_A3":"COG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Republic of the Congo","ADM0_A3":"COG","GEOU_DIF":0,"GEOUNIT":"Republic of the Congo","GU_A3":"COG","SU_DIF":0,"SUBUNIT":"Republic of the Congo","SU_A3":"COG","BRK_DIFF":0,"NAME":"Congo","NAME_LONG":"Republic of the Congo","BRK_A3":"COG","BRK_NAME":"Republic of the Congo","BRK_GROUP":"","ABBREV":"Rep. Congo","POSTAL":"CG","FORMAL_EN":"Republic of the Congo","FORMAL_FR":"","NAME_CIAWF":"Congo, Republic of the","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Congo, Rep.","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":10,"POP_EST":5380508,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":12267,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"CF","ISO_A2":"CG","ISO_A2_EH":"CG","ISO_A3":"COG","ISO_A3_EH":"COG","ISO_N3":"178","ISO_N3_EH":"178","UN_A3":"178","WB_A2":"CG","WB_A3":"COG","WOE_ID":23424779,"WOE_ID_EH":23424779,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"COG","ADM0_DIFF":"","ADM0_TLC":"COG","ADM0_A3_US":"COG","ADM0_A3_FR":"COG","ADM0_A3_RU":"COG","ADM0_A3_ES":"COG","ADM0_A3_CN":"COG","ADM0_A3_TW":"COG","ADM0_A3_IN":"COG","ADM0_A3_NP":"COG","ADM0_A3_PK":"COG","ADM0_A3_DE":"COG","ADM0_A3_GB":"COG","ADM0_A3_BR":"COG","ADM0_A3_IL":"COG","ADM0_A3_PS":"COG","ADM0_A3_SA":"COG","ADM0_A3_EG":"COG","ADM0_A3_MA":"COG","ADM0_A3_PT":"COG","ADM0_A3_AR":"COG","ADM0_A3_JP":"COG","ADM0_A3_KO":"COG","ADM0_A3_VN":"COG","ADM0_A3_TR":"COG","ADM0_A3_ID":"COG","ADM0_A3_PL":"COG","ADM0_A3_GR":"COG","ADM0_A3_IT":"COG","ADM0_A3_NL":"COG","ADM0_A3_SE":"COG","ADM0_A3_BD":"COG","ADM0_A3_UA":"COG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":21,"ABBREV_LEN":10,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":15.9005,"LABEL_Y":0.142331,"NE_ID":1159320515,"WIKIDATAID":"Q971","NAME_AR":"جمهورية الكونغو","NAME_BN":"কঙ্গো প্রজাতন্ত্র","NAME_DE":"Republik Kongo","NAME_EN":"Republic of the Congo","NAME_ES":"República del Congo","NAME_FA":"جمهوری کنگو","NAME_FR":"République du Congo","NAME_EL":"Δημοκρατία του Κονγκό","NAME_HE":"הרפובליקה של קונגו","NAME_HI":"कांगो गणराज्य","NAME_HU":"Kongói Köztársaság","NAME_ID":"Republik Kongo","NAME_IT":"Repubblica del Congo","NAME_JA":"コンゴ共和国","NAME_KO":"콩고 공화국","NAME_NL":"Congo-Brazzaville","NAME_PL":"Kongo","NAME_PT":"República do Congo","NAME_RU":"Республика Конго","NAME_SV":"Kongo-Brazzaville","NAME_TR":"Kongo Cumhuriyeti","NAME_UK":"Республіка Конго","NAME_UR":"جمہوریہ کانگو","NAME_VI":"Cộng hòa Congo","NAME_ZH":"刚果共和国","NAME_ZHT":"剛果共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Comoros","SOV_A3":"COM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Comoros","ADM0_A3":"COM","GEOU_DIF":0,"GEOUNIT":"Comoros","GU_A3":"COM","SU_DIF":0,"SUBUNIT":"Comoros","SU_A3":"COM","BRK_DIFF":0,"NAME":"Comoros","NAME_LONG":"Comoros","BRK_A3":"COM","BRK_NAME":"Comoros","BRK_GROUP":"","ABBREV":"Com.","POSTAL":"KM","FORMAL_EN":"Union of the Comoros","FORMAL_FR":"","NAME_CIAWF":"Comoros","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Comoros","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":10,"POP_EST":850886,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":1165,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"CN","ISO_A2":"KM","ISO_A2_EH":"KM","ISO_A3":"COM","ISO_A3_EH":"COM","ISO_N3":"174","ISO_N3_EH":"174","UN_A3":"174","WB_A2":"KM","WB_A3":"COM","WOE_ID":23424786,"WOE_ID_EH":23424786,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"COM","ADM0_DIFF":"","ADM0_TLC":"COM","ADM0_A3_US":"COM","ADM0_A3_FR":"COM","ADM0_A3_RU":"COM","ADM0_A3_ES":"COM","ADM0_A3_CN":"COM","ADM0_A3_TW":"COM","ADM0_A3_IN":"COM","ADM0_A3_NP":"COM","ADM0_A3_PK":"COM","ADM0_A3_DE":"COM","ADM0_A3_GB":"COM","ADM0_A3_BR":"COM","ADM0_A3_IL":"COM","ADM0_A3_PS":"COM","ADM0_A3_SA":"COM","ADM0_A3_EG":"COM","ADM0_A3_MA":"COM","ADM0_A3_PT":"COM","ADM0_A3_AR":"COM","ADM0_A3_JP":"COM","ADM0_A3_KO":"COM","ADM0_A3_VN":"COM","ADM0_A3_TR":"COM","ADM0_A3_ID":"COM","ADM0_A3_PL":"COM","ADM0_A3_GR":"COM","ADM0_A3_IT":"COM","ADM0_A3_NL":"COM","ADM0_A3_SE":"COM","ADM0_A3_BD":"COM","ADM0_A3_UA":"COM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":43.318094,"LABEL_Y":-11.727683,"NE_ID":1159320521,"WIKIDATAID":"Q970","NAME_AR":"جزر القمر","NAME_BN":"কোমোরোস","NAME_DE":"Komoren","NAME_EN":"Comoros","NAME_ES":"Comoras","NAME_FA":"مجمعالجزایر قمر","NAME_FR":"Comores","NAME_EL":"Κομόρες","NAME_HE":"קומורו","NAME_HI":"कोमोरोस","NAME_HU":"Comore-szigetek","NAME_ID":"Komoro","NAME_IT":"Comore","NAME_JA":"コモロ","NAME_KO":"코모로","NAME_NL":"Comoren","NAME_PL":"Komory","NAME_PT":"Comores","NAME_RU":"Коморы","NAME_SV":"Komorerna","NAME_TR":"Komorlar","NAME_UK":"Коморські Острови","NAME_UR":"اتحاد القمری","NAME_VI":"Comoros","NAME_ZH":"科摩罗","NAME_ZHT":"葛摩","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-71.3197265625,11.861914062499991],[-71.262109375,12.335302734374991],[-71.71455078125,12.419970703124989],[-72.1357421875,12.188574218749991],[-72.27499999999999,11.889257812499991],[-72.721826171875,11.712158203125],[-73.31337890625,11.295751953124991],[-74.05913085937499,11.340624999999989],[-74.454248046875,10.989062499999989],[-74.84458007812499,11.109716796874991],[-75.44599609375,10.610888671874989],[-75.6708984375,10.196337890624989],[-75.63935546875,9.450439453125],[-76.135498046875,9.265625],[-76.27685546875,8.989111328124991],[-76.88798828124999,8.619873046875],[-76.85185546874999,8.090478515624994],[-77.37421875,8.658300781249991],[-77.2123046875,8.033886718749997],[-77.35078125,7.705859374999989],[-77.743896484375,7.5369628906249915],[-77.90117187499999,7.2293457031249915],[-77.35986328125,6.5044921874999915],[-77.46943359375,6.1767578125],[-77.249267578125,5.780175781249994],[-77.4017578125,5.416162109374994],[-77.286328125,4.721728515624989],[-77.42729492187499,4.060449218749994],[-77.16660156249999,3.862255859374997],[-77.24277343749999,3.5853515624999943],[-77.67001953124999,2.878857421874997],[-78.12001953125,2.4881835937499943],[-78.61704101562499,2.3067871093749943],[-78.576904296875,1.7737792968749915],[-78.85966796874999,1.4553710937499886],[-78.31210937499999,1.0460937499999972],[-77.46767578125,0.6365234374999886],[-77.42275390625,0.42485351562498863],[-76.49462890625,0.23544921874999147],[-76.31103515625,0.448486328125],[-75.87978515625,0.15097656249999147],[-75.28447265624999,-0.10654296875000568],[-74.8017578125,-0.20009765625000853],[-74.41787109375,-0.5806640625000057],[-74.24638671874999,-0.9706054687500085],[-73.664306640625,-1.2488281250000028],[-73.4962890625,-1.6930664062500114],[-73.19697265625,-1.8302734375000114],[-73.1544921875,-2.2782226562500085],[-72.39560546874999,-2.4289062500000114],[-71.75253906249999,-2.1527343750000085],[-71.39697265625,-2.3340820312500057],[-70.91455078125,-2.218554687500003],[-70.07402343749999,-2.7501953125000114],[-70.735107421875,-3.781542968750003],[-70.339501953125,-3.8143554687500085],[-69.96591796874999,-4.235937500000006],[-69.66904296874999,-2.6676757812500114],[-69.40024414062499,-1.1949218750000057],[-69.66748046875,-0.482421875],[-70.0705078125,-0.13886718750001137],[-70.05390625,0.57861328125],[-69.163232421875,0.8640624999999886],[-69.36137695312499,1.0640136718749886],[-69.85214843749999,1.0595214843749972],[-69.848583984375,1.708740234375],[-68.17656249999999,1.7198242187499915],[-67.815087890625,1.7900878906249886],[-67.351953125,2.0858398437499943],[-66.87602539062499,1.2230468749999943],[-67.21083984375,2.39013671875],[-67.83476562499999,2.892822265625],[-67.31113281249999,3.4158691406249915],[-67.66162109375,3.8642578125],[-67.85527343749999,4.506884765624989],[-67.82490234375,5.270458984374997],[-67.43935546875,6.025537109374994],[-67.85917968749999,6.2898925781249915],[-68.47177734374999,6.156542968749989],[-69.43925781249999,6.134912109374994],[-70.09501953124999,6.937939453124997],[-70.65507812499999,7.082763671875],[-71.01328124999999,6.994433593749989],[-72.08427734374999,7.096874999999997],[-72.44296874999999,7.454882812499989],[-72.41655273437499,8.381982421874994],[-72.6654296875,8.627587890624994],[-72.79638671875,9.108984374999991],[-73.35634765625,9.226855468749989],[-73.00654296875,9.789160156249991],[-72.8693359375,10.491259765624989],[-72.690087890625,10.835839843749994],[-72.248486328125,11.196435546874994],[-71.95810546874999,11.666406249999994],[-71.3197265625,11.861914062499991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Colombia","SOV_A3":"COL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Colombia","ADM0_A3":"COL","GEOU_DIF":0,"GEOUNIT":"Colombia","GU_A3":"COL","SU_DIF":0,"SUBUNIT":"Colombia","SU_A3":"COL","BRK_DIFF":0,"NAME":"Colombia","NAME_LONG":"Colombia","BRK_A3":"COL","BRK_NAME":"Colombia","BRK_GROUP":"","ABBREV":"Col.","POSTAL":"CO","FORMAL_EN":"Republic of Colombia","FORMAL_FR":"","NAME_CIAWF":"Colombia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Colombia","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":1,"POP_EST":50339443,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":323615,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"CO","ISO_A2":"CO","ISO_A2_EH":"CO","ISO_A3":"COL","ISO_A3_EH":"COL","ISO_N3":"170","ISO_N3_EH":"170","UN_A3":"170","WB_A2":"CO","WB_A3":"COL","WOE_ID":23424787,"WOE_ID_EH":23424787,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"COL","ADM0_DIFF":"","ADM0_TLC":"COL","ADM0_A3_US":"COL","ADM0_A3_FR":"COL","ADM0_A3_RU":"COL","ADM0_A3_ES":"COL","ADM0_A3_CN":"COL","ADM0_A3_TW":"COL","ADM0_A3_IN":"COL","ADM0_A3_NP":"COL","ADM0_A3_PK":"COL","ADM0_A3_DE":"COL","ADM0_A3_GB":"COL","ADM0_A3_BR":"COL","ADM0_A3_IL":"COL","ADM0_A3_PS":"COL","ADM0_A3_SA":"COL","ADM0_A3_EG":"COL","ADM0_A3_MA":"COL","ADM0_A3_PT":"COL","ADM0_A3_AR":"COL","ADM0_A3_JP":"COL","ADM0_A3_KO":"COL","ADM0_A3_VN":"COL","ADM0_A3_TR":"COL","ADM0_A3_ID":"COL","ADM0_A3_PL":"COL","ADM0_A3_GR":"COL","ADM0_A3_IT":"COL","ADM0_A3_NL":"COL","ADM0_A3_SE":"COL","ADM0_A3_BD":"COL","ADM0_A3_UA":"COL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7,"LABEL_X":-73.174347,"LABEL_Y":3.373111,"NE_ID":1159320517,"WIKIDATAID":"Q739","NAME_AR":"كولومبيا","NAME_BN":"কলম্বিয়া","NAME_DE":"Kolumbien","NAME_EN":"Colombia","NAME_ES":"Colombia","NAME_FA":"کلمبیا","NAME_FR":"Colombie","NAME_EL":"Κολομβία","NAME_HE":"קולומביה","NAME_HI":"कोलम्बिया","NAME_HU":"Kolumbia","NAME_ID":"Kolombia","NAME_IT":"Colombia","NAME_JA":"コロンビア","NAME_KO":"콜롬비아","NAME_NL":"Colombia","NAME_PL":"Kolumbia","NAME_PT":"Colômbia","NAME_RU":"Колумбия","NAME_SV":"Colombia","NAME_TR":"Kolombiya","NAME_UK":"Колумбія","NAME_UR":"کولمبیا","NAME_VI":"Colombia","NAME_ZH":"哥伦比亚","NAME_ZHT":"哥倫比亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[107.97265625,21.507958984374994],[108.32480468750003,21.693505859374994],[109.03056640624999,21.626513671875003],[109.14863281250001,21.425537109375],[109.54404296875003,21.53793945312499],[109.93076171875003,21.48056640624999],[109.66259765625,20.916894531249994],[110.12314453125003,20.263720703125003],[110.51152343749999,20.518261718749997],[110.19355468750001,21.037646484375003],[110.77109375000003,21.386523437500003],[111.60273437500001,21.55908203125],[111.94394531250003,21.849658203125003],[112.58632812500002,21.77685546875],[113.00820312500002,22.119335937499997],[113.47890625000002,22.195556640625],[113.52705078125001,22.24594726562499],[113.61962890625,22.86142578124999],[114.01542968749999,22.511914062499997],[114.26601562500002,22.540966796874997],[114.85380859374999,22.61679687499999],[115.19580078125,22.817285156249994],[115.49833984374999,22.71884765624999],[116.470703125,22.94589843749999],[116.53828125000001,23.1796875],[118.05605468750002,24.24609375],[118.08710937500001,24.627001953125003],[118.56035156249999,24.580371093750003],[119.02460937500001,25.223437500000003],[119.53945312500002,25.591259765624997],[119.64824218749999,25.918701171875],[120.27871093750002,27.097070312499994],[121.09843749999999,28.29052734375],[121.60205078125,28.366601562499994],[121.71748046875001,29.25634765625],[121.9443359375,29.894091796874996],[121.15937500000001,30.3017578125],[120.99765625000003,30.558251953124994],[121.8779296875,30.9169921875],[121.66064453125,31.319726562499994],[121.05537109375001,31.719433593749997],[121.35195312500002,31.858789062499994],[121.40097656250003,32.371923828125],[120.85322265625001,32.661376953125],[120.87109375,33.016503906249994],[120.20146484374999,34.32568359375],[119.58291015625002,34.5822265625],[119.2158203125,35.011767578124996],[120.0546875,35.861132812499996],[120.39306640625,36.053857421874994],[120.98994140625001,36.597949218749996],[121.93271484375003,36.95947265625],[122.51972656250001,36.946826171874996],[122.60234374999999,37.426416015624994],[121.64023437500003,37.460351562499994],[120.75,37.833935546875],[120.3701171875,37.701025390625],[119.44990234375001,37.124755859375],[118.95263671875,37.33115234375],[119.08916015624999,37.700732421874996],[118.94003906250003,38.042773437499996],[118.01494140624999,38.183398437499996],[117.55781250000001,38.625146484374994],[117.78466796875,39.13447265625],[118.2978515625,39.06708984375],[118.91230468750001,39.166406249999994],[119.59111328124999,39.902636718749996],[120.47910156250003,40.23095703125],[121.17451171875001,40.901269531249994],[121.85878906250002,40.842089843749996],[122.27500000000003,40.541845703125],[121.517578125,39.638964843749996],[121.78544921874999,39.400830078125],[121.64990234375,38.865087890625],[122.33486328125002,39.366113281249994],[123.34814453125,39.762939453125],[124.10576171874999,39.841015625],[124.36210937499999,40.004052734374994],[124.88935546875001,40.459814453125],[125.98906249999999,40.904638671875],[126.90351562500001,41.781054687499996],[127.1796875,41.53134765625],[128.11123046875002,41.3892578125],[128.29091796875002,41.562792968749996],[128.04521484375005,41.9875],[128.92343750000003,42.038232421874994],[129.313671875,42.41357421875],[129.7197265625,42.474999999999994],[129.89824218750005,42.99814453125],[130.24033203125003,42.891796875],[130.52695312500003,42.535400390625],[130.57724609375003,42.81162109375],[131.0685546875,42.902246093749994],[131.26181640625003,43.433056640625],[131.25527343750002,44.071582031249996],[131.08232421875005,44.910009765625],[131.9775390625,45.243994140625],[132.93603515625,45.029931640624994],[133.18603515625,45.49482421875],[133.861328125,46.24775390625],[134.16767578125,47.302197265625],[134.75234375000002,47.7154296875],[134.56357421875003,48.321728515625],[134.29335937500002,48.373437499999994],[133.46835937500003,48.09716796875],[133.14404296875,48.1056640625],[132.56191406250002,47.768505859375],[131.00273437500005,47.691455078124996],[130.712109375,48.12763671875],[130.80429687500003,48.34150390625],[129.49814453125003,49.388818359374994],[129.1201171875,49.362060546875],[128.70400390625002,49.600146484374996],[127.99960937500003,49.568603515625],[127.50244140625,49.873437499999994],[127.59023437500002,50.208984375],[126.9248046875,51.100146484374996],[126.31289062500002,52.399755859375],[125.64902343750003,53.042285156249996],[124.81230468749999,53.133837890624996],[123.60781250000002,53.546533203125],[122.33779296875002,53.485009765625],[120.7041015625,53.171826171875],[120.09453124999999,52.78720703125],[120.65615234375002,52.566650390625],[120.74980468749999,52.096533203125],[120.06689453125,51.60068359375],[119.19189453125,50.379833984375],[119.25986328125003,50.06640625],[118.45156250000002,49.844482421875],[117.87343750000002,49.513476562499996],[116.68330078125001,49.823779296874996],[115.5576171875,47.94501953125],[115.89824218749999,47.686914062499994],[116.76054687499999,47.869775390624994],[117.35078125000001,47.652197265625],[117.76835937499999,47.987890625],[118.49843750000002,47.983984375],[119.71113281250001,47.15],[119.89785156250002,46.857812499999994],[119.70664062500003,46.606005859374996],[118.30869140625003,46.717041015625],[117.33339843750002,46.36201171875],[116.56259765625003,46.289794921875],[116.24062500000002,45.79599609375],[115.68105468750002,45.458251953125],[114.51718750000003,45.364599609375],[114.0302734375,44.942578125],[113.58701171875003,44.745703125],[111.89804687500003,45.0640625],[111.40224609375002,44.36728515625],[111.93320312500003,43.71142578125],[111.00722656250002,43.34140625],[110.400390625,42.773681640625],[109.44316406249999,42.455957031249994],[108.17119140624999,42.447314453124996],[106.77001953125,42.288720703124994],[105.19707031249999,41.738037109375],[104.49824218750001,41.65869140625],[104.49824218750001,41.877001953124996],[103.71113281250001,41.751318359375],[103.07285156250003,42.00595703125],[101.97294921874999,42.215869140624996],[101.7138671875,42.4658203125],[99.98378906250002,42.67734375],[99.46787109375003,42.568212890625],[97.20566406250003,42.789794921875],[96.38544921875001,42.720361328124994],[95.91250000000002,43.206494140625],[95.35029296875001,44.278076171875],[94.71201171875003,44.350830078125],[93.65644531250001,44.9009765625],[92.78789062499999,45.0357421875],[91.58437500000002,45.076513671875],[90.87724609374999,45.196093749999996],[90.66181640625001,45.525244140625],[91.00175781249999,46.035791015624994],[91.03388671875001,46.52900390625],[90.86992187499999,46.954492187499994],[90.49619140625003,47.28515625],[90.31328124999999,47.676171874999994],[89.56093750000002,48.003955078124996],[89.04765624999999,48.0025390625],[88.51708984375,48.38447265625],[87.97968750000001,48.555126953125],[87.81425781249999,49.1623046875],[87.32285156250003,49.085791015625],[86.75312500000001,49.008837890624996],[86.54941406250003,48.528613281249996],[85.74941406250002,48.385058593749996],[85.52597656250003,47.915625],[85.65664062500002,47.254638671875],[84.7861328125,46.830712890624994],[83.19306640625001,47.186572265624996],[83.00410156250001,47.033496093749996],[82.32666015625,45.519921874999994],[82.47871093750001,45.123583984374996],[81.60205078125,45.310839843749996],[80.05917968750003,45.0064453125],[80.45546875000002,44.74609375],[80.35527343749999,44.097265625],[80.78574218750003,43.161572265625],[80.1650390625,42.66552734375],[80.20937500000002,42.1900390625],[80.21621093750002,42.032421875],[79.29355468750003,41.7828125],[78.36240234375003,41.371630859374996],[78.12343750000002,41.075634765625],[76.82402343749999,40.982324218749994],[76.48017578125001,40.449511718749996],[75.87197265625002,40.30322265625],[75.58349609375,40.605322265625],[75.0044921875,40.449511718749996],[74.41191406250002,40.13720703125],[73.99160156250002,40.043115234374994],[73.9146484375,39.606494140624996],[73.63164062500002,39.448876953124994],[73.80166015625002,38.606884765625],[74.27744140625,38.659765625],[74.74501953125002,38.510009765625],[74.89130859375001,37.231640625],[74.54140625000002,37.02216796875],[75.3466796875,36.913476562499994],[75.84023437500002,36.649707031249996],[75.94511718750002,36.017578125],[76.76689453124999,35.66171875],[77.44648437500001,35.4755859375],[77.79941406250003,35.495898437500045],[78.28203124999999,34.65390625],[78.93642578125002,34.35195312500002],[78.75302734375003,34.087695312499996],[78.80185546875003,33.49970703125],[79.11250000000001,33.22626953125001],[79.21933593750003,32.50107421875],[78.3896484375,32.51987304687498],[78.73544921875003,31.957958984374997],[78.79160156250003,31.293652343750125],[79.10712890625001,31.402636718749996],[79.5654296875,30.949072265625],[80.1943359375,30.759228515625125],[80.19121093749999,30.568408203124996],[80.68212890625,30.414843749999996],[81.01025390625,30.164501953124997],[81.41718750000001,30.337597656249997],[82.04335937500002,30.3267578125],[82.15898437499999,30.115185546874997],[82.85429687499999,29.683398437499996],[83.15546875000001,29.612646484375],[83.58349609375,29.18359375],[84.10136718749999,29.219970703125],[84.22871093750001,28.911767578124994],[84.71425781250002,28.595556640625],[85.15908203125002,28.592236328124997],[85.12246093750002,28.315966796874996],[85.67832031250003,28.27744140625],[86.40869140625,27.928662109374997],[86.55449218749999,28.085205078125],[87.14140624999999,27.838330078124997],[88.10976562499997,27.870605468749943],[88.62109375,28.091845703124996],[88.84882812500001,27.86865234375],[88.89140624999999,27.316064453124994],[89.53691406249999,28.107421875],[89.98105468750003,28.311181640624994],[90.35273437500001,28.080224609374994],[91.60556640625003,27.951708984374996],[91.63193359375003,27.759960937499997],[91.97763671875003,27.730371093749994],[92.66435546874999,27.948925781249997],[92.70185546875001,28.147119140624994],[93.20654296875,28.5908203125],[93.90224609375002,28.80322265625],[94.623046875,29.312402343749994],[94.76943359375002,29.17587890625],[95.42021484374999,29.054296875],[96.03535156250001,29.447167968749994],[96.43574218750001,29.050683593749994],[96.60263671875003,28.459912109375125],[97.32246093750001,28.217968749999997],[97.53789062499999,28.510205078124997],[98.09892578124999,28.142285156249997],[98.298828125,27.550097656249996],[98.65117187499999,27.572460937499997],[98.73183593750002,26.583398437499994],[98.65468750000002,25.917773437500003],[98.0107421875,25.292529296875003],[97.81953125000001,25.251855468749994],[97.53144531250001,24.49169921875],[97.68603515625,23.898095703124994],[98.21250000000003,24.110644531250003],[98.76435546875001,24.11606445312499],[98.86376953125,23.19125976562499],[99.3408203125,23.095898437499997],[99.33769531249999,22.498046875],[99.19296875000003,22.1259765625],[99.91767578125001,22.028027343749997],[100.21474609375002,21.46298828124999],[100.83515625000001,21.655175781249994],[101.13886718750001,21.56748046874999],[101.22441406249999,21.22373046874999],[101.70478515625001,21.150146484375],[101.73652343750001,21.826513671874977],[101.52451171874998,22.253662109375],[101.67148437500003,22.462304687499994],[102.12744140625,22.379199218750003],[102.51718750000003,22.741015625000003],[103.00537109375,22.45297851562499],[103.35605468750003,22.754687500000003],[104.37177734375001,22.704052734374997],[104.79570312499999,22.9111328125],[104.86474609375,23.136376953124994],[105.275390625,23.34521484375],[105.84296875000001,22.922802734374997],[106.1484375,22.97006835937499],[106.7802734375,22.77890624999999],[106.53632812500001,22.395410156249994],[106.7294921875,22.00034179687499],[107.35117187500003,21.60888671875],[107.97265625,21.507958984374994]]],[[[110.88876953125003,19.991943359375],[110.17158203125001,20.0537109375],[109.21894531250001,19.842822265625003],[109.17910156250002,19.674121093750003],[108.69355468750001,19.338281249999994],[108.70156250000002,18.53525390624999],[109.51933593749999,18.21826171875],[110.45126953125003,18.747949218749994],[110.57216796875002,19.171875],[111.013671875,19.655468749999997],[110.88876953125003,19.991943359375]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":2,"SOVEREIGNT":"China","SOV_A3":"CH1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"China","ADM0_A3":"CHN","GEOU_DIF":0,"GEOUNIT":"China","GU_A3":"CHN","SU_DIF":0,"SUBUNIT":"China","SU_A3":"CHN","BRK_DIFF":0,"NAME":"China","NAME_LONG":"China","BRK_A3":"CHN","BRK_NAME":"China","BRK_GROUP":"","ABBREV":"China","POSTAL":"CN","FORMAL_EN":"People's Republic of China","FORMAL_FR":"","NAME_CIAWF":"China","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"China","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":3,"POP_EST":1397715000,"POP_RANK":18,"POP_YEAR":2019,"GDP_MD":14342903,"GDP_YEAR":2019,"ECONOMY":"3. Emerging region: BRIC","INCOME_GRP":"3. Upper middle income","FIPS_10":"CH","ISO_A2":"CN","ISO_A2_EH":"CN","ISO_A3":"CHN","ISO_A3_EH":"CHN","ISO_N3":"156","ISO_N3_EH":"156","UN_A3":"156","WB_A2":"CN","WB_A3":"CHN","WOE_ID":23424781,"WOE_ID_EH":23424781,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CHN","ADM0_DIFF":"","ADM0_TLC":"CHN","ADM0_A3_US":"CHN","ADM0_A3_FR":"CHN","ADM0_A3_RU":"CHN","ADM0_A3_ES":"CHN","ADM0_A3_CN":"CHN","ADM0_A3_TW":"TWN","ADM0_A3_IN":"CHN","ADM0_A3_NP":"CHN","ADM0_A3_PK":"CHN","ADM0_A3_DE":"CHN","ADM0_A3_GB":"CHN","ADM0_A3_BR":"CHN","ADM0_A3_IL":"CHN","ADM0_A3_PS":"CHN","ADM0_A3_SA":"CHN","ADM0_A3_EG":"CHN","ADM0_A3_MA":"CHN","ADM0_A3_PT":"CHN","ADM0_A3_AR":"CHN","ADM0_A3_JP":"CHN","ADM0_A3_KO":"CHN","ADM0_A3_VN":"CHN","ADM0_A3_TR":"CHN","ADM0_A3_ID":"CHN","ADM0_A3_PL":"CHN","ADM0_A3_GR":"CHN","ADM0_A3_IT":"CHN","ADM0_A3_NL":"CHN","ADM0_A3_SE":"CHN","ADM0_A3_BD":"CHN","ADM0_A3_UA":"CHN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":5.7,"LABEL_X":106.337289,"LABEL_Y":32.498178,"NE_ID":1159320471,"WIKIDATAID":"Q148","NAME_AR":"الصين","NAME_BN":"গণচীন","NAME_DE":"Volksrepublik China","NAME_EN":"People's Republic of China","NAME_ES":"China","NAME_FA":"جمهوری خلق چین","NAME_FR":"République populaire de Chine","NAME_EL":"Λαϊκή Δημοκρατία της Κίνας","NAME_HE":"הרפובליקה העממית של סין","NAME_HI":"चीनी जनवादी गणराज्य","NAME_HU":"Kína","NAME_ID":"Republik Rakyat Tiongkok","NAME_IT":"Cina","NAME_JA":"中華人民共和国","NAME_KO":"중화인민공화국","NAME_NL":"Volksrepubliek China","NAME_PL":"Chińska Republika Ludowa","NAME_PT":"China","NAME_RU":"Китайская Народная Республика","NAME_SV":"Kina","NAME_TR":"Çin Halk Cumhuriyeti","NAME_UK":"Китайська Народна Республіка","NAME_UR":"عوامی جمہوریہ چین","NAME_VI":"Trung Quốc","NAME_ZH":"中华人民共和国","NAME_ZHT":"中華人民共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"Unrecognized","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"China","SOV_A3":"CH1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Macao S.A.R","ADM0_A3":"MAC","GEOU_DIF":0,"GEOUNIT":"Macao S.A.R","GU_A3":"MAC","SU_DIF":0,"SUBUNIT":"Macao S.A.R","SU_A3":"MAC","BRK_DIFF":0,"NAME":"Macao","NAME_LONG":"Macao","BRK_A3":"MAC","BRK_NAME":"Macao","BRK_GROUP":"","ABBREV":"Mac.","POSTAL":"MO","FORMAL_EN":"Macao Special Administrative Region, PRC","FORMAL_FR":"","NAME_CIAWF":"Macau","NOTE_ADM0":"Cn.","NOTE_BRK":"China","NAME_SORT":"Macao SAR, China","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":3,"POP_EST":640445,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":53859,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"MC","ISO_A2":"MO","ISO_A2_EH":"MO","ISO_A3":"MAC","ISO_A3_EH":"MAC","ISO_N3":"446","ISO_N3_EH":"446","UN_A3":"446","WB_A2":"MO","WB_A3":"MAC","WOE_ID":20070017,"WOE_ID_EH":20070017,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MAC","ADM0_DIFF":"","ADM0_TLC":"MAC","ADM0_A3_US":"MAC","ADM0_A3_FR":"MAC","ADM0_A3_RU":"MAC","ADM0_A3_ES":"MAC","ADM0_A3_CN":"MAC","ADM0_A3_TW":"MAC","ADM0_A3_IN":"MAC","ADM0_A3_NP":"MAC","ADM0_A3_PK":"MAC","ADM0_A3_DE":"MAC","ADM0_A3_GB":"MAC","ADM0_A3_BR":"MAC","ADM0_A3_IL":"MAC","ADM0_A3_PS":"MAC","ADM0_A3_SA":"MAC","ADM0_A3_EG":"MAC","ADM0_A3_MA":"MAC","ADM0_A3_PT":"MAC","ADM0_A3_AR":"MAC","ADM0_A3_JP":"MAC","ADM0_A3_KO":"MAC","ADM0_A3_VN":"MAC","ADM0_A3_TR":"MAC","ADM0_A3_ID":"MAC","ADM0_A3_PL":"MAC","ADM0_A3_GR":"MAC","ADM0_A3_IT":"MAC","ADM0_A3_NL":"MAC","ADM0_A3_SE":"MAC","ADM0_A3_BD":"MAC","ADM0_A3_UA":"MAC","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":113.556038,"LABEL_Y":22.129735,"NE_ID":1159320475,"WIKIDATAID":"Q14773","NAME_AR":"ماكاو","NAME_BN":"মাকাও","NAME_DE":"Macau","NAME_EN":"Macau","NAME_ES":"Macao","NAME_FA":"ماکائو","NAME_FR":"Macao","NAME_EL":"Μακάου","NAME_HE":"מקאו","NAME_HI":"मकाउ","NAME_HU":"Makaó","NAME_ID":"Makau","NAME_IT":"Macao","NAME_JA":"マカオ","NAME_KO":"마카오","NAME_NL":"Macau","NAME_PL":"Makau","NAME_PT":"Macau","NAME_RU":"Макао","NAME_SV":"Macao","NAME_TR":"Makao","NAME_UK":"Аоминь","NAME_UR":"مکاؤ","NAME_VI":"Ma Cao","NAME_ZH":"澳门","NAME_ZHT":"澳門","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"Admin-1 region","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"China","SOV_A3":"CH1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Hong Kong S.A.R.","ADM0_A3":"HKG","GEOU_DIF":0,"GEOUNIT":"Hong Kong S.A.R.","GU_A3":"HKG","SU_DIF":0,"SUBUNIT":"Hong Kong S.A.R.","SU_A3":"HKG","BRK_DIFF":0,"NAME":"Hong Kong","NAME_LONG":"Hong Kong","BRK_A3":"HKG","BRK_NAME":"Hong Kong","BRK_GROUP":"","ABBREV":"H.K.","POSTAL":"HK","FORMAL_EN":"Hong Kong Special Administrative Region, PRC","FORMAL_FR":"","NAME_CIAWF":"Hong Kong","NOTE_ADM0":"Cn.","NOTE_BRK":"China","NAME_SORT":"Hong Kong SAR, China","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":4,"MAPCOLOR9":4,"MAPCOLOR13":3,"POP_EST":7507400,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":365711,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"HK","ISO_A2":"HK","ISO_A2_EH":"HK","ISO_A3":"HKG","ISO_A3_EH":"HKG","ISO_N3":"344","ISO_N3_EH":"344","UN_A3":"344","WB_A2":"HK","WB_A3":"HKG","WOE_ID":24865698,"WOE_ID_EH":24865698,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"HKG","ADM0_DIFF":"","ADM0_TLC":"HKG","ADM0_A3_US":"HKG","ADM0_A3_FR":"HKG","ADM0_A3_RU":"HKG","ADM0_A3_ES":"HKG","ADM0_A3_CN":"HKG","ADM0_A3_TW":"HKG","ADM0_A3_IN":"HKG","ADM0_A3_NP":"HKG","ADM0_A3_PK":"HKG","ADM0_A3_DE":"HKG","ADM0_A3_GB":"HKG","ADM0_A3_BR":"HKG","ADM0_A3_IL":"HKG","ADM0_A3_PS":"HKG","ADM0_A3_SA":"HKG","ADM0_A3_EG":"HKG","ADM0_A3_MA":"HKG","ADM0_A3_PT":"HKG","ADM0_A3_AR":"HKG","ADM0_A3_JP":"HKG","ADM0_A3_KO":"HKG","ADM0_A3_VN":"HKG","ADM0_A3_TR":"HKG","ADM0_A3_ID":"HKG","ADM0_A3_PL":"HKG","ADM0_A3_GR":"HKG","ADM0_A3_IT":"HKG","ADM0_A3_NL":"HKG","ADM0_A3_SE":"HKG","ADM0_A3_BD":"HKG","ADM0_A3_UA":"HKG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":114.097769,"LABEL_Y":22.448829,"NE_ID":1159320473,"WIKIDATAID":"Q8646","NAME_AR":"هونغ كونغ","NAME_BN":"হংকং","NAME_DE":"Hongkong","NAME_EN":"Hong Kong","NAME_ES":"Hong Kong","NAME_FA":"هنگ کنگ","NAME_FR":"Hong Kong","NAME_EL":"Χονγκ Κονγκ","NAME_HE":"הונג קונג","NAME_HI":"हांगकांग","NAME_HU":"Hongkong","NAME_ID":"Hong Kong","NAME_IT":"Hong Kong","NAME_JA":"香港","NAME_KO":"홍콩","NAME_NL":"Hongkong","NAME_PL":"Hongkong","NAME_PT":"Hong Kong","NAME_RU":"Гонконг","NAME_SV":"Hongkong","NAME_TR":"Hong Kong","NAME_UK":"Гонконг","NAME_UR":"ہانگ کانگ","NAME_VI":"Hồng Kông","NAME_ZH":"香港","NAME_ZHT":"香港","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"Admin-1 region","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-70.41826171874999,-18.34560546875001],[-70.14814453125,-19.80507812500001],[-70.197021484375,-20.725390625000003],[-70.087548828125,-21.49306640625001],[-70.331689453125,-22.8486328125],[-70.56318359375,-23.05703125000001],[-70.48779296875,-23.78173828125],[-70.57412109375,-24.644335937500003],[-70.44536132812499,-25.172656250000003],[-70.71372070312499,-25.7841796875],[-70.64658203124999,-26.329394531250003],[-71.05263671875,-27.727343750000003],[-71.18642578125,-28.37783203125001],[-71.51923828125,-28.92646484375001],[-71.31572265624999,-29.649707031250003],[-71.400390625,-30.14296875000001],[-71.66948242187499,-30.330371093750003],[-71.66196289062499,-31.169531250000006],[-71.52587890625,-31.80585937500001],[-71.45224609374999,-32.65957031250001],[-71.74296874999999,-33.09511718750001],[-71.66435546874999,-33.65263671875],[-72.00283203125,-34.16533203125],[-72.223779296875,-35.09619140625],[-72.62392578125,-35.5857421875],[-72.87456054687499,-36.3904296875],[-73.11806640625,-36.68837890625001],[-73.215966796875,-37.16689453125001],[-73.60166015624999,-37.1884765625],[-73.66181640625,-37.69853515625],[-73.464794921875,-38.04033203125002],[-73.53256835937499,-38.366796875000006],[-73.22646484375,-39.22441406250002],[-73.410400390625,-39.789160156250006],[-73.66943359375,-40.08232421875002],[-73.96586914062499,-41.118261718750006],[-73.52128906249999,-41.79707031250001],[-73.01499023437499,-41.543847656249994],[-72.66977539062499,-41.65937500000001],[-72.4994140625,-41.980859374999994],[-72.78515625,-42.30126953125],[-72.99658203125,-43.63154296875001],[-73.265087890625,-44.16865234375001],[-72.66386718749999,-44.436425781249994],[-72.73896484375,-44.73417968750002],[-73.362451171875,-44.97822265625001],[-73.54990234374999,-45.483789062499994],[-74.037548828125,-45.41767578125001],[-74.157861328125,-45.767187500000006],[-75.06669921874999,-45.874902343749994],[-74.924462890625,-46.15966796875],[-75.65678710937499,-46.6103515625],[-74.15190429687499,-46.97441406250002],[-74.1583984375,-47.182519531249994],[-74.654931640625,-47.702246093750006],[-74.57719726562499,-48.2744140625],[-74.341015625,-48.595703125],[-74.333740234375,-49.974609375],[-75.094677734375,-50.681250000000006],[-74.81474609374999,-51.062890624999994],[-73.8958984375,-51.331445312499994],[-73.97324218749999,-51.78447265625002],[-73.51816406249999,-52.041015625],[-74.01445312499999,-52.63935546875001],[-73.052734375,-53.24345703125002],[-72.45830078124999,-53.254492187500006],[-71.38774414062499,-52.764257812500006],[-71.400341796875,-53.107031250000006],[-71.852734375,-53.285742187500006],[-72.17441406249999,-53.63232421875],[-71.29775390625,-53.883398437500006],[-70.995849609375,-53.779296875],[-70.7951171875,-52.76875000000001],[-69.56059570312499,-52.42158203125001],[-69.24101562499999,-52.205468749999994],[-68.443359375,-52.35664062500001],[-69.96025390624999,-52.008203124999994],[-71.91865234375,-51.98955078125002],[-72.407666015625,-51.54082031250002],[-72.276318359375,-50.910253906250006],[-72.50981445312499,-50.607519531250006],[-73.15292968749999,-50.73828125],[-73.50126953124999,-50.12529296875002],[-73.57626953124999,-49.582910156249994],[-72.614404296875,-48.792871093749994],[-72.354736328125,-48.365820312500006],[-72.51791992187499,-47.876367187499994],[-72.345947265625,-47.49267578125],[-71.90498046875,-47.20166015625],[-71.94023437499999,-46.83125000000001],[-71.69521484375,-46.57841796875002],[-71.87568359375,-46.160546874999994],[-71.77265625,-45.72441406250002],[-71.353759765625,-45.23046875],[-71.59628906249999,-44.97919921875001],[-71.2611328125,-44.763085937499994],[-71.21259765625,-44.44121093750002],[-71.82001953125,-44.38310546875002],[-71.680078125,-43.929589843749994],[-71.90498046875,-43.44013671875001],[-71.781494140625,-43.16679687500002],[-72.146435546875,-42.99003906250002],[-72.12460937499999,-42.29833984375],[-71.7609375,-42.101464843749994],[-71.911279296875,-41.650390625],[-71.93212890625,-40.69169921875002],[-71.6953125,-40.33525390625002],[-71.719921875,-39.63525390625],[-71.539453125,-39.602441406249994],[-71.42558593749999,-38.98564453125002],[-70.951611328125,-38.73847656250001],[-71.02817382812499,-38.04121093750001],[-71.16757812499999,-37.762304687500006],[-71.05551757812499,-36.52373046875],[-70.40478515625,-36.06171875000001],[-70.47041015625,-35.326171875],[-70.28994140625,-34.73281250000001],[-69.85244140625,-34.22431640625001],[-69.79775390625,-33.39863281250001],[-70.01982421874999,-33.271484375],[-70.16962890625,-32.4716796875],[-70.585205078125,-31.569433593750006],[-70.51958007812499,-31.1484375],[-70.16142578124999,-30.440234375000003],[-69.95634765624999,-30.358203125000003],[-69.92763671875,-29.769140625000006],[-70.026806640625,-29.324023437500003],[-69.827880859375,-29.10322265625001],[-69.65693359375,-28.41357421875],[-69.17441406249999,-27.92470703125001],[-68.846337890625,-27.15371093750001],[-68.34599609374999,-27.027929687500006],[-68.58115234374999,-26.518359375000003],[-68.414501953125,-26.15371093750001],[-68.60029296875,-25.485644531250003],[-68.384228515625,-25.091894531250006],[-68.56201171875,-24.837695312500003],[-68.25029296874999,-24.39199218750001],[-67.356201171875,-24.033789062500006],[-67.0087890625,-23.00136718750001],[-67.19487304687499,-22.82167968750001],[-67.87944335937499,-22.82294921875001],[-67.98837890624999,-22.05712890625],[-68.197021484375,-21.30029296875],[-68.74516601562499,-20.458593750000006],[-68.69829101562499,-19.72109375000001],[-68.462890625,-19.43281250000001],[-68.96831054687499,-18.96796875000001],[-69.0939453125,-18.05048828125001],[-69.31337890625,-17.943164062500003],[-69.5109375,-17.50605468750001],[-69.85209960937499,-17.70380859375001],[-69.92636718749999,-18.2060546875],[-70.41826171874999,-18.34560546875001]]],[[[-68.62993164062499,-52.65263671875002],[-69.76357421875,-52.731347656249994],[-70.39067382812499,-53.026464843750006],[-70.09038085937499,-53.41816406250001],[-70.86772460937499,-53.884179687499994],[-70.89824218749999,-54.337890625],[-71.44091796875,-54.61962890625],[-70.49716796874999,-54.8095703125],[-69.72343749999999,-54.71210937500001],[-69.486279296875,-54.85888671875],[-68.65322265625,-54.853613281250006],[-68.62993164062499,-52.65263671875002]]],[[[-67.07993164062499,-55.15380859375],[-67.245263671875,-54.977636718750006],[-68.10693359375,-54.92939453125001],[-68.07001953125,-55.221093749999994],[-67.07993164062499,-55.15380859375]]],[[[-73.773388671875,-43.34589843750001],[-73.43632812499999,-42.9365234375],[-73.7892578125,-42.58574218750002],[-73.47080078124999,-42.46630859375],[-73.52783203125,-41.89628906250002],[-74.03666992187499,-41.795507812500006],[-74.20947265625,-42.87871093750002],[-74.354931640625,-43.263574218749994],[-73.773388671875,-43.34589843750001]]],[[[-74.47617187499999,-49.147851562499994],[-74.79345703125,-48.705078125],[-75.184228515625,-49.083593750000006],[-75.30009765624999,-49.84746093750002],[-74.5947265625,-50.00664062500002],[-74.47617187499999,-49.147851562499994]]],[[[-74.56728515625,-48.59199218750001],[-74.72929687499999,-48.125878906249994],[-75.212890625,-48.141699218750006],[-74.923046875,-48.62646484375],[-74.56728515625,-48.59199218750001]]],[[[-72.9232421875,-53.48164062500001],[-73.6865234375,-53.426855468750006],[-73.30473632812499,-53.943945312500006],[-72.20541992187499,-53.80742187500002],[-72.9232421875,-53.48164062500001]]],[[[-69.70297851562499,-54.919042968750006],[-69.97978515624999,-55.1474609375],[-69.41181640625,-55.444238281249994],[-68.293359375,-55.521386718749994],[-68.282666015625,-55.25517578125002],[-68.90078125,-55.01777343750001],[-69.70297851562499,-54.919042968750006]]],[[[-73.7353515625,-44.39453125],[-74.50180664062499,-44.473535156249994],[-74.61777343749999,-44.64794921875],[-74.099072265625,-45.32539062500001],[-73.72714843749999,-45.119042968749994],[-73.98330078125,-44.49482421875001],[-73.7353515625,-44.39453125]]],[[[-72.98613281249999,-44.78007812500002],[-72.7640625,-44.54902343750001],[-73.20771484375,-44.3349609375],[-73.445068359375,-44.641015624999994],[-72.98613281249999,-44.78007812500002]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":4,"LABELRANK":2,"SOVEREIGNT":"Chile","SOV_A3":"CHL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Chile","ADM0_A3":"CHL","GEOU_DIF":0,"GEOUNIT":"Chile","GU_A3":"CHL","SU_DIF":0,"SUBUNIT":"Chile","SU_A3":"CHL","BRK_DIFF":0,"NAME":"Chile","NAME_LONG":"Chile","BRK_A3":"CHL","BRK_NAME":"Chile","BRK_GROUP":"","ABBREV":"Chile","POSTAL":"CL","FORMAL_EN":"Republic of Chile","FORMAL_FR":"","NAME_CIAWF":"Chile","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Chile","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":1,"MAPCOLOR9":5,"MAPCOLOR13":9,"POP_EST":18952038,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":282318,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"CI","ISO_A2":"CL","ISO_A2_EH":"CL","ISO_A3":"CHL","ISO_A3_EH":"CHL","ISO_N3":"152","ISO_N3_EH":"152","UN_A3":"152","WB_A2":"CL","WB_A3":"CHL","WOE_ID":23424782,"WOE_ID_EH":23424782,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CHL","ADM0_DIFF":"","ADM0_TLC":"CHL","ADM0_A3_US":"CHL","ADM0_A3_FR":"CHL","ADM0_A3_RU":"CHL","ADM0_A3_ES":"CHL","ADM0_A3_CN":"CHL","ADM0_A3_TW":"CHL","ADM0_A3_IN":"CHL","ADM0_A3_NP":"CHL","ADM0_A3_PK":"CHL","ADM0_A3_DE":"CHL","ADM0_A3_GB":"CHL","ADM0_A3_BR":"CHL","ADM0_A3_IL":"CHL","ADM0_A3_PS":"CHL","ADM0_A3_SA":"CHL","ADM0_A3_EG":"CHL","ADM0_A3_MA":"CHL","ADM0_A3_PT":"CHL","ADM0_A3_AR":"CHL","ADM0_A3_JP":"CHL","ADM0_A3_KO":"CHL","ADM0_A3_VN":"CHL","ADM0_A3_TR":"CHL","ADM0_A3_ID":"CHL","ADM0_A3_PL":"CHL","ADM0_A3_GR":"CHL","ADM0_A3_IT":"CHL","ADM0_A3_NL":"CHL","ADM0_A3_SE":"CHL","ADM0_A3_BD":"CHL","ADM0_A3_UA":"CHL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":6.7,"LABEL_X":-72.318871,"LABEL_Y":-38.151771,"NE_ID":1159320493,"WIKIDATAID":"Q298","NAME_AR":"تشيلي","NAME_BN":"চিলি","NAME_DE":"Chile","NAME_EN":"Chile","NAME_ES":"Chile","NAME_FA":"شیلی","NAME_FR":"Chili","NAME_EL":"Χιλή","NAME_HE":"צ'ילה","NAME_HI":"चिली","NAME_HU":"Chile","NAME_ID":"Chili","NAME_IT":"Cile","NAME_JA":"チリ","NAME_KO":"칠레","NAME_NL":"Chili","NAME_PL":"Chile","NAME_PT":"Chile","NAME_RU":"Чили","NAME_SV":"Chile","NAME_TR":"Şili","NAME_UK":"Чилі","NAME_UR":"چلی","NAME_VI":"Chile","NAME_ZH":"智利","NAME_ZHT":"智利","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[23.980273437500017,19.496630859375003],[21.5849609375,20.679492187500003],[19.668554687500006,21.62583007812499],[18.231347656250023,22.33554687499999],[15.984082031250011,23.445214843749994],[14.97900390625,22.99619140624999],[15.172265625000023,21.922070312499997],[15.181835937500011,21.523388671874997],[15.607324218750023,20.954394531250003],[15.587109375000011,20.733300781249994],[15.948828125000006,20.303173828124997],[15.735058593750011,19.904052734375],[15.474316406250011,16.908398437499997],[14.367968750000017,15.750146484374994],[13.4482421875,14.380664062500003],[13.606347656250023,13.70458984375],[14.06396484375,13.078515624999994],[14.516210937500006,12.979736328125],[14.76123046875,12.655615234374991],[15.081250000000011,11.845507812499989],[15.029882812500006,11.113671874999994],[15.276074218750011,10.357373046874997],[15.540917968750023,9.960302734374991],[14.243261718750006,9.979736328125],[13.977246093750011,9.691552734374994],[14.332324218750017,9.203515624999994],[15.1162109375,8.557324218749997],[15.442968750000006,7.851855468749989],[15.480078125000006,7.5237792968749915],[15.845019531250017,7.475292968749997],[16.37890625,7.683544921874997],[16.784765625000006,7.550976562499997],[17.6494140625,7.983593749999997],[18.455078125,8.032031249999989],[19.108691406250017,8.656152343749994],[19.1455078125,9.015966796874991],[20.342089843750017,9.127099609374994],[20.773242187500017,9.405664062499994],[21.26386718750001,9.974609375],[21.72578125000001,10.366552734374991],[21.70654296875,10.574804687499991],[22.49384765625001,10.996240234374994],[22.86005859375001,10.919677734375],[22.922656250000017,11.344873046874994],[22.55634765625001,11.669531249999991],[22.352343750000017,12.660449218749989],[21.825292968750006,12.79052734375],[22.228125000000006,13.32958984375],[22.10761718750001,13.730322265624991],[22.50996093750001,14.12744140625],[22.38154296875001,14.550488281249997],[22.6708984375,14.722460937500003],[22.93232421875001,15.162109375],[23.10517578125001,15.702539062499994],[23.9833984375,15.780175781249994],[23.982226562500017,17.266357421875],[23.980273437500017,19.496630859375003]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Chad","SOV_A3":"TCD","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Chad","ADM0_A3":"TCD","GEOU_DIF":0,"GEOUNIT":"Chad","GU_A3":"TCD","SU_DIF":0,"SUBUNIT":"Chad","SU_A3":"TCD","BRK_DIFF":0,"NAME":"Chad","NAME_LONG":"Chad","BRK_A3":"TCD","BRK_NAME":"Chad","BRK_GROUP":"","ABBREV":"Chad","POSTAL":"TD","FORMAL_EN":"Republic of Chad","FORMAL_FR":"","NAME_CIAWF":"Chad","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Chad","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":1,"MAPCOLOR9":8,"MAPCOLOR13":6,"POP_EST":15946876,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":11314,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"CD","ISO_A2":"TD","ISO_A2_EH":"TD","ISO_A3":"TCD","ISO_A3_EH":"TCD","ISO_N3":"148","ISO_N3_EH":"148","UN_A3":"148","WB_A2":"TD","WB_A3":"TCD","WOE_ID":23424777,"WOE_ID_EH":23424777,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TCD","ADM0_DIFF":"","ADM0_TLC":"TCD","ADM0_A3_US":"TCD","ADM0_A3_FR":"TCD","ADM0_A3_RU":"TCD","ADM0_A3_ES":"TCD","ADM0_A3_CN":"TCD","ADM0_A3_TW":"TCD","ADM0_A3_IN":"TCD","ADM0_A3_NP":"TCD","ADM0_A3_PK":"TCD","ADM0_A3_DE":"TCD","ADM0_A3_GB":"TCD","ADM0_A3_BR":"TCD","ADM0_A3_IL":"TCD","ADM0_A3_PS":"TCD","ADM0_A3_SA":"TCD","ADM0_A3_EG":"TCD","ADM0_A3_MA":"TCD","ADM0_A3_PT":"TCD","ADM0_A3_AR":"TCD","ADM0_A3_JP":"TCD","ADM0_A3_KO":"TCD","ADM0_A3_VN":"TCD","ADM0_A3_TR":"TCD","ADM0_A3_ID":"TCD","ADM0_A3_PL":"TCD","ADM0_A3_GR":"TCD","ADM0_A3_IT":"TCD","ADM0_A3_NL":"TCD","ADM0_A3_SE":"TCD","ADM0_A3_BD":"TCD","ADM0_A3_UA":"TCD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":4,"LONG_LEN":4,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":18.645041,"LABEL_Y":15.142959,"NE_ID":1159321301,"WIKIDATAID":"Q657","NAME_AR":"تشاد","NAME_BN":"চাদ","NAME_DE":"Tschad","NAME_EN":"Chad","NAME_ES":"Chad","NAME_FA":"چاد","NAME_FR":"Tchad","NAME_EL":"Τσαντ","NAME_HE":"צ'אד","NAME_HI":"चाड","NAME_HU":"Csád","NAME_ID":"Chad","NAME_IT":"Ciad","NAME_JA":"チャド","NAME_KO":"차드","NAME_NL":"Tsjaad","NAME_PL":"Czad","NAME_PT":"Chade","NAME_RU":"Чад","NAME_SV":"Tchad","NAME_TR":"Çad","NAME_UK":"Чад","NAME_UR":"چاڈ","NAME_VI":"Tchad","NAME_ZH":"乍得","NAME_ZHT":"查德","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[24.147363281250023,8.665624999999991],[23.53730468750001,8.815820312499994],[23.646289062500017,9.822900390624994],[23.312304687500017,10.387939453125],[22.86005859375001,10.919677734375],[22.49384765625001,10.996240234374994],[21.70654296875,10.574804687499991],[21.72578125000001,10.366552734374991],[21.26386718750001,9.974609375],[20.773242187500017,9.405664062499994],[20.342089843750017,9.127099609374994],[19.1455078125,9.015966796874991],[19.108691406250017,8.656152343749994],[18.455078125,8.032031249999989],[17.6494140625,7.983593749999997],[16.784765625000006,7.550976562499997],[16.37890625,7.683544921874997],[15.845019531250017,7.475292968749997],[15.480078125000006,7.5237792968749915],[15.245898437500017,7.263574218749994],[14.7392578125,6.27978515625],[14.616894531250011,5.865136718749994],[14.708984375,4.665576171874989],[15.022753906250017,4.358544921874994],[15.128710937500017,3.826904296875],[15.775000000000006,3.127197265625],[16.0634765625,2.9085937499999943],[16.183398437500017,2.2700683593749886],[16.468554687500017,2.831738281249997],[16.67333984375,3.5352050781249886],[17.43798828125,3.6846191406249886],[18.160937500000017,3.4998046874999886],[18.6103515625,3.4784179687499943],[18.567480468750006,4.257568359375],[19.06855468750001,4.891406249999989],[19.5009765625,5.127490234374989],[19.806542968750023,5.089306640624997],[20.226367187500017,4.829638671874989],[20.55810546875,4.462695312499989],[21.53759765625,4.244824218749997],[22.422167968750017,4.134960937499997],[22.755761718750023,4.646679687499997],[23.41718750000001,4.663134765624989],[24.31982421875,4.994140625],[24.765527343750023,4.930078124999994],[25.249316406250017,5.024560546874994],[25.52509765625001,5.3121093749999915],[26.822070312500017,5.062402343749994],[27.11494140625001,5.1978515624999915],[27.4033203125,5.109179687499989],[27.083398437500023,5.77685546875],[26.514257812500006,6.069238281249994],[26.36181640625,6.635302734374989],[25.888964843750017,7.06494140625],[25.380664062500017,7.333398437499994],[25.247363281250017,7.724560546874997],[24.853320312500017,8.137548828124991],[24.291406250000023,8.291406249999994],[24.147363281250023,8.665624999999991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Central African Republic","SOV_A3":"CAF","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Central African Republic","ADM0_A3":"CAF","GEOU_DIF":0,"GEOUNIT":"Central African Republic","GU_A3":"CAF","SU_DIF":0,"SUBUNIT":"Central African Republic","SU_A3":"CAF","BRK_DIFF":0,"NAME":"Central African Rep.","NAME_LONG":"Central African Republic","BRK_A3":"CAF","BRK_NAME":"Central African Rep.","BRK_GROUP":"","ABBREV":"C.A.R.","POSTAL":"CF","FORMAL_EN":"Central African Republic","FORMAL_FR":"","NAME_CIAWF":"Central African Republic","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Central African Republic","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":9,"POP_EST":4745185,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":2220,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"CT","ISO_A2":"CF","ISO_A2_EH":"CF","ISO_A3":"CAF","ISO_A3_EH":"CAF","ISO_N3":"140","ISO_N3_EH":"140","UN_A3":"140","WB_A2":"CF","WB_A3":"CAF","WOE_ID":23424792,"WOE_ID_EH":23424792,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CAF","ADM0_DIFF":"","ADM0_TLC":"CAF","ADM0_A3_US":"CAF","ADM0_A3_FR":"CAF","ADM0_A3_RU":"CAF","ADM0_A3_ES":"CAF","ADM0_A3_CN":"CAF","ADM0_A3_TW":"CAF","ADM0_A3_IN":"CAF","ADM0_A3_NP":"CAF","ADM0_A3_PK":"CAF","ADM0_A3_DE":"CAF","ADM0_A3_GB":"CAF","ADM0_A3_BR":"CAF","ADM0_A3_IL":"CAF","ADM0_A3_PS":"CAF","ADM0_A3_SA":"CAF","ADM0_A3_EG":"CAF","ADM0_A3_MA":"CAF","ADM0_A3_PT":"CAF","ADM0_A3_AR":"CAF","ADM0_A3_JP":"CAF","ADM0_A3_KO":"CAF","ADM0_A3_VN":"CAF","ADM0_A3_TR":"CAF","ADM0_A3_ID":"CAF","ADM0_A3_PL":"CAF","ADM0_A3_GR":"CAF","ADM0_A3_IT":"CAF","ADM0_A3_NL":"CAF","ADM0_A3_SE":"CAF","ADM0_A3_BD":"CAF","ADM0_A3_UA":"CAF","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":20,"LONG_LEN":24,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":20.906897,"LABEL_Y":6.989681,"NE_ID":1159320463,"WIKIDATAID":"Q929","NAME_AR":"جمهورية أفريقيا الوسطى","NAME_BN":"মধ্য আফ্রিকান প্রজাতন্ত্র","NAME_DE":"Zentralafrikanische Republik","NAME_EN":"Central African Republic","NAME_ES":"República Centroafricana","NAME_FA":"جمهوری آفریقای مرکزی","NAME_FR":"République centrafricaine","NAME_EL":"Κεντροαφρικανική Δημοκρατία","NAME_HE":"הרפובליקה המרכז-אפריקאית","NAME_HI":"मध्य अफ़्रीकी गणराज्य","NAME_HU":"Közép-afrikai Köztársaság","NAME_ID":"Republik Afrika Tengah","NAME_IT":"Repubblica Centrafricana","NAME_JA":"中央アフリカ共和国","NAME_KO":"중앙아프리카 공화국","NAME_NL":"Centraal-Afrikaanse Republiek","NAME_PL":"Republika Środkowoafrykańska","NAME_PT":"República Centro-Africana","NAME_RU":"Центральноафриканская Республика","NAME_SV":"Centralafrikanska republiken","NAME_TR":"Orta Afrika Cumhuriyeti","NAME_UK":"Центральноафриканська Республіка","NAME_UR":"وسطی افریقی جمہوریہ","NAME_VI":"Cộng hòa Trung Phi","NAME_ZH":"中非共和国","NAME_ZHT":"中非共和國","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Cabo Verde","SOV_A3":"CPV","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Cabo Verde","ADM0_A3":"CPV","GEOU_DIF":0,"GEOUNIT":"Cabo Verde","GU_A3":"CPV","SU_DIF":0,"SUBUNIT":"Cabo Verde","SU_A3":"CPV","BRK_DIFF":0,"NAME":"Cabo Verde","NAME_LONG":"Republic of Cabo Verde","BRK_A3":"CPV","BRK_NAME":"Cabo Verde","BRK_GROUP":"","ABBREV":"C.Vd.","POSTAL":"CV","FORMAL_EN":"Republic of Cabo Verde","FORMAL_FR":"","NAME_CIAWF":"Cabo Verde","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Cabo Verde","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":4,"MAPCOLOR13":11,"POP_EST":549935,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":1981,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"CV","ISO_A2":"CV","ISO_A2_EH":"CV","ISO_A3":"CPV","ISO_A3_EH":"CPV","ISO_N3":"132","ISO_N3_EH":"132","UN_A3":"132","WB_A2":"CV","WB_A3":"CPV","WOE_ID":23424794,"WOE_ID_EH":23424794,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CPV","ADM0_DIFF":"","ADM0_TLC":"CPV","ADM0_A3_US":"CPV","ADM0_A3_FR":"CPV","ADM0_A3_RU":"CPV","ADM0_A3_ES":"CPV","ADM0_A3_CN":"CPV","ADM0_A3_TW":"CPV","ADM0_A3_IN":"CPV","ADM0_A3_NP":"CPV","ADM0_A3_PK":"CPV","ADM0_A3_DE":"CPV","ADM0_A3_GB":"CPV","ADM0_A3_BR":"CPV","ADM0_A3_IL":"CPV","ADM0_A3_PS":"CPV","ADM0_A3_SA":"CPV","ADM0_A3_EG":"CPV","ADM0_A3_MA":"CPV","ADM0_A3_PT":"CPV","ADM0_A3_AR":"CPV","ADM0_A3_JP":"CPV","ADM0_A3_KO":"CPV","ADM0_A3_VN":"CPV","ADM0_A3_TR":"CPV","ADM0_A3_ID":"CPV","ADM0_A3_PL":"CPV","ADM0_A3_GR":"CPV","ADM0_A3_IT":"CPV","ADM0_A3_NL":"CPV","ADM0_A3_SE":"CPV","ADM0_A3_BD":"CPV","ADM0_A3_UA":"CPV","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":10,"LONG_LEN":22,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-23.639434,"LABEL_Y":15.074761,"NE_ID":1159320523,"WIKIDATAID":"Q1011","NAME_AR":"الرأس الأخضر","NAME_BN":"কাবু ভের্দি","NAME_DE":"Kap Verde","NAME_EN":"Cape Verde","NAME_ES":"Cabo Verde","NAME_FA":"کیپ ورد","NAME_FR":"Cap-Vert","NAME_EL":"Πράσινο Ακρωτήριο","NAME_HE":"כף ורדה","NAME_HI":"केप वर्दे","NAME_HU":"Zöld-foki Köztársaság","NAME_ID":"Tanjung Verde","NAME_IT":"Capo Verde","NAME_JA":"カーボベルデ","NAME_KO":"카보베르데","NAME_NL":"Kaapverdië","NAME_PL":"Republika Zielonego Przylądka","NAME_PT":"Cabo Verde","NAME_RU":"Кабо-Верде","NAME_SV":"Kap Verde","NAME_TR":"Yeşil Burun Adaları","NAME_UK":"Кабо-Верде","NAME_UR":"کیپ ورڈی","NAME_VI":"Cabo Verde","NAME_ZH":"佛得角","NAME_ZHT":"維德角","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-132.655517578125,54.127490234374996],[-133.05224609375,53.778124999999996],[-132.747509765625,53.310498046875],[-132.011328125,53.265185546874996],[-131.7025390625,53.986376953124996],[-132.655517578125,54.127490234374996]]],[[[-131.7537109375,53.195556640625],[-132.34541015625,53.136083984375],[-132.165087890625,52.78330078125],[-131.727294921875,52.756396484374996],[-131.7537109375,53.195556640625]]],[[[-127.19731445312499,50.640380859375],[-127.91806640625,50.860546875],[-128.267431640625,50.609277343749994],[-127.11430664062499,49.879736328125],[-126.68310546875,49.87646484375],[-126.54853515625,49.4189453125],[-125.83544921875,49.276660156249996],[-125.828515625,49.091845703124996],[-124.689404296875,48.597314453124994],[-123.59462890625,48.333544921874996],[-123.497021484375,48.582080078124996],[-123.99580078125,49.224023437499994],[-124.64287109374999,49.428662109375],[-125.482080078125,50.316796874999994],[-127.19731445312499,50.640380859375]]],[[[-130.02509765625,55.8882324218751],[-129.89013671874994,55.16464843749998],[-130.43027343749998,54.42099609374998],[-130.04331054687498,54.13354492187506],[-130.33525390625,53.7239257812501],[-129.563720703125,53.251464843750114],[-129.28427734374998,53.393164062500034],[-128.65234374999994,53.243847656249955],[-128.10878906249997,52.85805664062508],[-128.3576171875,52.158886718750125],[-127.64487304687498,51.47846679687501],[-127.70810546874998,51.15117187499999],[-127.05756835937501,50.86752929687509],[-126.39711914062502,50.80708007812501],[-126.40449218750001,50.529882812500034],[-125.05668945312499,50.418652343750125],[-124.78237304687497,50.02011718749992],[-124.1416015625,49.792675781250125],[-123.85893554687493,49.48286132812507],[-123.33564453125001,49.45917968750007],[-123.04921875000002,48.99301757812492],[-122.78876953125,48.993017578125],[-119.70170898437499,48.993017578125],[-117.569775390625,48.993066406249994],[-115.437890625,48.993066406249994],[-113.30595703125,48.993066406249994],[-111.174072265625,48.993066406249994],[-107.76298828125,48.993115234375],[-105.631103515625,48.993115234375125],[-103.49916992187502,48.993115234375125],[-101.36728515624999,48.993115234375],[-99.2353515625,48.993115234375],[-96.67705078124999,48.9931640625],[-95.162060546875,48.991748046874996],[-94.62089843749999,48.742626953125],[-93.70771484375,48.525439453124996],[-92.996240234375,48.61181640625],[-91.518310546875,48.058300781250125],[-90.84033203125,48.20053710937498],[-89.45566406249999,47.996240234374994],[-88.378173828125,48.30307617187509],[-84.8759765625,46.89990234375],[-84.561767578125,46.457373046875],[-84.19218749999999,46.549560546875],[-83.977783203125,46.084912109375],[-83.59267578125002,45.81713867187506],[-82.55107421874999,45.34736328125],[-82.13784179687502,43.570898437500034],[-82.5453125,42.62470703125],[-83.07314453125,42.30029296875],[-83.14194335937499,41.975878906249996],[-82.43906249999999,41.674853515624996],[-81.27763671874999,42.2091796875],[-80.24755859375,42.366015624999996],[-79.03671874999999,42.80234375],[-79.171875,43.466552734375114],[-78.72041015625,43.624951171875],[-76.81997070312502,43.62880859375008],[-76.464599609375,44.0576171875],[-75.17939453125001,44.899365234375125],[-74.70888671875002,45.003857421875125],[-73.97382812500001,45.34511718750002],[-72.98100585937499,46.209716796875114],[-71.87958984375001,46.68681640624993],[-71.26777343750001,46.79594726562499],[-70.70585937499999,47.13979492187502],[-69.90556640624993,47.83222656250007],[-69.77499999999998,48.09809570312507],[-68.92905273437498,48.82895507812509],[-68.28193359375001,49.197167968750136],[-67.37202148437501,49.348437500000045],[-66.941162109375,49.993701171875045],[-66.49550781249997,50.211865234375125],[-65.26860351562493,50.320019531250125],[-64.86787109375001,50.27548828125009],[-62.71542968749998,50.30166015625008],[-61.289746093749955,50.201953125000045],[-60.08017578124992,50.254589843750125],[-59.16538085937498,50.77988281249998],[-58.51035156249998,51.295068359375136],[-56.97597656250002,51.45766601562508],[-55.69521484375002,52.13779296875009],[-55.833642578124966,52.310400390625034],[-55.79794921874998,53.211962890625045],[-56.46499023437502,53.765039062500136],[-57.14897460937499,53.8477050781251],[-57.41606445312493,54.162744140625136],[-58.1513671875,54.35043945312498],[-57.404443359374966,54.570410156250034],[-58.195263671874955,54.86591796875001],[-58.78017578125002,54.838378906250114],[-58.99711914062499,55.149462890625045],[-59.930322265624966,55.25942382812508],[-61.514599609374955,56.39033203125007],[-61.33374023437494,57.01059570312498],[-61.85107421874994,57.38129882812501],[-61.89907226562502,57.861328125000114],[-62.3056640625,57.97226562499998],[-62.59384765624992,58.47402343750002],[-63.18535156249999,58.85776367187509],[-64.49941406250002,60.26826171875001],[-64.93124999999998,60.252001953125045],[-65.43339843749993,59.77651367187502],[-65.60624999999999,59.11074218750008],[-66.60791015624994,58.548925781250034],[-67.56962890624993,58.21347656250009],[-68.69819335937501,58.904541015625],[-69.17348632812502,58.896630859374966],[-69.68188476562494,59.34174804687507],[-69.75590820312499,60.38852539062498],[-69.64047851562492,60.68979492187509],[-70.27929687499994,61.06865234374999],[-71.42270507812492,61.158935546875114],[-72.08144531250002,61.728271484375114],[-73.62998046874992,62.454199218750034],[-74.68989257812495,62.18344726562509],[-77.37241210937498,62.572509765625114],[-78.06811523437494,62.355419921875125],[-78.13715820312495,62.10737304687507],[-77.73618164062498,61.43735351562498],[-77.87153320312495,60.785839843750125],[-77.31181640624993,60.04238281250002],[-77.76069335937501,59.38002929687508],[-78.51508789062495,58.68237304687506],[-77.15678710937499,58.018896484375034],[-76.57285156249998,57.1812011718751],[-76.65048828124998,56.10722656249999],[-77.32495117187494,55.555517578125034],[-77.89111328124994,55.236425781250034],[-79.66552734374994,54.69746093750001],[-79.24179687499998,54.098876953125114],[-78.72377929687502,52.627734375000045],[-78.49165039062495,52.25209960937508],[-78.97773437499995,51.73378906250002],[-79.49755859375,51.569921875000034],[-79.83623046874999,51.17333984375006],[-80.36796874999999,51.32988281249999],[-80.657958984375,51.758349609375045],[-81.66123046874992,52.29389648437507],[-81.59941406249993,52.432617187500114],[-82.26044921874995,52.961132812500125],[-82.14145507812498,53.817626953125],[-82.41806640624992,54.355810546875034],[-82.21938476562502,54.8134765625],[-82.57744140624999,55.1487304687501],[-83.91059570312495,55.314648437499955],[-85.06093750000002,55.285644531250114],[-85.67666015625002,55.60107421875006],[-87.56088867187498,56.05634765625007],[-88.07509765624997,56.46728515624994],[-88.94848632812494,56.85131835937506],[-89.79082031249993,56.98134765625008],[-90.59218749999997,57.224462890625034],[-91.11127929687501,57.24121093750006],[-92.2490234375,57.00898437500001],[-93.27812499999993,58.756396484375045],[-94.28706054687495,58.716015625000125],[-94.71337890624994,58.903320312500114],[-94.78579101562497,59.953320312499955],[-94.64677734374999,60.416406249999966],[-94.06074218749995,61.317822265625125],[-93.42060546875001,61.705810546875114],[-92.36127929687495,62.81938476562499],[-91.448974609375,62.804052734375034],[-90.87119140624998,62.94594726562502],[-90.74658203124994,63.35156250000006],[-91.330078125,63.50683593750006],[-90.013427734375,63.80429687500009],[-90.14189453124999,63.981982421875045],[-88.65302734374995,64.00937499999992],[-88.10561523437497,64.18330078125001],[-87.28051757812494,64.82617187500006],[-87.29145507812495,65.35483398437498],[-86.04287109375002,66.02255859375009],[-86.63320312499997,66.53134765625003],[-85.44223632812498,66.537353515625],[-84.47841796875002,66.17929687500003],[-82.64150390624997,66.58750000000009],[-81.46757812499999,67.0698730468751],[-81.27011718749998,67.45991210937501],[-81.97646484375002,67.86201171875001],[-82.55268554687501,68.44648437500007],[-81.28154296874993,68.65722656250006],[-81.32866210937493,69.11992187499999],[-82.64204101562495,69.45839843750002],[-82.61835937499995,69.69106445312514],[-85.50737304687493,69.84526367187493],[-85.38676757812493,69.23188476562507],[-84.86220703125002,69.073974609375],[-85.73383789062495,68.630126953125],[-85.95258789062495,68.07246093750007],[-86.53642578124999,67.5161621093751],[-87.26625976562497,67.18383789062506],[-88.19589843749992,67.76582031249995],[-88.34697265624993,68.28828125000001],[-87.81030273437494,68.40415039062498],[-88.04135742187498,68.81171875000007],[-89.05673828124998,69.26611328125011],[-90.46835937499998,68.86376953125],[-90.82211914062498,69.29047851562507],[-92.75092773437501,69.71391601562499],[-91.56406249999998,70.1782714843751],[-92.9814453125,70.85224609375013],[-92.94868164062495,71.26210937500014],[-94.30834960937494,71.76489257812506],[-95.20122070312493,71.90371093750008],[-96.40566406250002,71.27363281249995],[-96.54560546875001,70.32724609375009],[-96.11909179687501,69.87187500000005],[-94.27080078124993,69.45512695312505],[-93.68144531249993,68.88725585937499],[-93.65170898437492,68.54311523437508],[-95.65048828124992,67.73745117187508],[-95.25874023437495,67.26254882812492],[-95.78251953124999,67.19379882812513],[-96.37138671874999,67.55385742187514],[-96.03603515625002,68.15776367187505],[-97.26591796874993,68.45292968749999],[-98.21855468749999,68.3174316406251],[-98.41713867187502,67.82646484375005],[-99.14687499999997,67.72363281250006],[-100.45610351562499,67.83945312500003],[-101.55498046874993,67.6931640625001],[-102.69199218749998,67.81157226562505],[-103.47412109374994,68.11503906250005],[-104.19355468749995,68.03120117187501],[-105.42861328124997,68.458251953125],[-106.16445312499997,68.91987304687507],[-108.3134765625,68.61079101562501],[-108.26103515624999,68.14990234375006],[-107.156494140625,66.88173828124997],[-108.59291992187497,67.59086914062505],[-109.63037109374994,67.73271484374999],[-110.04248046875,67.97719726562502],[-110.99003906249993,67.7908203125001],[-112.43515624999992,67.68476562499995],[-113.89321289062502,67.70688476562503],[-115.42685546874992,67.92353515625013],[-114.41386718749999,68.65957031250014],[-115.63115234374999,68.97255859375014],[-116.06523437499999,68.85541992187507],[-118.09521484375,69.04291992187507],[-118.86870117187499,69.25717773437503],[-120.29252929687499,69.42055664062514],[-120.96245117187499,69.66040039062511],[-123.02578125000002,69.81000976562507],[-123.60913085937494,69.37744140625006],[-124.76791992187498,69.99003906249993],[-126.06381835937498,69.46708984374999],[-127.13847656249999,70.23935546874992],[-127.76494140624999,70.22187500000013],[-128.97143554687494,69.71240234375006],[-130.49843749999997,70.14316406250009],[-133.163134765625,69.43388671874999],[-135.14082031249995,69.46782226562499],[-135.69145507812493,69.31118164062502],[-135.87631835937498,68.9169921875],[-136.71733398437493,68.88916015625006],[-138.128369140625,69.15195312500009],[-139.18154296874997,69.51552734375008],[-141.0021484375,69.65078125],[-141.0021484375,68.18974609375],[-141.0021484375,66.4365234375],[-141.0021484375,64.39111328125006],[-141.0021484375,61.761279296875045],[-141.0021484375,60.300244140625125],[-139.18515625,60.08359375],[-137.593310546875,59.22626953125001],[-137.43857421875,58.903125],[-136.578759765625,59.152246093749994],[-136.321826171875,59.604833984375],[-135.475927734375,59.79326171875],[-134.94375000000002,59.28828125000001],[-133.820751953125,58.705029296875],[-131.866162109375,56.792822265625],[-130.74169921875,56.3408203125],[-130.02509765625,55.8882324218751]]],[[[-109.815966796875,78.650390625],[-110.40781249999999,78.756640625],[-113.149951171875,78.4083984375],[-109.39052734375,78.336669921875],[-109.815966796875,78.650390625]]],[[[-110.458056640625,78.10322265625],[-113.21518554687499,77.903515625],[-113.16435546875,77.5302734375],[-111.951953125,77.344189453125],[-110.198486328125,77.52451171875],[-109.77177734375,77.957421875],[-110.458056640625,78.10322265625]]],[[[-115.55126953125,77.36328125],[-119.090185546875,77.305078125],[-121.61376953125,76.441455078125],[-121.908203125,76.034765625],[-119.91289062499999,75.858837890625],[-119.367919921875,76.22177734375],[-116.220458984375,76.611083984375],[-115.55126953125,77.36328125]]],[[[-108.2923828125,76.05712890625],[-108.62763671875,76.58671875],[-110.27001953125,76.4169921875],[-109.48681640625,76.144677734375],[-109.796044921875,75.863037109375],[-109.086376953125,75.506494140625],[-111.052685546875,75.54853515625],[-112.69760742187499,76.201708984375],[-114.19394531249999,76.45146484375],[-115.58066406249999,76.4375],[-116.609765625,76.07373046875],[-117.60009765625,75.2716796875],[-115.72885742187499,74.968115234375],[-114.45175781249999,75.087890625],[-113.5140625,74.430078125],[-112.5193359375,74.416845703125],[-110.940869140625,74.638720703125],[-108.831298828125,75.064892578125],[-107.15341796874999,74.9271484375],[-105.86259765625,75.191552734375],[-105.480908203125,75.745654296875],[-108.2923828125,76.05712890625]]],[[[-114.521533203125,72.592919921875],[-114.051708984375,73.07099609375],[-114.638232421875,73.37265625],[-116.5732421875,73.054931640625],[-118.37451171875,72.53388671875],[-118.2134765625,72.262890625],[-118.94462890624999,71.985546875],[-118.868408203125,71.686767578125],[-117.8140625,71.158447265625],[-118.2640625,70.888330078125],[-117.587060546875,70.629541015625],[-115.99091796875,70.586279296875],[-113.757275390625,70.69072265625],[-112.11416015625,70.446875],[-112.637890625,70.225244140625],[-114.592333984375,70.312451171875],[-117.13544921875,70.100146484375],[-116.51347656249999,69.424609375],[-113.694140625,69.19501953125],[-113.127734375,68.494140625],[-111.3109375,68.542041015625],[-108.94589843749999,68.759814453125],[-107.439892578125,69.0021484375],[-106.65908203125,69.439599609375],[-106.140869140625,69.16201171875],[-105.019580078125,69.08125],[-103.468212890625,68.808544921875],[-101.85712890625,69.023974609375],[-102.18212890625,69.845947265625],[-100.93510742187499,69.71533203125],[-101.14853515624999,70.147607421875],[-103.10498046875,70.51025390625],[-104.569580078125,71.104052734375],[-104.349560546875,71.433984375],[-105.41513671874999,72.788330078125],[-106.48212890625,73.19619140625],[-107.72001953125,73.329052734375],[-108.238232421875,73.105810546875],[-108.698291015625,72.499267578125],[-111.2697265625,72.713720703125],[-112.75361328125,72.98603515625],[-113.500048828125,72.69443359375],[-114.521533203125,72.592919921875]]],[[[-119.736328125,74.112646484375],[-121.31523437499999,74.52998046875],[-124.696240234375,74.348193359375],[-123.797265625,73.7681640625],[-124.83642578125,73.07626953125],[-124.98710937499999,72.58798828125],[-125.76259765625,72.1375],[-124.007763671875,71.67744140625],[-123.210595703125,71.1234375],[-120.6193359375,71.50576171875],[-120.1798828125,72.212646484375],[-118.961572265625,72.684130859375],[-115.44687499999999,73.4388671875],[-115.510693359375,73.61875],[-117.198828125,74.171142578125],[-117.96586914062499,74.266064453125],[-119.736328125,74.112646484375]]],[[[-69.48886718749999,83.016796875],[-69.969921875,83.11611328125],[-79.88632812499999,82.938525390625],[-82.122509765625,82.6017578125],[-86.58061523437499,82.18720703125],[-90.490185546875,81.87724609375],[-88.97836914062499,81.54150390625],[-89.94731445312499,81.17265625],[-88.92143554687499,80.805615234375],[-85.30742187499999,80.5259765625],[-83.40141601562499,80.71396484375],[-80.05107421874999,80.528564453125],[-83.7236328125,80.228955078125],[-86.30717773437499,80.3193359375],[-86.42075195312499,79.84521484375],[-85.089794921875,79.612158203125],[-84.31611328125,78.97529296875],[-86.80791015624999,78.774365234375],[-87.5517578125,78.176611328125],[-87.01796875,77.892236328125],[-88.094677734375,77.719189453125],[-86.873779296875,77.20029296875],[-88.39814453125,77.103955078125],[-89.499755859375,76.826806640625],[-89.570068359375,76.491943359375],[-85.141259765625,76.30458984375],[-83.885693359375,76.453125],[-81.17070312499999,76.512744140625],[-80.69028320312499,76.17646484375],[-78.284326171875,76.571240234375],[-78.28886718749999,76.977978515625],[-79.34086914062499,77.1583984375],[-78.076171875,77.51904296875],[-78.01259765625,77.946044921875],[-75.865966796875,78.009814453125],[-74.43310546875,78.72412109375],[-76.255859375,79.0068359375],[-75.25947265625,79.421044921875],[-71.387841796875,79.761767578125],[-70.143505859375,80.39765625],[-65.48398437499999,81.284765625],[-64.57402343749999,81.733740234375],[-62.176708984375,82.043408203125],[-61.392480468749994,82.44189453125],[-64.7767578125,82.87646484375],[-69.48886718749999,83.016796875]]],[[[-95.484375,77.7919921875],[-95.987060546875,77.484130859375],[-93.51958007812499,77.4744140625],[-93.3009765625,77.739794921875],[-95.484375,77.7919921875]]],[[[-93.54257812499999,75.0279296875],[-94.42724609375,75.593359375],[-95.67080078125,75.528662109375],[-96.56577148437499,75.09873046875],[-94.697265625,74.6421875],[-93.54716796874999,74.691064453125],[-93.54257812499999,75.0279296875]]],[[[-100.001904296875,73.9458984375],[-100.91513671874999,73.80537109375],[-101.45087890625,73.43095703125],[-100.282666015625,73.1203125],[-100.484765625,72.77294921875],[-102.71367187499999,72.78291015625],[-101.72392578124999,72.314892578125],[-100.594482421875,72.15234375],[-99.167138671875,71.3671875],[-98.66289062499999,71.302099609375],[-96.613427734375,71.833837890625],[-97.05180664062499,72.63681640625],[-97.7958984375,73.285302734375],[-97.001708984375,73.66650390625],[-97.58183593749999,73.887548828125],[-99.157958984375,73.731591796875],[-100.001904296875,73.9458984375]]],[[[-84.91962890625,65.261083984375],[-85.24111328125,65.7955078125],[-85.961669921875,65.704248046875],[-86.374267578125,64.5658203125],[-86.252099609375,64.136865234375],[-87.188916015625,63.672265624999994],[-85.71416015624999,63.657958984375],[-85.4955078125,63.139111328125],[-84.63291015624999,63.309228515624994],[-83.728271484375,63.813378906249994],[-83.4943359375,64.09921875],[-82.46708984374999,63.926953125],[-82.378125,63.706787109375],[-81.04638671875,63.461572265624994],[-80.30205078124999,63.76220703125],[-80.82895507812499,64.08994140625],[-81.71611328124999,64.021875],[-82.05,64.644287109375],[-83.40712890625,65.10390625],[-84.91962890625,65.261083984375]]],[[[-97.700927734375,76.46650390625],[-100.387939453125,76.61357421875],[-102.13774414062499,76.28486328125],[-101.43134765625,75.9919921875],[-102.54140625,75.513623046875],[-100.7119140625,75.40634765625],[-100.234375,75.00771484375],[-97.79936523437499,75.116650390625],[-97.409619140625,75.552099609375],[-97.700927734375,76.46650390625]]],[[[-103.426025390625,79.315625],[-105.3876953125,79.323583984375],[-105.53564453125,79.03251953125],[-103.518359375,78.769140625],[-102.73134765625,78.371044921875],[-101.07412109375,78.19384765625],[-100.58603515624999,77.891796875],[-99.16640625,77.85693359375],[-99.60942382812499,78.583056640625],[-103.426025390625,79.315625]]],[[[-91.88554687499999,81.132861328125],[-95.269775390625,81.00078125],[-96.1328125,80.69140625],[-95.614453125,80.396240234375],[-96.77324218749999,80.135791015625],[-95.29697265624999,79.653076171875],[-95.103173828125,79.289892578125],[-92.67827148437499,78.389111328125],[-90.614404296875,78.149853515625],[-88.791015625,78.192431640625],[-87.01645507812499,78.898681640625],[-85.28984374999999,79.208349609375],[-85.5013671875,79.530322265625],[-87.14423828125,79.662646484375],[-87.675,80.372119140625],[-90.643017578125,80.593701171875],[-91.88554687499999,81.132861328125]]],[[[-94.29497070312499,76.912451171875],[-95.63823242187499,77.06376953125],[-96.63969726562499,76.7029296875],[-95.273876953125,76.264404296875],[-93.091748046875,76.35400390625],[-92.18510742187499,75.846533203125],[-92.42709960937499,75.34638671875],[-91.961572265625,74.793212890625],[-89.844384765625,74.548583984375],[-88.423046875,74.494140625],[-81.808837890625,74.476611328125],[-80.277734375,74.581591796875],[-79.507958984375,74.880126953125],[-79.66020507812499,75.44951171875],[-82.15366210937499,75.8310546875],[-83.93198242187499,75.8189453125],[-86.06875,75.50224609375],[-88.201318359375,75.51201171875],[-90.2513671875,76.053466796875],[-91.30502929687499,76.68076171875],[-92.716259765625,76.602978515625],[-94.29497070312499,76.912451171875]]],[[[-96.2044921875,78.531298828125],[-98.25493164062499,78.429248046875],[-96.9896484375,77.806005859375],[-95.08701171874999,77.992626953125],[-94.887158203125,78.34521484375],[-96.2044921875,78.531298828125]]],[[[-93.170849609375,74.160986328125],[-95.03984374999999,74.023876953125],[-95.63291015624999,73.695458984375],[-95.547607421875,72.78154296875],[-95.19296874999999,72.02744140625],[-94.037548828125,72.028759765625],[-93.34062499999999,72.80185546875],[-92.117919921875,72.75380859375],[-90.35458984374999,73.86865234375],[-92.22270507812499,73.97236328125],[-93.170849609375,74.160986328125]]],[[[-97.439453125,69.64267578125],[-99.56406249999999,69.034130859375],[-99.25400390624999,68.86318359375],[-97.47202148437499,68.543701171875],[-96.4015625,68.470703125],[-95.68564453124999,68.73583984375],[-96.299951171875,69.344384765625],[-97.439453125,69.64267578125]]],[[[-61.10517578125,45.944726562499994],[-60.57685546875,46.172167968749996],[-60.33173828125,46.767822265625],[-60.87016601562499,46.796777343749994],[-61.4953125,45.941455078124996],[-61.28369140625,45.573876953124994],[-60.38608398437499,45.654638671875],[-59.86503906249999,46.159521484375],[-60.50493164062499,46.203857421875],[-60.806103515625,45.738085937499996],[-61.10517578125,45.944726562499994]]],[[[-67.12485351562499,45.16943359375],[-66.8724609375,45.067285156249994],[-65.88447265625,45.222900390625],[-64.897900390625,45.6259765625],[-64.44882812499999,45.2560546875],[-65.65673828125,44.760302734374996],[-66.099560546875,44.367480468749996],[-66.125732421875,43.813818359375],[-65.73813476562499,43.5607421875],[-64.86235351562499,43.86787109375],[-64.286083984375,44.550341796874996],[-63.761132812499994,44.48642578125],[-61.28378906249999,45.235498046874994],[-61.49228515624999,45.68701171875],[-61.955517578125,45.8681640625],[-62.483056640624994,45.621826171875],[-63.29277343749999,45.751953125],[-64.54150390625,46.24033203125],[-64.90576171875,46.887939453125],[-65.31889648437499,47.101220703124994],[-64.91220703124999,47.36865234375],[-64.70322265624999,47.724853515625],[-65.228173828125,47.811279296875],[-65.666455078125,47.696142578125],[-65.926708984375,48.188867187499994],[-65.259423828125,48.021240234375],[-64.25375976562499,48.550390625],[-64.26181640624999,48.921875],[-64.836328125,49.191748046875],[-66.178173828125,49.213134765625],[-67.56088867187499,48.85595703125],[-68.987060546875,48.275],[-70.519482421875,47.032519531249996],[-71.261181640625,46.756249999999994],[-71.90092773437499,46.63193359375],[-73.1595703125,46.010058593749996],[-73.55810546875,45.425097656249996],[-74.70888671875002,45.003857421875125],[-71.517529296875,45.007568359375],[-71.327294921875,45.290087890624996],[-70.89799804687499,45.262451171875],[-70.29624023437499,45.906103515625],[-70.00771484375,46.708935546875],[-69.24287109375,47.46298828125],[-68.82871093749999,47.2033203125],[-68.31088867187499,47.3544921875],[-67.806787109375,47.082812499999996],[-67.78466796875,45.701708984374996],[-67.43266601562499,45.603125],[-67.47255859375,45.27587890625],[-67.12485351562499,45.16943359375]]],[[[-55.458740234375,51.536523437499994],[-56.0255859375,51.568359375],[-56.7501953125,51.27490234375],[-57.297998046874994,50.69873046875],[-58.0158203125,49.54248046875],[-58.716455078124994,48.598046874999994],[-58.710595703124994,48.325048828125],[-59.36240234374999,47.865673828125],[-59.116943359375,47.570703124999994],[-58.333203125,47.67685546875],[-56.95249023437499,47.574462890625],[-56.22128906249999,47.67138671875],[-54.856640625,47.385009765625],[-53.869091796875,47.387011718749996],[-54.173730468749994,46.88037109375],[-53.616357421874994,46.6802734375],[-53.069775390625,46.68125],[-52.65366210937499,47.5494140625],[-53.175537109375,47.652978515624994],[-52.954980468749994,48.029296875],[-53.531201171875,48.231884765625],[-53.85288085937499,48.811328124999996],[-53.5734375,49.1412109375],[-53.95771484375,49.441845703125],[-54.579052734375,49.4908203125],[-55.02617187499999,49.30537109375],[-55.892041015625,49.5802734375],[-55.76474609374999,49.96044921875],[-56.693994140624994,50.05966796875],[-55.87138671874999,50.907373046874994],[-55.458740234375,51.536523437499994]]],[[[-86.58935546875,71.010791015625],[-85.023388671875,71.35322265625],[-86.0361328125,71.770947265625],[-86.629345703125,72.87080078125],[-84.97451171875,73.694775390625],[-86.76875,73.833984375],[-87.71977539062499,73.722900390625],[-89.26323242187499,73.068994140625],[-90.02519531249999,71.948779296875],[-89.84575195312499,71.49228515625],[-89.079345703125,71.287939453125],[-87.8724609375,71.208544921875],[-87.844921875,70.944384765625],[-89.36552734374999,71.0671875],[-88.84843749999999,70.522900390625],[-87.90068359374999,70.251904296875],[-86.62431640624999,70.40126953125],[-86.322021484375,70.14541015625],[-82.13872070312499,69.8412109375],[-81.098291015625,70.091162109375],[-79.61591796875,69.8947265625],[-78.809814453125,70.178564453125],[-77.12880859375,69.652734375],[-75.78715820312499,69.31865234375],[-76.40341796874999,68.692333984375],[-74.91728515624999,68.982861328125],[-74.64794921875,68.70751953125],[-73.32822265624999,68.266748046875],[-72.22001953124999,67.254296875],[-74.43393554687499,66.139013671875],[-73.5607421875,65.542919921875],[-75.8283203125,65.22705078125],[-77.32670898437499,65.453125],[-77.4474609375,65.161572265625],[-78.09560546875,64.9392578125],[-77.791162109375,64.36708984375],[-76.723828125,64.242041015625],[-75.0673828125,64.456689453125],[-74.512451171875,64.670166015625],[-73.44365234374999,64.423486328125],[-71.25371093749999,63.042529296875],[-70.23613281249999,62.76337890625],[-69.545166015625,62.744580078125],[-69.08232421874999,62.405175781249994],[-67.44013671875,62.151269531249994],[-66.25668945312499,61.86826171875],[-66.28125,62.302685546875],[-67.6759765625,63.0935546875],[-65.97885742187499,63.00068359375],[-65.2658203125,62.715087890625],[-65.06894531249999,63.2634765625],[-64.51435546875,63.26396484375],[-64.678466796875,64.027978515625],[-65.2748046875,64.63154296875],[-66.86064453124999,65.0916015625],[-67.30341796875,65.48291015625],[-68.2568359375,65.938623046875],[-67.18320312499999,66.034423828125],[-66.476953125,66.279736328125],[-65.30537109375,66.008447265625],[-65.401611328125,65.764013671875],[-64.66533203124999,65.1689453125],[-63.401806640625,65.11845703125],[-63.3642578125,65.543212890625],[-62.65888671875,65.63994140625],[-61.991601562499994,66.035302734375],[-61.299707031249994,66.64873046875],[-61.96855468749999,67.01904296875],[-64.007958984375,67.347314453125],[-64.5275390625,67.8126953125],[-66.22519531249999,67.958740234375],[-67.032958984375,68.32607421875],[-68.03793945312499,68.550732421875],[-67.751708984375,69.038671875],[-66.77084960937499,69.336669921875],[-68.51303710937499,69.577294921875],[-67.363671875,70.034423828125],[-69.168701171875,70.76416015625],[-70.5609375,70.73828125],[-71.459912109375,71.463720703125],[-74.31572265624999,71.84267578125],[-75.185791015625,72.434228515625],[-76.893505859375,72.720654296875],[-78.00102539062499,72.68759765625],[-79.000244140625,72.272021484375],[-80.94121093749999,72.21015625],[-80.27470703124999,72.745556640625],[-81.40615234375,73.634521484375],[-82.659619140625,73.72958984375],[-85.01840820312499,73.335498046875],[-85.64453125,72.774462890625],[-85.34111328124999,72.421533203125],[-85.91162109375,71.9865234375],[-84.65996093749999,71.5861328125],[-84.78959960937499,71.09326171875],[-86.58935546875,71.010791015625]]],[[[-61.80112304687499,49.093896484374994],[-61.817138671875,49.283544921875],[-62.858544921874994,49.705468749999994],[-64.13144531249999,49.941650390625],[-63.565869140625,49.399316406249994],[-62.21953124999999,49.0791015625],[-61.80112304687499,49.093896484374994]]],[[[-63.811279296875,46.468701171875],[-63.641015624999994,46.23046875],[-62.878369140625,46.001367187499994],[-62.16357421875,46.487207031249994],[-63.12939453125,46.422216796875],[-63.811279296875,46.468701171875]]],[[[-82.00048828125,62.95419921875],[-83.376416015625,62.904931640624994],[-83.89926757812499,62.476464843749994],[-83.698876953125,62.16025390625],[-83.0158203125,62.209912109375],[-82.113720703125,62.652246093749994],[-82.00048828125,62.95419921875]]],[[[-79.5453125,62.41171875],[-80.23466796874999,62.152685546875],[-80.27617187499999,61.85859375],[-79.7142578125,61.612548828125],[-79.32392578125,62.02607421875],[-79.5453125,62.41171875]]],[[[-75.67587890624999,68.322509765625],[-76.740234375,68.23125],[-77.305908203125,67.706103515625],[-77.0048828125,67.266943359375],[-75.78007812499999,67.283544921875],[-75.12729492187499,67.5373046875],[-75.15380859375,68.234033203125],[-75.67587890624999,68.322509765625]]],[[[-79.5373046875,73.6544921875],[-80.848876953125,73.721240234375],[-80.824169921875,73.3806640625],[-79.50053710937499,72.75595703125],[-77.8359375,72.896826171875],[-76.400537109375,72.820654296875],[-76.28955078125,73.081005859375],[-77.20654296875,73.499560546875],[-79.5373046875,73.6544921875]]],[[[-80.731689453125,52.747265625],[-81.13559570312499,53.205810546875],[-81.847314453125,53.186279296875],[-81.8390625,52.95791015625],[-80.731689453125,52.747265625]]],[[[-78.93559570312499,56.266064453125],[-79.596337890625,56.244482421875],[-80.00078124999999,55.932080078125],[-79.17548828125,55.885058593749996],[-78.93559570312499,56.266064453125]]],[[[-105.28891601562499,72.919921875],[-104.58286132812499,73.35390625],[-105.51230468749999,73.765771484375],[-106.921533203125,73.479833984375],[-105.28891601562499,72.919921875]]],[[[-102.22734374999999,76.014892578125],[-102.58408203124999,76.281640625],[-104.350634765625,76.18232421875],[-103.31474609375,75.764208984375],[-102.22734374999999,76.014892578125]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Canada","SOV_A3":"CAN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Canada","ADM0_A3":"CAN","GEOU_DIF":0,"GEOUNIT":"Canada","GU_A3":"CAN","SU_DIF":0,"SUBUNIT":"Canada","SU_A3":"CAN","BRK_DIFF":0,"NAME":"Canada","NAME_LONG":"Canada","BRK_A3":"CAN","BRK_NAME":"Canada","BRK_GROUP":"","ABBREV":"Can.","POSTAL":"CA","FORMAL_EN":"Canada","FORMAL_FR":"","NAME_CIAWF":"Canada","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Canada","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":6,"MAPCOLOR9":2,"MAPCOLOR13":2,"POP_EST":37589262,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":1736425,"GDP_YEAR":2019,"ECONOMY":"1. Developed region: G7","INCOME_GRP":"1. High income: OECD","FIPS_10":"CA","ISO_A2":"CA","ISO_A2_EH":"CA","ISO_A3":"CAN","ISO_A3_EH":"CAN","ISO_N3":"124","ISO_N3_EH":"124","UN_A3":"124","WB_A2":"CA","WB_A3":"CAN","WOE_ID":23424775,"WOE_ID_EH":23424775,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CAN","ADM0_DIFF":"","ADM0_TLC":"CAN","ADM0_A3_US":"CAN","ADM0_A3_FR":"CAN","ADM0_A3_RU":"CAN","ADM0_A3_ES":"CAN","ADM0_A3_CN":"CAN","ADM0_A3_TW":"CAN","ADM0_A3_IN":"CAN","ADM0_A3_NP":"CAN","ADM0_A3_PK":"CAN","ADM0_A3_DE":"CAN","ADM0_A3_GB":"CAN","ADM0_A3_BR":"CAN","ADM0_A3_IL":"CAN","ADM0_A3_PS":"CAN","ADM0_A3_SA":"CAN","ADM0_A3_EG":"CAN","ADM0_A3_MA":"CAN","ADM0_A3_PT":"CAN","ADM0_A3_AR":"CAN","ADM0_A3_JP":"CAN","ADM0_A3_KO":"CAN","ADM0_A3_VN":"CAN","ADM0_A3_TR":"CAN","ADM0_A3_ID":"CAN","ADM0_A3_PL":"CAN","ADM0_A3_GR":"CAN","ADM0_A3_IT":"CAN","ADM0_A3_NL":"CAN","ADM0_A3_SE":"CAN","ADM0_A3_BD":"CAN","ADM0_A3_UA":"CAN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Northern America","REGION_WB":"North America","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":5.7,"LABEL_X":-101.9107,"LABEL_Y":60.324287,"NE_ID":1159320467,"WIKIDATAID":"Q16","NAME_AR":"كندا","NAME_BN":"কানাডা","NAME_DE":"Kanada","NAME_EN":"Canada","NAME_ES":"Canadá","NAME_FA":"کانادا","NAME_FR":"Canada","NAME_EL":"Καναδάς","NAME_HE":"קנדה","NAME_HI":"कनाडा","NAME_HU":"Kanada","NAME_ID":"Kanada","NAME_IT":"Canada","NAME_JA":"カナダ","NAME_KO":"캐나다","NAME_NL":"Canada","NAME_PL":"Kanada","NAME_PT":"Canadá","NAME_RU":"Канада","NAME_SV":"Kanada","NAME_TR":"Kanada","NAME_UK":"Канада","NAME_UR":"کینیڈا","NAME_VI":"Canada","NAME_ZH":"加拿大","NAME_ZHT":"加拿大","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[8.555859375000011,4.7552246093749915],[8.90283203125,4.4351562499999915],[9.000097656250006,4.091601562499989],[9.42529296875,3.922314453124997],[9.876171875000011,3.309765624999997],[9.80078125,2.304443359375],[9.979882812500023,2.1677734374999886],[11.328710937500006,2.167431640624997],[11.348437500000017,2.2997070312499943],[13.220312500000006,2.2564453124999915],[13.293554687500006,2.161572265624997],[14.484082031250011,2.154736328124997],[14.902441406250006,2.0123046874999915],[15.741601562500023,1.9149902343749972],[16.059375000000017,1.6762207031249972],[16.183398437500017,2.2700683593749886],[16.0634765625,2.9085937499999943],[15.775000000000006,3.127197265625],[15.128710937500017,3.826904296875],[15.022753906250017,4.358544921874994],[14.708984375,4.665576171874989],[14.616894531250011,5.865136718749994],[14.7392578125,6.27978515625],[15.245898437500017,7.263574218749994],[15.480078125000006,7.5237792968749915],[15.442968750000006,7.851855468749989],[15.1162109375,8.557324218749997],[14.332324218750017,9.203515624999994],[13.977246093750011,9.691552734374994],[14.243261718750006,9.979736328125],[15.540917968750023,9.960302734374991],[15.276074218750011,10.357373046874997],[15.029882812500006,11.113671874999994],[15.081250000000011,11.845507812499989],[14.76123046875,12.655615234374991],[14.516210937500006,12.979736328125],[14.06396484375,13.078515624999994],[14.197460937500011,12.3837890625],[14.627148437500011,12.108691406249989],[14.559765625000011,11.492285156249991],[13.89208984375,11.140087890624997],[13.535351562500011,10.605078124999991],[13.269921875000023,10.036181640624989],[13.175488281250011,9.539648437499991],[12.929492187500017,9.42626953125],[12.806542968750023,8.886621093749994],[12.403515625000011,8.595556640624991],[12.016015625000023,7.589746093749994],[11.767382812500017,7.272265624999989],[11.551660156250023,6.697265625],[11.1533203125,6.437939453124997],[11.032519531250017,6.697900390624994],[10.606250000000017,7.0630859374999915],[10.1435546875,6.9964355468749915],[9.060156250000006,6.009082031249989],[8.800976562500011,5.197460937499997],[8.555859375000011,4.7552246093749915]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Cameroon","SOV_A3":"CMR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Cameroon","ADM0_A3":"CMR","GEOU_DIF":0,"GEOUNIT":"Cameroon","GU_A3":"CMR","SU_DIF":0,"SUBUNIT":"Cameroon","SU_A3":"CMR","BRK_DIFF":0,"NAME":"Cameroon","NAME_LONG":"Cameroon","BRK_A3":"CMR","BRK_NAME":"Cameroon","BRK_GROUP":"","ABBREV":"Cam.","POSTAL":"CM","FORMAL_EN":"Republic of Cameroon","FORMAL_FR":"","NAME_CIAWF":"Cameroon","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Cameroon","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":3,"POP_EST":25876380,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":39007,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"CM","ISO_A2":"CM","ISO_A2_EH":"CM","ISO_A3":"CMR","ISO_A3_EH":"CMR","ISO_N3":"120","ISO_N3_EH":"120","UN_A3":"120","WB_A2":"CM","WB_A3":"CMR","WOE_ID":23424785,"WOE_ID_EH":23424785,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"CMR","ADM0_DIFF":"","ADM0_TLC":"CMR","ADM0_A3_US":"CMR","ADM0_A3_FR":"CMR","ADM0_A3_RU":"CMR","ADM0_A3_ES":"CMR","ADM0_A3_CN":"CMR","ADM0_A3_TW":"CMR","ADM0_A3_IN":"CMR","ADM0_A3_NP":"CMR","ADM0_A3_PK":"CMR","ADM0_A3_DE":"CMR","ADM0_A3_GB":"CMR","ADM0_A3_BR":"CMR","ADM0_A3_IL":"CMR","ADM0_A3_PS":"CMR","ADM0_A3_SA":"CMR","ADM0_A3_EG":"CMR","ADM0_A3_MA":"CMR","ADM0_A3_PT":"CMR","ADM0_A3_AR":"CMR","ADM0_A3_JP":"CMR","ADM0_A3_KO":"CMR","ADM0_A3_VN":"CMR","ADM0_A3_TR":"CMR","ADM0_A3_ID":"CMR","ADM0_A3_PL":"CMR","ADM0_A3_GR":"CMR","ADM0_A3_IT":"CMR","ADM0_A3_NL":"CMR","ADM0_A3_SE":"CMR","ADM0_A3_BD":"CMR","ADM0_A3_UA":"CMR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":12.473488,"LABEL_Y":4.585041,"NE_ID":1159320509,"WIKIDATAID":"Q1009","NAME_AR":"الكاميرون","NAME_BN":"ক্যামেরুন","NAME_DE":"Kamerun","NAME_EN":"Cameroon","NAME_ES":"Camerún","NAME_FA":"کامرون","NAME_FR":"Cameroun","NAME_EL":"Καμερούν","NAME_HE":"קמרון","NAME_HI":"कैमरुन","NAME_HU":"Kamerun","NAME_ID":"Kamerun","NAME_IT":"Camerun","NAME_JA":"カメルーン","NAME_KO":"카메룬","NAME_NL":"Kameroen","NAME_PL":"Kamerun","NAME_PT":"Camarões","NAME_RU":"Камерун","NAME_SV":"Kamerun","NAME_TR":"Kamerun","NAME_UK":"Камерун","NAME_UR":"کیمرون","NAME_VI":"Cameroon","NAME_ZH":"喀麦隆","NAME_ZHT":"喀麥隆","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[107.51943359375002,14.705078125],[106.81992187500003,14.314697265624943],[106.50146484375,14.578222656250034],[105.97890625000002,14.343017578125],[105.90449218750001,13.924511718749997],[105.18330078125001,14.346240234375003],[104.77900390625001,14.427832031249991],[103.19941406250001,14.332617187499991],[102.72890625000002,13.841894531249991],[102.31972656250002,13.539990234374997],[102.49960937500003,12.669970703124989],[102.75566406249999,12.42626953125],[102.73662109374999,12.089794921874997],[102.93388671874999,11.706689453124994],[103.12548828125,11.460644531249997],[103.15283203125,10.913720703124994],[103.53242187500001,11.146679687499997],[103.72187500000001,10.89013671875],[103.5322265625,10.604638671874994],[104.26240234375001,10.541259765625],[104.42636718750003,10.411230468749991],[104.8505859375,10.534472656249989],[105.38652343749999,10.940087890624994],[106.16796875,11.012304687499991],[105.85605468750003,11.294287109374991],[105.85146484375002,11.635009765625],[106.33984375,11.681835937499997],[106.41386718749999,11.948437499999997],[106.9306640625,12.077490234374991],[107.50644531250003,12.364550781249989],[107.47539062499999,13.030371093749991],[107.60546875,13.437792968750003],[107.33144531250002,14.126611328124994],[107.51943359375002,14.705078125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Cambodia","SOV_A3":"KHM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Cambodia","ADM0_A3":"KHM","GEOU_DIF":0,"GEOUNIT":"Cambodia","GU_A3":"KHM","SU_DIF":0,"SUBUNIT":"Cambodia","SU_A3":"KHM","BRK_DIFF":0,"NAME":"Cambodia","NAME_LONG":"Cambodia","BRK_A3":"KHM","BRK_NAME":"Cambodia","BRK_GROUP":"","ABBREV":"Camb.","POSTAL":"KH","FORMAL_EN":"Kingdom of Cambodia","FORMAL_FR":"","NAME_CIAWF":"Cambodia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Cambodia","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":3,"MAPCOLOR9":6,"MAPCOLOR13":5,"POP_EST":16486542,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":27089,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"CB","ISO_A2":"KH","ISO_A2_EH":"KH","ISO_A3":"KHM","ISO_A3_EH":"KHM","ISO_N3":"116","ISO_N3_EH":"116","UN_A3":"116","WB_A2":"KH","WB_A3":"KHM","WOE_ID":23424776,"WOE_ID_EH":23424776,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"KHM","ADM0_DIFF":"","ADM0_TLC":"KHM","ADM0_A3_US":"KHM","ADM0_A3_FR":"KHM","ADM0_A3_RU":"KHM","ADM0_A3_ES":"KHM","ADM0_A3_CN":"KHM","ADM0_A3_TW":"KHM","ADM0_A3_IN":"KHM","ADM0_A3_NP":"KHM","ADM0_A3_PK":"KHM","ADM0_A3_DE":"KHM","ADM0_A3_GB":"KHM","ADM0_A3_BR":"KHM","ADM0_A3_IL":"KHM","ADM0_A3_PS":"KHM","ADM0_A3_SA":"KHM","ADM0_A3_EG":"KHM","ADM0_A3_MA":"KHM","ADM0_A3_PT":"KHM","ADM0_A3_AR":"KHM","ADM0_A3_JP":"KHM","ADM0_A3_KO":"KHM","ADM0_A3_VN":"KHM","ADM0_A3_TR":"KHM","ADM0_A3_ID":"KHM","ADM0_A3_PL":"KHM","ADM0_A3_GR":"KHM","ADM0_A3_IT":"KHM","ADM0_A3_NL":"KHM","ADM0_A3_SE":"KHM","ADM0_A3_BD":"KHM","ADM0_A3_UA":"KHM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":104.50487,"LABEL_Y":12.647584,"NE_ID":1159320979,"WIKIDATAID":"Q424","NAME_AR":"كمبوديا","NAME_BN":"কম্বোডিয়া","NAME_DE":"Kambodscha","NAME_EN":"Cambodia","NAME_ES":"Camboya","NAME_FA":"کامبوج","NAME_FR":"Cambodge","NAME_EL":"Καμπότζη","NAME_HE":"קמבודיה","NAME_HI":"कम्बोडिया","NAME_HU":"Kambodzsa","NAME_ID":"Kamboja","NAME_IT":"Cambogia","NAME_JA":"カンボジア","NAME_KO":"캄보디아","NAME_NL":"Cambodja","NAME_PL":"Kambodża","NAME_PT":"Camboja","NAME_RU":"Камбоджа","NAME_SV":"Kambodja","NAME_TR":"Kamboçya","NAME_UK":"Камбоджа","NAME_UR":"کمبوڈیا","NAME_VI":"Campuchia","NAME_ZH":"柬埔寨","NAME_ZHT":"柬埔寨","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100.12246093750002,20.316650390625],[100.24931640624999,20.730273437500003],[100.75664062499999,21.312646484374994],[101.13886718750001,21.56748046874999],[100.83515625000001,21.655175781249994],[100.21474609375002,21.46298828124999],[99.91767578125001,22.028027343749997],[99.19296875000003,22.1259765625],[99.33769531249999,22.498046875],[99.3408203125,23.095898437499997],[98.86376953125,23.19125976562499],[98.76435546875001,24.11606445312499],[98.21250000000003,24.110644531250003],[97.68603515625,23.898095703124994],[97.53144531250001,24.49169921875],[97.81953125000001,25.251855468749994],[98.0107421875,25.292529296875003],[98.65468750000002,25.917773437500003],[98.73183593750002,26.583398437499994],[98.65117187499999,27.572460937499997],[98.298828125,27.550097656249996],[98.09892578124999,28.142285156249997],[97.53789062499999,28.510205078124997],[97.32246093750001,28.217968749999997],[97.33515625000001,27.937744140625],[96.66572265625001,27.339257812499994],[96.06142578125002,27.217089843749996],[95.12871093749999,26.59726562500009],[95.13242187500003,26.041259765625],[94.62285156249999,25.41000976562499],[94.70761718750003,25.048730468749994],[94.29306640625003,24.32187499999999],[94.12763671875001,23.87646484375],[93.30732421874995,24.021875000000136],[93.41494140625002,23.682080078124997],[93.36601562499999,23.132519531249997],[93.07871093750003,22.718212890624997],[93.16201171875002,22.360205078125034],[92.96455078125001,22.00375976562499],[92.57490234374995,21.97807617187499],[92.59345703125001,21.467333984375003],[92.17958984375002,21.293115234374994],[92.32412109375002,20.79184570312499],[92.73564453124999,20.562695312499997],[93.001953125,20.074853515624994],[93.3623046875,20.058300781249997],[93.99814453125003,19.440869140624997],[93.70546875000002,19.026904296875003],[94.07001953125001,18.89340820312499],[94.43076171875003,18.20166015625],[94.58896484375003,17.5693359375],[94.21425781250002,16.126611328124994],[94.58750000000003,16.288818359375],[94.94257812500001,15.818261718749994],[95.38955078125002,15.722753906249991],[95.76328125000003,16.16904296874999],[96.62246093750002,16.563916015624997],[97.17832031250003,17.06201171875],[97.37587890625002,16.52294921875],[97.61962890625,16.53720703124999],[97.58427734374999,16.019580078125003],[97.71035156250002,15.875537109375003],[97.81230468749999,14.858935546875003],[98.24541015624999,13.733496093749991],[98.57597656249999,13.161914062499989],[98.74140625000001,11.591699218749994],[98.67558593749999,10.986914062499991],[98.46494140625003,10.675830078124989],[98.70253906250002,10.190380859374997],[98.75722656250002,10.660937499999989],[99.19013671875001,11.105273437499989],[99.61474609375,11.781201171874997],[99.40507812499999,12.547900390624989],[99.21982421875003,12.73974609375],[99.13681640625003,13.716699218749994],[98.24599609375002,14.814746093750003],[98.19101562500003,15.2041015625],[98.56523437499999,15.403564453125],[98.68925781249999,16.305419921875],[98.43886718750002,16.97568359374999],[97.79296875,17.68124999999999],[97.48496093750003,18.49423828124999],[97.75400390625003,18.620800781249997],[97.81679687500002,19.4599609375],[98.23906249999999,19.690673828125],[98.91669921875001,19.772900390624997],[99.02070312500001,20.041796875000003],[99.337890625,20.078906250000003],[99.89033203125001,20.42441406249999],[100.12246093750002,20.316650390625]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Myanmar","SOV_A3":"MMR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Myanmar","ADM0_A3":"MMR","GEOU_DIF":0,"GEOUNIT":"Myanmar","GU_A3":"MMR","SU_DIF":0,"SUBUNIT":"Myanmar","SU_A3":"MMR","BRK_DIFF":0,"NAME":"Myanmar","NAME_LONG":"Myanmar","BRK_A3":"MMR","BRK_NAME":"Myanmar","BRK_GROUP":"","ABBREV":"Myan.","POSTAL":"MM","FORMAL_EN":"Republic of the Union of Myanmar","FORMAL_FR":"","NAME_CIAWF":"Burma","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Myanmar","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":13,"POP_EST":54045420,"POP_RANK":16,"POP_YEAR":2019,"GDP_MD":76085,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"BM","ISO_A2":"MM","ISO_A2_EH":"MM","ISO_A3":"MMR","ISO_A3_EH":"MMR","ISO_N3":"104","ISO_N3_EH":"104","UN_A3":"104","WB_A2":"MM","WB_A3":"MMR","WOE_ID":23424763,"WOE_ID_EH":23424763,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"MMR","ADM0_DIFF":"","ADM0_TLC":"MMR","ADM0_A3_US":"MMR","ADM0_A3_FR":"MMR","ADM0_A3_RU":"MMR","ADM0_A3_ES":"MMR","ADM0_A3_CN":"MMR","ADM0_A3_TW":"MMR","ADM0_A3_IN":"MMR","ADM0_A3_NP":"MMR","ADM0_A3_PK":"MMR","ADM0_A3_DE":"MMR","ADM0_A3_GB":"MMR","ADM0_A3_BR":"MMR","ADM0_A3_IL":"MMR","ADM0_A3_PS":"MMR","ADM0_A3_SA":"MMR","ADM0_A3_EG":"MMR","ADM0_A3_MA":"MMR","ADM0_A3_PT":"MMR","ADM0_A3_AR":"MMR","ADM0_A3_JP":"MMR","ADM0_A3_KO":"MMR","ADM0_A3_VN":"MMR","ADM0_A3_TR":"MMR","ADM0_A3_ID":"MMR","ADM0_A3_PL":"MMR","ADM0_A3_GR":"MMR","ADM0_A3_IT":"MMR","ADM0_A3_NL":"MMR","ADM0_A3_SE":"MMR","ADM0_A3_BD":"MMR","ADM0_A3_UA":"MMR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":95.804497,"LABEL_Y":21.573855,"NE_ID":1159321067,"WIKIDATAID":"Q836","NAME_AR":"ميانمار","NAME_BN":"মিয়ানমার","NAME_DE":"Myanmar","NAME_EN":"Myanmar","NAME_ES":"Birmania","NAME_FA":"میانمار","NAME_FR":"Birmanie","NAME_EL":"Μιανμάρ","NAME_HE":"מיאנמר","NAME_HI":"म्यान्मार","NAME_HU":"Mianmar","NAME_ID":"Myanmar","NAME_IT":"Birmania","NAME_JA":"ミャンマー","NAME_KO":"미얀마","NAME_NL":"Myanmar","NAME_PL":"Mjanma","NAME_PT":"Myanmar","NAME_RU":"Мьянма","NAME_SV":"Myanmar","NAME_TR":"Myanmar","NAME_UK":"М'янма","NAME_UR":"میانمار","NAME_VI":"Myanma","NAME_ZH":"缅甸","NAME_ZHT":"緬甸","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[30.553613281250023,-2.4000976562500114],[29.93017578125,-2.3395507812500114],[29.8681640625,-2.7164062500000057],[29.390234375000006,-2.80859375],[29.01435546875001,-2.72021484375],[29.224414062500017,-3.053515625000003],[29.223242187500006,-3.9108398437500114],[29.403222656250023,-4.449316406250006],[29.7177734375,-4.455859375000003],[30.14716796875001,-4.0853515625000085],[30.42500000000001,-3.5888671875],[30.79023437500001,-3.2746093750000114],[30.515039062500023,-2.9175781250000057],[30.553613281250023,-2.4000976562500114]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Burundi","SOV_A3":"BDI","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Burundi","ADM0_A3":"BDI","GEOU_DIF":0,"GEOUNIT":"Burundi","GU_A3":"BDI","SU_DIF":0,"SUBUNIT":"Burundi","SU_A3":"BDI","BRK_DIFF":0,"NAME":"Burundi","NAME_LONG":"Burundi","BRK_A3":"BDI","BRK_NAME":"Burundi","BRK_GROUP":"","ABBREV":"Bur.","POSTAL":"BI","FORMAL_EN":"Republic of Burundi","FORMAL_FR":"","NAME_CIAWF":"Burundi","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Burundi","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":8,"POP_EST":11530580,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":3012,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"BY","ISO_A2":"BI","ISO_A2_EH":"BI","ISO_A3":"BDI","ISO_A3_EH":"BDI","ISO_N3":"108","ISO_N3_EH":"108","UN_A3":"108","WB_A2":"BI","WB_A3":"BDI","WOE_ID":23424774,"WOE_ID_EH":23424774,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BDI","ADM0_DIFF":"","ADM0_TLC":"BDI","ADM0_A3_US":"BDI","ADM0_A3_FR":"BDI","ADM0_A3_RU":"BDI","ADM0_A3_ES":"BDI","ADM0_A3_CN":"BDI","ADM0_A3_TW":"BDI","ADM0_A3_IN":"BDI","ADM0_A3_NP":"BDI","ADM0_A3_PK":"BDI","ADM0_A3_DE":"BDI","ADM0_A3_GB":"BDI","ADM0_A3_BR":"BDI","ADM0_A3_IL":"BDI","ADM0_A3_PS":"BDI","ADM0_A3_SA":"BDI","ADM0_A3_EG":"BDI","ADM0_A3_MA":"BDI","ADM0_A3_PT":"BDI","ADM0_A3_AR":"BDI","ADM0_A3_JP":"BDI","ADM0_A3_KO":"BDI","ADM0_A3_VN":"BDI","ADM0_A3_TR":"BDI","ADM0_A3_ID":"BDI","ADM0_A3_PL":"BDI","ADM0_A3_GR":"BDI","ADM0_A3_IT":"BDI","ADM0_A3_NL":"BDI","ADM0_A3_SE":"BDI","ADM0_A3_BD":"BDI","ADM0_A3_UA":"BDI","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Eastern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":29.917086,"LABEL_Y":-3.332836,"NE_ID":1159320387,"WIKIDATAID":"Q967","NAME_AR":"بوروندي","NAME_BN":"বুরুন্ডি","NAME_DE":"Burundi","NAME_EN":"Burundi","NAME_ES":"Burundi","NAME_FA":"بوروندی","NAME_FR":"Burundi","NAME_EL":"Μπουρούντι","NAME_HE":"בורונדי","NAME_HI":"बुरुण्डी","NAME_HU":"Burundi","NAME_ID":"Burundi","NAME_IT":"Burundi","NAME_JA":"ブルンジ","NAME_KO":"부룬디","NAME_NL":"Burundi","NAME_PL":"Burundi","NAME_PT":"Burundi","NAME_RU":"Бурунди","NAME_SV":"Burundi","NAME_TR":"Burundi","NAME_UK":"Бурунді","NAME_UR":"برونڈی","NAME_VI":"Burundi","NAME_ZH":"布隆迪","NAME_ZHT":"蒲隆地","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[0.9004882812500057,10.993261718749991],[1.4267578125,11.447119140624991],[1.9803710937500227,11.418408203124997],[2.38916015625,11.897070312499991],[2.0914062500000057,12.277978515624994],[2.0738281250000057,12.713964843749991],[1.56494140625,12.635400390624994],[0.9873046875,13.041894531249994],[0.9777343750000114,13.551953124999997],[0.6181640625,13.703417968750003],[0.16386718750001705,14.497216796874994],[0.21748046875001137,14.911474609374991],[-0.23588867187498863,15.059423828124991],[-0.760449218749983,15.047753906249994],[-1.049560546875,14.819531249999997],[-1.767773437499983,14.486035156249997],[-2.113232421874983,14.16845703125],[-2.457226562499983,14.274121093749997],[-3.198437499999983,13.6728515625],[-3.3017578125,13.28076171875],[-3.5757812499999773,13.194189453124991],[-4.051171874999994,13.382421874999991],[-4.328710937499977,13.119042968749994],[-4.227099609374989,12.793701171875],[-4.480615234374994,12.672216796874991],[-4.4287109375,12.337597656249997],[-4.797949218749977,12.032128906249994],[-5.288134765624989,11.827929687499989],[-5.299853515624989,11.205957031249994],[-5.490478515625,11.042382812499994],[-5.523535156249977,10.426025390625],[-5.099853515625,10.241601562499994],[-4.969921874999983,9.930078124999994],[-4.625830078124977,9.713574218749997],[-3.877636718749983,9.894921874999994],[-3.2235351562499943,9.895458984374997],[-2.6958496093749886,9.481347656249994],[-2.78662109375,10.401904296874989],[-2.9148925781249773,10.592333984374989],[-2.8299316406249773,10.998388671874991],[-0.701416015625,10.988964843749997],[-0.068603515625,11.115624999999994],[0.9004882812500057,10.993261718749991]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Burkina Faso","SOV_A3":"BFA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Burkina Faso","ADM0_A3":"BFA","GEOU_DIF":0,"GEOUNIT":"Burkina Faso","GU_A3":"BFA","SU_DIF":0,"SUBUNIT":"Burkina Faso","SU_A3":"BFA","BRK_DIFF":0,"NAME":"Burkina Faso","NAME_LONG":"Burkina Faso","BRK_A3":"BFA","BRK_NAME":"Burkina Faso","BRK_GROUP":"","ABBREV":"B.F.","POSTAL":"BF","FORMAL_EN":"Burkina Faso","FORMAL_FR":"","NAME_CIAWF":"Burkina Faso","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Burkina Faso","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":1,"MAPCOLOR9":5,"MAPCOLOR13":11,"POP_EST":20321378,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":15990,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"UV","ISO_A2":"BF","ISO_A2_EH":"BF","ISO_A3":"BFA","ISO_A3_EH":"BFA","ISO_N3":"854","ISO_N3_EH":"854","UN_A3":"854","WB_A2":"BF","WB_A3":"BFA","WOE_ID":23424978,"WOE_ID_EH":23424978,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BFA","ADM0_DIFF":"","ADM0_TLC":"BFA","ADM0_A3_US":"BFA","ADM0_A3_FR":"BFA","ADM0_A3_RU":"BFA","ADM0_A3_ES":"BFA","ADM0_A3_CN":"BFA","ADM0_A3_TW":"BFA","ADM0_A3_IN":"BFA","ADM0_A3_NP":"BFA","ADM0_A3_PK":"BFA","ADM0_A3_DE":"BFA","ADM0_A3_GB":"BFA","ADM0_A3_BR":"BFA","ADM0_A3_IL":"BFA","ADM0_A3_PS":"BFA","ADM0_A3_SA":"BFA","ADM0_A3_EG":"BFA","ADM0_A3_MA":"BFA","ADM0_A3_PT":"BFA","ADM0_A3_AR":"BFA","ADM0_A3_JP":"BFA","ADM0_A3_KO":"BFA","ADM0_A3_VN":"BFA","ADM0_A3_TR":"BFA","ADM0_A3_ID":"BFA","ADM0_A3_PL":"BFA","ADM0_A3_GR":"BFA","ADM0_A3_IT":"BFA","ADM0_A3_NL":"BFA","ADM0_A3_SE":"BFA","ADM0_A3_BD":"BFA","ADM0_A3_UA":"BFA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":-1.36388,"LABEL_Y":12.673048,"NE_ID":1159320405,"WIKIDATAID":"Q965","NAME_AR":"بوركينا فاسو","NAME_BN":"বুর্কিনা ফাসো","NAME_DE":"Burkina Faso","NAME_EN":"Burkina Faso","NAME_ES":"Burkina Faso","NAME_FA":"بورکینافاسو","NAME_FR":"Burkina Faso","NAME_EL":"Μπουρκίνα Φάσο","NAME_HE":"בורקינה פאסו","NAME_HI":"बुर्किना फासो","NAME_HU":"Burkina Faso","NAME_ID":"Burkina Faso","NAME_IT":"Burkina Faso","NAME_JA":"ブルキナファソ","NAME_KO":"부르키나파소","NAME_NL":"Burkina Faso","NAME_PL":"Burkina Faso","NAME_PT":"Burkina Faso","NAME_RU":"Буркина-Фасо","NAME_SV":"Burkina Faso","NAME_TR":"Burkina Faso","NAME_UK":"Буркіна-Фасо","NAME_UR":"برکینا فاسو","NAME_VI":"Burkina Faso","NAME_ZH":"布基纳法索","NAME_ZHT":"布基納法索","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[28.014453125000017,41.969042968749996],[27.484765625000023,42.468066406249996],[27.88886718750001,42.74970703125],[27.92890625000001,43.1861328125],[28.465429687500006,43.389306640624994],[28.585351562500023,43.742236328124996],[27.0869140625,44.167382812499994],[26.2158203125,44.007275390625],[25.4970703125,43.670800781249994],[23.224609375,43.873876953125],[22.705078125,44.23779296875],[22.420800781250023,44.007421875],[22.554589843750023,43.454492187499994],[22.976855468750017,43.18798828125],[22.466796875,42.84248046875],[22.344042968750017,42.31396484375],[22.836816406250023,41.993603515625],[23.005664062500017,41.716943359374994],[22.916015625,41.336279296875],[23.635156250000023,41.386767578124996],[24.056054687500023,41.527246093749994],[25.25117187500001,41.243554687499994],[26.155175781250023,41.434863281249996],[26.320898437500006,41.716552734375],[26.615332031250006,41.964892578124996],[27.294921875,42.079541015625],[28.014453125000017,41.969042968749996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Bulgaria","SOV_A3":"BGR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Bulgaria","ADM0_A3":"BGR","GEOU_DIF":0,"GEOUNIT":"Bulgaria","GU_A3":"BGR","SU_DIF":0,"SUBUNIT":"Bulgaria","SU_A3":"BGR","BRK_DIFF":0,"NAME":"Bulgaria","NAME_LONG":"Bulgaria","BRK_A3":"BGR","BRK_NAME":"Bulgaria","BRK_GROUP":"","ABBREV":"Bulg.","POSTAL":"BG","FORMAL_EN":"Republic of Bulgaria","FORMAL_FR":"","NAME_CIAWF":"Bulgaria","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bulgaria","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":6975761,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":68558,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"3. Upper middle income","FIPS_10":"BU","ISO_A2":"BG","ISO_A2_EH":"BG","ISO_A3":"BGR","ISO_A3_EH":"BGR","ISO_N3":"100","ISO_N3_EH":"100","UN_A3":"100","WB_A2":"BG","WB_A3":"BGR","WOE_ID":23424771,"WOE_ID_EH":23424771,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BGR","ADM0_DIFF":"","ADM0_TLC":"BGR","ADM0_A3_US":"BGR","ADM0_A3_FR":"BGR","ADM0_A3_RU":"BGR","ADM0_A3_ES":"BGR","ADM0_A3_CN":"BGR","ADM0_A3_TW":"BGR","ADM0_A3_IN":"BGR","ADM0_A3_NP":"BGR","ADM0_A3_PK":"BGR","ADM0_A3_DE":"BGR","ADM0_A3_GB":"BGR","ADM0_A3_BR":"BGR","ADM0_A3_IL":"BGR","ADM0_A3_PS":"BGR","ADM0_A3_SA":"BGR","ADM0_A3_EG":"BGR","ADM0_A3_MA":"BGR","ADM0_A3_PT":"BGR","ADM0_A3_AR":"BGR","ADM0_A3_JP":"BGR","ADM0_A3_KO":"BGR","ADM0_A3_VN":"BGR","ADM0_A3_TR":"BGR","ADM0_A3_ID":"BGR","ADM0_A3_PL":"BGR","ADM0_A3_GR":"BGR","ADM0_A3_IT":"BGR","ADM0_A3_NL":"BGR","ADM0_A3_SE":"BGR","ADM0_A3_BD":"BGR","ADM0_A3_UA":"BGR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":25.15709,"LABEL_Y":42.508785,"NE_ID":1159320409,"WIKIDATAID":"Q219","NAME_AR":"بلغاريا","NAME_BN":"বুলগেরিয়া","NAME_DE":"Bulgarien","NAME_EN":"Bulgaria","NAME_ES":"Bulgaria","NAME_FA":"بلغارستان","NAME_FR":"Bulgarie","NAME_EL":"Βουλγαρία","NAME_HE":"בולגריה","NAME_HI":"बुल्गारिया","NAME_HU":"Bulgária","NAME_ID":"Bulgaria","NAME_IT":"Bulgaria","NAME_JA":"ブルガリア","NAME_KO":"불가리아","NAME_NL":"Bulgarije","NAME_PL":"Bułgaria","NAME_PT":"Bulgária","NAME_RU":"Болгария","NAME_SV":"Bulgarien","NAME_TR":"Bulgaristan","NAME_UK":"Болгарія","NAME_UR":"بلغاریہ","NAME_VI":"Bulgaria","NAME_ZH":"保加利亚","NAME_ZHT":"保加利亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[115.02675781250002,4.899707031249989],[114.29941406250003,4.607177734375],[114.06386718750002,4.592675781249994],[114.60830078125002,4.023974609374989],[114.84023437500002,4.393212890624994],[114.74667968750003,4.718066406249989],[115.02675781250002,4.899707031249989]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Brunei","SOV_A3":"BRN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Brunei","ADM0_A3":"BRN","GEOU_DIF":0,"GEOUNIT":"Brunei","GU_A3":"BRN","SU_DIF":0,"SUBUNIT":"Brunei","SU_A3":"BRN","BRK_DIFF":0,"NAME":"Brunei","NAME_LONG":"Brunei Darussalam","BRK_A3":"BRN","BRK_NAME":"Brunei","BRK_GROUP":"","ABBREV":"Brunei","POSTAL":"BN","FORMAL_EN":"Negara Brunei Darussalam","FORMAL_FR":"","NAME_CIAWF":"Brunei","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Brunei","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":6,"MAPCOLOR9":6,"MAPCOLOR13":12,"POP_EST":433285,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":13469,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"BX","ISO_A2":"BN","ISO_A2_EH":"BN","ISO_A3":"BRN","ISO_A3_EH":"BRN","ISO_N3":"096","ISO_N3_EH":"096","UN_A3":"096","WB_A2":"BN","WB_A3":"BRN","WOE_ID":23424773,"WOE_ID_EH":23424773,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BRN","ADM0_DIFF":"","ADM0_TLC":"BRN","ADM0_A3_US":"BRN","ADM0_A3_FR":"BRN","ADM0_A3_RU":"BRN","ADM0_A3_ES":"BRN","ADM0_A3_CN":"BRN","ADM0_A3_TW":"BRN","ADM0_A3_IN":"BRN","ADM0_A3_NP":"BRN","ADM0_A3_PK":"BRN","ADM0_A3_DE":"BRN","ADM0_A3_GB":"BRN","ADM0_A3_BR":"BRN","ADM0_A3_IL":"BRN","ADM0_A3_PS":"BRN","ADM0_A3_SA":"BRN","ADM0_A3_EG":"BRN","ADM0_A3_MA":"BRN","ADM0_A3_PT":"BRN","ADM0_A3_AR":"BRN","ADM0_A3_JP":"BRN","ADM0_A3_KO":"BRN","ADM0_A3_VN":"BRN","ADM0_A3_TR":"BRN","ADM0_A3_ID":"BRN","ADM0_A3_PL":"BRN","ADM0_A3_GR":"BRN","ADM0_A3_IT":"BRN","ADM0_A3_NL":"BRN","ADM0_A3_SE":"BRN","ADM0_A3_BD":"BRN","ADM0_A3_UA":"BRN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"South-Eastern Asia","REGION_WB":"East Asia & Pacific","NAME_LEN":6,"LONG_LEN":17,"ABBREV_LEN":6,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":114.551943,"LABEL_Y":4.448298,"NE_ID":1159320451,"WIKIDATAID":"Q921","NAME_AR":"بروناي","NAME_BN":"ব্রুনাই","NAME_DE":"Brunei","NAME_EN":"Brunei","NAME_ES":"Brunéi","NAME_FA":"برونئی","NAME_FR":"Brunei","NAME_EL":"Μπρουνέι","NAME_HE":"ברוניי","NAME_HI":"ब्रुनेई","NAME_HU":"Brunei","NAME_ID":"Brunei Darussalam","NAME_IT":"Brunei","NAME_JA":"ブルネイ","NAME_KO":"브루나이","NAME_NL":"Brunei","NAME_PL":"Brunei","NAME_PT":"Brunei","NAME_RU":"Бруней","NAME_SV":"Brunei","NAME_TR":"Brunei","NAME_UK":"Бруней","NAME_UR":"برونائی دار السلام","NAME_VI":"Brunei","NAME_ZH":"文莱","NAME_ZHT":"汶萊","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-66.87602539062499,1.2230468749999943],[-67.351953125,2.0858398437499943],[-67.815087890625,1.7900878906249886],[-68.17656249999999,1.7198242187499915],[-69.848583984375,1.708740234375],[-69.85214843749999,1.0595214843749972],[-69.36137695312499,1.0640136718749886],[-69.163232421875,0.8640624999999886],[-70.05390625,0.57861328125],[-70.0705078125,-0.13886718750001137],[-69.66748046875,-0.482421875],[-69.40024414062499,-1.1949218750000057],[-69.66904296874999,-2.6676757812500114],[-69.96591796874999,-4.235937500000006],[-70.79951171875,-4.17333984375],[-70.97368164062499,-4.3504882812500085],[-71.8447265625,-4.50439453125],[-72.69873046875,-5.067187500000003],[-72.88706054687499,-5.122753906250011],[-72.9798828125,-5.634863281250006],[-73.235546875,-6.098437500000003],[-73.137353515625,-6.4658203125],[-73.75810546874999,-6.90576171875],[-73.749462890625,-7.3353515625000085],[-74.00205078124999,-7.5560546875000085],[-73.54912109374999,-8.345800781250006],[-72.9740234375,-8.9931640625],[-73.209423828125,-9.411425781250003],[-72.379052734375,-9.510156250000009],[-72.181591796875,-10.003710937500003],[-71.237939453125,-9.966015625000011],[-70.6369140625,-9.478222656250011],[-70.642333984375,-11.01025390625],[-70.22006835937499,-11.047656250000003],[-69.57861328125,-10.951757812500006],[-68.39799804687499,-11.018750000000011],[-68.0716796875,-10.703125],[-67.582421875,-10.505957031250006],[-66.72998046875,-9.975488281250009],[-66.26357421875,-9.826074218750009],[-65.396142578125,-9.71240234375],[-65.31308593749999,-10.253027343750006],[-65.4369140625,-10.449023437500003],[-65.33403320312499,-10.892773437500011],[-65.389892578125,-11.246289062500011],[-64.99252929687499,-11.975195312500006],[-64.513427734375,-12.2509765625],[-64.42050781249999,-12.439746093750003],[-63.58564453125,-12.518945312500009],[-63.06748046874999,-12.669140625000011],[-62.76547851562499,-12.997265625000011],[-62.17607421874999,-13.133691406250009],[-61.789941406249994,-13.525585937500011],[-61.07700195312499,-13.48974609375],[-60.506591796875,-13.789843750000003],[-60.29887695312499,-14.618554687500009],[-60.17558593749999,-16.269335937500003],[-58.53793945312499,-16.328222656250006],[-58.39599609375,-17.23427734375001],[-57.832470703125,-17.51210937500001],[-57.57402343749999,-18.279296875],[-57.80039062499999,-19.08095703125001],[-58.131494140624994,-19.74453125000001],[-58.15976562499999,-20.164648437500006],[-57.830224609374994,-20.99794921875001],[-57.98569335937499,-22.04638671875],[-56.937255859375,-22.271289062500003],[-56.523828124999994,-22.1025390625],[-55.84916992187499,-22.3076171875],[-55.654052734375,-22.810351562500003],[-55.36630859374999,-23.991015625000003],[-54.62548828125,-23.8125],[-54.24179687499999,-24.04726562500001],[-54.47314453125,-25.22021484375],[-54.615869140624994,-25.57607421875001],[-54.15458984374999,-25.523046875000006],[-53.89116210937499,-25.66884765625001],[-53.671289062499994,-26.22509765625],[-53.83818359374999,-27.12109375],[-54.32700195312499,-27.42353515625001],[-54.8291015625,-27.550585937500003],[-55.101513671875,-27.866796875000006],[-55.725488281249994,-28.2041015625],[-56.938623046874994,-29.594824218750006],[-57.60888671875,-30.187792968750003],[-57.21445312499999,-30.28339843750001],[-56.83271484375,-30.107226562500003],[-56.176171874999994,-30.62841796875],[-55.873681640624994,-31.069628906250003],[-55.55732421875,-30.8759765625],[-55.254638671875,-31.2255859375],[-54.587646484375,-31.485156250000003],[-54.22055664062499,-31.85517578125001],[-53.76171875,-32.05683593750001],[-53.601708984374994,-32.40302734375001],[-53.12558593749999,-32.73671875000001],[-53.53134765624999,-33.1708984375],[-53.37060546875,-33.7421875],[-52.652246093749994,-33.137792968750006],[-52.127392578125,-32.1677734375],[-52.1935546875,-31.885546875000003],[-51.97246093749999,-31.3837890625],[-51.46367187499999,-31.05263671875001],[-51.15727539062499,-30.3642578125],[-50.29951171874998,-30.42578125],[-49.745996093749994,-29.36318359375001],[-49.27128906249999,-28.871191406250006],[-48.799658203125006,-28.575292968750006],[-48.62080078124998,-28.07558593750001],[-48.55415039062498,-27.19599609375001],[-48.677734375,-26.702929687500003],[-48.545166015625,-25.81591796875],[-47.876562500000006,-24.99746093750001],[-46.867285156250006,-24.236328125],[-45.972070312499994,-23.795507812500006],[-45.42329101562498,-23.685351562500003],[-44.63725585937499,-23.055468750000003],[-43.86616210937498,-22.91054687500001],[-43.532812500000006,-23.04638671875],[-42.95830078124999,-22.967089843750003],[-42.042382812499994,-22.947070312500003],[-41.98041992187498,-22.580664062500006],[-41.70551757812498,-22.309667968750006],[-41.12250976562498,-22.08437500000001],[-41.047265624999994,-21.505664062500003],[-40.78925781249998,-20.906054687500003],[-40.39594726562498,-20.569433593750006],[-40.001367187499994,-19.741992187500003],[-39.699853515624994,-19.27783203125],[-39.73979492187499,-18.63984375000001],[-39.48676757812498,-17.99013671875001],[-39.15400390624998,-17.703906250000003],[-39.215234374999994,-17.31582031250001],[-38.880615234375,-15.8642578125],[-39.0595703125,-14.65478515625],[-38.94233398437498,-14.030664062500009],[-39.08935546875,-13.588183593750003],[-38.835302734375006,-13.147167968750011],[-38.787988281249994,-12.78271484375],[-38.23974609375,-12.84423828125],[-37.688720703125,-12.100000000000009],[-37.41181640624998,-11.497265625000011],[-36.93779296874999,-10.820410156250006],[-36.398339843749994,-10.484082031250011],[-35.34086914062499,-9.230664062500011],[-35.15776367187499,-8.930566406250009],[-34.83466796874998,-7.971484375000003],[-34.80546874999999,-7.288378906250003],[-34.988183593749994,-6.393750000000011],[-35.235449218750006,-5.566699218750003],[-35.549414062500006,-5.12939453125],[-35.979882812499994,-5.054394531250011],[-36.590722656249994,-5.0975585937500085],[-37.174658203125006,-4.912402343750003],[-38.048828125,-4.216406250000006],[-38.47578124999998,-3.7174804687500114],[-39.964697265625006,-2.8615234375000114],[-40.47456054687498,-2.7956054687500114],[-41.318212890625006,-2.9362304687500114],[-41.87617187499998,-2.74658203125],[-42.249609375000006,-2.7919921875],[-42.93671874999998,-2.4650390625000114],[-43.93291015624999,-2.58349609375],[-44.30815429687499,-2.53515625],[-44.651269531249994,-1.7458007812500114],[-45.07636718749998,-1.4664062500000057],[-45.644775390625,-1.3478515625000114],[-46.219140624999994,-1.03125],[-46.61723632812499,-0.9706054687500085],[-46.81123046874998,-0.7796875000000085],[-47.398095703124994,-0.6266601562500114],[-48.115087890625006,-0.7375000000000114],[-48.991308593750006,-1.8297851562500114],[-49.31367187499998,-1.7317382812500028],[-49.71953124999999,-1.9263671875000057],[-49.99921874999998,-1.8318359375000028],[-50.403222656249994,-2.0155273437500085],[-50.690039062500006,-1.76171875],[-50.917871093749994,-1.115234375],[-51.29736328125,-1.2235351562500085],[-51.94755859374999,-1.5867187500000028],[-51.70263671875,-0.7623046875000057],[-51.28291015624998,-0.085205078125],[-50.81635742187498,0.17255859374999716],[-50.29443359375,0.8357421874999886],[-49.89887695312498,1.1629882812499943],[-49.957128906250006,1.6598632812499972],[-50.458886718749994,1.82958984375],[-50.658935546875,2.1309570312499915],[-51.052392578124994,3.2818359374999915],[-51.21992187499998,4.0936035156249915],[-51.65253906249998,4.061279296875],[-51.990624999999994,3.7020019531249915],[-52.700634765625,2.3636718749999943],[-52.96484375,2.183544921874997],[-53.7677734375,2.3548339843749915],[-54.130078125,2.121044921874997],[-54.61625976562499,2.3267578124999915],[-55.005810546875,2.592968749999997],[-56.12939453125,2.299511718749997],[-56.019921874999994,1.8422363281249972],[-56.482812499999994,1.942138671875],[-56.83671874999999,1.8812499999999943],[-57.118896484375,2.0139648437499886],[-57.59443359375,1.7041015625],[-58.34067382812499,1.5875488281249943],[-58.511865234374994,1.28466796875],[-58.8625,1.20361328125],[-59.231201171875,1.3760253906249886],[-59.75620117187499,1.900634765625],[-59.75522460937499,2.274121093749997],[-59.9943359375,2.6899902343749886],[-59.854394531249994,3.5874999999999915],[-59.55112304687499,3.933544921874997],[-59.83334960937499,4.4759277343749915],[-60.11113281249999,4.511181640624997],[-59.990673828125,5.0828613281249915],[-60.142041015625,5.238818359374989],[-60.742138671875,5.202050781249994],[-60.6044921875,4.994580078124997],[-61.002832031249994,4.5352539062499915],[-62.15312499999999,4.098388671875],[-62.712109375,4.0179199218749915],[-62.968652343749994,3.593945312499997],[-63.29472656249999,3.9222656249999943],[-64.021484375,3.9291015624999943],[-64.25566406249999,4.140332031249997],[-64.56791992187499,3.8998046874999943],[-64.22109375,3.58740234375],[-64.21884765624999,3.2046874999999915],[-63.92416992187499,2.4524414062499886],[-63.38925781249999,2.4119140624999886],[-63.393945312499994,2.2225097656249915],[-64.03544921874999,1.9044433593749943],[-64.11484374999999,1.6192871093749943],[-65.103759765625,1.1081054687499972],[-65.36083984375,0.86865234375],[-65.68144531249999,0.9834472656249886],[-66.06005859375,0.7853515624999972],[-66.42924804687499,0.8216796874999943],[-66.87602539062499,1.2230468749999943]]],[[[-49.628662109375,-0.22919921875001137],[-50.24824218749998,-0.11640625000001137],[-50.6455078125,-0.2728515625000085],[-50.771386718749994,-0.6454101562500085],[-50.759765625,-1.240234375],[-50.50761718749999,-1.7879882812500085],[-49.587890625,-1.71240234375],[-48.92890624999998,-1.4823242187500085],[-48.539697265624994,-0.8009765625000114],[-48.37968749999999,-0.35283203125000284],[-49.11699218749999,-0.16357421875],[-49.628662109375,-0.22919921875001137]]],[[[-51.83251953125,-1.4337890625000114],[-51.27631835937498,-1.0217773437500028],[-51.160742187500006,-0.6666992187500114],[-51.546044921874994,-0.6496093750000114],[-51.83251953125,-1.4337890625000114]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Brazil","SOV_A3":"BRA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Brazil","ADM0_A3":"BRA","GEOU_DIF":0,"GEOUNIT":"Brazil","GU_A3":"BRA","SU_DIF":0,"SUBUNIT":"Brazil","SU_A3":"BRA","BRK_DIFF":0,"NAME":"Brazil","NAME_LONG":"Brazil","BRK_A3":"BRA","BRK_NAME":"Brazil","BRK_GROUP":"","ABBREV":"Brazil","POSTAL":"BR","FORMAL_EN":"Federative Republic of Brazil","FORMAL_FR":"","NAME_CIAWF":"Brazil","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Brazil","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":6,"MAPCOLOR9":5,"MAPCOLOR13":7,"POP_EST":211049527,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":1839758,"GDP_YEAR":2019,"ECONOMY":"3. Emerging region: BRIC","INCOME_GRP":"3. Upper middle income","FIPS_10":"BR","ISO_A2":"BR","ISO_A2_EH":"BR","ISO_A3":"BRA","ISO_A3_EH":"BRA","ISO_N3":"076","ISO_N3_EH":"076","UN_A3":"076","WB_A2":"BR","WB_A3":"BRA","WOE_ID":23424768,"WOE_ID_EH":23424768,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BRA","ADM0_DIFF":"","ADM0_TLC":"BRA","ADM0_A3_US":"BRA","ADM0_A3_FR":"BRA","ADM0_A3_RU":"BRA","ADM0_A3_ES":"BRA","ADM0_A3_CN":"BRA","ADM0_A3_TW":"BRA","ADM0_A3_IN":"BRA","ADM0_A3_NP":"BRA","ADM0_A3_PK":"BRA","ADM0_A3_DE":"BRA","ADM0_A3_GB":"BRA","ADM0_A3_BR":"BRA","ADM0_A3_IL":"BRA","ADM0_A3_PS":"BRA","ADM0_A3_SA":"BRA","ADM0_A3_EG":"BRA","ADM0_A3_MA":"BRA","ADM0_A3_PT":"BRA","ADM0_A3_AR":"BRA","ADM0_A3_JP":"BRA","ADM0_A3_KO":"BRA","ADM0_A3_VN":"BRA","ADM0_A3_TR":"BRA","ADM0_A3_ID":"BRA","ADM0_A3_PL":"BRA","ADM0_A3_GR":"BRA","ADM0_A3_IT":"BRA","ADM0_A3_NL":"BRA","ADM0_A3_SE":"BRA","ADM0_A3_BD":"BRA","ADM0_A3_UA":"BRA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":5.7,"LABEL_X":-49.55945,"LABEL_Y":-12.098687,"NE_ID":1159320441,"WIKIDATAID":"Q155","NAME_AR":"البرازيل","NAME_BN":"ব্রাজিল","NAME_DE":"Brasilien","NAME_EN":"Brazil","NAME_ES":"Brasil","NAME_FA":"برزیل","NAME_FR":"Brésil","NAME_EL":"Βραζιλία","NAME_HE":"ברזיל","NAME_HI":"ब्राज़ील","NAME_HU":"Brazília","NAME_ID":"Brasil","NAME_IT":"Brasile","NAME_JA":"ブラジル","NAME_KO":"브라질","NAME_NL":"Brazilië","NAME_PL":"Brazylia","NAME_PT":"Brasil","NAME_RU":"Бразилия","NAME_SV":"Brasilien","NAME_TR":"Brezilya","NAME_UK":"Бразилія","NAME_UR":"برازیل","NAME_VI":"Brasil","NAME_ZH":"巴西","NAME_ZHT":"巴西","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[25.2587890625,-17.793554687500006],[24.358984375000006,-17.97822265625001],[23.58056640625,-18.452929687500003],[23.298632812500017,-18.02734375],[20.97412109375,-18.31884765625],[20.976171875000006,-19.74433593750001],[20.970996093750017,-22.00019531250001],[19.977343750000017,-22.00019531250001],[19.98046875,-24.77675781250001],[20.34521484375,-25.029882812500006],[20.79316406250001,-25.915625000000006],[20.626757812500017,-26.44384765625],[20.739843750000006,-26.84882812500001],[21.646289062500017,-26.85419921875001],[22.090917968750006,-26.580175781250006],[22.640234375000006,-26.07119140625001],[22.878808593750023,-25.45791015625001],[23.266015625000023,-25.2666015625],[23.89375000000001,-25.600878906250003],[24.748144531250006,-25.8173828125],[25.583789062500017,-25.606250000000003],[25.912109375,-24.74746093750001],[26.39716796875001,-24.613574218750003],[26.835058593750006,-24.240820312500006],[27.146386718750023,-23.5244140625],[27.890527343750023,-23.07392578125001],[28.21015625000001,-22.693652343750003],[28.83984375,-22.48085937500001],[29.364843750000006,-22.193945312500006],[29.03730468750001,-21.811328125000003],[28.04560546875001,-21.573046875000003],[27.66943359375,-21.064257812500003],[27.699609375000023,-20.53066406250001],[27.28076171875,-20.47871093750001],[27.221484375000017,-20.145800781250003],[26.67822265625,-19.89277343750001],[26.168066406250006,-19.53828125000001],[25.76123046875,-18.649218750000003],[25.224023437500023,-17.91523437500001],[25.2587890625,-17.793554687500006]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Botswana","SOV_A3":"BWA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Botswana","ADM0_A3":"BWA","GEOU_DIF":0,"GEOUNIT":"Botswana","GU_A3":"BWA","SU_DIF":0,"SUBUNIT":"Botswana","SU_A3":"BWA","BRK_DIFF":0,"NAME":"Botswana","NAME_LONG":"Botswana","BRK_A3":"BWA","BRK_NAME":"Botswana","BRK_GROUP":"","ABBREV":"Bwa.","POSTAL":"BW","FORMAL_EN":"Republic of Botswana","FORMAL_FR":"","NAME_CIAWF":"Botswana","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Botswana","NAME_ALT":"","MAPCOLOR7":6,"MAPCOLOR8":5,"MAPCOLOR9":7,"MAPCOLOR13":3,"POP_EST":2303697,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":18340,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"BC","ISO_A2":"BW","ISO_A2_EH":"BW","ISO_A3":"BWA","ISO_A3_EH":"BWA","ISO_N3":"072","ISO_N3_EH":"072","UN_A3":"072","WB_A2":"BW","WB_A3":"BWA","WOE_ID":23424755,"WOE_ID_EH":23424755,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BWA","ADM0_DIFF":"","ADM0_TLC":"BWA","ADM0_A3_US":"BWA","ADM0_A3_FR":"BWA","ADM0_A3_RU":"BWA","ADM0_A3_ES":"BWA","ADM0_A3_CN":"BWA","ADM0_A3_TW":"BWA","ADM0_A3_IN":"BWA","ADM0_A3_NP":"BWA","ADM0_A3_PK":"BWA","ADM0_A3_DE":"BWA","ADM0_A3_GB":"BWA","ADM0_A3_BR":"BWA","ADM0_A3_IL":"BWA","ADM0_A3_PS":"BWA","ADM0_A3_SA":"BWA","ADM0_A3_EG":"BWA","ADM0_A3_MA":"BWA","ADM0_A3_PT":"BWA","ADM0_A3_AR":"BWA","ADM0_A3_JP":"BWA","ADM0_A3_KO":"BWA","ADM0_A3_VN":"BWA","ADM0_A3_TR":"BWA","ADM0_A3_ID":"BWA","ADM0_A3_PL":"BWA","ADM0_A3_GR":"BWA","ADM0_A3_IT":"BWA","ADM0_A3_NL":"BWA","ADM0_A3_SE":"BWA","ADM0_A3_BD":"BWA","ADM0_A3_UA":"BWA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Southern Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":24.179216,"LABEL_Y":-22.102634,"NE_ID":1159320461,"WIKIDATAID":"Q963","NAME_AR":"بوتسوانا","NAME_BN":"বতসোয়ানা","NAME_DE":"Botswana","NAME_EN":"Botswana","NAME_ES":"Botsuana","NAME_FA":"بوتسوانا","NAME_FR":"Botswana","NAME_EL":"Μποτσουάνα","NAME_HE":"בוטסואנה","NAME_HI":"बोत्सवाना","NAME_HU":"Botswana","NAME_ID":"Botswana","NAME_IT":"Botswana","NAME_JA":"ボツワナ","NAME_KO":"보츠와나","NAME_NL":"Botswana","NAME_PL":"Botswana","NAME_PT":"Botsuana","NAME_RU":"Ботсвана","NAME_SV":"Botswana","NAME_TR":"Botsvana","NAME_UK":"Ботсвана","NAME_UR":"بوٹسوانا","NAME_VI":"Botswana","NAME_ZH":"博茨瓦纳","NAME_ZHT":"波札那","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[19.1943359375,43.53330078125],[19.583789062500017,44.04345703125],[19.15185546875,44.302539062499996],[19.356835937500023,44.858544921874994],[19.007128906250017,44.869189453124996],[18.66259765625,45.077441406249996],[17.812792968750017,45.078125],[16.530664062500023,45.216699218749994],[16.293359375000023,45.008837890624996],[15.7880859375,45.178955078125],[15.736621093750017,44.7658203125],[16.214257812500023,44.215136718749996],[17.624804687500017,43.042773437499996],[17.58515625000001,42.938378906249994],[17.667578125000006,42.897119140624994],[18.436328125000017,42.559716796874994],[18.44384765625,42.96845703125],[18.940234375000017,43.496728515624994],[19.1943359375,43.53330078125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Bosnia and Herzegovina","SOV_A3":"BIH","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Bosnia and Herzegovina","ADM0_A3":"BIH","GEOU_DIF":0,"GEOUNIT":"Bosnia and Herzegovina","GU_A3":"BIH","SU_DIF":0,"SUBUNIT":"Bosnia and Herzegovina","SU_A3":"BIH","BRK_DIFF":0,"NAME":"Bosnia and Herz.","NAME_LONG":"Bosnia and Herzegovina","BRK_A3":"BIH","BRK_NAME":"Bosnia and Herz.","BRK_GROUP":"","ABBREV":"B.H.","POSTAL":"BiH","FORMAL_EN":"Bosnia and Herzegovina","FORMAL_FR":"","NAME_CIAWF":"Bosnia and Herzegovina","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bosnia and Herzegovina","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":1,"MAPCOLOR13":2,"POP_EST":3301000,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":20164,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"BK","ISO_A2":"BA","ISO_A2_EH":"BA","ISO_A3":"BIH","ISO_A3_EH":"BIH","ISO_N3":"070","ISO_N3_EH":"070","UN_A3":"070","WB_A2":"BA","WB_A3":"BIH","WOE_ID":23424761,"WOE_ID_EH":23424761,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BIH","ADM0_DIFF":"","ADM0_TLC":"BIH","ADM0_A3_US":"BIH","ADM0_A3_FR":"BIH","ADM0_A3_RU":"BIH","ADM0_A3_ES":"BIH","ADM0_A3_CN":"BIH","ADM0_A3_TW":"BIH","ADM0_A3_IN":"BIH","ADM0_A3_NP":"BIH","ADM0_A3_PK":"BIH","ADM0_A3_DE":"BIH","ADM0_A3_GB":"BIH","ADM0_A3_BR":"BIH","ADM0_A3_IL":"BIH","ADM0_A3_PS":"BIH","ADM0_A3_SA":"BIH","ADM0_A3_EG":"BIH","ADM0_A3_MA":"BIH","ADM0_A3_PT":"BIH","ADM0_A3_AR":"BIH","ADM0_A3_JP":"BIH","ADM0_A3_KO":"BIH","ADM0_A3_VN":"BIH","ADM0_A3_TR":"BIH","ADM0_A3_ID":"BIH","ADM0_A3_PL":"BIH","ADM0_A3_GR":"BIH","ADM0_A3_IT":"BIH","ADM0_A3_NL":"BIH","ADM0_A3_SE":"BIH","ADM0_A3_BD":"BIH","ADM0_A3_UA":"BIH","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":16,"LONG_LEN":22,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":6.8,"LABEL_X":18.06841,"LABEL_Y":44.091051,"NE_ID":1159320417,"WIKIDATAID":"Q225","NAME_AR":"البوسنة والهرسك","NAME_BN":"বসনিয়া ও হার্জেগোভিনা","NAME_DE":"Bosnien und Herzegowina","NAME_EN":"Bosnia and Herzegovina","NAME_ES":"Bosnia y Herzegovina","NAME_FA":"بوسنی و هرزگوین","NAME_FR":"Bosnie-Herzégovine","NAME_EL":"Βοσνία και Ερζεγοβίνη","NAME_HE":"בוסניה והרצגובינה","NAME_HI":"बॉस्निया और हर्ज़ेगोविना","NAME_HU":"Bosznia-Hercegovina","NAME_ID":"Bosnia dan Herzegovina","NAME_IT":"Bosnia ed Erzegovina","NAME_JA":"ボスニア・ヘルツェゴビナ","NAME_KO":"보스니아 헤르체고비나","NAME_NL":"Bosnië en Herzegovina","NAME_PL":"Bośnia i Hercegowina","NAME_PT":"Bósnia e Herzegovina","NAME_RU":"Босния и Герцеговина","NAME_SV":"Bosnien och Hercegovina","NAME_TR":"Bosna-Hersek","NAME_UK":"Боснія і Герцеговина","NAME_UR":"بوسنیا و ہرزیگووینا","NAME_VI":"Bosna và Hercegovina","NAME_ZH":"波斯尼亚和黑塞哥维那","NAME_ZHT":"波士尼亞與赫塞哥維納","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-69.5109375,-17.50605468750001],[-69.31337890625,-17.943164062500003],[-69.0939453125,-18.05048828125001],[-68.96831054687499,-18.96796875000001],[-68.462890625,-19.43281250000001],[-68.69829101562499,-19.72109375000001],[-68.74516601562499,-20.458593750000006],[-68.197021484375,-21.30029296875],[-67.98837890624999,-22.05712890625],[-67.87944335937499,-22.82294921875001],[-67.19487304687499,-22.82167968750001],[-66.71171874999999,-22.21630859375],[-66.365185546875,-22.11376953125],[-66.098583984375,-21.835058593750006],[-65.77104492187499,-22.099609375],[-65.0578125,-22.10273437500001],[-64.60551757812499,-22.228808593750003],[-64.373974609375,-22.761035156250003],[-63.97612304687499,-22.072558593750003],[-63.81865234374999,-22.005468750000006],[-62.84335937499999,-21.99726562500001],[-62.65097656249999,-22.233691406250003],[-62.27666015624999,-21.066015625000006],[-62.276318359375,-20.5625],[-61.916943359375,-20.05537109375001],[-61.7568359375,-19.645312500000003],[-60.00737304687499,-19.29755859375001],[-59.09052734375,-19.286230468750006],[-58.18017578125,-19.81787109375],[-58.15976562499999,-20.164648437500006],[-58.131494140624994,-19.74453125000001],[-57.80039062499999,-19.08095703125001],[-57.57402343749999,-18.279296875],[-57.832470703125,-17.51210937500001],[-58.39599609375,-17.23427734375001],[-58.53793945312499,-16.328222656250006],[-60.17558593749999,-16.269335937500003],[-60.29887695312499,-14.618554687500009],[-60.506591796875,-13.789843750000003],[-61.07700195312499,-13.48974609375],[-61.789941406249994,-13.525585937500011],[-62.17607421874999,-13.133691406250009],[-62.76547851562499,-12.997265625000011],[-63.06748046874999,-12.669140625000011],[-63.58564453125,-12.518945312500009],[-64.42050781249999,-12.439746093750003],[-64.513427734375,-12.2509765625],[-64.99252929687499,-11.975195312500006],[-65.389892578125,-11.246289062500011],[-65.33403320312499,-10.892773437500011],[-65.4369140625,-10.449023437500003],[-65.31308593749999,-10.253027343750006],[-65.396142578125,-9.71240234375],[-66.26357421875,-9.826074218750009],[-66.72998046875,-9.975488281250009],[-67.582421875,-10.505957031250006],[-68.0716796875,-10.703125],[-68.39799804687499,-11.018750000000011],[-69.57861328125,-10.951757812500006],[-68.68525390625,-12.501953125],[-68.97861328124999,-12.880078125000011],[-69.07412109375,-13.682812500000011],[-68.880322265625,-14.198828125000006],[-69.23491210937499,-14.597070312500009],[-69.37470703125,-14.962988281250006],[-69.17246093749999,-15.236621093750003],[-69.41850585937499,-15.603417968750009],[-69.21757812499999,-16.14912109375001],[-68.9134765625,-16.26191406250001],[-69.020703125,-16.642187500000006],[-69.62485351562499,-17.2001953125],[-69.5109375,-17.50605468750001]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Bolivia","SOV_A3":"BOL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Bolivia","ADM0_A3":"BOL","GEOU_DIF":0,"GEOUNIT":"Bolivia","GU_A3":"BOL","SU_DIF":0,"SUBUNIT":"Bolivia","SU_A3":"BOL","BRK_DIFF":0,"NAME":"Bolivia","NAME_LONG":"Bolivia","BRK_A3":"BOL","BRK_NAME":"Bolivia","BRK_GROUP":"","ABBREV":"Bolivia","POSTAL":"BO","FORMAL_EN":"Plurinational State of Bolivia","FORMAL_FR":"","NAME_CIAWF":"Bolivia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bolivia","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":5,"MAPCOLOR9":2,"MAPCOLOR13":3,"POP_EST":11513100,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":40895,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"4. Lower middle income","FIPS_10":"BL","ISO_A2":"BO","ISO_A2_EH":"BO","ISO_A3":"BOL","ISO_A3_EH":"BOL","ISO_N3":"068","ISO_N3_EH":"068","UN_A3":"068","WB_A2":"BO","WB_A3":"BOL","WOE_ID":23424762,"WOE_ID_EH":23424762,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BOL","ADM0_DIFF":"","ADM0_TLC":"BOL","ADM0_A3_US":"BOL","ADM0_A3_FR":"BOL","ADM0_A3_RU":"BOL","ADM0_A3_ES":"BOL","ADM0_A3_CN":"BOL","ADM0_A3_TW":"BOL","ADM0_A3_IN":"BOL","ADM0_A3_NP":"BOL","ADM0_A3_PK":"BOL","ADM0_A3_DE":"BOL","ADM0_A3_GB":"BOL","ADM0_A3_BR":"BOL","ADM0_A3_IL":"BOL","ADM0_A3_PS":"BOL","ADM0_A3_SA":"BOL","ADM0_A3_EG":"BOL","ADM0_A3_MA":"BOL","ADM0_A3_PT":"BOL","ADM0_A3_AR":"BOL","ADM0_A3_JP":"BOL","ADM0_A3_KO":"BOL","ADM0_A3_VN":"BOL","ADM0_A3_TR":"BOL","ADM0_A3_ID":"BOL","ADM0_A3_PL":"BOL","ADM0_A3_GR":"BOL","ADM0_A3_IT":"BOL","ADM0_A3_NL":"BOL","ADM0_A3_SE":"BOL","ADM0_A3_BD":"BOL","ADM0_A3_UA":"BOL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7.5,"LABEL_X":-64.593433,"LABEL_Y":-16.666015,"NE_ID":1159320439,"WIKIDATAID":"Q750","NAME_AR":"بوليفيا","NAME_BN":"বলিভিয়া","NAME_DE":"Bolivien","NAME_EN":"Bolivia","NAME_ES":"Bolivia","NAME_FA":"بولیوی","NAME_FR":"Bolivie","NAME_EL":"Βολιβία","NAME_HE":"בוליביה","NAME_HI":"बोलिविया","NAME_HU":"Bolívia","NAME_ID":"Bolivia","NAME_IT":"Bolivia","NAME_JA":"ボリビア","NAME_KO":"볼리비아","NAME_NL":"Bolivia","NAME_PL":"Boliwia","NAME_PT":"Bolívia","NAME_RU":"Боливия","NAME_SV":"Bolivia","NAME_TR":"Bolivya","NAME_UK":"Болівія","NAME_UR":"بولیویا","NAME_VI":"Bolivia","NAME_ZH":"玻利维亚","NAME_ZHT":"玻利維亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[91.63193359375003,27.759960937499997],[91.60556640625003,27.951708984374996],[90.35273437500001,28.080224609374994],[89.98105468750003,28.311181640624994],[89.53691406249999,28.107421875],[88.89140624999999,27.316064453124994],[88.85761718750001,26.961474609374996],[89.76386718750001,26.701562500000023],[90.34589843750001,26.890332031249997],[90.73964843750002,26.771679687500068],[91.99833984374999,26.85498046875],[92.08339843750002,27.290625],[91.5947265625,27.557666015624996],[91.63193359375003,27.759960937499997]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Bhutan","SOV_A3":"BTN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Bhutan","ADM0_A3":"BTN","GEOU_DIF":0,"GEOUNIT":"Bhutan","GU_A3":"BTN","SU_DIF":0,"SUBUNIT":"Bhutan","SU_A3":"BTN","BRK_DIFF":0,"NAME":"Bhutan","NAME_LONG":"Bhutan","BRK_A3":"BTN","BRK_NAME":"Bhutan","BRK_GROUP":"","ABBREV":"Bhutan","POSTAL":"BT","FORMAL_EN":"Kingdom of Bhutan","FORMAL_FR":"","NAME_CIAWF":"Bhutan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bhutan","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":6,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":763092,"POP_RANK":11,"POP_YEAR":2019,"GDP_MD":2530,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"4. Lower middle income","FIPS_10":"BT","ISO_A2":"BT","ISO_A2_EH":"BT","ISO_A3":"BTN","ISO_A3_EH":"BTN","ISO_N3":"064","ISO_N3_EH":"064","UN_A3":"064","WB_A2":"BT","WB_A3":"BTN","WOE_ID":23424770,"WOE_ID_EH":23424770,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BTN","ADM0_DIFF":"","ADM0_TLC":"BTN","ADM0_A3_US":"BTN","ADM0_A3_FR":"BTN","ADM0_A3_RU":"BTN","ADM0_A3_ES":"BTN","ADM0_A3_CN":"BTN","ADM0_A3_TW":"BTN","ADM0_A3_IN":"BTN","ADM0_A3_NP":"BTN","ADM0_A3_PK":"BTN","ADM0_A3_DE":"BTN","ADM0_A3_GB":"BTN","ADM0_A3_BR":"BTN","ADM0_A3_IL":"BTN","ADM0_A3_PS":"BTN","ADM0_A3_SA":"BTN","ADM0_A3_EG":"BTN","ADM0_A3_MA":"BTN","ADM0_A3_PT":"BTN","ADM0_A3_AR":"BTN","ADM0_A3_JP":"BTN","ADM0_A3_KO":"BTN","ADM0_A3_VN":"BTN","ADM0_A3_TR":"BTN","ADM0_A3_ID":"BTN","ADM0_A3_PL":"BTN","ADM0_A3_GR":"BTN","ADM0_A3_IT":"BTN","ADM0_A3_NL":"BTN","ADM0_A3_SE":"BTN","ADM0_A3_BD":"BTN","ADM0_A3_UA":"BTN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":90.040294,"LABEL_Y":27.536685,"NE_ID":1159320453,"WIKIDATAID":"Q917","NAME_AR":"بوتان","NAME_BN":"ভুটান","NAME_DE":"Bhutan","NAME_EN":"Bhutan","NAME_ES":"Bután","NAME_FA":"بوتان","NAME_FR":"Bhoutan","NAME_EL":"Μπουτάν","NAME_HE":"בהוטן","NAME_HI":"भूटान","NAME_HU":"Bhután","NAME_ID":"Bhutan","NAME_IT":"Bhutan","NAME_JA":"ブータン","NAME_KO":"부탄","NAME_NL":"Bhutan","NAME_PL":"Bhutan","NAME_PT":"Butão","NAME_RU":"Бутан","NAME_SV":"Bhutan","NAME_TR":"Bhutan","NAME_UK":"Бутан","NAME_UR":"بھوٹان","NAME_VI":"Bhutan","NAME_ZH":"不丹","NAME_ZHT":"不丹","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[1.6226562500000057,6.216796875],[2.7064453125000227,6.3692382812499915],[2.7746093750000114,6.711718749999989],[2.68603515625,7.873730468749997],[2.7748046875000227,9.048535156249997],[3.044921875,9.083837890624991],[3.3251953125,9.778466796874994],[3.5572265625000057,9.907324218749991],[3.5765625000000227,10.268359374999989],[3.83447265625,10.607421875],[3.7164062500000057,11.07958984375],[3.48779296875,11.395410156249994],[3.5954101562500114,11.6962890625],[2.8781250000000114,12.367724609374989],[2.366015625000017,12.221923828125],[2.38916015625,11.897070312499991],[1.9803710937500227,11.418408203124997],[1.4267578125,11.447119140624991],[0.9004882812500057,10.993261718749991],[0.7799804687500114,10.359570312499997],[1.330078125,9.996972656249994],[1.42431640625,9.285009765624991],[1.6001953125000057,9.050048828125],[1.6226562500000057,6.216796875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Benin","SOV_A3":"BEN","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Benin","ADM0_A3":"BEN","GEOU_DIF":0,"GEOUNIT":"Benin","GU_A3":"BEN","SU_DIF":0,"SUBUNIT":"Benin","SU_A3":"BEN","BRK_DIFF":0,"NAME":"Benin","NAME_LONG":"Benin","BRK_A3":"BEN","BRK_NAME":"Benin","BRK_GROUP":"","ABBREV":"Benin","POSTAL":"BJ","FORMAL_EN":"Republic of Benin","FORMAL_FR":"","NAME_CIAWF":"Benin","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Benin","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":12,"POP_EST":11801151,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":14390,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"BN","ISO_A2":"BJ","ISO_A2_EH":"BJ","ISO_A3":"BEN","ISO_A3_EH":"BEN","ISO_N3":"204","ISO_N3_EH":"204","UN_A3":"204","WB_A2":"BJ","WB_A3":"BEN","WOE_ID":23424764,"WOE_ID_EH":23424764,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BEN","ADM0_DIFF":"","ADM0_TLC":"BEN","ADM0_A3_US":"BEN","ADM0_A3_FR":"BEN","ADM0_A3_RU":"BEN","ADM0_A3_ES":"BEN","ADM0_A3_CN":"BEN","ADM0_A3_TW":"BEN","ADM0_A3_IN":"BEN","ADM0_A3_NP":"BEN","ADM0_A3_PK":"BEN","ADM0_A3_DE":"BEN","ADM0_A3_GB":"BEN","ADM0_A3_BR":"BEN","ADM0_A3_IL":"BEN","ADM0_A3_PS":"BEN","ADM0_A3_SA":"BEN","ADM0_A3_EG":"BEN","ADM0_A3_MA":"BEN","ADM0_A3_PT":"BEN","ADM0_A3_AR":"BEN","ADM0_A3_JP":"BEN","ADM0_A3_KO":"BEN","ADM0_A3_VN":"BEN","ADM0_A3_TR":"BEN","ADM0_A3_ID":"BEN","ADM0_A3_PL":"BEN","ADM0_A3_GR":"BEN","ADM0_A3_IT":"BEN","ADM0_A3_NL":"BEN","ADM0_A3_SE":"BEN","ADM0_A3_BD":"BEN","ADM0_A3_UA":"BEN","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Western Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":5,"LONG_LEN":5,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":2.352018,"LABEL_Y":10.324775,"NE_ID":1159320399,"WIKIDATAID":"Q962","NAME_AR":"بنين","NAME_BN":"বেনিন","NAME_DE":"Benin","NAME_EN":"Benin","NAME_ES":"Benín","NAME_FA":"بنین","NAME_FR":"Bénin","NAME_EL":"Μπενίν","NAME_HE":"בנין","NAME_HI":"बेनिन","NAME_HU":"Benin","NAME_ID":"Benin","NAME_IT":"Benin","NAME_JA":"ベナン","NAME_KO":"베냉","NAME_NL":"Benin","NAME_PL":"Benin","NAME_PT":"Benim","NAME_RU":"Бенин","NAME_SV":"Benin","NAME_TR":"Benin","NAME_UK":"Бенін","NAME_UR":"بینن","NAME_VI":"Bénin","NAME_ZH":"贝宁","NAME_ZHT":"貝南","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-89.16147460937499,17.814843749999994],[-89.2375,15.894433593749994],[-88.89404296875,15.890625],[-88.313427734375,16.632763671874997],[-88.271728515625,17.60986328125],[-88.09721679687499,18.121630859375003],[-88.295654296875,18.472412109375],[-88.52299804687499,18.44589843749999],[-88.80634765625,17.965527343749997],[-89.16147460937499,17.814843749999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Belize","SOV_A3":"BLZ","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Belize","ADM0_A3":"BLZ","GEOU_DIF":0,"GEOUNIT":"Belize","GU_A3":"BLZ","SU_DIF":0,"SUBUNIT":"Belize","SU_A3":"BLZ","BRK_DIFF":0,"NAME":"Belize","NAME_LONG":"Belize","BRK_A3":"BLZ","BRK_NAME":"Belize","BRK_GROUP":"","ABBREV":"Belize","POSTAL":"BZ","FORMAL_EN":"Belize","FORMAL_FR":"","NAME_CIAWF":"Belize","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Belize","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":5,"MAPCOLOR13":7,"POP_EST":390353,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":1879,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"BH","ISO_A2":"BZ","ISO_A2_EH":"BZ","ISO_A3":"BLZ","ISO_A3_EH":"BLZ","ISO_N3":"084","ISO_N3_EH":"084","UN_A3":"084","WB_A2":"BZ","WB_A3":"BLZ","WOE_ID":23424760,"WOE_ID_EH":23424760,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BLZ","ADM0_DIFF":"","ADM0_TLC":"BLZ","ADM0_A3_US":"BLZ","ADM0_A3_FR":"BLZ","ADM0_A3_RU":"BLZ","ADM0_A3_ES":"BLZ","ADM0_A3_CN":"BLZ","ADM0_A3_TW":"BLZ","ADM0_A3_IN":"BLZ","ADM0_A3_NP":"BLZ","ADM0_A3_PK":"BLZ","ADM0_A3_DE":"BLZ","ADM0_A3_GB":"BLZ","ADM0_A3_BR":"BLZ","ADM0_A3_IL":"BLZ","ADM0_A3_PS":"BLZ","ADM0_A3_SA":"BLZ","ADM0_A3_EG":"BLZ","ADM0_A3_MA":"BLZ","ADM0_A3_PT":"BLZ","ADM0_A3_AR":"BLZ","ADM0_A3_JP":"BLZ","ADM0_A3_KO":"BLZ","ADM0_A3_VN":"BLZ","ADM0_A3_TR":"BLZ","ADM0_A3_ID":"BLZ","ADM0_A3_PL":"BLZ","ADM0_A3_GR":"BLZ","ADM0_A3_IT":"BLZ","ADM0_A3_NL":"BLZ","ADM0_A3_SE":"BLZ","ADM0_A3_BD":"BLZ","ADM0_A3_UA":"BLZ","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Central America","REGION_WB":"Latin America & Caribbean","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":6,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-88.712962,"LABEL_Y":17.202068,"NE_ID":1159320431,"WIKIDATAID":"Q242","NAME_AR":"بليز","NAME_BN":"বেলিজ","NAME_DE":"Belize","NAME_EN":"Belize","NAME_ES":"Belice","NAME_FA":"بلیز","NAME_FR":"Belize","NAME_EL":"Μπελίζ","NAME_HE":"בליז","NAME_HI":"बेलीज़","NAME_HU":"Belize","NAME_ID":"Belize","NAME_IT":"Belize","NAME_JA":"ベリーズ","NAME_KO":"벨리즈","NAME_NL":"Belize","NAME_PL":"Belize","NAME_PT":"Belize","NAME_RU":"Белиз","NAME_SV":"Belize","NAME_TR":"Belize","NAME_UK":"Беліз","NAME_UR":"بیلیز","NAME_VI":"Belize","NAME_ZH":"伯利兹","NAME_ZHT":"貝里斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[4.226171875000006,51.386474609375],[3.9020507812500114,51.207666015624994],[3.35009765625,51.377685546875],[2.52490234375,51.097119140625],[2.8397460937500227,50.711767578125],[4.174609375000017,50.246484374999994],[4.867578125000023,49.788134765624996],[5.789746093750011,49.53828125],[5.744042968750023,49.91962890625],[6.116503906250017,50.120996093749994],[6.364453125000011,50.316162109375],[5.993945312500017,50.750439453125],[5.8271484375,51.125634765624994],[4.50341796875,51.47470703125],[4.226171875000006,51.386474609375]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Belgium","SOV_A3":"BEL","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Belgium","ADM0_A3":"BEL","GEOU_DIF":0,"GEOUNIT":"Belgium","GU_A3":"BEL","SU_DIF":0,"SUBUNIT":"Belgium","SU_A3":"BEL","BRK_DIFF":0,"NAME":"Belgium","NAME_LONG":"Belgium","BRK_A3":"BEL","BRK_NAME":"Belgium","BRK_GROUP":"","ABBREV":"Belg.","POSTAL":"B","FORMAL_EN":"Kingdom of Belgium","FORMAL_FR":"","NAME_CIAWF":"Belgium","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Belgium","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":11484055,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":533097,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"BE","ISO_A2":"BE","ISO_A2_EH":"BE","ISO_A3":"BEL","ISO_A3_EH":"BEL","ISO_N3":"056","ISO_N3_EH":"056","UN_A3":"056","WB_A2":"BE","WB_A3":"BEL","WOE_ID":23424757,"WOE_ID_EH":23424757,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BEL","ADM0_DIFF":"","ADM0_TLC":"BEL","ADM0_A3_US":"BEL","ADM0_A3_FR":"BEL","ADM0_A3_RU":"BEL","ADM0_A3_ES":"BEL","ADM0_A3_CN":"BEL","ADM0_A3_TW":"BEL","ADM0_A3_IN":"BEL","ADM0_A3_NP":"BEL","ADM0_A3_PK":"BEL","ADM0_A3_DE":"BEL","ADM0_A3_GB":"BEL","ADM0_A3_BR":"BEL","ADM0_A3_IL":"BEL","ADM0_A3_PS":"BEL","ADM0_A3_SA":"BEL","ADM0_A3_EG":"BEL","ADM0_A3_MA":"BEL","ADM0_A3_PT":"BEL","ADM0_A3_AR":"BEL","ADM0_A3_JP":"BEL","ADM0_A3_KO":"BEL","ADM0_A3_VN":"BEL","ADM0_A3_TR":"BEL","ADM0_A3_ID":"BEL","ADM0_A3_PL":"BEL","ADM0_A3_GR":"BEL","ADM0_A3_IT":"BEL","ADM0_A3_NL":"BEL","ADM0_A3_SE":"BEL","ADM0_A3_BD":"BEL","ADM0_A3_UA":"BEL","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":4.800448,"LABEL_Y":50.785392,"NE_ID":1159320389,"WIKIDATAID":"Q31","NAME_AR":"بلجيكا","NAME_BN":"বেলজিয়াম","NAME_DE":"Belgien","NAME_EN":"Belgium","NAME_ES":"Bélgica","NAME_FA":"بلژیک","NAME_FR":"Belgique","NAME_EL":"Βέλγιο","NAME_HE":"בלגיה","NAME_HI":"बेल्जियम","NAME_HU":"Belgium","NAME_ID":"Belgia","NAME_IT":"Belgio","NAME_JA":"ベルギー","NAME_KO":"벨기에","NAME_NL":"België","NAME_PL":"Belgia","NAME_PT":"Bélgica","NAME_RU":"Бельгия","NAME_SV":"Belgien","NAME_TR":"Belçika","NAME_UK":"Бельгія","NAME_UR":"بلجئیم","NAME_VI":"Bỉ","NAME_ZH":"比利时","NAME_ZHT":"比利時","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[31.76337890625001,52.10107421875],[31.57734375000001,52.312304687499996],[31.417871093750023,53.196044921875],[32.14199218750002,53.091162109375],[32.70429687500001,53.336328125],[31.7919921875,54.055908203125],[31.403613281250017,54.195947265625],[31.12128906250001,54.648486328124996],[30.906835937500006,55.57001953125],[30.23359375000001,55.84521484375],[29.482226562500017,55.6845703125],[28.14794921875,56.142919921875],[27.576757812500006,55.798779296875],[26.593554687500017,55.667529296874996],[26.175195312500023,55.003271484375],[25.859277343750023,54.919287109375],[25.54736328125,54.331835937499996],[24.768164062500006,53.974658203124996],[23.484667968750017,53.939794921875],[23.887109375000023,53.0275390625],[23.8447265625,52.664208984375],[23.19697265625001,52.25693359375],[23.652441406250006,52.040380859375],[23.605273437500017,51.517919921875],[24.361914062500006,51.867529296875],[25.92529296875,51.913525390625],[27.141992187500023,51.75205078125],[27.270117187500006,51.613574218749996],[28.599023437500023,51.542626953124994],[29.135644531250023,51.61728515625],[29.346484375000017,51.382568359375],[30.533007812500017,51.596337890624994],[30.98066406250001,52.046191406249996],[31.76337890625001,52.10107421875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Belarus","SOV_A3":"BLR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Belarus","ADM0_A3":"BLR","GEOU_DIF":0,"GEOUNIT":"Belarus","GU_A3":"BLR","SU_DIF":0,"SUBUNIT":"Belarus","SU_A3":"BLR","BRK_DIFF":0,"NAME":"Belarus","NAME_LONG":"Belarus","BRK_A3":"BLR","BRK_NAME":"Belarus","BRK_GROUP":"","ABBREV":"Bela.","POSTAL":"BY","FORMAL_EN":"Republic of Belarus","FORMAL_FR":"","NAME_CIAWF":"Belarus","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Belarus","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":5,"MAPCOLOR13":11,"POP_EST":9466856,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":63080,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"BO","ISO_A2":"BY","ISO_A2_EH":"BY","ISO_A3":"BLR","ISO_A3_EH":"BLR","ISO_N3":"112","ISO_N3_EH":"112","UN_A3":"112","WB_A2":"BY","WB_A3":"BLR","WOE_ID":23424765,"WOE_ID_EH":23424765,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BLR","ADM0_DIFF":"","ADM0_TLC":"BLR","ADM0_A3_US":"BLR","ADM0_A3_FR":"BLR","ADM0_A3_RU":"BLR","ADM0_A3_ES":"BLR","ADM0_A3_CN":"BLR","ADM0_A3_TW":"BLR","ADM0_A3_IN":"BLR","ADM0_A3_NP":"BLR","ADM0_A3_PK":"BLR","ADM0_A3_DE":"BLR","ADM0_A3_GB":"BLR","ADM0_A3_BR":"BLR","ADM0_A3_IL":"BLR","ADM0_A3_PS":"BLR","ADM0_A3_SA":"BLR","ADM0_A3_EG":"BLR","ADM0_A3_MA":"BLR","ADM0_A3_PT":"BLR","ADM0_A3_AR":"BLR","ADM0_A3_JP":"BLR","ADM0_A3_KO":"BLR","ADM0_A3_VN":"BLR","ADM0_A3_TR":"BLR","ADM0_A3_ID":"BLR","ADM0_A3_PL":"BLR","ADM0_A3_GR":"BLR","ADM0_A3_IT":"BLR","ADM0_A3_NL":"BLR","ADM0_A3_SE":"BLR","ADM0_A3_BD":"BLR","ADM0_A3_UA":"BLR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Eastern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":28.417701,"LABEL_Y":53.821888,"NE_ID":1159320427,"WIKIDATAID":"Q184","NAME_AR":"بيلاروسيا","NAME_BN":"বেলারুশ","NAME_DE":"Belarus","NAME_EN":"Belarus","NAME_ES":"Bielorrusia","NAME_FA":"بلاروس","NAME_FR":"Biélorussie","NAME_EL":"Λευκορωσία","NAME_HE":"בלארוס","NAME_HI":"बेलारूस","NAME_HU":"Fehéroroszország","NAME_ID":"Belarus","NAME_IT":"Bielorussia","NAME_JA":"ベラルーシ","NAME_KO":"벨라루스","NAME_NL":"Wit-Rusland","NAME_PL":"Białoruś","NAME_PT":"Bielorrússia","NAME_RU":"Белоруссия","NAME_SV":"Belarus","NAME_TR":"Beyaz Rusya","NAME_UK":"Білорусь","NAME_UR":"بیلاروس","NAME_VI":"Belarus","NAME_ZH":"白俄罗斯","NAME_ZHT":"白俄羅斯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Barbados","SOV_A3":"BRB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Barbados","ADM0_A3":"BRB","GEOU_DIF":0,"GEOUNIT":"Barbados","GU_A3":"BRB","SU_DIF":0,"SUBUNIT":"Barbados","SU_A3":"BRB","BRK_DIFF":0,"NAME":"Barbados","NAME_LONG":"Barbados","BRK_A3":"BRB","BRK_NAME":"Barbados","BRK_GROUP":"","ABBREV":"Barb.","POSTAL":"BB","FORMAL_EN":"Barbados","FORMAL_FR":"","NAME_CIAWF":"Barbados","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Barbados","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":1,"MAPCOLOR9":5,"MAPCOLOR13":3,"POP_EST":287025,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":5209,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"BB","ISO_A2":"BB","ISO_A2_EH":"BB","ISO_A3":"BRB","ISO_A3_EH":"BRB","ISO_N3":"052","ISO_N3_EH":"052","UN_A3":"052","WB_A2":"BB","WB_A3":"BRB","WOE_ID":23424754,"WOE_ID_EH":23424754,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BRB","ADM0_DIFF":"","ADM0_TLC":"BRB","ADM0_A3_US":"BRB","ADM0_A3_FR":"BRB","ADM0_A3_RU":"BRB","ADM0_A3_ES":"BRB","ADM0_A3_CN":"BRB","ADM0_A3_TW":"BRB","ADM0_A3_IN":"BRB","ADM0_A3_NP":"BRB","ADM0_A3_PK":"BRB","ADM0_A3_DE":"BRB","ADM0_A3_GB":"BRB","ADM0_A3_BR":"BRB","ADM0_A3_IL":"BRB","ADM0_A3_PS":"BRB","ADM0_A3_SA":"BRB","ADM0_A3_EG":"BRB","ADM0_A3_MA":"BRB","ADM0_A3_PT":"BRB","ADM0_A3_AR":"URY","ADM0_A3_JP":"BRB","ADM0_A3_KO":"BRB","ADM0_A3_VN":"BRB","ADM0_A3_TR":"BRB","ADM0_A3_ID":"BRB","ADM0_A3_PL":"BRB","ADM0_A3_GR":"BRB","ADM0_A3_IT":"BRB","ADM0_A3_NL":"BRB","ADM0_A3_SE":"BRB","ADM0_A3_BD":"BRB","ADM0_A3_UA":"BRB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":8,"LONG_LEN":8,"ABBREV_LEN":5,"TINY":3,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":-59.568966,"LABEL_Y":13.163709,"NE_ID":1159320449,"WIKIDATAID":"Q244","NAME_AR":"باربادوس","NAME_BN":"বার্বাডোস","NAME_DE":"Barbados","NAME_EN":"Barbados","NAME_ES":"Barbados","NAME_FA":"باربادوس","NAME_FR":"Barbade","NAME_EL":"Μπαρμπάντος","NAME_HE":"ברבדוס","NAME_HI":"बारबाडोस","NAME_HU":"Barbados","NAME_ID":"Barbados","NAME_IT":"Barbados","NAME_JA":"バルバドス","NAME_KO":"바베이도스","NAME_NL":"Barbados","NAME_PL":"Barbados","NAME_PT":"Barbados","NAME_RU":"Барбадос","NAME_SV":"Barbados","NAME_TR":"Barbados","NAME_UK":"Барбадос","NAME_UR":"بارباڈوس","NAME_VI":"Barbados","NAME_ZH":"巴巴多斯","NAME_ZHT":"巴貝多","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[89.05146484375001,22.093164062500136],[89.23427734375002,21.722363281249997],[89.81191406250002,21.98349609374999],[90.15878906250003,21.816845703124997],[90.58945312500003,22.258447265624994],[90.43505859375,22.751904296874997],[90.63359374999999,23.09423828125],[90.94560546874999,22.59702148437499],[91.48212890625001,22.797412109375003],[91.69296875000003,22.504785156249994],[92.00800781250001,21.684765624999997],[92.05605468750002,21.1748046875],[92.32412109375002,20.79184570312499],[92.17958984375002,21.293115234374994],[92.59345703125001,21.467333984375003],[92.57490234374995,21.97807617187499],[92.49140625000001,22.68540039062499],[92.36162109374999,22.929003906250003],[92.24609374999994,23.683593749999943],[91.93789062500002,23.504687500000003],[91.61953125000002,22.979687500000068],[91.31523437499999,23.104394531249994],[91.16044921874999,23.66064453125],[91.36708984375002,24.093505859375],[91.876953125,24.1953125],[92.25126953124993,24.895068359375045],[92.04970703125002,25.169482421875003],[90.43935546875002,25.15771484375],[89.81406250000003,25.305371093749997],[89.82294921875001,25.94140625],[89.28925781250001,26.03759765625],[89.10830078125002,26.20224609375009],[88.4404296875,26.369482421875],[88.08457031249998,25.888232421875045],[88.45234375000001,25.574414062499997],[88.45625000000001,25.188427734374997],[88.1455078125,24.485791015624997],[88.73359375000001,24.230908203124997],[88.5673828125,23.67441406249999],[88.74082031250003,23.43662109374999],[89.05146484375001,22.093164062500136]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Bangladesh","SOV_A3":"BGD","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Bangladesh","ADM0_A3":"BGD","GEOU_DIF":0,"GEOUNIT":"Bangladesh","GU_A3":"BGD","SU_DIF":0,"SUBUNIT":"Bangladesh","SU_A3":"BGD","BRK_DIFF":0,"NAME":"Bangladesh","NAME_LONG":"Bangladesh","BRK_A3":"BGD","BRK_NAME":"Bangladesh","BRK_GROUP":"","ABBREV":"Bang.","POSTAL":"BD","FORMAL_EN":"People's Republic of Bangladesh","FORMAL_FR":"","NAME_CIAWF":"Bangladesh","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bangladesh","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":4,"MAPCOLOR9":7,"MAPCOLOR13":7,"POP_EST":163046161,"POP_RANK":17,"POP_YEAR":2019,"GDP_MD":302571,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"BG","ISO_A2":"BD","ISO_A2_EH":"BD","ISO_A3":"BGD","ISO_A3_EH":"BGD","ISO_N3":"050","ISO_N3_EH":"050","UN_A3":"050","WB_A2":"BD","WB_A3":"BGD","WOE_ID":23424759,"WOE_ID_EH":23424759,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BGD","ADM0_DIFF":"","ADM0_TLC":"BGD","ADM0_A3_US":"BGD","ADM0_A3_FR":"BGD","ADM0_A3_RU":"BGD","ADM0_A3_ES":"BGD","ADM0_A3_CN":"BGD","ADM0_A3_TW":"BGD","ADM0_A3_IN":"BGD","ADM0_A3_NP":"BGD","ADM0_A3_PK":"BGD","ADM0_A3_DE":"BGD","ADM0_A3_GB":"BGD","ADM0_A3_BR":"BGD","ADM0_A3_IL":"BGD","ADM0_A3_PS":"BGD","ADM0_A3_SA":"BGD","ADM0_A3_EG":"BGD","ADM0_A3_MA":"BGD","ADM0_A3_PT":"BGD","ADM0_A3_AR":"BGD","ADM0_A3_JP":"BGD","ADM0_A3_KO":"BGD","ADM0_A3_VN":"BGD","ADM0_A3_TR":"BGD","ADM0_A3_ID":"BGD","ADM0_A3_PL":"BGD","ADM0_A3_GR":"BGD","ADM0_A3_IT":"BGD","ADM0_A3_NL":"BGD","ADM0_A3_SE":"BGD","ADM0_A3_BD":"BGD","ADM0_A3_UA":"BGD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":89.684963,"LABEL_Y":24.214956,"NE_ID":1159320407,"WIKIDATAID":"Q902","NAME_AR":"بنغلاديش","NAME_BN":"বাংলাদেশ","NAME_DE":"Bangladesch","NAME_EN":"Bangladesh","NAME_ES":"Bangladés","NAME_FA":"بنگلادش","NAME_FR":"Bangladesh","NAME_EL":"Μπανγκλαντές","NAME_HE":"בנגלדש","NAME_HI":"बांग्लादेश","NAME_HU":"Banglades","NAME_ID":"Bangladesh","NAME_IT":"Bangladesh","NAME_JA":"バングラデシュ","NAME_KO":"방글라데시","NAME_NL":"Bangladesh","NAME_PL":"Bangladesz","NAME_PT":"Bangladesh","NAME_RU":"Бангладеш","NAME_SV":"Bangladesh","NAME_TR":"Bangladeş","NAME_UK":"Бангладеш","NAME_UR":"بنگلہ دیش","NAME_VI":"Bangladesh","NAME_ZH":"孟加拉国","NAME_ZHT":"孟加拉","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Bahrain","SOV_A3":"BHR","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Bahrain","ADM0_A3":"BHR","GEOU_DIF":0,"GEOUNIT":"Bahrain","GU_A3":"BHR","SU_DIF":0,"SUBUNIT":"Bahrain","SU_A3":"BHR","BRK_DIFF":0,"NAME":"Bahrain","NAME_LONG":"Bahrain","BRK_A3":"BHR","BRK_NAME":"Bahrain","BRK_GROUP":"","ABBREV":"Bahr.","POSTAL":"BH","FORMAL_EN":"Kingdom of Bahrain","FORMAL_FR":"","NAME_CIAWF":"Bahrain","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bahrain","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":1,"MAPCOLOR13":9,"POP_EST":1641172,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":38574,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"BA","ISO_A2":"BH","ISO_A2_EH":"BH","ISO_A3":"BHR","ISO_A3_EH":"BHR","ISO_N3":"048","ISO_N3_EH":"048","UN_A3":"048","WB_A2":"BH","WB_A3":"BHR","WOE_ID":23424753,"WOE_ID_EH":23424753,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BHR","ADM0_DIFF":"","ADM0_TLC":"BHR","ADM0_A3_US":"BHR","ADM0_A3_FR":"BHR","ADM0_A3_RU":"BHR","ADM0_A3_ES":"BHR","ADM0_A3_CN":"BHR","ADM0_A3_TW":"BHR","ADM0_A3_IN":"BHR","ADM0_A3_NP":"BHR","ADM0_A3_PK":"BHR","ADM0_A3_DE":"BHR","ADM0_A3_GB":"BHR","ADM0_A3_BR":"BHR","ADM0_A3_IL":"BHR","ADM0_A3_PS":"BHR","ADM0_A3_SA":"BHR","ADM0_A3_EG":"BHR","ADM0_A3_MA":"BHR","ADM0_A3_PT":"BHR","ADM0_A3_AR":"BHR","ADM0_A3_JP":"BHR","ADM0_A3_KO":"BHR","ADM0_A3_VN":"BHR","ADM0_A3_TR":"BHR","ADM0_A3_ID":"BHR","ADM0_A3_PL":"BHR","ADM0_A3_GR":"BHR","ADM0_A3_IT":"BHR","ADM0_A3_NL":"BHR","ADM0_A3_SE":"BHR","ADM0_A3_BD":"BHR","ADM0_A3_UA":"BHR","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Middle East & North Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":2,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":50.554816,"LABEL_Y":26.055972,"NE_ID":1159320413,"WIKIDATAID":"Q398","NAME_AR":"البحرين","NAME_BN":"বাহরাইন","NAME_DE":"Bahrain","NAME_EN":"Bahrain","NAME_ES":"Baréin","NAME_FA":"بحرین","NAME_FR":"Bahreïn","NAME_EL":"Μπαχρέιν","NAME_HE":"בחריין","NAME_HI":"बहरीन","NAME_HU":"Bahrein","NAME_ID":"Bahrain","NAME_IT":"Bahrein","NAME_JA":"バーレーン","NAME_KO":"바레인","NAME_NL":"Bahrein","NAME_PL":"Bahrajn","NAME_PT":"Bahrein","NAME_RU":"Бахрейн","NAME_SV":"Bahrain","NAME_TR":"Bahreyn","NAME_UK":"Бахрейн","NAME_UR":"بحرین","NAME_VI":"Bahrain","NAME_ZH":"巴林","NAME_ZHT":"巴林","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-77.74384765625,24.707421874999994],[-78.03330078124999,25.143115234375003],[-78.298828125,24.75390625],[-78.044921875,24.28745117187499],[-77.74384765625,24.707421874999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"The Bahamas","SOV_A3":"BHS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"The Bahamas","ADM0_A3":"BHS","GEOU_DIF":0,"GEOUNIT":"The Bahamas","GU_A3":"BHS","SU_DIF":0,"SUBUNIT":"The Bahamas","SU_A3":"BHS","BRK_DIFF":0,"NAME":"Bahamas","NAME_LONG":"Bahamas","BRK_A3":"BHS","BRK_NAME":"Bahamas","BRK_GROUP":"","ABBREV":"Bhs.","POSTAL":"BS","FORMAL_EN":"Commonwealth of the Bahamas","FORMAL_FR":"","NAME_CIAWF":"Bahamas, The","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Bahamas, The","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":1,"MAPCOLOR9":2,"MAPCOLOR13":5,"POP_EST":389482,"POP_RANK":10,"POP_YEAR":2019,"GDP_MD":13578,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"BF","ISO_A2":"BS","ISO_A2_EH":"BS","ISO_A3":"BHS","ISO_A3_EH":"BHS","ISO_N3":"044","ISO_N3_EH":"044","UN_A3":"044","WB_A2":"BS","WB_A3":"BHS","WOE_ID":23424758,"WOE_ID_EH":23424758,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"BHS","ADM0_DIFF":"","ADM0_TLC":"BHS","ADM0_A3_US":"BHS","ADM0_A3_FR":"BHS","ADM0_A3_RU":"BHS","ADM0_A3_ES":"BHS","ADM0_A3_CN":"BHS","ADM0_A3_TW":"BHS","ADM0_A3_IN":"BHS","ADM0_A3_NP":"BHS","ADM0_A3_PK":"BHS","ADM0_A3_DE":"BHS","ADM0_A3_GB":"BHS","ADM0_A3_BR":"BHS","ADM0_A3_IL":"BHS","ADM0_A3_PS":"BHS","ADM0_A3_SA":"BHS","ADM0_A3_EG":"BHS","ADM0_A3_MA":"BHS","ADM0_A3_PT":"BHS","ADM0_A3_AR":"BHS","ADM0_A3_JP":"BHS","ADM0_A3_KO":"BHS","ADM0_A3_VN":"BHS","ADM0_A3_TR":"BHS","ADM0_A3_ID":"BHS","ADM0_A3_PL":"BHS","ADM0_A3_GR":"BHS","ADM0_A3_IT":"BHS","ADM0_A3_NL":"BHS","ADM0_A3_SE":"BHS","ADM0_A3_BD":"BHS","ADM0_A3_UA":"BHS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":-77.146688,"LABEL_Y":26.401789,"NE_ID":1159320415,"WIKIDATAID":"Q778","NAME_AR":"باهاماس","NAME_BN":"বাহামা দ্বীপপুঞ্জ","NAME_DE":"Bahamas","NAME_EN":"The Bahamas","NAME_ES":"Bahamas","NAME_FA":"باهاما","NAME_FR":"Bahamas","NAME_EL":"Μπαχάμες","NAME_HE":"איי בהאמה","NAME_HI":"बहामास","NAME_HU":"Bahama-szigetek","NAME_ID":"Bahama","NAME_IT":"Bahamas","NAME_JA":"バハマ","NAME_KO":"바하마","NAME_NL":"Bahama's","NAME_PL":"Bahamy","NAME_PT":"Bahamas","NAME_RU":"Багамские Острова","NAME_SV":"Bahamas","NAME_TR":"Bahamalar","NAME_UK":"Багамські Острови","NAME_UR":"بہاماس","NAME_VI":"Bahamas","NAME_ZH":"巴哈马","NAME_ZHT":"巴哈馬","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[44.81718750000002,39.650439453124996],[45.47968750000001,39.006249999999994],[46.11445312500001,38.877783203125],[45.76630859375001,39.378466796874996],[45.03164062500002,39.76513671875],[44.76826171875001,39.703515624999994],[44.81718750000002,39.650439453124996]]],[[[48.868750000000006,38.435498046875],[49.01347656250002,39.133984375],[49.36279296875,39.349560546875],[49.32441406250001,39.608349609375],[49.775976562500006,40.583984375],[49.22646484375002,41.026220703125],[49.10664062500001,41.301708984375],[48.572851562500006,41.844482421875],[47.86113281250002,41.212744140625],[47.26113281250002,41.315087890624994],[46.74931640625002,41.81259765625],[46.42988281250001,41.890966796875],[46.18212890625,41.657080078125],[46.61894531250002,41.34375],[46.45791015625002,41.070214843749994],[45.28095703125001,41.449560546875],[45.00136718750002,41.290966796875],[45.587500000000006,40.846923828125],[45.37617187500001,40.638085937499994],[45.96464843750002,40.233789062499994],[45.789648437500006,39.881103515625],[46.55000000000001,39.201416015625],[46.49062500000002,38.906689453125],[47.77285156250002,39.648583984374994],[47.99589843750002,39.683935546875],[48.24199218750002,38.978955078125],[48.02324218750002,38.81904296875],[48.59267578125002,38.411083984375],[48.868750000000006,38.435498046875]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Azerbaijan","SOV_A3":"AZE","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Azerbaijan","ADM0_A3":"AZE","GEOU_DIF":0,"GEOUNIT":"Azerbaijan","GU_A3":"AZE","SU_DIF":0,"SUBUNIT":"Azerbaijan","SU_A3":"AZE","BRK_DIFF":0,"NAME":"Azerbaijan","NAME_LONG":"Azerbaijan","BRK_A3":"AZE","BRK_NAME":"Azerbaijan","BRK_GROUP":"","ABBREV":"Aze.","POSTAL":"AZ","FORMAL_EN":"Republic of Azerbaijan","FORMAL_FR":"","NAME_CIAWF":"Azerbaijan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Azerbaijan","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":6,"MAPCOLOR9":5,"MAPCOLOR13":8,"POP_EST":10023318,"POP_RANK":14,"POP_YEAR":2019,"GDP_MD":48047,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"AJ","ISO_A2":"AZ","ISO_A2_EH":"AZ","ISO_A3":"AZE","ISO_A3_EH":"AZE","ISO_N3":"031","ISO_N3_EH":"031","UN_A3":"031","WB_A2":"AZ","WB_A3":"AZE","WOE_ID":23424741,"WOE_ID_EH":23424741,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"AZE","ADM0_DIFF":"","ADM0_TLC":"AZE","ADM0_A3_US":"AZE","ADM0_A3_FR":"AZE","ADM0_A3_RU":"AZE","ADM0_A3_ES":"AZE","ADM0_A3_CN":"AZE","ADM0_A3_TW":"AZE","ADM0_A3_IN":"AZE","ADM0_A3_NP":"AZE","ADM0_A3_PK":"AZE","ADM0_A3_DE":"AZE","ADM0_A3_GB":"AZE","ADM0_A3_BR":"AZE","ADM0_A3_IL":"AZE","ADM0_A3_PS":"AZE","ADM0_A3_SA":"AZE","ADM0_A3_EG":"AZE","ADM0_A3_MA":"AZE","ADM0_A3_PT":"AZE","ADM0_A3_AR":"AZE","ADM0_A3_JP":"AZE","ADM0_A3_KO":"AZE","ADM0_A3_VN":"AZE","ADM0_A3_TR":"AZE","ADM0_A3_ID":"AZE","ADM0_A3_PL":"AZE","ADM0_A3_GR":"AZE","ADM0_A3_IT":"AZE","ADM0_A3_NL":"AZE","ADM0_A3_SE":"AZE","ADM0_A3_BD":"AZE","ADM0_A3_UA":"AZE","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":47.210994,"LABEL_Y":40.402387,"NE_ID":1159320381,"WIKIDATAID":"Q227","NAME_AR":"أذربيجان","NAME_BN":"আজারবাইজান","NAME_DE":"Aserbaidschan","NAME_EN":"Azerbaijan","NAME_ES":"Azerbaiyán","NAME_FA":"جمهوری آذربایجان","NAME_FR":"Azerbaïdjan","NAME_EL":"Αζερμπαϊτζάν","NAME_HE":"אזרבייג'ן","NAME_HI":"अज़रबैजान","NAME_HU":"Azerbajdzsán","NAME_ID":"Azerbaijan","NAME_IT":"Azerbaigian","NAME_JA":"アゼルバイジャン","NAME_KO":"아제르바이잔","NAME_NL":"Azerbeidzjan","NAME_PL":"Azerbejdżan","NAME_PT":"Azerbaijão","NAME_RU":"Азербайджан","NAME_SV":"Azerbajdzjan","NAME_TR":"Azerbaycan","NAME_UK":"Азербайджан","NAME_UR":"آذربائیجان","NAME_VI":"Azerbaijan","NAME_ZH":"阿塞拜疆","NAME_ZHT":"亞塞拜然","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[9.527539062500011,47.270751953125],[9.580273437500011,47.057373046875],[10.452832031250011,46.86494140625],[11.025097656250011,46.79697265625],[11.244433593750017,46.97568359375],[12.154101562500017,46.93525390625],[12.388281250000006,46.70263671875],[13.700000000000017,46.520263671875],[14.503515625000006,46.417041015624996],[15.000683593750011,46.6259765625],[15.957617187500006,46.677636718749994],[16.093066406250017,46.86328125],[16.453417968750017,47.006787109375],[16.434375000000017,47.367431640625],[17.147363281250023,48.00595703125],[16.953125,48.598828125],[16.477929687500023,48.800097656249996],[16.057226562500006,48.754785156249994],[14.97216796875,48.983935546874996],[14.691308593750023,48.59921875],[14.049121093750017,48.602490234375],[13.814746093750017,48.766943359375],[13.409375000000011,48.394140625],[12.814257812500017,48.16083984375],[12.685839843750017,47.669335937499994],[11.716796875,47.58349609375],[11.297949218750006,47.42490234375],[10.430371093750011,47.541064453124996],[10.312792968750017,47.313427734375],[9.524023437500006,47.524218749999996],[9.527539062500011,47.270751953125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":4,"SOVEREIGNT":"Austria","SOV_A3":"AUT","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Austria","ADM0_A3":"AUT","GEOU_DIF":0,"GEOUNIT":"Austria","GU_A3":"AUT","SU_DIF":0,"SUBUNIT":"Austria","SU_A3":"AUT","BRK_DIFF":0,"NAME":"Austria","NAME_LONG":"Austria","BRK_A3":"AUT","BRK_NAME":"Austria","BRK_GROUP":"","ABBREV":"Aust.","POSTAL":"A","FORMAL_EN":"Republic of Austria","FORMAL_FR":"","NAME_CIAWF":"Austria","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Austria","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":4,"POP_EST":8877067,"POP_RANK":13,"POP_YEAR":2019,"GDP_MD":445075,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"AU","ISO_A2":"AT","ISO_A2_EH":"AT","ISO_A3":"AUT","ISO_A3_EH":"AUT","ISO_N3":"040","ISO_N3_EH":"040","UN_A3":"040","WB_A2":"AT","WB_A3":"AUT","WOE_ID":23424750,"WOE_ID_EH":23424750,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"AUT","ADM0_DIFF":"","ADM0_TLC":"AUT","ADM0_A3_US":"AUT","ADM0_A3_FR":"AUT","ADM0_A3_RU":"AUT","ADM0_A3_ES":"AUT","ADM0_A3_CN":"AUT","ADM0_A3_TW":"AUT","ADM0_A3_IN":"AUT","ADM0_A3_NP":"AUT","ADM0_A3_PK":"AUT","ADM0_A3_DE":"AUT","ADM0_A3_GB":"AUT","ADM0_A3_BR":"AUT","ADM0_A3_IL":"AUT","ADM0_A3_PS":"AUT","ADM0_A3_SA":"AUT","ADM0_A3_EG":"AUT","ADM0_A3_MA":"AUT","ADM0_A3_PT":"AUT","ADM0_A3_AR":"AUT","ADM0_A3_JP":"AUT","ADM0_A3_KO":"AUT","ADM0_A3_VN":"AUT","ADM0_A3_TR":"AUT","ADM0_A3_ID":"AUT","ADM0_A3_PL":"AUT","ADM0_A3_GR":"AUT","ADM0_A3_IT":"AUT","ADM0_A3_NL":"AUT","ADM0_A3_SE":"AUT","ADM0_A3_BD":"AUT","ADM0_A3_UA":"AUT","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Western Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":5,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":8,"LABEL_X":14.130515,"LABEL_Y":47.518859,"NE_ID":1159320379,"WIKIDATAID":"Q40","NAME_AR":"النمسا","NAME_BN":"অস্ট্রিয়া","NAME_DE":"Österreich","NAME_EN":"Austria","NAME_ES":"Austria","NAME_FA":"اتریش","NAME_FR":"Autriche","NAME_EL":"Αυστρία","NAME_HE":"אוסטריה","NAME_HI":"ऑस्ट्रिया","NAME_HU":"Ausztria","NAME_ID":"Austria","NAME_IT":"Austria","NAME_JA":"オーストリア","NAME_KO":"오스트리아","NAME_NL":"Oostenrijk","NAME_PL":"Austria","NAME_PT":"Áustria","NAME_RU":"Австрия","NAME_SV":"Österrike","NAME_TR":"Avusturya","NAME_UK":"Австрія","NAME_UR":"آسٹریا","NAME_VI":"Áo","NAME_ZH":"奥地利","NAME_ZHT":"奧地利","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[143.17890625,-11.954492187500009],[142.87255859375,-11.821386718750006],[142.83681640625002,-11.306933593750003],[142.45644531250002,-10.707324218750003],[142.16835937500002,-10.946582031250003],[141.95156250000002,-11.896191406250011],[141.677734375,-12.491406250000011],[141.64541015625002,-13.259082031250003],[141.47255859375002,-13.797558593750011],[141.59433593750003,-14.15283203125],[141.52294921875,-14.470117187500009],[141.62548828125,-15.056640625],[141.41191406250005,-16.06953125000001],[141.21914062500002,-16.64619140625001],[140.83046875000002,-17.41445312500001],[140.51113281250002,-17.62451171875],[140.03583984375,-17.70263671875],[139.24843750000002,-17.32861328125],[139.00986328125003,-16.89931640625001],[138.24501953125002,-16.718359375000006],[137.70371093750003,-16.233007812500006],[137.0021484375,-15.878320312500009],[136.78466796875,-15.894238281250011],[136.20537109375005,-15.403417968750006],[135.53076171875,-15.000390625000009],[135.40517578125002,-14.758203125000009],[135.88339843750003,-14.153125000000003],[135.98955078125005,-13.810156250000006],[135.92734375000003,-13.304296875000006],[136.59433593750003,-13.003808593750009],[136.53701171875002,-12.784277343750006],[136.9474609375,-12.349902343750003],[136.540234375,-11.957617187500006],[136.08183593750005,-12.422460937500006],[135.78847656250002,-11.907031250000003],[135.21796875,-12.2216796875],[134.73027343750005,-11.984375],[134.23710937500005,-12.007714843750009],[133.90419921875002,-11.83203125],[133.18525390625,-11.705664062500006],[133.02490234375,-11.452832031250011],[132.6828125,-11.505566406250011],[132.58378906250005,-12.110253906250009],[132.3720703125,-12.239160156250009],[131.43828125000005,-12.276953125000006],[130.67236328125,-12.406933593750011],[130.1681640625,-12.957421875000009],[130.259765625,-13.30224609375],[129.8388671875,-13.572949218750011],[129.70986328125002,-13.97998046875],[129.37871093750005,-14.392480468750009],[129.75351562500003,-14.78955078125],[129.458984375,-14.933203125000006],[128.1994140625,-14.751757812500003],[127.6728515625,-14.195117187500003],[126.90322265625002,-13.744140625],[126.56972656250002,-14.160937500000003],[126.111328125,-14.114062500000003],[126.02070312500001,-14.494531250000009],[125.68125000000003,-14.387988281250003],[125.1787109375,-14.714746093750009],[125.24326171875003,-14.944531250000011],[124.83906250000001,-15.160742187500006],[124.38164062499999,-15.758203125000009],[124.57685546875001,-16.11367187500001],[123.49042968750001,-16.49072265625],[123.77812499999999,-16.867773437500006],[123.52519531249999,-17.48574218750001],[122.970703125,-16.436816406250003],[122.72041015625001,-16.787695312500006],[122.16025390625003,-17.31367187500001],[122.23740234375003,-17.968554687500003],[121.83378906249999,-18.47705078125],[121.49355468750002,-19.1064453125],[120.87841796875,-19.6650390625],[119.5859375,-20.03828125000001],[119.1044921875,-19.99531250000001],[118.75146484375,-20.26191406250001],[118.19921875,-20.37519531250001],[117.40625,-20.72119140625],[116.70673828125001,-20.65380859375],[116.01093750000001,-21.030371093750006],[115.45615234375003,-21.49169921875],[114.85908203125001,-21.735937500000006],[114.37773437499999,-22.34150390625001],[114.16386718749999,-22.323339843750006],[113.95839843750002,-21.93916015625001],[113.68281250000001,-22.637792968750006],[113.75703125000001,-23.41816406250001],[113.55292968750001,-23.73281250000001],[113.41767578125001,-24.435644531250006],[113.67080078125002,-24.97705078125],[114.21425781250002,-25.8515625],[114.21572265625002,-26.28945312500001],[113.53945312500002,-25.62519531250001],[113.58906250000001,-26.0986328125],[113.85283203124999,-26.332128906250006],[113.58164062500003,-26.55810546875],[114.02812499999999,-27.347265625000006],[114.16513671875003,-28.080664062500006],[114.53740234374999,-28.54287109375001],[114.958984375,-29.43359375],[114.99453125000002,-30.21621093750001],[115.17685546875003,-30.80800781250001],[115.69843750000001,-31.69453125000001],[115.68300781250002,-33.19287109375],[115.51533203125001,-33.531347656250006],[115.181640625,-33.64345703125001],[115.0087890625,-34.255859375],[115.72626953125001,-34.52607421875001],[115.98671875000002,-34.795019531250006],[116.51718750000003,-34.987890625000006],[117.58193359375002,-35.097753906250006],[118.13554687499999,-34.98662109375],[118.89531249999999,-34.47988281250001],[119.45058593750002,-34.368261718750006],[119.85410156250003,-33.974707031250006],[121.40507812499999,-33.826757812500006],[122.77753906250001,-33.89082031250001],[123.20761718750003,-33.98828125],[123.650390625,-33.83632812500001],[124.12607421875003,-33.12939453125],[124.7587890625,-32.88271484375001],[125.91718750000001,-32.296972656250006],[127.31982421875,-32.26406250000001],[128.06767578125005,-32.066503906250006],[128.94619140625002,-31.70263671875],[130.12978515625002,-31.5791015625],[130.78300781250005,-31.60400390625],[131.14365234375003,-31.495703125000006],[131.72119140625,-31.6962890625],[132.21464843750005,-32.00712890625],[132.75742187500003,-31.95625000000001],[133.212109375,-32.18378906250001],[133.55136718750003,-32.18291015625],[134.23417968750005,-32.54853515625001],[134.10039062500005,-32.748632812500006],[134.30126953125,-33.1650390625],[134.791015625,-33.32832031250001],[135.18544921875002,-33.90673828125],[135.64755859375003,-34.93964843750001],[136.4306640625,-34.02998046875001],[137.2373046875,-33.629492187500006],[137.44228515625002,-33.19355468750001],[137.85234375000005,-33.200781250000006],[137.9318359375,-33.5791015625],[137.49384765625,-34.1611328125],[137.39101562500002,-34.91328125000001],[137.01425781250003,-34.9158203125],[136.88359375000005,-35.23974609375],[137.69169921875005,-35.14296875000001],[138.08925781250002,-34.16982421875001],[138.48994140625,-34.76357421875001],[138.51113281250002,-35.0244140625],[138.18437500000005,-35.61269531250001],[139.03769531250003,-35.6892578125],[139.54873046875002,-36.0966796875],[139.85732421875002,-36.662109375],[139.78427734375003,-37.24580078125001],[140.62724609375005,-38.028417968750006],[141.0109375,-38.07695312500002],[141.42421875000002,-38.36347656250001],[141.72500000000002,-38.271386718749994],[142.61210937500005,-38.45166015625],[143.53896484375002,-38.820898437500006],[144.665234375,-38.2099609375],[145.79082031250005,-38.6669921875],[145.93535156250005,-38.901757812499994],[146.85683593750002,-38.663476562499994],[147.39560546875003,-38.219140624999994],[148.26250000000005,-37.830664062500006],[149.29843750000003,-37.80214843750001],[149.93271484375003,-37.52851562500001],[149.96025390625005,-36.8455078125],[150.1953125,-35.833593750000006],[150.69033203125002,-35.177734375],[150.96035156250002,-34.29707031250001],[151.23154296875003,-34.02968750000001],[151.48378906250002,-33.3474609375],[151.81289062500002,-32.90107421875001],[152.47041015625,-32.439062500000006],[152.55927734375,-32.045703125],[152.94394531250003,-31.434863281250003],[153.03056640625005,-30.56337890625001],[153.27236328125002,-29.89248046875001],[153.34804687500002,-29.29042968750001],[153.60458984375003,-28.8544921875],[153.57568359375,-28.240527343750003],[153.11679687500003,-27.194433593750006],[153.0841796875,-26.303808593750006],[153.16494140625002,-25.964160156250003],[152.91347656250002,-25.43212890625],[152.45634765625005,-24.80244140625001],[152.1298828125,-24.59755859375001],[151.90273437500002,-24.200976562500003],[151.50078125000005,-24.01240234375001],[150.84316406250002,-23.4580078125],[150.7638671875,-22.576171875],[150.54130859375005,-22.55908203125],[150.076171875,-22.16445312500001],[149.70390625000005,-22.440527343750006],[149.20488281250005,-21.125097656250006],[148.68369140625003,-20.580175781250006],[148.75937500000003,-20.28955078125],[147.91562500000003,-19.869238281250006],[147.41855468750003,-19.37812500000001],[147.13876953125003,-19.393164062500006],[146.48115234375,-19.078710937500006],[146.333203125,-18.5537109375],[146.0322265625,-18.27285156250001],[146.12587890625002,-17.63525390625],[145.90195312500003,-17.07021484375001],[145.42607421875005,-16.40615234375001],[145.4580078125,-16.056445312500003],[145.27158203125003,-15.476660156250006],[145.28769531250003,-14.943164062500003],[144.64804687500003,-14.492480468750003],[144.47304687500002,-14.231835937500009],[143.96181640625002,-14.462890625],[143.75634765625,-14.348828125000011],[143.54843750000003,-13.741015625000003],[143.58662109375,-13.443652343750003],[143.4015625,-12.639941406250003],[143.11025390625002,-12.303515625000003],[143.17890625,-11.954492187500009]]],[[[136.71464843750005,-13.803906250000011],[136.42470703125002,-13.864843750000006],[136.36328125,-14.228906250000009],[136.89433593750005,-14.293066406250006],[136.71464843750005,-13.803906250000011]]],[[[130.61884765625,-11.376074218750006],[130.64492187500002,-11.742382812500011],[130.95097656250005,-11.926464843750011],[131.53857421875,-11.436914062500009],[131.26826171875,-11.189843750000009],[130.61884765625,-11.376074218750006]]],[[[137.59648437500005,-35.73867187500001],[137.33408203125003,-35.59248046875001],[136.638671875,-35.748828125],[136.755078125,-36.03310546875001],[137.4484375,-36.074804687500006],[137.59648437500005,-35.73867187500001]]],[[[145.04296875,-40.786718750000006],[144.64609375000003,-40.980859374999994],[144.77792968750003,-41.418847656249994],[145.23818359375002,-42.019628906250006],[145.26816406250003,-42.544335937499994],[146.0431640625,-43.54716796875002],[146.87392578125002,-43.61250000000001],[147.40800781250005,-42.89384765625002],[147.98085937500002,-43.15703125000002],[147.92441406250003,-42.57246093750001],[148.30146484375,-42.039941406249994],[148.29287109375002,-40.94707031250002],[147.96875,-40.77958984375002],[147.45478515625,-41.00166015625001],[146.98984375000003,-40.99238281250001],[146.31748046875003,-41.163476562499994],[145.28300781250005,-40.769921874999994],[145.04296875,-40.786718750000006]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Australia","SOV_A3":"AU1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Australia","ADM0_A3":"AUS","GEOU_DIF":0,"GEOUNIT":"Australia","GU_A3":"AUS","SU_DIF":0,"SUBUNIT":"Australia","SU_A3":"AUS","BRK_DIFF":0,"NAME":"Australia","NAME_LONG":"Australia","BRK_A3":"AUS","BRK_NAME":"Australia","BRK_GROUP":"","ABBREV":"Auz.","POSTAL":"AU","FORMAL_EN":"Commonwealth of Australia","FORMAL_FR":"","NAME_CIAWF":"Australia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Australia","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":7,"POP_EST":25364307,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":1396567,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"1. High income: OECD","FIPS_10":"AS","ISO_A2":"AU","ISO_A2_EH":"AU","ISO_A3":"AUS","ISO_A3_EH":"AUS","ISO_N3":"036","ISO_N3_EH":"036","UN_A3":"036","WB_A2":"AU","WB_A3":"AUS","WOE_ID":-90,"WOE_ID_EH":23424748,"WOE_NOTE":"Includes Ashmore and Cartier Islands (23424749) and Coral Sea Islands (23424790).","ADM0_ISO":"AUS","ADM0_DIFF":"","ADM0_TLC":"AUS","ADM0_A3_US":"AUS","ADM0_A3_FR":"AUS","ADM0_A3_RU":"AUS","ADM0_A3_ES":"AUS","ADM0_A3_CN":"AUS","ADM0_A3_TW":"AUS","ADM0_A3_IN":"AUS","ADM0_A3_NP":"AUS","ADM0_A3_PK":"AUS","ADM0_A3_DE":"AUS","ADM0_A3_GB":"AUS","ADM0_A3_BR":"AUS","ADM0_A3_IL":"AUS","ADM0_A3_PS":"AUS","ADM0_A3_SA":"AUS","ADM0_A3_EG":"AUS","ADM0_A3_MA":"AUS","ADM0_A3_PT":"AUS","ADM0_A3_AR":"AUS","ADM0_A3_JP":"AUS","ADM0_A3_KO":"AUS","ADM0_A3_VN":"AUS","ADM0_A3_TR":"AUS","ADM0_A3_ID":"AUS","ADM0_A3_PL":"AUS","ADM0_A3_GR":"AUS","ADM0_A3_IT":"AUS","ADM0_A3_NL":"AUS","ADM0_A3_SE":"AUS","ADM0_A3_BD":"AUS","ADM0_A3_UA":"AUS","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Australia and New Zealand","REGION_WB":"East Asia & Pacific","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":1.7,"MAX_LABEL":5.7,"LABEL_X":134.04972,"LABEL_Y":-24.129522,"NE_ID":1159320355,"WIKIDATAID":"Q408","NAME_AR":"أستراليا","NAME_BN":"অস্ট্রেলিয়া","NAME_DE":"Australien","NAME_EN":"Australia","NAME_ES":"Australia","NAME_FA":"استرالیا","NAME_FR":"Australie","NAME_EL":"Αυστραλία","NAME_HE":"אוסטרליה","NAME_HI":"ऑस्ट्रेलिया","NAME_HU":"Ausztrália","NAME_ID":"Australia","NAME_IT":"Australia","NAME_JA":"オーストラリア","NAME_KO":"오스트레일리아","NAME_NL":"Australië","NAME_PL":"Australia","NAME_PT":"Austrália","NAME_RU":"Австралия","NAME_SV":"Australien","NAME_TR":"Avustralya","NAME_UK":"Австралія","NAME_UR":"آسٹریلیا","NAME_VI":"Úc","NAME_ZH":"澳大利亚","NAME_ZHT":"澳大利亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":5,"SOVEREIGNT":"Australia","SOV_A3":"AU1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Indian Ocean Territories","ADM0_A3":"IOA","GEOU_DIF":0,"GEOUNIT":"Indian Ocean Territories","GU_A3":"IOA","SU_DIF":0,"SUBUNIT":"Indian Ocean Territories","SU_A3":"IOA","BRK_DIFF":0,"NAME":"Indian Ocean Ter.","NAME_LONG":"Indian Ocean Territories","BRK_A3":"IOA","BRK_NAME":"Indian Ocean Ter.","BRK_GROUP":"","ABBREV":"Ind. Oc. Ter.","POSTAL":"IOT","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Auz.","NOTE_BRK":"","NAME_SORT":"Indian Ocean Territories","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":7,"POP_EST":2387,"POP_RANK":4,"POP_YEAR":2016,"GDP_MD":35,"GDP_YEAR":2016,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"-99","ISO_A2":"-99","ISO_A2_EH":"AU","ISO_A3":"-99","ISO_A3_EH":"AUS","ISO_N3":"-99","ISO_N3_EH":"036","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":-90,"WOE_ID_EH":23424869,"WOE_NOTE":"Grouping of Christmas Island (23424869) and Cocos or Keeling Islands (23424784)","ADM0_ISO":"AUS","ADM0_DIFF":"1","ADM0_TLC":"IOA","ADM0_A3_US":"IOA","ADM0_A3_FR":"IOA","ADM0_A3_RU":"IOA","ADM0_A3_ES":"IOA","ADM0_A3_CN":"IOA","ADM0_A3_TW":"IOA","ADM0_A3_IN":"IOA","ADM0_A3_NP":"IOA","ADM0_A3_PK":"IOA","ADM0_A3_DE":"IOA","ADM0_A3_GB":"IOA","ADM0_A3_BR":"IOA","ADM0_A3_IL":"IOA","ADM0_A3_PS":"IOA","ADM0_A3_SA":"IOA","ADM0_A3_EG":"IOA","ADM0_A3_MA":"IOA","ADM0_A3_PT":"IOA","ADM0_A3_AR":"IOA","ADM0_A3_JP":"IOA","ADM0_A3_KO":"IOA","ADM0_A3_VN":"IOA","ADM0_A3_TR":"IOA","ADM0_A3_ID":"IOA","ADM0_A3_PL":"IOA","ADM0_A3_GR":"IOA","ADM0_A3_IT":"IOA","ADM0_A3_NL":"IOA","ADM0_A3_SE":"IOA","ADM0_A3_BD":"IOA","ADM0_A3_UA":"IOA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Africa","SUBREGION":"Seven seas (open ocean)","REGION_WB":"East Asia & Pacific","NAME_LEN":17,"LONG_LEN":24,"ABBREV_LEN":13,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9.5,"LABEL_X":105.67259,"LABEL_Y":-10.490789,"NE_ID":1159320363,"WIKIDATAID":"Q4824275","NAME_AR":"أقاليم المحيط الهندي الأسترالية","NAME_BN":"অস্ট্রেলীয় ভারত মহাসাগর অঞ্চল","NAME_DE":"Australische Territorien im Indischen Ozean","NAME_EN":"Australian Indian Ocean Territories","NAME_ES":"Territorios Australianos del Océano Índico","NAME_FA":"سرزمینهای اقیانوس هند استرالیا","NAME_FR":"Territoires extérieurs australiens de l'Océan Indien","NAME_EL":"Αυστραλέζικο Έδαφος Ινδικού Ωκεανού","NAME_HE":"טריטוריה של האוקיינוס ההודי","NAME_HI":"हिंद महासागर के ऑस्ट्रेलियाई क्षेत्र","NAME_HU":"Ausztrál Indiai-óceáni Terület","NAME_ID":"Wilayah Samudra Hindia Australia","NAME_IT":"Australian Indian Ocean Territories","NAME_JA":"オーストラリア領インド洋地域","NAME_KO":"호주령 인도양 지역","NAME_NL":"Australische territoria van de Indische Oceaan","NAME_PL":"Australijskie Terytorium Oceanu Indyjskiego","NAME_PT":"Territórios australianos do Oceano Índico","NAME_RU":"Австралийские территории в Индийском океане","NAME_SV":"Australienska indiska oceanens havsområde","NAME_TR":"Australian Indian Ocean Territories","NAME_UK":"Австралійські території в Індійському океані","NAME_UR":"آسْٹْریلِیَن انڈین اوشین تیریتورییس","NAME_VI":"Vùng lãnh thổ Ấn Độ Dương thuộc Úc","NAME_ZH":"澳屬印度洋領地","NAME_ZHT":"澳屬印度洋領地","FCLASS_ISO":"Unrecognized","TLC_DIFF":"1","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":5,"SOVEREIGNT":"Australia","SOV_A3":"AU1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Heard Island and McDonald Islands","ADM0_A3":"HMD","GEOU_DIF":0,"GEOUNIT":"Heard Island and McDonald Islands","GU_A3":"HMD","SU_DIF":0,"SUBUNIT":"Heard Island and McDonald Islands","SU_A3":"HMD","BRK_DIFF":0,"NAME":"Heard I. and McDonald Is.","NAME_LONG":"Heard I. and McDonald Islands","BRK_A3":"HMD","BRK_NAME":"Heard I. and McDonald Is.","BRK_GROUP":"","ABBREV":"H.M.Is.","POSTAL":"HM","FORMAL_EN":"Territory of Heard Island and McDonald Islands","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Auz.","NOTE_BRK":"","NAME_SORT":"Heard Island and McDonald Islands","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":7,"POP_EST":0,"POP_RANK":1,"POP_YEAR":2019,"GDP_MD":0,"GDP_YEAR":2016,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"HM","ISO_A2":"HM","ISO_A2_EH":"HM","ISO_A3":"HMD","ISO_A3_EH":"HMD","ISO_N3":"334","ISO_N3_EH":"334","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":28289411,"WOE_ID_EH":28289411,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"HMD","ADM0_DIFF":"","ADM0_TLC":"HMD","ADM0_A3_US":"HMD","ADM0_A3_FR":"HMD","ADM0_A3_RU":"HMD","ADM0_A3_ES":"HMD","ADM0_A3_CN":"HMD","ADM0_A3_TW":"HMD","ADM0_A3_IN":"HMD","ADM0_A3_NP":"HMD","ADM0_A3_PK":"HMD","ADM0_A3_DE":"HMD","ADM0_A3_GB":"HMD","ADM0_A3_BR":"HMD","ADM0_A3_IL":"HMD","ADM0_A3_PS":"HMD","ADM0_A3_SA":"HMD","ADM0_A3_EG":"HMD","ADM0_A3_MA":"HMD","ADM0_A3_PT":"HMD","ADM0_A3_AR":"HMD","ADM0_A3_JP":"HMD","ADM0_A3_KO":"HMD","ADM0_A3_VN":"HMD","ADM0_A3_TR":"HMD","ADM0_A3_ID":"HMD","ADM0_A3_PL":"HMD","ADM0_A3_GR":"HMD","ADM0_A3_IT":"HMD","ADM0_A3_NL":"HMD","ADM0_A3_SE":"HMD","ADM0_A3_BD":"HMD","ADM0_A3_UA":"HMD","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Seven seas (open ocean)","REGION_UN":"Africa","SUBREGION":"Seven seas (open ocean)","REGION_WB":"Sub-Saharan Africa","NAME_LEN":25,"LONG_LEN":29,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":73.50521,"LABEL_Y":-53.103462,"NE_ID":1159320361,"WIKIDATAID":"Q131198","NAME_AR":"جزيرة هيرد وجزر ماكدونالد","NAME_BN":"হার্ড দ্বীপ এবং ম্যাকডোনাল্ড দ্বীপপুঞ্জ","NAME_DE":"Heard und McDonaldinseln","NAME_EN":"Heard Island and McDonald Islands","NAME_ES":"Islas Heard y McDonald","NAME_FA":"جزیره هرد و جزایر مکدونالد","NAME_FR":"îles Heard-et-MacDonald","NAME_EL":"Νήσοι Χερντ και Μακντόναλντ","NAME_HE":"האי הרד ואיי מקדונלד","NAME_HI":"हर्ड द्वीप और मैकडोनाल्ड द्वीप","NAME_HU":"Heard-sziget és McDonald-szigetek","NAME_ID":"Pulau Heard dan Kepulauan McDonald","NAME_IT":"Isole Heard e McDonald","NAME_JA":"ハード島とマクドナルド諸島","NAME_KO":"허드 맥도널드 제도","NAME_NL":"Heard en McDonaldeilanden","NAME_PL":"Wyspy Heard i McDonalda","NAME_PT":"Ilha Heard e Ilhas McDonald","NAME_RU":"Остров Херд и острова Макдональд","NAME_SV":"Heard- och McDonaldöarna","NAME_TR":"Heard Adası ve McDonald Adaları","NAME_UK":"Острів Герд і острови Макдональд","NAME_UR":"جزیرہ ہرڈ و جزائر مکڈونلڈ","NAME_VI":"Đảo Heard và quần đảo McDonald","NAME_ZH":"赫德岛和麦克唐纳群岛","NAME_ZHT":"赫德島和麥克唐納群島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":5,"SOVEREIGNT":"Australia","SOV_A3":"AU1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Norfolk Island","ADM0_A3":"NFK","GEOU_DIF":0,"GEOUNIT":"Norfolk Island","GU_A3":"NFK","SU_DIF":0,"SUBUNIT":"Norfolk Island","SU_A3":"NFK","BRK_DIFF":0,"NAME":"Norfolk Island","NAME_LONG":"Norfolk Island","BRK_A3":"NFK","BRK_NAME":"Norfolk Island","BRK_GROUP":"","ABBREV":"Nfk. I.","POSTAL":"NF","FORMAL_EN":"Territory of Norfolk Island","FORMAL_FR":"","NAME_CIAWF":"Norfolk Island","NOTE_ADM0":"Auz.","NOTE_BRK":"","NAME_SORT":"Norfolk Island","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":7,"POP_EST":2169,"POP_RANK":4,"POP_YEAR":2011,"GDP_MD":32,"GDP_YEAR":2016,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"NF","ISO_A2":"NF","ISO_A2_EH":"NF","ISO_A3":"NFK","ISO_A3_EH":"NFK","ISO_N3":"574","ISO_N3_EH":"574","UN_A3":"574","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424905,"WOE_ID_EH":23424905,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"NFK","ADM0_DIFF":"","ADM0_TLC":"NFK","ADM0_A3_US":"NFK","ADM0_A3_FR":"NFK","ADM0_A3_RU":"NFK","ADM0_A3_ES":"NFK","ADM0_A3_CN":"NFK","ADM0_A3_TW":"NFK","ADM0_A3_IN":"NFK","ADM0_A3_NP":"NFK","ADM0_A3_PK":"NFK","ADM0_A3_DE":"NFK","ADM0_A3_GB":"NFK","ADM0_A3_BR":"NFK","ADM0_A3_IL":"NFK","ADM0_A3_PS":"NFK","ADM0_A3_SA":"NFK","ADM0_A3_EG":"NFK","ADM0_A3_MA":"NFK","ADM0_A3_PT":"NFK","ADM0_A3_AR":"NFK","ADM0_A3_JP":"NFK","ADM0_A3_KO":"NFK","ADM0_A3_VN":"NFK","ADM0_A3_TR":"NFK","ADM0_A3_ID":"NFK","ADM0_A3_PL":"NFK","ADM0_A3_GR":"NFK","ADM0_A3_IT":"NFK","ADM0_A3_NL":"NFK","ADM0_A3_SE":"NFK","ADM0_A3_BD":"NFK","ADM0_A3_UA":"NFK","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Australia and New Zealand","REGION_WB":"East Asia & Pacific","NAME_LEN":14,"LONG_LEN":14,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":167.954531,"LABEL_Y":-29.033042,"NE_ID":1159320365,"WIKIDATAID":"Q31057","NAME_AR":"جزيرة نورفولك","NAME_BN":"নরফোক দ্বীপ","NAME_DE":"Norfolkinsel","NAME_EN":"Norfolk Island","NAME_ES":"Isla Norfolk","NAME_FA":"جزیره نورفک","NAME_FR":"Île Norfolk","NAME_EL":"Νόρφολκ","NAME_HE":"נורפוק","NAME_HI":"नॉर्फ़ोक द्वीप","NAME_HU":"Norfolk-sziget","NAME_ID":"Pulau Norfolk","NAME_IT":"Isola Norfolk","NAME_JA":"ノーフォーク島","NAME_KO":"노퍽섬","NAME_NL":"Norfolk","NAME_PL":"Norfolk","NAME_PT":"Ilha Norfolk","NAME_RU":"Норфолк","NAME_SV":"Norfolkön","NAME_TR":"Norfolk Adası","NAME_UK":"острів Норфолк","NAME_UR":"جزیرہ نارفولک","NAME_VI":"Đảo Norfolk","NAME_ZH":"诺福克岛","NAME_ZHT":"諾福克島","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":5,"SOVEREIGNT":"Australia","SOV_A3":"AU1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Dependency","TLC":"1","ADMIN":"Ashmore and Cartier Islands","ADM0_A3":"ATC","GEOU_DIF":0,"GEOUNIT":"Ashmore and Cartier Islands","GU_A3":"ATC","SU_DIF":0,"SUBUNIT":"Ashmore and Cartier Islands","SU_A3":"ATC","BRK_DIFF":0,"NAME":"Ashmore and Cartier Is.","NAME_LONG":"Ashmore and Cartier Islands","BRK_A3":"ATC","BRK_NAME":"Ashmore and Cartier Is.","BRK_GROUP":"","ABBREV":"A.C.Is.","POSTAL":"AU","FORMAL_EN":"Territory of Ashmore and Cartier Islands","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"Auz.","NOTE_BRK":"","NAME_SORT":"Ashmore and Cartier Islands","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":7,"POP_EST":0,"POP_RANK":1,"POP_YEAR":2019,"GDP_MD":0,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"AT","ISO_A2":"-99","ISO_A2_EH":"AU","ISO_A3":"-99","ISO_A3_EH":"AUS","ISO_N3":"036","ISO_N3_EH":"036","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424749,"WOE_ID_EH":23424749,"WOE_NOTE":"WOE Admin-1 states provinces match.","ADM0_ISO":"AUS","ADM0_DIFF":"1","ADM0_TLC":"ATC","ADM0_A3_US":"ATC","ADM0_A3_FR":"ATC","ADM0_A3_RU":"ATC","ADM0_A3_ES":"ATC","ADM0_A3_CN":"ATC","ADM0_A3_TW":"ATC","ADM0_A3_IN":"ATC","ADM0_A3_NP":"ATC","ADM0_A3_PK":"ATC","ADM0_A3_DE":"ATC","ADM0_A3_GB":"ATC","ADM0_A3_BR":"ATC","ADM0_A3_IL":"ATC","ADM0_A3_PS":"ATC","ADM0_A3_SA":"ATC","ADM0_A3_EG":"ATC","ADM0_A3_MA":"ATC","ADM0_A3_PT":"ATC","ADM0_A3_AR":"ATC","ADM0_A3_JP":"ATC","ADM0_A3_KO":"ATC","ADM0_A3_VN":"ATC","ADM0_A3_TR":"ATC","ADM0_A3_ID":"ATC","ADM0_A3_PL":"ATC","ADM0_A3_GR":"ATC","ADM0_A3_IT":"ATC","ADM0_A3_NL":"ATC","ADM0_A3_SE":"ATC","ADM0_A3_BD":"ATC","ADM0_A3_UA":"ATC","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Australia and New Zealand","REGION_WB":"East Asia & Pacific","NAME_LEN":23,"LONG_LEN":27,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":4.5,"MAX_LABEL":9.5,"LABEL_X":123.586368,"LABEL_Y":-12.432571,"NE_ID":1159320353,"WIKIDATAID":"Q133888","NAME_AR":"جزر أشمور وكارتيير","NAME_BN":"আসমর এবং কার্টিয়ে দ্বীপপুঞ্জ","NAME_DE":"Ashmore- und Cartierinseln","NAME_EN":"Ashmore and Cartier Islands","NAME_ES":"Islas Ashmore y Cartier","NAME_FA":"جزیرههای آشمور و کارتیر","NAME_FR":"Îles Ashmore-et-Cartier","NAME_EL":"Άσμορ και Καρτιέ Νησιά","NAME_HE":"איי אשמור וקרטייה","NAME_HI":"एशमोर और कार्टियर द्वीप समूह","NAME_HU":"Ashmore- és Cartier-szigetek","NAME_ID":"Kepulauan Ashmore dan Cartier","NAME_IT":"Isole Ashmore e Cartier","NAME_JA":"アシュモア・カルティエ諸島","NAME_KO":"애시모어 카르티에 제도","NAME_NL":"Ashmore- en Cartiereilanden","NAME_PL":"Wyspy Ashmore i Cartiera","NAME_PT":"Ilhas Ashmore e Cartier","NAME_RU":"Острова Ашмор и Картье","NAME_SV":"Ashmore- och Cartieröarna","NAME_TR":"Ashmore ve Cartier Adaları","NAME_UK":"Острови Ашмор і Картьє","NAME_UR":"جزائر ایشمور و کارٹیر","NAME_VI":"Quần đảo Ashmore và Cartier","NAME_ZH":"阿什莫尔和卡捷群岛","NAME_ZHT":"亞什摩及卡地爾群島","FCLASS_ISO":"Unrecognized","TLC_DIFF":"1","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[44.76826171875001,39.703515624999994],[45.03164062500002,39.76513671875],[45.76630859375001,39.378466796874996],[46.11445312500001,38.877783203125],[46.49062500000002,38.906689453125],[46.55000000000001,39.201416015625],[45.789648437500006,39.881103515625],[45.96464843750002,40.233789062499994],[45.37617187500001,40.638085937499994],[45.587500000000006,40.846923828125],[45.00136718750002,41.290966796875],[43.439453125,41.10712890625],[43.72265625,40.719531249999996],[43.5693359375,40.482373046875],[43.79169921875001,40.070263671875],[44.28925781250001,40.040380859375],[44.76826171875001,39.703515624999994]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Armenia","SOV_A3":"ARM","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Armenia","ADM0_A3":"ARM","GEOU_DIF":0,"GEOUNIT":"Armenia","GU_A3":"ARM","SU_DIF":0,"SUBUNIT":"Armenia","SU_A3":"ARM","BRK_DIFF":0,"NAME":"Armenia","NAME_LONG":"Armenia","BRK_A3":"ARM","BRK_NAME":"Armenia","BRK_GROUP":"","ABBREV":"Arm.","POSTAL":"ARM","FORMAL_EN":"Republic of Armenia","FORMAL_FR":"","NAME_CIAWF":"Armenia","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Armenia","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":2,"MAPCOLOR13":10,"POP_EST":2957731,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":13672,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"AM","ISO_A2":"AM","ISO_A2_EH":"AM","ISO_A3":"ARM","ISO_A3_EH":"ARM","ISO_N3":"051","ISO_N3_EH":"051","UN_A3":"051","WB_A2":"AM","WB_A3":"ARM","WOE_ID":23424743,"WOE_ID_EH":23424743,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ARM","ADM0_DIFF":"","ADM0_TLC":"ARM","ADM0_A3_US":"ARM","ADM0_A3_FR":"ARM","ADM0_A3_RU":"ARM","ADM0_A3_ES":"ARM","ADM0_A3_CN":"ARM","ADM0_A3_TW":"ARM","ADM0_A3_IN":"ARM","ADM0_A3_NP":"ARM","ADM0_A3_PK":"ARM","ADM0_A3_DE":"ARM","ADM0_A3_GB":"ARM","ADM0_A3_BR":"ARM","ADM0_A3_IL":"ARM","ADM0_A3_PS":"ARM","ADM0_A3_SA":"ARM","ADM0_A3_EG":"ARM","ADM0_A3_MA":"ARM","ADM0_A3_PT":"ARM","ADM0_A3_AR":"ARM","ADM0_A3_JP":"ARM","ADM0_A3_KO":"ARM","ADM0_A3_VN":"ARM","ADM0_A3_TR":"ARM","ADM0_A3_ID":"ARM","ADM0_A3_PL":"ARM","ADM0_A3_GR":"ARM","ADM0_A3_IT":"ARM","ADM0_A3_NL":"ARM","ADM0_A3_SE":"ARM","ADM0_A3_BD":"ARM","ADM0_A3_UA":"ARM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Western Asia","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":44.800564,"LABEL_Y":40.459077,"NE_ID":1159320333,"WIKIDATAID":"Q399","NAME_AR":"أرمينيا","NAME_BN":"আর্মেনিয়া","NAME_DE":"Armenien","NAME_EN":"Armenia","NAME_ES":"Armenia","NAME_FA":"ارمنستان","NAME_FR":"Arménie","NAME_EL":"Αρμενία","NAME_HE":"ארמניה","NAME_HI":"आर्मीनिया","NAME_HU":"Örményország","NAME_ID":"Armenia","NAME_IT":"Armenia","NAME_JA":"アルメニア","NAME_KO":"아르메니아","NAME_NL":"Armenië","NAME_PL":"Armenia","NAME_PT":"Arménia","NAME_RU":"Армения","NAME_SV":"Armenien","NAME_TR":"Ermenistan","NAME_UK":"Вірменія","NAME_UR":"آرمینیا","NAME_VI":"Armenia","NAME_ZH":"亚美尼亚","NAME_ZHT":"亞美尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-57.60888671875,-30.187792968750003],[-56.938623046874994,-29.594824218750006],[-55.725488281249994,-28.2041015625],[-55.101513671875,-27.866796875000006],[-54.8291015625,-27.550585937500003],[-54.32700195312499,-27.42353515625001],[-53.83818359374999,-27.12109375],[-53.671289062499994,-26.22509765625],[-53.89116210937499,-25.66884765625001],[-54.15458984374999,-25.523046875000006],[-54.615869140624994,-25.57607421875001],[-54.677734375,-26.30878906250001],[-54.82548828124999,-26.65224609375001],[-55.426660156249994,-27.00927734375],[-55.789990234375,-27.41640625000001],[-56.1640625,-27.32148437500001],[-56.437158203124994,-27.553808593750006],[-58.641748046874994,-27.196093750000003],[-58.191308593749994,-26.629980468750006],[-58.203027343749994,-26.381445312500006],[-57.890625,-26.00654296875001],[-57.587158203125,-25.405078125000003],[-57.821679687499994,-25.13642578125001],[-58.365380859374994,-24.959277343750003],[-59.372949218749994,-24.453906250000003],[-59.892480468749994,-24.093554687500003],[-60.83984375,-23.85810546875001],[-61.79853515625,-23.18203125000001],[-62.372509765625,-22.43916015625001],[-62.65097656249999,-22.233691406250003],[-62.84335937499999,-21.99726562500001],[-63.81865234374999,-22.005468750000006],[-63.97612304687499,-22.072558593750003],[-64.373974609375,-22.761035156250003],[-64.60551757812499,-22.228808593750003],[-65.0578125,-22.10273437500001],[-65.77104492187499,-22.099609375],[-66.098583984375,-21.835058593750006],[-66.365185546875,-22.11376953125],[-66.71171874999999,-22.21630859375],[-67.19487304687499,-22.82167968750001],[-67.0087890625,-23.00136718750001],[-67.356201171875,-24.033789062500006],[-68.25029296874999,-24.39199218750001],[-68.56201171875,-24.837695312500003],[-68.384228515625,-25.091894531250006],[-68.60029296875,-25.485644531250003],[-68.414501953125,-26.15371093750001],[-68.58115234374999,-26.518359375000003],[-68.34599609374999,-27.027929687500006],[-68.846337890625,-27.15371093750001],[-69.17441406249999,-27.92470703125001],[-69.65693359375,-28.41357421875],[-69.827880859375,-29.10322265625001],[-70.026806640625,-29.324023437500003],[-69.92763671875,-29.769140625000006],[-69.95634765624999,-30.358203125000003],[-70.16142578124999,-30.440234375000003],[-70.51958007812499,-31.1484375],[-70.585205078125,-31.569433593750006],[-70.16962890625,-32.4716796875],[-70.01982421874999,-33.271484375],[-69.79775390625,-33.39863281250001],[-69.85244140625,-34.22431640625001],[-70.28994140625,-34.73281250000001],[-70.47041015625,-35.326171875],[-70.40478515625,-36.06171875000001],[-71.05551757812499,-36.52373046875],[-71.16757812499999,-37.762304687500006],[-71.02817382812499,-38.04121093750001],[-70.951611328125,-38.73847656250001],[-71.42558593749999,-38.98564453125002],[-71.539453125,-39.602441406249994],[-71.719921875,-39.63525390625],[-71.6953125,-40.33525390625002],[-71.93212890625,-40.69169921875002],[-71.911279296875,-41.650390625],[-71.7609375,-42.101464843749994],[-72.12460937499999,-42.29833984375],[-72.146435546875,-42.99003906250002],[-71.781494140625,-43.16679687500002],[-71.90498046875,-43.44013671875001],[-71.680078125,-43.929589843749994],[-71.82001953125,-44.38310546875002],[-71.21259765625,-44.44121093750002],[-71.2611328125,-44.763085937499994],[-71.59628906249999,-44.97919921875001],[-71.353759765625,-45.23046875],[-71.77265625,-45.72441406250002],[-71.87568359375,-46.160546874999994],[-71.69521484375,-46.57841796875002],[-71.94023437499999,-46.83125000000001],[-71.90498046875,-47.20166015625],[-72.345947265625,-47.49267578125],[-72.51791992187499,-47.876367187499994],[-72.354736328125,-48.365820312500006],[-72.614404296875,-48.792871093749994],[-73.57626953124999,-49.582910156249994],[-73.50126953124999,-50.12529296875002],[-73.15292968749999,-50.73828125],[-72.50981445312499,-50.607519531250006],[-72.276318359375,-50.910253906250006],[-72.407666015625,-51.54082031250002],[-71.91865234375,-51.98955078125002],[-69.96025390624999,-52.008203124999994],[-68.443359375,-52.35664062500001],[-69.03251953124999,-51.63623046875],[-69.23515624999999,-50.950585937499994],[-68.939453125,-50.38232421875],[-67.78349609374999,-49.85888671875],[-67.68486328124999,-49.246679687500006],[-67.03310546875,-48.62773437500002],[-65.81005859375,-47.94111328125001],[-65.73808593749999,-47.34492187500001],[-65.99853515625,-47.09375],[-66.77685546875,-47.005859375],[-67.56337890625,-46.34541015625001],[-67.556640625,-45.970117187499994],[-66.94140625,-45.25732421875],[-66.19013671875,-44.964746093749994],[-65.63876953124999,-45.0078125],[-65.647607421875,-44.66142578125002],[-65.361279296875,-44.47734375000002],[-65.28359375,-43.629980468750006],[-64.985546875,-43.293554687500006],[-64.43222656249999,-43.059179687500006],[-65.02690429687499,-42.758886718750006],[-64.65048828124999,-42.53144531250001],[-64.13066406249999,-42.861425781250006],[-63.69248046874999,-42.805273437500006],[-63.5958984375,-42.40654296875002],[-64.42041015625,-42.43378906250001],[-65.05908203125,-41.96992187500001],[-65.13339843749999,-40.88066406250002],[-64.852978515625,-40.81376953125002],[-63.77299804687499,-41.150000000000006],[-62.95903320312499,-41.10966796875002],[-62.39501953125,-40.89082031250001],[-62.28691406249999,-39.89531250000002],[-62.053662109375,-39.37382812500002],[-62.3380859375,-39.15058593750001],[-62.06689453125,-38.91914062500001],[-61.112207031249994,-38.99296875000002],[-59.8283203125,-38.83818359375002],[-58.17919921875,-38.43583984375002],[-57.54697265624999,-38.08564453125001],[-57.395751953125,-37.74462890625],[-56.672021484374994,-36.85126953125001],[-56.69809570312499,-36.42646484375001],[-57.26499023437499,-36.144140625000006],[-57.353906249999994,-35.720312500000006],[-57.15888671875,-35.505957031250006],[-57.303662109375,-35.1884765625],[-58.283349609374994,-34.68349609375001],[-58.54721679687499,-33.66347656250001],[-58.424462890624994,-33.11152343750001],[-58.17099609374999,-32.95927734375],[-58.201171875,-32.4716796875],[-58.18901367187499,-31.92421875000001],[-57.81059570312499,-30.85859375000001],[-57.872509765625,-30.59101562500001],[-57.60888671875,-30.187792968750003]]],[[[-68.65322265625,-54.853613281250006],[-66.93046874999999,-54.924902343750006],[-66.5111328125,-55.032128906249994],[-65.34599609374999,-54.8779296875],[-67.29423828124999,-54.0498046875],[-68.00849609375,-53.564062500000006],[-68.27822265625,-52.983984375000006],[-68.62993164062499,-52.65263671875002],[-68.65322265625,-54.853613281250006]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":2,"SOVEREIGNT":"Argentina","SOV_A3":"ARG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Argentina","ADM0_A3":"ARG","GEOU_DIF":0,"GEOUNIT":"Argentina","GU_A3":"ARG","SU_DIF":0,"SUBUNIT":"Argentina","SU_A3":"ARG","BRK_DIFF":0,"NAME":"Argentina","NAME_LONG":"Argentina","BRK_A3":"ARG","BRK_NAME":"Argentina","BRK_GROUP":"","ABBREV":"Arg.","POSTAL":"AR","FORMAL_EN":"Argentine Republic","FORMAL_FR":"","NAME_CIAWF":"Argentina","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Argentina","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":1,"MAPCOLOR9":3,"MAPCOLOR13":13,"POP_EST":44938712,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":445445,"GDP_YEAR":2019,"ECONOMY":"5. Emerging region: G20","INCOME_GRP":"3. Upper middle income","FIPS_10":"AR","ISO_A2":"AR","ISO_A2_EH":"AR","ISO_A3":"ARG","ISO_A3_EH":"ARG","ISO_N3":"032","ISO_N3_EH":"032","UN_A3":"032","WB_A2":"AR","WB_A3":"ARG","WOE_ID":23424747,"WOE_ID_EH":23424747,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ARG","ADM0_DIFF":"","ADM0_TLC":"ARG","ADM0_A3_US":"ARG","ADM0_A3_FR":"ARG","ADM0_A3_RU":"ARG","ADM0_A3_ES":"ARG","ADM0_A3_CN":"ARG","ADM0_A3_TW":"ARG","ADM0_A3_IN":"ARG","ADM0_A3_NP":"ARG","ADM0_A3_PK":"ARG","ADM0_A3_DE":"ARG","ADM0_A3_GB":"ARG","ADM0_A3_BR":"ARG","ADM0_A3_IL":"ARG","ADM0_A3_PS":"ARG","ADM0_A3_SA":"ARG","ADM0_A3_EG":"ARG","ADM0_A3_MA":"ARG","ADM0_A3_PT":"ARG","ADM0_A3_AR":"ARG","ADM0_A3_JP":"ARG","ADM0_A3_KO":"ARG","ADM0_A3_VN":"ARG","ADM0_A3_TR":"ARG","ADM0_A3_ID":"ARG","ADM0_A3_PL":"ARG","ADM0_A3_GR":"ARG","ADM0_A3_IT":"ARG","ADM0_A3_NL":"ARG","ADM0_A3_SE":"ARG","ADM0_A3_BD":"ARG","ADM0_A3_UA":"ARG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"South America","REGION_UN":"Americas","SUBREGION":"South America","REGION_WB":"Latin America & Caribbean","NAME_LEN":9,"LONG_LEN":9,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2,"MAX_LABEL":7,"LABEL_X":-64.173331,"LABEL_Y":-33.501159,"NE_ID":1159320331,"WIKIDATAID":"Q414","NAME_AR":"الأرجنتين","NAME_BN":"আর্জেন্টিনা","NAME_DE":"Argentinien","NAME_EN":"Argentina","NAME_ES":"Argentina","NAME_FA":"آرژانتین","NAME_FR":"Argentine","NAME_EL":"Αργεντινή","NAME_HE":"ארגנטינה","NAME_HI":"अर्जेण्टीना","NAME_HU":"Argentína","NAME_ID":"Argentina","NAME_IT":"Argentina","NAME_JA":"アルゼンチン","NAME_KO":"아르헨티나","NAME_NL":"Argentinië","NAME_PL":"Argentyna","NAME_PT":"Argentina","NAME_RU":"Аргентина","NAME_SV":"Argentina","NAME_TR":"Arjantin","NAME_UK":"Аргентина","NAME_UR":"ارجنٹائن","NAME_VI":"Argentina","NAME_ZH":"阿根廷","NAME_ZHT":"阿根廷","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Antigua and Barbuda","SOV_A3":"ATG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Antigua and Barbuda","ADM0_A3":"ATG","GEOU_DIF":0,"GEOUNIT":"Antigua and Barbuda","GU_A3":"ATG","SU_DIF":0,"SUBUNIT":"Antigua and Barbuda","SU_A3":"ATG","BRK_DIFF":0,"NAME":"Antigua and Barb.","NAME_LONG":"Antigua and Barbuda","BRK_A3":"ATG","BRK_NAME":"Antigua and Barb.","BRK_GROUP":"","ABBREV":"Ant.B.","POSTAL":"AG","FORMAL_EN":"Antigua and Barbuda","FORMAL_FR":"","NAME_CIAWF":"Antigua and Barbuda","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Antigua and Barbuda","NAME_ALT":"","MAPCOLOR7":2,"MAPCOLOR8":2,"MAPCOLOR9":5,"MAPCOLOR13":5,"POP_EST":97118,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":1661,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"AC","ISO_A2":"AG","ISO_A2_EH":"AG","ISO_A3":"ATG","ISO_A3_EH":"ATG","ISO_N3":"028","ISO_N3_EH":"028","UN_A3":"028","WB_A2":"AG","WB_A3":"ATG","WOE_ID":23424737,"WOE_ID_EH":23424737,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ATG","ADM0_DIFF":"","ADM0_TLC":"ATG","ADM0_A3_US":"ATG","ADM0_A3_FR":"ATG","ADM0_A3_RU":"ATG","ADM0_A3_ES":"ATG","ADM0_A3_CN":"ATG","ADM0_A3_TW":"ATG","ADM0_A3_IN":"ATG","ADM0_A3_NP":"ATG","ADM0_A3_PK":"ATG","ADM0_A3_DE":"ATG","ADM0_A3_GB":"ATG","ADM0_A3_BR":"ATG","ADM0_A3_IL":"ATG","ADM0_A3_PS":"ATG","ADM0_A3_SA":"ATG","ADM0_A3_EG":"ATG","ADM0_A3_MA":"ATG","ADM0_A3_PT":"ATG","ADM0_A3_AR":"ATG","ADM0_A3_JP":"ATG","ADM0_A3_KO":"ATG","ADM0_A3_VN":"ATG","ADM0_A3_TR":"ATG","ADM0_A3_ID":"ATG","ADM0_A3_PL":"ATG","ADM0_A3_GR":"ATG","ADM0_A3_IT":"ATG","ADM0_A3_NL":"ATG","ADM0_A3_SE":"ATG","ADM0_A3_BD":"ATG","ADM0_A3_UA":"ATG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":17,"LONG_LEN":19,"ABBREV_LEN":6,"TINY":4,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":9.5,"LABEL_X":-61.790612,"LABEL_Y":17.352249,"NE_ID":1159320345,"WIKIDATAID":"Q781","NAME_AR":"أنتيغوا وباربودا","NAME_BN":"অ্যান্টিগুয়া ও বার্বুডা","NAME_DE":"Antigua und Barbuda","NAME_EN":"Antigua and Barbuda","NAME_ES":"Antigua y Barbuda","NAME_FA":"آنتیگوا و باربودا","NAME_FR":"Antigua-et-Barbuda","NAME_EL":"Αντίγκουα και Μπαρμπούντα","NAME_HE":"אנטיגואה וברבודה","NAME_HI":"अण्टीगुआ और बारबूडा","NAME_HU":"Antigua és Barbuda","NAME_ID":"Antigua dan Barbuda","NAME_IT":"Antigua e Barbuda","NAME_JA":"アンティグア・バーブーダ","NAME_KO":"앤티가 바부다","NAME_NL":"Antigua en Barbuda","NAME_PL":"Antigua i Barbuda","NAME_PT":"Antígua e Barbuda","NAME_RU":"Антигуа и Барбуда","NAME_SV":"Antigua och Barbuda","NAME_TR":"Antigua ve Barbuda","NAME_UK":"Антигуа і Барбуда","NAME_UR":"اینٹیگوا و باربوڈا","NAME_VI":"Antigua và Barbuda","NAME_ZH":"安提瓜和巴布达","NAME_ZHT":"安地卡及巴布達","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[13.07275390625,-4.634765625],[12.881054687500011,-4.445117187500003],[12.384570312500017,-4.619140625],[12.018359375000017,-5.0042968750000085],[12.213671875000017,-5.7586914062500085],[12.503710937500017,-5.69580078125],[12.522363281250023,-5.14892578125],[12.829687500000006,-4.736621093750003],[13.07275390625,-4.634765625]]],[[[23.96650390625001,-10.871777343750011],[23.833886718750023,-11.013671875],[22.56103515625,-11.055859375000011],[22.27880859375,-11.194140625000003],[22.30244140625001,-10.396679687500011],[22.19775390625,-10.040625000000006],[21.81318359375001,-9.46875],[21.905371093750006,-8.693359375],[21.751074218750006,-7.305468750000003],[20.607812500000023,-7.2777343750000085],[20.482226562500017,-6.915820312500003],[19.87519531250001,-6.986328125],[19.527636718750017,-7.1444335937500085],[19.3408203125,-7.966601562500003],[18.653417968750006,-7.93603515625],[17.536035156250023,-8.075878906250011],[16.984765625000023,-7.257421875000006],[16.742968750000017,-6.618457031250003],[16.7177734375,-6.241406250000011],[16.315234375000017,-5.8656250000000085],[14.398632812500011,-5.892675781250006],[13.068164062500017,-5.864843750000006],[12.302539062500017,-6.092578125000003],[12.521289062500017,-6.59033203125],[12.823437500000011,-6.954785156250011],[12.8623046875,-7.2318359375000085],[13.378515625000006,-8.369726562500006],[13.358984375000006,-8.687207031250011],[12.99853515625,-9.048046875000011],[13.209375000000023,-9.703222656250006],[13.847460937500017,-11.054394531250011],[13.785351562500011,-11.812792968750003],[13.4169921875,-12.520410156250009],[12.983203125000017,-12.775683593750003],[12.550488281250011,-13.437792968750003],[12.280468750000011,-14.637500000000003],[11.967871093750006,-15.633984375000011],[11.750878906250023,-15.831933593750009],[11.818945312500006,-16.7041015625],[11.743066406250023,-17.24921875000001],[12.548144531250017,-17.212695312500003],[13.101171875000006,-16.96767578125001],[13.403710937500023,-17.0078125],[13.93798828125,-17.388769531250006],[16.531054687500017,-17.39082031250001],[18.396386718750023,-17.3994140625],[18.718066406250017,-17.703222656250006],[19.076464843750017,-17.817675781250003],[20.392968750000023,-17.88740234375001],[20.625097656250006,-17.996679687500006],[21.416894531250023,-18.00068359375001],[23.380664062500017,-17.640625],[22.150683593750017,-16.59716796875],[21.979785156250017,-15.95556640625],[21.978906250000023,-13.0009765625],[23.843164062500023,-13.0009765625],[23.991308593750006,-12.422167968750003],[23.96650390625001,-10.871777343750011]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Angola","SOV_A3":"AGO","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Angola","ADM0_A3":"AGO","GEOU_DIF":0,"GEOUNIT":"Angola","GU_A3":"AGO","SU_DIF":0,"SUBUNIT":"Angola","SU_A3":"AGO","BRK_DIFF":0,"NAME":"Angola","NAME_LONG":"Angola","BRK_A3":"AGO","BRK_NAME":"Angola","BRK_GROUP":"","ABBREV":"Ang.","POSTAL":"AO","FORMAL_EN":"People's Republic of Angola","FORMAL_FR":"","NAME_CIAWF":"Angola","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Angola","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":2,"MAPCOLOR9":6,"MAPCOLOR13":1,"POP_EST":31825295,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":88815,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"3. Upper middle income","FIPS_10":"AO","ISO_A2":"AO","ISO_A2_EH":"AO","ISO_A3":"AGO","ISO_A3_EH":"AGO","ISO_N3":"024","ISO_N3_EH":"024","UN_A3":"024","WB_A2":"AO","WB_A3":"AGO","WOE_ID":23424745,"WOE_ID_EH":23424745,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"AGO","ADM0_DIFF":"","ADM0_TLC":"AGO","ADM0_A3_US":"AGO","ADM0_A3_FR":"AGO","ADM0_A3_RU":"AGO","ADM0_A3_ES":"AGO","ADM0_A3_CN":"AGO","ADM0_A3_TW":"AGO","ADM0_A3_IN":"AGO","ADM0_A3_NP":"AGO","ADM0_A3_PK":"AGO","ADM0_A3_DE":"AGO","ADM0_A3_GB":"AGO","ADM0_A3_BR":"AGO","ADM0_A3_IL":"AGO","ADM0_A3_PS":"AGO","ADM0_A3_SA":"AGO","ADM0_A3_EG":"AGO","ADM0_A3_MA":"AGO","ADM0_A3_PT":"AGO","ADM0_A3_AR":"AGO","ADM0_A3_JP":"AGO","ADM0_A3_KO":"AGO","ADM0_A3_VN":"AGO","ADM0_A3_TR":"AGO","ADM0_A3_ID":"AGO","ADM0_A3_PL":"AGO","ADM0_A3_GR":"AGO","ADM0_A3_IT":"AGO","ADM0_A3_NL":"AGO","ADM0_A3_SE":"AGO","ADM0_A3_BD":"AGO","ADM0_A3_UA":"AGO","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Middle Africa","REGION_WB":"Sub-Saharan Africa","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7,"LABEL_X":17.984249,"LABEL_Y":-12.182762,"NE_ID":1159320323,"WIKIDATAID":"Q916","NAME_AR":"أنغولا","NAME_BN":"অ্যাঙ্গোলা","NAME_DE":"Angola","NAME_EN":"Angola","NAME_ES":"Angola","NAME_FA":"آنگولا","NAME_FR":"Angola","NAME_EL":"Ανγκόλα","NAME_HE":"אנגולה","NAME_HI":"अंगोला","NAME_HU":"Angola","NAME_ID":"Angola","NAME_IT":"Angola","NAME_JA":"アンゴラ","NAME_KO":"앙골라","NAME_NL":"Angola","NAME_PL":"Angola","NAME_PT":"Angola","NAME_RU":"Ангола","NAME_SV":"Angola","NAME_TR":"Angola","NAME_UK":"Ангола","NAME_UR":"انگولا","NAME_VI":"Angola","NAME_ZH":"安哥拉","NAME_ZHT":"安哥拉","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Andorra","SOV_A3":"AND","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Andorra","ADM0_A3":"AND","GEOU_DIF":0,"GEOUNIT":"Andorra","GU_A3":"AND","SU_DIF":0,"SUBUNIT":"Andorra","SU_A3":"AND","BRK_DIFF":0,"NAME":"Andorra","NAME_LONG":"Andorra","BRK_A3":"AND","BRK_NAME":"Andorra","BRK_GROUP":"","ABBREV":"And.","POSTAL":"AND","FORMAL_EN":"Principality of Andorra","FORMAL_FR":"","NAME_CIAWF":"Andorra","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Andorra","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":8,"POP_EST":77142,"POP_RANK":8,"POP_YEAR":2019,"GDP_MD":3154,"GDP_YEAR":2019,"ECONOMY":"2. Developed region: nonG7","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"AN","ISO_A2":"AD","ISO_A2_EH":"AD","ISO_A3":"AND","ISO_A3_EH":"AND","ISO_N3":"020","ISO_N3_EH":"020","UN_A3":"020","WB_A2":"AD","WB_A3":"ADO","WOE_ID":23424744,"WOE_ID_EH":23424744,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"AND","ADM0_DIFF":"","ADM0_TLC":"AND","ADM0_A3_US":"AND","ADM0_A3_FR":"AND","ADM0_A3_RU":"AND","ADM0_A3_ES":"AND","ADM0_A3_CN":"AND","ADM0_A3_TW":"AND","ADM0_A3_IN":"AND","ADM0_A3_NP":"AND","ADM0_A3_PK":"AND","ADM0_A3_DE":"AND","ADM0_A3_GB":"AND","ADM0_A3_BR":"AND","ADM0_A3_IL":"AND","ADM0_A3_PS":"AND","ADM0_A3_SA":"AND","ADM0_A3_EG":"AND","ADM0_A3_MA":"AND","ADM0_A3_PT":"AND","ADM0_A3_AR":"AND","ADM0_A3_JP":"AND","ADM0_A3_KO":"AND","ADM0_A3_VN":"AND","ADM0_A3_TR":"AND","ADM0_A3_ID":"AND","ADM0_A3_PL":"AND","ADM0_A3_GR":"AND","ADM0_A3_IT":"AND","ADM0_A3_NL":"AND","ADM0_A3_SE":"AND","ADM0_A3_BD":"AND","ADM0_A3_UA":"AND","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":5,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":1.539409,"LABEL_Y":42.547643,"NE_ID":1159320327,"WIKIDATAID":"Q228","NAME_AR":"أندورا","NAME_BN":"অ্যান্ডোরা","NAME_DE":"Andorra","NAME_EN":"Andorra","NAME_ES":"Andorra","NAME_FA":"آندورا","NAME_FR":"Andorre","NAME_EL":"Ανδόρρα","NAME_HE":"אנדורה","NAME_HI":"अण्डोरा","NAME_HU":"Andorra","NAME_ID":"Andorra","NAME_IT":"Andorra","NAME_JA":"アンドラ","NAME_KO":"안도라","NAME_NL":"Andorra","NAME_PL":"Andora","NAME_PT":"Andorra","NAME_RU":"Андорра","NAME_SV":"Andorra","NAME_TR":"Andorra","NAME_UK":"Андорра","NAME_UR":"انڈورا","NAME_VI":"Andorra","NAME_ZH":"安道尔","NAME_ZHT":"安道爾","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[8.576562500000023,36.93720703125],[7.910449218750017,36.856347656249994],[7.607714843750017,36.999755859375],[6.927539062500017,36.91943359375],[6.486523437500011,37.085742187499996],[6.064746093750017,36.8642578125],[5.195605468750017,36.676806640624996],[4.758105468750017,36.896337890625],[3.7790039062500114,36.89619140625],[2.9728515625000114,36.784472656249996],[2.5933593750000057,36.60068359375],[1.2572265625000227,36.519580078124996],[0.514941406250017,36.26181640625],[0.047949218750005684,35.900537109374994],[-0.91748046875,35.668408203125],[-1.913281249999983,35.09423828125],[-2.2196289062499943,35.10419921875],[-1.795605468749983,34.751904296875],[-1.67919921875,33.318652343749996],[-1.510009765625,32.87763671875],[-1.0655273437499773,32.468310546874996],[-1.275341796874983,32.089013671874994],[-2.4483886718749943,32.12998046875],[-2.930859374999983,32.042529296874996],[-3.0173828124999886,31.834277343749996],[-3.8267578124999773,31.661914062499996],[-3.8333984374999943,31.197802734374996],[-4.322851562499977,30.698876953124994],[-4.96826171875,30.465380859374996],[-5.448779296874989,29.956933593749994],[-6.500878906249994,29.809130859374996],[-6.635351562499977,29.568798828124997],[-7.094921874999983,29.625195312499997],[-7.685156249999977,29.349511718749994],[-8.659912109375,28.718603515625],[-8.683349609375,27.656445312499997],[-8.683349609375,27.285937499999996],[-6.238671874999994,25.848193359375003],[-4.822607421874977,24.99560546875],[-3.2578613281249886,23.981250000000003],[-1.29296875,22.696533203125],[1.1455078125,21.102246093749997],[1.1657226562500114,20.817431640625003],[1.6854492187500227,20.378369140624997],[2.2193359375000057,20.247802734375],[2.4061523437500227,20.063867187499994],[3.2037109375000057,19.789697265624994],[3.255859375,19.410937500000003],[3.1060546875000057,19.150097656249997],[3.40087890625,18.988427734374994],[4.227636718750006,19.142773437499997],[5.836621093750011,19.479150390624994],[7.481738281250017,20.873095703125003],[9.378710937500017,21.991406249999997],[11.967871093750006,23.517871093750003],[11.536914062500017,24.290820312500003],[10.686132812500006,24.55136718749999],[10.255859375,24.591015624999997],[10.000683593750011,25.332080078125003],[9.4482421875,26.067138671875],[9.491406250000011,26.333740234375],[9.859375,26.551953124999997],[9.74755859375,27.330859374999996],[9.916015625,27.785693359374996],[9.842578125000017,28.966992187499997],[9.672656250000017,29.5669921875],[9.310253906250011,30.115234375],[9.518750000000011,30.229394531249994],[9.044042968750006,32.07236328125],[8.333398437500023,32.543603515624994],[8.2109375,32.926708984375],[7.7626953125,33.23310546875],[7.500195312500011,33.832470703125],[7.513867187500011,34.080517578125],[8.24560546875,34.73408203125],[8.394238281250011,35.203857421875],[8.245703125000006,35.870556640625],[8.230761718750017,36.545263671875],[8.576562500000023,36.93720703125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Algeria","SOV_A3":"DZA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Algeria","ADM0_A3":"DZA","GEOU_DIF":0,"GEOUNIT":"Algeria","GU_A3":"DZA","SU_DIF":0,"SUBUNIT":"Algeria","SU_A3":"DZA","BRK_DIFF":0,"NAME":"Algeria","NAME_LONG":"Algeria","BRK_A3":"DZA","BRK_NAME":"Algeria","BRK_GROUP":"","ABBREV":"Alg.","POSTAL":"DZ","FORMAL_EN":"People's Democratic Republic of Algeria","FORMAL_FR":"","NAME_CIAWF":"Algeria","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Algeria","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":1,"MAPCOLOR9":6,"MAPCOLOR13":3,"POP_EST":43053054,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":171091,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"3. Upper middle income","FIPS_10":"AG","ISO_A2":"DZ","ISO_A2_EH":"DZ","ISO_A3":"DZA","ISO_A3_EH":"DZA","ISO_N3":"012","ISO_N3_EH":"012","UN_A3":"012","WB_A2":"DZ","WB_A3":"DZA","WOE_ID":23424740,"WOE_ID_EH":23424740,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"DZA","ADM0_DIFF":"","ADM0_TLC":"DZA","ADM0_A3_US":"DZA","ADM0_A3_FR":"DZA","ADM0_A3_RU":"DZA","ADM0_A3_ES":"DZA","ADM0_A3_CN":"DZA","ADM0_A3_TW":"DZA","ADM0_A3_IN":"DZA","ADM0_A3_NP":"DZA","ADM0_A3_PK":"DZA","ADM0_A3_DE":"DZA","ADM0_A3_GB":"DZA","ADM0_A3_BR":"DZA","ADM0_A3_IL":"DZA","ADM0_A3_PS":"DZA","ADM0_A3_SA":"DZA","ADM0_A3_EG":"DZA","ADM0_A3_MA":"DZA","ADM0_A3_PT":"DZA","ADM0_A3_AR":"DZA","ADM0_A3_JP":"DZA","ADM0_A3_KO":"DZA","ADM0_A3_VN":"DZA","ADM0_A3_TR":"DZA","ADM0_A3_ID":"DZA","ADM0_A3_PL":"DZA","ADM0_A3_GR":"DZA","ADM0_A3_IT":"DZA","ADM0_A3_NL":"DZA","ADM0_A3_SE":"DZA","ADM0_A3_BD":"DZA","ADM0_A3_UA":"DZA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Africa","REGION_UN":"Africa","SUBREGION":"Northern Africa","REGION_WB":"Middle East & North Africa","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":2.5,"MAX_LABEL":7,"LABEL_X":2.808241,"LABEL_Y":27.397406,"NE_ID":1159320565,"WIKIDATAID":"Q262","NAME_AR":"الجزائر","NAME_BN":"আলজেরিয়া","NAME_DE":"Algerien","NAME_EN":"Algeria","NAME_ES":"Argelia","NAME_FA":"الجزایر","NAME_FR":"Algérie","NAME_EL":"Αλγερία","NAME_HE":"אלג'יריה","NAME_HI":"अल्जीरिया","NAME_HU":"Algéria","NAME_ID":"Aljazair","NAME_IT":"Algeria","NAME_JA":"アルジェリア","NAME_KO":"알제리","NAME_NL":"Algerije","NAME_PL":"Algieria","NAME_PT":"Argélia","NAME_RU":"Алжир","NAME_SV":"Algeriet","NAME_TR":"Cezayir","NAME_UK":"Алжир","NAME_UR":"الجزائر","NAME_VI":"Algérie","NAME_ZH":"阿尔及利亚","NAME_ZHT":"阿爾及利亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[19.342382812500006,41.869091796875],[19.44062500000001,41.424755859375],[19.39814453125001,40.28486328125],[19.851855468750017,40.0435546875],[20.001269531250017,39.709423828125],[20.65742187500001,40.1173828125],[21.031054687500017,40.658642578125],[20.964257812500023,40.849902343749996],[20.48896484375001,41.272607421874994],[20.566210937500017,41.873681640624994],[20.485449218750006,42.223388671875],[20.06396484375,42.547265624999994],[19.65449218750001,42.628564453124994],[19.280664062500023,42.17255859375],[19.342382812500006,41.869091796875]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":6,"SOVEREIGNT":"Albania","SOV_A3":"ALB","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Albania","ADM0_A3":"ALB","GEOU_DIF":0,"GEOUNIT":"Albania","GU_A3":"ALB","SU_DIF":0,"SUBUNIT":"Albania","SU_A3":"ALB","BRK_DIFF":0,"NAME":"Albania","NAME_LONG":"Albania","BRK_A3":"ALB","BRK_NAME":"Albania","BRK_GROUP":"","ABBREV":"Alb.","POSTAL":"AL","FORMAL_EN":"Republic of Albania","FORMAL_FR":"","NAME_CIAWF":"Albania","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Albania","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":4,"MAPCOLOR9":1,"MAPCOLOR13":6,"POP_EST":2854191,"POP_RANK":12,"POP_YEAR":2019,"GDP_MD":15279,"GDP_YEAR":2019,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"AL","ISO_A2":"AL","ISO_A2_EH":"AL","ISO_A3":"ALB","ISO_A3_EH":"ALB","ISO_N3":"008","ISO_N3_EH":"008","UN_A3":"008","WB_A2":"AL","WB_A3":"ALB","WOE_ID":23424742,"WOE_ID_EH":23424742,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ALB","ADM0_DIFF":"","ADM0_TLC":"ALB","ADM0_A3_US":"ALB","ADM0_A3_FR":"ALB","ADM0_A3_RU":"ALB","ADM0_A3_ES":"ALB","ADM0_A3_CN":"ALB","ADM0_A3_TW":"ALB","ADM0_A3_IN":"ALB","ADM0_A3_NP":"ALB","ADM0_A3_PK":"ALB","ADM0_A3_DE":"ALB","ADM0_A3_GB":"ALB","ADM0_A3_BR":"ALB","ADM0_A3_IL":"ALB","ADM0_A3_PS":"ALB","ADM0_A3_SA":"ALB","ADM0_A3_EG":"ALB","ADM0_A3_MA":"ALB","ADM0_A3_PT":"ALB","ADM0_A3_AR":"ALB","ADM0_A3_JP":"ALB","ADM0_A3_KO":"ALB","ADM0_A3_VN":"ALB","ADM0_A3_TR":"ALB","ADM0_A3_ID":"ALB","ADM0_A3_PL":"ALB","ADM0_A3_GR":"ALB","ADM0_A3_IT":"ALB","ADM0_A3_NL":"ALB","ADM0_A3_SE":"ALB","ADM0_A3_BD":"ALB","ADM0_A3_UA":"ALB","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Europe","REGION_UN":"Europe","SUBREGION":"Southern Europe","REGION_WB":"Europe & Central Asia","NAME_LEN":7,"LONG_LEN":7,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":20.11384,"LABEL_Y":40.654855,"NE_ID":1159320325,"WIKIDATAID":"Q222","NAME_AR":"ألبانيا","NAME_BN":"আলবেনিয়া","NAME_DE":"Albanien","NAME_EN":"Albania","NAME_ES":"Albania","NAME_FA":"آلبانی","NAME_FR":"Albanie","NAME_EL":"Αλβανία","NAME_HE":"אלבניה","NAME_HI":"अल्बानिया","NAME_HU":"Albánia","NAME_ID":"Albania","NAME_IT":"Albania","NAME_JA":"アルバニア","NAME_KO":"알바니아","NAME_NL":"Albanië","NAME_PL":"Albania","NAME_PT":"Albânia","NAME_RU":"Албания","NAME_SV":"Albanien","NAME_TR":"Arnavutluk","NAME_UK":"Албанія","NAME_UR":"البانیا","NAME_VI":"Albania","NAME_ZH":"阿尔巴尼亚","NAME_ZHT":"阿爾巴尼亞","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[66.52226562500002,37.348486328125],[65.76503906250002,37.569140624999996],[65.55498046875002,37.251171875],[64.81630859375002,37.132080078125],[64.51103515625002,36.340673828125],[63.86250000000001,36.012353515624994],[63.10859375000001,35.818701171875],[63.056640625,35.44580078125],[62.61054687500001,35.233154296875],[61.26201171875002,35.619580078125],[61.080078125,34.855615234374994],[60.48574218750002,34.094775390624996],[60.510839843750006,33.638916015625],[60.9169921875,33.505224609375],[60.560546875,33.137841796874994],[60.82929687500001,32.249414062499994],[60.854101562500006,31.483251953125],[61.66015625,31.382421875],[61.7841796875,30.831933593749994],[60.843359375000006,29.858691406249996],[62.4765625,29.408349609374994],[63.56757812500001,29.497998046874997],[64.09873046875,29.391943359375],[64.52109375,29.564501953124996],[65.09550781250002,29.559472656249994],[66.17705078125002,29.835595703124994],[66.39716796875001,30.91220703125],[66.92431640625,31.305615234374997],[67.28730468750001,31.217822265624996],[67.57822265625,31.506494140624994],[68.21396484375,31.807373046875],[68.86894531250002,31.634228515624997],[69.279296875,31.936816406249996],[69.24140625000001,32.433544921875],[69.5015625,33.020068359374996],[69.92011718750001,33.1125],[70.2841796875,33.369042968749994],[69.86806640625002,33.89765625],[71.05156250000002,34.049707031249994],[70.96562500000002,34.53037109375],[71.62050781250002,35.183007812499994],[71.42753906250002,35.833740234375],[71.18505859375,36.04208984375],[71.62050781250002,36.436474609375],[72.62285156250002,36.82958984375],[73.769140625,36.888476562499996],[74.00185546875002,36.823095703125],[74.54140625000002,37.02216796875],[74.89130859375001,37.231640625],[74.25966796875002,37.415429687499994],[73.749609375,37.231787109375],[73.48134765625002,37.4716796875],[72.8955078125,37.267529296875],[71.80205078125002,36.694287109375],[71.43291015625002,37.1275390625],[71.55195312500001,37.933154296874996],[71.255859375,38.306982421875],[70.87890625,38.456396484375],[70.21464843750002,37.9244140625],[70.25146484375,37.66416015625],[69.49208984375002,37.553076171875],[69.26484375000001,37.1083984375],[68.96044921875,37.325048828125],[68.06777343750002,36.9498046875],[67.75898437500001,37.172216796875],[67.06884765625,37.334814453125],[66.52226562500002,37.348486328125]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":3,"SOVEREIGNT":"Afghanistan","SOV_A3":"AFG","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Afghanistan","ADM0_A3":"AFG","GEOU_DIF":0,"GEOUNIT":"Afghanistan","GU_A3":"AFG","SU_DIF":0,"SUBUNIT":"Afghanistan","SU_A3":"AFG","BRK_DIFF":0,"NAME":"Afghanistan","NAME_LONG":"Afghanistan","BRK_A3":"AFG","BRK_NAME":"Afghanistan","BRK_GROUP":"","ABBREV":"Afg.","POSTAL":"AF","FORMAL_EN":"Islamic State of Afghanistan","FORMAL_FR":"","NAME_CIAWF":"Afghanistan","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Afghanistan","NAME_ALT":"","MAPCOLOR7":5,"MAPCOLOR8":6,"MAPCOLOR9":8,"MAPCOLOR13":7,"POP_EST":38041754,"POP_RANK":15,"POP_YEAR":2019,"GDP_MD":19291,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"5. Low income","FIPS_10":"AF","ISO_A2":"AF","ISO_A2_EH":"AF","ISO_A3":"AFG","ISO_A3_EH":"AFG","ISO_N3":"004","ISO_N3_EH":"004","UN_A3":"004","WB_A2":"AF","WB_A3":"AFG","WOE_ID":23424739,"WOE_ID_EH":23424739,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"AFG","ADM0_DIFF":"","ADM0_TLC":"AFG","ADM0_A3_US":"AFG","ADM0_A3_FR":"AFG","ADM0_A3_RU":"AFG","ADM0_A3_ES":"AFG","ADM0_A3_CN":"AFG","ADM0_A3_TW":"AFG","ADM0_A3_IN":"AFG","ADM0_A3_NP":"AFG","ADM0_A3_PK":"AFG","ADM0_A3_DE":"AFG","ADM0_A3_GB":"AFG","ADM0_A3_BR":"AFG","ADM0_A3_IL":"AFG","ADM0_A3_PS":"AFG","ADM0_A3_SA":"AFG","ADM0_A3_EG":"AFG","ADM0_A3_MA":"AFG","ADM0_A3_PT":"AFG","ADM0_A3_AR":"AFG","ADM0_A3_JP":"AFG","ADM0_A3_KO":"AFG","ADM0_A3_VN":"AFG","ADM0_A3_TR":"AFG","ADM0_A3_ID":"AFG","ADM0_A3_PL":"AFG","ADM0_A3_GR":"AFG","ADM0_A3_IT":"AFG","ADM0_A3_NL":"AFG","ADM0_A3_SE":"AFG","ADM0_A3_BD":"AFG","ADM0_A3_UA":"AFG","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":11,"LONG_LEN":11,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":3,"MAX_LABEL":7,"LABEL_X":66.496586,"LABEL_Y":34.164262,"NE_ID":1159320319,"WIKIDATAID":"Q889","NAME_AR":"أفغانستان","NAME_BN":"আফগানিস্তান","NAME_DE":"Afghanistan","NAME_EN":"Afghanistan","NAME_ES":"Afganistán","NAME_FA":"افغانستان","NAME_FR":"Afghanistan","NAME_EL":"Αφγανιστάν","NAME_HE":"אפגניסטן","NAME_HI":"अफ़्गानिस्तान","NAME_HU":"Afganisztán","NAME_ID":"Afganistan","NAME_IT":"Afghanistan","NAME_JA":"アフガニスタン","NAME_KO":"아프가니스탄","NAME_NL":"Afghanistan","NAME_PL":"Afganistan","NAME_PT":"Afeganistão","NAME_RU":"Афганистан","NAME_SV":"Afghanistan","NAME_TR":"Afganistan","NAME_UK":"Афганістан","NAME_UR":"افغانستان","NAME_VI":"Afghanistan","NAME_ZH":"阿富汗","NAME_ZHT":"阿富汗","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[77.04863281249999,35.109912109374996],[77.79941406250003,35.495898437500045],[77.44648437500001,35.4755859375],[76.76689453124999,35.66171875],[77.04863281249999,35.109912109374996]]]},"properties":{"featurecla":"Admin-0 country","scalerank":1,"LABELRANK":5,"SOVEREIGNT":"Kashmir","SOV_A3":"KAS","ADM0_DIF":0,"LEVEL":2,"TYPE":"Indeterminate","TLC":"","ADMIN":"Siachen Glacier","ADM0_A3":"KAS","GEOU_DIF":0,"GEOUNIT":"Siachen Glacier","GU_A3":"KAS","SU_DIF":0,"SUBUNIT":"Siachen Glacier","SU_A3":"KAS","BRK_DIFF":1,"NAME":"Siachen Glacier","NAME_LONG":"Siachen Glacier","BRK_A3":"B45","BRK_NAME":"Siachen Glacier","BRK_GROUP":"Jammu and Kashmir","ABBREV":"Siachen","POSTAL":"SG","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"","NOTE_BRK":"Claimed by Pakistan and India","NAME_SORT":"Kashmir","NAME_ALT":"","MAPCOLOR7":3,"MAPCOLOR8":7,"MAPCOLOR9":6,"MAPCOLOR13":-99,"POP_EST":6000,"POP_RANK":5,"POP_YEAR":2013,"GDP_MD":15,"GDP_YEAR":2013,"ECONOMY":"6. Developing region","INCOME_GRP":"4. Lower middle income","FIPS_10":"-99","ISO_A2":"-99","ISO_A2_EH":"-99","ISO_A3":"-99","ISO_A3_EH":"-99","ISO_N3":"-99","ISO_N3_EH":"-99","UN_A3":"-099","WB_A2":"-99","WB_A3":"-99","WOE_ID":23424928,"WOE_ID_EH":23424928,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"-99","ADM0_DIFF":"","ADM0_TLC":"-99","ADM0_A3_US":"B45","ADM0_A3_FR":"IND","ADM0_A3_RU":"IND","ADM0_A3_ES":"IND","ADM0_A3_CN":"IND","ADM0_A3_TW":"IND","ADM0_A3_IN":"IND","ADM0_A3_NP":"IND","ADM0_A3_PK":"PAK","ADM0_A3_DE":"IND","ADM0_A3_GB":"IND","ADM0_A3_BR":"IND","ADM0_A3_IL":"IND","ADM0_A3_PS":"IND","ADM0_A3_SA":"IND","ADM0_A3_EG":"IND","ADM0_A3_MA":"IND","ADM0_A3_PT":"IND","ADM0_A3_AR":"IND","ADM0_A3_JP":"IND","ADM0_A3_KO":"IND","ADM0_A3_VN":"IND","ADM0_A3_TR":"PAK","ADM0_A3_ID":"IND","ADM0_A3_PL":"IND","ADM0_A3_GR":"IND","ADM0_A3_IT":"IND","ADM0_A3_NL":"IND","ADM0_A3_SE":"IND","ADM0_A3_BD":"IND","ADM0_A3_UA":"IND","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Asia","REGION_UN":"Asia","SUBREGION":"Southern Asia","REGION_WB":"South Asia","NAME_LEN":15,"LONG_LEN":15,"ABBREV_LEN":7,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":5,"MIN_LABEL":6.5,"MAX_LABEL":9.5,"LABEL_X":77.129553,"LABEL_Y":35.340606,"NE_ID":1159320963,"WIKIDATAID":"Q333946","NAME_AR":"نهر سياتشن الجليدي","NAME_BN":"সিয়াচেন হিমবাহ","NAME_DE":"Siachen-Gletscher","NAME_EN":"Siachen Glacier","NAME_ES":"Glaciar de Siachen","NAME_FA":"یخچال سیاچن","NAME_FR":"glacier de Siachen","NAME_EL":"Παγετώνας Σιατσέν","NAME_HE":"קרחון סיאצ'ן","NAME_HI":"सियाचीन","NAME_HU":"Siachen-gleccser","NAME_ID":"Siachen Glacier","NAME_IT":"ghiacciaio Siachen","NAME_JA":"シアチェン氷河","NAME_KO":"시아첸 빙하","NAME_NL":"Siachengletsjer","NAME_PL":"Lodowiec Siachen","NAME_PT":"Glaciar de Siachen","NAME_RU":"Сиачен","NAME_SV":"Siachen Glaciären","NAME_TR":"Siachen Buzulu","NAME_UK":"Сіачен","NAME_UR":"سیاچن گلیشیر","NAME_VI":"Sông băng Siachen","NAME_ZH":"锡亚琴冰川","NAME_ZHT":"錫亞琴冰川","FCLASS_ISO":"Unrecognized","TLC_DIFF":"","FCLASS_TLC":"Unrecognized","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"Unrecognized","FCLASS_ES":"Unrecognized","FCLASS_CN":"","FCLASS_TW":"Unrecognized","FCLASS_IN":"Unrecognized","FCLASS_NP":"Unrecognized","FCLASS_PK":"Unrecognized","FCLASS_DE":"Unrecognized","FCLASS_GB":"Unrecognized","FCLASS_BR":"Unrecognized","FCLASS_IL":"Unrecognized","FCLASS_PS":"Unrecognized","FCLASS_SA":"Unrecognized","FCLASS_EG":"Unrecognized","FCLASS_MA":"Unrecognized","FCLASS_PT":"Unrecognized","FCLASS_AR":"Unrecognized","FCLASS_JP":"Unrecognized","FCLASS_KO":"Unrecognized","FCLASS_VN":"Unrecognized","FCLASS_TR":"Unrecognized","FCLASS_ID":"Unrecognized","FCLASS_PL":"Unrecognized","FCLASS_GR":"Unrecognized","FCLASS_IT":"Unrecognized","FCLASS_NL":"Unrecognized","FCLASS_SE":"Unrecognized","FCLASS_BD":"Unrecognized","FCLASS_UA":"Unrecognized"}}, +{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-57.020654296874994,-63.37285156250002],[-57.3896484375,-63.22626953125001],[-58.8720703125,-63.551855468750006],[-59.510156249999994,-63.82070312500002],[-60.864160156249994,-64.07343750000001],[-61.631787109375,-64.60468750000001],[-62.57622070312499,-64.75566406250002],[-64.038037109375,-65.17900390625002],[-64.06591796875,-65.5537109375],[-65.61728515624999,-66.13525390625],[-65.76640624999999,-66.62490234375002],[-66.37089843749999,-66.60888671875],[-67.493359375,-67.11279296875],[-67.58579101562499,-67.43515625],[-66.70498046875,-67.52714843750002],[-67.149853515625,-68.02460937500001],[-66.793359375,-68.24042968750001],[-67.39052734375,-68.86123046875002],[-66.97490234374999,-69.16103515625002],[-67.37177734375,-69.41230468750001],[-68.707958984375,-69.4322265625],[-68.4033203125,-70.01972656250001],[-67.88847656249999,-70.42167968750002],[-67.4603515625,-71.52675781250002],[-66.82773437499999,-72.0904296875],[-67.66708984374999,-72.8345703125],[-68.820947265625,-73.10546875],[-72.92919921875,-73.44794921875001],[-73.996044921875,-73.6998046875],[-75.29306640624999,-73.63876953125],[-77.134912109375,-73.81767578125002],[-76.85048828125,-73.46044921875],[-78.407861328125,-73.55576171875],[-79.521728515625,-73.08955078125001],[-80.44223632812499,-72.94453125000001],[-81.26240234375,-73.31494140625],[-81.308740234375,-73.73828125],[-82.18349609375,-73.85683593750002],[-84.981201171875,-73.50205078125],[-85.98076171874999,-73.20849609375],[-87.03793945312499,-73.35390625000002],[-88.419384765625,-73.22900390625],[-88.19453125,-72.85859375000001],[-90.29541015625,-72.97792968750002],[-90.92094726562499,-73.31914062500002],[-92.24101562499999,-73.17841796875001],[-94.24619140624999,-73.31298828125],[-96.15214843749999,-73.30927734375001],[-98.01240234375,-73.033203125],[-102.40927734374999,-72.98740234375],[-102.675048828125,-73.3208984375],[-100.02080078124999,-73.40253906250001],[-99.78110351562499,-73.72011718750002],[-100.98544921874999,-73.75722656250002],[-102.41064453125,-73.61640625000001],[-102.76645507812499,-73.8837890625],[-101.71542968749999,-74.02373046875002],[-101.251708984375,-74.48574218750002],[-98.557861328125,-75.18974609375002],[-101.03935546874999,-75.421875],[-101.70810546874999,-75.12734375000002],[-104.90185546875,-75.11513671875002],[-106.61884765625,-75.34394531250001],[-109.27216796875,-75.18505859375],[-111.463134765625,-75.1333984375],[-110.300439453125,-74.71064453125001],[-110.307080078125,-74.36669921875],[-111.80634765625,-74.26972656250001],[-111.696240234375,-74.79218750000001],[-113.9318359375,-74.98183593750002],[-113.50849609375,-74.0888671875],[-114.791015625,-73.98857421875002],[-115.10517578125,-74.455078125],[-118.342041015625,-74.38154296875001],[-119.677001953125,-74.65458984375002],[-123.88945312499999,-74.773046875],[-127.86337890625,-74.71923828125],[-129.7908203125,-74.89140625000002],[-132.049365234375,-74.76572265625],[-133.474853515625,-74.85185546875002],[-135.362060546875,-74.6904296875],[-136.54951171875,-75.13945312500002],[-137.6181640625,-75.07558593750002],[-139.691162109375,-75.21279296875002],[-141.505712890625,-75.6904296875],[-142.329833984375,-75.49091796875001],[-143.574267578125,-75.56357421875],[-146.3830078125,-76.09970703125],[-148.3203125,-76.1044921875],[-145.75048828125,-76.7490234375],[-145.9669921875,-77.06875000000002],[-149.717724609375,-77.7974609375],[-151.718994140625,-77.42587890625],[-153.460595703125,-77.416015625],[-154.81494140625,-77.126953125],[-158.21357421875,-77.15712890625002],[-158.500390625,-77.7783203125],[-157.266796875,-78.1998046875],[-155.34150390625,-78.1919921875],[-154.71640625,-78.39814453125001],[-156.4693359375,-78.6353515625],[-155.209912109375,-78.96484375],[-152.09140625,-79.24160156250002],[-148.176513671875,-79.77587890625],[-148.317138671875,-80.07099609375001],[-150.575390625,-80.35371093750001],[-148.12275390625,-80.90078125000002],[-156.52822265625,-81.16230468750001],[-157.03251953125,-81.31914062500002],[-153.956640625,-81.7001953125],[-154.717431640625,-81.94072265625002],[-153.00986328125,-82.44960937500002],[-155.459423828125,-82.98076171875002],[-157.6794921875,-83.1294921875],[-159.444384765625,-83.54316406250001],[-163.111083984375,-83.3291015625],[-168.41767578125,-83.22880859375002],[-171.8212890625,-82.84746093750002],[-174.065966796875,-82.90009765625001],[-169.16767578125,-83.4498046875],[-167.552880859375,-83.81083984375002],[-164.95087890625,-83.80585937500001],[-163.568505859375,-84.52871093750002],[-156.986328125,-84.8111328125],[-157.127490234375,-85.18564453125],[-162.9333984375,-84.90117187500002],[-171.703662109375,-84.54238281250002],[-180,-84.3515625],[-180,-85.05751953125002],[-180,-85.76337890625001],[-180,-86.4693359375],[-180,-87.17519531250002],[-180,-87.88105468750001],[-180,-88.58701171875],[-180,-89.29296875],[-180,-89.58291015625002],[-180,-89.99892578125002],[180,-89.99892578125002],[180,-84.3515625],[179.40302734375,-84.20615234375],[171.9171875,-83.64404296875],[168.11005859375,-83.36201171875001],[167.2326171875,-82.95234375000001],[162.82119140625002,-81.8662109375],[160.90781250000003,-81.390234375],[160.5421875,-80.42500000000001],[160.48271484375005,-79.20146484375002],[164.634765625,-78.60322265625001],[166.20859375000003,-78.45166015625],[164.4296875,-78.04218750000001],[162.76279296875003,-76.745703125],[162.81572265625005,-75.84619140625],[161.67958984375002,-75.2177734375],[162.53359375000002,-75.16708984375],[163.16738281250002,-74.60195312500002],[165.30283203125003,-74.59375],[164.77568359375005,-74.02851562500001],[167.61582031250003,-73.33681640625002],[169.54501953125003,-73.050390625],[169.82861328125,-72.72880859375002],[170.1623046875,-71.63046875],[168.17265625000005,-71.183203125],[167.56943359375003,-70.81025390625001],[166.626953125,-70.66425781250001],[164.40322265625002,-70.51044921875001],[163.34873046875003,-70.62089843750002],[162.6748046875,-70.30458984375002],[161.42451171875,-70.8267578125],[161.03701171875002,-70.31718750000002],[160.20966796875,-69.97490234375002],[159.78398437500005,-69.52187500000002],[158.15781250000003,-69.20888671875002],[157.48134765625002,-69.30869140625],[155.52031250000005,-69.0244140625],[154.19970703125,-68.41787109375002],[153.08183593750005,-68.85683593750002],[151.56210937500003,-68.69365234375002],[151.06826171875002,-68.38496093750001],[148.45625,-68.46699218750001],[146.79765625000005,-68.27363281250001],[146.82783203125,-67.96464843750002],[145.97519531250003,-67.62421875000001],[143.94199218750003,-67.79404296875],[144.62119140625003,-67.14140625000002],[143.4482421875,-66.87675781250002],[142.88837890625,-67.00009765625],[141.9728515625,-66.80673828125],[139.90009765625,-66.71513671875002],[137.75380859375002,-66.40644531250001],[136.19394531250003,-66.29218750000001],[135.35195312500002,-66.12714843750001],[134.97148437500005,-66.33017578125],[133.44453125,-66.08144531250002],[131.83085937500005,-66.23583984375],[130.95175781250003,-66.19140625],[129.7412109375,-66.46855468750002],[129.23691406250003,-67.0416015625],[127.54121093750001,-67.05107421875002],[126.66474609375001,-66.49755859375],[125.86562500000002,-66.36445312500001],[124.59785156250001,-66.70820312500001],[123.96933593750003,-66.60810546875001],[122.18281250000001,-66.85947265625],[121.48759765624999,-67.09072265625002],[119.13300781250001,-67.370703125],[118.138671875,-67.08242187500002],[116.71347656250003,-67.04716796875002],[114.02656250000001,-67.44121093750002],[113.9912109375,-67.2119140625],[115.27373046874999,-67.0279296875],[115.31035156249999,-66.56083984375002],[114.3369140625,-66.36015625000002],[113.70976562499999,-65.92958984375002],[113.09941406249999,-65.79990234375],[110.90673828125,-66.07666015625],[110.62226562500001,-66.5240234375],[109.46279296875002,-66.90869140625],[108.15791015625001,-66.63906250000002],[103.951171875,-65.98808593750002],[102.67421875000002,-65.86513671875002],[101.47441406249999,-65.951171875],[100.88906250000002,-66.3580078125],[99.3701171875,-66.64824218750002],[98.25761718749999,-66.46748046875001],[95.541015625,-66.63095703125],[94.83984375,-66.50136718750002],[93.96425781250002,-66.68964843750001],[92.07343750000001,-66.50791015625],[89.69843750000001,-66.82304687500002],[87.98027343749999,-66.78847656250002],[85.71074218749999,-67.16132812500001],[84.48515624999999,-67.11445312500001],[83.30429687500003,-67.60302734375],[82.01699218750002,-67.6900390625],[79.28779296875001,-68.11933593750001],[78.72626953125001,-68.27783203125],[77.81748046875003,-69.0689453125],[75.8912109375,-69.57558593750002],[75.423828125,-69.89306640625],[73.94218750000002,-69.7431640625],[72.82207031250002,-70.09589843750001],[72.7603515625,-70.39570312500001],[71.9048828125,-70.706640625],[71.27675781250002,-71.62392578125002],[69.5546875,-72.37451171875],[68.41982421875002,-72.51503906250002],[67.97138671875001,-73.08564453125001],[66.89208984375,-72.94863281250002],[67.4322265625,-72.0029296875],[68.03740234375002,-71.39101562500002],[68.87275390625001,-71.03515625],[69.25019531250001,-70.43105468750002],[67.94082031250002,-70.4228515625],[67.26796875000002,-70.27314453125001],[68.17812500000002,-69.83730468750002],[69.0826171875,-69.86660156250002],[68.90625,-69.37275390625001],[69.6294921875,-69.23164062500001],[69.5341796875,-68.7369140625],[69.98222656250002,-68.46425781250002],[69.41640625000002,-67.74296875000002],[68.32792968750002,-67.88955078125002],[63.69902343750002,-67.50830078125],[62.68789062500002,-67.64755859375],[60.482031250000006,-67.38515625000002],[59.25078125000002,-67.4849609375],[58.737402343750006,-67.22958984375],[57.62744140625,-67.01406250000002],[56.8916015625,-67.05625],[56.453222656250006,-66.77978515625],[57.18544921875002,-66.61328125],[55.71035156250002,-66.07998046875002],[54.947851562500006,-65.91630859375002],[53.67177734375002,-65.85869140625002],[51.88457031250002,-66.02001953125],[50.33242187500002,-66.44462890625002],[50.60595703125,-67.15019531250002],[49.2470703125,-66.94160156250001],[48.71367187500002,-67.21689453125],[48.648046875000006,-67.79404296875],[47.1171875,-67.57265625000002],[44.98955078125002,-67.76923828125001],[44.699804687500006,-67.904296875],[42.81953125000001,-68.12324218750001],[42.408789062500006,-68.35185546875002],[41.13271484375002,-68.57509765625002],[39.863867187500006,-68.96699218750001],[39.705078125,-69.42558593750002],[38.85927734375002,-70.00605468750001],[37.55976562500001,-69.718359375],[35.22480468750001,-69.6373046875],[34.19287109375,-68.70244140625002],[33.12148437500002,-68.68916015625001],[32.56757812500001,-69.07421875],[32.989355468750006,-69.62421875000001],[32.62128906250001,-70.0005859375],[31.378808593750023,-70.22578125000001],[30.003320312500023,-70.30000000000001],[27.206835937500017,-70.91093750000002],[25.97412109375,-71.03740234375002],[24.756738281250023,-70.89208984375],[23.803613281250023,-70.40458984375002],[22.97900390625,-70.81035156250002],[21.704980468750023,-70.25849609375001],[21.07080078125,-70.84345703125001],[19.26513671875,-70.90234375],[19.196386718750006,-70.29316406250001],[18.124609375000006,-70.54033203125002],[15.806933593750017,-70.32402343750002],[13.822656250000023,-70.34316406250002],[12.929394531250011,-70.21337890625],[11.701269531250006,-70.7666015625],[10.217675781250023,-70.50791015625],[9.1416015625,-70.18369140625],[8.523046875000006,-70.47382812500001],[5.113085937500017,-70.65566406250002],[2.6094726562500057,-70.90009765625001],[0.8349609375,-71.20234375000001],[-0.543164062499983,-71.71269531250002],[-0.8958496093749773,-71.34921875],[-2.81201171875,-71.32099609375001],[-5.950048828124977,-71.34160156250002],[-5.587890625,-70.85673828125002],[-5.936328124999989,-70.71269531250002],[-7.873486328124983,-70.94033203125002],[-7.713720703124977,-71.546484375],[-8.646484375,-71.67275390625002],[-9.230664062499983,-71.17402343750001],[-9.887988281249989,-71.02734375],[-10.825439453125,-71.5533203125],[-11.496972656249994,-72.41289062500002],[-13.208593749999977,-72.78505859375002],[-14.297753906249994,-72.7330078125],[-14.320996093749983,-73.123046875],[-15.595996093749989,-73.09677734375],[-16.51884765624999,-73.64404296875],[-15.748828124999989,-73.94560546875002],[-15.672509765624994,-74.40732421875],[-17.299023437499983,-74.33388671875002],[-19.493017578124977,-75.53994140625002],[-24.26958007812499,-75.76699218750002],[-26.059326171875,-75.95722656250001],[-28.93364257812499,-76.37031250000001],[-32.063378906249994,-77.15986328125001],[-34.075781250000006,-77.425390625],[-36.18085937499998,-78.468359375],[-36.239160156249994,-78.77421875000002],[-32.994238281250006,-79.22880859375002],[-30.31591796875,-79.1630859375],[-29.949316406250006,-79.59902343750002],[-25.258642578124977,-79.76250000000002],[-24.24028320312499,-80.06191406250002],[-29.3291015625,-80.17207031250001],[-35.327001953125006,-80.65068359375002],[-37.20927734374999,-81.06386718750002],[-38.771728515625,-80.88232421875],[-41.433837890625,-81.29775390625002],[-43.669335937499994,-82.2701171875],[-48.36079101562498,-81.89228515625001],[-53.986083984375,-82.20058593750002],[-57.35361328124999,-82.84023437500002],[-59.516015624999994,-83.45839843750002],[-61.58984375,-83.34121093750002],[-62.73564453124999,-82.52734375],[-65.91318359374999,-82.183203125],[-64.137109375,-81.86933593750001],[-64.750146484375,-81.52167968750001],[-70.23911132812499,-80.85664062500001],[-73.0294921875,-80.91728515625002],[-75.2365234375,-80.80263671875002],[-76.557861328125,-79.90351562500001],[-76.49912109374999,-79.32568359375],[-80.15117187499999,-79.26806640625],[-83.260009765625,-78.77421875000002],[-83.24589843749999,-78.35703125],[-80.29228515624999,-78.82275390625],[-77.869140625,-78.74550781250002],[-77.432568359375,-78.43466796875],[-81.44101562499999,-77.88564453125002],[-80.6015625,-77.751953125],[-74.81206054687499,-78.17783203125],[-73.25156249999999,-77.89423828125001],[-72.851953125,-77.59023437500002],[-75.3869140625,-77.47421875],[-76.24858398437499,-77.27490234375],[-77.19003906249999,-76.62978515625002],[-75.26835937499999,-76.58144531250002],[-71.79868164062499,-76.75273437500002],[-70.09550781249999,-76.65449218750001],[-69.30439453125,-76.35078125000001],[-66.37041015624999,-76.01337890625001],[-63.36337890624999,-75.45146484375002],[-63.924707031249994,-75.0044921875],[-62.22568359374999,-74.50556640625001],[-61.01079101562499,-74.47832031250002],[-60.878857421875,-73.61201171875001],[-61.40546875,-73.46708984375002],[-60.384667968749994,-73.00732421875],[-60.71943359375,-72.07265625000002],[-61.21357421875,-71.5640625],[-61.017236328124994,-71.16689453125002],[-61.961083984374994,-70.90058593750001],[-61.961083984374994,-70.1201171875],[-62.45053710937499,-69.58437500000002],[-63.455957031249994,-69.04189453125002],[-63.343505859375,-68.81044921875002],[-64.89829101562499,-68.67333984375],[-65.63950195312499,-68.13056640625001],[-65.443115234375,-67.326171875],[-64.819287109375,-67.30732421875001],[-64.686279296875,-66.80625],[-64.07773437499999,-66.65410156250002],[-63.75253906249999,-66.27773437500002],[-61.875439453125,-66.29609375000001],[-62.30502929687499,-65.8404296875],[-62.14531249999999,-65.33173828125001],[-61.73618164062499,-65.03349609375002],[-61.05986328124999,-64.98125000000002],[-59.9630859375,-64.43134765625001],[-58.895458984375,-64.38886718750001],[-58.26298828124999,-63.76337890625001],[-57.020654296874994,-63.37285156250002]]],[[[-45.22265625,-78.81074218750001],[-43.94721679687498,-78.59755859375002],[-43.80859375,-78.28652343750002],[-45.5302734375,-77.8814453125],[-46.82568359375,-77.78525390625],[-49.08124999999998,-78.0474609375],[-50.219628906249994,-78.60527343750002],[-50.733056640624994,-79.28271484375],[-50.339257812499994,-79.4794921875],[-52.29716796874999,-80.1412109375],[-53.482324218749994,-80.18896484375],[-54.162499999999994,-80.8701171875],[-49.773046875000006,-80.7841796875],[-49.1875,-80.64277343750001],[-43.527929687500006,-80.19140625],[-42.96538085937499,-79.47705078125],[-43.722070312499994,-78.81845703125],[-45.22265625,-78.81074218750001]]],[[[-59.73393554687499,-80.34414062500002],[-59.70634765624999,-79.87529296875002],[-61.34311523437499,-79.88681640625],[-62.518798828125,-80.37333984375002],[-65.98007812499999,-80.38447265625001],[-64.26826171875,-80.74853515625],[-60.58281249999999,-80.94814453125002],[-59.73393554687499,-80.34414062500002]]],[[[-70.05112304687499,-69.1890625],[-70.4169921875,-68.78896484375002],[-71.86899414062499,-68.941015625],[-71.85361328124999,-69.9693359375],[-70.328076171875,-70.36123046875002],[-71.06108398437499,-70.537109375],[-71.19404296875,-70.98476562500002],[-72.62158203125,-71.38837890625001],[-74.18720703125,-71.38300781250001],[-75.29257812499999,-71.61494140625001],[-75.35307617187499,-71.87841796875],[-73.89926757812499,-72.15234375],[-72.41220703124999,-71.66230468750001],[-71.106640625,-72.04707031250001],[-73.086376953125,-72.4078125],[-72.36748046874999,-72.66972656250002],[-69.20932617187499,-72.5341796875],[-68.24101562499999,-71.82216796875002],[-68.33598632812499,-70.8560546875],[-69.416943359375,-69.58320312500001],[-70.05112304687499,-69.1890625]]],[[[-98.09111328124999,-71.91250000000002],[-98.6154296875,-71.76376953125],[-102.128125,-71.98544921875],[-102.264794921875,-72.13525390625],[-100.19521484375,-72.27265625000001],[-98.40781249999999,-72.54765625000002],[-96.0517578125,-72.57724609375],[-95.609375,-72.06845703125],[-96.86943359374999,-71.85097656250002],[-98.09111328124999,-71.91250000000002]]],[[[-120.55625,-73.75605468750001],[-123.112158203125,-73.6822265625],[-122.62470703125,-73.96552734375001],[-122.85908203125,-74.34267578125002],[-121.06240234375,-74.33730468750002],[-120.2724609375,-73.98916015625002],[-120.55625,-73.75605468750001]]],[[[-126.32988281249999,-73.28623046875],[-127.41435546874999,-73.51630859375001],[-124.872998046875,-74.20830078125002],[-124.993408203125,-73.82978515625001],[-126.32988281249999,-73.28623046875]]],[[[-159.0529296875,-79.80742187500002],[-159.68408203125,-79.40244140625],[-161.64296875,-78.9009765625],[-163.256103515625,-78.72207031250002],[-164.22578125,-79.32080078125],[-161.86552734375,-79.70351562500002],[-159.0529296875,-79.80742187500002]]],[[[-70.33408203124999,-79.67988281250001],[-69.25087890625,-79.21035156250002],[-66.72807617187499,-78.38369140625002],[-67.478515625,-78.36250000000001],[-70.54399414062499,-78.88369140625002],[-71.78354492187499,-79.4443359375],[-70.33408203124999,-79.67988281250001]]],[[[-67.9884765625,-67.47441406250002],[-67.68784179687499,-67.14736328125002],[-68.3359375,-66.80205078125002],[-69.082421875,-67.40312500000002],[-68.58041992187499,-67.73281250000002],[-67.9884765625,-67.47441406250002]]],[[[-73.70664062499999,-70.63515625000002],[-75.007470703125,-70.60888671875],[-76.500244140625,-70.94140625],[-76.17631835937499,-71.132421875],[-74.205029296875,-70.92412109375002],[-73.70664062499999,-70.63515625000002]]],[[[-74.98710937499999,-69.72783203125002],[-75.7267578125,-70.09609375000002],[-74.848828125,-70.179296875],[-74.98710937499999,-69.72783203125002]]],[[[-74.354443359375,-73.09843750000002],[-75.37685546875,-72.82041015625],[-75.900830078125,-73.3326171875],[-74.574658203125,-73.611328125],[-74.354443359375,-73.09843750000002]]],[[[-91.16069335937499,-73.1822265625],[-90.80712890625,-72.61064453125002],[-91.67001953124999,-72.62373046875001],[-91.16069335937499,-73.1822265625]]]]},"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":4,"SOVEREIGNT":"Antarctica","SOV_A3":"ATA","ADM0_DIF":0,"LEVEL":2,"TYPE":"Indeterminate","TLC":"1","ADMIN":"Antarctica","ADM0_A3":"ATA","GEOU_DIF":0,"GEOUNIT":"Antarctica","GU_A3":"ATA","SU_DIF":0,"SUBUNIT":"Antarctica","SU_A3":"ATA","BRK_DIFF":0,"NAME":"Antarctica","NAME_LONG":"Antarctica","BRK_A3":"ATA","BRK_NAME":"Antarctica","BRK_GROUP":"","ABBREV":"Ant.","POSTAL":"AQ","FORMAL_EN":"","FORMAL_FR":"","NAME_CIAWF":"","NOTE_ADM0":"By treaty","NOTE_BRK":"Multiple claims held in abeyance by treaty","NAME_SORT":"Antarctica","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":5,"MAPCOLOR9":1,"MAPCOLOR13":-99,"POP_EST":4490,"POP_RANK":4,"POP_YEAR":2019,"GDP_MD":898,"GDP_YEAR":2013,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"AY","ISO_A2":"AQ","ISO_A2_EH":"AQ","ISO_A3":"ATA","ISO_A3_EH":"ATA","ISO_N3":"010","ISO_N3_EH":"010","UN_A3":"010","WB_A2":"-99","WB_A3":"-99","WOE_ID":28289409,"WOE_ID_EH":28289409,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"ATA","ADM0_DIFF":"","ADM0_TLC":"ATA","ADM0_A3_US":"ATA","ADM0_A3_FR":"ATA","ADM0_A3_RU":"ATA","ADM0_A3_ES":"ATA","ADM0_A3_CN":"ATA","ADM0_A3_TW":"ATA","ADM0_A3_IN":"ATA","ADM0_A3_NP":"ATA","ADM0_A3_PK":"ATA","ADM0_A3_DE":"ATA","ADM0_A3_GB":"ATA","ADM0_A3_BR":"ATA","ADM0_A3_IL":"ATA","ADM0_A3_PS":"ATA","ADM0_A3_SA":"ATA","ADM0_A3_EG":"ATA","ADM0_A3_MA":"ATA","ADM0_A3_PT":"ATA","ADM0_A3_AR":"ATA","ADM0_A3_JP":"ATA","ADM0_A3_KO":"ATA","ADM0_A3_VN":"ATA","ADM0_A3_TR":"ATA","ADM0_A3_ID":"ATA","ADM0_A3_PL":"ATA","ADM0_A3_GR":"ATA","ADM0_A3_IT":"ATA","ADM0_A3_NL":"ATA","ADM0_A3_SE":"ATA","ADM0_A3_BD":"ATA","ADM0_A3_UA":"ATA","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Antarctica","REGION_UN":"Antarctica","SUBREGION":"Antarctica","REGION_WB":"Antarctica","NAME_LEN":10,"LONG_LEN":10,"ABBREV_LEN":4,"TINY":-99,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":4,"MAX_LABEL":9,"LABEL_X":35.885455,"LABEL_Y":-79.843222,"NE_ID":1159320335,"WIKIDATAID":"Q51","NAME_AR":"القارة القطبية الجنوبية","NAME_BN":"অ্যান্টার্কটিকা","NAME_DE":"Antarktika","NAME_EN":"Antarctica","NAME_ES":"Antártida","NAME_FA":"جنوبگان","NAME_FR":"Antarctique","NAME_EL":"Ανταρκτική","NAME_HE":"אנטארקטיקה","NAME_HI":"अंटार्कटिका","NAME_HU":"Antarktika","NAME_ID":"Antartika","NAME_IT":"Antartide","NAME_JA":"南極大陸","NAME_KO":"남극","NAME_NL":"Antarctica","NAME_PL":"Antarktyda","NAME_PT":"Antártida","NAME_RU":"Антарктида","NAME_SV":"Antarktis","NAME_TR":"Antarktika","NAME_UK":"Антарктида","NAME_UR":"انٹارکٹکا","NAME_VI":"Châu Nam Cực","NAME_ZH":"南极洲","NAME_ZHT":"南極洲","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":3,"LABELRANK":6,"SOVEREIGNT":"Netherlands","SOV_A3":"NL1","ADM0_DIF":1,"LEVEL":2,"TYPE":"Country","TLC":"1","ADMIN":"Sint Maarten","ADM0_A3":"SXM","GEOU_DIF":0,"GEOUNIT":"Sint Maarten","GU_A3":"SXM","SU_DIF":0,"SUBUNIT":"Sint Maarten","SU_A3":"SXM","BRK_DIFF":0,"NAME":"Sint Maarten","NAME_LONG":"Sint Maarten","BRK_A3":"SXM","BRK_NAME":"Sint Maarten","BRK_GROUP":"","ABBREV":"St. M.","POSTAL":"SX","FORMAL_EN":"Sint Maarten (Dutch part)","FORMAL_FR":"","NAME_CIAWF":"Sint Maarten","NOTE_ADM0":"Neth.","NOTE_BRK":"","NAME_SORT":"St. Maarten (Dutch part)","NAME_ALT":"","MAPCOLOR7":4,"MAPCOLOR8":2,"MAPCOLOR9":2,"MAPCOLOR13":9,"POP_EST":40733,"POP_RANK":7,"POP_YEAR":2019,"GDP_MD":1185,"GDP_YEAR":2018,"ECONOMY":"6. Developing region","INCOME_GRP":"2. High income: nonOECD","FIPS_10":"NT","ISO_A2":"SX","ISO_A2_EH":"SX","ISO_A3":"SXM","ISO_A3_EH":"SXM","ISO_N3":"534","ISO_N3_EH":"534","UN_A3":"534","WB_A2":"SX","WB_A3":"SXM","WOE_ID":-90,"WOE_ID_EH":23425000,"WOE_NOTE":"Expired subunits of Netherlands Antilles (23424914).","ADM0_ISO":"SXM","ADM0_DIFF":"","ADM0_TLC":"SXM","ADM0_A3_US":"SXM","ADM0_A3_FR":"SXM","ADM0_A3_RU":"SXM","ADM0_A3_ES":"SXM","ADM0_A3_CN":"SXM","ADM0_A3_TW":"SXM","ADM0_A3_IN":"SXM","ADM0_A3_NP":"SXM","ADM0_A3_PK":"SXM","ADM0_A3_DE":"SXM","ADM0_A3_GB":"SXM","ADM0_A3_BR":"SXM","ADM0_A3_IL":"SXM","ADM0_A3_PS":"SXM","ADM0_A3_SA":"SXM","ADM0_A3_EG":"SXM","ADM0_A3_MA":"SXM","ADM0_A3_PT":"SXM","ADM0_A3_AR":"SXM","ADM0_A3_JP":"SXM","ADM0_A3_KO":"SXM","ADM0_A3_VN":"SXM","ADM0_A3_TR":"SXM","ADM0_A3_ID":"SXM","ADM0_A3_PL":"SXM","ADM0_A3_GR":"SXM","ADM0_A3_IT":"SXM","ADM0_A3_NL":"SXM","ADM0_A3_SE":"SXM","ADM0_A3_BD":"SXM","ADM0_A3_UA":"SXM","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"North America","REGION_UN":"Americas","SUBREGION":"Caribbean","REGION_WB":"Latin America & Caribbean","NAME_LEN":12,"LONG_LEN":12,"ABBREV_LEN":6,"TINY":4,"HOMEPART":-99,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":-63.070133,"LABEL_Y":18.04088,"NE_ID":1159321103,"WIKIDATAID":"Q26273","NAME_AR":"سينت مارتن","NAME_BN":"সিন্ট মার্টেন","NAME_DE":"Sint Maarten","NAME_EN":"Sint Maarten","NAME_ES":"San Martín","NAME_FA":"سینت مارتن","NAME_FR":"Saint-Martin","NAME_EL":"Άγιος Μαρτίνος","NAME_HE":"סנט מארטן","NAME_HI":"सिंट मार्टेन","NAME_HU":"Sint Maarten","NAME_ID":"Sint Maarten","NAME_IT":"Sint Maarten","NAME_JA":"シント・マールテン","NAME_KO":"신트마르턴","NAME_NL":"Sint Maarten","NAME_PL":"Sint Maarten","NAME_PT":"São Martinho","NAME_RU":"Синт-Мартен","NAME_SV":"Sint Maarten","NAME_TR":"Sint Maarten","NAME_UK":"Сінт-Мартен","NAME_UR":"سنٹ مارٹن","NAME_VI":"Sint Maarten","NAME_ZH":"荷属圣马丁","NAME_ZHT":"荷屬聖馬丁","FCLASS_ISO":"Admin-0 dependency","TLC_DIFF":"","FCLASS_TLC":"Admin-0 dependency","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}}, +{"type":"Feature","geometry":null,"properties":{"featurecla":"Admin-0 country","scalerank":5,"LABELRANK":6,"SOVEREIGNT":"Tuvalu","SOV_A3":"TUV","ADM0_DIF":0,"LEVEL":2,"TYPE":"Sovereign country","TLC":"1","ADMIN":"Tuvalu","ADM0_A3":"TUV","GEOU_DIF":0,"GEOUNIT":"Tuvalu","GU_A3":"TUV","SU_DIF":0,"SUBUNIT":"Tuvalu","SU_A3":"TUV","BRK_DIFF":0,"NAME":"Tuvalu","NAME_LONG":"Tuvalu","BRK_A3":"TUV","BRK_NAME":"Tuvalu","BRK_GROUP":"","ABBREV":"Tuv.","POSTAL":"TV","FORMAL_EN":"Tuvalu","FORMAL_FR":"","NAME_CIAWF":"Tuvalu","NOTE_ADM0":"","NOTE_BRK":"","NAME_SORT":"Tuvalu","NAME_ALT":"","MAPCOLOR7":1,"MAPCOLOR8":3,"MAPCOLOR9":8,"MAPCOLOR13":5,"POP_EST":11646,"POP_RANK":6,"POP_YEAR":2019,"GDP_MD":47,"GDP_YEAR":2019,"ECONOMY":"7. Least developed region","INCOME_GRP":"3. Upper middle income","FIPS_10":"TV","ISO_A2":"TV","ISO_A2_EH":"TV","ISO_A3":"TUV","ISO_A3_EH":"TUV","ISO_N3":"798","ISO_N3_EH":"798","UN_A3":"798","WB_A2":"TV","WB_A3":"TUV","WOE_ID":23424970,"WOE_ID_EH":23424970,"WOE_NOTE":"Exact WOE match as country","ADM0_ISO":"TUV","ADM0_DIFF":"","ADM0_TLC":"TUV","ADM0_A3_US":"TUV","ADM0_A3_FR":"TUV","ADM0_A3_RU":"TUV","ADM0_A3_ES":"TUV","ADM0_A3_CN":"TUV","ADM0_A3_TW":"TUV","ADM0_A3_IN":"TUV","ADM0_A3_NP":"TUV","ADM0_A3_PK":"TUV","ADM0_A3_DE":"TUV","ADM0_A3_GB":"TUV","ADM0_A3_BR":"TUV","ADM0_A3_IL":"TUV","ADM0_A3_PS":"TUV","ADM0_A3_SA":"TUV","ADM0_A3_EG":"TUV","ADM0_A3_MA":"TUV","ADM0_A3_PT":"TUV","ADM0_A3_AR":"TUV","ADM0_A3_JP":"TUV","ADM0_A3_KO":"TUV","ADM0_A3_VN":"TUV","ADM0_A3_TR":"TUV","ADM0_A3_ID":"TUV","ADM0_A3_PL":"TUV","ADM0_A3_GR":"TUV","ADM0_A3_IT":"TUV","ADM0_A3_NL":"TUV","ADM0_A3_SE":"TUV","ADM0_A3_BD":"TUV","ADM0_A3_UA":"TUV","ADM0_A3_UN":-99,"ADM0_A3_WB":-99,"CONTINENT":"Oceania","REGION_UN":"Oceania","SUBREGION":"Polynesia","REGION_WB":"East Asia & Pacific","NAME_LEN":6,"LONG_LEN":6,"ABBREV_LEN":4,"TINY":5,"HOMEPART":1,"MIN_ZOOM":0,"MIN_LABEL":5,"MAX_LABEL":10,"LABEL_X":179.209587,"LABEL_Y":-8.513717,"NE_ID":1159321333,"WIKIDATAID":"Q672","NAME_AR":"توفالو","NAME_BN":"টুভালু","NAME_DE":"Tuvalu","NAME_EN":"Tuvalu","NAME_ES":"Tuvalu","NAME_FA":"تووالو","NAME_FR":"Tuvalu","NAME_EL":"Τουβαλού","NAME_HE":"טובאלו","NAME_HI":"तुवालू","NAME_HU":"Tuvalu","NAME_ID":"Tuvalu","NAME_IT":"Tuvalu","NAME_JA":"ツバル","NAME_KO":"투발루","NAME_NL":"Tuvalu","NAME_PL":"Tuvalu","NAME_PT":"Tuvalu","NAME_RU":"Тувалу","NAME_SV":"Tuvalu","NAME_TR":"Tuvalu","NAME_UK":"Тувалу","NAME_UR":"تووالو","NAME_VI":"Tuvalu","NAME_ZH":"图瓦卢","NAME_ZHT":"吐瓦魯","FCLASS_ISO":"Admin-0 country","TLC_DIFF":"","FCLASS_TLC":"Admin-0 country","FCLASS_US":"","FCLASS_FR":"","FCLASS_RU":"","FCLASS_ES":"","FCLASS_CN":"","FCLASS_TW":"","FCLASS_IN":"","FCLASS_NP":"","FCLASS_PK":"","FCLASS_DE":"","FCLASS_GB":"","FCLASS_BR":"","FCLASS_IL":"","FCLASS_PS":"","FCLASS_SA":"","FCLASS_EG":"","FCLASS_MA":"","FCLASS_PT":"","FCLASS_AR":"","FCLASS_JP":"","FCLASS_KO":"","FCLASS_VN":"","FCLASS_TR":"","FCLASS_ID":"","FCLASS_PL":"","FCLASS_GR":"","FCLASS_IT":"","FCLASS_NL":"","FCLASS_SE":"","FCLASS_BD":"","FCLASS_UA":""}} +]} \ No newline at end of file diff --git a/assets/images/earth-map.jpg b/assets/images/earth-map.jpg new file mode 100644 index 0000000..4275ab0 Binary files /dev/null and b/assets/images/earth-map.jpg differ diff --git a/assets/images/earth-topography.jpg b/assets/images/earth-topography.jpg new file mode 100644 index 0000000..3e2b0fb Binary files /dev/null and b/assets/images/earth-topography.jpg differ diff --git a/backend/src/lib/app-region.ts b/backend/src/lib/app-region.ts new file mode 100644 index 0000000..1161db1 --- /dev/null +++ b/backend/src/lib/app-region.ts @@ -0,0 +1,45 @@ +export const NORTH_AMERICA = "North America"; +export const SOUTH_AMERICA = "South America"; + +/** Fallback when legacy cache entries lack subregion. */ +const SOUTH_AMERICA_COUNTRY_NAMES = new Set([ + "Argentina", + "Bolivia", + "Brazil", + "Chile", + "Colombia", + "Ecuador", + "Falkland Islands", + "French Guiana", + "Guyana", + "Paraguay", + "Peru", + "Suriname", + "Uruguay", + "Venezuela", +]); + +/** Maps REST Countries Americas (+ subregion) to North or South America. */ +export function normalizeAppRegion( + region: string, + subregion?: string | null, + countryName?: string, +): string { + if (region === NORTH_AMERICA || region === SOUTH_AMERICA) return region; + if (region !== "Americas") return region; + + if (subregion === SOUTH_AMERICA) return SOUTH_AMERICA; + if ( + subregion === NORTH_AMERICA || + subregion === "Central America" || + subregion === "Caribbean" + ) { + return NORTH_AMERICA; + } + + if (countryName && SOUTH_AMERICA_COUNTRY_NAMES.has(countryName)) { + return SOUTH_AMERICA; + } + + return NORTH_AMERICA; +} diff --git a/backend/src/services/country.service.ts b/backend/src/services/country.service.ts index fc5d43d..54dd235 100644 --- a/backend/src/services/country.service.ts +++ b/backend/src/services/country.service.ts @@ -1,4 +1,5 @@ import { env } from "../config/env.js"; +import { normalizeAppRegion } from "../lib/app-region.js"; import { flagCdnUrlFromIso2 } from "../lib/flag-url.js"; import { fetchJson, HttpError } from "../lib/http.js"; import type { CountryBasic } from "../types/country.js"; @@ -12,6 +13,7 @@ type RestCountry = { name?: { common?: string }; capital?: string[]; region?: string; + subregion?: string; population?: number; cca2?: string; latlng?: number[]; @@ -28,10 +30,12 @@ function normalizeCountry(raw: RestCountry): CountryBasic | null { const cca2 = raw.cca2?.trim().toUpperCase(); if (!cca2 || cca2.length !== 2) return null; + const apiRegion = raw.region ?? "Unknown"; + return { name, capital: raw.capital?.[0] ?? "N/A", - region: raw.region ?? "Unknown", + region: normalizeAppRegion(apiRegion, raw.subregion, name), population: raw.population ?? 0, cca2, flag: flagCdnUrlFromIso2(cca2), @@ -72,7 +76,7 @@ async function fetchCountryFromApi(name: string): Promise { } async function fetchAllCountriesFromApi(): Promise { - const url = `${env.restCountriesBaseUrl}/all?fields=name,capital,region,population,cca2,latlng`; + const url = `${env.restCountriesBaseUrl}/all?fields=name,capital,region,subregion,population,cca2,latlng`; const data = await fetchJson(url); return normalizeMany(data); } diff --git a/components/bottom-tab-bar.tsx b/components/bottom-tab-bar.tsx index f155d22..788577e 100644 --- a/components/bottom-tab-bar.tsx +++ b/components/bottom-tab-bar.tsx @@ -1,6 +1,10 @@ -import { Entypo, Ionicons } from "@expo/vector-icons"; -import type { BottomTabBarProps } from "@react-navigation/bottom-tabs"; +import { Ionicons } from "@expo/vector-icons"; +import { + BottomTabBarHeightCallbackContext, + type BottomTabBarProps, +} from "@react-navigation/bottom-tabs"; import * as Haptics from "expo-haptics"; +import { useContext } from "react"; import { Pressable, StyleSheet, Text, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; @@ -9,31 +13,15 @@ const TAB_ACTIVE = "#fbbf24"; const TAB_INACTIVE = "#94a3b8"; type IoniconsName = keyof typeof Ionicons.glyphMap; -type EntypoName = keyof typeof Entypo.glyphMap; -type RegularTabItem = { +type TabItem = { routeName: string; label: string; icon: IoniconsName; iconFocused: IoniconsName; }; -type CenterTabItem = { - routeName: string; - icon: EntypoName; - iconFocused: EntypoName; - isCenter: true; -}; - -type TabItem = RegularTabItem | CenterTabItem; - const TAB_ITEMS: TabItem[] = [ - { - routeName: "index", - label: "Home", - icon: "home-outline", - iconFocused: "home", - }, { routeName: "explore", label: "Explore", @@ -42,15 +30,15 @@ const TAB_ITEMS: TabItem[] = [ }, { routeName: "map", - icon: "globe", + label: "Map", + icon: "globe-outline", iconFocused: "globe", - isCenter: true, }, { - routeName: "saved", - label: "Saved", - icon: "bookmark-outline", - iconFocused: "bookmark", + routeName: "index", + label: "Home", + icon: "home-outline", + iconFocused: "home", }, { routeName: "profile", @@ -62,6 +50,7 @@ const TAB_ITEMS: TabItem[] = [ export function BottomTabBar({ state, navigation }: BottomTabBarProps) { const insets = useSafeAreaInsets(); + const onTabBarHeightChange = useContext(BottomTabBarHeightCallbackContext); const handlePress = ( route: (typeof state.routes)[number], @@ -80,7 +69,12 @@ export function BottomTabBar({ state, navigation }: BottomTabBarProps) { }; return ( - + { + onTabBarHeightChange?.(event.nativeEvent.layout.height); + }} + > {TAB_ITEMS.map((item) => { const route = state.routes.find((r) => r.name === item.routeName); @@ -90,38 +84,13 @@ export function BottomTabBar({ state, navigation }: BottomTabBarProps) { const isFocused = state.index === routeIndex; const color = isFocused ? TAB_ACTIVE : TAB_INACTIVE; - const onPress = () => handlePress(route, isFocused); - - if ("isCenter" in item) { - return ( - - - - - - ); - } - return ( handlePress(route, isFocused)} style={styles.tab} > - {item.label ? ( - {item.label} - ) : null} + {item.label} ); })} @@ -143,7 +110,6 @@ export function BottomTabBar({ state, navigation }: BottomTabBarProps) { const styles = StyleSheet.create({ shell: { backgroundColor: TAB_BAR_BG, - overflow: "visible", }, bar: { flexDirection: "row", @@ -152,8 +118,8 @@ const styles = StyleSheet.create({ backgroundColor: TAB_BAR_BG, borderTopLeftRadius: 20, borderTopRightRadius: 20, - paddingTop: 4, - // paddingBottom: 6, + paddingTop: 6, + paddingBottom: 4, paddingHorizontal: 8, shadowColor: "#000", shadowOffset: { width: 0, height: -4 }, @@ -166,40 +132,11 @@ const styles = StyleSheet.create({ alignItems: "center", justifyContent: "center", gap: 2, - minHeight: 40, - paddingBottom: 0, + minHeight: 52, + paddingTop: 2, }, label: { fontSize: 11, fontFamily: "Poppins-Medium", }, - focusedGlow: { - borderWidth: 1, - borderColor: "rgba(251, 191, 36, 0.5)", - shadowColor: TAB_ACTIVE, - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.4, - shadowRadius: 8, - elevation: 10, - }, - centerSlot: { - flex: 1, - alignItems: "center", - justifyContent: "center", - }, - centerButton: { - width: 52, - height: 52, - borderRadius: 32, - alignItems: "center", - justifyContent: "center", - backgroundColor: "#1a2332", - borderWidth: 1, - borderColor: "rgba(255, 255, 255, 0.12)", - shadowColor: "#000", - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.35, - shadowRadius: 8, - elevation: 10, - }, }); diff --git a/components/explore/explore-action-rail.tsx b/components/explore/explore-action-rail.tsx index f7c0170..84538a9 100644 --- a/components/explore/explore-action-rail.tsx +++ b/components/explore/explore-action-rail.tsx @@ -1,7 +1,24 @@ -import { Ionicons } from "@expo/vector-icons"; -import { Alert, Pressable, Share, StyleSheet, Text, View } from "react-native"; +import { router } from "expo-router"; +import { useState } from "react"; +import { + Alert, + Modal, + Pressable, + Share, + StyleSheet, + Text, + View, +} from "react-native"; import { GlassIconButton } from "@/components/explore/glass-icon-button"; +import { + DEFAULT_FEED_SORT_FIELD, + DEFAULT_FEED_SORT_ORDER, + type FeedSortField, + type FeedSortOrder, + useCountryFeedStore, +} from "@/store/use-country-feed-store"; +import { focusCountryOnMap } from "@/lib/open-country-on-map"; import { useSavedCountriesStore } from "@/store/use-saved-countries-store"; import type { Country } from "@/types/country"; @@ -9,10 +26,109 @@ type ExploreActionRailProps = { country: Country; }; +function getOrderLabels(field: FeedSortField): { asc: string; desc: string } { + if (field === "population") { + return { asc: "Low → High", desc: "High → Low" }; + } + return { asc: "A → Z", desc: "Z → A" }; +} + +type SortRadioOptionProps = { + label: string; + selected: boolean; + disabled?: boolean; + onPress: () => void; +}; + +function SortRadioOption({ + label, + selected, + disabled = false, + onPress, +}: SortRadioOptionProps) { + return ( + [ + styles.radioRow, + disabled && styles.radioRowDisabled, + pressed && !disabled && styles.pressed, + ]} + > + + {selected && !disabled ? : null} + + + {label} + + + ); +} + +type SortCheckboxOptionProps = { + label: string; + checked: boolean; + onPress: () => void; +}; + +function SortCheckboxOption({ label, checked, onPress }: SortCheckboxOptionProps) { + return ( + [styles.radioRow, pressed && styles.pressed]} + > + + {checked ? : null} + + + {label} + + + ); +} + export function ExploreActionRail({ country }: ExploreActionRailProps) { const toggleSaved = useSavedCountriesStore((s) => s.toggleSaved); const isSaved = useSavedCountriesStore((s) => s.isSaved(country.name)); + const sortField = useCountryFeedStore((s) => s.sortField); + const sortOrder = useCountryFeedStore((s) => s.sortOrder); + const setSort = useCountryFeedStore((s) => s.setSort); const saved = isSaved; + const [isSortModalOpen, setIsSortModalOpen] = useState(false); + const [draftRandom, setDraftRandom] = useState(false); + const [draftField, setDraftField] = useState( + sortField ?? DEFAULT_FEED_SORT_FIELD, + ); + const [draftOrder, setDraftOrder] = useState( + sortOrder ?? DEFAULT_FEED_SORT_ORDER, + ); + const currentField = sortField ?? DEFAULT_FEED_SORT_FIELD; + const currentOrder = sortOrder ?? DEFAULT_FEED_SORT_ORDER; + const sortOptionsDisabled = draftRandom; + const hasSortChanges = + (currentOrder === "random") !== draftRandom || + (!draftRandom && + (draftField !== currentField || draftOrder !== currentOrder)); + const orderLabels = getOrderLabels(draftField); const handleShare = async () => { try { @@ -28,54 +144,169 @@ export function ExploreActionRail({ country }: ExploreActionRailProps) { Alert.alert("Listen", "Narration coming in a later lesson."); }; + const handleOpenSortModal = () => { + const random = currentOrder === "random"; + setDraftField(currentField); + setDraftRandom(random); + setDraftOrder(random ? "asc" : currentOrder); + setIsSortModalOpen(true); + }; + + const handleApplySort = () => { + setSort(draftField, draftRandom ? "random" : draftOrder); + setIsSortModalOpen(false); + }; + + const handleJumpToMap = () => { + focusCountryOnMap(country, "explore"); + router.push("/(tabs)/map"); + }; + return ( - - toggleSaved(country)} - accessibilityLabel={ - saved ? `Unsave ${country.name}` : `Save ${country.name}` - } - /> - - { - void handleShare(); - }} - /> - - [styles.hitArea, pressed && styles.pressed]} + <> + + toggleSaved(country)} + accessibilityLabel={ + saved ? `Unsave ${country.name}` : `Save ${country.name}` + } + /> + + + + { + void handleShare(); + }} + /> + + { + void handleJumpToMap(); + }} + accessibilityLabel={`Open ${country.name} on map`} + /> + + + + + setIsSortModalOpen(false)} > - - - - Listen - + + setIsSortModalOpen(false)} + /> + + + Sort by + + setDraftRandom((prev) => !prev)} + /> + + setDraftField("name")} + /> + setDraftField("population")} + /> + + + + + + Order + + setDraftOrder("asc")} + /> + setDraftOrder("desc")} + /> + + - - - + + + + + + Apply + + + + - 12.4K - - + + ); } const styles = StyleSheet.create({ rail: { position: "absolute", - right: 8, - top: "40%", + right: 12, + bottom: "22%", alignItems: "center", gap: 16, zIndex: 10, @@ -107,9 +338,148 @@ const styles = StyleSheet.create({ fontFamily: "Poppins-Medium", color: "#94a3b8", }, - likeCount: { - fontSize: 11, + modalOverlay: { + flex: 1, + backgroundColor: "rgba(0,0,0,0.5)", + alignItems: "center", + justifyContent: "center", + padding: 24, + }, + modalCard: { + width: "100%", + maxWidth: 360, + borderRadius: 18, + padding: 16, + backgroundColor: "#111827", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.14)", + gap: 8, + }, + tabPanel: { + gap: 4, + }, + sortOptionsGroup: { + gap: 2, + }, + modalTitle: { + fontSize: 18, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", + }, + sectionLabel: { + marginTop: 3, + fontSize: 13, fontFamily: "Poppins-Medium", + color: "rgba(255,255,255,0.8)", + textAlign: "left", + alignSelf: "flex-start", + }, + sectionDivider: { + height: 1, + backgroundColor: "rgba(255,255,255,0.12)", + marginTop: 3, + marginBottom: 0, + }, + radioGroup: { + gap: 3, + }, + radioRow: { + flexDirection: "row", + alignItems: "center", + gap: 10, + minHeight: 44, + paddingVertical: 2, + }, + radioRowDisabled: { + opacity: 0.4, + }, + radioOuter: { + width: 20, + height: 20, + borderRadius: 10, + borderWidth: 2, + borderColor: "rgba(255,255,255,0.45)", + alignItems: "center", + justifyContent: "center", + }, + radioOuterSelected: { + borderColor: "#fbbf24", + }, + radioOuterDisabled: { + borderColor: "rgba(255,255,255,0.2)", + }, + radioInner: { + width: 10, + height: 10, + borderRadius: 5, + backgroundColor: "#fbbf24", + }, + checkboxOuter: { + width: 20, + height: 20, + borderRadius: 4, + borderWidth: 2, + borderColor: "rgba(255,255,255,0.45)", + alignItems: "center", + justifyContent: "center", + }, + checkboxOuterChecked: { + borderColor: "#fbbf24", + backgroundColor: "#fbbf24", + }, + checkboxMark: { + fontSize: 12, + lineHeight: 14, + fontFamily: "Poppins-Bold", + color: "#0b132b", + marginTop: -1, + }, + radioLabel: { + fontSize: 14, + fontFamily: "Poppins-Medium", + color: "rgba(255,255,255,0.72)", + }, + radioLabelSelected: { + color: "#ffffff", + fontFamily: "Poppins-SemiBold", + }, + radioLabelDisabled: { + color: "rgba(255,255,255,0.35)", + }, + modalActions: { + marginTop: 6, + flexDirection: "row", + gap: 10, + alignItems: "center", + }, + actionButton: { + flex: 1, + minHeight: 44, + borderRadius: 12, + alignItems: "center", + justifyContent: "center", + }, + cancelButton: { + borderWidth: 1, + borderColor: "rgba(255,255,255,0.24)", + }, + applyButton: { + backgroundColor: "#fbbf24", + }, + applyButtonDisabled: { + backgroundColor: "rgba(148, 163, 184, 0.35)", + }, + cancelText: { + fontSize: 14, + fontFamily: "Poppins-SemiBold", color: "#ffffff", }, + applyText: { + fontSize: 14, + fontFamily: "Poppins-SemiBold", + color: "#0b132b", + }, + applyTextDisabled: { + color: "rgba(255,255,255,0.65)", + }, }); diff --git a/components/explore/explore-feed.tsx b/components/explore/explore-feed.tsx index 213180b..8cde58f 100644 --- a/components/explore/explore-feed.tsx +++ b/components/explore/explore-feed.tsx @@ -23,6 +23,7 @@ export function ExploreFeed() { const hasSyncedInitialScrollRef = useRef(false); const countries = useCountryFeedStore((s) => s.countries); const currentIndex = useCountryFeedStore((s) => s.currentIndex); + const focusEpoch = useCountryFeedStore((s) => s.focusEpoch); const selectedRegion = useCountryFeedStore((s) => s.selectedRegion); const status = useCountryFeedStore((s) => s.status); const setCurrentIndex = useCountryFeedStore((s) => s.setCurrentIndex); @@ -30,7 +31,7 @@ export function ExploreFeed() { const setRegionFilter = useCountryFeedStore((s) => s.setRegionFilter); const error = useCountryFeedStore((s) => s.error); - const feedListKey = selectedRegion ?? "for-you"; + const feedListKey = `${selectedRegion ?? "for-you"}-${focusEpoch}`; const scrollToCurrentIndex = useCallback( (animated: boolean) => { @@ -45,10 +46,11 @@ export function ExploreFeed() { hasSyncedInitialScrollRef.current = false; }, [selectedRegion]); - // Only scroll programmatically (region filter, focus country, layout). + // Only scroll programmatically when restoring a non-zero index (e.g. layout). + // Search/home focus remounts the list at index 0 — never scroll the feed to a deep index. // User swipes update currentIndex via onViewableItemsChanged — do not fight that scroll. useEffect(() => { - if (pageHeight <= 0 || countries.length === 0) return; + if (pageHeight <= 0 || countries.length === 0 || currentIndex === 0) return; if (skipProgrammaticScrollRef.current) { skipProgrammaticScrollRef.current = false; diff --git a/components/explore/explore-footer.tsx b/components/explore/explore-footer.tsx index c3f663e..a5e0763 100644 --- a/components/explore/explore-footer.tsx +++ b/components/explore/explore-footer.tsx @@ -20,6 +20,9 @@ export function ExploreFooter({ country }: ExploreFooterProps) { {country.name} diff --git a/components/explore/explore-top-bar.tsx b/components/explore/explore-top-bar.tsx index 44db961..fdc9f71 100644 --- a/components/explore/explore-top-bar.tsx +++ b/components/explore/explore-top-bar.tsx @@ -13,6 +13,7 @@ import Animated, { import { useSafeAreaInsets } from "react-native-safe-area-context"; import { + continentDisplayLabel, EXPLORE_HEADER_TABS, FOR_YOU_TAB, isContinent, @@ -255,6 +256,7 @@ export function ExploreTopBar() { - {name} + {name === FOR_YOU_TAB ? name : continentDisplayLabel(name)} @@ -340,14 +342,16 @@ export function ExploreTopBar() { openSearch()} hitSlop={8} style={({ pressed }) => [ styles.searchButton, pressed && styles.pressed, ]} > - + + + diff --git a/components/map/globe-boundary-lines.tsx b/components/map/globe-boundary-lines.tsx new file mode 100644 index 0000000..1e34fc3 --- /dev/null +++ b/components/map/globe-boundary-lines.tsx @@ -0,0 +1,115 @@ +import { useEffect, useMemo } from "react"; +import * as THREE from "three"; + +import type { MapZoomTier } from "@/components/map/world-map-view"; +import { + boundaryStyleRenderKey, + resolveBoundaryStrokeColor, +} from "@/constants/map-boundary-style"; +import { + buildGlobeBoundaryLines, + parseCssColorToThree, +} from "@/lib/globe-boundary-lines"; +import { + filterBoundaryPolygonsByMapContext, + parseCountryBoundaryPolygons, +} from "@/lib/map-country-boundaries"; +import { useMapUiStore } from "@/store/use-map-ui-store"; +import type { MapCountry } from "@/types/country"; + +const countriesGeoJson = require("@/assets/geo/ne_50m_admin_0_countries/ne_50m_admin_0_countries.json"); + +type GlobeBoundaryLinesProps = { + boundaryCountries: MapCountry[]; + selectedName: string | null; + focusedRegion: string | null; +}; + +function resolveGlobeZoomTier( + selectedName: string | null, + focusedRegion: string | null, +): MapZoomTier { + if (selectedName) return "country"; + if (focusedRegion) return "region"; + return "world"; +} + +function BoundaryLineSegment({ + geometry, + color, + opacity, +}: { + geometry: THREE.BufferGeometry; + color: THREE.Color; + opacity: number; +}) { + useEffect(() => { + return () => geometry.dispose(); + }, [geometry]); + + return ( + + + + ); +} + +export function GlobeBoundaryLines({ + boundaryCountries, + selectedName, + focusedRegion, +}: GlobeBoundaryLinesProps) { + const showBoundaryLines = useMapUiStore((s) => s.showBoundaryLines); + const boundaryStyle = useMapUiStore((s) => s.boundaryStyle); + + const zoomTier = resolveGlobeZoomTier(selectedName, focusedRegion); + + const showWorldBoundaries = + showBoundaryLines && !focusedRegion && !selectedName; + + const countryBoundaries = useMemo(() => { + const all = parseCountryBoundaryPolygons(countriesGeoJson); + return filterBoundaryPolygonsByMapContext(all, { + selectedCountryName: selectedName, + focusedRegion, + countries: boundaryCountries, + showWorldBoundaries, + }); + }, [boundaryCountries, focusedRegion, selectedName, showWorldBoundaries]); + + const strokeColor = resolveBoundaryStrokeColor(boundaryStyle, zoomTier); + const styleKey = boundaryStyleRenderKey(boundaryStyle, zoomTier); + + const lineSegments = useMemo( + () => buildGlobeBoundaryLines(countryBoundaries), + [countryBoundaries, strokeColor, styleKey], + ); + + const { threeColor, opacity } = useMemo( + () => parseCssColorToThree(strokeColor), + [strokeColor], + ); + + if (!showBoundaryLines || lineSegments.length === 0) { + return null; + } + + return ( + + {lineSegments.map((segment) => ( + + ))} + + ); +} diff --git a/components/map/globe-cluster-overlay.tsx b/components/map/globe-cluster-overlay.tsx new file mode 100644 index 0000000..513e361 --- /dev/null +++ b/components/map/globe-cluster-overlay.tsx @@ -0,0 +1,196 @@ +import { Ionicons } from "@expo/vector-icons"; +import { useEffect } from "react"; +import { Pressable, StyleSheet, Text, View } from "react-native"; +import Animated, { + useAnimatedStyle, + useSharedValue, + withRepeat, + withSequence, + withTiming, +} from "react-native-reanimated"; + +import { getActivityVisual } from "@/constants/map-activity"; +import type { GlobeScreenPosition } from "@/lib/globe-screen-project"; +import type { MapCluster } from "@/lib/map-clusters"; + +type GlobeClusterOverlayProps = { + clusters: MapCluster[]; + positions: GlobeScreenPosition[]; + focusedRegion: string | null; + onClusterPress: (cluster: MapCluster) => void; +}; + +const BUBBLE_SIZE = 58; +const HALF = BUBBLE_SIZE / 2; + +function PulsingClusterBubble({ + cluster, + selected, + onPress, +}: { + cluster: MapCluster; + selected: boolean; + onPress: () => void; +}) { + const visual = getActivityVisual(cluster.activity); + const pulse = useSharedValue(1); + + useEffect(() => { + pulse.value = withRepeat( + withSequence( + withTiming(1.1, { duration: 1000 }), + withTiming(1, { duration: 1000 }), + ), + -1, + false, + ); + }, [pulse]); + + const bubbleStyle = useAnimatedStyle(() => { + const scale = selected ? 1.12 : pulse.value; + return { transform: [{ scale }] }; + }); + + const ringStyle = useAnimatedStyle(() => ({ + transform: [{ scale: pulse.value * 1.18 }], + opacity: selected ? 0.5 : 0.28 + (pulse.value - 1) * 2, + })); + + return ( + + + + + + + {cluster.countryCount} + + + + + ); +} + +export function GlobeClusterOverlay({ + clusters, + positions, + focusedRegion, + onClusterPress, +}: GlobeClusterOverlayProps) { + return ( + + {positions.map((pos) => { + if (!pos.visible) return null; + + const cluster = clusters.find((c) => c.id === pos.id); + if (!cluster) return null; + + const selected = focusedRegion === cluster.region; + + return ( + + onClusterPress(cluster)} + /> + + ); + })} + + ); +} + +const styles = StyleSheet.create({ + overlay: { + ...StyleSheet.absoluteFillObject, + }, + anchor: { + position: "absolute", + width: BUBBLE_SIZE, + height: BUBBLE_SIZE, + alignItems: "center", + justifyContent: "center", + }, + pressable: { + width: BUBBLE_SIZE, + height: BUBBLE_SIZE, + alignItems: "center", + justifyContent: "center", + }, + pulseRing: { + position: "absolute", + width: BUBBLE_SIZE, + height: BUBBLE_SIZE, + borderRadius: HALF, + borderWidth: 2, + }, + bubble: { + width: BUBBLE_SIZE, + height: BUBBLE_SIZE, + borderRadius: HALF, + borderWidth: 2, + alignItems: "center", + justifyContent: "center", + shadowColor: "#000", + shadowOpacity: 0.3, + shadowRadius: 10, + shadowOffset: { width: 0, height: 2 }, + elevation: 6, + }, + bubbleSelected: { + borderColor: "#fbbf24", + shadowColor: "#fbbf24", + shadowOpacity: 0.6, + }, + inner: { + alignItems: "center", + justifyContent: "center", + gap: 2, + }, + count: { + fontFamily: "Poppins-SemiBold", + fontSize: 12, + color: "#ffffff", + }, + countSelected: { + color: "#fbbf24", + }, +}); diff --git a/components/map/globe-cluster-pin.tsx b/components/map/globe-cluster-pin.tsx new file mode 100644 index 0000000..c9ab8e9 --- /dev/null +++ b/components/map/globe-cluster-pin.tsx @@ -0,0 +1,64 @@ +import type { ThreeEvent } from "@react-three/fiber/native"; +import { useFrame } from "@react-three/fiber/native"; +import { useRef } from "react"; +import type { Mesh } from "three"; + +import { getActivityVisual } from "@/constants/map-activity"; +import type { MapCluster } from "@/lib/map-clusters"; + +/** Slightly larger than country pins (0.018). */ +const CLUSTER_PIN_RADIUS = 0.028; +const BASE_SCALE = 1; +const SELECTED_SCALE = 1.2; +const SELECTED_COLOR = "#fbbf24"; + +type GlobeClusterPinProps = { + cluster: MapCluster; + position: [number, number, number]; + isSelected: boolean; + onPress: (cluster: MapCluster) => void; +}; + +export function GlobeClusterPin({ + cluster, + position, + isSelected, + onPress, +}: GlobeClusterPinProps) { + const meshRef = useRef(null); + const pulseRef = useRef(0); + const visual = getActivityVisual(cluster.activity); + const baseColor = isSelected ? SELECTED_COLOR : visual.textColor; + + useFrame((_, delta) => { + if (!isSelected || !meshRef.current) return; + + pulseRef.current += delta * 2.8; + const pulse = 1 + Math.sin(pulseRef.current) * 0.06; + meshRef.current.scale.setScalar(SELECTED_SCALE * pulse); + }); + + const handlePress = (event: ThreeEvent) => { + event.stopPropagation(); + onPress(cluster); + }; + + return ( + + + + + + + ); +} diff --git a/components/map/globe-cluster-projector.tsx b/components/map/globe-cluster-projector.tsx new file mode 100644 index 0000000..8b46c9b --- /dev/null +++ b/components/map/globe-cluster-projector.tsx @@ -0,0 +1,44 @@ +import { useFrame, useThree } from "@react-three/fiber/native"; +import { useRef } from "react"; + +import type { GlobeScreenPosition } from "@/lib/globe-screen-project"; +import { projectLatLngToScreen } from "@/lib/globe-screen-project"; +import type { MapCluster } from "@/lib/map-clusters"; + +type GlobeClusterProjectorProps = { + clusters: MapCluster[]; + onPositions: (positions: GlobeScreenPosition[]) => void; +}; + +export function GlobeClusterProjector({ + clusters, + onPositions, +}: GlobeClusterProjectorProps) { + const { camera } = useThree(); + const onPositionsRef = useRef(onPositions); + onPositionsRef.current = onPositions; + const frameRef = useRef(0); + + useFrame((state) => { + frameRef.current += 1; + if (frameRef.current % 2 !== 0) return; + + const next: GlobeScreenPosition[] = clusters.map((cluster) => { + const [lat, lng] = cluster.center; + const projected = projectLatLngToScreen( + lat, + lng, + camera, + state.size, + ); + return { + id: cluster.id, + ...projected, + }; + }); + + onPositionsRef.current(next); + }); + + return null; +} diff --git a/components/map/globe-country-pin.tsx b/components/map/globe-country-pin.tsx new file mode 100644 index 0000000..8ef5b60 --- /dev/null +++ b/components/map/globe-country-pin.tsx @@ -0,0 +1,164 @@ +import type { ThreeEvent } from "@react-three/fiber/native"; +import { useFrame, useThree } from "@react-three/fiber/native"; +import { useEffect, useRef } from "react"; +import type { Mesh, MeshStandardMaterial } from "three"; + +import { + GLOBE_DETAIL_CAMERA_DISTANCE, + MAP_FOCUS_TRANSITION_3D_MS, + resolveFocusTransitionScale, + resolveRegionZoomFadeT, +} from "@/lib/map-region-markers"; +import type { MapCountry } from "@/types/country"; + +const PIN_GEOMETRY_RADIUS = 0.018; +const BASE_SCALE = 1; +const SELECTED_SCALE = 1.62; +const BASE_EMISSIVE = 0.42; +const SELECTED_EMISSIVE = 0.95; +const FOCUS_TRANSITION_EMISSIVE = 0.68; +const DEEMPHASIZED_EMISSIVE = 0.18; +const PIN_COLOR = "#fbbf24"; +const SELECTED_PIN_COLOR = "#fbbf24"; +const FOCUS_TRANSITION_DURATION_S = MAP_FOCUS_TRANSITION_3D_MS / 1000; + +type GlobeCountryPinProps = { + country: MapCountry; + position: [number, number, number]; + isSelected: boolean; + isFocusTransitioning?: boolean; + isDeemphasized?: boolean; + onPress: (country: MapCountry) => void; +}; + +export function GlobeCountryPin({ + country, + position, + isSelected, + isFocusTransitioning = false, + isDeemphasized = false, + onPress, +}: GlobeCountryPinProps) { + const { camera } = useThree(); + const meshRef = useRef(null); + const ringRef = useRef(null); + const transitionElapsedRef = useRef(0); + const transitionActiveRef = useRef(false); + + useEffect(() => { + if (!isFocusTransitioning) { + transitionActiveRef.current = false; + transitionElapsedRef.current = 0; + return; + } + + transitionActiveRef.current = true; + transitionElapsedRef.current = 0; + }, [isFocusTransitioning]); + + useFrame((_, delta) => { + if (!meshRef.current) return; + + if (transitionActiveRef.current) { + transitionElapsedRef.current += delta; + const progress = Math.min( + 1, + transitionElapsedRef.current / FOCUS_TRANSITION_DURATION_S, + ); + const focusScale = resolveFocusTransitionScale(progress); + meshRef.current.scale.setScalar(BASE_SCALE * focusScale); + + const material = meshRef.current.material as MeshStandardMaterial; + material.emissiveIntensity = FOCUS_TRANSITION_EMISSIVE; + material.opacity = 1; + material.transparent = false; + + if (progress >= 1) { + transitionActiveRef.current = false; + } + return; + } + + if (isSelected) { + meshRef.current.scale.setScalar(SELECTED_SCALE); + + const material = meshRef.current.material as MeshStandardMaterial; + material.emissiveIntensity = SELECTED_EMISSIVE; + material.opacity = 1; + material.transparent = false; + + if (ringRef.current) { + ringRef.current.scale.setScalar(1.08); + } + return; + } + + const fadeT = isDeemphasized + ? 1 + : resolveRegionZoomFadeT(camera.position.length()); + const scale = BASE_SCALE * (1 - fadeT * (isDeemphasized ? 0.34 : 0.26)); + meshRef.current.scale.setScalar(scale); + + const material = meshRef.current.material as MeshStandardMaterial; + material.emissiveIntensity = isDeemphasized + ? DEEMPHASIZED_EMISSIVE + : BASE_EMISSIVE * (1 - fadeT * 0.38); + material.opacity = isDeemphasized ? 0.34 : 1 - fadeT * 0.22; + material.transparent = isDeemphasized || fadeT > 0.02; + }); + + const handlePress = (event: ThreeEvent) => { + event.stopPropagation(); + onPress(country); + }; + + const pinColor = isSelected ? SELECTED_PIN_COLOR : PIN_COLOR; + const initialFadeT = isDeemphasized + ? 1 + : resolveRegionZoomFadeT( + camera.position.length() || GLOBE_DETAIL_CAMERA_DISTANCE + 0.85, + ); + + return ( + + + + 0.02)} + opacity={ + isSelected + ? 1 + : isDeemphasized + ? 0.34 + : 1 - initialFadeT * 0.22 + } + /> + + + {isSelected ? ( + + + + + ) : null} + + ); +} diff --git a/components/map/globe-label-overlay.tsx b/components/map/globe-label-overlay.tsx new file mode 100644 index 0000000..62e654e --- /dev/null +++ b/components/map/globe-label-overlay.tsx @@ -0,0 +1,214 @@ +import { memo, useMemo } from "react"; +import { Pressable, StyleSheet, Text, View } from "react-native"; + +import { continentDisplayLabel } from "@/constants/regions"; +import type { GlobeLabel, GlobeLabelScreenPosition } from "@/lib/globe-labels"; +import type { MapCluster } from "@/lib/map-clusters"; + +type GlobeLabelOverlayProps = { + labels: GlobeLabel[]; + positions: GlobeLabelScreenPosition[]; + layoutSize?: { width: number; height: number }; + focusedRegion?: string | null; + onContinentPress?: (cluster: MapCluster) => void; + /** Region id → cluster for continent tap targets. */ + continentClustersByRegion?: Map; +}; + +const CONTINENT_OFFSET_Y = 4; +/** Gap from projected pin center to label (pin ~20px radius on screen). */ +const SELECTED_OFFSET_Y = 10; +const LABEL_HORIZONTAL_MARGIN = 64; +const LABEL_TOP_MARGIN = 148; +const LABEL_BOTTOM_MARGIN = 112; + +function estimateLabelHalfWidth(label: GlobeLabel): number { + if (label.type === "continent") { + return Math.max(66, label.text.length * 5.4 + 12); + } + return Math.max(88, label.text.length * 5.8 + 16); +} + +function isLabelInSafeViewport( + position: GlobeLabelScreenPosition, + label: GlobeLabel, + layoutSize: { width: number; height: number }, +): boolean { + if (layoutSize.width <= 0 || layoutSize.height <= 0) return true; + + const halfWidth = estimateLabelHalfWidth(label); + const left = position.x - halfWidth; + const right = position.x + halfWidth; + + return ( + left >= LABEL_HORIZONTAL_MARGIN && + right <= layoutSize.width - LABEL_HORIZONTAL_MARGIN && + position.y >= LABEL_TOP_MARGIN && + position.y <= layoutSize.height - LABEL_BOTTOM_MARGIN + ); +} + +type LabelItemProps = { + label: GlobeLabel; + position: GlobeLabelScreenPosition; + selected: boolean; + layoutSize: { width: number; height: number }; + onContinentPress?: (cluster: MapCluster) => void; + cluster?: MapCluster; +}; + +const GlobeLabelItem = memo(function GlobeLabelItem({ + label, + position, + selected, + layoutSize, + onContinentPress, + cluster, +}: LabelItemProps) { + if (!position.visible) return null; + if (!isLabelInSafeViewport(position, label, layoutSize)) return null; + + const isContinent = label.type === "continent"; + const isAntarcticaLabel = isContinent && label.text === "Antarctica"; + const offsetY = isContinent ? CONTINENT_OFFSET_Y : SELECTED_OFFSET_Y; + const translateX = isContinent ? -48 : -24; + + const content = isContinent ? ( + + + {label.text} + + + ) : ( + + {label.text} + + ); + + return ( + + {isContinent && cluster && onContinentPress ? ( + onContinentPress(cluster)} + style={styles.continentHitArea} + > + {content} + + ) : ( + content + )} + + ); +}); + +export function GlobeLabelOverlay({ + labels, + positions, + layoutSize = { width: 0, height: 0 }, + focusedRegion = null, + onContinentPress, + continentClustersByRegion, +}: GlobeLabelOverlayProps) { + const labelById = useMemo( + () => new Map(labels.map((label) => [label.id, label])), + [labels], + ); + + return ( + + {positions.map((position) => { + const label = labelById.get(position.id); + if (!label) return null; + + const regionKey = label.id.replace("continent:", ""); + const cluster = + label.type === "continent" + ? continentClustersByRegion?.get(regionKey) + : undefined; + + return ( + + ); + })} + + ); +} + +const styles = StyleSheet.create({ + overlay: { + ...StyleSheet.absoluteFillObject, + }, + anchor: { + position: "absolute", + alignItems: "center", + }, + continentHitArea: { + minWidth: 112, + maxWidth: 132, + alignItems: "center", + paddingVertical: 10, + paddingHorizontal: 8, + }, + continentWrap: { + alignItems: "center", + maxWidth: 120, + }, + continentText: { + fontSize: 10, + fontFamily: "Poppins-SemiBold", + color: "rgba(203, 213, 225, 0.5)", + textAlign: "center", + textShadowColor: "rgba(0, 0, 0, 0.7)", + textShadowOffset: { width: 0, height: 1 }, + textShadowRadius: 3, + }, + continentTextSelected: { + fontSize: 12, + color: "#fbbf24", + textShadowColor: "rgba(251, 191, 36, 0.45)", + textShadowRadius: 6, + }, + antarcticaText: { + color: "#000000", + }, + selectedText: { + fontSize: 12, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", + textAlign: "center", + textShadowColor: "rgba(0, 0, 0, 0.9)", + textShadowOffset: { width: 0, height: 1 }, + textShadowRadius: 5, + }, +}); diff --git a/components/map/globe-label-projector.tsx b/components/map/globe-label-projector.tsx new file mode 100644 index 0000000..f8251a6 --- /dev/null +++ b/components/map/globe-label-projector.tsx @@ -0,0 +1,53 @@ +import { useFrame, useThree } from "@react-three/fiber/native"; +import { useRef } from "react"; + +import type { GlobeLabel, GlobeLabelScreenPosition } from "@/lib/globe-labels"; +import { projectLatLngToScreen } from "@/lib/globe-screen-project"; + +type GlobeLabelProjectorProps = { + labels: GlobeLabel[]; + onPositions: (positions: GlobeLabelScreenPosition[]) => void; +}; + +/** + * Projects only the visible label rule-set (continents + selected country). + * Runs every other frame; parent should dedupe state updates. + */ +export function GlobeLabelProjector({ + labels, + onPositions, +}: GlobeLabelProjectorProps) { + const { camera } = useThree(); + const onPositionsRef = useRef(onPositions); + onPositionsRef.current = onPositions; + + const labelsRef = useRef(labels); + labelsRef.current = labels; // keep in sync without re-subscribing useFrame + + const frameRef = useRef(0); + + useFrame((state) => { + frameRef.current += 1; + if (frameRef.current % 2 !== 0) return; + + const activeLabels = labelsRef.current; + const next: GlobeLabelScreenPosition[] = activeLabels.map((label) => { + const projected = projectLatLngToScreen( + label.lat, + label.lng, + camera, + state.size, + ); + + return { + id: label.id, + type: label.type, + ...projected, + }; + }); + + onPositionsRef.current(next); + }); + + return null; +} diff --git a/components/map/globe-pin-projector.tsx b/components/map/globe-pin-projector.tsx new file mode 100644 index 0000000..40a080c --- /dev/null +++ b/components/map/globe-pin-projector.tsx @@ -0,0 +1,90 @@ +import { useFrame, useThree } from "@react-three/fiber/native"; +import { useRef } from "react"; + +import { getMapDisplayLatLng, isValidLatLng } from "@/lib/map-country"; +import { projectLatLngToScreen } from "@/lib/globe-screen-project"; +import type { MapCountry } from "@/types/country"; + +export type GlobePinScreenPosition = { + name: string; + x: number; + y: number; + visible: boolean; +}; + +type GlobePinProjectorProps = { + countries: MapCountry[]; + onPositions: (positions: GlobePinScreenPosition[]) => void; +}; + +export function globePinPositionsChanged( + prev: GlobePinScreenPosition[], + next: GlobePinScreenPosition[], +): boolean { + if (prev.length !== next.length) return true; + + return prev.some((position, index) => { + const candidate = next[index]; + if (!candidate) return true; + + return ( + position.name !== candidate.name || + position.x !== candidate.x || + position.y !== candidate.y || + position.visible !== candidate.visible + ); + }); +} + +/** + * Projects country pins every other frame; parent should dedupe state updates. + * Only returns positions on the visible hemisphere and inside the camera frustum. + */ +export function GlobePinProjector({ + countries, + onPositions, +}: GlobePinProjectorProps) { + const { camera } = useThree(); + const onPositionsRef = useRef(onPositions); + onPositionsRef.current = onPositions; + + const countriesRef = useRef(countries); + countriesRef.current = countries; + + const frameRef = useRef(0); + const lastPositionsRef = useRef([]); + + useFrame((state) => { + frameRef.current += 1; + if (frameRef.current % 2 !== 0) return; + + const activeCountries = countriesRef.current; + const next: GlobePinScreenPosition[] = []; + + for (const country of activeCountries) { + if (!isValidLatLng(country.latlng)) continue; + + const [lat, lng] = getMapDisplayLatLng(country); + const projected = projectLatLngToScreen( + lat, + lng, + camera, + state.size, + ); + + next.push({ + name: country.name, + x: projected.x, + y: projected.y, + visible: projected.visible, + }); + } + + if (globePinPositionsChanged(lastPositionsRef.current, next)) { + lastPositionsRef.current = next; + onPositionsRef.current(next); + } + }); + + return null; +} diff --git a/components/map/globe-view.tsx b/components/map/globe-view.tsx new file mode 100644 index 0000000..cae77a5 --- /dev/null +++ b/components/map/globe-view.tsx @@ -0,0 +1,717 @@ +import { + Canvas, + type ThreeEvent, + useFrame, + useThree, +} from "@react-three/fiber/native"; +import { + forwardRef, + useCallback, + useEffect, + useImperativeHandle, + useMemo, + useRef, + useState, +} from "react"; +import { StyleSheet, View } from "react-native"; +import * as THREE from "three"; + +import { GlobeBoundaryLines } from "@/components/map/globe-boundary-lines"; +import { GlobeCountryPin } from "@/components/map/globe-country-pin"; +import { GlobeLabelOverlay } from "@/components/map/globe-label-overlay"; +import { GlobeLabelProjector } from "@/components/map/globe-label-projector"; +import { + GlobePinProjector, + type GlobePinScreenPosition, +} from "@/components/map/globe-pin-projector"; +import { + createGlobeOrbitControls, + type GlobeOrbitControls, +} from "@/lib/globe-orbit-controls"; +import { + buildGlobeVisibleLabels, + globeLabelPositionsChanged, + type GlobeLabelScreenPosition, +} from "@/lib/globe-labels"; +import { + projectLatLngToScreen, + type GlobeScreenPosition, +} from "@/lib/globe-screen-project"; +import { latLngToVector3, vector3ToLatLng } from "@/lib/latlng-to-sphere"; +import { useGlobeTexture } from "@/lib/load-globe-texture"; +import type { MapCluster } from "@/lib/map-clusters"; +import { getMapDisplayLatLng, isValidLatLng } from "@/lib/map-country"; +import type { MapPressCoordinate } from "@/lib/map-map-tap-hit"; +import { + resolveGlobeZoomTier, + type GlobeZoomTier, +} from "@/lib/map-region-markers"; +import { useMapStore, type GlobeCameraHandle } from "@/store/use-map-store"; +import { + isGlobeYellowPinsVisible, + type CountryMarkerDisplayMode, +} from "@/store/use-map-ui-store"; +import type { MapCountry } from "@/types/country"; + +export type GlobeCameraViewState = { + distance: number; + centerLat: number; + centerLng: number; + zoomTier: GlobeZoomTier; +}; + +// Some Three.js RN helpers expect THREE on globalThis. +const globalWithThree = globalThis as typeof globalThis & { + THREE?: typeof THREE; +}; +globalWithThree.THREE = globalWithThree.THREE ?? THREE; + +const GLOBE_RADIUS = 1; +const PIN_RADIUS = GLOBE_RADIUS * 1.02; +const MIN_CAMERA_DISTANCE = 1.4; +const MAX_CAMERA_DISTANCE = 4; +/** World view — slightly closer than before so the globe fills more of the stage. */ +const DEFAULT_CAMERA_DISTANCE = 3.88; +/** Pull target below equator so the sphere sits in the map “stage” between chrome. */ +const GLOBE_VIEW_TARGET_Y = -0.09; + +/** Atlantic-centered view — Americas sit in-frame without left-edge label crop. */ +const INITIAL_CAMERA_POSITION = latLngToVector3( + 4, + -36, + DEFAULT_CAMERA_DISTANCE, +); + +type CameraFlight = { + fromDir: THREE.Vector3; + toDir: THREE.Vector3; + fromDistance: number; + toDistance: number; + elapsed: number; + duration: number; +}; + +/** Ease-in-out cubic — smooth start/end for globe pans. */ +function easeInOutCubic(t: number): number { + return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2; +} + +const SLERP_REFERENCE = new THREE.Vector3(0, 0, 1); +const slerpScratchDir = new THREE.Vector3(); +const slerpScratchQuatA = new THREE.Quaternion(); +const slerpScratchQuatB = new THREE.Quaternion(); +const slerpScratchQuat = new THREE.Quaternion(); + +function slerpUnitVectors( + from: THREE.Vector3, + to: THREE.Vector3, + alpha: number, + target: THREE.Vector3, +): THREE.Vector3 { + slerpScratchQuatA.setFromUnitVectors(SLERP_REFERENCE, from); + slerpScratchQuatB.setFromUnitVectors(SLERP_REFERENCE, to); + slerpScratchQuat.slerpQuaternions(slerpScratchQuatA, slerpScratchQuatB, alpha); + return target.copy(SLERP_REFERENCE).applyQuaternion(slerpScratchQuat); +} + +/** Fires once after the GL canvas renders its first frame. */ +function GlobePaintNotifier({ onPainted }: { onPainted: () => void }) { + const paintedRef = useRef(false); + + useFrame(() => { + if (paintedRef.current) return; + paintedRef.current = true; + onPainted(); + }); + + return null; +} + +type LatLngProjector = ( + lat: number, + lng: number, +) => Pick; + +function GlobeCoordinateProjector({ + layoutSize, + onReady, +}: { + layoutSize: { width: number; height: number }; + onReady: (project: LatLngProjector) => void; +}) { + const { camera } = useThree(); + + useEffect(() => { + onReady((lat, lng) => projectLatLngToScreen(lat, lng, camera, layoutSize)); + }, [camera, layoutSize, onReady]); + + return null; +} + +type GlobeSceneProps = { + countries: MapCountry[]; + visibleLabels: ReturnType; + boundaryCountries: MapCountry[]; + selectedName: string | null; + focusTransitionName: string | null; + focusedRegion: string | null; + showGlobePins: boolean; + onCountryPress: (country: MapCountry) => void; + controls: GlobeOrbitControls; + onReady: (handle: GlobeCameraHandle) => void; + onCanvasPainted?: () => void; + onLabelPositions: (positions: GlobeLabelScreenPosition[]) => void; + onCameraViewChange?: (state: GlobeCameraViewState) => void; + onGlobeSurfacePress: (coordinate: MapPressCoordinate) => void; + layoutSize: { width: number; height: number }; + onProjectorReady: (project: LatLngProjector) => void; + lockUserGestures: boolean; +}; + +function GlobeScene({ + countries, + visibleLabels, + boundaryCountries, + selectedName, + focusTransitionName, + focusedRegion, + showGlobePins, + onCountryPress, + controls, + onReady, + onCanvasPainted, + onLabelPositions, + onCameraViewChange, + onGlobeSurfacePress, + layoutSize, + onProjectorReady, + lockUserGestures, +}: GlobeSceneProps) { + const texture = useGlobeTexture(); + const { camera } = useThree(); + const continentSinglePinActive = + !!focusedRegion && (!!selectedName || !!focusTransitionName); + + const handlePinPress = useCallback( + (country: MapCountry) => { + onCountryPress(country); + }, + [onCountryPress], + ); + + const handleGlobeSurfacePress = useCallback( + (event: ThreeEvent) => { + if (controls.functions.consumeTapThresholdExceeded()) { + return; + } + event.stopPropagation(); + const normal = event.point.clone().normalize(); + const latitude = THREE.MathUtils.radToDeg(Math.asin(normal.y)); + const thetaDeg = THREE.MathUtils.radToDeg(Math.atan2(normal.z, -normal.x)); + const longitude = THREE.MathUtils.euclideanModulo( + thetaDeg, + 360, + ) - 180; + onGlobeSurfacePress({ latitude, longitude }); + }, + [controls.functions, onGlobeSurfacePress], + ); + + const flightRef = useRef(null); + const cameraDistanceRef = useRef(DEFAULT_CAMERA_DISTANCE); + const onCameraViewChangeRef = useRef(onCameraViewChange); + onCameraViewChangeRef.current = onCameraViewChange; + const lastCameraViewKeyRef = useRef(""); + + const emitCameraView = useCallback(() => { + const distance = camera.position.length(); + const [centerLat, centerLng] = vector3ToLatLng( + camera.position.x, + camera.position.y, + camera.position.z, + ); + const zoomTier = resolveGlobeZoomTier(distance); + const key = `${zoomTier}:${distance.toFixed(2)}:${centerLat.toFixed(1)}:${centerLng.toFixed(1)}`; + if (key === lastCameraViewKeyRef.current) return; + lastCameraViewKeyRef.current = key; + onCameraViewChangeRef.current?.({ + distance, + centerLat, + centerLng, + zoomTier, + }); + }, [camera]); + + const [visibleCirclePinNames, setVisibleCirclePinNames] = useState< + Set + >(() => new Set()); + + const handlePinPositions = useCallback( + (positions: GlobePinScreenPosition[]) => { + if (!showGlobePins) return; + + const visible = new Set( + positions.filter((p) => p.visible).map((p) => p.name), + ); + setVisibleCirclePinNames((prev) => { + if (prev.size === visible.size) { + let same = true; + for (const name of visible) { + if (!prev.has(name)) { + same = false; + break; + } + } + if (same) return prev; + } + return visible; + }); + }, + [showGlobePins], + ); + + const focusLatLng = useCallback( + (lat: number, lng: number, duration = 650, targetDistance?: number) => { + if (!Number.isFinite(lat) || !Number.isFinite(lng)) return; + + const toDir = new THREE.Vector3( + ...latLngToVector3(lat, lng, 1), + ).normalize(); + const fromDir = camera.position.clone().normalize(); + const fromDistance = cameraDistanceRef.current; + const toDistance = targetDistance ?? fromDistance; + + flightRef.current = { + fromDir, + toDir, + fromDistance, + toDistance, + elapsed: 0, + duration: duration / 1000, + }; + }, + [camera], + ); + + const focusCountry = useCallback( + (country: MapCountry, duration = 650) => { + const [lat, lng] = getMapDisplayLatLng(country); + if (!isValidLatLng([lat, lng])) return; + focusLatLng(lat, lng, duration); + }, + [focusLatLng], + ); + + const resetCamera = useCallback(() => { + const toDir = new THREE.Vector3(...INITIAL_CAMERA_POSITION).normalize(); + flightRef.current = { + fromDir: camera.position.clone().normalize(), + toDir, + fromDistance: cameraDistanceRef.current, + toDistance: DEFAULT_CAMERA_DISTANCE, + elapsed: 0, + duration: 0.55, + }; + cameraDistanceRef.current = DEFAULT_CAMERA_DISTANCE; + controls.scope.target.set(0, GLOBE_VIEW_TARGET_Y, 0); + camera.lookAt(controls.scope.target); + }, [camera, controls.scope.target]); + + const zoomBy = useCallback( + (direction: "in" | "out") => { + flightRef.current = null; + + const scale = direction === "in" ? 0.82 : 1.22; + const nextDistance = THREE.MathUtils.clamp( + cameraDistanceRef.current * scale, + MIN_CAMERA_DISTANCE, + MAX_CAMERA_DISTANCE, + ); + cameraDistanceRef.current = nextDistance; + + const directionVector = camera.position.clone().normalize(); + camera.position.copy(directionVector.multiplyScalar(nextDistance)); + }, + [camera], + ); + + useEffect(() => { + if (!flightRef.current) { + controls.scope.enabled = !lockUserGestures; + } + }, [controls.scope, lockUserGestures]); + + useEffect(() => { + controls.scope.camera = camera as THREE.PerspectiveCamera; + controls.scope.target.set(0, GLOBE_VIEW_TARGET_Y, 0); + camera.lookAt(controls.scope.target); + controls.scope.enablePan = false; + controls.scope.dampingFactor = 0.05; + controls.scope.rotateSpeed = 0.9; + controls.scope.zoomSpeed = 0.5; + controls.scope.minZoom = MIN_CAMERA_DISTANCE; + controls.scope.maxZoom = MAX_CAMERA_DISTANCE; + controls.scope.onChange = () => { + const distance = camera.position.length(); + cameraDistanceRef.current = distance; + emitCameraView(); + }; + controls.scope.onStart = () => { + flightRef.current = null; + }; + }, [camera, controls.scope, emitCameraView]); + + useEffect(() => { + const handle: GlobeCameraHandle = { + focusCountry, + focusLatLng, + resetCamera, + zoomBy, + }; + onReady(handle); + useMapStore.getState().registerGlobeCamera(handle); + return () => useMapStore.getState().registerGlobeCamera(null); + }, [focusCountry, focusLatLng, onReady, resetCamera, zoomBy]); + + useFrame((_, delta) => { + const flight = flightRef.current; + + if (flight) { + controls.scope.enabled = false; + flight.elapsed += delta; + const progress = Math.min(flight.elapsed / flight.duration, 1); + const eased = easeInOutCubic(progress); + + // Slerp direction at fixed radius — linear lerp dips toward the globe center + // and reads as zoom-in/out while panning. + slerpUnitVectors(flight.fromDir, flight.toDir, eased, slerpScratchDir); + const distance = THREE.MathUtils.lerp( + flight.fromDistance, + flight.toDistance, + eased, + ); + cameraDistanceRef.current = distance; + camera.position.copy(slerpScratchDir.multiplyScalar(distance)); + camera.lookAt(controls.scope.target); + + if (progress >= 1) { + flightRef.current = null; + cameraDistanceRef.current = flight.toDistance; + controls.scope.enabled = !lockUserGestures; + controls.functions.update(); + emitCameraView(); + } + return; + } + + controls.scope.enabled = !lockUserGestures; + controls.functions.update(); + + const distance = camera.position.length(); + if (Math.abs(distance - cameraDistanceRef.current) > 0.01) { + cameraDistanceRef.current = distance; + emitCameraView(); + } + }); + + return ( + <> + {onCanvasPainted ? ( + + ) : null} + + + + + + + + + + + + + + + + + + + + + {showGlobePins ? ( + + ) : null} + + {showGlobePins + ? countries.map((country) => { + if (!isValidLatLng(country.latlng)) return null; + const isSelected = selectedName === country.name; + const isFocusTransitioning = focusTransitionName === country.name; + const keepVisible = + isSelected || + isFocusTransitioning || + visibleCirclePinNames.has(country.name); + if (!keepVisible) { + return null; + } + const [lat, lng] = getMapDisplayLatLng(country); + return ( + + ); + }) + : null} + + ); +} + +export type GlobeViewHandle = GlobeCameraHandle & { + projectLatLng: ( + lat: number, + lng: number, + ) => Pick; +}; + +type GlobeViewProps = { + countries: MapCountry[]; + clusters: MapCluster[]; + /** Full continent clusters — used for label anchors even when region pins are hidden. */ + labelClusters: MapCluster[]; + boundaryCountries: MapCountry[]; + selectedName: string | null; + focusTransitionName?: string | null; + focusedRegion: string | null; + countryMarkerMode?: CountryMarkerDisplayMode; + onClusterPress: (cluster: MapCluster) => void; + onCountryPress: (country: MapCountry) => void; + onBackgroundPress: (coordinate?: MapPressCoordinate) => void; + onCanvasPainted?: () => void; + onCameraViewChange?: (state: GlobeCameraViewState) => void; + lockUserGestures?: boolean; +}; + +export const GlobeView = forwardRef( + function GlobeView( + { + countries, + clusters, + labelClusters, + boundaryCountries, + selectedName, + focusTransitionName = null, + focusedRegion, + countryMarkerMode = "flag", + onClusterPress, + onCountryPress, + onBackgroundPress, + onCanvasPainted, + onCameraViewChange, + lockUserGestures = false, + }, + ref, + ) { + const handleRef = useRef(null); + const projectLatLngRef = useRef(null); + const [layoutSize, setLayoutSize] = useState({ width: 0, height: 0 }); + const controls = useMemo(() => createGlobeOrbitControls(), []); + const [labelPositions, setLabelPositions] = useState< + GlobeLabelScreenPosition[] + >([]); + const showGlobePins = + !!focusedRegion && + isGlobeYellowPinsVisible(countryMarkerMode) && + countries.length > 0; + + const selectedCountry = useMemo( + () => + selectedName + ? (countries.find((country) => country.name === selectedName) ?? null) + : null, + [countries, selectedName], + ); + + const visibleLabels = useMemo( + () => + buildGlobeVisibleLabels({ + clusters: labelClusters, + selectedCountry, + }), + [labelClusters, selectedCountry], + ); + + const continentClustersByRegion = useMemo( + () => new Map(labelClusters.map((cluster) => [cluster.region, cluster])), + [labelClusters], + ); + + const handleLabelPositions = useCallback( + (positions: GlobeLabelScreenPosition[]) => { + setLabelPositions((prev) => { + if (!globeLabelPositionsChanged(prev, positions)) { + return prev; + } + return positions; + }); + }, + [], + ); + + useImperativeHandle( + ref, + () => ({ + focusCountry: (country, duration) => + handleRef.current?.focusCountry(country, duration), + focusLatLng: (lat, lng, duration, targetDistance) => + handleRef.current?.focusLatLng(lat, lng, duration, targetDistance), + resetCamera: () => handleRef.current?.resetCamera(), + zoomBy: (direction) => handleRef.current?.zoomBy(direction), + projectLatLng: (lat, lng) => + projectLatLngRef.current?.(lat, lng) ?? { + x: 0, + y: 0, + visible: false, + }, + }), + [], + ); + + const handleProjectorReady = useCallback((project: LatLngProjector) => { + projectLatLngRef.current = project; + }, []); + + const handleReady = useCallback((handle: GlobeCameraHandle) => { + handleRef.current = handle; + }, []); + + const handleBackgroundPress = useCallback(() => { + onBackgroundPress(); + }, [onBackgroundPress]); + const handleGlobeSurfacePress = useCallback( + (coordinate: MapPressCoordinate) => { + onBackgroundPress(coordinate); + }, + [onBackgroundPress], + ); + + const handleContinentLabelPress = useCallback( + (cluster: MapCluster) => { + if (controls.functions.consumeTapThresholdExceeded()) { + return; + } + onClusterPress(cluster); + }, + [controls.functions, onClusterPress], + ); + + return ( + { + const { width, height } = event.nativeEvent.layout; + setLayoutSize({ width, height }); + controls.events.onLayout(event); + }} + onStartShouldSetResponder={controls.events.onStartShouldSetResponder} + onMoveShouldSetResponder={controls.events.onMoveShouldSetResponder} + onResponderGrant={controls.events.onResponderGrant} + onResponderMove={controls.events.onResponderMove} + onResponderRelease={controls.events.onResponderRelease} + onResponderTerminate={controls.events.onResponderTerminate} + onResponderTerminationRequest={ + controls.events.onResponderTerminationRequest + } + > + + + + + + + ); + }, +); + +const styles = StyleSheet.create({ + container: { + ...StyleSheet.absoluteFillObject, + backgroundColor: "#000000", + }, + canvas: { + flex: 1, + }, +}); diff --git a/components/map/map-boundary-controls-modal.tsx b/components/map/map-boundary-controls-modal.tsx new file mode 100644 index 0000000..71d59bb --- /dev/null +++ b/components/map/map-boundary-controls-modal.tsx @@ -0,0 +1,1062 @@ +import { Ionicons } from "@expo/vector-icons"; +import Slider from "@react-native-community/slider"; +import { type ReactNode, useCallback, useEffect, useRef, useState } from "react"; +import { + Modal, + Pressable, + ScrollView, + StyleSheet, + Text, + TextInput, + View, +} from "react-native"; + +import { + applyBoundaryStyleDraft, + BOUNDARY_STEP_MAX, + BOUNDARY_STEP_MIN, + boundaryStyleHasChanges, + clampBoundaryStep, + DEFAULT_MAP_BOUNDARY_STYLE, + displayPercentToFillOpacityStep, + displayPercentToStrokeOpacityStep, + fillOpacityStepToDisplayPercent, + resolveBoundaryStrokeWidth, + strokeOpacityStepToDisplayPercent, + type MapBoundaryStyleSettings, + type MapFillColorMode, + type MapZoomTier, +} from "@/constants/map-boundary-style"; +import { hueToHex } from "@/lib/color-utils"; +import { useMapUiStore } from "@/store/use-map-ui-store"; + +const ACCENT = "#fbbf24"; +const ACCENT_DARK = "#0b132b"; +const TRACK_MUTED = "rgba(255,255,255,0.16)"; +const THUMB = "#ffffff"; + +type MapBoundaryControlsModalProps = { + /** Map zoom tier used for live thickness preview labels (continent ≈ region). */ + previewZoomTier?: MapZoomTier; + onClose: () => void; +}; + +type SettingSwitchProps = { + value: boolean; + disabled?: boolean; + accessibilityLabel: string; + onValueChange: (value: boolean) => void; +}; + +function SettingSwitch({ + value, + disabled = false, + accessibilityLabel, + onValueChange, +}: SettingSwitchProps) { + return ( + onValueChange(!value)} + style={[ + styles.switchTrack, + value && styles.switchTrackOn, + disabled && styles.switchDisabled, + ]} + > + + + ); +} + +function BoundaryOutlineIcon() { + return ( + + + + ); +} + +function FillPatternIcon() { + return ( + + + + + + ); +} + +type FeatureToggleRowProps = { + icon: ReactNode; + label: string; + enabled: boolean; + onChange: (enabled: boolean) => void; +}; + +function FeatureToggleRow({ + icon, + label, + enabled, + onChange, +}: FeatureToggleRowProps) { + return ( + + {icon} + {label} + + + ); +} + +type ColorFieldProps = { + label: string; + hue: number; + colorHex: string | null; + disabled?: boolean; + onHueChange: (hue: number) => void; + onHexChange: (hex: string | null) => void; +}; + +function ColorField({ + label, + hue, + colorHex, + disabled = false, + onHueChange, + onHexChange, +}: ColorFieldProps) { + const previewHex = (colorHex ?? hueToHex(hue)).toUpperCase(); + const [hexDraft, setHexDraft] = useState(previewHex); + const [pickerOpen, setPickerOpen] = useState(false); + const [liveHue, setLiveHue] = useState(hue); + + useEffect(() => { + setHexDraft(previewHex); + setLiveHue(hue); + }, [hue, previewHex]); + + const livePreview = hueToHex(liveHue); + + return ( + + {label} + + + + + {hexDraft} + + + setPickerOpen((open) => !open)} + style={({ pressed }) => [ + styles.eyedropperButton, + pickerOpen && styles.eyedropperButtonActive, + pressed && !disabled && styles.pressed, + ]} + > + + + + {pickerOpen && !disabled ? ( + { + setLiveHue(nextHue); + onHexChange(null); + onHueChange(nextHue); + setHexDraft(hueToHex(nextHue).toUpperCase()); + }} + /> + ) : null} + + ); +} + +type SliderWithValueProps = { + value: number; + min: number; + max: number; + unit: string; + disabled?: boolean; + accessibilityLabel: string; + tickCount?: number; + endLabels?: [string, string, string]; + formatDisplay: (value: number) => string; + parseDisplay: (text: string) => number | null; + onValueChange: (value: number) => void; + showValueInput?: boolean; +}; + +type FillColorModeToggleProps = { + mode: MapFillColorMode; + disabled?: boolean; + onModeChange: (mode: MapFillColorMode) => void; +}; + +function FillColorModeToggle({ + mode, + disabled = false, + onModeChange, +}: FillColorModeToggleProps) { + return ( + + {(["hue", "grayscale"] as const).map((option) => { + const active = option === mode; + return ( + onModeChange(option)} + style={({ pressed }) => [ + styles.modeToggleButton, + active && styles.modeToggleButtonActive, + pressed && !disabled && styles.pressed, + ]} + > + + {option === "hue" ? "Hue" : "Grayscale"} + + + ); + })} + + ); +} + +function SliderWithValue({ + value, + min, + max, + unit, + disabled = false, + accessibilityLabel, + tickCount = 5, + endLabels, + formatDisplay, + parseDisplay, + onValueChange, + showValueInput = true, +}: SliderWithValueProps) { + const [valueDraft, setValueDraft] = useState(formatDisplay(value)); + + useEffect(() => { + setValueDraft(formatDisplay(value)); + }, [formatDisplay, value]); + + return ( + + + + {tickCount > 0 ? ( + + {Array.from({ length: tickCount }, (_, index) => ( + + ))} + + ) : null} + {endLabels ? ( + + {endLabels[0]} + {endLabels[1]} + {endLabels[2]} + + ) : null} + + {showValueInput ? ( + + { + setValueDraft(text.replace(/[^0-9]/g, "")); + }} + onBlur={() => { + const parsed = parseDisplay(valueDraft); + if (parsed === null) { + setValueDraft(formatDisplay(value)); + return; + } + onValueChange(parsed); + }} + /> + {unit} + + ) : null} + + ); +} + +export function MapBoundaryControlsModal({ + previewZoomTier = "world", + onClose, +}: MapBoundaryControlsModalProps) { + const boundaryStyle = useMapUiStore((s) => s.boundaryStyle); + const setBoundaryStyle = useMapUiStore((s) => s.setBoundaryStyle); + const resetBoundaryStyle = useMapUiStore((s) => s.resetBoundaryStyle); + const showBoundaryLines = useMapUiStore((s) => s.showBoundaryLines); + const setShowBoundaryLines = useMapUiStore((s) => s.setShowBoundaryLines); + + const initialStyle = applyBoundaryStyleDraft(boundaryStyle); + const committedStyleRef = useRef(initialStyle); + const committedShowLinesRef = useRef(showBoundaryLines); + const [draft, setDraft] = useState(initialStyle); + + // Ensure the 2D map has polygons to preview (restored on dismiss if they were off). + useEffect(() => { + if (!committedShowLinesRef.current) { + setShowBoundaryLines(true); + } + }, [setShowBoundaryLines]); + + // Live-preview: map reflects slider changes immediately while the modal is open. + useEffect(() => { + setBoundaryStyle(applyBoundaryStyleDraft(draft)); + }, [draft, setBoundaryStyle]); + + const hasChanges = boundaryStyleHasChanges( + draft, + committedStyleRef.current, + ); + const boundaryEnabled = draft.strokeColorEnabled; + + const previewStrokeWidth = resolveBoundaryStrokeWidth( + applyBoundaryStyleDraft(draft), + previewZoomTier, + ); + + const formatThicknessStep = useCallback((step: number) => String(step), []); + const formatStrokeOpacityStep = useCallback( + (step: number) => String(strokeOpacityStepToDisplayPercent(step)), + [], + ); + const formatFillOpacityStep = useCallback( + (step: number) => String(fillOpacityStepToDisplayPercent(step)), + [], + ); + const formatGrayLevel = useCallback( + (level: number) => String(Math.round(level)), + [], + ); + + const handleDismiss = useCallback(() => { + setBoundaryStyle(committedStyleRef.current); + setShowBoundaryLines(committedShowLinesRef.current); + onClose(); + }, [onClose, setBoundaryStyle, setShowBoundaryLines]); + + const handleApply = () => { + const applied = applyBoundaryStyleDraft(draft); + setBoundaryStyle(applied); + committedStyleRef.current = applied; + committedShowLinesRef.current = showBoundaryLines; + onClose(); + }; + + const handleResetDefaults = () => { + const defaults = applyBoundaryStyleDraft(DEFAULT_MAP_BOUNDARY_STYLE); + setDraft(defaults); + setBoundaryStyle(defaults); + setShowBoundaryLines(true); + committedStyleRef.current = defaults; + committedShowLinesRef.current = true; + resetBoundaryStyle(); + }; + + const setBoundaryEnabled = (strokeColorEnabled: boolean) => { + setShowBoundaryLines(strokeColorEnabled); + setDraft((current) => ({ + ...current, + strokeColorEnabled, + strokeWidthEnabled: strokeColorEnabled, + })); + }; + + return ( + + + + + + + Boundary style + [ + styles.closeButton, + pressed && styles.pressed, + ]} + > + + + + + + + + } + label="Boundary" + enabled={boundaryEnabled} + onChange={setBoundaryEnabled} + /> + } + label="Fill" + enabled={draft.fillEnabled} + onChange={(fillEnabled) => + setDraft((current) => ({ ...current, fillEnabled })) + } + /> + + + setDraft((current) => ({ ...current, strokeColorHue })) + } + onHexChange={(strokeColorHex) => + setDraft((current) => ({ ...current, strokeColorHex })) + } + /> + + + + Boundary thickness ({previewStrokeWidth.toFixed(1)}px) + + { + const parsed = Number.parseInt(text, 10); + if (Number.isNaN(parsed)) { + return null; + } + return clampBoundaryStep(parsed); + }} + onValueChange={(strokeThicknessStep) => + setDraft((current) => ({ + ...current, + strokeThicknessStep: clampBoundaryStep(strokeThicknessStep), + })) + } + /> + + + + Line opacity + { + const parsed = Number.parseInt(text, 10); + if (Number.isNaN(parsed)) { + return null; + } + return displayPercentToStrokeOpacityStep(parsed); + }} + onValueChange={(strokeOpacityStep) => + setDraft((current) => ({ + ...current, + strokeOpacityStep: clampBoundaryStep(strokeOpacityStep), + })) + } + /> + + + {draft.fillEnabled ? ( + <> + + + + setDraft((current) => ({ ...current, fillColorHue })) + } + onHexChange={(fillColorHex) => + setDraft((current) => ({ ...current, fillColorHex })) + } + /> + + + Fill color mode + + setDraft((current) => ({ ...current, fillColorMode })) + } + /> + + + {draft.fillColorMode === "grayscale" ? ( + + Grayscale level + { + const parsed = Number.parseInt(text, 10); + if (Number.isNaN(parsed)) return null; + return Math.min(100, Math.max(0, parsed)); + }} + onValueChange={(fillGrayLevel) => + setDraft((current) => ({ + ...current, + fillGrayLevel: Math.min( + 100, + Math.max(0, fillGrayLevel), + ), + })) + } + /> + + ) : null} + + + Fill opacity + { + const parsed = Number.parseInt(text, 10); + if (Number.isNaN(parsed)) { + return null; + } + return displayPercentToFillOpacityStep(parsed); + }} + onValueChange={(fillOpacityStep) => + setDraft((current) => ({ + ...current, + fillOpacityStep: clampBoundaryStep(fillOpacityStep), + })) + } + /> + + + ) : null} + + + + + + [ + styles.actionButton, + styles.resetButton, + pressed && styles.pressed, + ]} + > + + Reset all + + [ + styles.actionButton, + styles.applyButton, + !hasChanges && styles.applyButtonDisabled, + pressed && hasChanges && styles.pressed, + ]} + > + + + Apply + + + + + + + ); +} + +const styles = StyleSheet.create({ + modalOverlay: { + flex: 1, + backgroundColor: "rgba(0,0,0,0.55)", + alignItems: "center", + justifyContent: "center", + padding: 20, + }, + modalCard: { + width: "100%", + maxWidth: 360, + maxHeight: "88%", + borderRadius: 16, + paddingHorizontal: 16, + paddingTop: 14, + paddingBottom: 12, + backgroundColor: "#111827", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.12)", + }, + modalHeader: { + flexDirection: "row", + alignItems: "center", + justifyContent: "space-between", + marginBottom: 10, + }, + headerSideSpacer: { + width: 32, + height: 32, + }, + modalTitle: { + flex: 1, + fontSize: 18, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", + textAlign: "center", + }, + closeButton: { + width: 32, + height: 32, + borderRadius: 16, + alignItems: "center", + justifyContent: "center", + backgroundColor: "rgba(255,255,255,0.08)", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.14)", + }, + scrollContent: { + gap: 10, + paddingTop: 6, + paddingBottom: 6, + }, + featureToggleRow: { + flexDirection: "row", + alignItems: "center", + gap: 12, + minHeight: 40, + }, + featureIconBox: { + width: 28, + height: 28, + borderRadius: 8, + backgroundColor: "rgba(255,255,255,0.06)", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.12)", + alignItems: "center", + justifyContent: "center", + overflow: "hidden", + }, + boundaryIconInner: { + width: 16, + height: 16, + borderRadius: 4, + borderWidth: 1.5, + borderColor: "rgba(255,255,255,0.7)", + borderStyle: "dashed", + }, + fillStripe: { + position: "absolute", + width: 28, + height: 2, + backgroundColor: "rgba(255,255,255,0.45)", + transform: [{ rotate: "42deg" }], + left: -2, + top: 8, + }, + fillStripeMid: { + top: 13, + opacity: 0.75, + }, + fillStripeFar: { + top: 18, + opacity: 0.5, + }, + featureToggleLabel: { + flex: 1, + fontSize: 15, + fontFamily: "Poppins-Medium", + color: "#ffffff", + }, + switchTrack: { + width: 46, + height: 28, + borderRadius: 14, + padding: 3, + backgroundColor: "rgba(255,255,255,0.16)", + }, + switchTrackOn: { + backgroundColor: ACCENT, + }, + switchThumb: { + width: 22, + height: 22, + borderRadius: 11, + backgroundColor: "#ffffff", + alignSelf: "flex-start", + }, + switchThumbOn: { + alignSelf: "flex-end", + }, + switchDisabled: { + opacity: 0.45, + }, + settingBlock: { + gap: 6, + }, + compactSliderBlock: { + gap: 3, + }, + fillOpacityBlock: { + marginBottom: 4, + }, + sectionDivider: { + height: 1, + backgroundColor: "rgba(255,255,255,0.12)", + marginTop: 0, + marginBottom: 0, + }, + modeToggleWrap: { + flexDirection: "row", + borderRadius: 10, + backgroundColor: "rgba(255, 255, 255, 0.07)", + padding: 3, + gap: 4, + }, + modeToggleButton: { + flex: 1, + minHeight: 34, + borderRadius: 8, + alignItems: "center", + justifyContent: "center", + }, + modeToggleButtonActive: { + backgroundColor: "rgba(251, 191, 36, 0.65)", + }, + modeToggleLabel: { + fontSize: 12, + fontFamily: "Poppins-Regular", + color: "rgba(255,255,255,0.85)", + }, + modeToggleLabelActive: { + color: "#ffffff", + fontFamily: "Poppins-SemiBold", + }, + settingBlockDisabled: { + opacity: 0.42, + }, + fieldLabel: { + fontSize: 12, + fontFamily: "Poppins-Medium", + color: "rgba(255,255,255,0.62)", + }, + colorInputRow: { + flexDirection: "row", + alignItems: "center", + gap: 10, + }, + colorSwatchSquare: { + width: 40, + height: 40, + borderRadius: 9, + borderWidth: 1, + borderColor: "rgba(255,255,255,0.2)", + }, + colorSwatchSquareDisabled: { + backgroundColor: "rgba(255,255,255,0.1)", + }, + hexInput: { + flex: 1, + height: 40, + borderRadius: 9, + paddingHorizontal: 12, + fontSize: 14, + fontFamily: "Poppins-Medium", + color: "#ffffff", + backgroundColor: "rgba(255,255,255,0.06)", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.12)", + }, + hexInputReadonly: { + justifyContent: "center", + }, + hexReadonlyText: { + fontSize: 14, + fontFamily: "Poppins-Medium", + color: "#ffffff", + }, + hexInputDisabled: { + color: "rgba(255,255,255,0.4)", + }, + eyedropperButton: { + width: 40, + height: 40, + borderRadius: 9, + alignItems: "center", + justifyContent: "center", + backgroundColor: "rgba(255,255,255,0.06)", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.12)", + }, + eyedropperButtonActive: { + borderColor: ACCENT, + backgroundColor: "rgba(251, 191, 36, 0.12)", + }, + hueSlider: { + width: "100%", + height: 34, + marginTop: 0, + }, + sliderControlRow: { + flexDirection: "row", + alignItems: "flex-start", + gap: 10, + }, + sliderColumn: { + flex: 1, + gap: 4, + }, + controlSlider: { + width: "100%", + height: 32, + }, + tickRow: { + flexDirection: "row", + justifyContent: "space-between", + paddingHorizontal: 4, + marginTop: -2, + }, + tickMark: { + width: 1, + height: 6, + backgroundColor: "rgba(255,255,255,0.28)", + }, + sliderEndLabels: { + flexDirection: "row", + justifyContent: "space-between", + paddingHorizontal: 2, + marginTop: -2, + }, + sliderEndLabel: { + fontSize: 11, + fontFamily: "Poppins-Regular", + color: "rgba(255,255,255,0.5)", + }, + valueFieldGroup: { + flexDirection: "row", + alignItems: "center", + gap: 4, + marginTop: 2, + }, + valueInput: { + width: 44, + height: 36, + borderRadius: 8, + textAlign: "center", + fontSize: 14, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", + backgroundColor: "rgba(255,255,255,0.06)", + borderWidth: 1, + borderColor: "rgba(255,255,255,0.12)", + paddingHorizontal: 4, + paddingVertical: 0, + }, + valueUnit: { + fontSize: 13, + fontFamily: "Poppins-Medium", + color: "rgba(255,255,255,0.55)", + minWidth: 18, + }, + modalActions: { + marginTop: 10, + flexDirection: "row", + gap: 10, + alignItems: "center", + }, + actionButton: { + flex: 1, + minHeight: 42, + borderRadius: 11, + alignItems: "center", + justifyContent: "center", + flexDirection: "row", + gap: 6, + }, + resetButton: { + borderWidth: 1, + borderColor: "rgba(255,255,255,0.22)", + backgroundColor: "rgba(255,255,255,0.04)", + }, + applyButton: { + backgroundColor: ACCENT, + }, + applyButtonDisabled: { + backgroundColor: "rgba(148, 163, 184, 0.35)", + }, + resetText: { + fontSize: 14, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", + }, + applyText: { + fontSize: 14, + fontFamily: "Poppins-SemiBold", + color: ACCENT_DARK, + }, + applyTextDisabled: { + color: "rgba(255,255,255,0.65)", + }, + pressed: { + opacity: 0.78, + }, +}); diff --git a/components/map/map-canvas.tsx b/components/map/map-canvas.tsx new file mode 100644 index 0000000..f712823 --- /dev/null +++ b/components/map/map-canvas.tsx @@ -0,0 +1,405 @@ +import { + forwardRef, + useCallback, + useEffect, + useImperativeHandle, + useRef, + useState, +} from "react"; +import { StyleSheet, View } from "react-native"; +import Animated, { + Easing, + runOnJS, + useAnimatedStyle, + useSharedValue, + withDelay, + withSequence, + withTiming, +} from "react-native-reanimated"; +import type { Region } from "react-native-maps"; + +import { + GlobeView, + type GlobeCameraViewState, + type GlobeViewHandle, +} from "@/components/map/globe-view"; +import { MapTapRipple } from "@/components/map/map-tap-ripple"; +import { + WorldMapView, + type MapZoomTier, + type WorldMapViewHandle, +} from "@/components/map/world-map-view"; +import type { MapCluster } from "@/lib/map-clusters"; +import type { MapPressCoordinate } from "@/lib/map-map-tap-hit"; +import { + MAP_CONTINENT_FOCUS_FADE_MS, + MAP_SCRIM_MAX_OPACITY, +} from "@/constants/map-continent-focus"; +import { + GLOBE_CROSSFADE_MS, + MAP_DIM_HOLD_MS, + type MapViewTransition, + shouldShowFlatMapMarkers, + shouldShowGlobeLayer, +} from "@/lib/map-view-transition"; +import type { MapMarkerPresentation } from "@/lib/map-region-markers"; +import { useMapStore } from "@/store/use-map-store"; +import type { CountryMarkerDisplayMode } from "@/store/use-map-ui-store"; +import type { MapCountry } from "@/types/country"; + +export type MapCanvasHandle = { + animateToRegion: (region: Region, duration?: number) => void; + resetWorldView: () => void; + zoomBy: (direction: "in" | "out") => void; + focusCountryOnGlobe: (country: MapCountry, duration?: number) => void; +}; + +type MapCanvasProps = { + countries: MapCountry[]; + boundaryCountries: MapCountry[]; + clusters: MapCluster[]; + selectedName: string | null; + focusTransitionName?: string | null; + focusedRegion: string | null; + previewRegion?: string | null; + tapRippleAt?: MapPressCoordinate | null; + tapRippleToken?: number; + zoomTier: MapZoomTier; + countryMarkerMode?: CountryMarkerDisplayMode; + markerPresentation?: MapMarkerPresentation; + markerRevealGeneration?: number; + mapViewTransition: MapViewTransition; + onGlobeTransitionComplete: () => void; + onFlatTransitionComplete: () => void; + onGlobeCameraViewChange?: (state: GlobeCameraViewState) => void; + onCountryPress: (country: MapCountry) => void; + onClusterPress: (cluster: MapCluster) => void; + onMapPress: (coordinate?: MapPressCoordinate) => void; + onFlatMapReady?: () => void; + onFlatRegionChange?: (region: Region) => void; + onRegionChangeComplete?: (region: Region) => void; + lockUserGestures?: boolean; + /** Keeps map markers updating while the camera animates (e.g. Explore → Map). */ + suspendMarkerSnapshot?: boolean; + markerRefreshToken?: number; +}; + +export const MapCanvas = forwardRef( + function MapCanvas( + { + countries, + boundaryCountries, + clusters, + selectedName, + focusTransitionName = null, + focusedRegion, + previewRegion = null, + tapRippleAt = null, + tapRippleToken = 0, + zoomTier, + countryMarkerMode = "flag", + markerPresentation = "full", + markerRevealGeneration = 0, + mapViewTransition, + onGlobeTransitionComplete, + onFlatTransitionComplete, + onGlobeCameraViewChange, + onCountryPress, + onClusterPress, + onMapPress, + onFlatMapReady, + onFlatRegionChange, + onRegionChangeComplete, + lockUserGestures = false, + suspendMarkerSnapshot = false, + markerRefreshToken = 0, + }, + ref, + ) { + const mapMode = useMapStore((s) => s.mapMode); + const mapRef = useRef(null); + const globeRef = useRef(null); + const [rippleScreen, setRippleScreen] = useState<{ + x: number; + y: number; + } | null>(null); + + const globeOpacity = useSharedValue(shouldShowGlobeLayer(mapMode, mapViewTransition) ? 1 : 0); + const flatDimOpacity = useSharedValue(0); + const continentFocusBlend = useSharedValue(focusedRegion ? 1 : 0); + + const globePaintedRef = useRef(false); + const enteringGlobeStartedRef = useRef(false); + const enteringFlatStartedRef = useRef(false); + + const showGlobe = shouldShowGlobeLayer(mapMode, mapViewTransition); + const isGlobeInteractive = + mapMode === "3d" && mapViewTransition === "ready"; + const showFlatMarkers = shouldShowFlatMapMarkers(mapMode); + + useImperativeHandle( + ref, + () => ({ + animateToRegion: (region, duration) => + mapRef.current?.animateToRegion(region, duration), + resetWorldView: () => { + if (mapMode === "3d") { + globeRef.current?.resetCamera(); + return; + } + mapRef.current?.resetWorldView(); + }, + zoomBy: (direction) => { + if (mapMode === "3d") { + globeRef.current?.zoomBy(direction); + return; + } + mapRef.current?.zoomBy(direction); + }, + focusCountryOnGlobe: (country, duration) => + globeRef.current?.focusCountry(country, duration), + }), + [mapMode], + ); + + const finishGlobeEnter = useCallback(() => { + onGlobeTransitionComplete(); + }, [onGlobeTransitionComplete]); + + const finishFlatEnter = useCallback(() => { + onFlatTransitionComplete(); + }, [onFlatTransitionComplete]); + + const startGlobeFadeIn = useCallback(() => { + flatDimOpacity.value = withDelay( + MAP_DIM_HOLD_MS, + withTiming(0, { duration: GLOBE_CROSSFADE_MS }), + ); + globeOpacity.value = withDelay( + MAP_DIM_HOLD_MS, + withTiming(1, { duration: GLOBE_CROSSFADE_MS }, (finished) => { + if (finished) { + runOnJS(finishGlobeEnter)(); + } + }), + ); + }, [finishGlobeEnter, flatDimOpacity, globeOpacity]); + + const handleGlobePainted = useCallback(() => { + if (mapViewTransition !== "enteringGlobe" || globePaintedRef.current) { + return; + } + globePaintedRef.current = true; + startGlobeFadeIn(); + }, [mapViewTransition, startGlobeFadeIn]); + + useEffect(() => { + if (mapViewTransition !== "enteringGlobe") { + enteringGlobeStartedRef.current = false; + globePaintedRef.current = false; + return; + } + if (enteringGlobeStartedRef.current) return; + enteringGlobeStartedRef.current = true; + + globeOpacity.value = 0; + flatDimOpacity.value = withTiming(0.45, { duration: MAP_DIM_HOLD_MS }); + + const fallback = setTimeout(() => { + if (globePaintedRef.current) return; + globePaintedRef.current = true; + startGlobeFadeIn(); + }, 2500); + + return () => clearTimeout(fallback); + }, [flatDimOpacity, globeOpacity, mapViewTransition, startGlobeFadeIn]); + + const startFlatFadeIn = useCallback(() => { + flatDimOpacity.value = withSequence( + withTiming(0.45, { duration: MAP_DIM_HOLD_MS }), + withTiming(0, { duration: GLOBE_CROSSFADE_MS }), + ); + globeOpacity.value = withDelay( + MAP_DIM_HOLD_MS, + withTiming(0, { duration: GLOBE_CROSSFADE_MS }, (finished) => { + if (finished) { + runOnJS(finishFlatEnter)(); + } + }), + ); + }, [finishFlatEnter, flatDimOpacity, globeOpacity]); + + useEffect(() => { + if (mapViewTransition !== "enteringFlat") { + enteringFlatStartedRef.current = false; + return; + } + if (enteringFlatStartedRef.current) return; + enteringFlatStartedRef.current = true; + + globeOpacity.value = 1; + flatDimOpacity.value = 0; + startFlatFadeIn(); + }, [flatDimOpacity, globeOpacity, mapViewTransition, startFlatFadeIn]); + + useEffect(() => { + if (mapViewTransition === "ready" && mapMode === "3d") { + globeOpacity.value = 1; + flatDimOpacity.value = 0; + } + if (mapViewTransition === "idle" && mapMode === "2d") { + globeOpacity.value = 0; + flatDimOpacity.value = 0; + } + }, [flatDimOpacity, globeOpacity, mapMode, mapViewTransition]); + + const globeLayerStyle = useAnimatedStyle(() => ({ + opacity: globeOpacity.value, + })); + + const flatDimStyle = useAnimatedStyle(() => ({ + opacity: flatDimOpacity.value, + })); + + useEffect(() => { + continentFocusBlend.value = withTiming(focusedRegion ? 1 : 0, { + duration: MAP_CONTINENT_FOCUS_FADE_MS, + easing: Easing.inOut(Easing.ease), + }); + }, [continentFocusBlend, focusedRegion]); + + const continentFocusScrimStyle = useAnimatedStyle(() => ({ + opacity: continentFocusBlend.value * MAP_SCRIM_MAX_OPACITY, + })); + + useEffect(() => { + if (!tapRippleAt) { + setRippleScreen(null); + return; + } + + let cancelled = false; + + const resolveRipple = async () => { + if (mapMode === "3d" && mapViewTransition === "ready") { + const projected = globeRef.current?.projectLatLng( + tapRippleAt.latitude, + tapRippleAt.longitude, + ); + if (!cancelled && projected?.visible) { + setRippleScreen({ x: projected.x, y: projected.y }); + } + return; + } + + if (mapMode === "2d") { + const point = await mapRef.current?.pointForCoordinate(tapRippleAt); + if (!cancelled && point) { + setRippleScreen(point); + } + } + }; + + void resolveRipple(); + + return () => { + cancelled = true; + }; + }, [mapMode, mapViewTransition, tapRippleAt, tapRippleToken]); + + const mapProps = { + countries, + boundaryCountries, + selectedName, + focusTransitionName, + focusedRegion, + previewRegion, + zoomTier, + countryMarkerMode: showFlatMarkers ? countryMarkerMode : "hidden", + markerPresentation, + markerRevealGeneration, + onCountryPress, + onMapPress, + onMapReady: onFlatMapReady, + onRegionChange: onFlatRegionChange, + onRegionChangeComplete, + lockUserGestures, + suspendMarkerSnapshot, + markerRefreshToken, + }; + + return ( + + + + + + + {showGlobe ? ( + + + + + ) : null} + + {rippleScreen ? ( + + ) : null} + + ); + }, +); + +const styles = StyleSheet.create({ + root: { + ...StyleSheet.absoluteFillObject, + backgroundColor: "#0b132b", + }, + layer: { + ...StyleSheet.absoluteFillObject, + }, + flatDim: { + ...StyleSheet.absoluteFillObject, + backgroundColor: "#0b132b", + }, + continentFocusScrim: { + ...StyleSheet.absoluteFillObject, + backgroundColor: "#0b132b", + }, +}); diff --git a/components/map/map-chip-scroll-row.tsx b/components/map/map-chip-scroll-row.tsx new file mode 100644 index 0000000..e4861e8 --- /dev/null +++ b/components/map/map-chip-scroll-row.tsx @@ -0,0 +1,31 @@ +import type { ReactNode } from "react"; +import { ScrollView, StyleSheet, View } from "react-native"; + +type MapChipScrollRowProps = { + children: ReactNode; +}; + +export function MapChipScrollRow({ children }: MapChipScrollRowProps) { + return ( + + + {children} + + + ); +} + +const styles = StyleSheet.create({ + wrap: { + position: "relative", + }, + row: { + paddingHorizontal: 16, + paddingVertical: 2, + alignItems: "center", + }, +}); diff --git a/components/map/map-circular-fab.tsx b/components/map/map-circular-fab.tsx new file mode 100644 index 0000000..6adbca0 --- /dev/null +++ b/components/map/map-circular-fab.tsx @@ -0,0 +1,97 @@ +import { Ionicons } from "@expo/vector-icons"; +import { Pressable, StyleSheet } from "react-native"; + +import { MAP_CIRCULAR_FAB } from "@/constants/map-chrome-styles"; + +type MapCircularFabVariant = "control" | "accent"; + +type MapCircularFabProps = { + icon: keyof typeof Ionicons.glyphMap; + accessibilityLabel: string; + accessibilityHint?: string; + accessibilityState?: { expanded?: boolean; selected?: boolean; disabled?: boolean }; + onPress: () => void; + variant?: MapCircularFabVariant; + deemphasized?: boolean; + disabled?: boolean; +}; + +export function MapCircularFab({ + icon, + accessibilityLabel, + accessibilityHint, + accessibilityState, + onPress, + variant = "control", + deemphasized = false, + disabled = false, +}: MapCircularFabProps) { + const isAccent = variant === "accent"; + const size = isAccent ? MAP_CIRCULAR_FAB.accentSize : MAP_CIRCULAR_FAB.controlSize; + const borderRadius = isAccent + ? MAP_CIRCULAR_FAB.accentBorderRadius + : MAP_CIRCULAR_FAB.controlBorderRadius; + const iconSize = isAccent + ? MAP_CIRCULAR_FAB.accentIconSize + : MAP_CIRCULAR_FAB.controlIconSize; + const iconColor = isAccent + ? MAP_CIRCULAR_FAB.accentIconColor + : MAP_CIRCULAR_FAB.controlIconColor; + + return ( + [ + styles.fab, + { + width: size, + height: size, + borderRadius, + }, + isAccent ? styles.fabAccent : styles.fabControl, + deemphasized && styles.fabDeemphasized, + pressed && !disabled && (isAccent ? styles.pressedAccent : styles.pressedControl), + ]} + > + + + ); +} + +const styles = StyleSheet.create({ + fab: { + alignItems: "center", + justifyContent: "center", + }, + fabControl: { + backgroundColor: MAP_CIRCULAR_FAB.controlBackgroundColor, + borderWidth: 1, + borderColor: MAP_CIRCULAR_FAB.controlBorderColor, + }, + fabAccent: { + backgroundColor: MAP_CIRCULAR_FAB.accentBackgroundColor, + borderWidth: 1, + borderColor: MAP_CIRCULAR_FAB.accentBorderColor, + shadowColor: MAP_CIRCULAR_FAB.accentBorderColor, + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.35, + shadowRadius: 6, + elevation: 4, + }, + fabDeemphasized: { + opacity: 0.88, + }, + pressedControl: { + opacity: 0.92, + backgroundColor: MAP_CIRCULAR_FAB.controlPressedBackgroundColor, + }, + pressedAccent: { + opacity: 0.95, + backgroundColor: MAP_CIRCULAR_FAB.accentPressedBackground, + }, +}); diff --git a/components/map/map-continent-focus-layers.tsx b/components/map/map-continent-focus-layers.tsx new file mode 100644 index 0000000..d51c4b3 --- /dev/null +++ b/components/map/map-continent-focus-layers.tsx @@ -0,0 +1,242 @@ +import { useEffect, useMemo, useState } from "react"; +import { Polygon } from "react-native-maps"; +import { + Easing, + runOnJS, + useAnimatedReaction, + useSharedValue, + withTiming, +} from "react-native-reanimated"; +import { + MAP_CONTINENT_FOCUS_FADE_MS, + MAP_CONTINENT_FOCUS_FILL_OPACITY, + MAP_CONTINENT_FOCUS_FILL_OPACITY_WITH_COUNTRY, + MAP_CONTINENT_FOCUS_POLYGON_Z, + MAP_CONTINENT_FOCUS_SCRIM_Z, + MAP_CONTINENT_PREVIEW_FILL_OPACITY, + MAP_CONTINENT_PREVIEW_SCRIM_OPACITY, + MAP_SCRIM_MAX_OPACITY, + MAP_SCRIM_MAX_OPACITY_WITH_COUNTRY, + MAP_WORLD_SCRIM_RING, + mapFocusAccentRgba, + mapFocusScrimRgba, +} from "@/constants/map-continent-focus"; +import { + filterBoundaryPolygonsByMapContext, + type CountryBoundaryPolygon, +} from "@/lib/map-country-boundaries"; +import type { MapCountry } from "@/types/country"; + +/** Limit polygon color updates during fades — per-frame setState can crash MapView. */ +const BLEND_REACTION_STEPS = 8; + +function isRenderablePolygon(polygon: CountryBoundaryPolygon): boolean { + if (polygon.coordinates.length < 3) return false; + + return polygon.coordinates.every( + (point) => + Number.isFinite(point.latitude) && + Number.isFinite(point.longitude) && + Math.abs(point.latitude) <= 90, + ); +} + +type MapContinentFocusLayersProps = { + focusedRegion: string | null; + /** Active country pin — softens overlay so it complements selection. */ + selectedCountryName?: string | null; + /** Pending continent before intent delay commits. */ + previewRegion?: string | null; + allPolygons: CountryBoundaryPolygon[]; + boundaryCountries: MapCountry[]; +}; + +export function MapContinentFocusLayers({ + focusedRegion, + selectedCountryName = null, + previewRegion = null, + allPolygons, + boundaryCountries, +}: MapContinentFocusLayersProps) { + const blend = useSharedValue(0); + const previewBlend = useSharedValue(0); + const lastBlendStep = useSharedValue(-1); + const lastPreviewBlendStep = useSharedValue(-1); + const [displayRegion, setDisplayRegion] = useState(null); + const [displayPreviewRegion, setDisplayPreviewRegion] = useState< + string | null + >(null); + const [renderBlend, setRenderBlend] = useState(0); + const [renderPreviewBlend, setRenderPreviewBlend] = useState(0); + + useEffect(() => { + if (focusedRegion) { + setDisplayRegion(focusedRegion); + blend.value = withTiming(1, { + duration: MAP_CONTINENT_FOCUS_FADE_MS, + easing: Easing.inOut(Easing.ease), + }); + return; + } + + blend.value = withTiming( + 0, + { + duration: MAP_CONTINENT_FOCUS_FADE_MS, + easing: Easing.inOut(Easing.ease), + }, + (finished) => { + if (finished) { + runOnJS(setDisplayRegion)(null); + } + }, + ); + }, [blend, focusedRegion]); + + useEffect(() => { + if (previewRegion && !focusedRegion) { + setDisplayPreviewRegion(previewRegion); + previewBlend.value = withTiming(1, { + duration: MAP_CONTINENT_FOCUS_FADE_MS * 0.6, + easing: Easing.out(Easing.ease), + }); + return; + } + + if (previewRegion && focusedRegion) { + setDisplayPreviewRegion(null); + previewBlend.value = 0; + return; + } + + previewBlend.value = withTiming( + 0, + { + duration: MAP_CONTINENT_FOCUS_FADE_MS * 0.5, + easing: Easing.inOut(Easing.ease), + }, + (finished) => { + if (finished) { + runOnJS(setDisplayPreviewRegion)(null); + } + }, + ); + }, [focusedRegion, previewBlend, previewRegion]); + + useAnimatedReaction( + () => blend.value, + (value) => { + const step = Math.round(value * BLEND_REACTION_STEPS) / BLEND_REACTION_STEPS; + if (step === lastBlendStep.value) return; + lastBlendStep.value = step; + runOnJS(setRenderBlend)(step); + }, + [blend, lastBlendStep], + ); + + useAnimatedReaction( + () => previewBlend.value, + (value) => { + const step = + Math.round(value * BLEND_REACTION_STEPS) / BLEND_REACTION_STEPS; + if (step === lastPreviewBlendStep.value) return; + lastPreviewBlendStep.value = step; + runOnJS(setRenderPreviewBlend)(step); + }, + [lastPreviewBlendStep, previewBlend], + ); + + const continentPolygons = useMemo(() => { + if (!displayRegion) return []; + return filterBoundaryPolygonsByMapContext(allPolygons, { + selectedCountryName: null, + focusedRegion: displayRegion, + countries: boundaryCountries, + }).filter(isRenderablePolygon); + }, [allPolygons, boundaryCountries, displayRegion]); + + const previewPolygons = useMemo(() => { + if (!displayPreviewRegion) return []; + return filterBoundaryPolygonsByMapContext(allPolygons, { + selectedCountryName: null, + focusedRegion: displayPreviewRegion, + countries: boundaryCountries, + }).filter(isRenderablePolygon); + }, [allPolygons, boundaryCountries, displayPreviewRegion]); + + const scrimFill = mapFocusScrimRgba( + renderBlend * + (selectedCountryName + ? MAP_SCRIM_MAX_OPACITY_WITH_COUNTRY + : MAP_SCRIM_MAX_OPACITY), + ); + const fillColor = mapFocusAccentRgba( + renderBlend * + (selectedCountryName + ? MAP_CONTINENT_FOCUS_FILL_OPACITY_WITH_COUNTRY + : MAP_CONTINENT_FOCUS_FILL_OPACITY), + ); + const previewScrimFill = mapFocusScrimRgba( + renderPreviewBlend * MAP_CONTINENT_PREVIEW_SCRIM_OPACITY, + ); + const previewFillColor = mapFocusAccentRgba( + renderPreviewBlend * MAP_CONTINENT_PREVIEW_FILL_OPACITY, + ); + + const showCommitted = displayRegion && renderBlend > 0.001; + const showPreview = + displayPreviewRegion && renderPreviewBlend > 0.001 && !focusedRegion; + + if (!showCommitted && !showPreview) { + return null; + } + + return ( + <> + {showPreview ? ( + + ) : null} + {showCommitted ? ( + + ) : null} + {showPreview + ? previewPolygons.map((polygon) => ( + + )) + : null} + {showCommitted + ? continentPolygons.map((polygon) => ( + + )) + : null} + + ); +} diff --git a/components/map/map-controls.tsx b/components/map/map-controls.tsx index 2fba274..7068c50 100644 --- a/components/map/map-controls.tsx +++ b/components/map/map-controls.tsx @@ -1,93 +1,414 @@ import { Ionicons } from "@expo/vector-icons"; -import { useState } from "react"; +import * as Haptics from "expo-haptics"; +import { useCallback, useEffect, useState } from "react"; import { Pressable, StyleSheet, View } from "react-native"; +import { MapBoundaryControlsModal } from "@/components/map/map-boundary-controls-modal"; +import { MapCircularFab } from "@/components/map/map-circular-fab"; +import { applyBoundaryStyleDraft } from "@/constants/map-boundary-style"; +import { MAP_CONTROL_STACK } from "@/constants/map-chrome-styles"; +import type { MapViewTransition } from "@/lib/map-view-transition"; +import type { MapMode } from "@/store/use-map-store"; +import { + isGlobeYellowPinsVisible, + toggleGlobeYellowPins, + useMapUiStore, +} from "@/store/use-map-ui-store"; + type MapControlsProps = { + mapMode: MapMode; + mapViewTransition: MapViewTransition; + onMapModeToggle: () => void; onReset: () => void; onZoomIn: () => void; onZoomOut: () => void; + /** When false, the flag visibility toggle is hidden (e.g. world view, 3D, no markers). */ + showFlagToggle?: boolean; + /** When false, boundary style controls are hidden. */ + showBoundaryControls?: boolean; + /** Distance from the bottom safe edge (tab bar / region chrome clearance). */ + bottom?: number; + /** Collapse the tool rail (e.g. while a country is focused). */ + defaultExpanded?: boolean; + /** When true, force the tool rail closed until the user expands it again. */ + keepCollapsed?: boolean; + onRandomCountryPress?: () => void; + randomDeemphasized?: boolean; + /** Blocks the random FAB while a camera flight is sequencing (prevents overlapping animateToRegion). */ + randomDisabled?: boolean; }; export function MapControls({ + mapMode, + mapViewTransition, + onMapModeToggle, onReset, onZoomIn, onZoomOut, + showFlagToggle = false, + showBoundaryControls = true, + bottom = 98, + defaultExpanded = false, + keepCollapsed = false, + onRandomCountryPress, + randomDeemphasized = false, + randomDisabled = false, }: MapControlsProps) { - const [showNavZoomControls, setShowNavZoomControls] = useState(true); + const [isActionRailExpanded, setIsActionRailExpanded] = + useState(defaultExpanded); - return ( - - {showNavZoomControls ? ( - - [styles.control, pressed && styles.pressed]} - > - - - - [styles.control, pressed && styles.pressed]} - > - - - - [styles.control, pressed && styles.pressed]} - > - - - - ) : null} + useEffect(() => { + if (keepCollapsed) { + setIsActionRailExpanded(false); + } + }, [keepCollapsed]); + const [isBoundaryModalOpen, setIsBoundaryModalOpen] = useState(false); + const countryMarkerMode = useMapUiStore((s) => s.countryMarkerMode); + const setCountryMarkerMode = useMapUiStore((s) => s.setCountryMarkerMode); + const showBoundaryLines = useMapUiStore((s) => s.showBoundaryLines); + const setShowBoundaryLines = useMapUiStore((s) => s.setShowBoundaryLines); + const boundaryStyle = useMapUiStore((s) => s.boundaryStyle); + const setBoundaryStyle = useMapUiStore((s) => s.setBoundaryStyle); + const focusedRegion = useMapUiStore((s) => s.focusedRegion); + const boundaryPreviewZoomTier = focusedRegion ? "region" : "world"; + + const is3d = mapMode === "3d"; + const isTransitioning = + mapViewTransition === "enteringGlobe" || + mapViewTransition === "enteringFlat"; + const isGlobeLoading = mapViewTransition === "enteringGlobe"; + const isFlatLoading = mapViewTransition === "enteringFlat"; + + const handleCycleCountryMarkerMode = useCallback(() => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + if (is3d) { + setCountryMarkerMode(toggleGlobeYellowPins(countryMarkerMode)); + return; + } + setCountryMarkerMode(countryMarkerMode === "flag" ? "hidden" : "flag"); + }, [countryMarkerMode, is3d, setCountryMarkerMode]); + + const countryMarkerModeLabel = useCallback( + (mode: "flag" | "circle" | "hidden") => { + if (is3d) { + return isGlobeYellowPinsVisible(mode) + ? "Hide globe country pins" + : "Show globe country pins"; + } + return mode === "flag" ? "Hide country flags" : "Show country flags"; + }, + [is3d], + ); + + const isFlagsVisible = countryMarkerMode === "flag"; + const areGlobePinsVisible = isGlobeYellowPinsVisible(countryMarkerMode); + const markerModeIcon = is3d + ? areGlobePinsVisible + ? ("location" as const) + : ("location-outline" as const) + : isFlagsVisible + ? ("flag" as const) + : ("flag-outline" as const); + const markerModeColor = + (is3d && areGlobePinsVisible) || (!is3d && isFlagsVisible) + ? "#ffffff" + : "#4b5563"; - { - setShowNavZoomControls((prev) => !prev); - }} - style={({ pressed }) => [ - styles.legendButton, - pressed && styles.pressed, - ]} + const handleToggleBoundaryLines = useCallback(() => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + const next = !showBoundaryLines; + setShowBoundaryLines(next); + setBoundaryStyle( + applyBoundaryStyleDraft({ + ...boundaryStyle, + strokeColorEnabled: next, + strokeWidthEnabled: next, + }), + ); + }, [ + boundaryStyle, + setBoundaryStyle, + setShowBoundaryLines, + showBoundaryLines, + ]); + + const handleMapModeToggle = useCallback(() => { + if (isTransitioning) return; + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); + onMapModeToggle(); + }, [isTransitioning, onMapModeToggle]); + + const showDisplayStack = showFlagToggle || showBoundaryControls; + + const toggleActionRail = useCallback(() => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + setIsActionRailExpanded((prev) => !prev); + }, []); + + const legendAccessibilityLabel = isActionRailExpanded + ? "Hide map tools" + : "Show map tools"; + + return ( + <> + - - {/* Legend */} - {/* */} - - + {isActionRailExpanded ? ( + <> + + { + if (!is3d) return; + handleMapModeToggle(); + }} + style={({ pressed }) => [ + styles.control, + !is3d && styles.modeControlActiveTop, + isFlatLoading && styles.modeControlLoading, + pressed && + !isTransitioning && + !is3d && + styles.modeControlPressedTop, + pressed && !isTransitioning && is3d && styles.pressed, + ]} + > + + + + { + if (is3d) return; + handleMapModeToggle(); + }} + style={({ pressed }) => [ + styles.control, + is3d && styles.modeControlActiveBottom, + isGlobeLoading && styles.modeControlLoading, + pressed && + !isTransitioning && + is3d && + styles.modeControlPressedBottom, + pressed && !isTransitioning && !is3d && styles.pressed, + ]} + > + + + + + + [ + styles.control, + pressed && styles.pressed, + ]} + > + + + + [ + styles.control, + pressed && styles.pressed, + ]} + > + + + + [ + styles.control, + pressed && styles.pressed, + ]} + > + + + + + {showDisplayStack ? ( + + {showFlagToggle ? ( + <> + [ + styles.control, + pressed && styles.pressed, + ]} + > + + + + + ) : null} + {showBoundaryControls ? ( + <> + [ + styles.control, + pressed && styles.pressed, + ]} + > + + + + setIsBoundaryModalOpen(true)} + style={({ pressed }) => [ + styles.control, + pressed && styles.pressed, + ]} + > + + + + ) : null} + + ) : null} + + ) : null} + + + + {onRandomCountryPress ? ( + + ) : null} + + + {isBoundaryModalOpen ? ( + setIsBoundaryModalOpen(false)} + /> + ) : null} + ); } const styles = StyleSheet.create({ column: { position: "absolute", - left: 16, - bottom: 200, - gap: 4, - zIndex: 5, + right: 16, + gap: 12, + zIndex: 6, + alignItems: "center", + }, + /** Match stack pill radius so active fill is not clipped by overflow: hidden. */ + modeControlLoading: { + opacity: 0.45, + }, + modeControlActiveTop: { + backgroundColor: "#fbbf24", + borderTopLeftRadius: 35, + borderTopRightRadius: 35, + }, + modeControlActiveBottom: { + backgroundColor: "#fbbf24", + borderBottomLeftRadius: 35, + borderBottomRightRadius: 35, + }, + modeControlPressedTop: { + opacity: 0.95, + backgroundColor: "#e5ad1f", + borderTopLeftRadius: 35, + borderTopRightRadius: 35, + }, + modeControlPressedBottom: { + opacity: 0.95, + backgroundColor: "#e5ad1f", + borderBottomLeftRadius: 35, + borderBottomRightRadius: 35, }, stack: { - borderRadius: 32, - backgroundColor: "#101828", + borderRadius: 36, + backgroundColor: MAP_CONTROL_STACK.backgroundColor, borderWidth: 1, - borderColor: "rgba(255, 255, 255, 0.1)", + borderColor: MAP_CONTROL_STACK.borderColor, overflow: "hidden", }, control: { - width: 40, + width: 44, height: 40, alignItems: "center", justifyContent: "center", @@ -96,25 +417,8 @@ const styles = StyleSheet.create({ height: 1, backgroundColor: "rgba(255, 255, 255, 0.1)", }, - legendButton: { - flexDirection: "row", - alignItems: "center", - gap: 6, - paddingHorizontal: 12, - paddingVertical: 8, - borderRadius: 12, - backgroundColor: "#101828", - borderWidth: 1, - borderColor: "rgba(255, 255, 255, 0.1)", - }, - legendText: { - fontSize: 13, - fontFamily: "Poppins-Medium", - color: "#ffffff", - }, pressed: { opacity: 0.95, - // golden color #FBBF24 - backgroundColor: "#29303C", + backgroundColor: MAP_CONTROL_STACK.pressedBackgroundColor, }, }); diff --git a/components/map/map-country-chrome.tsx b/components/map/map-country-chrome.tsx new file mode 100644 index 0000000..cb3e717 --- /dev/null +++ b/components/map/map-country-chrome.tsx @@ -0,0 +1,70 @@ +import { Ionicons } from "@expo/vector-icons"; +import * as Haptics from "expo-haptics"; +import { Pressable, StyleSheet, Text, View } from "react-native"; + +type MapCountryChromeProps = { + bottom: number; + actionLabel?: string; + accessibilityLabel?: string; + onAction: () => void; +}; + +export function MapCountryChrome({ + bottom, + actionLabel = "Back to Continent", + accessibilityLabel, + onAction, +}: MapCountryChromeProps) { + return ( + + + { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + onAction(); + }} + style={({ pressed }) => [styles.backRow, pressed && styles.pressed]} + > + + {actionLabel} + + + + ); +} + +const styles = StyleSheet.create({ + wrap: { + position: "absolute", + alignSelf: "center", + zIndex: 7, + }, + stack: { + minWidth: 200, + borderRadius: 20, + backgroundColor: "#101828", + borderWidth: 1, + borderColor: "rgba(255, 255, 255, 0.1)", + overflow: "hidden", + }, + backRow: { + flexDirection: "row", + alignItems: "center", + justifyContent: "center", + gap: 8, + paddingHorizontal: 14, + paddingVertical: 11, + minHeight: 44, + }, + backLabel: { + fontSize: 13, + fontFamily: "Poppins-Medium", + color: "#ffffff", + textAlign: "center", + }, + pressed: { + backgroundColor: "#29303C", + }, +}); diff --git a/components/map/map-country-focus-pill.tsx b/components/map/map-country-focus-pill.tsx new file mode 100644 index 0000000..4b03496 --- /dev/null +++ b/components/map/map-country-focus-pill.tsx @@ -0,0 +1,132 @@ +import { Ionicons } from "@expo/vector-icons"; +import * as Haptics from "expo-haptics"; +import { Pressable, StyleSheet, Text, View } from "react-native"; + +import { FlagBadge } from "@/components/explore/flag-badge"; +import type { MapCountry } from "@/types/country"; + +type MapCountryFocusPillProps = { + country: MapCountry; + bottom: number; + onOpenDetails: () => void; + onDismiss: () => void; +}; + +const PILL_HEIGHT = 44; + +function shortCountryName(name: string): string { + if (name.length <= 2) return name; + return `${name.slice(0, 2)}...`; +} + +export function MapCountryFocusPill({ + country, + bottom, + onOpenDetails, + onDismiss, +}: MapCountryFocusPillProps) { + const handleOpenDetails = () => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + onOpenDetails(); + }; + + const handleDismiss = () => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + onDismiss(); + }; + + return ( + + + [ + styles.detailsSegment, + pressed && styles.pressed, + ]} + > + + + {shortCountryName(country.name)} + + Details + + + + + + [ + styles.dismissSegment, + pressed && styles.pressed, + ]} + > + + + + + ); +} + +const styles = StyleSheet.create({ + wrap: { + position: "absolute", + left: 0, + right: 0, + alignItems: "center", + zIndex: 7, + }, + pill: { + flexDirection: "row", + alignItems: "center", + height: PILL_HEIGHT, + borderRadius: PILL_HEIGHT / 2, + backgroundColor: "#101828", + borderWidth: 1, + borderColor: "rgba(255, 255, 255, 0.1)", + overflow: "hidden", + }, + detailsSegment: { + flexDirection: "row", + alignItems: "center", + height: PILL_HEIGHT, + gap: 6, + paddingLeft: 14, + paddingRight: 12, + }, + dismissSegment: { + width: PILL_HEIGHT, + height: PILL_HEIGHT, + alignItems: "center", + justifyContent: "center", + }, + divider: { + width: 1, + height: PILL_HEIGHT, + backgroundColor: "rgba(255, 255, 255, 0.1)", + }, + countryLabel: { + width: 28, + fontSize: 13, + lineHeight: 18, + fontFamily: "Poppins-Medium", + color: "#ffffff", + textAlign: "left", + }, + detailsLabel: { + fontSize: 13, + lineHeight: 18, + fontFamily: "Poppins-Medium", + color: "#fbbf24", + }, + pressed: { + opacity: 0.95, + backgroundColor: "#29303C", + }, +}); diff --git a/components/map/map-country-marker.tsx b/components/map/map-country-marker.tsx index d8dc572..c36342f 100644 --- a/components/map/map-country-marker.tsx +++ b/components/map/map-country-marker.tsx @@ -1,27 +1,342 @@ -import { Ionicons } from "@expo/vector-icons"; import { Image } from "expo-image"; +import { memo, useCallback, useEffect, useRef, useState } from "react"; import { StyleSheet, Text, View } from "react-native"; import { Marker } from "react-native-maps"; +import Animated, { + cancelAnimation, + Easing, + useAnimatedStyle, + useSharedValue, + withSequence, + withTiming, +} from "react-native-reanimated"; -import { isTrendingCountry } from "@/constants/trending-countries"; import { resolveFlagCdnUrl } from "@/lib/flag-url"; -import { cca2FromFlagUrl } from "@/lib/map-country"; +import { logMapDebug } from "@/lib/map-debug"; +import { cca2FromFlagUrl, getMapDisplayLatLng } from "@/lib/map-country"; +import { + type MapMarkerPresentation, + MAP_FOCUS_TRANSITION_2D_MS, + MAP_FOCUS_TRANSITION_SCALE_PEAK, + MARKER_DEEMPHASIZED_OPACITY, +} from "@/lib/map-region-markers"; +import type { CountryMarkerDisplayMode } from "@/store/use-map-ui-store"; import type { MapCountry } from "@/types/country"; +const FOCUS_HALF_MS = MAP_FOCUS_TRANSITION_2D_MS / 2; +const SNAPSHOT_SETTLE_MS = 500; +/** Fixed marker anchor box — label is positioned outside this so selection does not shift the pin. */ +const MARKER_ANCHOR_SIZE = 48; +const PIN_SIZE = 36; + +/** Survives marker re-snapshots so flags do not flash on every map action. */ +const loadedFlagUris = new Set(); + +function isFlagUriCached(uri: string | null): boolean { + return !!uri && loadedFlagUris.has(uri); +} + +const FlagImage = memo(function FlagImage({ + flagUri, + style, + loaded, + onLoad, +}: { + flagUri: string; + style: object; + loaded: boolean; + onLoad: () => void; +}) { + return ( + { + logMapDebug("marker", "flag image error", { + flagUri, + error: event?.error, + }); + }} + /> + ); +}); + +type FlagPinBodyProps = { + selected: boolean; + focusTransitioning: boolean; + presentation: MapMarkerPresentation; + flagUri: string | null; + flagLoaded: boolean; + onFlagLoad: () => void; + onLayout: () => void; +}; + +function FlagPinBody({ + selected, + focusTransitioning, + presentation, + flagUri, + flagLoaded, + onFlagLoad, + onLayout, +}: FlagPinBodyProps) { + const isEntering = + presentation === "entering" && !selected && !focusTransitioning; + const flagStyle = selected + ? styles.flagSelected + : isEntering + ? styles.flagEntering + : styles.flag; + const wrapperStyle = isEntering ? styles.wrapperEntering : styles.wrapper; + const pinShellStyle = selected + ? [styles.pin, styles.pinSelected] + : isEntering + ? styles.pinEntering + : styles.pin; + + const pulse = useSharedValue(1); + + useEffect(() => { + if (!focusTransitioning) { + cancelAnimation(pulse); + pulse.value = 1; + return; + } + + pulse.value = withSequence( + withTiming(MAP_FOCUS_TRANSITION_SCALE_PEAK, { + duration: FOCUS_HALF_MS, + easing: Easing.out(Easing.quad), + }), + withTiming(1, { + duration: FOCUS_HALF_MS, + easing: Easing.in(Easing.quad), + }), + ); + return () => cancelAnimation(pulse); + }, [focusTransitioning, pulse]); + + const pinAnimatedStyle = useAnimatedStyle(() => ({ + transform: [{ scale: focusTransitioning ? pulse.value : 1 }], + })); + + const showPlaceholder = !!flagUri && !flagLoaded && !isFlagUriCached(flagUri); + + return ( + + + {showPlaceholder ? 🏳️ : null} + {flagUri ? ( + + ) : ( + 🏳️ + )} + + + ); +} + type MapCountryMarkerProps = { country: MapCountry; selected: boolean; + focusTransitioning?: boolean; + deemphasized?: boolean; + displayMode?: CountryMarkerDisplayMode; + presentation?: MapMarkerPresentation; + revealGeneration?: number; + /** Single-pin spotlight — keep the marker bitmap live (reliable on Android). */ + keepLive?: boolean; + /** While the map camera animates, keep re-rendering the marker view. */ + suspendSnapshot?: boolean; + /** Bumped when the map camera settles so markers re-snapshot. */ + refreshToken?: number; onPress: () => void; }; -export function MapCountryMarker({ +export const MapCountryMarker = memo(function MapCountryMarker({ country, selected, + focusTransitioning = false, + deemphasized = false, + displayMode = "flag", + presentation = "full", + revealGeneration = 0, + keepLive = false, + suspendSnapshot = false, + refreshToken = 0, onPress, }: MapCountryMarkerProps) { - const [latitude, longitude] = country.latlng; - const trending = isTrendingCountry(country.name); - const flagUri = resolveFlagCdnUrl(country.flag, cca2FromFlagUrl(country.flag)); + const isEntering = + presentation === "entering" && !selected && !focusTransitioning; + const fadeOpacity = useSharedValue(0); + const fadeScale = useSharedValue(0.85); + const prevRevealGenerationRef = useRef(revealGeneration); + + useEffect(() => { + const targetOpacity = selected + ? 1 + : deemphasized + ? MARKER_DEEMPHASIZED_OPACITY + : isEntering + ? 0.58 + : 1; + + const didReveal = prevRevealGenerationRef.current !== revealGeneration; + prevRevealGenerationRef.current = revealGeneration; + + // The focal pin must never play the reveal-in animation. A region swap bumps + // revealGeneration to re-animate the new region's pins, but the selected / + // focusing pin stays mounted — letting it reset to 0 makes its flag blink out. + if (didReveal && !selected && !focusTransitioning) { + fadeOpacity.value = 0; + fadeScale.value = 0.85; + fadeOpacity.value = withTiming(targetOpacity, { duration: 350 }); + fadeScale.value = withTiming(1, { duration: 350 }); + return; + } + + fadeOpacity.value = withTiming(targetOpacity, { duration: 200 }); + }, [ + deemphasized, + fadeOpacity, + fadeScale, + isEntering, + revealGeneration, + selected, + focusTransitioning, + ]); + + const fadeStyle = useAnimatedStyle(() => ({ + opacity: fadeOpacity.value, + transform: [{ scale: fadeScale.value }], + })); + const showFlag = displayMode === "flag"; + const [latitude, longitude] = getMapDisplayLatLng(country); + const flagUri = resolveFlagCdnUrl( + country.flag, + cca2FromFlagUrl(country.flag), + ); + + const [tracksViewChanges, setTracksViewChanges] = useState(true); + const [flagLoaded, setFlagLoaded] = useState(() => isFlagUriCached(flagUri)); + const [hasLaidOut, setHasLaidOut] = useState(false); + const freezeTimerRef = useRef | null>(null); + + const clearFreezeTimer = useCallback(() => { + if (freezeTimerRef.current) { + clearTimeout(freezeTimerRef.current); + freezeTimerRef.current = null; + } + }, []); + + const scheduleSnapshotFreeze = useCallback(() => { + clearFreezeTimer(); + freezeTimerRef.current = setTimeout(() => { + setTracksViewChanges(false); + freezeTimerRef.current = null; + }, SNAPSHOT_SETTLE_MS); + }, [clearFreezeTimer]); + + const requestLiveMarker = useCallback(() => { + clearFreezeTimer(); + setTracksViewChanges(true); + setHasLaidOut(false); + }, [clearFreezeTimer]); + + const nudgeMarkerSnapshot = useCallback(() => { + clearFreezeTimer(); + setTracksViewChanges(true); + scheduleSnapshotFreeze(); + }, [clearFreezeTimer, scheduleSnapshotFreeze]); + + useEffect(() => { + if (!showFlag) return; + const cached = isFlagUriCached(flagUri); + setFlagLoaded(cached); + if (!cached) { + requestLiveMarker(); + } + }, [flagUri, requestLiveMarker, showFlag]); + + useEffect(() => { + if (refreshToken === 0) return; + if (!selected && !focusTransitioning && !keepLive) return; + nudgeMarkerSnapshot(); + }, [ + focusTransitioning, + keepLive, + nudgeMarkerSnapshot, + refreshToken, + selected, + ]); + + useEffect(() => { + if (!showFlag) return; + + const mustStayLive = + keepLive || + suspendSnapshot || + selected || + focusTransitioning || + (!!flagUri && !flagLoaded); + + if (mustStayLive) { + clearFreezeTimer(); + setTracksViewChanges(true); + return; + } + + if (!hasLaidOut) { + setTracksViewChanges(true); + return; + } + + setTracksViewChanges(true); + scheduleSnapshotFreeze(); + return clearFreezeTimer; + }, [ + clearFreezeTimer, + flagLoaded, + flagUri, + hasLaidOut, + keepLive, + scheduleSnapshotFreeze, + focusTransitioning, + selected, + showFlag, + suspendSnapshot, + ]); + + const handlePinLayout = useCallback(() => { + setHasLaidOut(true); + }, []); + + const handleFlagLoad = useCallback(() => { + if (flagUri) { + loadedFlagUris.add(flagUri); + } + setFlagLoaded(true); + }, [flagUri]); + + useEffect(() => () => clearFreezeTimer(), [clearFreezeTimer]); + + if (!showFlag) return null; + + const tracksChanges = + keepLive || + tracksViewChanges || + suspendSnapshot || + selected || + focusTransitioning; return ( - - - {flagUri ? ( - - ) : ( - 🏳️ - )} - - - - {country.name} - - {trending ? ( - - - Trending + + + {selected && !isEntering ? ( + + + + {country.name} + - ) : null} - - + + ) : null} + ); -} +}); const styles = StyleSheet.create({ + markerAnchor: { + width: MARKER_ANCHOR_SIZE, + height: MARKER_ANCHOR_SIZE, + alignItems: "center", + justifyContent: "center", + overflow: "visible", + }, wrapper: { alignItems: "center", - maxWidth: 120, + justifyContent: "center", + width: MARKER_ANCHOR_SIZE, + height: MARKER_ANCHOR_SIZE, + }, + wrapperEntering: { + alignItems: "center", + justifyContent: "center", + width: MARKER_ANCHOR_SIZE, + height: MARKER_ANCHOR_SIZE, }, pin: { - width: 40, - height: 40, - borderRadius: 20, - borderWidth: 2, - borderColor: "rgba(255, 255, 255, 0.35)", + width: PIN_SIZE, + height: PIN_SIZE, + borderRadius: PIN_SIZE / 2, + // borderWidth: 1.5, + // borderColor: "rgba(255, 255, 255, 0.3)", + backgroundColor: "#1a1f2e", + alignItems: "center", + justifyContent: "center", + overflow: "hidden", + }, + pinEntering: { + width: 28, + height: 28, + borderRadius: 14, + // borderWidth: 1.5, + // borderColor: "rgba(255, 255, 255, 0.2)", backgroundColor: "#1a1f2e", alignItems: "center", justifyContent: "center", overflow: "hidden", }, pinSelected: { - borderColor: "#fbbf24", borderWidth: 3, + borderColor: "#fbbf24", shadowColor: "#fbbf24", shadowOffset: { width: 0, height: 0 }, - shadowOpacity: 0.8, + shadowOpacity: 0.75, shadowRadius: 8, - elevation: 6, + elevation: 8, }, flag: { - width: 32, - height: 32, - borderRadius: 16, + width: PIN_SIZE, + height: PIN_SIZE, + borderRadius: PIN_SIZE / 2, + }, + flagEntering: { + width: 26, + height: 26, + borderRadius: 13, + }, + flagSelected: { + width: PIN_SIZE - 6, + height: PIN_SIZE - 6, + borderRadius: (PIN_SIZE - 6) / 2, + }, + flagHidden: { + opacity: 0, }, flagEmoji: { fontSize: 20, }, labelRow: { - marginTop: 4, + position: "absolute", + alignSelf: "stretch", + top: MARKER_ANCHOR_SIZE + 4, + left: -56, + right: -56, alignItems: "center", - gap: 2, + }, + labelPill: { + maxWidth: 250, + alignSelf: "stretch", + paddingHorizontal: 8, + // paddingVertical: 3, + borderRadius: 12, + // backgroundColor: "rgba(11, 19, 43, 0.5)", + borderWidth: 0, + borderColor: "rgba(251, 191, 36, 0.55)", }, countryName: { - fontSize: 12, + fontSize: 14, + alignSelf: "stretch", + marginVertical: -8, fontFamily: "Poppins-SemiBold", color: "#ffffff", textAlign: "center", - textShadowColor: "rgba(0, 0, 0, 0.75)", - textShadowOffset: { width: 0, height: 1 }, - textShadowRadius: 3, - }, - trendingBadge: { - flexDirection: "row", - alignItems: "center", - gap: 2, - paddingHorizontal: 6, - paddingVertical: 2, - borderRadius: 8, - backgroundColor: "rgba(251, 146, 60, 0.2)", - }, - trendingText: { - fontSize: 9, - fontFamily: "Poppins-Medium", - color: "#fb923c", }, }); diff --git a/components/map/map-country-preview-card.tsx b/components/map/map-country-preview-card.tsx index 3e292f7..beb778b 100644 --- a/components/map/map-country-preview-card.tsx +++ b/components/map/map-country-preview-card.tsx @@ -1,37 +1,45 @@ import { Ionicons } from "@expo/vector-icons"; -import { Image } from "expo-image"; -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useState } from "react"; import { ActivityIndicator, Pressable, - ScrollView, StyleSheet, Text, View, } from "react-native"; -import { prefetchCountryImage } from "@/components/explore/country-image"; import { FlagBadge } from "@/components/explore/flag-badge"; -import { isTrendingCountry } from "@/constants/trending-countries"; +import { continentDisplayLabel } from "@/constants/regions"; import { fetchCountryByName } from "@/lib/api"; -import { formatPopulation, getCountryImages } from "@/lib/format-country"; +import { formatPopulation } from "@/lib/format-country"; import { mapCountryToCountry } from "@/lib/map-country"; import { openCountryInExplore } from "@/lib/open-country-in-explore"; -import { useSavedCountriesStore } from "@/store/use-saved-countries-store"; import type { Country, MapCountry } from "@/types/country"; type MapCountryPreviewCardProps = { country: MapCountry; - onDismiss?: () => void; + onNextCountry?: () => void; + isNextCountryLoading?: boolean; + onDismiss: () => void; + onBackToContinent?: () => void; + backToRegionLabel?: string; + bottomInset?: number; }; +const FLAG_WIDTH = 56; +const FLAG_HEIGHT = 38; +const COUNTRY_NAME_FONT_SIZE = 17; +const COUNTRY_NAME_MIN_FONT_SIZE = 14; + export function MapCountryPreviewCard({ country, + onNextCountry, + isNextCountryLoading = false, onDismiss, + onBackToContinent, + backToRegionLabel, + bottomInset = 0, }: MapCountryPreviewCardProps) { - const toggleSaved = useSavedCountriesStore((s) => s.toggleSaved); - const isSaved = useSavedCountriesStore((s) => s.isSaved(country.name)); - const [detail, setDetail] = useState(null); const [detailStatus, setDetailStatus] = useState< "idle" | "loading" | "error" @@ -40,7 +48,6 @@ export function MapCountryPreviewCard({ useEffect(() => { let cancelled = false; - setDetail(null); setDetailStatus("loading"); setDetailError(null); @@ -63,349 +70,355 @@ export function MapCountryPreviewCard({ }; }, [country.name]); - const trending = isTrendingCountry(country.name); - const thumbnailUri = - detail?.images?.[0] ?? country.image ?? country.flag ?? null; - const countryForActions = mapCountryToCountry(country, detail); - - const previewImages = useMemo(() => { - if (!detail) return []; - return getCountryImages(detail).slice(0, 3); - }, [detail]); - - useEffect(() => { - if (previewImages.length === 0) return; - for (const uri of previewImages) { - void prefetchCountryImage(uri); - } - }, [previewImages]); + const detailMatchesCountry = detail?.name === country.name; + const countryForActions = mapCountryToCountry( + country, + detailMatchesCountry ? detail : null, + ); - const aiFact = - detail?.ai?.fact?.trim() || + const funFact = + (detailMatchesCountry ? detail?.ai?.fact?.trim() : undefined) || (detailStatus === "loading" - ? "Fun fact loading…" + ? detailMatchesCountry || !detail + ? "Loading…" + : "Updating…" : detailStatus === "error" - ? (detailError ?? "Fun fact unavailable") - : "Fun fact loading…"); + ? (detailError ?? "Unavailable right now") + : "Updating…"); return ( - - - {/* */} - {/* */} - - - - - {thumbnailUri ? ( - - ) : ( - - - - )} + + + + + {country.name} + - - - - - - {country.name} - - {/* {trending ? ( - - - Trending - - ) : null} */} - + [ + styles.closeButton, + pressed && styles.closeButtonPressed, + ]} + > + + + - {/* toggleSaved(countryForActions)} - hitSlop={8} - style={({ pressed }) => [ - styles.saveButton, - pressed && styles.pressed, - ]} - > - - */} - + + + + + + + + - - - - - + + + + + + - - - - - AI Fun Fact - + + + + + Fun fact {detailStatus === "loading" ? ( - + ) : null} - {aiFact} + + {funFact} + - {/* - Top 3 posts - {detailStatus === "loading" && previewImages.length === 0 ? ( - - {[0, 1, 2].map((i) => ( - - ))} - + + + + {onBackToContinent ? ( + <> + [ + styles.actionSegment, + styles.backSegment, + pressed && styles.pressed, + ]} + > + + {backToRegionLabel ? ( + + {backToRegionLabel} + + ) : null} + + + ) : null} - {previewImages.length > 0 ? ( - openCountryInExplore(countryForActions)} - /> + + {onNextCountry ? ( + <> + [ + styles.actionSegment, + isNextCountryLoading && styles.actionLoading, + pressed && styles.pressed, + ]} + > + {isNextCountryLoading ? ( + + ) : ( + + )} + Shuffle + + + ) : null} - */} - openCountryInExplore(countryForActions)} - style={({ pressed }) => [ - styles.exploreButton, - pressed && styles.pressed, - ]} - > - View full feed - {/* */} - + openCountryInExplore(countryForActions)} + style={({ pressed }) => [ + styles.actionSegment, + pressed && styles.pressed, + ]} + > + Explore + + + ); } -function StatItem({ - icon, - label, +function Stat({ caption, + value, + flex = 1, + valueLines = 1, }: { - icon?: keyof typeof Ionicons.glyphMap; - label: string; caption: string; + value: string; + flex?: number; + valueLines?: number; }) { return ( - - {icon ? : null} - - {label} + + + {caption} + + + {value} - {caption} ); } const styles = StyleSheet.create({ card: { - marginHorizontal: 32, - marginBottom: 136, - padding: 16, - gap: 16, - borderRadius: 24, - backgroundColor: "rgba(18, 24, 38, 0.8)", - borderWidth: 1, + paddingTop: 14, + paddingHorizontal: 16, + gap: 10, + borderTopLeftRadius: 24, + borderTopRightRadius: 24, + backgroundColor: "#121826", + borderTopWidth: 1, borderColor: "rgba(255, 255, 255, 0.08)", }, - dismissHandle: { - position: "absolute", - top: 0, - right: 0, + sectionDivider: { + height: StyleSheet.hairlineWidth, + backgroundColor: "rgba(255, 255, 255, 0.08)", + // marginVertical: 4, + }, + topRow: { + flexDirection: "row", + // justifyContent: "center", alignItems: "center", - justifyContent: "center", - padding: 8, + gap: 6, }, - - thumbnailWrap: { - width: 88, - height: 88, - borderRadius: 16, - overflow: "hidden", + titleTextWrap: { + flex: 1, + minWidth: 0, }, - thumbnail: { - width: 88, - height: 88, + countryName: { + fontSize: COUNTRY_NAME_FONT_SIZE, + lineHeight: 21, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", }, - thumbnailFallback: { + closeButton: { + width: 40, + height: 40, + flexShrink: 0, alignItems: "center", justifyContent: "center", - backgroundColor: "rgba(255, 255, 255, 0.06)", - }, - trendingPill: { - flexDirection: "row", - alignItems: "center", - gap: 4, - paddingHorizontal: 8, - paddingVertical: 4, borderRadius: 12, - backgroundColor: "rgba(251, 146, 60, 0.15)", + backgroundColor: "rgba(255, 255, 255, 0.08)", }, - trendingPillText: { - fontSize: 11, - fontFamily: "Poppins-Medium", - color: "#fb923c", + closeButtonPressed: { + opacity: 0.6, }, - saveButton: { - width: 44, - height: 44, - alignItems: "center", - justifyContent: "center", + metaRow: { + flexDirection: "row", + alignItems: "flex-start", + // marginVertical: 4, + }, + flagWrap: { + flexShrink: 0, + marginTop: 1, }, - statItem: { + statsRow: { flex: 1, + flexShrink: 1, + flexDirection: "row", + alignItems: "stretch", minWidth: 0, }, - statLabel: { - fontSize: 13, - fontFamily: "Poppins-Medium", - color: "#ffffff", + statDivider: { + width: 1, + flexShrink: 0, + alignSelf: "stretch", + marginHorizontal: 8, + backgroundColor: "rgba(255, 255, 255, 0.12)", + }, + stat: { + flexBasis: 0, + flexShrink: 1, + minWidth: 0, + gap: 2, + overflow: "hidden", }, statCaption: { fontSize: 11, + lineHeight: 13, fontFamily: "Poppins-Regular", color: "#94a3b8", }, - aiBlock: { - gap: 8, - padding: 12, - borderRadius: 16, - backgroundColor: "rgba(255, 255, 255, 0.04)", + statValue: { + fontSize: 14, + lineHeight: 17, + fontFamily: "Poppins-SemiBold", + color: "#ffffff", + flexShrink: 1, + }, + factBlock: { + gap: 4, }, - exploreButton: { - height: 52, - borderRadius: 16, + factLabelRow: { flexDirection: "row", alignItems: "center", - justifyContent: "center", - gap: 8, - backgroundColor: "#fbbf24", + gap: 6, }, - exploreLabel: { - fontSize: 16, - fontFamily: "Poppins-SemiBold", - color: "#0b132b", + factLabel: { + fontSize: 12, + fontFamily: "Poppins-Medium", + color: "#94a3b8", + textTransform: "uppercase", + letterSpacing: 0.4, }, - pressed: { - opacity: 0.88, + factText: { + fontSize: 14, + lineHeight: 19, + fontFamily: "Poppins-Regular", + color: "rgba(255, 255, 255, 0.9)", }, - previewBlock: { - gap: 10, + factTextMuted: { + color: "#94a3b8", }, - previewTitle: { - fontSize: 13, - fontFamily: "Poppins-SemiBold", - color: "rgba(255,255,255,0.9)", + actionStack: { + flexDirection: "row", + alignItems: "stretch", + marginVertical: 4, + minHeight: 48, + borderRadius: 12, + backgroundColor: "#101828", + borderWidth: 1, + borderColor: "rgba(255, 255, 255, 0.1)", + overflow: "hidden", }, - previewSkeletonRow: { + actionSegment: { + flex: 1, + minHeight: 40, flexDirection: "row", - gap: 10, + alignItems: "center", + justifyContent: "center", + gap: 5, + paddingHorizontal: 10, }, - previewSkeleton: { - width: 72, - height: 72, - borderRadius: 16, - backgroundColor: "rgba(255,255,255,0.06)", + backSegment: { + flex: 0.85, + minWidth: 44, }, - previewRow: { - gap: 10, - alignItems: "center", - paddingVertical: 2, + actionDivider: { + width: 1, + alignSelf: "stretch", + backgroundColor: "rgba(255, 255, 255, 0.1)", }, - previewThumbWrap: { - width: 72, - height: 72, - borderRadius: 16, - overflow: "hidden", - backgroundColor: "rgba(255,255,255,0.04)", + actionLabel: { + fontSize: 13, + fontFamily: "Poppins-Medium", + color: "#ffffff", }, - previewThumb: { - width: "100%", - height: "100%", + actionLoading: { + opacity: 0.45, }, - previewTrailingPad: { - width: 8, + pressed: { + opacity: 0.95, + backgroundColor: "#29303C", }, }); - -function ScrollRowPreview({ - images, - onPress, -}: { - images: string[]; - onPress: () => void; -}) { - return ( - - {images.map((uri) => ( - [ - styles.previewThumbWrap, - pressed && styles.pressed, - ]} - > - - - ))} - - - ); -} diff --git a/components/map/map-featured-chips.tsx b/components/map/map-featured-chips.tsx index cb22c17..b20c14f 100644 --- a/components/map/map-featured-chips.tsx +++ b/components/map/map-featured-chips.tsx @@ -1,40 +1,61 @@ import { Ionicons } from "@expo/vector-icons"; -import { Pressable, ScrollView, StyleSheet, Text, View } from "react-native"; +import { Pressable, StyleSheet, Text } from "react-native"; +import { MapChipScrollRow } from "@/components/map/map-chip-scroll-row"; +import { + MAP_CHIP_BASE, + MAP_CHIP_SELECTED, + MAP_CHROME_ACCENT, + MAP_CHROME_BORDER, + MAP_CHROME_TEXT_MUTED, +} from "@/constants/map-chrome-styles"; import type { FeaturedShortcut } from "@/store/use-map-ui-store"; import { useMapUiStore } from "@/store/use-map-ui-store"; type FeaturedChipsProps = { - onTrendingPress: () => void; - onForYouPress: () => void; - onNewActivityPress: () => void; + onAllPress: () => void; + onTerrainPress: () => void; + onSavedPress: () => void; }; type ChipConfig = { - id: Exclude; + id: FeaturedShortcut; label: string; icon: keyof typeof Ionicons.glyphMap; + iconSelected: keyof typeof Ionicons.glyphMap; }; const CHIPS: ChipConfig[] = [ - { id: "trending", label: "Trending Now", icon: "flame" }, - { id: "forYou", label: "For You World", icon: "globe-outline" }, - { id: "newActivity", label: "New Activity", icon: "sparkles" }, + { id: "all", label: "All", icon: "layers-outline", iconSelected: "layers" }, + { + id: "terrain", + label: "Terrain", + icon: "earth-outline", + iconSelected: "earth", + }, + { + id: "saved", + label: "Saved", + icon: "location-outline", + iconSelected: "location", + }, ]; export function MapFeaturedChips({ - onTrendingPress, - onForYouPress, - onNewActivityPress, + onAllPress, + onTerrainPress, + onSavedPress, }: FeaturedChipsProps) { const featuredShortcut = useMapUiStore((s) => s.featuredShortcut); + const handlers: Record void> = { + all: onAllPress, + terrain: onTerrainPress, + saved: onSavedPress, + }; + return ( - + {CHIPS.map((chip, index) => { const selected = featuredShortcut === chip.id; return ( @@ -43,24 +64,18 @@ export function MapFeaturedChips({ accessibilityRole="button" accessibilityState={{ selected }} accessibilityLabel={chip.label} - onPress={ - chip.id === "trending" - ? onTrendingPress - : chip.id === "forYou" - ? onForYouPress - : onNewActivityPress - } + onPress={handlers[chip.id]} style={({ pressed }) => [ styles.chip, index > 0 && styles.chipSpacing, - selected && styles.chipSelected, + selected ? styles.chipSelected : styles.chipDefault, pressed && styles.pressed, ]} > ); })} - - [ - styles.chip, - styles.chipSpacing, - styles.nearYouChip, - pressed && styles.pressed, - ]} - > - - Near You - - - - + ); } const styles = StyleSheet.create({ - row: { - paddingHorizontal: 16, - paddingVertical: 8, - alignItems: "center", - }, chip: { flexDirection: "row", alignItems: "center", gap: 6, - height: 40, - paddingHorizontal: 16, - borderRadius: 20, + height: 34, + paddingHorizontal: 12, + borderRadius: 17, + }, + chipDefault: { + ...MAP_CHIP_BASE, borderWidth: 1, - borderColor: "rgba(255, 255, 255, 0.12)", - backgroundColor: "rgba(255, 255, 255, 0.06)", - maxWidth: 220, + borderColor: MAP_CHROME_BORDER, }, + chipSelected: MAP_CHIP_SELECTED, chipSpacing: { - marginLeft: 8, - }, - chipSelected: { - borderColor: "#fbbf24", - backgroundColor: "rgba(251, 191, 36, 0.08)", + marginLeft: 6, }, chipLabel: { fontSize: 14, fontFamily: "Poppins-Medium", - color: "#94a3b8", + color: MAP_CHROME_TEXT_MUTED, }, chipLabelSelected: { - color: "#fbbf24", - fontFamily: "Poppins-SemiBold", - }, - nearYouChip: { - opacity: 0.45, + color: MAP_CHROME_ACCENT, + fontFamily: "Poppins-Medium", }, pressed: { - opacity: 0.88, - }, - trailingPad: { - width: 8, + opacity: 0.9, }, }); - diff --git a/components/map/map-filter-chips.tsx b/components/map/map-filter-chips.tsx index 7d41fe5..db3dfca 100644 --- a/components/map/map-filter-chips.tsx +++ b/components/map/map-filter-chips.tsx @@ -1,21 +1,26 @@ -import { Ionicons } from "@expo/vector-icons"; -import { Pressable, ScrollView, StyleSheet, Text, View } from "react-native"; +import { Pressable, StyleSheet, Text } from "react-native"; +import { MapChipScrollRow } from "@/components/map/map-chip-scroll-row"; +import { + MAP_CHIP_BASE, + MAP_CHIP_SELECTED, + MAP_CHROME_ACCENT, + MAP_CHROME_TEXT_MUTED, +} from "@/constants/map-chrome-styles"; import type { MapFilterChip } from "@/store/use-map-store"; import { useMapStore } from "@/store/use-map-store"; type ChipConfig = { id: MapFilterChip; label: string; - icon: keyof typeof Ionicons.glyphMap; }; const CHIPS: ChipConfig[] = [ - { id: "all", label: "All", icon: "globe-outline" }, - { id: "population", label: "Population", icon: "people-outline" }, - { id: "culture", label: "Culture", icon: "color-palette-outline" }, - { id: "nature", label: "Nature", icon: "leaf-outline" }, - { id: "history", label: "History", icon: "library-outline" }, + { id: "all", label: "All" }, + { id: "population", label: "Population" }, + { id: "culture", label: "Culture" }, + { id: "nature", label: "Nature" }, + { id: "history", label: "History" }, ]; export function MapFilterChips() { @@ -23,11 +28,7 @@ export function MapFilterChips() { const setActiveChip = useMapStore((s) => s.setActiveChip); return ( - + {CHIPS.map((chip, index) => { const selected = activeChip === chip.id; return ( @@ -40,15 +41,10 @@ export function MapFilterChips() { style={({ pressed }) => [ styles.chip, index > 0 && styles.chipSpacing, - selected && styles.chipSelected, + selected ? styles.chipSelected : styles.chipDefault, pressed && styles.pressed, ]} > - ); })} - - + ); } const styles = StyleSheet.create({ - row: { - paddingHorizontal: 16, - paddingVertical: 8, - alignItems: "center", - }, chip: { flexDirection: "row", alignItems: "center", - gap: 6, - height: 40, - paddingHorizontal: 16, - borderRadius: 20, - borderWidth: 1, - borderColor: "rgba(255, 255, 255, 0.12)", - backgroundColor: "rgba(255, 255, 255, 0.06)", + height: 34, + paddingHorizontal: 12, + borderRadius: 17, }, + chipDefault: MAP_CHIP_BASE, + chipSelected: MAP_CHIP_SELECTED, chipSpacing: { - marginLeft: 8, - }, - chipSelected: { - borderColor: "#fbbf24", - backgroundColor: "rgba(251, 191, 36, 0.08)", + marginLeft: 6, }, chipLabel: { fontSize: 14, fontFamily: "Poppins-Medium", - color: "#94a3b8", + color: MAP_CHROME_TEXT_MUTED, }, chipLabelSelected: { - color: "#fbbf24", - fontFamily: "Poppins-SemiBold", + color: MAP_CHROME_ACCENT, + fontFamily: "Poppins-Medium", }, pressed: { - opacity: 0.88, - }, - trailingPad: { - width: 8, + opacity: 0.9, }, }); diff --git a/components/map/map-header.tsx b/components/map/map-header.tsx deleted file mode 100644 index 387b604..0000000 --- a/components/map/map-header.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { Ionicons } from "@expo/vector-icons"; -import { Image } from "expo-image"; -import { router } from "expo-router"; -import { Pressable, StyleSheet, View } from "react-native"; -import { useSafeAreaInsets } from "react-native-safe-area-context"; - -import { images } from "@/constants/images"; - -type MapHeaderProps = { - onGlobePress?: () => void; -}; - -export function MapHeader({ onGlobePress }: MapHeaderProps) { - const insets = useSafeAreaInsets(); - - return ( - - - [ - styles.iconButton, - pressed && styles.pressed, - ]} - > - - - - {/* */} - - router.push("/(tabs)/profile")} - className="h-11 w-11 overflow-hidden rounded-full border-2 border-tab-active" - > - - - - - ); -} - -const styles = StyleSheet.create({ - iconButton: { - width: 44, - height: 44, - alignItems: "center", - justifyContent: "center", - }, - pressed: { - opacity: 0.85, - }, - logo: { - width: 120, - height: 32, - }, -}); diff --git a/components/map/map-onboarding-sheet.tsx b/components/map/map-onboarding-sheet.tsx index e9ff425..9280971 100644 --- a/components/map/map-onboarding-sheet.tsx +++ b/components/map/map-onboarding-sheet.tsx @@ -83,13 +83,14 @@ export function MapOnboardingSheet({ onDismiss }: MapOnboardingSheetProps) { Explore the World - Tap a country to see trending content from that region. + Tap a country to focus · Tap again for details + ); @@ -149,10 +150,10 @@ const styles = StyleSheet.create({ }, hintsRow: { flexDirection: "row", + flexWrap: "wrap", gap: 10, }, hint: { - flex: 1, flexDirection: "row", alignItems: "center", gap: 6, @@ -160,6 +161,8 @@ const styles = StyleSheet.create({ paddingHorizontal: 10, borderRadius: 16, backgroundColor: "rgba(255,255,255,0.05)", + flexGrow: 1, + flexBasis: "45%", }, hintLabel: { fontFamily: "Poppins-Medium", diff --git a/components/map/map-pulse-cluster-marker.tsx b/components/map/map-pulse-cluster-marker.tsx index acb7455..1b21f7c 100644 --- a/components/map/map-pulse-cluster-marker.tsx +++ b/components/map/map-pulse-cluster-marker.tsx @@ -1,14 +1,6 @@ import { Ionicons } from "@expo/vector-icons"; -import { useEffect } from "react"; import { StyleSheet, Text, View } from "react-native"; import { Marker } from "react-native-maps"; -import Animated, { - useAnimatedStyle, - useSharedValue, - withRepeat, - withSequence, - withTiming, -} from "react-native-reanimated"; import { getActivityVisual } from "@/constants/map-activity"; import type { MapCluster } from "@/lib/map-clusters"; @@ -27,37 +19,16 @@ export function MapPulseClusterMarker({ const [latitude, longitude] = cluster.center; const visual = getActivityVisual(cluster.activity); - const pulse = useSharedValue(1); - - // "Alive" feel: a gentle breathing loop on bubble markers. - useEffect(() => { - pulse.value = withRepeat( - withSequence( - withTiming(1.08, { duration: 1000 }), - withTiming(1, { duration: 1000 }), - ), - -1, - false, - ); - }, [pulse]); - - const animatedStyle = useAnimatedStyle(() => { - const scale = selected ? 1.12 : pulse.value; - return { - transform: [{ scale }], - }; - }); - return ( { event.stopPropagation?.(); onPress(cluster); }} > - @@ -79,7 +49,7 @@ export function MapPulseClusterMarker({ {cluster.countryCount} - + ); } diff --git a/components/map/map-random-country-hint.tsx b/components/map/map-random-country-hint.tsx new file mode 100644 index 0000000..c72ea0e --- /dev/null +++ b/components/map/map-random-country-hint.tsx @@ -0,0 +1,62 @@ +import { useEffect } from "react"; +import { StyleSheet, Text, View } from "react-native"; + +import { FlagBadge } from "@/components/explore/flag-badge"; +import type { MapCountry } from "@/types/country"; + +type MapRandomCountryHintProps = { + country: MapCountry; + bottom: number; + onDismiss: () => void; +}; + +const AUTO_DISMISS_MS = 4000; + +export function MapRandomCountryHint({ + country, + bottom, + onDismiss, +}: MapRandomCountryHintProps) { + useEffect(() => { + const timer = setTimeout(onDismiss, AUTO_DISMISS_MS); + return () => clearTimeout(timer); + }, [onDismiss]); + + return ( + + + + + {country.name} · Tap pin for details + + + + ); +} + +const styles = StyleSheet.create({ + wrap: { + position: "absolute", + right: 16, + zIndex: 8, + maxWidth: "72%", + }, + bubble: { + flexDirection: "row", + alignItems: "center", + gap: 8, + paddingHorizontal: 14, + paddingVertical: 10, + borderRadius: 16, + backgroundColor: "rgba(18, 24, 38, 0.96)", + borderWidth: 1, + borderColor: "rgba(255, 255, 255, 0.12)", + }, + label: { + flexShrink: 1, + fontSize: 13, + lineHeight: 18, + fontFamily: "Poppins-Medium", + color: "#ffffff", + }, +}); diff --git a/components/map/map-region-chrome.tsx b/components/map/map-region-chrome.tsx new file mode 100644 index 0000000..fdd6372 --- /dev/null +++ b/components/map/map-region-chrome.tsx @@ -0,0 +1,129 @@ +import { Ionicons } from "@expo/vector-icons"; +import * as Haptics from "expo-haptics"; +import { Pressable, StyleSheet, Text, View } from "react-native"; + +import { continentDisplayLabel } from "@/constants/regions"; + +type MapRegionChromeProps = { + focusedRegion: string; + bottom: number; + onContinentPress: () => void; + onWorldPress: () => void; +}; + +const CHROME_HEIGHT = 44; + +export function MapRegionChrome({ + focusedRegion, + bottom, + onContinentPress, + onWorldPress, +}: MapRegionChromeProps) { + const label = continentDisplayLabel(focusedRegion); + + const handleContinentPress = () => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + onContinentPress(); + }; + + const handleWorldPress = () => { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + onWorldPress(); + }; + + return ( + + + [ + styles.segment, + styles.regionSegment, + pressed && styles.pressed, + ]} + > + + {label} + + + + + + [ + styles.segment, + styles.worldSegment, + pressed && styles.pressed, + ]} + > + + World + + + + ); +} + +const styles = StyleSheet.create({ + wrap: { + position: "absolute", + alignSelf: "center", + zIndex: 7, + }, + stack: { + flexDirection: "row", + alignItems: "stretch", + minWidth: 168, + height: CHROME_HEIGHT, + borderRadius: 32, + backgroundColor: "#101828", + borderWidth: 1, + borderColor: "rgba(255, 255, 255, 0.1)", + overflow: "hidden", + }, + segment: { + height: CHROME_HEIGHT, + justifyContent: "center", + }, + regionSegment: { + flexGrow: 1, + flexShrink: 1, + paddingHorizontal: 16, + alignItems: "center", + }, + worldSegment: { + flexDirection: "row", + alignItems: "center", + gap: 6, + paddingHorizontal: 14, + }, + divider: { + width: 1, + alignSelf: "stretch", + backgroundColor: "rgba(255, 255, 255, 0.1)", + }, + regionLabel: { + fontSize: 13, + fontFamily: "Poppins-Regular", + //accent color + color: "#fbbf24", + }, + worldLabel: { + fontSize: 13, + fontFamily: "Poppins-Medium", + color: "#ffffff", + }, + pressed: { + opacity: 0.95, + backgroundColor: "#29303C", + }, +}); diff --git a/components/map/map-search-row.tsx b/components/map/map-search-row.tsx index 39c2e50..be2c752 100644 --- a/components/map/map-search-row.tsx +++ b/components/map/map-search-row.tsx @@ -1,55 +1,98 @@ import { Ionicons } from "@expo/vector-icons"; import { Alert, Pressable, StyleSheet, Text, View } from "react-native"; +import { + MAP_CHROME_BORDER, + MAP_CHROME_PLACEHOLDER, + MAP_CHROME_SURFACE, +} from "@/constants/map-chrome-styles"; import { useSearchUiStore } from "@/store/use-search-ui-store"; export function MapSearchRow() { const openSearch = useSearchUiStore((s) => s.openSearch); return ( - - - - - Search countries, regions, cultures… - - + + + openSearch("map")} + style={({ pressed }) => [ + styles.searchPressable, + pressed && styles.pressed, + ]} + > + + + Search places, cities, countries… + + - { - Alert.alert( - "Filters", - "Advanced map filters are coming in a later lesson.", - ); - }} - style={({ pressed }) => [ - styles.filterButton, - pressed && styles.pressed, - ]} - > - - + { + Alert.alert( + "Filters", + "Advanced map filters are coming in a later lesson.", + ); + }} + style={({ pressed }) => [ + styles.filterButton, + pressed && styles.pressed, + ]} + > + + + ); } const styles = StyleSheet.create({ + wrap: { + paddingHorizontal: 16, + }, + bar: { + height: 42, + flexDirection: "row", + alignItems: "center", + gap: 12, + paddingLeft: 16, + paddingRight: 8, + borderRadius: 21, + backgroundColor: MAP_CHROME_SURFACE, + borderWidth: 1, + borderColor: MAP_CHROME_BORDER, + }, + searchPressable: { + minWidth: 0, + flex: 1, + flexDirection: "row", + alignItems: "center", + gap: 12, + minHeight: 42, + }, + placeholder: { + fontFamily: "Poppins-Regular", + color: MAP_CHROME_PLACEHOLDER, + }, filterButton: { - width: 48, - height: 48, - borderRadius: 16, + width: 32, + height: 32, alignItems: "center", justifyContent: "center", - backgroundColor: "rgba(255, 255, 255, 0.08)", }, pressed: { - opacity: 0.85, + opacity: 0.88, }, }); diff --git a/components/map/map-tap-ripple.tsx b/components/map/map-tap-ripple.tsx new file mode 100644 index 0000000..f7368a5 --- /dev/null +++ b/components/map/map-tap-ripple.tsx @@ -0,0 +1,67 @@ +import { useEffect } from "react"; +import { StyleSheet } from "react-native"; +import Animated, { + Easing, + useAnimatedStyle, + useSharedValue, + withTiming, +} from "react-native-reanimated"; + +const RIPPLE_SIZE = 56; +const RIPPLE_DURATION_MS = 450; + +type MapTapRippleProps = { + x: number; + y: number; + /** Increment to replay the burst animation. */ + triggerKey: number; +}; + +export function MapTapRipple({ x, y, triggerKey }: MapTapRippleProps) { + const scale = useSharedValue(0.45); + const opacity = useSharedValue(0.5); + + useEffect(() => { + scale.value = 0.45; + opacity.value = 0.5; + scale.value = withTiming(1.85, { + duration: RIPPLE_DURATION_MS, + easing: Easing.out(Easing.cubic), + }); + opacity.value = withTiming(0, { + duration: RIPPLE_DURATION_MS, + easing: Easing.out(Easing.cubic), + }); + }, [opacity, scale, triggerKey]); + + const rippleStyle = useAnimatedStyle(() => ({ + transform: [{ scale: scale.value }], + opacity: opacity.value, + })); + + return ( + + ); +} + +const styles = StyleSheet.create({ + ripple: { + position: "absolute", + width: RIPPLE_SIZE, + height: RIPPLE_SIZE, + borderRadius: RIPPLE_SIZE / 2, + borderWidth: 2, + borderColor: "rgba(251, 191, 36, 0.85)", + backgroundColor: "rgba(251, 191, 36, 0.12)", + }, +}); diff --git a/components/map/map-top-chrome-scrim.tsx b/components/map/map-top-chrome-scrim.tsx new file mode 100644 index 0000000..c91a55c --- /dev/null +++ b/components/map/map-top-chrome-scrim.tsx @@ -0,0 +1,38 @@ +import { StyleSheet, View } from "react-native"; + +type GradientViewStyle = { + experimental_backgroundImage: string; +}; + +type MapTopChromeScrimProps = { + paddingTop: number; +}; + +/** Darkens the top of the map so search + chips stay readable on busy satellite imagery. */ +export function MapTopChromeScrim({ paddingTop }: MapTopChromeScrimProps) { + const height = paddingTop + 108; + + return ( + + ); +} + +const styles = StyleSheet.create({ + scrim: { + position: "absolute", + top: 0, + left: 0, + right: 0, + zIndex: 0, + }, +}); diff --git a/components/map/random-country-fab.tsx b/components/map/random-country-fab.tsx deleted file mode 100644 index c0c2fe6..0000000 --- a/components/map/random-country-fab.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Ionicons } from "@expo/vector-icons"; -import { Pressable, StyleSheet, View } from "react-native"; - -type RandomCountryFabProps = { - onPress: () => void; -}; - -export function RandomCountryFab({ onPress }: RandomCountryFabProps) { - return ( - - [styles.fab, pressed && styles.pressed]} - > - - - {/* Random Country */} - - ); -} - -const styles = StyleSheet.create({ - wrap: { - position: "absolute", - left: 16, - bottom: 158, - alignItems: "center", - gap: 8, - zIndex: 6, - }, - fab: { - paddingHorizontal: 12, - paddingVertical: 8, - borderRadius: 12, - alignItems: "center", - justifyContent: "center", - backgroundColor: "#fbbf24", - shadowColor: "#000", - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.35, - shadowRadius: 8, - elevation: 8, - }, - label: { - fontSize: 12, - fontFamily: "Poppins-Medium", - color: "#ffffff", - textAlign: "center", - }, - pressed: { - opacity: 0.9, - transform: [{ scale: 0.96 }], - }, -}); diff --git a/components/map/world-map-view.tsx b/components/map/world-map-view.tsx index 46a5e9a..7654acf 100644 --- a/components/map/world-map-view.tsx +++ b/components/map/world-map-view.tsx @@ -1,55 +1,166 @@ -import { forwardRef, useCallback, useImperativeHandle, useRef } from "react"; +import { + forwardRef, + useCallback, + useImperativeHandle, + useMemo, + useRef, +} from "react"; import { Platform, StyleSheet } from "react-native"; -import MapView, { PROVIDER_DEFAULT, type Region } from "react-native-maps"; +import MapView, { + Polygon, + PROVIDER_DEFAULT, + type Region, +} from "react-native-maps"; +import { MapContinentFocusLayers } from "@/components/map/map-continent-focus-layers"; +import { MapCountryMarker } from "@/components/map/map-country-marker"; +import { MAP_CONTINENT_FOCUS_POLYGON_Z } from "@/constants/map-continent-focus"; +import { + boundaryStyleRenderKey, + resolveBoundaryFillColor, + resolveBoundaryStrokeColor, + resolveBoundaryStrokeWidth, +} from "@/constants/map-boundary-style"; import { MAP_DARK_STYLE } from "@/constants/map-dark-style"; import { WORLD_INITIAL_REGION } from "@/constants/map-regions"; -import { MapCountryMarker } from "@/components/map/map-country-marker"; -import { MapPulseClusterMarker } from "@/components/map/map-pulse-cluster-marker"; -import type { MapCluster } from "@/lib/map-clusters"; +import { + countryNamesMatch, + filterBoundaryPolygonsByMapContext, + parseCountryBoundaryPolygons, + type CountryBoundaryPolygon, +} from "@/lib/map-country-boundaries"; +import { logMapDebug, summarizeRegion } from "@/lib/map-debug"; +import type { MapPressCoordinate } from "@/lib/map-map-tap-hit"; +import type { MapMarkerPresentation } from "@/lib/map-region-markers"; +import { + useMapUiStore, + type CountryMarkerDisplayMode, +} from "@/store/use-map-ui-store"; import type { MapCountry } from "@/types/country"; +const countriesGeoJson = require("@/assets/geo/ne_50m_admin_0_countries/ne_50m_admin_0_countries.json"); + export type WorldMapViewHandle = { animateToRegion: (region: Region, duration?: number) => void; resetWorldView: () => void; zoomBy: (direction: "in" | "out") => void; + pointForCoordinate: ( + coordinate: MapPressCoordinate, + ) => Promise<{ x: number; y: number } | null>; }; export type MapZoomTier = "world" | "region" | "country"; +const MIN_REGION_DELTA = 0.5; +const MAX_REGION_DELTA = 120; +const MIN_LATITUDE = -85; +const MAX_LATITUDE = 85; + +function normalizeLongitude(longitude: number): number { + if (!Number.isFinite(longitude)) return WORLD_INITIAL_REGION.longitude; + const wrapped = ((((longitude + 180) % 360) + 360) % 360) - 180; + return Object.is(wrapped, -0) ? 0 : wrapped; +} + +function clampRegionDelta(delta: number, fallback: number): number { + if (!Number.isFinite(delta)) return fallback; + return Math.min(MAX_REGION_DELTA, Math.max(MIN_REGION_DELTA, delta)); +} + +function sanitizeRegion(region: Region, fallback: Region): Region { + const latitude = Number.isFinite(region.latitude) + ? Math.min(MAX_LATITUDE, Math.max(MIN_LATITUDE, region.latitude)) + : fallback.latitude; + + return { + latitude, + longitude: normalizeLongitude(region.longitude), + latitudeDelta: clampRegionDelta( + region.latitudeDelta, + fallback.latitudeDelta, + ), + longitudeDelta: clampRegionDelta( + region.longitudeDelta, + fallback.longitudeDelta, + ), + }; +} + type WorldMapViewProps = { countries: MapCountry[]; - clusters: MapCluster[]; + /** Full country list for boundary region matching (markers may be a subset). */ + boundaryCountries: MapCountry[]; selectedName: string | null; + focusTransitionName?: string | null; focusedRegion: string | null; + previewRegion?: string | null; zoomTier: MapZoomTier; + countryMarkerMode?: CountryMarkerDisplayMode; + markerPresentation?: MapMarkerPresentation; + markerRevealGeneration?: number; onCountryPress: (country: MapCountry) => void; - onClusterPress: (cluster: MapCluster) => void; - onMapPress: () => void; + onMapPress: (coordinate?: MapPressCoordinate) => void; + onMapReady?: () => void; + /** Throttled continuous viewport updates — drives live zoom-tier/marker density. */ + onRegionChange?: (region: Region) => void; onRegionChangeComplete?: (region: Region) => void; + /** When true, user cannot pan or pinch-zoom (programmatic moves still work). */ + lockUserGestures?: boolean; + suspendMarkerSnapshot?: boolean; + markerRefreshToken?: number; }; export const WorldMapView = forwardRef( function WorldMapView( { countries, - clusters, + boundaryCountries, selectedName, + focusTransitionName = null, focusedRegion, + previewRegion = null, zoomTier, + countryMarkerMode = "flag", + markerPresentation = "full", + markerRevealGeneration = 0, onCountryPress, - onClusterPress, onMapPress, + onMapReady, + onRegionChange, onRegionChangeComplete, + lockUserGestures = false, + suspendMarkerSnapshot = false, + markerRefreshToken = 0, }, ref, ) { + const keepSingleMarkerLive = countries.length === 1; const mapRef = useRef(null); const regionRef = useRef(WORLD_INITIAL_REGION); + const lastRegionChangeEmitRef = useRef(0); const animateToRegion = useCallback((region: Region, duration = 500) => { - regionRef.current = region; - mapRef.current?.animateToRegion(region, duration); + const input = summarizeRegion(region); + const safeRegion = sanitizeRegion(region, regionRef.current); + const output = summarizeRegion(safeRegion); + if (!input.finite || input.lat !== output.lat || input.latDelta !== output.latDelta) { + logMapDebug("camera", "world-map-view region sanitized", { + duration, + input, + output, + hasMapRef: !!mapRef.current, + }); + } + regionRef.current = safeRegion; + try { + mapRef.current?.animateToRegion(safeRegion, duration); + } catch (err) { + logMapDebug("camera", "ERROR world-map-view animateToRegion threw", { + error: err instanceof Error ? err.message : String(err), + output, + }); + throw err; + } }, []); useImperativeHandle( @@ -60,23 +171,86 @@ export const WorldMapView = forwardRef( zoomBy: (direction) => { const current = regionRef.current; const scale = direction === "in" ? 0.65 : 1.45; - const next: Region = { - ...current, - latitudeDelta: Math.min( - 120, - Math.max(2, current.latitudeDelta * scale), - ), - longitudeDelta: Math.min( - 120, - Math.max(2, current.longitudeDelta * scale), - ), - }; + const next = sanitizeRegion( + { + ...current, + latitudeDelta: current.latitudeDelta * scale, + longitudeDelta: current.longitudeDelta * scale, + }, + WORLD_INITIAL_REGION, + ); animateToRegion(next, 300); }, + pointForCoordinate: async (coordinate) => { + try { + const point = await mapRef.current?.pointForCoordinate({ + latitude: coordinate.latitude, + longitude: coordinate.longitude, + }); + if (!point) return null; + return { x: point.x, y: point.y }; + } catch { + return null; + } + }, }), [animateToRegion], ); + const boundaryStyle = useMapUiStore((s) => s.boundaryStyle); + const boundaryStyleRevision = useMapUiStore((s) => s.boundaryStyleRevision); + const showBoundaryLines = useMapUiStore((s) => s.showBoundaryLines); + + const allCountryBoundaries = useMemo( + () => parseCountryBoundaryPolygons(countriesGeoJson), + [], + ); + + const showWorldBoundaries = + showBoundaryLines && !focusedRegion && !selectedName; + + const countryBoundaries = useMemo( + () => + filterBoundaryPolygonsByMapContext(allCountryBoundaries, { + selectedCountryName: selectedName, + focusedRegion, + countries: boundaryCountries, + showWorldBoundaries, + }), + [ + allCountryBoundaries, + boundaryCountries, + focusedRegion, + selectedName, + showWorldBoundaries, + ], + ); + + const outlineStrokeWidth = resolveBoundaryStrokeWidth( + boundaryStyle, + zoomTier, + ); + const outlineStrokeColor = resolveBoundaryStrokeColor( + boundaryStyle, + zoomTier, + ); + const outlineFillColor = resolveBoundaryFillColor(boundaryStyle); + const boundaryRenderKey = boundaryStyleRenderKey(boundaryStyle, zoomTier); + const boundariesTappable = zoomTier === "country" && !!focusedRegion; + const boundaryZIndex = focusedRegion + ? MAP_CONTINENT_FOCUS_POLYGON_Z + 2 + : 1; + + const handleBoundaryPress = useCallback( + (polygon: CountryBoundaryPolygon) => { + const country = boundaryCountries.find((c) => + countryNamesMatch(c.name, polygon.countryName), + ); + if (country) onCountryPress(country); + }, + [boundaryCountries, onCountryPress], + ); + return ( ( provider={PROVIDER_DEFAULT} initialRegion={WORLD_INITIAL_REGION} customMapStyle={MAP_DARK_STYLE} - onPress={onMapPress} + onMapReady={onMapReady} + onRegionChange={ + onRegionChange + ? (region) => { + const now = Date.now(); + if (now - lastRegionChangeEmitRef.current < 90) return; + lastRegionChangeEmitRef.current = now; + onRegionChange(sanitizeRegion(region, regionRef.current)); + } + : undefined + } + onPress={(event) => { + const coordinate = event.nativeEvent.coordinate; + if (!coordinate) { + onMapPress(undefined); + return; + } + + const { latitude, longitude } = coordinate; + if (!Number.isFinite(latitude) || !Number.isFinite(longitude)) { + onMapPress(undefined); + return; + } + + onMapPress({ latitude, longitude }); + }} onRegionChangeComplete={(region) => { - regionRef.current = region; - onRegionChangeComplete?.(region); + const safeRegion = sanitizeRegion(region, regionRef.current); + regionRef.current = safeRegion; + onRegionChangeComplete?.(safeRegion); }} + scrollEnabled={!lockUserGestures} + zoomEnabled={!lockUserGestures} + zoomTapEnabled={!lockUserGestures} rotateEnabled={false} pitchEnabled={false} toolbarEnabled={false} @@ -96,25 +299,63 @@ export const WorldMapView = forwardRef( showsScale={false} showsUserLocation={false} showsMyLocationButton={false} - mapType={Platform.OS === "android" ? "standard" : "mutedStandard"} + mapType={Platform.OS === "android" ? "standard" : "hybridFlyover"} > - {zoomTier === "world" - ? clusters.map((cluster) => ( - + ) : null} + {showBoundaryLines + ? countryBoundaries.map((polygon) => ( + handleBoundaryPress(polygon) + : undefined + } + strokeColor={outlineStrokeColor} + strokeWidth={outlineStrokeWidth} + fillColor={outlineFillColor} + zIndex={boundaryZIndex} /> )) - : countries.map((country) => ( - onCountryPress(country)} - /> - ))} + : null} + {countries.map((country) => { + const isSelected = selectedName === country.name; + const isFocusTransitioning = focusTransitionName === country.name; + const isHighlighted = isSelected || isFocusTransitioning; + const focusedPinName = selectedName ?? focusTransitionName; + + return ( + onCountryPress(country)} + /> + ); + })} ); }, diff --git a/components/search/search-overlay.tsx b/components/search/search-overlay.tsx index f43a353..db59db0 100644 --- a/components/search/search-overlay.tsx +++ b/components/search/search-overlay.tsx @@ -17,10 +17,11 @@ import { useSafeAreaInsets } from "react-native-safe-area-context"; import { FlagBadge } from "@/components/explore/flag-badge"; import { FeedErrorBanner } from "@/components/home/feed-error-banner"; -import { CONTINENTS } from "@/constants/regions"; +import { CONTINENTS, continentDisplayLabel } from "@/constants/regions"; import { fetchSearchCountries } from "@/lib/api"; import { getAiFact, getCountryImages } from "@/lib/format-country"; import { openCountryInExplore } from "@/lib/open-country-in-explore"; +import { openCountryOnMap } from "@/lib/open-country-on-map"; import { useSearchUiStore } from "@/store/use-search-ui-store"; import type { Country } from "@/types/country"; @@ -33,7 +34,9 @@ type SearchStatus = "idle" | "loading" | "success" | "error"; export function SearchOverlay() { const insets = useSafeAreaInsets(); const isOpen = useSearchUiStore((s) => s.isOpen); + const context = useSearchUiStore((s) => s.context); const closeSearch = useSearchUiStore((s) => s.closeSearch); + const isMapMode = context === "map"; const [query, setQuery] = useState(""); const [region, setRegion] = useState(null); @@ -184,211 +187,250 @@ export function SearchOverlay() { results.length === 0 && (!!query.trim() || !!region); - return ( - - + const handleResultPress = isMapMode ? openCountryOnMap : openCountryInExplore; + + const searchInput = ( + <> + + + {query.length > 0 ? ( - - setQuery("")} + hitSlop={8} > - - + + ) : null} + + ); + + const searchField = ( + + + {searchInput} + + + ); + + const regionChips = ( + + {CONTINENTS.map((name) => { + const selected = region === name; + return ( + toggleRegion(name)} + hitSlop={4} + style={({ pressed }) => [ + styles.chip, + selected && styles.chipSelected, + pressed && { opacity: 0.85 }, + ]} + > + - - - - Search + {continentDisplayLabel(name)} - - + + ); + })} + + ); - - - - - {query.length > 0 ? ( - setQuery("")} - hitSlop={8} - > - - - ) : null} + const searchBody = ( + <> + {status === "error" && error ? ( + + + + ) : null} + + {showIdle ? ( + + {recentSearches.length > 0 ? ( + + + Recent searches + + + {recentSearches.map((term) => ( + handleRecentTap(term)} + style={({ pressed }) => [ + styles.recentChip, + pressed && { opacity: 0.85 }, + ]} + > + + {term} + + ))} + - - - + ) : status === "loading" ? ( + + + + ) : showEmpty ? ( + + + No countries found + + + Try another spelling or pick a different region. + + + ) : ( + + item.name} + renderItem={({ item }) => ( + handleResultPress(item)} + /> + )} keyboardShouldPersistTaps="handled" keyboardDismissMode="on-drag" - style={styles.chipsScroll} - contentContainerStyle={styles.chipsRow} - className="pb-4" + contentContainerStyle={styles.listContent} + showsVerticalScrollIndicator={false} + style={styles.resultsList} + /> + + )} + + ); + + return ( + + {isMapMode ? ( + + + + - {CONTINENTS.map((name) => { - const selected = region === name; - return ( - toggleRegion(name)} - hitSlop={4} - style={({ pressed }) => [ - styles.chip, - selected && styles.chipSelected, - pressed && { opacity: 0.85 }, - ]} - > - - {name} - - {/* {selected ? ( - - ) : null} */} - - ); - })} - - - {status === "error" && error ? ( - - - - ) : null} + {searchField} + {regionChips} + {searchBody} + + + ) : ( + + - {showIdle ? ( - - {recentSearches.length > 0 ? ( - - - Recent searches - - - {recentSearches.map((term) => ( - handleRecentTap(term)} - style={({ pressed }) => [ - styles.recentChip, - pressed && { opacity: 0.85 }, - ]} - > - - {term} - - ))} - - - ) : null} - - ) : status === "loading" ? ( - - - - ) : showEmpty ? ( - - - No countries found - - - Try another spelling or pick a different region. + + + + + + + Search - - ) : ( - - item.name} - renderItem={({ item }) => ( - openCountryInExplore(item)} - /> - )} - keyboardShouldPersistTaps="handled" - keyboardDismissMode="on-drag" - contentContainerStyle={styles.listContent} - showsVerticalScrollIndicator={false} - style={styles.resultsList} - /> + - )} + + {searchField} + {regionChips} + {searchBody} + - + )} ); } @@ -458,6 +500,21 @@ const styles = StyleSheet.create({ root: { flex: 1, }, + mapTopPanel: { + position: "absolute", + top: 0, + left: 0, + right: 0, + height: "50%", + borderBottomLeftRadius: 24, + borderBottomRightRadius: 24, + overflow: "hidden", + backgroundColor: "rgba(0, 0, 0, 0.7)", + }, + mapSearchBody: { + flex: 1, + minHeight: 160, + }, scrim: { ...StyleSheet.absoluteFillObject, backgroundColor: "rgba(0, 0, 0, 0.6)", @@ -471,7 +528,9 @@ const styles = StyleSheet.create({ input: { flex: 1, fontSize: 14, - color: "#fff", + fontFamily: "Poppins-Regular", + color: "#ffffff", + backgroundColor: "transparent", paddingVertical: 0, }, chipsScroll: { diff --git a/constants/api.ts b/constants/api.ts index 58ea5cb..990092a 100644 --- a/constants/api.ts +++ b/constants/api.ts @@ -1,7 +1,9 @@ +import { resolveApiBaseUrl } from "@/lib/resolve-api-base-url"; + /** * Public backend base URL for the Expo app. - * Set EXPO_PUBLIC_API_URL in `.env` (see `.env.example`). - * On a physical device, use your machine's LAN IP instead of localhost. + * + * In dev, this follows Metro's host (see `lib/resolve-api-base-url.ts`). + * Override with `EXPO_PUBLIC_API_URL` for tunnels or production builds. */ -export const API_BASE_URL = - process.env.EXPO_PUBLIC_API_URL ?? "http://localhost:3001"; +export const API_BASE_URL = resolveApiBaseUrl(); diff --git a/constants/images.ts b/constants/images.ts index a2b5bc5..ffe6fda 100644 --- a/constants/images.ts +++ b/constants/images.ts @@ -1,7 +1,11 @@ +import earthMap from "@/assets/images/earth-map.jpg"; +import earthTopography from "@/assets/images/earth-topography.jpg"; import profileAvatar from "@/assets/images/profile-avatar.png"; import worldloopIcon from "@/assets/images/worldloop-icon.png"; export const images = { worldloopIcon, profileAvatar, + earthMap, + earthTopography, }; diff --git a/constants/map-activity.ts b/constants/map-activity.ts index 2b660c9..5b32a77 100644 --- a/constants/map-activity.ts +++ b/constants/map-activity.ts @@ -1,14 +1,7 @@ import type { MapCountry } from "@/types/country"; - -import { TRENDING_COUNTRY_NAMES } from "@/constants/trending-countries"; - -export type MapClusterActivity = "trending" | "rising" | "quiet"; +export type MapClusterActivity = "rising" | "quiet"; export function getClusterActivity(countries: MapCountry[]): MapClusterActivity { - if (countries.some((c) => TRENDING_COUNTRY_NAMES.has(c.name))) { - return "trending"; - } - // Rising: cluster contains any country in the top 20% by population (within cluster). const sorted = [...countries].sort((a, b) => b.population - a.population); const topCount = Math.max(1, Math.ceil(sorted.length * 0.2)); @@ -23,14 +16,6 @@ export function getClusterActivity(countries: MapCountry[]): MapClusterActivity export function getActivityVisual(activity: MapClusterActivity) { switch (activity) { - case "trending": - return { - borderColor: "rgba(239,68,68,0.75)", - bgColor: "rgba(239,68,68,0.16)", - textColor: "#fb7185", - ringColor: "rgba(239,68,68,0.9)", - icon: "flame" as const, - }; case "rising": return { borderColor: "rgba(251,191,36,0.8)", diff --git a/constants/map-boundary-style.ts b/constants/map-boundary-style.ts new file mode 100644 index 0000000..29cfed2 --- /dev/null +++ b/constants/map-boundary-style.ts @@ -0,0 +1,357 @@ +import { hexToRgb, hslToRgb } from "@/lib/color-utils"; + +export type MapZoomTier = "world" | "region" | "country"; +export type MapFillColorMode = "hue" | "grayscale"; + +export type MapBoundaryStyleSettings = { + strokeColorEnabled: boolean; + strokeColorHue: number; + /** Optional exact hex override (allows grayscale like #000000 / #FFFFFF). */ + strokeColorHex: string | null; + strokeWidthEnabled: boolean; + strokeThicknessStep: number; + /** 1–5 stepped line opacity (see strokeOpacityStepToDisplayPercent). */ + strokeOpacityStep: number; + fillEnabled: boolean; + fillOpacityStep: number; + fillColorMode: MapFillColorMode; + /** 0 = black, 100 = white (used when fillColorMode is grayscale). */ + fillGrayLevel: number; + fillColorHue: number; + /** Optional exact hex override (allows grayscale like #000000 / #FFFFFF). */ + fillColorHex: string | null; +}; + +/** Amber gold default (#fbbf24 ≈ hue 43). */ +export const DEFAULT_STROKE_COLOR_HUE = 43; +export const DEFAULT_FILL_COLOR_HUE = 210; + +export const BOUNDARY_STEP_MIN = 1; +export const BOUNDARY_STEP_MAX = 5; + +export const FILL_OPACITY_STEP_LABELS = [ + "Light", + "Soft", + "Medium", + "Strong", + "Bold", +] as const; + +export const STROKE_OPACITY_STEP_LABELS = FILL_OPACITY_STEP_LABELS; + +export const DEFAULT_MAP_BOUNDARY_STYLE: MapBoundaryStyleSettings = { + strokeColorEnabled: true, + strokeColorHue: DEFAULT_STROKE_COLOR_HUE, + strokeColorHex: null, + strokeWidthEnabled: true, + strokeThicknessStep: 1, + /** Soft (25%) — subtle borders that stay out of the way. */ + strokeOpacityStep: 2, + fillEnabled: false, + fillOpacityStep: 2, + fillColorMode: "hue", + fillGrayLevel: 50, + fillColorHue: DEFAULT_FILL_COLOR_HUE, + fillColorHex: null, +}; + +const STROKE_WIDTH_RANGE: Record = { + world: { min: 0.9, max: 2.6 }, + region: { min: 0.4, max: 1.2 }, + country: { min: 0.5, max: 1.2 }, +}; + +function clampHue(value: number): number { + return ((value % 360) + 360) % 360; +} + +function normalizeHexOverride(value: unknown): string | null { + if (typeof value !== "string") return null; + const normalized = value.startsWith("#") ? value : `#${value}`; + if (!hexToRgb(normalized)) return null; + return normalized.toUpperCase(); +} + +function clampGrayLevel(value: unknown): number { + if (typeof value !== "number" || !Number.isFinite(value)) { + return DEFAULT_MAP_BOUNDARY_STYLE.fillGrayLevel; + } + return Math.min(100, Math.max(0, Math.round(value))); +} + +function parseGrayscaleFromHex(hex: string): number | null { + const rgb = hexToRgb(hex); + if (!rgb) return null; + if (rgb.r !== rgb.g || rgb.g !== rgb.b) return null; + return Math.round((rgb.r / 255) * 100); +} + +export function clampBoundaryStep(value: number): number { + const rounded = Math.round(value); + return Math.min(BOUNDARY_STEP_MAX, Math.max(BOUNDARY_STEP_MIN, rounded)); +} + +export function getFillOpacityStepLabel(step: number): string { + const index = clampBoundaryStep(step) - BOUNDARY_STEP_MIN; + return FILL_OPACITY_STEP_LABELS[index] ?? FILL_OPACITY_STEP_LABELS[2]; +} + +/** UI display percentages aligned with the boundary style modal slider. */ +function opacityStepToDisplayPercent(step: number): number { + const percents = [0, 25, 50, 75, 100] as const; + const index = clampBoundaryStep(step) - BOUNDARY_STEP_MIN; + return percents[index] ?? percents[2]; +} + +export function fillOpacityStepToDisplayPercent(step: number): number { + return opacityStepToDisplayPercent(step); +} + +export function strokeOpacityStepToDisplayPercent(step: number): number { + return opacityStepToDisplayPercent(step); +} + +function displayPercentToOpacityStep(percent: number): number { + const value = Math.min(100, Math.max(0, Math.round(percent))); + if (value <= 12) return 1; + if (value <= 37) return 2; + if (value <= 62) return 3; + if (value <= 87) return 4; + return 5; +} + +export function displayPercentToFillOpacityStep(percent: number): number { + return displayPercentToOpacityStep(percent); +} + +export function displayPercentToStrokeOpacityStep(percent: number): number { + return displayPercentToOpacityStep(percent); +} + +export function getStrokeOpacityStepLabel(step: number): string { + const index = clampBoundaryStep(step) - BOUNDARY_STEP_MIN; + return STROKE_OPACITY_STEP_LABELS[index] ?? STROKE_OPACITY_STEP_LABELS[2]; +} + +function stepToUnit(step: number): number { + return ( + (clampBoundaryStep(step) - BOUNDARY_STEP_MIN) / + (BOUNDARY_STEP_MAX - BOUNDARY_STEP_MIN) + ); +} + +function migrateLegacyFill( + candidate: Partial & { + fillIntensity?: "off" | "subtle" | "medium"; + }, +): Pick { + if (typeof candidate.fillEnabled === "boolean") { + return { + fillEnabled: candidate.fillEnabled, + fillOpacityStep: clampBoundaryStep( + candidate.fillOpacityStep ?? DEFAULT_MAP_BOUNDARY_STYLE.fillOpacityStep, + ), + }; + } + + if (candidate.fillIntensity === "off") { + return { fillEnabled: false, fillOpacityStep: 2 }; + } + if (candidate.fillIntensity === "medium") { + return { fillEnabled: true, fillOpacityStep: 4 }; + } + if (candidate.fillIntensity === "subtle") { + return { fillEnabled: true, fillOpacityStep: 2 }; + } + + return { + fillEnabled: DEFAULT_MAP_BOUNDARY_STYLE.fillEnabled, + fillOpacityStep: DEFAULT_MAP_BOUNDARY_STYLE.fillOpacityStep, + }; +} + +function migrateLegacyThickness( + candidate: Partial & { strokeThickness?: number }, +): number { + if (typeof candidate.strokeThicknessStep === "number") { + return clampBoundaryStep(candidate.strokeThicknessStep); + } + + if (typeof candidate.strokeThickness === "number") { + return clampBoundaryStep(candidate.strokeThickness * 4 + 1); + } + + return DEFAULT_MAP_BOUNDARY_STYLE.strokeThicknessStep; +} + +export function normalizeBoundaryStyle( + value: unknown, +): MapBoundaryStyleSettings { + if (!value || typeof value !== "object") { + return DEFAULT_MAP_BOUNDARY_STYLE; + } + + const candidate = value as Partial & { + fillIntensity?: "off" | "subtle" | "medium"; + strokeThickness?: number; + }; + + if ( + !("strokeColorHue" in candidate) && + !("strokeColorEnabled" in candidate) + ) { + return DEFAULT_MAP_BOUNDARY_STYLE; + } + + const fill = migrateLegacyFill(candidate); + const strokeColorEnabled = + candidate.strokeColorEnabled ?? + DEFAULT_MAP_BOUNDARY_STYLE.strokeColorEnabled; + + const normalizedFillHex = normalizeHexOverride(candidate.fillColorHex); + const grayscaleFromHex = normalizedFillHex + ? parseGrayscaleFromHex(normalizedFillHex) + : null; + const fillColorMode: MapFillColorMode = + candidate.fillColorMode === "grayscale" || candidate.fillColorMode === "hue" + ? candidate.fillColorMode + : grayscaleFromHex !== null + ? "grayscale" + : "hue"; + + return { + strokeColorEnabled, + strokeColorHue: clampHue( + candidate.strokeColorHue ?? DEFAULT_MAP_BOUNDARY_STYLE.strokeColorHue, + ), + strokeColorHex: normalizeHexOverride(candidate.strokeColorHex), + strokeWidthEnabled: strokeColorEnabled + ? (candidate.strokeWidthEnabled ?? + DEFAULT_MAP_BOUNDARY_STYLE.strokeWidthEnabled) + : false, + strokeThicknessStep: migrateLegacyThickness(candidate), + strokeOpacityStep: clampBoundaryStep( + candidate.strokeOpacityStep ?? + DEFAULT_MAP_BOUNDARY_STYLE.strokeOpacityStep, + ), + fillEnabled: fill.fillEnabled, + fillOpacityStep: fill.fillOpacityStep, + fillColorMode, + fillGrayLevel: + fillColorMode === "grayscale" + ? (grayscaleFromHex ?? clampGrayLevel(candidate.fillGrayLevel)) + : clampGrayLevel(candidate.fillGrayLevel), + fillColorHue: clampHue( + candidate.fillColorHue ?? DEFAULT_MAP_BOUNDARY_STYLE.fillColorHue, + ), + fillColorHex: normalizedFillHex, + }; +} + +export function resolveBoundaryStrokeOpacity(step: number): number { + return stepToUnit(step); +} + +export function resolveBoundaryStrokeColor( + settings: MapBoundaryStyleSettings, + _zoomTier: MapZoomTier, +): string { + if (!settings.strokeColorEnabled) { + return "rgba(0, 0, 0, 0)"; + } + + const rgb = + (settings.strokeColorHex && hexToRgb(settings.strokeColorHex)) || + hslToRgb(settings.strokeColorHue, 0.55, 0.62); + const baseOpacity = resolveBoundaryStrokeOpacity(settings.strokeOpacityStep); + const tierMultiplier = + _zoomTier === "country" ? 1 : _zoomTier === "region" ? 0.88 : 0.75; + const opacity = baseOpacity * tierMultiplier; + return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`; +} + +export function resolveBoundaryStrokeWidth( + settings: MapBoundaryStyleSettings, + zoomTier: MapZoomTier, +): number { + if (!settings.strokeColorEnabled || !settings.strokeWidthEnabled) { + return 0; + } + + const { min, max } = STROKE_WIDTH_RANGE[zoomTier]; + const t = stepToUnit(settings.strokeThicknessStep); + return min + (max - min) * t; +} + +export function resolveBoundaryFillOpacity(step: number): number { + // UX shows 0-100%, but rendered map fill is intentionally capped at 80%. + const unit = stepToUnit(step); + return unit * 0.8; +} + +export function resolveBoundaryFillColor( + settings: MapBoundaryStyleSettings, +): string { + if (!settings.fillEnabled) { + return "rgba(0, 0, 0, 0)"; + } + + const isGrayscale = settings.fillColorMode === "grayscale"; + const grayLevel = clampGrayLevel(settings.fillGrayLevel); + const rgb = isGrayscale + ? (() => { + const g = Math.round((grayLevel / 100) * 255); + return { r: g, g, b: g }; + })() + : (settings.fillColorHex && hexToRgb(settings.fillColorHex)) || + hslToRgb(settings.fillColorHue, 0.85, 0.58); + const baseOpacity = resolveBoundaryFillOpacity(settings.fillOpacityStep); + const opacity = isGrayscale + ? Math.min(1, baseOpacity * (1 + ((100 - grayLevel) / 100) * 0.5)) + : baseOpacity; + return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`; +} + +/** Clamp steps and align width toggle before persisting or live-previewing. */ +export function applyBoundaryStyleDraft( + draft: MapBoundaryStyleSettings, +): MapBoundaryStyleSettings { + return normalizeBoundaryStyle({ + ...draft, + strokeThicknessStep: clampBoundaryStep(draft.strokeThicknessStep), + strokeOpacityStep: clampBoundaryStep(draft.strokeOpacityStep), + fillOpacityStep: clampBoundaryStep(draft.fillOpacityStep), + strokeWidthEnabled: draft.strokeColorEnabled, + }); +} + +export function boundaryStyleHasChanges( + draft: MapBoundaryStyleSettings, + current: MapBoundaryStyleSettings, +): boolean { + return ( + draft.strokeColorEnabled !== current.strokeColorEnabled || + draft.strokeColorHue !== current.strokeColorHue || + draft.strokeColorHex !== current.strokeColorHex || + draft.strokeWidthEnabled !== current.strokeWidthEnabled || + draft.strokeThicknessStep !== current.strokeThicknessStep || + draft.strokeOpacityStep !== current.strokeOpacityStep || + draft.fillEnabled !== current.fillEnabled || + draft.fillOpacityStep !== current.fillOpacityStep || + draft.fillColorMode !== current.fillColorMode || + draft.fillGrayLevel !== current.fillGrayLevel || + draft.fillColorHue !== current.fillColorHue || + draft.fillColorHex !== current.fillColorHex + ); +} + +export function boundaryStyleRenderKey( + settings: MapBoundaryStyleSettings, + zoomTier: MapZoomTier, +): string { + return [ + resolveBoundaryStrokeColor(settings, zoomTier), + resolveBoundaryStrokeWidth(settings, zoomTier), + resolveBoundaryFillColor(settings), + ].join("|"); +} diff --git a/constants/map-chrome-styles.ts b/constants/map-chrome-styles.ts new file mode 100644 index 0000000..d2cc107 --- /dev/null +++ b/constants/map-chrome-styles.ts @@ -0,0 +1,43 @@ +/** Shared surfaces for map overlay controls (search, chips, pills). */ +export const MAP_CHROME_SURFACE = "rgba(16, 24, 40, 0.5)"; +export const MAP_CHROME_BORDER = "rgba(255, 255, 255, 0.16)"; +export const MAP_CHROME_TEXT = "#f1f5f9"; +export const MAP_CHROME_TEXT_MUTED = "#cbd5e1"; +export const MAP_CHROME_PLACEHOLDER = "rgba(148, 163, 184, 0.72)"; +export const MAP_CHROME_ACCENT = "#fbbf24"; + +export const MAP_CHIP_BASE = { + borderWidth: 0, + backgroundColor: MAP_CHROME_SURFACE, +} as const; + +export const MAP_CHIP_SELECTED = { + borderWidth: 1, + borderColor: MAP_CHROME_ACCENT, + backgroundColor: MAP_CHROME_SURFACE, +} as const; + +/** Map tool stack (zoom, mode toggle) — matches layers FAB surface. */ +export const MAP_CONTROL_STACK = { + backgroundColor: MAP_CHROME_SURFACE, + borderColor: MAP_CHROME_BORDER, + pressedBackgroundColor: "rgba(255, 255, 255, 0.08)", +} as const; + +/** Circular FABs — accent (primary random) vs control (subtle layers). */ +export const MAP_CIRCULAR_FAB = { + accentSize: 52, + accentBorderRadius: 26, + accentIconSize: 23, + accentBackgroundColor: MAP_CHROME_ACCENT, + accentBorderColor: MAP_CHROME_ACCENT, + accentIconColor: "#0b132b", + accentPressedBackground: "#e5ad1f", + controlSize: 44, + controlBorderRadius: 22, + controlIconSize: 20, + controlBackgroundColor: "rgba(16, 24, 40, 0.5)", + controlBorderColor: MAP_CHROME_BORDER, + controlIconColor: "#ffffff", + controlPressedBackgroundColor: "rgba(255, 255, 255, 0.08)", +} as const; diff --git a/constants/map-continent-focus.ts b/constants/map-continent-focus.ts new file mode 100644 index 0000000..5850d6a --- /dev/null +++ b/constants/map-continent-focus.ts @@ -0,0 +1,56 @@ +import type { LatLng } from "react-native-maps"; + +/** Brand accent — matches `--color-tab-active` / map pins. */ +export const MAP_FOCUS_ACCENT = { + r: 251, + g: 191, + b: 36, +} as const; + +/** Deep navy scrim — matches `--color-midnight-navy`. */ +export const MAP_FOCUS_SCRIM = { + r: 11, + g: 19, + b: 43, +} as const; + +/** Target fill opacity at full blend (0–1). */ +export const MAP_CONTINENT_FOCUS_FILL_OPACITY = 0.18; +export const MAP_SCRIM_MAX_OPACITY = 0.12; + +/** Softer continent wash when a country pin is already selected. */ +export const MAP_CONTINENT_FOCUS_FILL_OPACITY_WITH_COUNTRY = 0.11; +export const MAP_SCRIM_MAX_OPACITY_WITH_COUNTRY = 0.08; + +/** Softer highlight while continent intent is pending (before commit). */ +export const MAP_CONTINENT_PREVIEW_FILL_OPACITY = 0.12; +export const MAP_CONTINENT_PREVIEW_SCRIM_OPACITY = 0.05; + +/** Pause before committing continent focus (ms). */ +export const MAP_CONTINENT_INTENT_DELAY_MS = 200; + +/** Ignore taps when orbit/pan finger movement exceeds this (px). */ +export const MAP_TAP_DRAG_THRESHOLD_PX = 10; + +export const MAP_CONTINENT_FOCUS_FADE_MS = 250; + +export const MAP_CONTINENT_FOCUS_SCRIM_Z = 2; +export const MAP_CONTINENT_FOCUS_POLYGON_Z = 3; + +/** Covers the visible map; rendered below continent highlight polygons. */ +export const MAP_WORLD_SCRIM_RING: LatLng[] = [ + { latitude: 85, longitude: -180 }, + { latitude: 85, longitude: 180 }, + { latitude: -85, longitude: 180 }, + { latitude: -85, longitude: -180 }, +]; + +export function mapFocusAccentRgba(alpha: number): string { + const a = Math.min(1, Math.max(0, alpha)); + return `rgba(${MAP_FOCUS_ACCENT.r}, ${MAP_FOCUS_ACCENT.g}, ${MAP_FOCUS_ACCENT.b}, ${a})`; +} + +export function mapFocusScrimRgba(alpha: number): string { + const a = Math.min(1, Math.max(0, alpha)); + return `rgba(${MAP_FOCUS_SCRIM.r}, ${MAP_FOCUS_SCRIM.g}, ${MAP_FOCUS_SCRIM.b}, ${a})`; +} diff --git a/constants/map-regions.ts b/constants/map-regions.ts index b268abe..6c5d031 100644 --- a/constants/map-regions.ts +++ b/constants/map-regions.ts @@ -1,5 +1,9 @@ import type { Region } from "react-native-maps"; +import { getMapDisplayLatLng } from "@/lib/map-country"; +import { REGION_FOCUS_INITIAL_DELTA } from "@/lib/map-region-markers"; +import type { MapCountry } from "@/types/country"; + export const WORLD_INITIAL_REGION: Region = { latitude: 20, longitude: 0, @@ -18,3 +22,29 @@ export function regionForCountry( longitudeDelta: delta, }; } + +/** Camera region centered on a country pin (handles south-pole coordinates). */ +export function regionForMapCountry( + country: Pick, + delta = 18, +): Region { + return regionForCountry(getMapDisplayLatLng(country), delta); +} + +/** Framed for the Antarctic continent + nearby island territories. */ +export const ANTARCTIC_FOCUS_REGION: Region = { + latitude: -72, + longitude: 20, + latitudeDelta: 42, + longitudeDelta: 110, +}; + +export function regionForClusterFocus(cluster: { + region: string; + center: [number, number]; +}): Region { + if (cluster.region === "Antarctic") { + return ANTARCTIC_FOCUS_REGION; + } + return regionForCountry(cluster.center, REGION_FOCUS_INITIAL_DELTA); +} diff --git a/constants/regions.ts b/constants/regions.ts index 4d1435a..67fea37 100644 --- a/constants/regions.ts +++ b/constants/regions.ts @@ -4,7 +4,9 @@ export const FOR_YOU_TAB = "For You" as const; /** REST Countries `region` values (continents) used for browse filters. */ export const CONTINENTS = [ "Africa", - "Americas", + "North America", + "South America", + "Antarctic", "Asia", "Europe", "Oceania", @@ -12,6 +14,17 @@ export const CONTINENTS = [ export type Continent = (typeof CONTINENTS)[number]; +/** User-facing labels where REST Countries naming differs (e.g. `Antarctic` → Antarctica). */ +export const CONTINENT_DISPLAY_LABELS: Record = { + Africa: "Africa", + "North America": "North America", + "South America": "South America", + Antarctic: "Antarctica", + Asia: "Asia", + Europe: "Europe", + Oceania: "Oceania", +}; + /** Explore top bar tabs: For You first, then continents. */ export const EXPLORE_HEADER_TABS = [FOR_YOU_TAB, ...CONTINENTS] as const; @@ -20,3 +33,24 @@ export type ExploreHeaderTab = (typeof EXPLORE_HEADER_TABS)[number]; export function isContinent(value: string): value is Continent { return (CONTINENTS as readonly string[]).includes(value); } + +export function continentDisplayLabel(region: string): string { + if (isContinent(region)) return CONTINENT_DISPLAY_LABELS[region]; + return region; +} + +/** Step to previous/next continent in a list (wraps around). */ +export function adjacentContinent( + current: string, + direction: "prev" | "next", + ordered: readonly string[] = CONTINENTS, +): string | null { + if (ordered.length === 0) return null; + + const idx = ordered.indexOf(current); + if (idx < 0) return ordered[0] ?? null; + + const delta = direction === "next" ? 1 : -1; + const nextIdx = (idx + delta + ordered.length) % ordered.length; + return ordered[nextIdx] ?? null; +} diff --git a/eslint.config.js b/eslint.config.js index 5025da6..2d57efa 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -7,4 +7,33 @@ module.exports = defineConfig([ { ignores: ['dist/*'], }, + { + rules: { + // @react-three/fiber uses Three.js props on JSX primitives (mesh, materials, etc.) + 'react/no-unknown-property': [ + 'warn', + { + ignore: [ + 'attach', + 'args', + 'map', + 'emissive', + 'emissiveIntensity', + 'roughness', + 'metalness', + 'transparent', + 'depthWrite', + 'depthTest', + 'side', + 'geometry', + 'object', + 'intensity', + 'position', + 'castShadow', + 'receiveShadow', + ], + }, + ], + }, + }, ]); diff --git a/hooks/use-continent-intent.ts b/hooks/use-continent-intent.ts new file mode 100644 index 0000000..398f24c --- /dev/null +++ b/hooks/use-continent-intent.ts @@ -0,0 +1,71 @@ +import * as Haptics from "expo-haptics"; +import { useCallback, useEffect, useRef, useState } from "react"; + +import { MAP_CONTINENT_INTENT_DELAY_MS } from "@/constants/map-continent-focus"; +import type { MapCluster } from "@/lib/map-clusters"; + +type UseContinentIntentOptions = { + onCommit: (cluster: MapCluster) => void; + /** Active continent — cross-continent taps commit immediately (no world preview). */ + focusedRegion?: string | null; +}; + +export function useContinentIntent({ + onCommit, + focusedRegion = null, +}: UseContinentIntentOptions) { + const [previewRegion, setPreviewRegion] = useState(null); + const timerRef = useRef | null>(null); + const pendingClusterRef = useRef(null); + + const cancelIntent = useCallback(() => { + if (timerRef.current) { + clearTimeout(timerRef.current); + timerRef.current = null; + } + pendingClusterRef.current = null; + setPreviewRegion(null); + }, []); + + const requestContinentFocus = useCallback( + (cluster: MapCluster) => { + if (timerRef.current) { + clearTimeout(timerRef.current); + timerRef.current = null; + } + + // Preview layers only apply at world zoom; switching while focused + // must commit immediately to avoid conflicting polygon/scrim state. + if (focusedRegion && focusedRegion !== cluster.region) { + pendingClusterRef.current = null; + setPreviewRegion(null); + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + onCommit(cluster); + return; + } + + pendingClusterRef.current = cluster; + setPreviewRegion(cluster.region); + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + + timerRef.current = setTimeout(() => { + const pending = pendingClusterRef.current; + timerRef.current = null; + pendingClusterRef.current = null; + setPreviewRegion(null); + if (pending) { + onCommit(pending); + } + }, MAP_CONTINENT_INTENT_DELAY_MS); + }, + [focusedRegion, onCommit], + ); + + useEffect(() => () => cancelIntent(), [cancelIntent]); + + return { + previewRegion, + requestContinentFocus, + cancelIntent, + }; +} diff --git a/hooks/use-map-flight.ts b/hooks/use-map-flight.ts new file mode 100644 index 0000000..00a4556 --- /dev/null +++ b/hooks/use-map-flight.ts @@ -0,0 +1,167 @@ +import { useCallback, useEffect, useMemo, useRef } from "react"; +import type { Region } from "react-native-maps"; + +import { logMapDebug, summarizeRegion } from "@/lib/map-debug"; + +export type FlightPhase = { + region: Region; + duration: number; +}; + +type UseMapFlightParams = { + /** Issues the actual flat-map camera move. */ + animateToRegion: (region: Region, duration: number) => void; + /** Fires true when a sequence starts and false only when it fully settles. */ + onActiveChange?: (active: boolean) => void; +}; + +export type MapFlightController = { + /** + * Run an ordered phase sequence (e.g. world -> continent -> country). + * Cancels any in-flight sequence first so taps/selection can retarget the camera. + */ + flyTo: (phases: FlightPhase[], onComplete?: () => void) => void; + /** Cancel pending phases and mark the current flight stale. */ + cancel: () => void; + isActive: () => boolean; +}; + +/** Pause after each phase duration before the next animateToRegion (iOS needs headroom). */ +const PHASE_GAP_MS = 220; +/** Extra time after the final phase before declaring the flight settled. */ +const SETTLE_BUFFER_MS = 250; + +/** + * Serializes flat-map camera flights through a single in-flight slot. + * Overlapping animateToRegion calls can crash iOS react-native-maps, so an + * interrupting flight defers its first move by a tick to let the prior one yield. + */ +export function useMapFlight({ + animateToRegion, + onActiveChange, +}: UseMapFlightParams): MapFlightController { + const timersRef = useRef[]>([]); + const runIdRef = useRef(0); + const activeRef = useRef(false); + + const clearTimers = useCallback(() => { + for (const id of timersRef.current) { + clearTimeout(id); + } + timersRef.current = []; + }, []); + + const setActive = useCallback( + (next: boolean) => { + if (activeRef.current === next) return; + activeRef.current = next; + onActiveChange?.(next); + }, + [onActiveChange], + ); + + const cancel = useCallback(() => { + const cancelledRunId = runIdRef.current; + const wasActive = activeRef.current; + clearTimers(); + runIdRef.current += 1; + setActive(false); + logMapDebug("flight", "cancel", { + cancelledRunId, + nextRunId: runIdRef.current, + wasActive, + }); + }, [clearTimers, setActive]); + + const flyTo = useCallback( + (phases: FlightPhase[], onComplete?: () => void) => { + if (phases.length === 0) { + cancel(); + return; + } + + const wasActive = activeRef.current; + clearTimers(); + const runId = ++runIdRef.current; + setActive(true); + + logMapDebug("flight", "flyTo start", { + runId, + wasActive, + phaseCount: phases.length, + phases: phases.map((p, i) => ({ + index: i, + duration: p.duration, + region: summarizeRegion(p.region), + })), + }); + + let elapsed = 0; + phases.forEach((phase, index) => { + const issue = () => { + if (runIdRef.current !== runId) { + logMapDebug("flight", "phase skipped (stale run)", { + runId, + currentRunId: runIdRef.current, + phaseIndex: index, + }); + return; + } + logMapDebug("flight", "phase issue animateToRegion", { + runId, + phaseIndex: index, + duration: phase.duration, + region: summarizeRegion(phase.region), + }); + animateToRegion(phase.region, phase.duration); + }; + + const deferFirstPhase = phases.length > 1; + if (index === 0 && !wasActive && !deferFirstPhase) { + // Single-phase flights can start immediately. + issue(); + } else { + // Multi-phase and interrupting flights defer every phase so + // animateToRegion calls never overlap on react-native-maps (iOS crash). + const delay = index === 0 && !wasActive ? 0 : elapsed; + const id = setTimeout(issue, delay); + timersRef.current.push(id); + } + + elapsed += phase.duration + PHASE_GAP_MS; + }); + + const totalDuration = Math.max(0, elapsed - PHASE_GAP_MS + SETTLE_BUFFER_MS); + const completeId = setTimeout(() => { + if (runIdRef.current !== runId) { + logMapDebug("flight", "complete skipped (stale run)", { + runId, + currentRunId: runIdRef.current, + }); + return; + } + logMapDebug("flight", "flyTo settled", { runId, totalDuration }); + setActive(false); + onComplete?.(); + }, totalDuration); + timersRef.current.push(completeId); + }, + [animateToRegion, cancel, clearTimers, setActive], + ); + + useEffect(() => { + return () => { + clearTimers(); + runIdRef.current += 1; + activeRef.current = false; + }; + }, [clearTimers]); + + const isActive = useCallback(() => activeRef.current, []); + + // Stable identity so consumer callbacks/effects don't churn each render. + return useMemo( + () => ({ flyTo, cancel, isActive }), + [flyTo, cancel, isActive], + ); +} diff --git a/hooks/use-map-marker-reveal.ts b/hooks/use-map-marker-reveal.ts new file mode 100644 index 0000000..37b2cc5 --- /dev/null +++ b/hooks/use-map-marker-reveal.ts @@ -0,0 +1,247 @@ +import { useEffect, useMemo, useRef, useState } from "react"; + +import { logMapDebug } from "@/lib/map-debug"; +import { + MARKER_REVEAL_BATCH_INTERVAL_MS, + MARKER_REVEAL_BATCH_SIZE, + MARKER_REVEAL_PRIORITY_BATCH, + type MapMarkerPresentation, + sortCountriesByViewportPriority, +} from "@/lib/map-region-markers"; +import type { MapCountry } from "@/types/country"; + +type ViewportCenter = { + latitude: number; + longitude: number; +}; + +type UseMapMarkerRevealParams = { + candidateCountries: MapCountry[]; + viewportCenter: ViewportCenter; + focusedRegion: string | null; + /** Selected / in-flight country — always revealed first at continent zoom. */ + focalCountryName?: string | null; + isDetailZoom: boolean; + enabled: boolean; + /** + * Holds the rendered marker set steady (no new batch mounts / region swaps). + * Set true during a camera flight so marker churn never overlaps animateToRegion, + * which can crash react-native-maps on iOS. + */ + paused?: boolean; +}; + +type UseMapMarkerRevealResult = { + countriesToRender: MapCountry[]; + presentation: MapMarkerPresentation; + revealGeneration: number; +}; + +/** + * Delay between clearing the previous region's pins and mounting the new + * region's pins. Removing N markers and adding M markers in the SAME native + * transaction churns react-native-maps and crashes iOS, so we split the swap + * into a removal-only commit followed (one tick later) by addition-only commits. + */ +const REGION_SWAP_CLEAR_DELAY_MS = 90; + +export function useMapMarkerReveal({ + candidateCountries, + viewportCenter, + focusedRegion, + focalCountryName = null, + isDetailZoom, + enabled, + paused = false, +}: UseMapMarkerRevealParams): UseMapMarkerRevealResult { + /** + * The single source of truth for which markers are mounted. Kept in state (not + * derived during render) so a flight settling never swaps the whole set in the + * same commit — transitions only happen via the effect/timers below. + */ + const [renderedCountries, setRenderedCountries] = useState([]); + const [revealGeneration, setRevealGeneration] = useState(0); + const intervalRef = useRef | null>(null); + const swapTimerRef = useRef | null>(null); + /** Region the current reveal belongs to — reset only when this changes. */ + const revealRegionRef = useRef(null); + /** How many candidates are currently revealed (synchronous reads in timers). */ + const revealedCountRef = useRef(0); + + const sortedCandidates = useMemo(() => { + if (!enabled || candidateCountries.length === 0) return []; + return sortCountriesByViewportPriority( + candidateCountries, + viewportCenter.latitude, + viewportCenter.longitude, + focalCountryName, + ); + }, [ + candidateCountries, + enabled, + focalCountryName, + viewportCenter.latitude, + viewportCenter.longitude, + ]); + + /** Stable across viewport sort order — avoids reveal restarts when the globe spins. */ + const candidateSetKey = useMemo( + () => + candidateCountries + .map((country) => country.name) + .sort() + .join("\0"), + [candidateCountries], + ); + + const clearRevealInterval = () => { + if (intervalRef.current) { + clearInterval(intervalRef.current); + intervalRef.current = null; + } + }; + + const clearSwapTimer = () => { + if (swapTimerRef.current) { + clearTimeout(swapTimerRef.current); + swapTimerRef.current = null; + } + }; + + useEffect(() => { + clearRevealInterval(); + clearSwapTimer(); + + // While a flight animates, stop mounting/unmounting marker batches — the + // rendered snapshot keeps the current pins on screen until the camera settles. + if (paused) { + logMapDebug("reveal", "paused — holding markers", { + focusedRegion, + candidateCount: sortedCandidates.length, + revealed: revealedCountRef.current, + }); + return; + } + + if (!enabled || sortedCandidates.length === 0) { + revealRegionRef.current = null; + revealedCountRef.current = 0; + setRenderedCountries([]); + return; + } + + const total = sortedCandidates.length; + const priorityCount = Math.min(MARKER_REVEAL_PRIORITY_BATCH, total); + + // Grows the revealed window one batch at a time (addition-only commits). + const startBatchInterval = () => { + intervalRef.current = setInterval(() => { + const next = Math.min( + revealedCountRef.current + MARKER_REVEAL_BATCH_SIZE, + total, + ); + revealedCountRef.current = next; + setRenderedCountries(sortedCandidates.slice(0, next)); + logMapDebug("reveal", "batch mounted", { + focusedRegion, + to: next, + total, + }); + if (next >= total) { + clearRevealInterval(); + } + }, MARKER_REVEAL_BATCH_INTERVAL_MS); + }; + + // Only treat this as a fresh reveal when the region actually changed. + // Same-region re-runs (e.g. resuming after a flight, viewport reorder) must + // NOT drop already-mounted pins — tearing markers down + rebuilding them on + // every FAB tap churns react-native-maps until it crashes natively. + const isNewRegion = revealRegionRef.current !== focusedRegion; + revealRegionRef.current = focusedRegion; + + if (isNewRegion) { + // Phase 1 (this commit): remove the previous region's pins only. Phase 2 + // (after the clear delay): mount the new region's pins. Splitting the + // remove/add across commits avoids the simultaneous churn that crashes iOS. + revealedCountRef.current = 0; + setRenderedCountries([]); + setRevealGeneration((g) => g + 1); + logMapDebug("reveal", "start batched reveal (new region)", { + focusedRegion, + priorityCount, + total, + batchSize: MARKER_REVEAL_BATCH_SIZE, + intervalMs: MARKER_REVEAL_BATCH_INTERVAL_MS, + clearDelayMs: REGION_SWAP_CLEAR_DELAY_MS, + }); + + swapTimerRef.current = setTimeout(() => { + swapTimerRef.current = null; + if (isDetailZoom) { + revealedCountRef.current = total; + setRenderedCountries(sortedCandidates); + return; + } + revealedCountRef.current = priorityCount; + setRenderedCountries(sortedCandidates.slice(0, priorityCount)); + if (priorityCount < total) { + startBatchInterval(); + } + }, REGION_SWAP_CLEAR_DELAY_MS); + return; + } + + // Same region — never tear down; only ever grow the revealed window. + if (isDetailZoom) { + revealedCountRef.current = total; + setRenderedCountries(sortedCandidates); + return; + } + + const startCount = Math.min( + Math.max(revealedCountRef.current, priorityCount), + total, + ); + if (startCount !== revealedCountRef.current) { + logMapDebug("reveal", "resume reveal (same region)", { + focusedRegion, + from: revealedCountRef.current, + startCount, + total, + }); + } + revealedCountRef.current = startCount; + setRenderedCountries(sortedCandidates.slice(0, startCount)); + if (startCount < total) { + startBatchInterval(); + } + }, [ + enabled, + focusedRegion, + isDetailZoom, + candidateSetKey, + sortedCandidates.length, + paused, + ]); + + // Unmount-only cleanup — every effect run clears timers at its top, but early + // returns mean the last run may not register a cleanup of its own. + useEffect(() => { + return () => { + clearRevealInterval(); + clearSwapTimer(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps -- stable ref-based clears + }, []); + + const presentation: MapMarkerPresentation = isDetailZoom + ? "full" + : "entering"; + + return { + countriesToRender: renderedCountries, + presentation, + revealGeneration, + }; +} diff --git a/lib/app-region.ts b/lib/app-region.ts new file mode 100644 index 0000000..08e3c31 --- /dev/null +++ b/lib/app-region.ts @@ -0,0 +1,80 @@ +/** App map/explore region ids (may differ from REST Countries `region`). */ +export const NORTH_AMERICA = "North America" as const; +export const SOUTH_AMERICA = "South America" as const; + +/** Fallback when cached payloads still use REST Countries `Americas` without subregion. */ +const SOUTH_AMERICA_COUNTRY_NAMES = new Set([ + "Argentina", + "Bolivia", + "Brazil", + "Chile", + "Colombia", + "Ecuador", + "Falkland Islands", + "French Guiana", + "Guyana", + "Paraguay", + "Peru", + "Suriname", + "Uruguay", + "Venezuela", +]); + +/** + * Maps REST Countries `region` (+ optional `subregion`) to app continent ids. + * Central America and Caribbean roll into North America. + */ +export function normalizeAppRegion( + region: string, + subregion?: string | null, + countryName?: string, +): string { + if (region === NORTH_AMERICA || region === SOUTH_AMERICA) return region; + if (region !== "Americas") return region; + + if (subregion === SOUTH_AMERICA) return SOUTH_AMERICA; + if ( + subregion === NORTH_AMERICA || + subregion === "Central America" || + subregion === "Caribbean" + ) { + return NORTH_AMERICA; + } + + if (countryName && SOUTH_AMERICA_COUNTRY_NAMES.has(countryName)) { + return SOUTH_AMERICA; + } + + return NORTH_AMERICA; +} + +export function normalizeCountryRegion< + T extends { name: string; region: string }, +>(country: T, subregion?: string | null): T { + return { + ...country, + region: normalizeAppRegion(country.region, subregion, country.name), + }; +} + +export function normalizeCountriesRegions< + T extends { name: string; region: string }, +>(countries: T[]): T[] { + return countries.map((c) => normalizeCountryRegion(c)); +} + +/** Whether a country belongs to an Explore continent tab (handles legacy `Americas`). */ +export function countryMatchesExploreRegion( + country: { name: string; region: string }, + targetRegion: string, +): boolean { + return normalizeAppRegion(country.region, undefined, country.name) === targetRegion; +} + +export function filterCountriesForExploreRegion< + T extends { name: string; region: string }, +>(countries: T[], region: string): T[] { + return normalizeCountriesRegions( + countries.filter((c) => countryMatchesExploreRegion(c, region)), + ); +} diff --git a/lib/color-utils.ts b/lib/color-utils.ts new file mode 100644 index 0000000..e4e1c7e --- /dev/null +++ b/lib/color-utils.ts @@ -0,0 +1,136 @@ +export type RgbColor = { r: number; g: number; b: number }; + +export function hslToRgb(hue: number, saturation: number, lightness: number): RgbColor { + const h = ((hue % 360) + 360) % 360; + const s = Math.min(1, Math.max(0, saturation)); + const l = Math.min(1, Math.max(0, lightness)); + + const c = (1 - Math.abs(2 * l - 1)) * s; + const x = c * (1 - Math.abs(((h / 60) % 2) - 1)); + const m = l - c / 2; + + let r = 0; + let g = 0; + let b = 0; + + if (h < 60) { + r = c; + g = x; + } else if (h < 120) { + r = x; + g = c; + } else if (h < 180) { + g = c; + b = x; + } else if (h < 240) { + g = x; + b = c; + } else if (h < 300) { + r = x; + b = c; + } else { + r = c; + b = x; + } + + return { + r: Math.round((r + m) * 255), + g: Math.round((g + m) * 255), + b: Math.round((b + m) * 255), + }; +} + +export function rgbToHex({ r, g, b }: RgbColor): string { + const toHex = (value: number) => + Math.min(255, Math.max(0, value)).toString(16).padStart(2, "0"); + return `#${toHex(r)}${toHex(g)}${toHex(b)}`; +} + +export function hueToHex( + hue: number, + saturation = 0.85, + lightness = 0.58, +): string { + return rgbToHex(hslToRgb(hue, saturation, lightness)); +} + +export function hexToRgb(hex: string): RgbColor | null { + const cleaned = hex.replace("#", "").trim(); + const normalized = + cleaned.length === 3 + ? cleaned + .split("") + .map((char) => char + char) + .join("") + : cleaned; + + if (!/^[0-9a-fA-F]{6}$/.test(normalized)) { + return null; + } + + return { + r: parseInt(normalized.slice(0, 2), 16), + g: parseInt(normalized.slice(2, 4), 16), + b: parseInt(normalized.slice(4, 6), 16), + }; +} + +export function rgbToHsl( + red: number, + green: number, + blue: number, +): { h: number; s: number; l: number } { + const r = red / 255; + const g = green / 255; + const b = blue / 255; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const delta = max - min; + const lightness = (max + min) / 2; + + if (delta === 0) { + return { h: 0, s: 0, l: lightness }; + } + + const saturation = + delta / (1 - Math.abs(2 * lightness - 1)); + + let hue = 0; + if (max === r) { + hue = ((g - b) / delta) % 6; + } else if (max === g) { + hue = (b - r) / delta + 2; + } else { + hue = (r - g) / delta + 4; + } + + hue *= 60; + if (hue < 0) { + hue += 360; + } + + return { h: hue, s: saturation, l: lightness }; +} + +export function hexToHue(hex: string): number | null { + const rgb = hexToRgb(hex); + if (!rgb) { + return null; + } + + return rgbToHsl(rgb.r, rgb.g, rgb.b).h; +} + +const HUE_SPECTRUM_STOPS = [0, 45, 90, 135, 180, 225, 270, 315, 360] as const; + +/** CSS linear-gradient matching boundary stroke/fill HSL tuning. */ +export function getHueSpectrumGradient( + saturation = 0.85, + lightness = 0.58, +): string { + const segments = HUE_SPECTRUM_STOPS.map((hue, index) => { + const percent = Math.round((index / (HUE_SPECTRUM_STOPS.length - 1)) * 100); + return `${hueToHex(hue, saturation, lightness)} ${percent}%`; + }); + return `linear-gradient(to right, ${segments.join(", ")})`; +} diff --git a/lib/explore-region-countries.ts b/lib/explore-region-countries.ts new file mode 100644 index 0000000..5cd4f02 --- /dev/null +++ b/lib/explore-region-countries.ts @@ -0,0 +1,51 @@ +import { fetchFeedCountries, fetchSearchCountries } from "@/lib/api"; +import { + filterCountriesForExploreRegion, + NORTH_AMERICA, + SOUTH_AMERICA, +} from "@/lib/app-region"; +import type { Country } from "@/types/country"; + +const FEED_PAGE_LIMIT = 30; +const MAX_FEED_PAGES = 15; + +function isSplitAmericasRegion(region: string): boolean { + return region === NORTH_AMERICA || region === SOUTH_AMERICA; +} + +async function fetchAllFeedCountries(): Promise { + const all: Country[] = []; + let cursor: string | undefined; + + for (let page = 0; page < MAX_FEED_PAGES; page += 1) { + const batch = await fetchFeedCountries(cursor, FEED_PAGE_LIMIT); + all.push(...batch.data); + if (!batch.nextCursor) break; + cursor = batch.nextCursor; + } + + return all; +} + +/** + * Loads countries for an Explore continent tab. + * Resolves North/South America from legacy `Americas` payloads when needed. + */ +export async function fetchExploreRegionCountries( + region: string, +): Promise { + const primary = await fetchSearchCountries(undefined, region); + let countries = filterCountriesForExploreRegion(primary.data, region); + if (countries.length > 0) return countries; + + if (isSplitAmericasRegion(region)) { + const americas = await fetchSearchCountries(undefined, "Americas"); + countries = filterCountriesForExploreRegion(americas.data, region); + if (countries.length > 0) return countries; + + const allFeed = await fetchAllFeedCountries(); + countries = filterCountriesForExploreRegion(allFeed, region); + } + + return countries; +} diff --git a/lib/globe-boundary-lines.ts b/lib/globe-boundary-lines.ts new file mode 100644 index 0000000..4e88945 --- /dev/null +++ b/lib/globe-boundary-lines.ts @@ -0,0 +1,102 @@ +import * as THREE from "three"; + +import { latLngToVector3 } from "@/lib/latlng-to-sphere"; +import type { CountryBoundaryPolygon } from "@/lib/map-country-boundaries"; +import type { LatLng } from "react-native-maps"; + +export const GLOBE_BOUNDARY_RADIUS = 1.004; + +/** Break rings where GeoJSON crosses the antimeridian so lines don't wrap the globe. */ +function splitRingAtAntimeridian(ring: LatLng[]): LatLng[][] { + if (ring.length < 2) return []; + + const chains: LatLng[][] = []; + let current: LatLng[] = [ring[0]!]; + + for (let i = 1; i < ring.length; i++) { + const prev = ring[i - 1]!; + const next = ring[i]!; + if (Math.abs(next.longitude - prev.longitude) > 180) { + if (current.length >= 2) chains.push(current); + current = [next]; + continue; + } + current.push(next); + } + + if (current.length >= 2) { + chains.push(current); + } + + return chains; +} + +function chainToGeometry(chain: LatLng[], radius: number): THREE.BufferGeometry { + const positions = new Float32Array(chain.length * 3); + chain.forEach((point, index) => { + const [x, y, z] = latLngToVector3( + point.latitude, + point.longitude, + radius, + ); + positions[index * 3] = x; + positions[index * 3 + 1] = y; + positions[index * 3 + 2] = z; + }); + + const geometry = new THREE.BufferGeometry(); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); + return geometry; +} + +export type GlobeBoundaryLine = { + id: string; + geometry: THREE.BufferGeometry; +}; + +export function buildGlobeBoundaryLines( + polygons: CountryBoundaryPolygon[], +): GlobeBoundaryLine[] { + const lines: GlobeBoundaryLine[] = []; + + for (const polygon of polygons) { + const rings = [polygon.coordinates, ...(polygon.holes ?? [])]; + + rings.forEach((ring, ringIndex) => { + const chains = splitRingAtAntimeridian(ring); + chains.forEach((chain, chainIndex) => { + lines.push({ + id: `${polygon.id}-${ringIndex}-${chainIndex}`, + geometry: chainToGeometry(chain, GLOBE_BOUNDARY_RADIUS), + }); + }); + }); + } + + return lines; +} + +export function parseCssColorToThree(color: string): { + threeColor: THREE.Color; + opacity: number; +} { + const rgbaMatch = color.match( + /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\d.]+))?\s*\)/i, + ); + if (rgbaMatch) { + const [, r, g, b, a] = rgbaMatch; + return { + threeColor: new THREE.Color( + Number(r) / 255, + Number(g) / 255, + Number(b) / 255, + ), + opacity: a !== undefined ? Number(a) : 1, + }; + } + + return { + threeColor: new THREE.Color(color), + opacity: 1, + }; +} diff --git a/lib/globe-labels.ts b/lib/globe-labels.ts new file mode 100644 index 0000000..2c600be --- /dev/null +++ b/lib/globe-labels.ts @@ -0,0 +1,102 @@ +import { + CONTINENTS, + continentDisplayLabel, + type Continent, +} from "@/constants/regions"; +import { getMapDisplayLatLng, isValidLatLng } from "@/lib/map-country"; +import type { MapCluster } from "@/lib/map-clusters"; +import type { MapCountry } from "@/types/country"; + +export type LabelType = "continent" | "selected-country"; + +export type GlobeLabel = { + id: string; + type: LabelType; + text: string; + lat: number; + lng: number; +}; + +export type GlobeLabelScreenPosition = { + id: string; + type: LabelType; + x: number; + y: number; + visible: boolean; +}; + +/** + * Fixed visual anchors so continent labels stay stable and always render, + * even before country data / clusters are available. + */ +const CONTINENT_LABEL_ANCHORS: Record = { + Africa: [4, 22], + "North America": [48, -98], + "South America": [-14, -58], + Antarctic: [-78, 25], + Asia: [34, 95], + Europe: [54, 15], + Oceania: [-22, 140], +}; + +export function buildContinentLabels(clusters?: MapCluster[]): GlobeLabel[] { + const centerByRegion = new Map( + (clusters ?? []).map((cluster) => [cluster.region, cluster.center]), + ); + + return CONTINENTS.map((region) => { + const anchor = centerByRegion.get(region) ?? CONTINENT_LABEL_ANCHORS[region]; + return { + id: `continent:${region}`, + type: "continent" as const, + text: continentDisplayLabel(region), + lat: anchor[0], + lng: anchor[1], + }; + }); +} + +export function buildSelectedCountryLabel( + country: MapCountry | null | undefined, +): GlobeLabel | null { + if (!country || !isValidLatLng(country.latlng)) return null; + + const [lat, lng] = getMapDisplayLatLng(country); + return { + id: `selected-country:${country.name}`, + type: "selected-country", + text: country.name, + lat, + lng, + }; +} + +/** Rule-based visible label set: all continents + optional selected country. */ +export function buildGlobeVisibleLabels(params: { + clusters?: MapCluster[]; + selectedCountry: MapCountry | null | undefined; +}): GlobeLabel[] { + const continents = buildContinentLabels(params.clusters); + const selected = buildSelectedCountryLabel(params.selectedCountry); + return selected ? [...continents, selected] : continents; +} + +export function globeLabelPositionsChanged( + prev: GlobeLabelScreenPosition[], + next: GlobeLabelScreenPosition[], +): boolean { + if (prev.length !== next.length) return true; + + return prev.some((position, index) => { + const candidate = next[index]; + if (!candidate) return true; + + return ( + position.id !== candidate.id || + position.type !== candidate.type || + position.x !== candidate.x || + position.y !== candidate.y || + position.visible !== candidate.visible + ); + }); +} diff --git a/lib/globe-orbit-controls.ts b/lib/globe-orbit-controls.ts new file mode 100644 index 0000000..625cbda --- /dev/null +++ b/lib/globe-orbit-controls.ts @@ -0,0 +1,530 @@ +/** + * Native orbit controls for React Three Fiber on React Native. + * Adapted from r3f-native-orbitcontrols (MIT) — drei OrbitControls uses web + * pointer events on the GL canvas and breaks RN touch tracking. + */ +import { invalidate } from "@react-three/fiber/native"; +import { + Matrix4, + OrthographicCamera, + PerspectiveCamera, + Quaternion, + Spherical, + Vector2, + Vector3, +} from "three"; +import type { GestureResponderEvent, LayoutChangeEvent } from "react-native"; + +import { MAP_TAP_DRAG_THRESHOLD_PX } from "@/constants/map-continent-focus"; + +const EPSILON = 0.000001; + +const STATE = { + NONE: 0, + ROTATE: 1, + DOLLY: 2, +} as const; + +type OrbitState = (typeof STATE)[keyof typeof STATE]; + +type OrbitScope = { + camera: PerspectiveCamera | OrthographicCamera | undefined; + enabled: boolean; + target: Vector3; + minZoom: number; + maxZoom: number; + minPolarAngle: number; + maxPolarAngle: number; + minAzimuthAngle: number; + maxAzimuthAngle: number; + dampingFactor: number; + enableZoom: boolean; + zoomSpeed: number; + enableRotate: boolean; + rotateSpeed: number; + enablePan: boolean; + panSpeed: number; + onChange: (event: { target: OrbitScope }) => void; + onStart: () => void; + onEnd: () => void; +}; + +export function createGlobeOrbitControls() { + let height = 0; + + const scope: OrbitScope = { + camera: undefined as PerspectiveCamera | OrthographicCamera | undefined, + enabled: true, + target: new Vector3(), + minZoom: 0, + maxZoom: Infinity, + minPolarAngle: 0, + maxPolarAngle: Math.PI, + minAzimuthAngle: -Infinity, + maxAzimuthAngle: Infinity, + dampingFactor: 0.05, + enableZoom: true, + zoomSpeed: 1, + enableRotate: true, + rotateSpeed: 1, + enablePan: false, + panSpeed: 1, + onChange: (_event: { target: OrbitScope }) => {}, + onStart: () => {}, + onEnd: () => {}, + }; + + const internals = { + moveStart: new Vector3(), + rotateStart: new Vector2(), + rotateEnd: new Vector2(), + rotateDelta: new Vector2(), + dollyStart: 0, + dollyEnd: 0, + panStart: new Vector2(), + panEnd: new Vector2(), + panDelta: new Vector2(), + panOffset: new Vector3(), + spherical: new Spherical(), + sphericalDelta: new Spherical(), + scale: 1, + state: STATE.NONE as OrbitState, + }; + + let touchStartX = 0; + let touchStartY = 0; + let interactionExceededTapThreshold = false; + let suppressNextTap = false; + + const resetTouchState = () => { + internals.state = STATE.NONE; + internals.moveStart.set(0, 0, 0); + }; + + const recordTouchStart = (event: GestureResponderEvent) => { + const touch = event.nativeEvent.touches[0] ?? event.nativeEvent; + touchStartX = touch.pageX; + touchStartY = touch.pageY; + interactionExceededTapThreshold = false; + suppressNextTap = false; + }; + + const trackTouchMove = (event: GestureResponderEvent) => { + const touch = event.nativeEvent.touches[0]; + if (!touch) return; + const dx = touch.pageX - touchStartX; + const dy = touch.pageY - touchStartY; + if (Math.hypot(dx, dy) > MAP_TAP_DRAG_THRESHOLD_PX) { + interactionExceededTapThreshold = true; + } + }; + + const functions = { + handleTouchStartRotate(event: GestureResponderEvent) { + if (event.nativeEvent.touches.length === 1) { + internals.rotateStart.set( + event.nativeEvent.touches[0].locationX, + event.nativeEvent.touches[0].locationY, + ); + } else if (event.nativeEvent.touches.length === 2) { + const x = + 0.5 * + (event.nativeEvent.touches[0].locationX + + event.nativeEvent.touches[1].locationX); + const y = + 0.5 * + (event.nativeEvent.touches[0].locationY + + event.nativeEvent.touches[1].locationY); + internals.rotateStart.set(x, y); + } + }, + + handleTouchStartDolly(event: GestureResponderEvent) { + if (event.nativeEvent.touches.length !== 2) return; + + const dx = + event.nativeEvent.touches[0].locationX - + event.nativeEvent.touches[1].locationX; + const dy = + event.nativeEvent.touches[0].locationY - + event.nativeEvent.touches[1].locationY; + internals.dollyStart = Math.sqrt(dx * dx + dy * dy); + }, + + handleTouchStartPan(event: GestureResponderEvent) { + if (event.nativeEvent.touches.length === 1) { + internals.panStart.set( + event.nativeEvent.touches[0].locationX, + event.nativeEvent.touches[0].locationY, + ); + } else if (event.nativeEvent.touches.length === 2) { + const x = + 0.5 * + (event.nativeEvent.touches[0].locationX + + event.nativeEvent.touches[1].locationX); + const y = + 0.5 * + (event.nativeEvent.touches[0].locationY + + event.nativeEvent.touches[1].locationY); + internals.panStart.set(x, y); + } + }, + + handleTouchStartDollyPan(event: GestureResponderEvent) { + if (scope.enableZoom) this.handleTouchStartDolly(event); + if (scope.enablePan) this.handleTouchStartPan(event); + }, + + onTouchStart(event: GestureResponderEvent) { + const touchCount = event.nativeEvent.touches.length; + + if (touchCount === 1) { + if (!scope.enableRotate) return; + this.handleTouchStartRotate(event); + internals.state = STATE.ROTATE; + return; + } + + if (touchCount >= 2) { + if (!scope.enableZoom && !scope.enablePan) return; + this.handleTouchStartDollyPan(event); + internals.state = STATE.DOLLY; + return; + } + + internals.state = STATE.NONE; + }, + + rotateLeft(angle: number) { + internals.sphericalDelta.theta -= angle; + }, + + rotateUp(angle: number) { + internals.sphericalDelta.phi -= angle; + }, + + handleTouchMoveRotate(event: GestureResponderEvent) { + if (event.nativeEvent.touches.length === 1) { + internals.rotateEnd.set( + event.nativeEvent.locationX, + event.nativeEvent.locationY, + ); + } else if (event.nativeEvent.touches.length === 2) { + const x = + 0.5 * + (event.nativeEvent.touches[0].locationX + + event.nativeEvent.touches[1].locationX); + const y = + 0.5 * + (event.nativeEvent.touches[0].locationY + + event.nativeEvent.touches[1].locationY); + internals.rotateEnd.set(x, y); + } + + internals.rotateDelta + .subVectors(internals.rotateEnd, internals.rotateStart) + .multiplyScalar(scope.rotateSpeed); + + // Keep world-view drag feel unchanged, but reduce angular rotation as the + // camera zooms in so panning does not feel increasingly "faster". + const cameraDistance = + scope.camera?.position?.distanceTo(scope.target) ?? scope.maxZoom; + const zoomRotateScale = + Number.isFinite(scope.maxZoom) && scope.maxZoom > 0 + ? Math.max(0.25, Math.min(1, cameraDistance / scope.maxZoom)) + : 1; + + if (height) { + this.rotateLeft( + ((2 * Math.PI * internals.rotateDelta.x) / height) * zoomRotateScale, + ); + this.rotateUp( + ((2 * Math.PI * internals.rotateDelta.y) / height) * zoomRotateScale, + ); + } + + internals.rotateStart.copy(internals.rotateEnd); + }, + + dollyOut(dollyScale: number) { + internals.scale /= dollyScale; + }, + + handleTouchMoveDolly(event: GestureResponderEvent) { + if (event.nativeEvent.touches.length !== 2) return; + + const dx = + event.nativeEvent.touches[0].locationX - + event.nativeEvent.touches[1].locationX; + const dy = + event.nativeEvent.touches[0].locationY - + event.nativeEvent.touches[1].locationY; + const distance = Math.sqrt(dx * dx + dy * dy); + + internals.dollyEnd = distance; + this.dollyOut( + Math.pow(internals.dollyEnd / internals.dollyStart, scope.zoomSpeed), + ); + internals.dollyStart = internals.dollyEnd; + }, + + panLeft(distance: number, objectMatrix: Matrix4) { + const v = new Vector3(); + v.setFromMatrixColumn(objectMatrix, 0); + v.multiplyScalar(-distance); + internals.panOffset.add(v); + }, + + panUp(distance: number, objectMatrix: Matrix4) { + const v = new Vector3(); + v.setFromMatrixColumn(objectMatrix, 1); + v.multiplyScalar(distance); + internals.panOffset.add(v); + }, + + pan(deltaX: number, deltaY: number) { + if (!scope.camera) return; + + const position = scope.camera.position; + let targetDistance = position.clone().sub(scope.target).length(); + + const linearSquare = (x: number) => + x + (1 - Math.exp(-x / 10000)) * (x * x - x + 1 / 4); + + const distanceScale = (scope.camera as PerspectiveCamera) + .isPerspectiveCamera + ? (scope.camera as PerspectiveCamera).fov / 2 + : (1 / linearSquare(scope.camera.zoom)) * scope.zoomSpeed * 300; + + targetDistance *= Math.tan((distanceScale * Math.PI) / 180); + + if (height) { + this.panLeft( + (2 * deltaX * targetDistance) / height, + scope.camera.matrix, + ); + this.panUp((2 * deltaY * targetDistance) / height, scope.camera.matrix); + } + }, + + handleTouchMovePan(event: GestureResponderEvent) { + if (event.nativeEvent.touches.length === 1) { + internals.panEnd.set( + event.nativeEvent.locationX, + event.nativeEvent.locationY, + ); + } else if (event.nativeEvent.touches.length === 2) { + const x = + 0.5 * + (event.nativeEvent.touches[0].locationX + + event.nativeEvent.touches[1].locationX); + const y = + 0.5 * + (event.nativeEvent.touches[0].locationY + + event.nativeEvent.touches[1].locationY); + internals.panEnd.set(x, y); + } else { + return; + } + + internals.panDelta + .subVectors(internals.panEnd, internals.panStart) + .multiplyScalar(scope.panSpeed); + this.pan(internals.panDelta.x, internals.panDelta.y); + internals.panStart.copy(internals.panEnd); + }, + + handleTouchMoveDollyPan(event: GestureResponderEvent) { + if (scope.enableZoom) this.handleTouchMoveDolly(event); + if (scope.enablePan) this.handleTouchMovePan(event); + }, + + onTouchMove(event: GestureResponderEvent) { + switch (internals.state) { + case STATE.ROTATE: + if (!scope.enableRotate) return; + this.handleTouchMoveRotate(event); + update(); + break; + case STATE.DOLLY: + if (!scope.enableZoom && !scope.enablePan) return; + this.handleTouchMoveDollyPan(event); + update(); + break; + default: + internals.state = STATE.NONE; + } + }, + }; + + const update = (() => { + const offset = new Vector3(); + const lastPosition = new Vector3(); + const lastQuaternion = new Quaternion(); + const twoPI = 2 * Math.PI; + + return () => { + if (!scope.camera) return; + + const position = scope.camera.position; + const quat = new Quaternion().setFromUnitVectors( + scope.camera.up, + new Vector3(0, 1, 0), + ); + const quatInverse = quat.clone().invert(); + + offset.copy(position).sub(scope.target); + offset.applyQuaternion(quat); + internals.spherical.setFromVector3(offset); + + internals.spherical.theta += + internals.sphericalDelta.theta * scope.dampingFactor; + internals.spherical.phi += + internals.sphericalDelta.phi * scope.dampingFactor; + + let min = scope.minAzimuthAngle; + let max = scope.maxAzimuthAngle; + + if (isFinite(min) && isFinite(max)) { + if (min < -Math.PI) min += twoPI; + else if (min > Math.PI) min -= twoPI; + + if (max < -Math.PI) max += twoPI; + else if (max > Math.PI) max -= twoPI; + + if (min <= max) { + internals.spherical.theta = Math.max( + min, + Math.min(max, internals.spherical.theta), + ); + } else { + internals.spherical.theta = + internals.spherical.theta > (min + max) / 2 + ? Math.max(min, internals.spherical.theta) + : Math.min(max, internals.spherical.theta); + } + } + + internals.spherical.phi = Math.max( + scope.minPolarAngle + EPSILON, + Math.min(scope.maxPolarAngle - EPSILON, internals.spherical.phi), + ); + + if ((scope.camera as PerspectiveCamera).isPerspectiveCamera) { + internals.spherical.radius *= internals.scale; + } else { + scope.camera.zoom = Math.max( + Math.min( + scope.camera.zoom / (internals.scale * scope.zoomSpeed), + scope.maxZoom, + ), + scope.minZoom, + ); + scope.camera.updateProjectionMatrix(); + } + + internals.spherical.radius = Math.max( + scope.minZoom, + Math.min(scope.maxZoom, internals.spherical.radius), + ); + + scope.target.addScaledVector(internals.panOffset, scope.dampingFactor); + offset.setFromSpherical(internals.spherical); + offset.applyQuaternion(quatInverse); + position.copy(scope.target).add(offset); + scope.camera.lookAt(scope.target); + + internals.sphericalDelta.theta *= 1 - scope.dampingFactor; + internals.sphericalDelta.phi *= 1 - scope.dampingFactor; + internals.panOffset.multiplyScalar(1 - scope.dampingFactor); + internals.scale = 1; + + if ( + lastPosition.distanceToSquared(scope.camera.position) > EPSILON || + 8 * (1 - lastQuaternion.dot(scope.camera.quaternion)) > EPSILON + ) { + invalidate(); + scope.onChange({ target: scope }); + lastPosition.copy(scope.camera.position); + lastQuaternion.copy(scope.camera.quaternion); + } + }; + })(); + + const beginInteraction = () => { + scope.onStart(); + }; + + const endInteraction = () => { + suppressNextTap = interactionExceededTapThreshold; + resetTouchState(); + scope.onEnd(); + }; + + const consumeTapThresholdExceeded = () => { + const exceeded = suppressNextTap; + suppressNextTap = false; + return exceeded; + }; + + return { + scope, + functions: { + ...functions, + update, + resetTouchState, + consumeTapThresholdExceeded, + }, + events: { + onLayout(event: LayoutChangeEvent) { + height = event.nativeEvent.layout.height; + }, + onStartShouldSetResponder(event: GestureResponderEvent) { + if (!scope.enabled) return false; + beginInteraction(); + recordTouchStart(event); + functions.onTouchStart(event); + return true; + }, + onMoveShouldSetResponder(event: GestureResponderEvent) { + if (!scope.enabled) return false; + beginInteraction(); + recordTouchStart(event); + functions.onTouchStart(event); + return true; + }, + onResponderGrant(event: GestureResponderEvent) { + recordTouchStart(event); + functions.onTouchStart(event); + }, + onResponderMove(event: GestureResponderEvent) { + trackTouchMove(event); + const touchCount = event.nativeEvent.touches.length; + if ( + internals.state === STATE.ROTATE && + touchCount >= 2 + ) { + functions.onTouchStart(event); + } else if ( + internals.state === STATE.DOLLY && + touchCount === 1 + ) { + functions.onTouchStart(event); + } + + functions.onTouchMove(event); + }, + onResponderRelease() { + endInteraction(); + }, + onResponderTerminate() { + endInteraction(); + }, + onResponderTerminationRequest() { + return false; + }, + }, + }; +} + +export type GlobeOrbitControls = ReturnType; diff --git a/lib/globe-screen-project.ts b/lib/globe-screen-project.ts new file mode 100644 index 0000000..8ca8901 --- /dev/null +++ b/lib/globe-screen-project.ts @@ -0,0 +1,59 @@ +import type { Camera } from "three"; +import * as THREE from "three"; + +import { latLngToVector3 } from "@/lib/latlng-to-sphere"; + +export const GLOBE_SURFACE_RADIUS = 1.02; +const HEMISPHERE_DOT_THRESHOLD = 0.12; + +export type GlobeScreenPosition = { + id: string; + x: number; + y: number; + visible: boolean; +}; + +export function isInCameraFrustum( + projected: THREE.Vector3, + margin = 0.15, +): boolean { + if (projected.z <= 0 || projected.z >= 1) return false; + const bound = 1 + margin; + return ( + projected.x >= -bound && + projected.x <= bound && + projected.y >= -bound && + projected.y <= bound + ); +} + +export function projectLatLngToScreen( + lat: number, + lng: number, + camera: Camera, + size: { width: number; height: number }, + radius = GLOBE_SURFACE_RADIUS, +): { x: number; y: number; visible: boolean } { + const surface = new THREE.Vector3(...latLngToVector3(lat, lng, radius)); + const normal = surface.clone().normalize(); + const cameraDirection = new THREE.Vector3() + .copy(camera.position) + .normalize(); + + const onVisibleHemisphere = + normal.dot(cameraDirection) > HEMISPHERE_DOT_THRESHOLD; + if (!onVisibleHemisphere) { + return { x: 0, y: 0, visible: false }; + } + + const projected = surface.project(camera); + if (!isInCameraFrustum(projected)) { + return { x: 0, y: 0, visible: false }; + } + + return { + x: (projected.x * 0.5 + 0.5) * size.width, + y: (-projected.y * 0.5 + 0.5) * size.height, + visible: true, + }; +} diff --git a/lib/latlng-to-sphere.ts b/lib/latlng-to-sphere.ts new file mode 100644 index 0000000..592af77 --- /dev/null +++ b/lib/latlng-to-sphere.ts @@ -0,0 +1,25 @@ +/** Convert WGS84 lat/lng to a point on a sphere (Three.js Y-up). */ +export function latLngToVector3( + lat: number, + lng: number, + radius: number, +): [number, number, number] { + const phi = (90 - lat) * (Math.PI / 180); + const theta = (lng + 180) * (Math.PI / 180); + const x = -(radius * Math.sin(phi) * Math.cos(theta)); + const z = radius * Math.sin(phi) * Math.sin(theta); + const y = radius * Math.cos(phi); + return [x, y, z]; +} + +/** Inverse of `latLngToVector3` for a point on a unit sphere (Y-up). */ +export function vector3ToLatLng( + x: number, + y: number, + z: number, +): [lat: number, lng: number] { + const lat = (Math.asin(Math.max(-1, Math.min(1, y))) * 180) / Math.PI; + const thetaDeg = (Math.atan2(z, -x) * 180) / Math.PI; + const lng = ((thetaDeg % 360) + 360) % 360 - 180; + return [lat, lng]; +} diff --git a/lib/load-globe-texture.ts b/lib/load-globe-texture.ts new file mode 100644 index 0000000..db3b759 --- /dev/null +++ b/lib/load-globe-texture.ts @@ -0,0 +1,103 @@ +import { Asset } from "expo-asset"; +import { useEffect, useState } from "react"; +import { Image, Platform } from "react-native"; +import { SRGBColorSpace, Texture, TextureLoader } from "three"; + +import { images } from "@/constants/images"; + +async function resolveBundledAsset(assetModule: number): Promise { + const asset = Asset.fromModule(assetModule); + await asset.downloadAsync(); + return asset; +} + +/** Native EXGL path — same payload shape R3F expects (no DOM / expo-three). */ +async function loadNativeTexture(assetModule: number): Promise { + const asset = await resolveBundledAsset(assetModule); + const uri = asset.localUri ?? asset.uri; + + let width = asset.width ?? 0; + let height = asset.height ?? 0; + + if ((!width || !height) && uri) { + const size = await new Promise<{ width: number; height: number }>( + (resolve, reject) => { + Image.getSize(uri, (w, h) => resolve({ width: w, height: h }), reject); + }, + ); + width = size.width; + height = size.height; + } + + const texture = new Texture(); + texture.colorSpace = SRGBColorSpace; + (texture as Texture & { isDataTexture?: boolean }).isDataTexture = true; + texture.image = { + data: asset, + width, + height, + } as unknown as TexImageSource; + texture.needsUpdate = true; + return texture; +} + +async function loadWebTexture(assetModule: number): Promise { + const asset = await resolveBundledAsset(assetModule); + const uri = asset.localUri ?? asset.uri; + if (!uri) throw new Error("Missing globe texture URI"); + + return new Promise((resolve, reject) => { + new TextureLoader().load( + uri, + (map) => { + map.colorSpace = SRGBColorSpace; + map.needsUpdate = true; + resolve(map); + }, + undefined, + reject, + ); + }); +} + +export async function loadGlobeTextureAsset( + assetModule: number = images.earthTopography as number, +): Promise { + if (Platform.OS === "web") { + return loadWebTexture(assetModule); + } + return loadNativeTexture(assetModule); +} + +/** + * Loads the equirectangular earth image for the 3D globe. + * Uses expo-asset + EXGL-native texture payload (no expo-three / DOM APIs). + */ +export function useGlobeTexture() { + const [texture, setTexture] = useState(null); + + useEffect(() => { + let disposed = false; + let loaded: Texture | null = null; + + void loadGlobeTextureAsset() + .then((map) => { + if (disposed) { + map.dispose(); + return; + } + loaded = map; + setTexture(map); + }) + .catch((error) => { + console.warn("[GlobeView] Failed to load earth texture", error); + }); + + return () => { + disposed = true; + loaded?.dispose(); + }; + }, []); + + return texture; +} diff --git a/lib/map-camera-zoom.ts b/lib/map-camera-zoom.ts new file mode 100644 index 0000000..9d7e83a --- /dev/null +++ b/lib/map-camera-zoom.ts @@ -0,0 +1,47 @@ +import { + GLOBE_DETAIL_CAMERA_DISTANCE, + MAP_COUNTRY_ZOOM_LATITUDE_DELTA, + resolveGlobeZoomTier, +} from "@/lib/map-region-markers"; + +export type CameraZoomTier = "world" | "region" | "country"; + +/** Above this latitudeDelta the flat map is framed at world scale. */ +export const FLAT_WORLD_LATITUDE_DELTA = 60; + +/** Live flat-map zoom tier from the current viewport latitudeDelta. */ +export function resolveFlatZoomTier(latitudeDelta: number): CameraZoomTier { + if (latitudeDelta > FLAT_WORLD_LATITUDE_DELTA) return "world"; + if (latitudeDelta > MAP_COUNTRY_ZOOM_LATITUDE_DELTA) return "region"; + return "country"; +} + +export type CameraZoomState = { + tier: CameraZoomTier; + isDetailZoom: boolean; +}; + +/** + * Single source of truth for zoom-driven UI/marker density. + * Derived purely from the live camera (2D latitudeDelta or 3D globe distance), + * never from selection state or flight phase timers. + */ +export function deriveCameraZoomState({ + is3d, + latitudeDelta, + globeDistance, +}: { + is3d: boolean; + latitudeDelta: number; + globeDistance: number; +}): CameraZoomState { + if (is3d) { + return { + tier: resolveGlobeZoomTier(globeDistance), + isDetailZoom: globeDistance <= GLOBE_DETAIL_CAMERA_DISTANCE, + }; + } + + const tier = resolveFlatZoomTier(latitudeDelta); + return { tier, isDetailZoom: tier === "country" }; +} diff --git a/lib/map-clusters.ts b/lib/map-clusters.ts index 1007849..b0bdd40 100644 --- a/lib/map-clusters.ts +++ b/lib/map-clusters.ts @@ -1,5 +1,6 @@ import { CONTINENTS } from "@/constants/regions"; import { getClusterActivity } from "@/constants/map-activity"; +import { isValidLatLng } from "@/lib/map-country"; import type { MapCountry } from "@/types/country"; export type MapCluster = { @@ -16,6 +17,7 @@ function weightedCenter(countries: MapCountry[]): [number, number] { let sumLng = 0; for (const c of countries) { + if (!isValidLatLng(c.latlng)) continue; const [lat, lng] = c.latlng; const w = Number.isFinite(c.population) && c.population > 0 ? c.population : 1; totalWeight += w; diff --git a/lib/map-country-boundaries.ts b/lib/map-country-boundaries.ts new file mode 100644 index 0000000..5b64d42 --- /dev/null +++ b/lib/map-country-boundaries.ts @@ -0,0 +1,277 @@ +import type { Continent } from "@/constants/regions"; +import type { MapCountry } from "@/types/country"; +import type { LatLng } from "react-native-maps"; + +type GeoJsonGeometry = + | { + type: "Polygon"; + coordinates: number[][][]; + } + | { + type: "MultiPolygon"; + coordinates: number[][][][]; + }; + +type GeoJsonFeature = { + type: "Feature"; + geometry: GeoJsonGeometry | null; + properties?: { + CONTINENT?: string; + ADMIN?: string; + NAME?: string; + }; +}; + +type GeoJsonFeatureCollection = { + type: "FeatureCollection"; + features: GeoJsonFeature[]; +}; + +export type CountryBoundaryPolygon = { + id: string; + /** Natural Earth `ADMIN` label (used to match REST Countries `name`). */ + countryName: string | null; + continent: string | null; + coordinates: LatLng[]; + holes?: LatLng[][]; +}; + +export type BoundaryMapContext = { + selectedCountryName: string | null; + focusedRegion: string | null; + countries: MapCountry[]; + /** When true at world zoom (no country/continent focus), render all country outlines. */ + showWorldBoundaries?: boolean; +}; + +/** REST Countries name → alternate Natural Earth `ADMIN` labels. */ +const GEO_ADMIN_ALIASES_BY_API_NAME: Record = { + "United States": ["United States of America"], + "Czechia": ["Czechia", "Czech Republic"], + "Cape Verde": ["Cabo Verde"], + "Ivory Coast": ["Côte d'Ivoire", "Cote d'Ivoire"], + Eswatini: ["eSwatini", "Swaziland"], + Myanmar: ["Myanmar", "Burma"], + "North Korea": ["Dem. Rep. Korea", "North Korea"], + "South Korea": ["Republic of Korea", "South Korea"], + "North Macedonia": ["Macedonia", "North Macedonia"], + "Republic of the Congo": ["Republic of the Congo"], + "Democratic Republic of the Congo": [ + "Dem. Rep. Congo", + "Democratic Republic of the Congo", + ], + "South Georgia": ["South Georgia and the Islands"], +}; + +const NATURAL_EARTH_CONTINENTS_BY_APP_REGION: Record< + Continent, + readonly string[] +> = { + Africa: ["Africa"], + "North America": ["North America"], + "South America": ["South America"], + Antarctic: ["Antarctica"], + Asia: ["Asia"], + Europe: ["Europe"], + Oceania: ["Oceania"], +}; + +function normalizeCountryLabel(value: string): string { + return value + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + .trim() + .toLowerCase(); +} + +function toLatLng([longitude, latitude]: number[]): LatLng { + return { latitude, longitude }; +} + +function toRingPoints(ring: number[][]): LatLng[] { + return ring + .filter((point) => point.length >= 2) + .map(toLatLng); +} + +/** + * GeoJSON often repeats the south pole at both -180° and 180°, which makes + * react-native-maps draw a map-spanning edge. Drop the duplicate seam point. + */ +function removeAntimeridianPoleSeam(points: LatLng[]): LatLng[] { + if (points.length < 4) return points; + + const result: LatLng[] = []; + for (let i = 0; i < points.length; i++) { + const prev = points[i - 1]; + const next = points[i]; + const after = points[i + 1]; + + if ( + prev && + after && + Math.abs(prev.longitude - next.longitude) > 180 && + Math.abs(prev.latitude) > 85 && + Math.abs(next.latitude) > 85 && + Math.abs(after.longitude - next.longitude) < 90 + ) { + continue; + } + + result.push(next); + } + + return result.length >= 3 ? result : points; +} + +function parsePolygonRings( + polygonCoordinates: number[][][], + featureId: string, + countryName: string | null, + continent: string | null, +): CountryBoundaryPolygon[] { + if (polygonCoordinates.length === 0) return []; + + const rawOuter = toRingPoints(polygonCoordinates[0] ?? []); + const outer = + countryName === "Antarctica" + ? removeAntimeridianPoleSeam(rawOuter) + : rawOuter; + if (outer.length < 3) return []; + + const holeRings = polygonCoordinates + .slice(1) + .map(toRingPoints) + .filter((ring) => ring.length >= 3); + + return [ + { + id: featureId, + countryName, + continent, + coordinates: outer, + holes: holeRings.length > 0 ? holeRings : undefined, + }, + ]; +} + +export function parseCountryBoundaryPolygons( + geoJson: GeoJsonFeatureCollection, +): CountryBoundaryPolygon[] { + if (!geoJson || geoJson.type !== "FeatureCollection") return []; + + const polygons: CountryBoundaryPolygon[] = []; + + geoJson.features.forEach((feature, featureIndex) => { + const geometry = feature.geometry; + if (!geometry) return; + + const props = feature.properties; + const countryName = props?.ADMIN ?? props?.NAME ?? null; + const continent = props?.CONTINENT ?? null; + const baseId = `country-boundary-${featureIndex}`; + + if (geometry.type === "Polygon") { + polygons.push( + ...parsePolygonRings( + geometry.coordinates, + `${baseId}-0`, + countryName, + continent, + ), + ); + return; + } + + if (geometry.type === "MultiPolygon") { + geometry.coordinates.forEach((polygonCoordinates, polygonIndex) => { + polygons.push( + ...parsePolygonRings( + polygonCoordinates, + `${baseId}-${polygonIndex}`, + countryName, + continent, + ), + ); + }); + } + }); + + return polygons; +} + +export function countryNamesMatch( + apiCountryName: string, + geoAdminName: string | null, +): boolean { + if (!geoAdminName) return false; + + const normalizedGeo = normalizeCountryLabel(geoAdminName); + const candidates = [ + apiCountryName, + ...(GEO_ADMIN_ALIASES_BY_API_NAME[apiCountryName] ?? []), + ]; + + return candidates.some( + (candidate) => normalizeCountryLabel(candidate) === normalizedGeo, + ); +} + +function naturalEarthContinentMatchesRegion( + continent: string | null, + region: string, +): boolean { + if (!continent) return false; + + const allowed = + NATURAL_EARTH_CONTINENTS_BY_APP_REGION[region as Continent] ?? []; + return allowed.includes(continent); +} + +/** + * Scope boundaries to map context (option 1 — implicit, no extra UI): + * - Selected country (no continent focus) → that country only + * - Focused continent → countries in that region (even when a country is selected) + * - No focus → hidden unless `showWorldBoundaries` (grid toggle on world view) + */ +export function filterBoundaryPolygonsByMapContext( + polygons: CountryBoundaryPolygon[], + context: BoundaryMapContext, +): CountryBoundaryPolygon[] { + const { selectedCountryName, focusedRegion, countries, showWorldBoundaries } = + context; + + if (!selectedCountryName && !focusedRegion) { + return showWorldBoundaries ? polygons : []; + } + + if (focusedRegion) { + const apiCountryNames = countries + .filter((country) => country.region === focusedRegion) + .map((country) => country.name); + + return polygons.filter((polygon) => { + if ( + polygon.countryName && + apiCountryNames.some((name) => + countryNamesMatch(name, polygon.countryName), + ) + ) { + return true; + } + + return naturalEarthContinentMatchesRegion( + polygon.continent, + focusedRegion, + ); + }); + } + + if (selectedCountryName) { + return polygons.filter((polygon) => + countryNamesMatch(selectedCountryName, polygon.countryName), + ); + } + + return []; +} diff --git a/lib/map-country-selection.ts b/lib/map-country-selection.ts new file mode 100644 index 0000000..134e3df --- /dev/null +++ b/lib/map-country-selection.ts @@ -0,0 +1,20 @@ +import { logMapDebug, summarizeCountry } from "@/lib/map-debug"; +import { useExperienceStore } from "@/store/use-experience-store"; +import { + useIdentityStore, + type SelectionSource, +} from "@/store/use-identity-store"; +import type { MapCountry } from "@/types/country"; + +/** Identity first, then experience transitions — the only way to select a country. */ +export function selectCountryOnMap( + country: MapCountry, + source: Exclude, +): void { + logMapDebug("selection", "selectCountryOnMap", { + source, + country: summarizeCountry(country), + }); + useIdentityStore.getState().setActiveCountry(country, source); + useExperienceStore.getState().startTransition(source); +} diff --git a/lib/map-country.ts b/lib/map-country.ts index 228a55e..597a716 100644 --- a/lib/map-country.ts +++ b/lib/map-country.ts @@ -47,3 +47,46 @@ export function isValidLatLng( lng <= 180 ); } + +/** react-native-maps only renders markers between ±85° latitude. */ +const MAP_MARKER_MAX_LATITUDE = 85; + +/** + * Pin + camera position for Antarctica. REST Countries reports the south pole + * ([-90, 0]), which is off the visible map and hides the flag marker. + */ +export const ANTARCTICA_DISPLAY_LATLNG: [number, number] = [-72, 20]; + +const DISPLAY_LATLNG_BY_NAME: Record = { + Antarctica: ANTARCTICA_DISPLAY_LATLNG, +}; + +/** WGS84 coordinate used for map pins and camera focus (may differ from API latlng). */ +export function getMapDisplayLatLng( + country: Pick, +): [number, number] { + const override = DISPLAY_LATLNG_BY_NAME[country.name]; + if (override) return override; + + // Never hand back an invalid coordinate: passing NaN/undefined to the native + // MapView's animateToRegion crashes the app. Fall back to [0, 0] instead. + if (!isValidLatLng(country.latlng)) return [0, 0]; + + const [lat, lng] = country.latlng; + if (lat < -MAP_MARKER_MAX_LATITUDE) return [-MAP_MARKER_MAX_LATITUDE, lng]; + if (lat > MAP_MARKER_MAX_LATITUDE) return [MAP_MARKER_MAX_LATITUDE, lng]; + return [lat, lng]; +} + +/** Build a map country from search/feed data when the map list has not loaded yet. */ +export function countryToMapCountry(country: Country): MapCountry { + return { + name: country.name, + capital: country.capital, + region: country.region, + population: country.population, + flag: country.flag, + latlng: country.latlng, + image: country.images?.[0] ?? null, + }; +} diff --git a/lib/map-debug.ts b/lib/map-debug.ts new file mode 100644 index 0000000..8ff86bf --- /dev/null +++ b/lib/map-debug.ts @@ -0,0 +1,90 @@ +import type { Region } from "react-native-maps"; + +import { getMapDisplayLatLng, isValidLatLng } from "@/lib/map-country"; +import type { MapCountry } from "@/types/country"; + +/** Toggle to `true` to log map FAB / flight / selection diagnostics (dev only by default). */ +export const MAP_DEBUG_ENABLED = __DEV__; + +export type MapDebugScope = + | "fab" + | "flight" + | "selection" + | "intent" + | "camera" + | "marker" + | "reveal" + | "fatal"; + +export function summarizeRegion(region: Region) { + const finite = + Number.isFinite(region.latitude) && + Number.isFinite(region.longitude) && + Number.isFinite(region.latitudeDelta) && + Number.isFinite(region.longitudeDelta); + + return { + lat: region.latitude, + lng: region.longitude, + latDelta: region.latitudeDelta, + lngDelta: region.longitudeDelta, + finite, + }; +} + +export function summarizeCountry(country: MapCountry | null | undefined) { + if (!country) return null; + const latlng = getMapDisplayLatLng(country); + return { + name: country.name, + region: country.region, + latlng, + coordsValid: isValidLatLng(latlng), + }; +} + +export function logMapDebug( + scope: MapDebugScope, + event: string, + data?: Record, +): void { + if (!MAP_DEBUG_ENABLED) return; + if (data) { + console.log(`[map:${scope}] ${event}`, data); + } else { + console.log(`[map:${scope}] ${event}`); + } +} + +type ErrorUtilsLike = { + getGlobalHandler?: () => ((error: unknown, isFatal?: boolean) => void) | undefined; + setGlobalHandler?: (handler: (error: unknown, isFatal?: boolean) => void) => void; +}; + +let mapDebugErrorHandlerInstalled = false; + +/** + * Installs a global JS error handler that logs the error + stack before the app + * dies. Helps capture the cause of map crashes that otherwise show no JS trace. + * Chains to the previous handler so default red-box / crash behavior is preserved. + */ +export function installMapDebugErrorHandler(): void { + if (!MAP_DEBUG_ENABLED || mapDebugErrorHandlerInstalled) return; + + const errorUtils = (globalThis as { ErrorUtils?: ErrorUtilsLike }).ErrorUtils; + if (!errorUtils?.setGlobalHandler) return; + + mapDebugErrorHandlerInstalled = true; + const previous = errorUtils.getGlobalHandler?.(); + + errorUtils.setGlobalHandler((error, isFatal) => { + const err = error as { name?: string; message?: string; stack?: string }; + console.log("[map:fatal] global JS error", { + isFatal, + name: err?.name, + message: err?.message, + stack: err?.stack, + }); + previous?.(error, isFatal); + }); +} diff --git a/lib/map-discovery-flight.ts b/lib/map-discovery-flight.ts new file mode 100644 index 0000000..e35aeaf --- /dev/null +++ b/lib/map-discovery-flight.ts @@ -0,0 +1,83 @@ +import type { Region } from "react-native-maps"; + +import { + regionForClusterFocus, + regionForMapCountry, + WORLD_INITIAL_REGION, +} from "@/constants/map-regions"; +import type { FlightPhase } from "@/hooks/use-map-flight"; +import type { MapCluster } from "@/lib/map-clusters"; +import { REGION_FOCUS_INITIAL_DELTA } from "@/lib/map-region-markers"; +import type { SelectionSource } from "@/store/use-identity-store"; +import type { MapCountry } from "@/types/country"; + +const WORLD_PHASE_MS = 700; +const CONTINENT_PHASE_MS = 600; +const COUNTRY_PHASE_MS = 750; +/** Direct map taps are already near the target — snap in faster. */ +const COUNTRY_TAP_MS = 520; +/** Preview shuffle — one continuous retarget from the current camera. */ +const COUNTRY_RETARGET_MS = 680; +/** Random FAB — same single-flight pattern, but framed at continent zoom. */ +const FAB_CONTINENT_RETARGET_MS = 680; + +/** One continuous camera move — avoids stacked animateToRegion crashes on iOS. */ +const COUNTRY_RETARGET_SOURCES = new Set>([ + "mapTap", + "shuffle", +]); + +export type DiscoveryFlightParams = { + pick: MapCountry; + /** Continent cluster the country belongs to (frames the middle phase). */ + cluster: MapCluster | null; + source: Exclude; + /** Opening world pan — included for cinematic programmatic discovery only. */ + includeWorld: boolean; +}; + +/** + * Builds camera phases for country navigation. + * Marker density/UI derive separately from live zoom — phases only move the camera. + * + * Map tap and preview shuffle retarget in one continuous country-zoom flight from + * the current viewport. Random FAB uses the same pattern at continent zoom. + * + * Explore runs continent → country; search may prepend a world pan when `includeWorld`. + */ +export function buildDiscoveryPhases({ + pick, + cluster, + source, + includeWorld, +}: DiscoveryFlightParams): FlightPhase[] { + const countryRegion = regionForMapCountry(pick); + + if (source === "fab") { + // Continent zoom, centered on the picked country (not the cluster centroid). + return [ + { + region: regionForMapCountry(pick, REGION_FOCUS_INITIAL_DELTA), + duration: FAB_CONTINENT_RETARGET_MS, + }, + ]; + } + + if (COUNTRY_RETARGET_SOURCES.has(source)) { + const duration = + source === "mapTap" ? COUNTRY_TAP_MS : COUNTRY_RETARGET_MS; + return [{ region: countryRegion, duration }]; + } + + const continentRegion: Region = cluster + ? regionForClusterFocus(cluster) + : regionForMapCountry(pick, REGION_FOCUS_INITIAL_DELTA); + + const phases: FlightPhase[] = []; + if (includeWorld) { + phases.push({ region: WORLD_INITIAL_REGION, duration: WORLD_PHASE_MS }); + } + phases.push({ region: continentRegion, duration: CONTINENT_PHASE_MS }); + phases.push({ region: countryRegion, duration: COUNTRY_PHASE_MS }); + return phases; +} diff --git a/lib/map-map-tap-hit.ts b/lib/map-map-tap-hit.ts new file mode 100644 index 0000000..dc9ef0b --- /dev/null +++ b/lib/map-map-tap-hit.ts @@ -0,0 +1,207 @@ +import type { LatLng } from "react-native-maps"; + +import type { MapCluster } from "@/lib/map-clusters"; +import { + countryNamesMatch, + type CountryBoundaryPolygon, +} from "@/lib/map-country-boundaries"; +import type { MapCountry } from "@/types/country"; + +export type MapPressCoordinate = { + latitude: number; + longitude: number; +}; + +type RingBBox = { + minLat: number; + maxLat: number; + minLng: number; + maxLng: number; +}; + +function ringBBox(ring: LatLng[]): RingBBox { + let minLat = 90; + let maxLat = -90; + let minLng = 180; + let maxLng = -180; + + for (const point of ring) { + minLat = Math.min(minLat, point.latitude); + maxLat = Math.max(maxLat, point.latitude); + minLng = Math.min(minLng, point.longitude); + maxLng = Math.max(maxLng, point.longitude); + } + + return { minLat, maxLat, minLng, maxLng }; +} + +function pointInBBox(point: MapPressCoordinate, bbox: RingBBox): boolean { + return ( + point.latitude >= bbox.minLat && + point.latitude <= bbox.maxLat && + point.longitude >= bbox.minLng && + point.longitude <= bbox.maxLng + ); +} + +function pointInRing(point: MapPressCoordinate, ring: LatLng[]): boolean { + if (ring.length < 3) return false; + + let inside = false; + const x = point.longitude; + const y = point.latitude; + + for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) { + const xi = ring[i].longitude; + const yi = ring[i].latitude; + const xj = ring[j].longitude; + const yj = ring[j].latitude; + const spansLatitude = yi > y !== yj > y; + if (!spansLatitude) continue; + + const dy = yj - yi; + if (Math.abs(dy) < 1e-12) continue; + + const intersect = x < ((xj - xi) * (y - yi)) / dy + xi; + if (intersect) inside = !inside; + } + + return inside; +} + +/** Prefer nearest land when tap is just outside a country bbox (coasts). */ +const COAST_BIAS_DEGREES = 1; + +function distanceToBBox(point: MapPressCoordinate, bbox: RingBBox): number { + const latDist = + point.latitude < bbox.minLat + ? bbox.minLat - point.latitude + : point.latitude > bbox.maxLat + ? point.latitude - bbox.maxLat + : 0; + const lngDist = + point.longitude < bbox.minLng + ? bbox.minLng - point.longitude + : point.longitude > bbox.maxLng + ? point.longitude - bbox.maxLng + : 0; + return Math.hypot(latDist, lngDist); +} + +function approximateRingArea(ring: LatLng[]): number { + let area = 0; + for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) { + area += ring[j].longitude * ring[i].latitude; + area -= ring[i].longitude * ring[j].latitude; + } + return Math.abs(area / 2); +} + +function pointInPolygonWithHoles( + point: MapPressCoordinate, + outer: LatLng[], + holes?: LatLng[][], +): boolean { + if (!pointInRing(point, outer)) return false; + if (!holes?.length) return true; + + for (const hole of holes) { + if (hole.length >= 3 && pointInRing(point, hole)) return false; + } + + return true; +} + +export function findMapCountryByBoundaryName( + countries: MapCountry[], + geoAdminName: string | null, +): MapCountry | null { + if (!geoAdminName) return null; + return ( + countries.find((country) => countryNamesMatch(country.name, geoAdminName)) ?? + null + ); +} + +/** + * Resolves a map tap to a country using Natural Earth polygons. + * When multiple polygons overlap (borders), prefers the smallest match. + */ +export function findMapCountryAtCoordinate( + polygons: CountryBoundaryPolygon[], + countries: MapCountry[], + coordinate: MapPressCoordinate, +): MapCountry | null { + let best: { country: MapCountry; area: number } | null = null; + + for (const polygon of polygons) { + if (!polygon.countryName) continue; + + const bbox = ringBBox(polygon.coordinates); + if (!pointInBBox(coordinate, bbox)) continue; + if ( + !pointInPolygonWithHoles( + coordinate, + polygon.coordinates, + polygon.holes, + ) + ) { + continue; + } + + const country = findMapCountryByBoundaryName( + countries, + polygon.countryName, + ); + if (!country) continue; + + const area = approximateRingArea(polygon.coordinates); + if (!best || area < best.area) { + best = { country, area }; + } + } + + return best?.country ?? null; +} + +function findCountryNearCoast( + polygons: CountryBoundaryPolygon[], + countries: MapCountry[], + coordinate: MapPressCoordinate, +): MapCountry | null { + let best: { country: MapCountry; distance: number } | null = null; + + for (const polygon of polygons) { + if (!polygon.countryName) continue; + + const bbox = ringBBox(polygon.coordinates); + const distance = distanceToBBox(coordinate, bbox); + if (distance > COAST_BIAS_DEGREES) continue; + + const country = findMapCountryByBoundaryName( + countries, + polygon.countryName, + ); + if (!country) continue; + + if (!best || distance < best.distance) { + best = { country, distance }; + } + } + + return best?.country ?? null; +} + +/** World-view tap: land hit → app's continent cluster for that country's region. */ +export function findClusterAtWorldCoordinate( + polygons: CountryBoundaryPolygon[], + countries: MapCountry[], + clusters: MapCluster[], + coordinate: MapPressCoordinate, +): MapCluster | null { + const country = + findMapCountryAtCoordinate(polygons, countries, coordinate) ?? + findCountryNearCoast(polygons, countries, coordinate); + if (!country) return null; + return clusters.find((cluster) => cluster.region === country.region) ?? null; +} diff --git a/lib/map-place-weather.ts b/lib/map-place-weather.ts new file mode 100644 index 0000000..c635361 --- /dev/null +++ b/lib/map-place-weather.ts @@ -0,0 +1,12 @@ +/** Deterministic demo weather for map place chrome (no API yet). */ +export function mapPlaceWeatherSummary(latlng: [number, number]): { + tempC: number; + condition: string; +} { + const [lat] = latlng; + const tempC = Math.round(32 - Math.abs(lat) * 0.42); + const conditions = ["Clear", "Partly cloudy", "Cloudy"] as const; + const index = + Math.abs(Math.floor(lat * 11 + latlng[1] * 3)) % conditions.length; + return { tempC, condition: conditions[index] }; +} diff --git a/lib/map-presentation-transition.ts b/lib/map-presentation-transition.ts new file mode 100644 index 0000000..99df8d3 --- /dev/null +++ b/lib/map-presentation-transition.ts @@ -0,0 +1,49 @@ +import { syncMapRegionFocusForCountry } from "@/lib/map-region-focus"; +import { selectCountryOnMap } from "@/lib/map-country-selection"; +import { useMapPresentationStore } from "@/store/use-map-presentation-store"; +import type { SelectionSource } from "@/store/use-identity-store"; +import type { MapCountry } from "@/types/country"; +import type { MapPresentationMode } from "@/types/map-presentation"; + +type CountryPresentationMode = Extract; + +/** Region + UI prep before camera flight — identity commits later via `commitMapPresentation`. */ +export function stageMapPresentationForFlight(country: MapCountry): void { + syncMapRegionFocusForCountry(country); +} + +/** After camera acknowledges the flight — commit identity and presentation mode. */ +export function commitMapPresentation({ + country, + mode, + source, +}: { + country: MapCountry; + mode: CountryPresentationMode; + source: Exclude; +}): void { + useMapPresentationStore.getState().setMode(mode); + selectCountryOnMap(country, source); + syncMapRegionFocusForCountry(country); +} + +/** Immediate transition (no camera deferral) — e.g. preview on already-focused country. */ +export function transitionMapPresentation({ + country, + mode, + source, +}: { + country: MapCountry; + mode: CountryPresentationMode; + source: Exclude; +}): void { + commitMapPresentation({ country, mode, source }); +} + +export function dismissMapPreview(): void { + useMapPresentationStore.getState().setMode("focus"); +} + +export function resetMapPresentation(): void { + useMapPresentationStore.getState().resetPresentation(); +} diff --git a/lib/map-presentation.ts b/lib/map-presentation.ts new file mode 100644 index 0000000..48248ec --- /dev/null +++ b/lib/map-presentation.ts @@ -0,0 +1,24 @@ +import type { MapCountry } from "@/types/country"; +import type { MapPresentationMode } from "@/types/map-presentation"; + +export function isCountryPreviewOpen( + mode: MapPresentationMode, + activeCountry: MapCountry | null, +): boolean { + return mode === "preview" && activeCountry !== null; +} + +export function isCountryFocused( + mode: MapPresentationMode, + activeCountry: MapCountry | null, +): boolean { + return mode === "focus" && activeCountry !== null; +} + +export function showRegionChrome( + focusedRegion: string | null, + mode: MapPresentationMode, + activeCountry: MapCountry | null, +): boolean { + return !!focusedRegion && !activeCountry && mode !== "preview"; +} diff --git a/lib/map-random-pick.ts b/lib/map-random-pick.ts new file mode 100644 index 0000000..283404b --- /dev/null +++ b/lib/map-random-pick.ts @@ -0,0 +1,151 @@ +import { resolveFlatZoomTier } from "@/lib/map-camera-zoom"; +import { + filterMapCountriesByChip, + type MapFilterChip, + type MapMode, +} from "@/store/use-map-store"; +import { useCountryFeedStore } from "@/store/use-country-feed-store"; +import type { FeaturedShortcut } from "@/store/use-map-ui-store"; +import { useRecentlyViewedStore } from "@/store/use-recently-viewed-store"; +import { useSavedCountriesStore } from "@/store/use-saved-countries-store"; +import { getMapDisplayLatLng, isValidLatLng } from "@/lib/map-country"; +import type { MapCountry } from "@/types/country"; + +type BuildMapRandomPoolOptions = { + countries: MapCountry[]; + activeChip: MapFilterChip; + featuredShortcut: FeaturedShortcut | null; + focusedRegion: string | null; + useWorldPool: boolean; +}; + +/** Builds the country pool used by map random / next-country actions. */ +export async function buildMapRandomPool({ + countries, + activeChip, + featuredShortcut, + focusedRegion, + useWorldPool, +}: BuildMapRandomPoolOptions): Promise { + if (countries.length === 0) return []; + + let pool: MapCountry[] = []; + + if (useWorldPool) { + if (featuredShortcut === "all") { + useRecentlyViewedStore.getState().seedIfEmpty(); + const names = useRecentlyViewedStore + .getState() + .entries.slice(0, 3) + .map((e) => e.country.name); + pool = countries.filter((c) => names.includes(c.name)); + } else if (featuredShortcut === "terrain") { + const feed = useCountryFeedStore.getState(); + if (feed.countries.length === 0 && feed.status === "idle") { + await feed.loadInitialFeed(); + } + const names = feed.countries.slice(0, 3).map((c) => c.name); + pool = countries.filter((c) => names.includes(c.name)); + } else if (featuredShortcut === "saved") { + const names = useSavedCountriesStore + .getState() + .savedCountries.map((c) => c.name); + pool = countries.filter((c) => names.includes(c.name)); + } + + if (pool.length === 0) { + pool = countries; + } + } else { + const base = focusedRegion + ? countries.filter((c) => c.region === focusedRegion) + : countries; + pool = base; + } + + // Only keep countries we can actually frame on the map. Picking one with an + // invalid coordinate would feed NaN to the native MapView and crash the app. + const filtered = filterMapCountriesByChip(pool, activeChip).filter((country) => + isValidLatLng(getMapDisplayLatLng(country)), + ); + + if (filtered.length > 0) return filtered; + + return filterMapCountriesByChip(countries, activeChip).filter((country) => + isValidLatLng(getMapDisplayLatLng(country)), + ); +} + +/** + * Whether random/shuffle actions should draw from the full world pool. + * Regional scope wins when a continent is active; preview shuffle never widens scope. + */ +export function resolveMapRandomUseWorldPool({ + focusedRegion, + mapMode, + flatLatitudeDelta, + contextualOnly = false, +}: { + focusedRegion: string | null; + mapMode: MapMode; + flatLatitudeDelta: number; + contextualOnly?: boolean; +}): boolean { + if (contextualOnly || focusedRegion) return false; + return ( + mapMode === "3d" || resolveFlatZoomTier(flatLatitudeDelta) === "world" + ); +} + +/** Picks a random country, optionally avoiding `excludeName` when the pool allows. */ +export function pickRandomMapCountry( + pool: MapCountry[], + excludeName?: string | null, +): MapCountry | null { + if (pool.length === 0) return null; + + const candidates = + excludeName && pool.length > 1 + ? pool.filter((c) => c.name !== excludeName) + : pool; + + if (candidates.length === 0) return null; + + return candidates[Math.floor(Math.random() * candidates.length)] ?? null; +} + +/** Chance the FAB stays within the active continent when one is focused. */ +export const FAB_CONTINENT_BIAS = 0.7; + +/** + * Picks from the global `pool` but biased toward `region` when one is active: + * with probability `bias` it samples that continent (if it has members), otherwise + * the whole pool. Always avoids `excludeName` when the chosen pool allows it, but + * falls back to allow a repeat if the pool is too small/constrained to do otherwise. + */ +export function pickBiasedRandomMapCountry({ + pool, + region, + excludeName, + bias = FAB_CONTINENT_BIAS, +}: { + pool: MapCountry[]; + region: string | null; + excludeName?: string | null; + bias?: number; +}): MapCountry | null { + if (pool.length === 0) return null; + + const regionPool = region ? pool.filter((c) => c.region === region) : []; + const preferRegion = regionPool.length > 0 && Math.random() < bias; + const primary = preferRegion ? regionPool : pool; + + return ( + // Prefer a fresh country in the chosen pool… + pickRandomMapCountry(primary, excludeName) ?? + // …then anywhere in the global pool… + pickRandomMapCountry(pool, excludeName) ?? + // …finally allow a repeat when the pool is constrained to one option. + pickRandomMapCountry(pool) + ); +} diff --git a/lib/map-region-focus.ts b/lib/map-region-focus.ts new file mode 100644 index 0000000..0663c11 --- /dev/null +++ b/lib/map-region-focus.ts @@ -0,0 +1,12 @@ +import { normalizeCountryRegion } from "@/lib/app-region"; +import { useMapUiStore } from "@/store/use-map-ui-store"; +import type { MapCountry } from "@/types/country"; + +/** Keep continent focus aligned with the active country. */ +export function syncMapRegionFocusForCountry( + country: Pick, +): void { + useMapUiStore + .getState() + .setFocusedRegion(normalizeCountryRegion(country).region); +} diff --git a/lib/map-region-markers.ts b/lib/map-region-markers.ts new file mode 100644 index 0000000..9bc1d58 --- /dev/null +++ b/lib/map-region-markers.ts @@ -0,0 +1,150 @@ +import { getMapDisplayLatLng } from "@/lib/map-country"; +import type { MapCountry } from "@/types/country"; + +/** Flag pins shown at continent/region zoom — zoom in to reveal the rest. */ +export const REGION_ZOOM_MARKER_CAP = 16; + +/** Below this latitudeDelta (2D), show every filtered country in the focused region. */ +export const MAP_COUNTRY_ZOOM_LATITUDE_DELTA = 28; +/** Cluster focus lands here; any zoom-in movement beyond this reveals all flags. */ +export const REGION_FOCUS_INITIAL_DELTA = 45; + +/** Globe camera distance at or below this shows every country in the focused region. */ +export const GLOBE_DETAIL_CAMERA_DISTANCE = 2; + +/** Globe distance for continent framing after zooming out from country detail. */ +export const GLOBE_REGION_CAMERA_DISTANCE = 2.75; + +/** Above this distance the globe is in world view (no continent selected). */ +export const GLOBE_WORLD_ZOOM_DISTANCE = 3.45; + +/** Opacity for sibling flags when one country stays softly highlighted at continent zoom. */ +export const MARKER_DEEMPHASIZED_OPACITY = 0.34; + +/** One-shot pin scale peak while the camera flies to a country (2D + 3D). */ +export const MAP_FOCUS_TRANSITION_SCALE_PEAK = 1.12; +/** Matches default 2D `animateToRegion` flight duration in map screen. */ +export const MAP_FOCUS_TRANSITION_2D_MS = 650; +/** Matches default 3D globe focus flight duration in map screen. */ +export const MAP_FOCUS_TRANSITION_3D_MS = 1100; + +/** 0–1 flight progress → scale multiplier (1 → peak → 1). */ +export function resolveFocusTransitionScale(progress: number): number { + const t = Math.min(1, Math.max(0, progress)); + const peakDelta = MAP_FOCUS_TRANSITION_SCALE_PEAK - 1; + + if (t <= 0.5) { + const p = t / 0.5; + const eased = 1 - (1 - p) * (1 - p); + return 1 + peakDelta * eased; + } + + const p = (t - 0.5) / 0.5; + const eased = p * p; + return MAP_FOCUS_TRANSITION_SCALE_PEAK - peakDelta * eased; +} + +export type GlobeZoomTier = "world" | "region" | "country"; + +export function resolveGlobeZoomTier(distance: number): GlobeZoomTier { + if (distance > GLOBE_WORLD_ZOOM_DISTANCE) return "world"; + if (distance > GLOBE_DETAIL_CAMERA_DISTANCE) return "region"; + return "country"; +} + +/** 0 at detail zoom, 1 at far region zoom — fades markers without hiding them. */ +export function resolveRegionZoomFadeT( + cameraDistance: number, + minDistance = GLOBE_DETAIL_CAMERA_DISTANCE, + maxDistance = GLOBE_DETAIL_CAMERA_DISTANCE + 0.85, +): number { + if (maxDistance <= minDistance) return 0; + return Math.min( + 1, + Math.max(0, (cameraDistance - minDistance) / (maxDistance - minDistance)), + ); +} + +/** First batch of flags after continent select (viewport-nearby). */ +export const MARKER_REVEAL_PRIORITY_BATCH = 8; +/** Countries added per streaming batch after the priority batch. */ +export const MARKER_REVEAL_BATCH_SIZE = 4; +/** Delay between streaming batches (ms). */ +export const MARKER_REVEAL_BATCH_INTERVAL_MS = 100; + +export type MapMarkerPresentation = "entering" | "full"; + +/** Keeps the most populous countries for a lighter region-level discovery view. */ +export function capMapCountriesByPopulation( + countries: MapCountry[], + limit = REGION_ZOOM_MARKER_CAP, +): MapCountry[] { + if (countries.length <= limit) return countries; + + return [...countries] + .sort((a, b) => b.population - a.population) + .slice(0, limit); +} + +/** Ensures a focal country stays in the marker list (e.g. random FAB at continent zoom). */ +export function ensureMapCountryInMarkerList( + countries: MapCountry[], + countryName: string | null | undefined, +): MapCountry[] { + if (!countryName) return countries; + if (countries.some((c) => c.name === countryName)) return countries; + + const focal = countries.find((c) => c.name === countryName); + return focal ? [...countries, focal] : countries; +} + +/** Full region list at detail zoom; capped major countries at continent zoom. */ +export function resolveRegionMarkerCountries( + countries: MapCountry[], + isDetailZoom: boolean, + focalCountryName?: string | null, +): MapCountry[] { + const resolved = isDetailZoom + ? countries + : capMapCountriesByPopulation(countries); + return ensureMapCountryInMarkerList(resolved, focalCountryName); +} + +function squaredDistanceToViewport( + country: MapCountry, + centerLat: number, + centerLng: number, +): number { + const [lat, lng] = getMapDisplayLatLng(country); + const dLat = lat - centerLat; + const dLng = lng - centerLng; + return dLat * dLat + dLng * dLng; +} + +/** Nearest-to-viewport-center first — used for staged flag reveal. */ +export function sortCountriesByViewportPriority( + countries: MapCountry[], + centerLat: number, + centerLng: number, + focalCountryName?: string | null, +): MapCountry[] { + const sorted = [...countries].sort( + (a, b) => + squaredDistanceToViewport(a, centerLat, centerLng) - + squaredDistanceToViewport(b, centerLat, centerLng), + ); + + if (!focalCountryName) return sorted; + + const focalIndex = sorted.findIndex((c) => c.name === focalCountryName); + if (focalIndex <= 0) return sorted; + + const focal = sorted[focalIndex]; + if (!focal) return sorted; + + return [ + focal, + ...sorted.slice(0, focalIndex), + ...sorted.slice(focalIndex + 1), + ]; +} diff --git a/lib/map-view-transition.ts b/lib/map-view-transition.ts new file mode 100644 index 0000000..b5f9071 --- /dev/null +++ b/lib/map-view-transition.ts @@ -0,0 +1,52 @@ +/** Visual crossfade phase when switching 2D map ↔ 3D globe (not persisted). */ +export type MapViewTransition = + | "idle" + | "enteringGlobe" + | "ready" + | "enteringFlat"; + +export const GLOBE_CROSSFADE_MS = 300; +export const MAP_DIM_HOLD_MS = 200; + +export function shouldShowFlatMapLayer( + mapMode: "2d" | "3d", + transition: MapViewTransition, +): boolean { + return ( + mapMode === "2d" || + transition === "enteringGlobe" || + transition === "enteringFlat" + ); +} + +export function shouldShowGlobeLayer( + mapMode: "2d" | "3d", + transition: MapViewTransition, +): boolean { + return ( + mapMode === "3d" || + transition === "enteringGlobe" || + transition === "enteringFlat" + ); +} + +/** True when map chrome should use globe (3D) behavior — only while globe is fully active. */ +export function isGlobeMapUi( + mapMode: "2d" | "3d", + transition: MapViewTransition, +): boolean { + return mapMode === "3d" && transition === "ready"; +} + +/** True when 2D map data/chrome should drive the experience (incl. crossfade back from globe). */ +export function isFlatMapUi( + mapMode: "2d" | "3d", + transition: MapViewTransition, +): boolean { + return mapMode === "2d" || transition === "enteringFlat"; +} + +/** Flat map pins/clusters — only while 2D is the active mode (hidden during any 3D phase). */ +export function shouldShowFlatMapMarkers(mapMode: "2d" | "3d"): boolean { + return mapMode === "2d"; +} diff --git a/lib/open-country-on-map.ts b/lib/open-country-on-map.ts new file mode 100644 index 0000000..9ef09c3 --- /dev/null +++ b/lib/open-country-on-map.ts @@ -0,0 +1,69 @@ +import { Image } from "expo-image"; + +import { buildFlagCdnUrl, resolveFlagCdnUrl } from "@/lib/flag-url"; +import { cca2FromFlagUrl } from "@/lib/map-country"; +import { syncMapRegionFocusForCountry } from "@/lib/map-region-focus"; +import { useMapStore } from "@/store/use-map-store"; +import { useMapUiStore } from "@/store/use-map-ui-store"; +import { useRecentlyViewedStore } from "@/store/use-recently-viewed-store"; +import { useSearchUiStore } from "@/store/use-search-ui-store"; +import type { SelectionSource } from "@/store/use-identity-store"; +import type { Country } from "@/types/country"; + +function prefetchCountryFlag(country: Country): void { + const flagUri = resolveFlagCdnUrl( + country.flag, + cca2FromFlagUrl(country.flag), + ); + if (flagUri) { + void Image.prefetch(flagUri); + return; + } + const iso2 = country.cca2?.trim(); + if (iso2?.length === 2) { + void Image.prefetch(buildFlagCdnUrl(iso2)); + } +} + +function prepareMapForCountry( + country: Country, + source: Exclude = "search", +): void { + const mapUi = useMapUiStore.getState(); + const map = useMapStore.getState(); + + prefetchCountryFlag(country); + + map.setMapMode("2d"); + mapUi.setCountryMarkerMode("flag"); + // Explore discovery starts at world zoom — region sync happens during the camera flight. + if (source !== "explore") { + syncMapRegionFocusForCountry(country); + } + useRecentlyViewedStore.getState().recordView(country); +} + +/** + * External entry → Map: fly to country and focus only (no preview). + * Map screen completes the flow via `pendingMapIntent` (mode: focus). + * Identity commits after the camera flight acknowledges (Phase 3). + */ +export function focusCountryOnMap( + country: Country, + source: Exclude = "search", +): void { + prepareMapForCountry(country, source); + const map = useMapStore.getState(); + map.focusCountryFromExternal(country.name, country, source); +} + +/** @deprecated Use focusCountryOnMap — spotlight no longer opens preview. */ +export function spotlightCountryOnMap(country: Country): void { + focusCountryOnMap(country); +} + +/** Close search and focus the country on the map (no forced preview). */ +export function openCountryOnMap(country: Country): void { + useSearchUiStore.getState().closeSearch(); + focusCountryOnMap(country); +} diff --git a/lib/resolve-api-base-url.ts b/lib/resolve-api-base-url.ts new file mode 100644 index 0000000..feb8f79 --- /dev/null +++ b/lib/resolve-api-base-url.ts @@ -0,0 +1,75 @@ +import Constants from "expo-constants"; +import { Platform } from "react-native"; + +const DEFAULT_API_PORT = "3002"; +const DEFAULT_PRODUCTION_API_URL = "http://localhost:3001"; + +function parseHostFromUri(uri: string | undefined | null): string | null { + if (!uri) return null; + + const withoutScheme = uri + .replace(/^exp(?:\+[\w-]+)?:\/\//, "") + .replace(/^https?:\/\//, ""); + + const host = withoutScheme.split(":")[0]?.trim(); + return host || null; +} + +/** Same machine IP Metro uses — works on a phone over Wi‑Fi without hardcoding .env. */ +function resolveDevApiHost(): string | null { + const hostUri = + Constants.expoConfig?.hostUri ?? + Constants.experienceUrl ?? + Constants.linkingUri; + + const host = parseHostFromUri(hostUri); + if (!host) return null; + + if ( + Platform.OS === "android" && + (host === "localhost" || host === "127.0.0.1") + ) { + return "10.0.2.2"; + } + + return host; +} + +/** + * Resolves the backend base URL. + * + * - **Dev (default):** uses Metro's host + `EXPO_PUBLIC_API_PORT` (no LAN IP in `.env`). + * - **Dev override:** set `EXPO_PUBLIC_API_URL` (e.g. ngrok or a deployed API). + * - **Production:** set `EXPO_PUBLIC_API_URL` in EAS / CI. + */ +export function resolveApiBaseUrl(): string { + const envUrl = process.env.EXPO_PUBLIC_API_URL?.trim(); + if (envUrl) { + const url = envUrl.replace(/\/$/, ""); + if (__DEV__) { + console.log("[API] Using EXPO_PUBLIC_API_URL:", url); + } + return url; + } + + if (__DEV__) { + const hostUri = + Constants.expoConfig?.hostUri ?? + Constants.experienceUrl ?? + Constants.linkingUri; + const host = resolveDevApiHost(); + if (host) { + const port = process.env.EXPO_PUBLIC_API_PORT?.trim() || DEFAULT_API_PORT; + const url = `http://${host}:${port}`; + console.log("[API] Metro hostUri:", hostUri); + console.log("[API] Resolved from Metro host:", url); + return url; + } + } + + if (__DEV__) { + console.log("[API] Using fallback URL:", DEFAULT_PRODUCTION_API_URL); + } + + return DEFAULT_PRODUCTION_API_URL; +} diff --git a/metro.config.js b/metro.config.js index e693916..995883c 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,7 +1,29 @@ +const path = require("path"); const { getDefaultConfig } = require("expo/metro-config"); const { withNativewind } = require("nativewind/metro"); /** @type {import('expo/metro-config').MetroConfig} */ const config = getDefaultConfig(__dirname); +// three ships both a CJS (`three.cjs`) and an ESM (`three.module.js`) build via its +// `exports` map. With Metro package-exports enabled, `import` consumers (our code) +// resolve to the ESM build while `require` consumers (@react-three/fiber/native) +// resolve to the CJS build -> two THREE instances. That breaks instanceof checks and +// crashes the native GL renderer during pan/zoom + camera flights. Pin the bare +// `three` specifier to a single build file so only one instance is ever bundled. +const threeSingleton = path.resolve( + __dirname, + "node_modules/three/build/three.module.js", +); +const defaultResolveRequest = config.resolver.resolveRequest; +config.resolver.resolveRequest = (context, moduleName, platform) => { + if (moduleName === "three") { + return { type: "sourceFile", filePath: threeSingleton }; + } + if (defaultResolveRequest) { + return defaultResolveRequest(context, moduleName, platform); + } + return context.resolveRequest(context, moduleName, platform); +}; + module.exports = withNativewind(config); diff --git a/package-lock.json b/package-lock.json index 5aa1f3d..8b598c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,16 +10,20 @@ "dependencies": { "@expo/vector-icons": "^15.0.3", "@react-native-async-storage/async-storage": "2.2.0", + "@react-native-community/slider": "5.0.1", "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.8", - "expo": "~54.0.33", + "@react-three/fiber": "^9.6.1", + "expo": "~54.0.35", + "expo-asset": "~12.0.13", "expo-constants": "~18.0.13", - "expo-font": "~14.0.11", + "expo-font": "~14.0.12", + "expo-gl": "~16.0.10", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", "expo-linking": "~8.0.11", - "expo-router": "~6.0.23", + "expo-router": "~6.0.24", "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", "expo-symbols": "~1.0.8", @@ -37,11 +41,13 @@ "react-native-screens": "~4.16.0", "react-native-web": "~0.21.0", "react-native-worklets": "0.5.1", + "three": "0.160.0", "zustand": "^5.0.13" }, "devDependencies": { "@tailwindcss/postcss": "^4.3.0", "@types/react": "~19.1.0", + "@types/three": "^0.160.0", "eslint": "^9.25.0", "eslint-config-expo": "~10.0.0", "postcss": "^8.5.15", @@ -1774,63 +1780,52 @@ } }, "node_modules/@expo/config": { - "version": "12.0.13", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", - "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", + "version": "56.0.9", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-56.0.9.tgz", + "integrity": "sha512-/lqFeWGSrhpKJVP8tTN8LjuoIe8u8q2w7FzBL0C+wHgl+WM8l1qUIEYWy/sMvsG/NbpUIUsDHJRhQvOkU58eIw==", "license": "MIT", + "peer": true, "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~54.0.4", - "@expo/config-types": "^54.0.10", - "@expo/json-file": "^10.0.8", + "@expo/config-plugins": "~56.0.8", + "@expo/config-types": "^56.0.5", + "@expo/json-file": "^10.2.0", + "@expo/require-utils": "^56.1.3", "deepmerge": "^4.3.1", "getenv": "^2.0.0", "glob": "^13.0.0", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", "resolve-workspace-root": "^2.0.0", "semver": "^7.6.0", - "slugify": "^1.3.4", - "sucrase": "~3.35.1" + "slugify": "^1.3.4" } }, "node_modules/@expo/config-plugins": { - "version": "54.0.4", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz", - "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==", + "version": "56.0.8", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-56.0.8.tgz", + "integrity": "sha512-phTuyBhgVLfqUHMjQkAfRtbyoY6yTxoKja1awtpVnEkoJDxPJuXx1KX5uvq1eZtt4bJQ08OBJ6P95INqRSHpRg==", "license": "MIT", + "peer": true, "dependencies": { - "@expo/config-types": "^54.0.10", - "@expo/json-file": "~10.0.8", - "@expo/plist": "^0.4.8", + "@expo/config-types": "^56.0.5", + "@expo/json-file": "~10.2.0", + "@expo/plist": "^0.7.0", + "@expo/require-utils": "^56.1.3", "@expo/sdk-runtime-versions": "^1.0.0", "chalk": "^4.1.2", "debug": "^4.3.5", "getenv": "^2.0.0", "glob": "^13.0.0", - "resolve-from": "^5.0.0", "semver": "^7.5.4", - "slash": "^3.0.0", "slugify": "^1.6.6", "xcode": "^3.0.1", "xml2js": "0.6.0" } }, - "node_modules/@expo/config-plugins/node_modules/@expo/json-file": { - "version": "10.0.15", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.15.tgz", - "integrity": "sha512-xLtsy1820Rf2myhhIc7WmfoUg5cWEJB9tEylhgGhRF/acYGuUXUVkKHYoHY31GbYf6CIZNvipTFxuvWRpVlXTw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.20.0", - "json5": "^2.2.3" - } - }, "node_modules/@expo/config-plugins/node_modules/semver": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -1839,25 +1834,18 @@ } }, "node_modules/@expo/config-types": { - "version": "54.0.10", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz", - "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==", - "license": "MIT" - }, - "node_modules/@expo/config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "56.0.5", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-56.0.5.tgz", + "integrity": "sha512-GsAHO/MwW9ZRdgnmyfRXqVGLCP/zejD6rWnp5OROp8mBGRObKm4HfrjlUyT1skjMwCj1OrURx9ZfIc6yeBAkIA==", "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } + "peer": true }, "node_modules/@expo/config/node_modules/semver": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -1906,16 +1894,18 @@ } }, "node_modules/@expo/env": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.11.tgz", - "integrity": "sha512-xV+ps6YCW7XIPVUwFVCRN2nox09dnRwy8uIjwHWTODu0zFw4kp4omnVkl0OOjuu2XOe7tdgAHxikrkJt9xB/7Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.3.0.tgz", + "integrity": "sha512-9HnnIbzwTTdbwSjNLXTk0fPm9ZwMJ7c1/31tsni8HZ8Q62KzYCyspahH+V365vg5J6lr001DzNwBxVWSaYCQLg==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^4.0.0", "debug": "^4.3.4", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", "getenv": "^2.0.0" + }, + "engines": { + "node": ">=20.12.0" } }, "node_modules/@expo/fingerprint": { @@ -2003,6 +1993,25 @@ "semver": "^7.6.0" } }, + "node_modules/@expo/image-utils/node_modules/@expo/require-utils": { + "version": "55.0.5", + "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-55.0.5.tgz", + "integrity": "sha512-U4K/CQ2VpXuwfNGsN+daKmYOt15hCP8v/pXaYH6eut7kdYZo6SfJ1yr67BIcJ+1Gzzs+QzTxswAZChKpXmceyw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.20.0", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-modules-commonjs": "^7.24.8" + }, + "peerDependencies": { + "typescript": "^5.0.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@expo/image-utils/node_modules/semver": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", @@ -2026,31 +2035,32 @@ } }, "node_modules/@expo/metro": { - "version": "54.2.0", - "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.2.0.tgz", - "integrity": "sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==", + "version": "56.0.0", + "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-56.0.0.tgz", + "integrity": "sha512-5gIgQHtEpjjvsjKfVtIv23a98LLRV0/y07PDShEwYSytAMlE3FSF8RHXqtHc1sUJL6dn7hnuIBpIbrLXXuVi0A==", "license": "MIT", + "peer": true, "dependencies": { - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3" + "metro": "0.84.4", + "metro-babel-transformer": "0.84.4", + "metro-cache": "0.84.4", + "metro-cache-key": "0.84.4", + "metro-config": "0.84.4", + "metro-core": "0.84.4", + "metro-file-map": "0.84.4", + "metro-minify-terser": "0.84.4", + "metro-resolver": "0.84.4", + "metro-runtime": "0.84.4", + "metro-source-map": "0.84.4", + "metro-symbolicate": "0.84.4", + "metro-transform-plugins": "0.84.4", + "metro-transform-worker": "0.84.4" } }, "node_modules/@expo/metro-config": { - "version": "56.0.12", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-56.0.12.tgz", - "integrity": "sha512-L9q423WwY6eUu4A3N8OaBDECuoUNukUQKomb0/LinwzG+QkU8cBvpELXwEngP7eTt1s6LB3tXcnPp/aMvLsojw==", + "version": "56.0.13", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-56.0.13.tgz", + "integrity": "sha512-OPyNYiex/6Ms8zT2POdIZsLhcAZYk7O+yJvpz5uG/4QRA7aiESfCy1I+0YHewMlR4P1YQeyxIrfTurs6m9xfZA==", "license": "MIT", "peer": true, "dependencies": { @@ -2088,93 +2098,56 @@ } } }, - "node_modules/@expo/metro-config/node_modules/@expo/config": { - "version": "56.0.9", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-56.0.9.tgz", - "integrity": "sha512-/lqFeWGSrhpKJVP8tTN8LjuoIe8u8q2w7FzBL0C+wHgl+WM8l1qUIEYWy/sMvsG/NbpUIUsDHJRhQvOkU58eIw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@expo/config-plugins": "~56.0.8", - "@expo/config-types": "^56.0.5", - "@expo/json-file": "^10.2.0", - "@expo/require-utils": "^56.1.3", - "deepmerge": "^4.3.1", - "getenv": "^2.0.0", - "glob": "^13.0.0", - "resolve-workspace-root": "^2.0.0", - "semver": "^7.6.0", - "slugify": "^1.3.4" - } - }, - "node_modules/@expo/metro-config/node_modules/@expo/config-plugins": { - "version": "56.0.8", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-56.0.8.tgz", - "integrity": "sha512-phTuyBhgVLfqUHMjQkAfRtbyoY6yTxoKja1awtpVnEkoJDxPJuXx1KX5uvq1eZtt4bJQ08OBJ6P95INqRSHpRg==", + "node_modules/@expo/metro-runtime": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-6.1.2.tgz", + "integrity": "sha512-nvM+Qv45QH7pmYvP8JB1G8JpScrWND3KrMA6ZKe62cwwNiX/BjHU28Ear0v/4bQWXlOY0mv6B8CDIm8JxXde9g==", "license": "MIT", - "peer": true, "dependencies": { - "@expo/config-types": "^56.0.5", - "@expo/json-file": "~10.2.0", - "@expo/plist": "^0.7.0", - "@expo/require-utils": "^56.1.3", - "@expo/sdk-runtime-versions": "^1.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.5", - "getenv": "^2.0.0", - "glob": "^13.0.0", - "semver": "^7.5.4", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" + "anser": "^1.4.9", + "pretty-format": "^29.7.0", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0" + }, + "peerDependencies": { + "expo": "*", + "react": "*", + "react-dom": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, - "node_modules/@expo/metro-config/node_modules/@expo/config-types": { - "version": "56.0.5", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-56.0.5.tgz", - "integrity": "sha512-GsAHO/MwW9ZRdgnmyfRXqVGLCP/zejD6rWnp5OROp8mBGRObKm4HfrjlUyT1skjMwCj1OrURx9ZfIc6yeBAkIA==", - "license": "MIT", - "peer": true - }, - "node_modules/@expo/metro-config/node_modules/@expo/env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.3.0.tgz", - "integrity": "sha512-9HnnIbzwTTdbwSjNLXTk0fPm9ZwMJ7c1/31tsni8HZ8Q62KzYCyspahH+V365vg5J6lr001DzNwBxVWSaYCQLg==", + "node_modules/@expo/osascript": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.6.0.tgz", + "integrity": "sha512-QvqDBlJXa8CS2vRORJ4wEflY1m0vVI07uSJdIRgBrLxRPBcsrXxrtU7+wXRXMqfq9zLwNP9XbvRsXF2omoDylg==", "license": "MIT", - "peer": true, "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "getenv": "^2.0.0" + "@expo/spawn-async": "^1.8.0" }, "engines": { - "node": ">=20.12.0" + "node": ">=12" } }, - "node_modules/@expo/metro-config/node_modules/@expo/metro": { - "version": "56.0.0", - "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-56.0.0.tgz", - "integrity": "sha512-5gIgQHtEpjjvsjKfVtIv23a98LLRV0/y07PDShEwYSytAMlE3FSF8RHXqtHc1sUJL6dn7hnuIBpIbrLXXuVi0A==", + "node_modules/@expo/package-manager": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.12.0.tgz", + "integrity": "sha512-SWr6093nwBjn94cvElsYZNUnhvs+XtUatUz3h0vAn0IbaWG0B6l/V5ZfOBptX/xq6rMpFG5ibIf/eckLSXw8Gg==", "license": "MIT", - "peer": true, "dependencies": { - "metro": "0.84.4", - "metro-babel-transformer": "0.84.4", - "metro-cache": "0.84.4", - "metro-cache-key": "0.84.4", - "metro-config": "0.84.4", - "metro-core": "0.84.4", - "metro-file-map": "0.84.4", - "metro-minify-terser": "0.84.4", - "metro-resolver": "0.84.4", - "metro-runtime": "0.84.4", - "metro-source-map": "0.84.4", - "metro-symbolicate": "0.84.4", - "metro-transform-plugins": "0.84.4", - "metro-transform-worker": "0.84.4" + "@expo/json-file": "^10.2.0", + "@expo/spawn-async": "^1.8.0", + "chalk": "^4.0.0", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "resolve-workspace-root": "^2.0.0" } }, - "node_modules/@expo/metro-config/node_modules/@expo/plist": { + "node_modules/@expo/plist": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.7.0.tgz", "integrity": "sha512-vrpryU1GoqSIRNqRB2D3IjXDmzNYfiQpEF6AH/xknlD7eiYmEDt3mb26V7cLcedcPG8PY/1xWHdBXVQJfEAh6Q==", @@ -2186,1309 +2159,892 @@ "xmlbuilder": "^15.1.1" } }, - "node_modules/@expo/metro-config/node_modules/@expo/require-utils": { - "version": "56.1.3", - "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-56.1.3.tgz", - "integrity": "sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ==", + "node_modules/@expo/prebuild-config": { + "version": "54.0.8", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz", + "integrity": "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.20.0", - "@babel/core": "^7.25.2", - "@babel/plugin-transform-modules-commonjs": "^7.24.8" + "@expo/config": "~12.0.13", + "@expo/config-plugins": "~54.0.4", + "@expo/config-types": "^54.0.10", + "@expo/image-utils": "^0.8.8", + "@expo/json-file": "^10.0.8", + "@react-native/normalize-colors": "0.81.5", + "debug": "^4.3.1", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" }, "peerDependencies": { - "typescript": "^5.0.0 || ^5.0.0-0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "expo": "*" } }, - "node_modules/@expo/metro-config/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "node_modules/@expo/prebuild-config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", - "peer": true, "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" + "@babel/highlight": "^7.10.4" } }, - "node_modules/@expo/metro-config/node_modules/hermes-estree": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz", - "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==", + "node_modules/@expo/prebuild-config/node_modules/@expo/config": { + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", - "peer": true + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~54.0.4", + "@expo/config-types": "^54.0.10", + "@expo/json-file": "^10.0.8", + "deepmerge": "^4.3.1", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "resolve-workspace-root": "^2.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "~3.35.1" + } }, - "node_modules/@expo/metro-config/node_modules/hermes-parser": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz", - "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==", + "node_modules/@expo/prebuild-config/node_modules/@expo/config-plugins": { + "version": "54.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz", + "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==", "license": "MIT", - "peer": true, "dependencies": { - "hermes-estree": "0.33.3" + "@expo/config-types": "^54.0.10", + "@expo/json-file": "~10.0.8", + "@expo/plist": "^0.4.8", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.5", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" } }, - "node_modules/@expo/metro-config/node_modules/metro": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.84.4.tgz", - "integrity": "sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA==", + "node_modules/@expo/prebuild-config/node_modules/@expo/config-types": { + "version": "54.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz", + "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==", + "license": "MIT" + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/json-file": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.16.tgz", + "integrity": "sha512-fcVkWEj+hLuP2yt5W0aw6LmDRqSPWDLUSxOMcmFeV+algmIF59sQVKCwB9btjQLd4V6x9N0pISkQEkBubUHrCw==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "accepts": "^2.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.35.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.84.4", - "metro-cache": "0.84.4", - "metro-cache-key": "0.84.4", - "metro-config": "0.84.4", - "metro-core": "0.84.4", - "metro-file-map": "0.84.4", - "metro-resolver": "0.84.4", - "metro-runtime": "0.84.4", - "metro-source-map": "0.84.4", - "metro-symbolicate": "0.84.4", - "metro-transform-plugins": "0.84.4", - "metro-transform-worker": "0.84.4", - "mime-types": "^3.0.1", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.3" + } + }, + "node_modules/@expo/prebuild-config/node_modules/@expo/plist": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.9.tgz", + "integrity": "sha512-MPVpmKGfnQEnrCzgxuXcmPP/y/t6AVm+DcSb2Myp21LKWv1N3l8uFxMggesfF4ixAxkRlGmMMx9GyDC9M+XklQ==", + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.2.3", + "xmlbuilder": "^15.1.1" + } + }, + "node_modules/@expo/prebuild-config/node_modules/semver": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "license": "ISC", "bin": { - "metro": "src/cli.js" + "semver": "bin/semver.js" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=10" } }, - "node_modules/@expo/metro-config/node_modules/metro-babel-transformer": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.84.4.tgz", - "integrity": "sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==", + "node_modules/@expo/require-utils": { + "version": "56.1.3", + "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-56.1.3.tgz", + "integrity": "sha512-KyLeOn/zzQSvuPpV5YhB/FPKnpQytno4luN918bGdPDssLBoS3N/0UbC3W0rJAn9kSFu+XpfR81eABRVsSdfgQ==", "license": "MIT", "peer": true, "dependencies": { + "@babel/code-frame": "^7.20.0", "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.35.0", - "metro-cache-key": "0.84.4", - "nullthrows": "^1.1.1" + "@babel/plugin-transform-modules-commonjs": "^7.24.8" }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "peerDependencies": { + "typescript": "^5.0.0 || ^5.0.0-0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@expo/metro-config/node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", - "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", - "license": "MIT", - "peer": true + "node_modules/@expo/schema-utils": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-0.1.8.tgz", + "integrity": "sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==", + "license": "MIT" }, - "node_modules/@expo/metro-config/node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", - "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", - "license": "MIT", - "peer": true, - "dependencies": { - "hermes-estree": "0.35.0" - } + "node_modules/@expo/sdk-runtime-versions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "license": "MIT" }, - "node_modules/@expo/metro-config/node_modules/metro-cache": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.84.4.tgz", - "integrity": "sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg==", + "node_modules/@expo/spawn-async": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.8.0.tgz", + "integrity": "sha512-eb9xxd/LbuEGSdua4NumCu/McVB9EM+F/JxB9pWgnERw4HQ9XyTNH1KapG6oqLWR8TuRK2LQfzJlmNi94CVobw==", "license": "MIT", - "peer": true, "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.84.4" + "cross-spawn": "^7.0.6" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=12" } }, - "node_modules/@expo/metro-config/node_modules/metro-cache-key": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.84.4.tgz", - "integrity": "sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw==", + "node_modules/@expo/sudo-prompt": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz", + "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==", + "license": "MIT" + }, + "node_modules/@expo/vector-icons": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.1.1.tgz", + "integrity": "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw==", "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "peerDependencies": { + "expo-font": ">=14.0.4", + "react": "*", + "react-native": "*" } }, - "node_modules/@expo/metro-config/node_modules/metro-config": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.84.4.tgz", - "integrity": "sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q==", - "license": "MIT", - "peer": true, + "node_modules/@expo/ws-tunnel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz", + "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==", + "license": "MIT" + }, + "node_modules/@expo/xcpretty": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.4.tgz", + "integrity": "sha512-4aQzz9vgxcNXFfo/iyNgDDYfsU5XGKKxWxZopw0cVotHiW+U8IJbIxMaxsINs6bHhtkG3StKNPcOrn3eBuxKPw==", + "license": "BSD-3-Clause", "dependencies": { - "connect": "^3.6.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.7.0", - "metro": "0.84.4", - "metro-cache": "0.84.4", - "metro-core": "0.84.4", - "metro-runtime": "0.84.4", - "yaml": "^2.6.1" + "@babel/code-frame": "^7.20.0", + "chalk": "^4.1.0", + "js-yaml": "^4.1.0" }, - "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "bin": { + "excpretty": "build/cli.js" } }, - "node_modules/@expo/metro-config/node_modules/metro-core": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.84.4.tgz", - "integrity": "sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ==", - "license": "MIT", - "peer": true, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.84.4" + "@humanfs/types": "^0.15.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=18.18.0" } }, - "node_modules/@expo/metro-config/node_modules/metro-file-map": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.84.4.tgz", - "integrity": "sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ==", - "license": "MIT", - "peer": true, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=18.18.0" } }, - "node_modules/@expo/metro-config/node_modules/metro-minify-terser": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.84.4.tgz", - "integrity": "sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=18.18.0" } }, - "node_modules/@expo/metro-config/node_modules/metro-resolver": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.84.4.tgz", - "integrity": "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A==", - "license": "MIT", - "peer": true, - "dependencies": { - "flow-enums-runtime": "^0.0.6" + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@expo/metro-config/node_modules/metro-runtime": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.84.4.tgz", - "integrity": "sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q==", - "license": "MIT", - "peer": true, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" + "minipass": "^7.0.4" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=18.0.0" } }, - "node_modules/@expo/metro-config/node_modules/metro-source-map": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.84.4.tgz", - "integrity": "sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.84.4", - "nullthrows": "^1.1.1", - "ob1": "0.84.4", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=12" } }, - "node_modules/@expo/metro-config/node_modules/metro-symbolicate": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.84.4.tgz", - "integrity": "sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA==", - "license": "MIT", - "peer": true, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.84.4", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/metro-transform-plugins": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.84.4.tgz", - "integrity": "sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" - }, + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=6" } }, - "node_modules/@expo/metro-config/node_modules/metro-transform-worker": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.84.4.tgz", - "integrity": "sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "flow-enums-runtime": "^0.0.6", - "metro": "0.84.4", - "metro-babel-transformer": "0.84.4", - "metro-cache": "0.84.4", - "metro-cache-key": "0.84.4", - "metro-minify-terser": "0.84.4", - "metro-source-map": "0.84.4", - "metro-transform-plugins": "0.84.4", - "nullthrows": "^1.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/metro/node_modules/hermes-estree": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", - "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", - "license": "MIT", - "peer": true - }, - "node_modules/@expo/metro-config/node_modules/metro/node_modules/hermes-parser": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", - "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "license": "MIT", - "peer": true, "dependencies": { - "hermes-estree": "0.35.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@expo/metro-config/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "license": "MIT", - "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", - "peer": true, "dependencies": { - "mime-db": "^1.54.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=18" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/@expo/metro-config/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.6" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/metro-config/node_modules/ob1": { - "version": "0.84.4", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.84.4.tgz", - "integrity": "sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "license": "MIT", - "peer": true, "dependencies": { - "flow-enums-runtime": "^0.0.6" + "p-limit": "^2.2.0" }, "engines": { - "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "license": "MIT", - "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/metro-runtime": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-6.1.2.tgz", - "integrity": "sha512-nvM+Qv45QH7pmYvP8JB1G8JpScrWND3KrMA6ZKe62cwwNiX/BjHU28Ear0v/4bQWXlOY0mv6B8CDIm8JxXde9g==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "license": "MIT", "dependencies": { - "anser": "^1.4.9", - "pretty-format": "^29.7.0", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0" - }, - "peerDependencies": { - "expo": "*", - "react": "*", - "react-dom": "*", - "react-native": "*" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/osascript": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.6.0.tgz", - "integrity": "sha512-QvqDBlJXa8CS2vRORJ4wEflY1m0vVI07uSJdIRgBrLxRPBcsrXxrtU7+wXRXMqfq9zLwNP9XbvRsXF2omoDylg==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "license": "MIT", "dependencies": { - "@expo/spawn-async": "^1.8.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/package-manager": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.12.0.tgz", - "integrity": "sha512-SWr6093nwBjn94cvElsYZNUnhvs+XtUatUz3h0vAn0IbaWG0B6l/V5ZfOBptX/xq6rMpFG5ibIf/eckLSXw8Gg==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "license": "MIT", "dependencies": { - "@expo/json-file": "^10.2.0", - "@expo/spawn-async": "^1.8.0", - "chalk": "^4.0.0", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "resolve-workspace-root": "^2.0.0" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/plist": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.8.tgz", - "integrity": "sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "license": "MIT", "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.2.3", - "xmlbuilder": "^15.1.1" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/prebuild-config": { - "version": "54.0.8", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-54.0.8.tgz", - "integrity": "sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.13", - "@expo/config-plugins": "~54.0.4", - "@expo/config-types": "^54.0.10", - "@expo/image-utils": "^0.8.8", - "@expo/json-file": "^10.0.8", - "@react-native/normalize-colors": "0.81.5", - "debug": "^4.3.1", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "xml2js": "0.6.0" - }, - "peerDependencies": { - "expo": "*" - } - }, - "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", - "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/require-utils": { - "version": "55.0.5", - "resolved": "https://registry.npmjs.org/@expo/require-utils/-/require-utils-55.0.5.tgz", - "integrity": "sha512-U4K/CQ2VpXuwfNGsN+daKmYOt15hCP8v/pXaYH6eut7kdYZo6SfJ1yr67BIcJ+1Gzzs+QzTxswAZChKpXmceyw==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.20.0", - "@babel/core": "^7.25.2", - "@babel/plugin-transform-modules-commonjs": "^7.24.8" - }, - "peerDependencies": { - "typescript": "^5.0.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@expo/schema-utils": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-0.1.8.tgz", - "integrity": "sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==", - "license": "MIT" - }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "license": "MIT" - }, - "node_modules/@expo/spawn-async": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.8.0.tgz", - "integrity": "sha512-eb9xxd/LbuEGSdua4NumCu/McVB9EM+F/JxB9pWgnERw4HQ9XyTNH1KapG6oqLWR8TuRK2LQfzJlmNi94CVobw==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6" - }, - "engines": { - "node": ">=12" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@expo/sudo-prompt": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz", - "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==", - "license": "MIT" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@expo/vector-icons": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.1.1.tgz", - "integrity": "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", - "peerDependencies": { - "expo-font": ">=14.0.4", - "react": "*", - "react-native": "*" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@expo/ws-tunnel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz", - "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, - "node_modules/@expo/xcpretty": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.4.4.tgz", - "integrity": "sha512-4aQzz9vgxcNXFfo/iyNgDDYfsU5XGKKxWxZopw0cVotHiW+U8IJbIxMaxsINs6bHhtkG3StKNPcOrn3eBuxKPw==", - "license": "BSD-3-Clause", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.20.0", - "chalk": "^4.1.0", - "js-yaml": "^4.1.0" - }, - "bin": { - "excpretty": "build/cli.js" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/types": "^0.15.0" - }, - "engines": { - "node": ">=18.18.0" - } + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", + "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", + "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", + "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", + "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", + "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", + "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" + "url": "https://github.com/sponsors/Brooooooklyn" }, - "engines": { - "node": ">=18.0.0" + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "license": "ISC", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=12.4.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@radix-ui/react-slot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz", + "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@radix-ui/react-compose-refs": "1.1.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3" + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@radix-ui/react-use-callback-ref": "1.1.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@react-native-async-storage/async-storage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.2.0.tgz", + "integrity": "sha512-gvRvjR5JAaUZF8tv2Kcq/Gbt3JHwbKFYfmb445rhOj6NUMx3qPLixmDx5pZAyb9at1bYvJ4/eTUipU5aki45xw==", "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "merge-options": "^3.0.4" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.65 <1.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@react-native-community/slider": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@react-native-community/slider/-/slider-5.0.1.tgz", + "integrity": "sha512-K3JRWkIW4wQ79YJ6+BPZzp1SamoikxfPRw7Yw4B4PElEQmqZFrmH9M5LxvIo460/3QSrZF/wCgi3qizJt7g/iw==", + "license": "MIT" + }, + "node_modules/@react-native/assets-registry": { + "version": "0.81.5", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.81.5.tgz", + "integrity": "sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==", "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 20.19.4" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.81.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.81.5.tgz", + "integrity": "sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@babel/traverse": "^7.25.3", + "@react-native/codegen": "0.81.5" + }, + "engines": { + "node": ">= 20.19.4" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", - "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", - "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", - "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", - "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", - "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", - "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", - "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz", - "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@react-native-async-storage/async-storage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-2.2.0.tgz", - "integrity": "sha512-gvRvjR5JAaUZF8tv2Kcq/Gbt3JHwbKFYfmb445rhOj6NUMx3qPLixmDx5pZAyb9at1bYvJ4/eTUipU5aki45xw==", - "license": "MIT", - "dependencies": { - "merge-options": "^3.0.4" - }, - "peerDependencies": { - "react-native": "^0.0.0-0 || >=0.65 <1.0" - } - }, - "node_modules/@react-native/assets-registry": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.81.5.tgz", - "integrity": "sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==", - "license": "MIT", - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.81.5.tgz", - "integrity": "sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.5" - }, - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/babel-preset": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.81.5.tgz", - "integrity": "sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==", + "node_modules/@react-native/babel-preset": { + "version": "0.81.5", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.81.5.tgz", + "integrity": "sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -3579,56 +3135,351 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, - "engines": { - "node": "*" + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@react-native/codegen/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT" + }, + "node_modules/@react-native/codegen/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.29.1" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.81.5", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.5.tgz", + "integrity": "sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw==", + "license": "MIT", + "dependencies": { + "@react-native/dev-middleware": "0.81.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.83.1", + "metro-config": "^0.83.1", + "metro-core": "^0.83.1", + "semver": "^7.1.3" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/hermes-estree": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", + "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "license": "MIT" + }, + "node_modules/@react-native/community-cli-plugin/node_modules/hermes-parser": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", + "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.35.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.7.tgz", + "integrity": "sha512-SPaPEyvTsTmd0LpT7RaZciQyDw2i/JB7+iY9L5VfBo72+psescFxBqpI1TL9dnL+pmnfkU+l/J1mEEGLeF65EQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "accepts": "^2.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.35.0", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.83.7", + "metro-cache": "0.83.7", + "metro-cache-key": "0.83.7", + "metro-config": "0.83.7", + "metro-core": "0.83.7", + "metro-file-map": "0.83.7", + "metro-resolver": "0.83.7", + "metro-runtime": "0.83.7", + "metro-source-map": "0.83.7", + "metro-symbolicate": "0.83.7", + "metro-transform-plugins": "0.83.7", + "metro-transform-worker": "0.83.7", + "mime-types": "^3.0.1", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-babel-transformer": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.7.tgz", + "integrity": "sha512-sBqBkt6kNut/88bv+Ucvm4yqdPetbvAEsHzi3MAgJEifOSYYzX5Z5Kgw3TFOrwf/mHJTOBG2ONlaMHoyfP15TA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.35.0", + "metro-cache-key": "0.83.7", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.7.tgz", + "integrity": "sha512-E9SRePXQ1Zvlj79VcOk57q7VC7rMHMFQ+jhmPHBiq+dJ0bJB5BL87lWZF6oh5X76Cci5tpDuQNaDwwuSCToEeg==", + "license": "MIT", + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.83.7" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-cache-key": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.7.tgz", + "integrity": "sha512-W1c2Nmx8MiJTJt+eWhMO08z9VKi3kZOaz99IYGdqeqDgY9j+yZjXl62rUav4Di0heZfh4/n2s722PqRL1OODeg==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-config": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.7.tgz", + "integrity": "sha512-83mjWFbFOt2GeJ6pFIum5mSnc1uTsZJAtD8o4ej0s4NVsYsA7fB+pHvTfHhFrpeMONaobu2riKavkPei05Er/Q==", + "license": "MIT", + "dependencies": { + "connect": "^3.6.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.83.7", + "metro-cache": "0.83.7", + "metro-core": "0.83.7", + "metro-runtime": "0.83.7", + "yaml": "^2.6.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-core": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.7.tgz", + "integrity": "sha512-6yn3w1wnltT6RQl7p7YES2l95ArC+mWrOssEiH8p5/DDrJS65/szf9LsC9JrBv8c5DdvSY3V3f0GRYg0Ox7hCg==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.83.7" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-file-map": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.7.tgz", + "integrity": "sha512-+j0F1m+FQYVAQ6syf+mwhIPV5GoFQrkInX8bppuc50IzNsZbMrp8R5H/Sx/K2daQ3YEa9F/XwkeZT8gzJfgeCw==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-minify-terser": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.7.tgz", + "integrity": "sha512-MfJar2IS4tBRuLb9svwb0Gu5l9BsH+pcRm8eGcEi/wy8MzZinfinh5dFLt2nWkocnulIgtGB5NkFDdbXqMXKhQ==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-resolver": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.7.tgz", + "integrity": "sha512-WSJIENlMcoSsuz66IfBHOkgfp3KJt2UW2TnEHPf1b8pIG2eEXNOVmo2+03A0H17WY2XGXWgxL0CG7FAopqgB1A==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-runtime": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.7.tgz", + "integrity": "sha512-9GKkJURaB2iyYoEExKnedzAHzxmKtSi+k0tsZUvMoU27tBZJElchYt7JH/Ai/XzYAI9lCAaV7u5HZSI8J5Z+wQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-source-map": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.7.tgz", + "integrity": "sha512-JgA1h7oc1a1jydBe1GhVFsUoMYo3wLPk7oRA32rjlDsq+sP2JLt9x2p2lWbNSxTm/u8NV4VRid3hvEJgcX8tKw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.7", + "nullthrows": "^1.1.1", + "ob1": "0.83.7", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/metro-symbolicate": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.7.tgz", + "integrity": "sha512-g4suyxw20WOHWI680c+Kq4wC/NF+Hx5pRH9afrMp+sMTxqLeKcPR1Xf4wMhsjlbvx7LbIREdke6q928jEjvJWw==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.7", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=20.19.4" } }, - "node_modules/@react-native/codegen/node_modules/hermes-estree": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", - "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", - "license": "MIT" - }, - "node_modules/@react-native/codegen/node_modules/hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", - "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-plugins": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.7.tgz", + "integrity": "sha512-Ss0FpBiZDjX2kwhukMDl5sNdYK8T/06IPqxNE4H6PTlRlfs9q11cef13c/xESY/Pm4VCkp1yJUZO3kXzvMxQFA==", "license": "MIT", "dependencies": { - "hermes-estree": "0.29.1" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.81.5", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.5.tgz", - "integrity": "sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw==", + "node_modules/@react-native/community-cli-plugin/node_modules/metro-transform-worker": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.7.tgz", + "integrity": "sha512-UegCo7ygB2fT64mRK2nbAjQVJ1zSwIIHy8d96jJv2nKZFDaViYBiughEdu5HM/Ceq0WN3LZrZk3zhl9aoiLYFw==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.81.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.83.1", - "metro-config": "^0.83.1", - "metro-core": "^0.83.1", - "semver": "^7.1.3" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "metro": "0.83.7", + "metro-babel-transformer": "0.83.7", + "metro-cache": "0.83.7", + "metro-cache-key": "0.83.7", + "metro-minify-terser": "0.83.7", + "metro-source-map": "0.83.7", + "metro-transform-plugins": "0.83.7", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@react-native-community/cli": "*", - "@react-native/metro-config": "*" + "node": ">=20.19.4" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ob1": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.7.tgz", + "integrity": "sha512-9M5kpuOLyTPogMtZiQUIxdAZxl7Dxs6tVBbJErSumsqGMuhVSoUbkfeZ3XNPpLpwBBtqY5QDUzGwggLHX3slQg==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" }, - "peerDependenciesMeta": { - "@react-native-community/cli": { - "optional": true - }, - "@react-native/metro-config": { - "optional": true - } + "engines": { + "node": ">=20.19.4" } }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { @@ -3812,6 +3663,54 @@ "nanoid": "^3.3.11" } }, + "node_modules/@react-three/fiber": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.6.1.tgz", + "integrity": "sha512-zF0rsKcVYpcJwbFEnv2HkHX9cvOEgsfQo/X8lwmR2dn13S4qEQJXir9fxf5js2LQFoXqxOY7MDkOkYx2uZ4gSg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^2.0.0", + "react-use-measure": "^2.1.7", + "scheduler": "^0.27.0", + "suspend-react": "^0.1.3", + "use-sync-external-store": "^1.4.0", + "zustand": "^5.0.3" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": ">=19 <19.3", + "react-dom": ">=19 <19.3", + "react-native": ">=0.78", + "three": ">=0.156" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-asset": { + "optional": true + }, + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -4260,18 +4159,52 @@ "version": "19.1.17", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.17.tgz", "integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==", - "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" } }, + "node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "license": "MIT" }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.160.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.160.0.tgz", + "integrity": "sha512-jWlbUBovicUKaOYxzgkLlhkiEQJkhCVvg4W2IYD2trqD2om3VK4DGLpHH5zQHNr7RweZK/5re/4IVhbhvxbV9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/stats.js": "*", + "@types/webxr": "*", + "fflate": "~0.6.10", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT" + }, "node_modules/@types/yargs": { "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", @@ -4590,64 +4523,218 @@ }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", - "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", + "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", + "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", + "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", + "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", + "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", + "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", + "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", + "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", + "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", + "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", + "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", + "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", "cpu": [ - "arm" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "linux" ] }, - "node_modules/@unrs/resolver-binding-android-arm64": { + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", - "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", + "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "android" + "linux" ] }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", - "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", + "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@unrs/resolver-binding-darwin-x64": { + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", - "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", + "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", "cpu": [ - "x64" + "s390x" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", - "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", + "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", "cpu": [ "x64" ], @@ -4655,15 +4742,15 @@ "license": "MIT", "optional": true, "os": [ - "freebsd" + "linux" ] }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "node_modules/@unrs/resolver-binding-linux-x64-musl": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", - "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", + "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", "cpu": [ - "arm" + "x64" ], "dev": true, "license": "MIT", @@ -4672,24 +4759,43 @@ "linux" ] }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "node_modules/@unrs/resolver-binding-openharmony-arm64": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", - "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", + "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "openharmony" ] }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "node_modules/@unrs/resolver-binding-wasm32-wasi": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", - "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", + "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", + "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", "cpu": [ "arm64" ], @@ -4697,534 +4803,850 @@ "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ] }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", - "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", + "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", "cpu": [ - "arm64" + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", + "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", + "cpu": [ + "x64" ], "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@urql/core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz", + "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==", + "license": "MIT", + "dependencies": { + "@0no-co/graphql.web": "^1.0.13", + "wonka": "^6.3.2" + } + }, + "node_modules/@urql/exchange-retry": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.2.tgz", + "integrity": "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==", + "license": "MIT", + "dependencies": { + "@urql/core": "^5.1.2", + "wonka": "^6.3.2" + }, + "peerDependencies": { + "@urql/core": "^5.0.0" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", - "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/@unrs/resolver-binding-linux-loong64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", - "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", - "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", - "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", - "cpu": [ - "riscv64" - ], + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", - "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", - "cpu": [ - "riscv64" - ], + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", - "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", - "cpu": [ - "s390x" - ], + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "license": "MIT" + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", - "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", - "cpu": [ - "x64" - ], + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", - "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", - "cpu": [ - "x64" - ], + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-openharmony-arm64": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", - "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", - "cpu": [ - "arm64" - ], + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", - "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", - "cpu": [ - "wasm32" - ], + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/core": "1.10.0", - "@emnapi/runtime": "1.10.0", - "@napi-rs/wasm-runtime": "^1.1.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" } }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", - "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", - "cpu": [ - "arm64" - ], + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", - "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", - "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", - "cpu": [ - "x64" - ], + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">= 0.4" + } }, - "node_modules/@urql/core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz", - "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==", + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "license": "MIT", "dependencies": { - "@0no-co/graphql.web": "^1.0.13", - "wonka": "^6.3.2" + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@urql/exchange-retry": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.2.tgz", - "integrity": "sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "license": "MIT", "dependencies": { - "@urql/core": "^5.1.2", - "wonka": "^6.3.2" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@urql/core": "^5.0.0" + "@babel/core": "^7.8.0" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", - "license": "MIT", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=6.5" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", + "semver": "^6.3.1" }, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, - "engines": { - "node": ">=0.4.0" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.8" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/babel-plugin-react-compiler": { + "version": "19.1.0-rc.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-19.1.0-rc.3.tgz", + "integrity": "sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==", "license": "MIT", - "engines": { - "node": ">= 14" + "dependencies": { + "@babel/types": "^7.26.0" } }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, + "node_modules/babel-plugin-react-native-web": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.2.tgz", + "integrity": "sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==", + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.29.1.tgz", + "integrity": "sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "hermes-parser": "0.29.1" } }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", "license": "MIT" }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "hermes-estree": "0.29.1" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", + "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { - "node": ">= 8" + "node": ">=6.0.0" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "license": "MIT", "dependencies": { - "tslib": "^2.0.0" + "open": "^8.0.4" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, + "node_modules/better-opn/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", + "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", + "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 5.10.0" } }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "license": "MIT" - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, + "node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, - "engines": { - "node": ">= 0.4" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -5233,37 +5655,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, - "node_modules/arraybuffer.prototype.slice": { + "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -5272,2506 +5686,2650 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "node_modules/caniuse-lite": { + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", - "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-define-polyfill-provider": "^0.6.8", - "semver": "^6.3.1" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", - "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", - "license": "MIT", + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.8" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" } }, - "node_modules/babel-plugin-react-compiler": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", - "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", - "license": "MIT", + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.26.0" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" } }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.21.2.tgz", - "integrity": "sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==", + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "license": "MIT" }, - "node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.29.1.tgz", - "integrity": "sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==", + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "license": "MIT", "dependencies": { - "hermes-parser": "0.29.1" + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", - "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, - "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", - "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", - "license": "MIT", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { - "hermes-estree": "0.29.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" + "engines": { + "node": ">=0.8" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "license": "MIT", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" + "engines": { + "node": ">=12.5.0" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=7.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.32", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", - "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, + "node_modules/colorjs.io": { + "version": "0.6.0-alpha.1", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.6.0-alpha.1.tgz", + "integrity": "sha512-c/h/8uAmPydQcriRdX8UTAFHj6SpSHFHBA8LvMikvYWAVApPTwg/pyOXNsGmaCBd6L/EeDlRHSNhTtnIFp/qsg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/color" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 10" } }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "node_modules/comment-json": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.6.2.tgz", + "integrity": "sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==", "license": "MIT", "dependencies": { - "open": "^8.0.4" + "array-timsort": "^1.0.3", + "esprima": "^4.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">= 6" } }, - "node_modules/better-opn/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "license": "Unlicense", + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, "engines": { - "node": ">=0.6" + "node": ">= 0.8.0" } }, - "node_modules/bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "stream-buffers": "2.2.x" + "ms": "2.0.0" } }, - "node_modules/bplist-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", - "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "license": "MIT", "dependencies": { - "big-integer": "1.6.x" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">= 5.10.0" + "node": ">= 0.10.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "ms": "2.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "browserslist": "^4.28.1" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node-fetch": "^2.7.0" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { - "node-int64": "^0.4.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/css-in-js-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "hyphenate-style-name": "^1.0.3" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-bind": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", - "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "get-intrinsic": "^1.3.0", - "set-function-length": "^1.2.2" + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001793", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", - "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "license": "Apache-2.0", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", - "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ci-info": { + "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "license": "MIT", + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "engines": { - "node": ">=0.8" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "license": "BSD-2-Clause", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "dotenv": "^16.4.5" }, "engines": { - "node": ">=12.5.0" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "node_modules/electron-to-chromium": { + "version": "1.5.364", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz", + "integrity": "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==", + "license": "ISC" }, - "node_modules/colorjs.io": { - "version": "0.6.0-alpha.1", - "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.6.0-alpha.1.tgz", - "integrity": "sha512-c/h/8uAmPydQcriRdX8UTAFHj6SpSHFHBA8LvMikvYWAVApPTwg/pyOXNsGmaCBd6L/EeDlRHSNhTtnIFp/qsg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/color" - } + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 0.8" } }, - "node_modules/comment-json": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.6.2.tgz", - "integrity": "sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==", + "node_modules/enhanced-resolve": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz", + "integrity": "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==", + "dev": true, "license": "MIT", "dependencies": { - "array-timsort": "^1.0.3", - "esprima": "^4.0.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "stackframe": "^1.3.4" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/es-iterator-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.4" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", - "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.28.1" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">= 0.4" } }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, "license": "MIT", "dependencies": { - "node-fetch": "^2.7.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/css-in-js-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", - "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", - "dependencies": { - "hyphenate-style-name": "^1.0.3" + "engines": { + "node": ">=6" } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "devOptional": true, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "node_modules/eslint-config-expo": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-expo/-/eslint-config-expo-10.0.0.tgz", + "integrity": "sha512-/XC/DvniUWTzU7Ypb/cLDhDD4DXqEio4lug1ObD/oQ9Hcx3OVOR8Mkp4u6U4iGoZSJyIQmIk3WVHe/P1NYUXKw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-expo": "^1.0.0", + "eslint-plugin-import": "^2.30.0", + "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react-hooks": "^5.1.0", + "globals": "^16.0.0" }, + "peerDependencies": { + "eslint": ">=8.10" + } + }, + "node_modules/eslint-config-expo/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/inspect-js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/eslint-module-utils": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.13.0.tgz", + "integrity": "sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "debug": "^3.2.7" }, "engines": { - "node": ">=6.0" + "node": ">=4" }, "peerDependenciesMeta": { - "supports-color": { + "eslint": { "optional": true } } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/eslint-plugin-expo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-expo/-/eslint-plugin-expo-1.0.3.tgz", + "integrity": "sha512-C1v9NPvpDET36+7Klpp/+53Jl+VzOfpbDxpKtL/pAPhCDwTX0kW6Swo425PT0uc4AMT5jpQbB7hSKFjKOGMl4A==", + "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "^8.29.1", + "@typescript-eslint/utils": "^8.29.1", + "eslint": "^9.24.0" + }, "engines": { - "node": ">=4.0.0" + "node": ">=18.0.0" + }, + "peerDependencies": { + "eslint": ">=8.10" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ms": "^2.1.1" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "url": "https://opencollective.com/eslint" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "dependencies": { - "esutils": "^2.0.2" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "funding": { - "url": "https://dotenvx.com" + "engines": { + "node": ">=4" } }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "license": "BSD-2-Clause", + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "dotenv": "^16.4.5" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">=0.10" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=4.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "node_modules/electron-to-chromium": { - "version": "1.5.361", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.361.tgz", - "integrity": "sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==", - "license": "ISC" + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/enhanced-resolve": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.0.tgz", - "integrity": "sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==", - "dev": true, + "node_modules/expo": { + "version": "54.0.35", + "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.35.tgz", + "integrity": "sha512-E+tXpQwjGm5fK/uwa55p0Xx/kuo5dXDKfVJ95IargTNa5KiFt26lSTXXa9KnHbI4EDLwFD38/xTKZvzPTlGTdg==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" + "@babel/runtime": "^7.20.0", + "@expo/cli": "54.0.25", + "@expo/config": "~12.0.13", + "@expo/config-plugins": "~54.0.4", + "@expo/devtools": "0.1.8", + "@expo/fingerprint": "0.15.5", + "@expo/metro": "~54.2.0", + "@expo/metro-config": "54.0.16", + "@expo/vector-icons": "^15.0.3", + "@ungap/structured-clone": "^1.3.0", + "babel-preset-expo": "~54.0.11", + "expo-asset": "~12.0.13", + "expo-constants": "~18.0.13", + "expo-file-system": "~19.0.23", + "expo-font": "~14.0.12", + "expo-keep-awake": "~15.0.8", + "expo-modules-autolinking": "3.0.26", + "expo-modules-core": "3.0.30", + "pretty-format": "^29.7.0", + "react-refresh": "^0.14.2", + "whatwg-url-without-unicode": "8.0.0-3" }, - "engines": { - "node": ">=10.13.0" + "bin": { + "expo": "bin/cli", + "expo-modules-autolinking": "bin/autolinking", + "fingerprint": "bin/fingerprint" + }, + "peerDependencies": { + "@expo/dom-webview": "*", + "@expo/metro-runtime": "*", + "react": "*", + "react-native": "*", + "react-native-webview": "*" + }, + "peerDependenciesMeta": { + "@expo/dom-webview": { + "optional": true + }, + "@expo/metro-runtime": { + "optional": true + }, + "react-native-webview": { + "optional": true + } } }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "node_modules/expo-asset": { + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.13.tgz", + "integrity": "sha512-x/p7WvQUnkn6K43b9eL6SPeq5Vnf1E8BDe9bDrWrvMqzyUvJnUFvl+ctg3034s/+UHe7Ne2pAmc0+yzbl8CrDQ==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@expo/image-utils": "^0.8.8", + "expo-constants": "~18.0.13" + }, + "peerDependencies": { + "expo": "*", + "react": "*", + "react-native": "*" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/expo-constants": { + "version": "18.0.13", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.13.tgz", + "integrity": "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==", "license": "MIT", "dependencies": { - "stackframe": "^1.3.4" + "@expo/config": "~12.0.13", + "@expo/env": "~2.0.8" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*" } }, - "node_modules/es-abstract": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", - "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", - "dev": true, + "node_modules/expo-constants/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/highlight": "^7.10.4" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, + "node_modules/expo-constants/node_modules/@expo/config": { + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~54.0.4", + "@expo/config-types": "^54.0.10", + "@expo/json-file": "^10.0.8", + "deepmerge": "^4.3.1", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "resolve-workspace-root": "^2.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "~3.35.1" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/expo-constants/node_modules/@expo/config-plugins": { + "version": "54.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz", + "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@expo/config-types": "^54.0.10", + "@expo/json-file": "~10.0.8", + "@expo/plist": "^0.4.8", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.5", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" } }, - "node_modules/es-iterator-helpers": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", - "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", - "dev": true, + "node_modules/expo-constants/node_modules/@expo/config-types": { + "version": "54.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz", + "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==", + "license": "MIT" + }, + "node_modules/expo-constants/node_modules/@expo/env": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.11.tgz", + "integrity": "sha512-xV+ps6YCW7XIPVUwFVCRN2nox09dnRwy8uIjwHWTODu0zFw4kp4omnVkl0OOjuu2XOe7tdgAHxikrkJt9xB/7Q==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.1.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.3.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.5", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^2.0.0" } }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "dev": true, + "node_modules/expo-constants/node_modules/@expo/json-file": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.16.tgz", + "integrity": "sha512-fcVkWEj+hLuP2yt5W0aw6LmDRqSPWDLUSxOMcmFeV+algmIF59sQVKCwB9btjQLd4V6x9N0pISkQEkBubUHrCw==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.3" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, + "node_modules/expo-constants/node_modules/@expo/plist": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.9.tgz", + "integrity": "sha512-MPVpmKGfnQEnrCzgxuXcmPP/y/t6AVm+DcSb2Myp21LKWv1N3l8uFxMggesfF4ixAxkRlGmMMx9GyDC9M+XklQ==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.2.3", + "xmlbuilder": "^15.1.1" + } + }, + "node_modules/expo-constants/node_modules/semver": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, + "node_modules/expo-font": { + "version": "14.0.12", + "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.12.tgz", + "integrity": "sha512-QQzunE2Mxk45AsCWm3tK7OpVljbtVnKD58q4/qliev+cbye1IOduUnRIdD+P7DyButw17G9MTX795kgaQiz5hQ==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "fontfaceobserver": "^2.1.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "expo": "*", + "react": "*", + "react-native": "*" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, + "node_modules/expo-gl": { + "version": "16.0.10", + "resolved": "https://registry.npmjs.org/expo-gl/-/expo-gl-16.0.10.tgz", + "integrity": "sha512-/pPlSJvfmrGuW+UXBRVADr52nhiHFwRGXB8shhQb+b6KKreCuTmQZUASznAXS6YaHNjkOghmkaUW0hRnyiAwBQ==", "license": "MIT", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "invariant": "^2.2.4" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "expo": "*", + "react": "*", + "react-dom": "*", + "react-native": "*", + "react-native-reanimated": "*", + "react-native-web": "*" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native-reanimated": { + "optional": true + }, + "react-native-web": { + "optional": true + } } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/expo-haptics": { + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-15.0.8.tgz", + "integrity": "sha512-lftutojy8Qs8zaDzzjwM3gKHFZ8bOOEZDCkmh2Ddpe95Ra6kt2izeOfOfKuP/QEh0MZ1j9TfqippyHdRd1ZM9g==", "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "expo": "*" } }, - "node_modules/eslint": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", - "dev": true, + "node_modules/expo-image": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-3.0.11.tgz", + "integrity": "sha512-4TudfUCLgYgENv+f48omnU8tjS2S0Pd9EaON5/s1ZUBRwZ7K8acEr4NfvLPSaeXvxW24iLAiyQ7sV7BXQH3RoA==", "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.2", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.5", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, "peerDependencies": { - "jiti": "*" + "expo": "*", + "react": "*", + "react-native": "*", + "react-native-web": "*" }, "peerDependenciesMeta": { - "jiti": { + "react-native-web": { "optional": true } } }, - "node_modules/eslint-config-expo": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-expo/-/eslint-config-expo-10.0.0.tgz", - "integrity": "sha512-/XC/DvniUWTzU7Ypb/cLDhDD4DXqEio4lug1ObD/oQ9Hcx3OVOR8Mkp4u6U4iGoZSJyIQmIk3WVHe/P1NYUXKw==", - "dev": true, + "node_modules/expo-linking": { + "version": "8.0.12", + "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.12.tgz", + "integrity": "sha512-FpXeIpFgZuxihwT9lBo86YD3y6LphBuAhN680MMxm/Y7fmsc57vimn2d3vFu68VI0+Z9w457t494mu2wvlgWTQ==", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "^8.18.2", - "@typescript-eslint/parser": "^8.18.2", - "eslint-import-resolver-typescript": "^3.6.3", - "eslint-plugin-expo": "^1.0.0", - "eslint-plugin-import": "^2.30.0", - "eslint-plugin-react": "^7.37.3", - "eslint-plugin-react-hooks": "^5.1.0", - "globals": "^16.0.0" + "expo-constants": "~18.0.13", + "invariant": "^2.2.4" }, "peerDependencies": { - "eslint": ">=8.10" - } - }, - "node_modules/eslint-config-expo/node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "react": "*", + "react-native": "*" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", - "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", - "dev": true, + "node_modules/expo-modules-autolinking": { + "version": "3.0.26", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.26.tgz", + "integrity": "sha512-WOaud6UKg16ciCOj8raKcMOoKFMHLXKI29U29yhgu1lf+Y7VxJyCktUcYo6AM+ccZ7zLD1uWZdMtgnpf+95OXA==", "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.16.1", - "resolve": "^2.0.0-next.6" + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/expo-modules-core": { + "version": "3.0.30", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-3.0.30.tgz", + "integrity": "sha512-a6IrpAn/Jbmwxi9L+hMmXKpNqnkUpoF7WHOpn02rVLyax2J0gB1vvCVE5rNydplEnt41Q6WxQwvcOjZaIkcSUg==", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "invariant": "^2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "license": "ISC", + "node_modules/expo-router": { + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.24.tgz", + "integrity": "sha512-KIssKXnwjrdCxPWC8GsMTfKTwng40VrCsO16O9x6fKlfUwBW8itxY9PpCGyQeMJkiEADa+DUhtrDgl+uHg4/DA==", + "license": "MIT", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" + "@expo/metro-runtime": "^6.1.2", + "@expo/schema-utils": "^0.1.8", + "@radix-ui/react-slot": "1.2.0", + "@radix-ui/react-tabs": "^1.1.12", + "@react-navigation/bottom-tabs": "^7.4.0", + "@react-navigation/native": "^7.1.8", + "@react-navigation/native-stack": "^7.3.16", + "client-only": "^0.0.1", + "debug": "^4.3.4", + "escape-string-regexp": "^4.0.0", + "expo-server": "^1.0.7", + "fast-deep-equal": "^3.1.3", + "invariant": "^2.2.4", + "nanoid": "^3.3.8", + "query-string": "^7.1.3", + "react-fast-compare": "^3.2.2", + "react-native-is-edge-to-edge": "^1.1.6", + "semver": "~7.6.3", + "server-only": "^0.0.1", + "sf-symbols-typescript": "^2.1.0", + "shallowequal": "^1.1.0", + "use-latest-callback": "^0.2.1", + "vaul": "^1.1.2" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" + "@expo/metro-runtime": "^6.1.2", + "@react-navigation/drawer": "^7.5.0", + "@testing-library/react-native": ">= 12.0.0", + "expo": "*", + "expo-constants": "^18.0.13", + "expo-linking": "^8.0.12", + "react": "*", + "react-dom": "*", + "react-native": "*", + "react-native-gesture-handler": "*", + "react-native-reanimated": "*", + "react-native-safe-area-context": ">= 5.4.0", + "react-native-screens": "*", + "react-native-web": "*", + "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" }, "peerDependenciesMeta": { - "eslint-plugin-import": { + "@react-navigation/drawer": { "optional": true }, - "eslint-plugin-import-x": { + "@testing-library/react-native": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native-gesture-handler": { + "optional": true + }, + "react-native-reanimated": { + "optional": true + }, + "react-native-web": { + "optional": true + }, + "react-server-dom-webpack": { "optional": true } } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, + "node_modules/expo-router/node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { - "eslint": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { "optional": true } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-expo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-expo/-/eslint-plugin-expo-1.0.3.tgz", - "integrity": "sha512-C1v9NPvpDET36+7Klpp/+53Jl+VzOfpbDxpKtL/pAPhCDwTX0kW6Swo425PT0uc4AMT5jpQbB7hSKFjKOGMl4A==", - "dev": true, + "node_modules/expo-router/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "^8.29.1", - "@typescript-eslint/utils": "^8.29.1", - "eslint": "^9.24.0" - }, - "engines": { - "node": ">=18.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "eslint": ">=8.10" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, + "node_modules/expo-router/node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, + "node_modules/expo-router/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, + "node_modules/expo-router/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/expo-router/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/expo-router/node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", + "node_modules/expo-router/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, + "node_modules/expo-server": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.7.tgz", + "integrity": "sha512-mcmyML3oXcqFUXUxtdtCL1O00ztNI2v76d+MdniXRUgHNxIcHZ05zo+DqBaOOT6LQnPk4vA4YHqQl7iGUfRb3g==", + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=20.16.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/expo-splash-screen": { + "version": "31.0.13", + "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-31.0.13.tgz", + "integrity": "sha512-1epJLC1cDlwwj089R2h8cxaU5uk4ONVAC+vzGiTZH4YARQhL4Stlz1MbR6yAS173GMosvkE6CAeihR7oIbCkDA==", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "@expo/prebuild-config": "^54.0.8" }, - "engines": { - "node": ">=4.0" + "peerDependencies": { + "expo": "*" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "node_modules/expo-status-bar": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-3.0.9.tgz", + "integrity": "sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==", + "license": "MIT", + "dependencies": { + "react-native-is-edge-to-edge": "^1.2.1" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/expo-symbols": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/expo-symbols/-/expo-symbols-1.0.8.tgz", + "integrity": "sha512-7bNjK350PaQgxBf0owpmSYkdZIpdYYmaPttDBb2WIp6rIKtcEtdzdfmhsc2fTmjBURHYkg36+eCxBFXO25/1hw==", + "license": "MIT", + "dependencies": { + "sf-symbols-typescript": "^2.0.0" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/expo-system-ui": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-6.0.9.tgz", + "integrity": "sha512-eQTYGzw1V4RYiYHL9xDLYID3Wsec2aZS+ypEssmF64D38aDrqbDgz1a2MSlHLQp2jHXSs3FvojhZ9FVela1Zcg==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@react-native/normalize-colors": "0.81.5", + "debug": "^4.3.2" + }, + "peerDependencies": { + "expo": "*", + "react-native": "*", + "react-native-web": "*" + }, + "peerDependenciesMeta": { + "react-native-web": { + "optional": true + } } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/expo-web-browser": { + "version": "15.0.11", + "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-15.0.11.tgz", + "integrity": "sha512-r2LS4Ro6DgUPZkcaEfgt8mp9eJuoA93x11Jh7S6utFe0FEzvUNn2yFhxg8XVwESaaHGt2k5V8LuK36rsp0BeIw==", "license": "MIT", - "engines": { - "node": ">=6" + "peerDependencies": { + "expo": "*", + "react-native": "*" } }, - "node_modules/expo": { - "version": "54.0.34", - "resolved": "https://registry.npmjs.org/expo/-/expo-54.0.34.tgz", - "integrity": "sha512-XkVHguZZDC8BcTQxHAd14/TQFbDp1Wt0Z/KApO9t68Ll5A127hLCPzU+a9gytfCIiyL/V1IpF1vIcOLKEVAoNQ==", + "node_modules/expo/node_modules/@expo/cli": { + "version": "54.0.25", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.25.tgz", + "integrity": "sha512-WnUqIb8oMBhtwSfIqdCHCzcaDIpLNXItRVd5miuvWi4GO0SGo89PSsAkbVJ+LJgcaY+v5rbgMELJS9I/CqOulA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "54.0.24", + "@0no-co/graphql.web": "^1.0.8", + "@expo/code-signing-certificates": "^0.0.6", "@expo/config": "~12.0.13", "@expo/config-plugins": "~54.0.4", - "@expo/devtools": "0.1.8", - "@expo/fingerprint": "0.15.5", + "@expo/devcert": "^1.2.1", + "@expo/env": "~2.0.8", + "@expo/image-utils": "^0.8.8", + "@expo/json-file": "^10.0.16", "@expo/metro": "~54.2.0", - "@expo/metro-config": "54.0.15", - "@expo/vector-icons": "^15.0.3", - "@ungap/structured-clone": "^1.3.0", - "babel-preset-expo": "~54.0.10", - "expo-asset": "~12.0.13", - "expo-constants": "~18.0.13", - "expo-file-system": "~19.0.22", - "expo-font": "~14.0.11", - "expo-keep-awake": "~15.0.8", - "expo-modules-autolinking": "3.0.25", - "expo-modules-core": "3.0.30", + "@expo/metro-config": "~54.0.16", + "@expo/osascript": "^2.3.8", + "@expo/package-manager": "^1.9.10", + "@expo/plist": "^0.4.9", + "@expo/prebuild-config": "^54.0.8", + "@expo/schema-utils": "^0.1.8", + "@expo/spawn-async": "^1.7.2", + "@expo/ws-tunnel": "^1.0.1", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.81.5", + "@urql/core": "^5.0.6", + "@urql/exchange-retry": "^1.3.0", + "accepts": "^1.3.8", + "arg": "^5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.1.0", + "bplist-parser": "^0.3.1", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "compression": "^1.7.4", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "expo-server": "^1.0.7", + "freeport-async": "^2.0.0", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "lan-network": "^0.2.1", + "minimatch": "^9.0.0", + "node-forge": "^1.3.3", + "npm-package-arg": "^11.0.0", + "ora": "^3.4.0", + "picomatch": "^4.0.3", + "pretty-bytes": "^5.6.0", "pretty-format": "^29.7.0", - "react-refresh": "^0.14.2", - "whatwg-url-without-unicode": "8.0.0-3" + "progress": "^2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.3", + "semver": "^7.6.0", + "send": "^0.19.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^7.5.2", + "terminal-link": "^2.1.1", + "undici": "^6.18.2", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" }, "bin": { - "expo": "bin/cli", - "expo-modules-autolinking": "bin/autolinking", - "fingerprint": "bin/fingerprint" + "expo-internal": "build/bin/cli" }, "peerDependencies": { - "@expo/dom-webview": "*", - "@expo/metro-runtime": "*", - "react": "*", - "react-native": "*", - "react-native-webview": "*" + "expo": "*", + "expo-router": "*", + "react-native": "*" }, "peerDependenciesMeta": { - "@expo/dom-webview": { - "optional": true - }, - "@expo/metro-runtime": { + "expo-router": { "optional": true }, - "react-native-webview": { + "react-native": { "optional": true } } }, - "node_modules/expo-constants": { - "version": "18.0.13", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-18.0.13.tgz", - "integrity": "sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==", + "node_modules/expo/node_modules/@expo/config": { + "version": "12.0.13", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-12.0.13.tgz", + "integrity": "sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==", "license": "MIT", "dependencies": { - "@expo/config": "~12.0.13", - "@expo/env": "~2.0.8" - }, - "peerDependencies": { - "expo": "*", - "react-native": "*" + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~54.0.4", + "@expo/config-types": "^54.0.10", + "@expo/json-file": "^10.0.8", + "deepmerge": "^4.3.1", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "resolve-workspace-root": "^2.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "~3.35.1" } }, - "node_modules/expo-font": { - "version": "14.0.11", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.11.tgz", - "integrity": "sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==", + "node_modules/expo/node_modules/@expo/config-plugins": { + "version": "54.0.4", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-54.0.4.tgz", + "integrity": "sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==", "license": "MIT", "dependencies": { - "fontfaceobserver": "^2.1.0" - }, - "peerDependencies": { - "expo": "*", - "react": "*", - "react-native": "*" + "@expo/config-types": "^54.0.10", + "@expo/json-file": "~10.0.8", + "@expo/plist": "^0.4.8", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.5", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" } }, - "node_modules/expo-haptics": { - "version": "15.0.8", - "resolved": "https://registry.npmjs.org/expo-haptics/-/expo-haptics-15.0.8.tgz", - "integrity": "sha512-lftutojy8Qs8zaDzzjwM3gKHFZ8bOOEZDCkmh2Ddpe95Ra6kt2izeOfOfKuP/QEh0MZ1j9TfqippyHdRd1ZM9g==", - "license": "MIT", - "peerDependencies": { - "expo": "*" - } + "node_modules/expo/node_modules/@expo/config-types": { + "version": "54.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-54.0.10.tgz", + "integrity": "sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==", + "license": "MIT" }, - "node_modules/expo-image": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-3.0.11.tgz", - "integrity": "sha512-4TudfUCLgYgENv+f48omnU8tjS2S0Pd9EaON5/s1ZUBRwZ7K8acEr4NfvLPSaeXvxW24iLAiyQ7sV7BXQH3RoA==", + "node_modules/expo/node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", - "peerDependencies": { - "expo": "*", - "react": "*", - "react-native": "*", - "react-native-web": "*" - }, - "peerDependenciesMeta": { - "react-native-web": { - "optional": true - } + "dependencies": { + "@babel/highlight": "^7.10.4" } }, - "node_modules/expo-linking": { - "version": "8.0.12", - "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.12.tgz", - "integrity": "sha512-FpXeIpFgZuxihwT9lBo86YD3y6LphBuAhN680MMxm/Y7fmsc57vimn2d3vFu68VI0+Z9w457t494mu2wvlgWTQ==", + "node_modules/expo/node_modules/@expo/env": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-2.0.11.tgz", + "integrity": "sha512-xV+ps6YCW7XIPVUwFVCRN2nox09dnRwy8uIjwHWTODu0zFw4kp4omnVkl0OOjuu2XOe7tdgAHxikrkJt9xB/7Q==", "license": "MIT", "dependencies": { - "expo-constants": "~18.0.13", - "invariant": "^2.2.4" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^2.0.0" } }, - "node_modules/expo-modules-autolinking": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-3.0.25.tgz", - "integrity": "sha512-YmHWctJlwvOuLZccg3cOXvSiXVJrPMKl7g2YR0YHWoGL9v2RvcmgaPJWPSLVW+voNEgEPsbo5UmUrAqbnYcBeg==", + "node_modules/expo/node_modules/@expo/json-file": { + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.16.tgz", + "integrity": "sha512-fcVkWEj+hLuP2yt5W0aw6LmDRqSPWDLUSxOMcmFeV+algmIF59sQVKCwB9btjQLd4V6x9N0pISkQEkBubUHrCw==", "license": "MIT", "dependencies": { - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.3" } }, - "node_modules/expo-modules-core": { - "version": "3.0.30", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-3.0.30.tgz", - "integrity": "sha512-a6IrpAn/Jbmwxi9L+hMmXKpNqnkUpoF7WHOpn02rVLyax2J0gB1vvCVE5rNydplEnt41Q6WxQwvcOjZaIkcSUg==", + "node_modules/expo/node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "license": "MIT", "dependencies": { - "invariant": "^2.2.4" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "@babel/highlight": "^7.10.4" } }, - "node_modules/expo-router": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.23.tgz", - "integrity": "sha512-qCxVAiCrCyu0npky6azEZ6dJDMt77OmCzEbpF6RbUTlfkaCA417LvY14SBkk0xyGruSxy/7pvJOI6tuThaUVCA==", + "node_modules/expo/node_modules/@expo/metro": { + "version": "54.2.0", + "resolved": "https://registry.npmjs.org/@expo/metro/-/metro-54.2.0.tgz", + "integrity": "sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==", "license": "MIT", "dependencies": { - "@expo/metro-runtime": "^6.1.2", - "@expo/schema-utils": "^0.1.8", - "@radix-ui/react-slot": "1.2.0", - "@radix-ui/react-tabs": "^1.1.12", - "@react-navigation/bottom-tabs": "^7.4.0", - "@react-navigation/native": "^7.1.8", - "@react-navigation/native-stack": "^7.3.16", - "client-only": "^0.0.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "expo-server": "^1.0.5", - "fast-deep-equal": "^3.1.3", - "invariant": "^2.2.4", - "nanoid": "^3.3.8", - "query-string": "^7.1.3", - "react-fast-compare": "^3.2.2", - "react-native-is-edge-to-edge": "^1.1.6", - "semver": "~7.6.3", - "server-only": "^0.0.1", - "sf-symbols-typescript": "^2.1.0", - "shallowequal": "^1.1.0", - "use-latest-callback": "^0.2.1", - "vaul": "^1.1.2" - }, - "peerDependencies": { - "@expo/metro-runtime": "^6.1.2", - "@react-navigation/drawer": "^7.5.0", - "@testing-library/react-native": ">= 12.0.0", - "expo": "*", - "expo-constants": "^18.0.13", - "expo-linking": "^8.0.11", - "react": "*", - "react-dom": "*", - "react-native": "*", - "react-native-gesture-handler": "*", - "react-native-reanimated": "*", - "react-native-safe-area-context": ">= 5.4.0", - "react-native-screens": "*", - "react-native-web": "*", - "react-server-dom-webpack": "~19.0.4 || ~19.1.5 || ~19.2.4" - }, - "peerDependenciesMeta": { - "@react-navigation/drawer": { - "optional": true - }, - "@testing-library/react-native": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native-gesture-handler": { - "optional": true - }, - "react-native-reanimated": { - "optional": true - }, - "react-native-web": { - "optional": true - }, - "react-server-dom-webpack": { - "optional": true - } + "metro": "0.83.3", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-config": "0.83.3", + "metro-core": "0.83.3", + "metro-file-map": "0.83.3", + "metro-minify-terser": "0.83.3", + "metro-resolver": "0.83.3", + "metro-runtime": "0.83.3", + "metro-source-map": "0.83.3", + "metro-symbolicate": "0.83.3", + "metro-transform-plugins": "0.83.3", + "metro-transform-worker": "0.83.3" } }, - "node_modules/expo-router/node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "node_modules/expo/node_modules/@expo/metro-config": { + "version": "54.0.16", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.16.tgz", + "integrity": "sha512-3LLb9ZQl0VlqSlsalJ7+CYjfz60PBoSDHvpE1UF71aTM1Nx0Vb4LhXo7bCCC+PYP9q/GPB58LLbIROQ8PjKX2w==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "@babel/code-frame": "^7.20.0", + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@expo/config": "~12.0.13", + "@expo/env": "~2.0.8", + "@expo/json-file": "~10.0.16", + "@expo/metro": "~54.2.0", + "@expo/spawn-async": "^1.7.2", + "browserslist": "^4.25.0", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^2.0.0", + "glob": "^13.0.0", + "hermes-parser": "^0.29.1", + "jsc-safe-url": "^0.2.4", + "lightningcss": "^1.30.1", + "picomatch": "^4.0.3", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "expo": "*" }, "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { + "expo": { "optional": true } } }, - "node_modules/expo-router/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/expo/node_modules/@expo/plist": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.4.9.tgz", + "integrity": "sha512-MPVpmKGfnQEnrCzgxuXcmPP/y/t6AVm+DcSb2Myp21LKWv1N3l8uFxMggesfF4ixAxkRlGmMMx9GyDC9M+XklQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.2.3", + "xmlbuilder": "^15.1.1" } }, - "node_modules/expo-router/node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "node_modules/expo/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/expo-router/node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "node_modules/expo/node_modules/babel-plugin-react-compiler": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", + "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.3" + "@babel/types": "^7.26.0" + } + }, + "node_modules/expo/node_modules/babel-preset-expo": { + "version": "54.0.11", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.11.tgz", + "integrity": "sha512-dEpeFDtYEFzmWtWVwvt7sUCZH0fxXPfbJlgXd7XNZSQDa/Ki/hTOj9exMTzqR2oyPHDNcE9VxYCJ4oS6xw4Pjg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/plugin-proposal-decorators": "^7.12.9", + "@babel/plugin-proposal-export-default-from": "^7.24.7", + "@babel/plugin-syntax-export-default-from": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-flow-strip-types": "^7.25.2", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-react": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@react-native/babel-preset": "0.81.5", + "babel-plugin-react-compiler": "^1.0.0", + "babel-plugin-react-native-web": "~0.21.0", + "babel-plugin-syntax-hermes-parser": "^0.29.1", + "babel-plugin-transform-flow-enums": "^0.0.2", + "debug": "^4.3.4", + "resolve-from": "^5.0.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@babel/runtime": "^7.20.0", + "expo": "*", + "react-refresh": ">=0.14.0 <1.0.0" }, "peerDependenciesMeta": { - "@types/react": { + "@babel/runtime": { "optional": true }, - "@types/react-dom": { + "expo": { "optional": true } } }, - "node_modules/expo-router/node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/expo/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true + "balanced-match": "^1.0.0" + } + }, + "node_modules/expo/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } + ], + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/expo-router/node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "node_modules/expo/node_modules/expo-file-system": { + "version": "19.0.23", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.23.tgz", + "integrity": "sha512-MeGkid9OeNILfT/qonaXHp4f2c15xaB28U/bcN7pqZej0Kx0+6+V7e9ZIXpPHm07zVatxA+QkMTPQEGfmvVOxA==", + "license": "MIT", + "peerDependencies": { + "expo": "*", + "react-native": "*" + } + }, + "node_modules/expo/node_modules/expo-keep-awake": { + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-15.0.8.tgz", + "integrity": "sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==", + "license": "MIT", + "peerDependencies": { + "expo": "*", + "react": "*" + } + }, + "node_modules/expo/node_modules/hermes-estree": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", + "license": "MIT" + }, + "node_modules/expo/node_modules/hermes-parser": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "hermes-estree": "0.29.1" + } + }, + "node_modules/expo/node_modules/metro": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", + "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.32.0", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-config": "0.83.3", + "metro-core": "0.83.3", + "metro-file-map": "0.83.3", + "metro-resolver": "0.83.3", + "metro-runtime": "0.83.3", + "metro-source-map": "0.83.3", + "metro-symbolicate": "0.83.3", + "metro-transform-plugins": "0.83.3", + "metro-transform-worker": "0.83.3", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "bin": { + "metro": "src/cli.js" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo-router/node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "node_modules/expo/node_modules/metro-babel-transformer": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", + "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/expo-router/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.32.0", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">=20.19.4" } }, - "node_modules/expo-server": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/expo-server/-/expo-server-1.0.6.tgz", - "integrity": "sha512-vb5TBtskvEdzYuW79lATXutOEBfW5m6U4EFpNjCVZTnI7S//SAsLQkYEpn+EDfn84m6VQfzSGkIVR6YPaScKFA==", + "node_modules/expo/node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT" + }, + "node_modules/expo/node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", "license": "MIT", - "engines": { - "node": ">=20.16.0" + "dependencies": { + "hermes-estree": "0.32.0" } }, - "node_modules/expo-splash-screen": { - "version": "31.0.13", - "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-31.0.13.tgz", - "integrity": "sha512-1epJLC1cDlwwj089R2h8cxaU5uk4ONVAC+vzGiTZH4YARQhL4Stlz1MbR6yAS173GMosvkE6CAeihR7oIbCkDA==", + "node_modules/expo/node_modules/metro-cache": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", + "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", "license": "MIT", "dependencies": { - "@expo/prebuild-config": "^54.0.8" + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.83.3" }, - "peerDependencies": { - "expo": "*" + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo-status-bar": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-3.0.9.tgz", - "integrity": "sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==", + "node_modules/expo/node_modules/metro-cache-key": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", + "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", "license": "MIT", "dependencies": { - "react-native-is-edge-to-edge": "^1.2.1" + "flow-enums-runtime": "^0.0.6" }, - "peerDependencies": { - "react": "*", - "react-native": "*" + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo-symbols": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/expo-symbols/-/expo-symbols-1.0.8.tgz", - "integrity": "sha512-7bNjK350PaQgxBf0owpmSYkdZIpdYYmaPttDBb2WIp6rIKtcEtdzdfmhsc2fTmjBURHYkg36+eCxBFXO25/1hw==", + "node_modules/expo/node_modules/metro-config": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", + "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", "license": "MIT", "dependencies": { - "sf-symbols-typescript": "^2.0.0" + "connect": "^3.6.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.83.3", + "metro-cache": "0.83.3", + "metro-core": "0.83.3", + "metro-runtime": "0.83.3", + "yaml": "^2.6.1" }, - "peerDependencies": { - "expo": "*", - "react-native": "*" + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo-system-ui": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/expo-system-ui/-/expo-system-ui-6.0.9.tgz", - "integrity": "sha512-eQTYGzw1V4RYiYHL9xDLYID3Wsec2aZS+ypEssmF64D38aDrqbDgz1a2MSlHLQp2jHXSs3FvojhZ9FVela1Zcg==", + "node_modules/expo/node_modules/metro-core": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", + "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", "license": "MIT", "dependencies": { - "@react-native/normalize-colors": "0.81.5", - "debug": "^4.3.2" - }, - "peerDependencies": { - "expo": "*", - "react-native": "*", - "react-native-web": "*" + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.83.3" }, - "peerDependenciesMeta": { - "react-native-web": { - "optional": true - } + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo-web-browser": { - "version": "15.0.11", - "resolved": "https://registry.npmjs.org/expo-web-browser/-/expo-web-browser-15.0.11.tgz", - "integrity": "sha512-r2LS4Ro6DgUPZkcaEfgt8mp9eJuoA93x11Jh7S6utFe0FEzvUNn2yFhxg8XVwESaaHGt2k5V8LuK36rsp0BeIw==", + "node_modules/expo/node_modules/metro-file-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", + "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", "license": "MIT", - "peerDependencies": { - "expo": "*", - "react-native": "*" + "dependencies": { + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/@expo/cli": { - "version": "54.0.24", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-54.0.24.tgz", - "integrity": "sha512-5xse1bEgnVUBhOrtttc6xTNJVvjyTRavpzuF0/0nuj+312vfSbk7EiRbG+xJ2pW/iZxnhLPJkFCrPYG0nmheAQ==", + "node_modules/expo/node_modules/metro-minify-terser": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", + "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", "license": "MIT", "dependencies": { - "@0no-co/graphql.web": "^1.0.8", - "@expo/code-signing-certificates": "^0.0.6", - "@expo/config": "~12.0.13", - "@expo/config-plugins": "~54.0.4", - "@expo/devcert": "^1.2.1", - "@expo/env": "~2.0.8", - "@expo/image-utils": "^0.8.8", - "@expo/json-file": "^10.0.8", - "@expo/metro": "~54.2.0", - "@expo/metro-config": "~54.0.15", - "@expo/osascript": "^2.3.8", - "@expo/package-manager": "^1.9.10", - "@expo/plist": "^0.4.8", - "@expo/prebuild-config": "^54.0.8", - "@expo/schema-utils": "^0.1.8", - "@expo/spawn-async": "^1.7.2", - "@expo/ws-tunnel": "^1.0.1", - "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.81.5", - "@urql/core": "^5.0.6", - "@urql/exchange-retry": "^1.3.0", - "accepts": "^1.3.8", - "arg": "^5.0.2", - "better-opn": "~3.0.2", - "bplist-creator": "0.1.0", - "bplist-parser": "^0.3.1", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "compression": "^1.7.4", - "connect": "^3.7.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "expo-server": "^1.0.6", - "freeport-async": "^2.0.0", - "getenv": "^2.0.0", - "glob": "^13.0.0", - "lan-network": "^0.2.1", - "minimatch": "^9.0.0", - "node-forge": "^1.3.3", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "picomatch": "^4.0.3", - "pretty-bytes": "^5.6.0", - "pretty-format": "^29.7.0", - "progress": "^2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve": "^1.22.2", - "resolve-from": "^5.0.0", - "resolve.exports": "^2.0.3", - "semver": "^7.6.0", - "send": "^0.19.0", - "slugify": "^1.3.4", - "source-map-support": "~0.5.21", - "stacktrace-parser": "^0.1.10", - "structured-headers": "^0.4.1", - "tar": "^7.5.2", - "terminal-link": "^2.1.1", - "undici": "^6.18.2", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" - }, - "bin": { - "expo-internal": "build/bin/cli" - }, - "peerDependencies": { - "expo": "*", - "expo-router": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "expo-router": { - "optional": true - }, - "react-native": { - "optional": true - } + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/@expo/json-file": { - "version": "10.0.15", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-10.0.15.tgz", - "integrity": "sha512-xLtsy1820Rf2myhhIc7WmfoUg5cWEJB9tEylhgGhRF/acYGuUXUVkKHYoHY31GbYf6CIZNvipTFxuvWRpVlXTw==", + "node_modules/expo/node_modules/metro-resolver": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", + "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.20.0", - "json5": "^2.2.3" + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/@expo/metro-config": { - "version": "54.0.15", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-54.0.15.tgz", - "integrity": "sha512-SqIya4VZ9KHM1S9g+xR0A+QKw1Tfs7Gacx6bQNJ98vs4+O7I5+QP5mHZIB0QSZLUV8opiXebHYTiTu+0OAsIUw==", + "node_modules/expo/node_modules/metro-runtime": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", + "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.20.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.5", - "@expo/config": "~12.0.13", - "@expo/env": "~2.0.8", - "@expo/json-file": "~10.0.8", - "@expo/metro": "~54.2.0", - "@expo/spawn-async": "^1.7.2", - "browserslist": "^4.25.0", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "getenv": "^2.0.0", - "glob": "^13.0.0", - "hermes-parser": "^0.29.1", - "jsc-safe-url": "^0.2.4", - "lightningcss": "^1.30.1", - "picomatch": "^4.0.3", - "postcss": "~8.4.32", - "resolve-from": "^5.0.0" - }, - "peerDependencies": { - "expo": "*" + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" }, - "peerDependenciesMeta": { - "expo": { - "optional": true - } + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/babel-preset-expo": { - "version": "54.0.10", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-54.0.10.tgz", - "integrity": "sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==", + "node_modules/expo/node_modules/metro-source-map": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", + "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-proposal-export-default-from": "^7.24.7", - "@babel/plugin-syntax-export-default-from": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/preset-react": "^7.22.15", - "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.81.5", - "babel-plugin-react-compiler": "^1.0.0", - "babel-plugin-react-native-web": "~0.21.0", - "babel-plugin-syntax-hermes-parser": "^0.29.1", - "babel-plugin-transform-flow-enums": "^0.0.2", - "debug": "^4.3.4", - "resolve-from": "^5.0.0" - }, - "peerDependencies": { - "@babel/runtime": "^7.20.0", - "expo": "*", - "react-refresh": ">=0.14.0 <1.0.0" + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.3", + "nullthrows": "^1.1.1", + "ob1": "0.83.3", + "source-map": "^0.5.6", + "vlq": "^1.0.0" }, - "peerDependenciesMeta": { - "@babel/runtime": { - "optional": true - }, - "expo": { - "optional": true - } + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "node_modules/expo/node_modules/metro-symbolicate": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", + "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.3", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/expo/node_modules/metro-transform-plugins": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", + "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, "engines": { - "node": ">=8" + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/expo-asset": { - "version": "12.0.13", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-12.0.13.tgz", - "integrity": "sha512-x/p7WvQUnkn6K43b9eL6SPeq5Vnf1E8BDe9bDrWrvMqzyUvJnUFvl+ctg3034s/+UHe7Ne2pAmc0+yzbl8CrDQ==", + "node_modules/expo/node_modules/metro-transform-worker": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", + "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", "license": "MIT", "dependencies": { - "@expo/image-utils": "^0.8.8", - "expo-constants": "~18.0.13" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.83.3", + "metro-babel-transformer": "0.83.3", + "metro-cache": "0.83.3", + "metro-cache-key": "0.83.3", + "metro-minify-terser": "0.83.3", + "metro-source-map": "0.83.3", + "metro-transform-plugins": "0.83.3", + "nullthrows": "^1.1.1" }, - "peerDependencies": { - "expo": "*", - "react": "*", - "react-native": "*" + "engines": { + "node": ">=20.19.4" } }, - "node_modules/expo/node_modules/expo-file-system": { - "version": "19.0.22", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-19.0.22.tgz", - "integrity": "sha512-l9pgahSc7sJD0bP9vBNeXvZjy8QKDpVHVxWmei/ESQOrzmoj5BidziqLVsyZdxsi+PfdbTtttLTAmddH/JafYA==", + "node_modules/expo/node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, + "node_modules/expo/node_modules/metro/node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT" + }, + "node_modules/expo/node_modules/metro/node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", "license": "MIT", - "peerDependencies": { - "expo": "*", - "react-native": "*" + "dependencies": { + "hermes-estree": "0.32.0" } }, - "node_modules/expo/node_modules/expo-keep-awake": { - "version": "15.0.8", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-15.0.8.tgz", - "integrity": "sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==", + "node_modules/expo/node_modules/metro/node_modules/ws": { + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, "peerDependencies": { - "expo": "*", - "react": "*" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/expo/node_modules/hermes-estree": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", - "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", - "license": "MIT" + "node_modules/expo/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/expo/node_modules/hermes-parser": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", - "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", + "node_modules/expo/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "hermes-estree": "0.29.1" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/expo/node_modules/minimatch": { @@ -7789,16 +8347,25 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/expo/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "node_modules/expo/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.6" + } + }, + "node_modules/expo/node_modules/ob1": { + "version": "0.83.3", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", + "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=20.19.4" } }, "node_modules/expo/node_modules/postcss": { @@ -7947,6 +8514,30 @@ "asap": "~2.0.3" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "dev": true, + "license": "MIT" + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -8479,9 +9070,9 @@ } }, "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -8491,18 +9082,20 @@ } }, "node_modules/hermes-estree": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", - "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", - "license": "MIT" + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz", + "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==", + "license": "MIT", + "peer": true }, "node_modules/hermes-parser": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", - "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz", + "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==", "license": "MIT", + "peer": true, "dependencies": { - "hermes-estree": "0.32.0" + "hermes-estree": "0.33.3" } }, "node_modules/hoist-non-react-statics": { @@ -9242,6 +9835,18 @@ "node": ">= 0.4" } }, + "node_modules/its-fine": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", + "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", + "license": "MIT", + "dependencies": { + "@types/react-reconciler": "^0.28.9" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", @@ -9368,6 +9973,18 @@ "node": ">=8" } }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/jest-validate": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", @@ -10024,46 +10641,53 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "license": "MIT" }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "dev": true, + "license": "MIT" + }, "node_modules/metro": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.3.tgz", - "integrity": "sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.84.4.tgz", + "integrity": "sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA==", "license": "MIT", + "peer": true, "dependencies": { - "@babel/code-frame": "^7.24.7", + "@babel/code-frame": "^7.29.0", "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "accepts": "^1.3.7", - "chalk": "^4.0.0", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "accepts": "^2.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.32.0", + "hermes-parser": "0.35.0", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3", - "mime-types": "^2.1.27", + "metro-babel-transformer": "0.84.4", + "metro-cache": "0.84.4", + "metro-cache-key": "0.84.4", + "metro-config": "0.84.4", + "metro-core": "0.84.4", + "metro-file-map": "0.84.4", + "metro-resolver": "0.84.4", + "metro-runtime": "0.84.4", + "metro-source-map": "0.84.4", + "metro-symbolicate": "0.84.4", + "metro-transform-plugins": "0.84.4", + "metro-transform-worker": "0.84.4", + "mime-types": "^3.0.1", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", "source-map": "^0.5.6", @@ -10075,89 +10699,113 @@ "metro": "src/cli.js" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-babel-transformer": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.3.tgz", - "integrity": "sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.84.4.tgz", + "integrity": "sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.32.0", + "hermes-parser": "0.35.0", + "metro-cache-key": "0.84.4", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", + "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "license": "MIT", + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", + "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.35.0" } }, "node_modules/metro-cache": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.3.tgz", - "integrity": "sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.84.4.tgz", + "integrity": "sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg==", "license": "MIT", + "peer": true, "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" + "metro-core": "0.84.4" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-cache-key": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.3.tgz", - "integrity": "sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.84.4.tgz", + "integrity": "sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw==", "license": "MIT", + "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-config": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.3.tgz", - "integrity": "sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.84.4.tgz", + "integrity": "sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q==", "license": "MIT", + "peer": true, "dependencies": { "connect": "^3.6.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.83.3", - "metro-cache": "0.83.3", - "metro-core": "0.83.3", - "metro-runtime": "0.83.3", + "metro": "0.84.4", + "metro-cache": "0.84.4", + "metro-core": "0.84.4", + "metro-runtime": "0.84.4", "yaml": "^2.6.1" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-core": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.3.tgz", - "integrity": "sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.84.4.tgz", + "integrity": "sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ==", "license": "MIT", + "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" + "metro-resolver": "0.84.4" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-file-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.3.tgz", - "integrity": "sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.84.4.tgz", + "integrity": "sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ==", "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "fb-watchman": "^2.0.0", @@ -10170,77 +10818,81 @@ "walker": "^1.0.7" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-minify-terser": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.3.tgz", - "integrity": "sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.84.4.tgz", + "integrity": "sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ==", "license": "MIT", + "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "terser": "^5.15.0" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-resolver": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.3.tgz", - "integrity": "sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.84.4.tgz", + "integrity": "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A==", "license": "MIT", + "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-runtime": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.3.tgz", - "integrity": "sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.84.4.tgz", + "integrity": "sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-source-map": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.3.tgz", - "integrity": "sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.84.4.tgz", + "integrity": "sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g==", "license": "MIT", + "peer": true, "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", + "metro-symbolicate": "0.84.4", "nullthrows": "^1.1.1", - "ob1": "0.83.3", + "ob1": "0.84.4", "source-map": "^0.5.6", "vlq": "^1.0.0" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-symbolicate": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.3.tgz", - "integrity": "sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.84.4.tgz", + "integrity": "sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA==", "license": "MIT", + "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.83.3", + "metro-source-map": "0.84.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -10249,48 +10901,67 @@ "metro-symbolicate": "src/index.js" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, - "node_modules/metro-transform-plugins": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.3.tgz", - "integrity": "sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==", + "node_modules/metro-transform-plugins": { + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.84.4.tgz", + "integrity": "sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", + "@babel/generator": "^7.29.1", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", "flow-enums-runtime": "^0.0.6", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/metro-transform-worker": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.3.tgz", - "integrity": "sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.84.4.tgz", + "integrity": "sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "flow-enums-runtime": "^0.0.6", - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-source-map": "0.83.3", - "metro-transform-plugins": "0.83.3", + "metro": "0.84.4", + "metro-babel-transformer": "0.84.4", + "metro-cache": "0.84.4", + "metro-cache-key": "0.84.4", + "metro-minify-terser": "0.84.4", + "metro-source-map": "0.84.4", + "metro-transform-plugins": "0.84.4", "nullthrows": "^1.1.1" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz", + "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz", + "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.35.0" } }, "node_modules/micromatch": { @@ -10306,6 +10977,18 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -10319,24 +11002,28 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/mimic-fn": { @@ -10513,9 +11200,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10649,15 +11336,16 @@ "license": "MIT" }, "node_modules/ob1": { - "version": "0.83.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.3.tgz", - "integrity": "sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==", + "version": "0.84.4", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.84.4.tgz", + "integrity": "sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA==", "license": "MIT", + "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">=20.19.4" + "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0" } }, "node_modules/object-assign": { @@ -11109,9 +11797,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", - "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -11124,12 +11812,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -11441,6 +12129,12 @@ "react": "^19.1.0" } }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, "node_modules/react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", @@ -11546,15 +12240,6 @@ "react-native": ">=0.81" } }, - "node_modules/react-native-css/node_modules/babel-plugin-react-compiler": { - "version": "19.1.0-rc.3", - "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-19.1.0-rc.3.tgz", - "integrity": "sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.0" - } - }, "node_modules/react-native-gesture-handler": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz", @@ -11775,6 +12460,77 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/react-native/node_modules/metro-runtime": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.7.tgz", + "integrity": "sha512-9GKkJURaB2iyYoEExKnedzAHzxmKtSi+k0tsZUvMoU27tBZJElchYt7JH/Ai/XzYAI9lCAaV7u5HZSI8J5Z+wQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/metro-source-map": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.7.tgz", + "integrity": "sha512-JgA1h7oc1a1jydBe1GhVFsUoMYo3wLPk7oRA32rjlDsq+sP2JLt9x2p2lWbNSxTm/u8NV4VRid3hvEJgcX8tKw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.7", + "nullthrows": "^1.1.1", + "ob1": "0.83.7", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/metro-symbolicate": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.7.tgz", + "integrity": "sha512-g4suyxw20WOHWI680c+Kq4wC/NF+Hx5pRH9afrMp+sMTxqLeKcPR1Xf4wMhsjlbvx7LbIREdke6q928jEjvJWw==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.7", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/ob1": { + "version": "0.83.7", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.7.tgz", + "integrity": "sha512-9M5kpuOLyTPogMtZiQUIxdAZxl7Dxs6tVBbJErSumsqGMuhVSoUbkfeZ3XNPpLpwBBtqY5QDUzGwggLHX3slQg==", + "license": "MIT", + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/react-native/node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, "node_modules/react-native/node_modules/semver": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", @@ -11874,6 +12630,21 @@ } } }, + "node_modules/react-use-measure": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz", + "integrity": "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -12210,9 +12981,9 @@ } }, "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/semver": { @@ -12933,6 +13704,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/suspend-react": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz", + "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=17.0" + } + }, "node_modules/tailwindcss": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", @@ -13089,6 +13869,12 @@ "node": ">=0.8" } }, + "node_modules/three": { + "version": "0.160.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.160.0.tgz", + "integrity": "sha512-DLU8lc0zNIPkM7rH5/e1Ks1Z8tWCGRq6g8mPowdDJpw1CFBJMU7UoJjC6PefXW7z//SSl0b2+GCw14LB+uDhng==", + "license": "MIT" + }, "node_modules/throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", @@ -13111,35 +13897,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -13313,18 +14070,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" @@ -13888,6 +14645,30 @@ "node": ">=10" } }, + "node_modules/whatwg-url-without-unicode/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", @@ -13980,14 +14761,14 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.21.tgz", + "integrity": "sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", @@ -14188,9 +14969,9 @@ } }, "node_modules/zustand": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.13.tgz", - "integrity": "sha512-efI2tVaVQPqtOh114loML/Z80Y4NP3yc+Ff0fYiZJPauNeWZeIp/bRFD7I9bfmCOYBh/PHxlglQ9+wvlwnPikQ==", + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.14.tgz", + "integrity": "sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==", "license": "MIT", "engines": { "node": ">=12.20.0" diff --git a/package.json b/package.json index 49b1adf..8873819 100644 --- a/package.json +++ b/package.json @@ -13,16 +13,20 @@ "dependencies": { "@expo/vector-icons": "^15.0.3", "@react-native-async-storage/async-storage": "2.2.0", + "@react-native-community/slider": "5.0.1", "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", "@react-navigation/native": "^7.1.8", - "expo": "~54.0.33", + "@react-three/fiber": "^9.6.1", + "expo": "~54.0.35", + "expo-asset": "~12.0.13", "expo-constants": "~18.0.13", - "expo-font": "~14.0.11", + "expo-font": "~14.0.12", + "expo-gl": "~16.0.10", "expo-haptics": "~15.0.8", "expo-image": "~3.0.11", "expo-linking": "~8.0.11", - "expo-router": "~6.0.23", + "expo-router": "~6.0.24", "expo-splash-screen": "~31.0.13", "expo-status-bar": "~3.0.9", "expo-symbols": "~1.0.8", @@ -40,11 +44,13 @@ "react-native-screens": "~4.16.0", "react-native-web": "~0.21.0", "react-native-worklets": "0.5.1", + "three": "0.160.0", "zustand": "^5.0.13" }, "devDependencies": { "@tailwindcss/postcss": "^4.3.0", "@types/react": "~19.1.0", + "@types/three": "^0.160.0", "eslint": "^9.25.0", "eslint-config-expo": "~10.0.0", "postcss": "^8.5.15", @@ -53,6 +59,7 @@ }, "private": true, "overrides": { - "lightningcss": "1.30.1" + "lightningcss": "1.30.1", + "three": "0.160.0" } } diff --git a/prompts/12-map-ui.md b/prompts/12-map-ui.md index f237117..1395e1a 100644 --- a/prompts/12-map-ui.md +++ b/prompts/12-map-ui.md @@ -277,7 +277,10 @@ npx expo start After this prompt: -1. `prompts/13-map-v2-3d-globe.md` — upgrade map canvas to interactive 3D globe +1. Map v2 3D globe — implement in order (see `prompts/13-map-v2-3d-globe.md`): + - `prompts/13a-map-v2-globe-debug.md` — sphere, lights, orbit controls, fake pins + - `prompts/13b-map-v2-globe-data-pins.md` — `latlng` conversion + backend countries + - `prompts/13c-map-v2-globe-ux.md` — preview card, selection, random country, camera animation 2. Saved countries screen (`prompt_material/saved-screen-ui.png`) 3. Country detail route (if separate from Explore) 4. Map chip filters backed by search/stats APIs (optional) diff --git a/prompts/13-map-v2-3d-globe.md b/prompts/13-map-v2-3d-globe.md index f868bee..b75c729 100644 --- a/prompts/13-map-v2-3d-globe.md +++ b/prompts/13-map-v2-3d-globe.md @@ -1,30 +1,41 @@ Read AGENTS.md first and follow it strictly. -Reference: `prompt_material/map-screen-ui.png` (chrome + bottom card — reuse from v1), `prompts/12-map-ui.md`, `AGENTS.md` (Map Screen Rules), `prompts-worldloop/07-map-endpoint.md` +Reference: `prompt_material/map-screen-ui.png`, `prompts/12-map-ui.md`, `AGENTS.md` (Map Screen Rules), `prompts-worldloop/07-map-endpoint.md` Implement **Map v2**: replace the **2D map canvas** from `prompts/12-map-ui.md` with an **interactive 3D globe** while keeping the same header, search, filter chips, country preview card, FAB, and data wiring. Visual language stays **dark + gold** (WorldLoop brand). This is an **upgrade prompt**, not a greenfield Map screen. Do not rebuild Explore, Home, or backend endpoints. -## Goal +## Build order (important) -Give the Map tab a **rotatable 3D world globe** with country discovery on the sphere: +Do **not** jump to the full globe system in one pass. Implement in order — each step must work before the next: -- Drag to spin the globe; pinch (or double-tap controls) to zoom +| Step | Prompt | What you build | +| ---- | ------ | -------------- | +| **1** | [`13a-map-v2-globe-debug.md`](./13a-map-v2-globe-debug.md) | Debug globe: sphere, lights, orbit controls, 3–5 fake pins | +| **2** | [`13b-map-v2-globe-data-pins.md`](./13b-map-v2-globe-data-pins.md) | Real data: `latlng` → sphere, backend countries, all pins | +| **3** | [`13c-map-v2-globe-ux.md`](./13c-map-v2-globe-ux.md) | UX: preview card, selection highlight, random country, camera animation | +| **4** | [`13d-map-v3-ui-ux-upgrade.md`](./13d-map-v3-ui-ux-upgrade.md) | UX fix: one-tap preview, unified dismiss, simplify bottom chrome | + +If Step 1 does not spin and zoom smoothly on device, fix that before wiring API data or UX. + +## End goal (after all 3 steps) + +- Drag to spin the globe; pinch (or zoom controls) to zoom - Country pins at `MapCountry.latlng` on the sphere surface -- Tap a pin → same bottom **country preview card** as v1 (stats, AI fact, Save, Explore Country) -- **Selected country** — gold highlight / pulse on the pin (match Peru emphasis from the 2D design, adapted to 3D) +- Tap a pin → same bottom **country preview card** as v1 +- **Selected country** — gold highlight / pulse on the pin - **Random Country** FAB — camera animates to face a random pin -- Optional: header **globe icon** toggles **2D ↔ 3D** if `react-native-maps` from v1 is kept (recommended for teaching and fallback) +- Optional: header **globe icon** toggles **2D ↔ 3D** if v1 `react-native-maps` is kept Reuse `useMapStore`, `fetchMapCountries`, `fetchCountryByName`, `openCountryInExplore`, `SearchOverlay`, and `useSavedCountriesStore` — no duplicate state. ## Prerequisites (all required) -- `prompts/12-map-ui.md` **completed** — Map tab ships with header, chips, preview card, FAB, `use-map-store.ts`, `fetchCountryByName`, `react-native-maps` 2D canvas -- `prompts/10c-search-ui.md` — search overlay + `openCountryInExplore` -- `prompts-worldloop/07-map-endpoint.md` — `GET /map/countries` stable -- Backend + Redis running locally for map + country detail calls +- `prompts/12-map-ui.md` **completed** +- `prompts/10c-search-ui.md` +- `prompts-worldloop/07-map-endpoint.md` +- Backend + Redis running locally for steps 2–3 ## UX mental model @@ -32,19 +43,9 @@ v1 Map = **flat atlas** (pan north/south, markers on a plane). v2 Map = **planet in your hands** (spin the world, tap a glowing pin, same bottom card answers “what is this country?”). -Users should not lose any v1 actions: search, save, explore, random country, trending badge on select pins. - -## Dependencies - -### Already in the project (reuse) - -- `expo-router`, `expo-image`, `zustand`, `@expo/vector-icons` -- `react-native-gesture-handler`, `react-native-reanimated`, `react-native-safe-area-context` -- `react-native-maps` (from v1 — keep for 2D mode or remove only if you drop the toggle) +## 3D stack (required — ask user first) -### 3D stack (required — ask user first) - -**Ask the user for approval** before installing. Prefer the **teachable** stack (Three.js concepts map cleanly to coursework): +**Ask the user for approval** before installing. Prefer the **teachable** stack: ```bash npx expo install expo-gl three expo-three @@ -59,197 +60,49 @@ npx expo install @react-three/fiber @react-three/drei | `@react-three/fiber` | Declarative React renderer for Three.js | | `@react-three/drei` | Helpers (`OrbitControls`, `Sphere`, etc.) | -**Alternative (only with explicit user approval):** [`@aeryflux/globe`](https://github.com/aeryflux/globe) — prebuilt globe meshes + RN helpers; faster visually, less transparent for teaching. Document why you chose it if used. - -Do **not** add Mapbox GL, Cesium, Unity, or native AR modules without approval. +Install during **Step 1** only. Do not add Mapbox GL, Cesium, Unity, or native AR modules without approval. ### Platform notes -- Test on a **physical device** when possible — iOS Simulator / Android emulator WebGL can be flaky with Three.js + EXGL -- **Web** is optional for this prompt; if the globe does not run on web, show a friendly fallback message on web only (do not block native) +- Test on a **physical device** when possible — Simulator / emulator WebGL can be flaky +- **Web** is optional; friendly fallback on web only if GL fails (do not block native) - Use **development builds** if Expo Go limits GL features in your SDK version -## Route & files - -| Path | Purpose | -| -------------------------------------- | ------------------------------------------------------------------------------ | -| `components/map/globe-view.tsx` | 3D globe canvas (`Canvas` + sphere + pins); owns GL lifecycle | -| `components/map/globe-country-pin.tsx` | Single country marker (mesh/sprite + press target) | -| `components/map/map-canvas.tsx` | Thin wrapper: renders `GlobeView` or v1 `MapView` based on `mapMode` | -| `lib/latlng-to-sphere.ts` | `latLngToVector3(lat, lng, radius)` + inverse helpers (unit tests optional) | -| `store/use-map-store.ts` | Extend with `mapMode: "2d" \| "3d"`, `setMapMode`, `focusCountryOnGlobe(name)` | -| `app/(tabs)/map.tsx` | Swap 2D map section for `MapCanvas`; wire globe icon → toggle mode | - -Keep existing v1 components (`MapHeader`, `MapFilterChips`, `MapCountryPreviewCard`, `RandomCountryFab`, etc.) — only replace the map **viewport**. - -## Coordinate math - -Backend sends WGS84-style `[lat, lng]` on `MapCountry.latlng`. - -Convert to a point on a unit sphere (radius `R`, e.g. `1`): - -```ts -// lib/latlng-to-sphere.ts — illustrative; implement and export -export function latLngToVector3( - lat: number, - lng: number, - radius: number, -): [number, number, number] { - const phi = (90 - lat) * (Math.PI / 180); - const theta = (lng + 180) * (Math.PI / 180); - const x = -(radius * Math.sin(phi) * Math.cos(theta)); - const z = radius * Math.sin(phi) * Math.sin(theta); - const y = radius * Math.cos(phi); - return [x, y, z]; -} -``` - -- Place each pin slightly **above** the surface (`radius * 1.02`) so markers don’t z-fight with the globe mesh -- `focusCountryOnGlobe` — animate camera / controls target so the selected pin faces the user (use `OrbitControls` `target` + optional `camera.lookAt`) - -## Data wiring (unchanged from v1) - -### Map list - -- `loadMapCountries()` → `fetchMapCountries()` → `countries: MapCountry[]` -- Skip entries with invalid `latlng` - -### Selection + detail - -- `selectCountry(name)` — sets `selectedCountry`, triggers `fetchCountryByName` for preview card AI block (same as v1) -- Preview card UI — **copy from v1**; do not redesign unless fixing a bug - -### Integrations - -| Action | Implementation | -| --------------- | --------------------------------------------------- | -| Save | `useSavedCountriesStore.toggleSaved` | -| Explore Country | `openCountryInExplore(detailOrMinimalCountry)` | -| Search bar | `useSearchUiStore` + `SearchOverlay` | -| Random Country | `selectRandomCountry()` + `focusCountryOnGlobe` | -| Trending badge | `constants/trending-countries.ts` (same list as v1) | - -No new backend routes for v2. - -## 3D globe implementation - -### Globe mesh - -- Base: `Sphere` (or `mesh` + `SphereGeometry`) with **dark** material — deep gray `#1a1a2e` / near-black, subtle emissive gold rim optional -- Optional: very low-poly wireframe overlay for “tech” look (keep performant) -- **Do not** ship 20MB GLB country meshes in v2 — use simple pins on a smooth sphere (teachable + fast) +## Files (full map after Step 3) -### Country pins +| Path | Introduced in | +| -------------------------------------- | ------------- | +| `components/map/globe-view.tsx` | Step 1 | +| `components/map/globe-country-pin.tsx` | Step 1 (fake) → Step 2 (real) | +| `lib/latlng-to-sphere.ts` | Step 2 | +| `components/map/map-canvas.tsx` | Step 3 (2D toggle) | +| `store/use-map-store.ts` | Step 2–3 extensions | +| `app/(tabs)/map.tsx` | Step 1 swap viewport → Step 3 full wiring | -- One pin per `MapCountry` (or capped subset — see performance) -- Default: small gold sphere or billboard sprite -- **Selected:** scale up + brighter emissive gold + optional ring -- **Trending:** small flame badge as 2D overlay in preview card only, or a second material on pin — avoid DOM inside `Canvas` +Keep existing v1 components (`MapHeader`, `MapFilterChips`, `MapCountryPreviewCard`, `RandomCountryFab`, etc.) — only replace the map **viewport** incrementally. -### Interaction +## Out of scope (all steps) -- `OrbitControls` from `@react-three/drei` — rotate globe, damped inertia -- Pin `onPress` → `selectCountry(name)` (use R3F pointer events / `Pressable` wrapper pattern supported on native) -- Tap empty space → optional `selectCountry(null)` to dismiss card - -### 2D ↔ 3D toggle (recommended) - -- `useMapStore.mapMode`: `"2d" | "3d"` (default `"3d"` after v2 ships, or `"2d"` until user flips — document choice) -- Header left **globe icon** toggles mode -- `components/map/map-canvas.tsx` renders: - - `"2d"` → existing `react-native-maps` `MapView` from v1 - - `"3d"` → `GlobeView` -- Persist `mapMode` in AsyncStorage (optional stretch) - -### Map controls (adapt v1 overlays) - -| Control | 3D behavior | -| --------------- | ----------------------------------------------------- | -| Zoom +/- | Adjust `OrbitControls` min/max distance or camera FOV | -| Compass / reset | Reset camera to default world-facing pose | -| Legend | Same stub as v1 (“Gold pins = countries”) | - -Position controls over the `GLView` with absolute layout (NativeWind on wrapper `View`, not on `GLView`). - -## Performance guidelines - -Rendering ~195 pins is acceptable as **simple meshes**; avoid 195 text labels in 3D. - -- Prefer **instanced** or shared geometry for pins -- Debounce globe rotation callbacks -- Do not load full `Country` objects for every pin — only for `selectedCountry` -- If frame rate drops on low-end devices: show pins for trending + region filter only, or reduce pin count with a “Show all” chip (document in PR) - -## UI chrome (reuse v1 — do not redesign) - -Match `map-screen-ui.png` for everything **except** the map viewport: - -- Header, title, subtitle, search, filter chips, preview card, FAB, tab bar spacing -- 8pt grid, gold `#fbbf24` accents, dark backgrounds -- `constants/images.ts` for logo and avatar - -## Styling rules - -- **NativeWind** on layout wrappers around the globe -- **StyleSheet / inline** for `GLView`, R3F `Canvas`, and anything in `AGENTS.md` map exceptions -- No `className` on `SafeAreaView` - -## Out of scope - -- Country border polygons / choropleth extrusion on the globe +- Country border polygons / choropleth on the globe - Real-time trending from backend -- Server-side clustering (still N/A) - AR / camera passthrough globe -- Music-reactive or weather globe shaders -- Replacing Explore feed or Home dashboard -- New `GET` endpoints or map-specific filters on the API +- New `GET` endpoints - Shipping large CDN GLB assets (>2MB) without user approval -- Removing v1 2D map entirely unless product explicitly wants 3D-only (prefer toggle) - -## Acceptance criteria -- Map tab renders an interactive **3D globe** in `"3d"` mode (spin + zoom) -- Pins align with correct lat/lng (spot-check: Japan, Brazil, Iceland) -- Tapping a pin opens the **same** preview card as v1 with correct stats -- AI fun fact still loads via `GET /country/:name` after selection -- Save, Explore Country, Search overlay, and Random Country FAB behave like v1 -- Selected pin has visible gold emphasis -- 2D ↔ 3D toggle works if implemented (both modes usable) -- Loading / error states for map countries do not crash the GL view -- `npm run lint` passes -- New 3D dependencies only added after user approval -- Tested on at least one physical device OR documented simulator limitation +## Final acceptance (after Step 3) -## Testing - -```bash -# Terminal 1 — backend + Redis -# Terminal 2 -npx expo start -``` - -1. Open **Map** tab — globe visible in 3D mode; countries loaded -2. Spin globe — smooth rotation; release — inertia stops -3. Pinch / zoom controls — camera distance changes -4. Tap **Japan** (or known coords) — preview card + AI fact; pin highlighted -5. Tap **Explore Country** — Explore opens on that country -6. Tap **Random Country** — new selection + camera faces pin -7. Toggle **2D** (if built) — flat map works; toggle back to 3D -8. Open search → pick country → Explore (unchanged) -9. Stop backend — map error UI; GL does not white-screen +See [`13c-map-v2-globe-ux.md`](./13c-map-v2-globe-ux.md) for the full checklist. ## Teaching notes (for students) -Document in code comments or README snippet: +After Step 3, document briefly: 1. Why `latlng` becomes a 3D vector (spherical coordinates) 2. What `expo-gl` provides vs DOM WebGL 3. How R3F’s `Canvas` maps to React Native 4. Tradeoff: 2D maps (`react-native-maps`) vs 3D globe (Three.js) -## Next steps - -After this prompt: +## Next steps (post v2) 1. Persist `mapMode` + last camera pose in AsyncStorage 2. Region chip filters that hide/show pin subsets on the globe diff --git a/prompts/13a-map-v2-globe-debug.md b/prompts/13a-map-v2-globe-debug.md new file mode 100644 index 0000000..3219889 --- /dev/null +++ b/prompts/13a-map-v2-globe-debug.md @@ -0,0 +1,123 @@ +Read AGENTS.md first and follow it strictly. + +Parent: [`13-map-v2-3d-globe.md`](./13-map-v2-3d-globe.md) · Previous: [`12-map-ui.md`](./12-map-ui.md) · Next: [`13b-map-v2-globe-data-pins.md`](./13b-map-v2-globe-data-pins.md) + +## Step 1 — Debug Globe Mode + +**Goal:** Prove WebGL + R3F works on device before any API or UX complexity. + +Build **only**: + +- Simple sphere (dark material) +- **Ambient** + **directional** light +- `OrbitControls` (drag to spin, pinch / zoom distance) +- **3–5 fake pins** at hardcoded lat/lng (e.g. Japan, Brazil, Iceland, USA, Nigeria) + +Do **not** implement yet: backend fetch, `latlng-to-sphere` lib, preview card wiring, random FAB, 2D toggle, selection highlight, or `fetchCountryByName`. + +If this step works, everything else becomes easy. + +## Prerequisites + +- `prompts/12-map-ui.md` completed — Map tab shell exists (header, chips, card slot, FAB area) +- User approved install of 3D stack (see parent prompt) + +## Dependencies + +```bash +npx expo install expo-gl three expo-three +npx expo install @react-three/fiber @react-three/drei +``` + +Do **not** add other 3D libraries in this step. + +## Files to create / touch + +| Path | Purpose | +| -------------------------------------- | ---------------------------------------------------- | +| `components/map/globe-view.tsx` | `Canvas`, sphere mesh, lights, `OrbitControls`, pins | +| `components/map/globe-country-pin.tsx` | Minimal pin mesh (gold sphere); `name` prop only | +| `app/(tabs)/map.tsx` | Replace 2D `MapView` **viewport** with `` | + +Keep v1 chrome on screen (header, chips, preview card, FAB) — they can stay **unwired** to the globe for now. Card may show previous v1 selection or empty; that is OK. + +Optional: `metro.config.js` / asset loader tweaks if required for GL (follow expo-three docs for your SDK). + +## Globe mesh + +- `Sphere` (or `mesh` + `SphereGeometry`), radius `1` +- Material: deep gray `#1a1a2e` / near-black; optional subtle emissive gold rim +- No texture required in Step 1 (add in a later stretch) + +## Lighting + +```tsx + + +``` + +Tune until sphere and pins are clearly visible on a physical device. + +## Orbit controls + +- `@react-three/drei` `OrbitControls` +- Enable rotate + zoom; damped inertia (`enableDamping`, `dampingFactor`) +- Sensible `minDistance` / `maxDistance` (e.g. `1.4` – `4`) +- Default camera faces Atlantic-ish so fake pins are visible on first load + +## Fake pins (hardcoded) + +Define a small constant in `globe-view.tsx` or `data/globe-debug-pins.ts`: + +```ts +const DEBUG_PINS = [ + { name: "Japan", lat: 36.2, lng: 138.25 }, + { name: "Brazil", lat: -14.2, lng: -51.9 }, + { name: "Iceland", lat: 64.9, lng: -19.0 }, + { name: "United States", lat: 37.1, lng: -95.7 }, + { name: "Nigeria", lat: 9.08, lng: 8.67 }, +]; +``` + +For Step 1, inline the same spherical math inside `globe-view.tsx` (copy from parent prompt’s coordinate section) — **do not** create `lib/latlng-to-sphere.ts` until Step 2. + +Place each pin at `radius * 1.02` above the surface to avoid z-fighting. + +Pin `onPress` (if wired): `console.log(name)` only — no store updates required. + +## Styling rules + +- **NativeWind** on layout wrappers around the globe +- **StyleSheet / inline** for `GLView`, R3F `Canvas` (per AGENTS.md exceptions) +- Globe fills the same flex area the 2D map used; do not redesign header or card + +## Performance (Step 1) + +Five pins is trivial. Confirm smooth rotation before proceeding. + +## Acceptance criteria + +- [ ] Map tab shows a **3D sphere** instead of (or overlaying) the 2D map viewport +- [ ] **Ambient + directional** lights visible; sphere not flat black +- [ ] **Drag** rotates globe with inertia +- [ ] **Pinch** (or equivalent) changes camera distance +- [ ] **3–5 fake pins** visible on the sphere surface +- [ ] No crash on load; no dependency on backend for globe render +- [ ] Tested on **physical device** OR simulator limitation documented +- [ ] `npm run lint` passes + +## Testing + +```bash +npx expo start +``` + +1. Open **Map** tab — dark sphere visible (backend may be off) +2. Drag — globe spins smoothly +3. Pinch — zoom in/out +4. Visually confirm ~5 pins on recognizable regions +5. Optional: tap pin — log in Metro console + +## Do not start Step 2 until + +Spin + zoom feel stable for 30+ seconds of interaction without GL errors or white screen. diff --git a/prompts/13b-map-v2-globe-data-pins.md b/prompts/13b-map-v2-globe-data-pins.md new file mode 100644 index 0000000..ad58547 --- /dev/null +++ b/prompts/13b-map-v2-globe-data-pins.md @@ -0,0 +1,116 @@ +Read AGENTS.md first and follow it strictly. + +Parent: [`13-map-v2-3d-globe.md`](./13-map-v2-3d-globe.md) · Previous: [`13a-map-v2-globe-debug.md`](./13a-map-v2-globe-debug.md) · Next: [`13c-map-v2-globe-ux.md`](./13c-map-v2-globe-ux.md) + +## Step 2 — Real data pins + +**Goal:** Replace fake pins with **backend countries** at correct `latlng` positions. Globe behavior from Step 1 must stay stable. + +Build: + +- `lib/latlng-to-sphere.ts` — shared conversion helper +- Wire `fetchMapCountries` / `useMapStore` → one pin per valid `MapCountry` +- Pin tap → `selectCountry(name)` in store (preview card can still be minimal) + +Do **not** implement yet: camera fly-to animation, random country FAB behavior, gold selection pulse, 2D ↔ 3D toggle, or map control zoom wiring (Step 3). + +## Prerequisites + +- [`13a-map-v2-globe-debug.md`](./13a-map-v2-globe-debug.md) **completed** — debug globe spins and zooms on device +- `prompts-worldloop/07-map-endpoint.md` — `GET /map/countries` stable +- Backend + Redis running locally + +## Files to create / touch + +| Path | Purpose | +| -------------------------------------- | ------------------------------------------------- | +| `lib/latlng-to-sphere.ts` | `latLngToVector3(lat, lng, radius)` + exports | +| `components/map/globe-view.tsx` | Remove debug pins; map `countries` → pins | +| `components/map/globe-country-pin.tsx` | Accept `MapCountry` or `{ name, lat, lng }` | +| `store/use-map-store.ts` | Ensure `countries`, `loadMapCountries`, `selectCountry` used | +| `app/(tabs)/map.tsx` | Call `loadMapCountries()` on mount; pass countries to globe | + +Remove `DEBUG_PINS` constant from Step 1. + +## Coordinate math + +Backend sends WGS84-style `[lat, lng]` on `MapCountry.latlng`. + +```ts +// lib/latlng-to-sphere.ts +export function latLngToVector3( + lat: number, + lng: number, + radius: number, +): [number, number, number] { + const phi = (90 - lat) * (Math.PI / 180); + const theta = (lng + 180) * (Math.PI / 180); + const x = -(radius * Math.sin(phi) * Math.cos(theta)); + const z = radius * Math.sin(phi) * Math.sin(theta); + const y = radius * Math.cos(phi); + return [x, y, z]; +} +``` + +- Place pins at `radius * 1.02` +- Skip countries with missing or invalid `latlng` + +## Data wiring + +### Map list + +- `loadMapCountries()` → `fetchMapCountries()` → `countries: MapCountry[]` +- Globe renders pins from store; show loading overlay **outside** `Canvas` (do not unmount GL on fetch) + +### Selection (minimal) + +- Pin `onPress` → `selectCountry(name)` — sets `selectedCountry` in store +- Preview card may appear with v1 layout but **Step 3** owns full detail fetch, highlight, and FAB — for Step 2, verifying store updates is enough + +### Do not duplicate state + +Reuse existing `useMapStore` fields from v1. No second countries array. + +## Country pins + +- One pin per valid `MapCountry` (~195 simple meshes is OK) +- Default: small gold sphere or shared geometry +- **No** selection scale/emissive yet (Step 3) +- **No** trending badge on pin mesh yet (Step 3 / card only) + +Prefer shared geometry / instancing if you already know how; otherwise simple mapped meshes are fine for teaching. + +## Performance guidelines + +- Do not load full `Country` objects for every pin — list items only +- Do not render country name labels in 3D +- If frame rate drops: cap pins or filter by region (document in PR); do not block Step 2 on this unless device is unusable + +## Acceptance criteria + +- [ ] Debug fake pins **removed**; pins come from `GET /map/countries` +- [ ] `latLngToVector3` lives in `lib/latlng-to-sphere.ts` and is used by globe +- [ ] Spot-check alignment: **Japan**, **Brazil**, **Iceland** look correct on sphere +- [ ] Invalid `latlng` entries skipped without crash +- [ ] Tap pin → `selectedCountry` updates in store +- [ ] Loading / error states for map countries do not crash or white-screen the GL view +- [ ] Step 1 orbit controls still work (spin + zoom) +- [ ] `npm run lint` passes + +## Testing + +```bash +# Terminal 1 — backend + Redis +# Terminal 2 +npx expo start +``` + +1. Open **Map** — globe + pins after countries load +2. Spin globe — all pins move with sphere; no z-fighting flicker +3. Tap **Japan** — store shows selected name (card may be partial) +4. Stop backend — error UI outside GL; globe does not white-screen +5. Restart backend — retry loads pins again + +## Do not start Step 3 until + +All countries render and pin taps reliably update selection without GL crashes. diff --git a/prompts/13c-map-v2-globe-ux.md b/prompts/13c-map-v2-globe-ux.md new file mode 100644 index 0000000..658536a --- /dev/null +++ b/prompts/13c-map-v2-globe-ux.md @@ -0,0 +1,141 @@ +Read AGENTS.md first and follow it strictly. + +Parent: [`13-map-v2-3d-globe.md`](./13-map-v2-3d-globe.md) · Previous: [`13b-map-v2-globe-data-pins.md`](./13b-map-v2-globe-data-pins.md) + +Reference: `prompt_material/map-screen-ui.png` (chrome + bottom card — reuse from v1) + +## Step 3 — UX features + +**Goal:** Match v1 Map **product behavior** on top of the stable globe from Steps 1–2. + +Implement **only after** real pins and selection work: + +- Full **country preview card** (stats, AI fact, Save, Explore Country) +- **Selected pin** gold highlight / pulse +- **Random Country** FAB + **camera animation** to face pin +- Optional: **2D ↔ 3D toggle**, map control overlays, tap empty space to dismiss + +## Prerequisites + +- [`13b-map-v2-globe-data-pins.md`](./13b-map-v2-globe-data-pins.md) **completed** +- `prompts/10c-search-ui.md` — search overlay + `openCountryInExplore` +- Backend running for `GET /country/:name` + +## Files to create / touch + +| Path | Purpose | +| -------------------------------------- | ----------------------------------------------------------- | +| `components/map/map-canvas.tsx` | Renders `GlobeView` or v1 `MapView` from `mapMode` | +| `components/map/globe-view.tsx` | Selection styling, `focusCountryOnGlobe`, dismiss tap | +| `components/map/globe-country-pin.tsx` | Selected scale + emissive gold; optional ring | +| `components/map/map-controls.tsx` | Zoom +/-, compass reset for 3D (adapt v1 overlays) | +| `store/use-map-store.ts` | `mapMode`, `setMapMode`, `focusCountryOnGlobe(name)` | +| `app/(tabs)/map.tsx` | Full wiring: card, FAB, header globe icon, search unchanged | + +Keep v1 components unchanged except wiring: `MapCountryPreviewCard`, `RandomCountryFab`, `MapHeader`, `SearchOverlay`. + +## Selection + preview card + +Same as v1: + +- `selectCountry(name)` → `fetchCountryByName` for AI block in preview card +- Card UI — **copy from v1**; do not redesign +- Tap empty globe space → optional `selectCountry(null)` to dismiss card + +## Selected pin (visual) + +- **Selected:** scale up + brighter emissive gold + optional ring +- Match Peru / gold emphasis from 2D design, adapted to 3D +- **Trending:** badge in preview card only (same list as v1: `constants/trending-countries.ts`) — avoid DOM inside `Canvas` + +## Camera animation + +`focusCountryOnGlobe(name)`: + +- Resolve country `latlng` → target on sphere +- Animate `OrbitControls` target + camera so pin faces the user +- Used by: pin selection (optional subtle nudge), **Random Country** FAB (required) + +Keep animation short and interruptible if user drags mid-flight. + +## Integrations (unchanged from v1) + +| Action | Implementation | +| --------------- | ----------------------------------------------- | +| Save | `useSavedCountriesStore.toggleSaved` | +| Explore Country | `openCountryInExplore(detailOrMinimalCountry)` | +| Search bar | `useSearchUiStore` + `SearchOverlay` | +| Random Country | `selectRandomCountry()` + `focusCountryOnGlobe` | +| Trending badge | `constants/trending-countries.ts` | + +No new backend routes. + +## 2D ↔ 3D toggle (recommended) + +- `useMapStore.mapMode`: `"2d" | "3d"` (default `"3d"` after v2 ships, or `"2d"` until flipped — document choice) +- Header left **globe icon** → `setMapMode` +- `map-canvas.tsx`: + - `"2d"` → v1 `react-native-maps` `MapView` + - `"3d"` → `GlobeView` +- Persist `mapMode` in AsyncStorage (optional stretch) + +## Map controls (3D) + +| Control | 3D behavior | +| --------------- | ----------------------------------------------------- | +| Zoom +/- | Adjust `OrbitControls` min/max distance or camera FOV | +| Compass / reset | Reset camera to default world-facing pose | +| Legend | Same stub as v1 (“Gold pins = countries”) | + +Position controls over `GLView` with absolute layout (NativeWind on wrapper `View`, not on `GLView`). + +## UI chrome (reuse v1 — do not redesign) + +Match `map-screen-ui.png` for everything **except** the map viewport: + +- Header, title, subtitle, search, filter chips, preview card, FAB, tab bar spacing +- 8pt grid, gold `#fbbf24` accents, dark backgrounds +- `constants/images.ts` for logo and avatar + +Users should not lose any v1 actions: search, save, explore, random country, trending badge on select pins. + +## Acceptance criteria + +- [ ] Tapping a pin opens the **same** preview card as v1 with correct stats +- [ ] AI fun fact loads via `GET /country/:name` after selection +- [ ] Save, Explore Country, Search overlay behave like v1 +- [ ] **Random Country** FAB selects random pin + **animates camera** to face it +- [ ] Selected pin has visible **gold emphasis** +- [ ] 2D ↔ 3D toggle works if implemented (both modes usable) +- [ ] Map controls work in 3D mode (zoom / reset at minimum) +- [ ] Loading / error states do not crash GL view +- [ ] `npm run lint` passes +- [ ] Tested on physical device OR documented simulator limitation + +## Testing + +```bash +# Terminal 1 — backend + Redis +# Terminal 2 +npx expo start +``` + +1. Open **Map** — globe + countries loaded +2. Spin + zoom — smooth (regression from Step 1) +3. Tap **Japan** — preview card + AI fact; pin highlighted +4. Tap **Explore Country** — Explore opens on that country +5. Tap **Random Country** — new selection + camera faces pin +6. Toggle **2D** (if built) — flat map works; toggle back to 3D +7. Open search → pick country → Explore (unchanged) +8. Stop backend — map error UI; GL does not white-screen + +## Next steps (post v2) + +**Step 4 (recommended):** [`13d-map-v3-ui-ux-upgrade.md`](./13d-map-v3-ui-ux-upgrade.md) — one-tap preview, unified dismiss, remove stacked bottom chrome. + +See parent [`13-map-v2-3d-globe.md`](./13-map-v2-3d-globe.md): + +- Persist `mapMode` + camera pose +- Region chip filters hide/show pin subsets +- Saved countries screen +- Optional globe texture asset diff --git a/prompts/13d-map-v3-ui-ux-upgrade.md b/prompts/13d-map-v3-ui-ux-upgrade.md new file mode 100644 index 0000000..1eed13a --- /dev/null +++ b/prompts/13d-map-v3-ui-ux-upgrade.md @@ -0,0 +1,410 @@ +Read AGENTS.md first and follow it strictly. + +Parent: [`13-map-v2-3d-globe.md`](./13-map-v2-3d-globe.md) · Previous: [`13c-map-v2-globe-ux.md`](./13c-map-v2-globe-ux.md) + +Reference: `prompt_material/map-screen-ui.png`, `prompts/12-map-ui.md`, `prompts/13c-map-v2-globe-ux.md` + +## Step 4 — Map v3 UI/UX upgrade (focus-first, opt-in preview) + +**Goal:** Make **map exploration** the primary experience on the Map tab. Country preview is **opt-in**, not forced. Split Map (spatial discovery) from Explore (content consumption). + +This is a **behavior + wiring** prompt, not a visual redesign of the preview card, region chrome, or pin rendering. + +## Product stance + +| Tab | Primary job | +| --- | ----------- | +| **Explore** | Country content — feed, facts, media, low-friction consumption | +| **Map** | Spatial discovery — continents, geography, wandering the globe | + +On Map, the map stays king. Preview feels like **reward**, not **interruption**. + +## Prerequisites + +- [`13c-map-v2-globe-ux.md`](./13c-map-v2-globe-ux.md) **completed** +- Globe + 2D map both usable (`mapMode`, preview card, FAB, search) +- Backend running for `GET /country/:name` + +--- + +## Problem (current behavior) + +After v2 continent-focus and v3 one-tap preview work, the Map tab over-indexes on the preview sheet: + +| Issue | Current behavior | Expected | +| ----- | ---------------- | -------- | +| **Forced preview** | Pin tap / FAB / shuffle open preview immediately | Default to **country focus** only; preview is opt-in | +| **Map feels secondary** | Tab bar hides, dim overlay, full sheet on most taps | Map stays interactive until user asks for details | +| **No teachable moment** | Users may not understand focus vs preview | One-time FAB hint teaches “tap again for details” | +| **Explore vs Map blur** | Map behaves like a launcher for Explore content | Map = where; Explore = what | + +--- + +## Target UX model + +### Navigation hierarchy + +```txt +World → Continent → Country focus → Preview (opt-in) +``` + +| Level | Map state | Bottom UI | +| ----- | --------- | --------- | +| **World** | No `focusedRegion`, no `activeCountry` | FAB + map controls; featured chips | +| **Continent** | `focusedRegion` set, no `activeCountry` | `MapRegionChrome` (continent label \| World) + filter chips | +| **Country focus** | `activeCountry` set, preview **closed** | Lightweight **country focus pill** (name + “Details →”); map chrome stays visible | +| **Country preview** | `activeCountry` + preview open | `MapCountryPreviewCard` only — tab bar hidden, map dimmed | + +### Core rules + +1. **First tap on pin/marker → focus only (no preview).** + - Camera flight + selection + pin highlight. + - Tab bar, FAB, and map controls **stay visible**. + - No dim overlay, no preview sheet. + +2. **Second tap on the same focused pin → open preview.** + - User explicitly opts into country details. + - Same country + preview already open → no-op. + +3. **Tap a different pin while focused → focus the new country (no preview).** + +4. **Tap empty map / ocean while focused (no preview) → clear focus.** + - Deselect country; return to continent or world browsing as appropriate. + +5. **Random Country FAB → focus only (not preview).** + - Camera flies to a random country; pin highlights. + - **First FAB use ever:** show a one-time coach mark (see below). + - Subsequent FAB taps: focus only, no hint. + +6. **Preview is never auto-opened on timeout.** + - Do not “help” the user by opening preview after N seconds. + - Respect opt-in philosophy. + +7. **Shuffle inside an open preview → stay in preview mode.** + - User is already in details mode; next country opens preview immediately. + +8. **High-intent Explore paths stay in Explore.** + - Explore tab feed, action rail “open in Explore” → Explore screen. + - Map entry from search / external deep link → **focus only** unless UI explicitly says “with details”. + +9. **While preview is open:** + - Hide `MapRegionChrome` and country focus pill. + - Preview card owns dismiss + primary actions (× always visible). + - Tab bar hidden; map controls / FAB hidden. + +10. **Unified dismiss when preview is open:** + - ×, “Back to Continent” (when applicable), tap empty map → `dismissCountryPreview()`. + - Clears preview **and** deselects country. + - Continent browsing context → zoom to continent, keep `focusedRegion`. + - World browsing context → clear focus, stay at world zoom. + +--- + +## Interaction spec + +### Country tap (`focusCountry`) + +```txt +onCountryPress(country): + if same country && preview open → no-op + if same country && focused (no preview) → openCountryPreview(country) + else → focusCountryOnMap(country) +``` + +`focusCountryOnMap` must: + +1. Cancel continent intent if pending +2. `syncRegionFocusForCountry(country)` +3. `selectCountryOnMap(country, source)` +4. Animate camera to country (`flyMapToCountry` / `focusCountryOnGlobe`) +5. Do **not** set `previewCountryName` +6. Light haptic + +`openCountryPreview` must: + +1. `setPreviewCountryName(country.name)` — preview opens +2. Light haptic +3. Optionally re-center camera if already focused (usually no-op) + +### Country focus pill (new lightweight chrome) + +When `activeCountry` is set and preview is **closed**, show a small anchored pill above map controls: + +```txt +🇯🇵 Japan · Details → +``` + +| Element | Action | +| ------- | ------ | +| Pill tap / “Details →” | `openCountryPreview(activeCountry)` | +| × on pill (optional) | Clear focus (`clearCountryFocus()`) — same as tap ocean | + +Keep it minimal — **not** the full preview card. Reuse styling patterns from region chrome / action stack (dark pill, rounded). + +If pill feels redundant once users learn two-tap, it can stay as the explicit affordance for accessibility. + +### One-time Random FAB coach mark + +Show **once**, on the **first ever** Random Country FAB press. Persist `hasSeenRandomCountryHint` in `use-map-ui-store` (same pattern as `hasSeenMapOnboarding`). + +**First FAB flow:** + +1. Pick random country → `focusCountryOnMap(pick, "fab")` +2. After camera starts / lands, show anchored hint above FAB: + + ```txt + Tap the country for details + ``` + + Or with country name: + + ```txt + 🇯🇵 Japan · Tap pin for details + ``` + +3. Hint auto-dismisses after ~4s (no preview auto-open) +4. Set `hasSeenRandomCountryHint = true` + +**Subsequent FAB taps:** focus only, no hint. + +Do **not** show this hint on map pin taps, shuffle-in-preview, or search entry. + +### Preview card dismiss (×, tap-outside, Back to Continent) + +Single handler: `dismissCountryPreview()` + +Track whether user entered from continent browsing vs world (`previewDismissToContinent` flag set in `focusCountryOnMap` when `focusedRegion` was already set before sync). + +| Context | Actions | +| ------- | ------- | +| Continent browsing (`previewDismissToContinent`) | Clear preview, clear `activeCountry`, zoom to continent, keep `focusedRegion`, show region chrome | +| World browsing | Clear preview, clear `activeCountry`, clear `focusedRegion`, reset to world view | + +- × button → `dismissCountryPreview()` +- Tap empty map while preview open → `dismissCountryPreview()` +- “Back to Continent” in card → same as × when continent context + +### Preview card actions (unchanged layout from v3) + +Keep Shuffle + Explore styling (`actionStack` pill). Add continent back when applicable: + +| Segment | When shown | Action | +| ------- | ---------- | ------ | +| **Back** (arrow + region label) | continent context | `dismissCountryPreview()` | +| **Shuffle** | Always (when pool available) | `advanceToCountryPreview(next)` — opens preview for next country | +| **Explore** | Always | `openCountryInExplore` | + +Order (left → right): `Back` (if region) \| divider \| `Shuffle` \| divider \| `Explore` + +### Region chrome (`MapRegionChrome`) + +Visible only when: + +```txt +!!focusedRegion && !activeCountry && !isPreviewOpen +``` + +- **Continent segment** → recenter on focused continent (unchanged) +- **World segment** → `handleBackToWorld` (unchanged) + +### Random / featured / external entry + +| Entry path | Default behavior | +| ---------- | ---------------- | +| Map pin tap (1st) | `focusCountryOnMap` | +| Map pin tap (2nd, same) | `openCountryPreview` | +| Random FAB | `focusCountryOnMap` (+ one-time hint) | +| For You / New Activity chips | `focusCountryOnMap` | +| Search → open on map | `focusCountryOnMap` | +| Explore action rail → Map | `focusCountryOnMap` | +| Shuffle **in preview** | `advanceToCountryPreview` (preview stays open) | + +Remove or bypass `spotlightActive` as a separate UI mode. Pin pulse during camera flight is fine. + +### Onboarding copy update + +Update `MapOnboardingSheet` subtitle from: + +```txt +Tap a country to see content from that region. +``` + +To: + +```txt +Tap a country to focus · Tap again for details +``` + +Optionally add a hint row: dice icon + “Random country”. + +### Layout / spacing + +**Country focus (no preview):** + +```txt +countryFocusPillBottom = mapOverlayBottom // above controls + FAB +tabBar = visible +mapControls / FAB = visible +``` + +**Preview open:** + +```txt +previewBottomOffset = 0 +previewSheetBottomInset = Math.max(insets.bottom, 16) +tabBar = hidden +mapControls / FAB = hidden +``` + +No stacked external chrome while preview is open. Do not revive floating `MapCountryChrome` for preview dismiss — back navigation lives in the preview card. + +--- + +## State summary + +| Variable | World | Continent | Country focus | Preview open | +| -------- | ----- | --------- | ------------- | ------------ | +| `focusedRegion` | `null` | set | set | set | +| `activeCountry` | `null` | `null` | set | set | +| `previewCountryName` | `null` | `null` | `null` | matches active country | +| `spotlightActive` | `false` | `false` | `false` | `false` | +| `MapRegionChrome` | hidden | visible | hidden | hidden | +| Country focus pill | hidden | hidden | visible | hidden | +| Tab bar | visible | visible | visible | hidden | +| Map controls / FAB | visible | visible | visible | hidden | + +--- + +## Files to create / touch + +| Path | Purpose | +| ---- | ------- | +| `app/(tabs)/map.tsx` | Split `focusCountryOnMap` vs `openCountryPreview`; focus-first tap/FAB; unified dismiss; country focus pill | +| `components/map/map-country-focus-pill.tsx` | **New** — lightweight “Details →” chrome while focused | +| `components/map/map-random-country-hint.tsx` | **New** — one-time FAB coach mark (or inline in map.tsx if tiny) | +| `components/map/map-country-preview-card.tsx` | × always; Back to Continent in action row (keep v3 layout) | +| `components/map/map-onboarding-sheet.tsx` | Updated copy for focus-first model | +| `lib/open-country-on-map.ts` | External entry → focus only (not preview) | +| `store/use-map-ui-store.ts` | Add `hasSeenRandomCountryHint` + persist | +| `store/use-experience-store.ts` | Stop using `spotlightActive` as UI gate | + +Do **not** redesign: + +- `MapRegionChrome` visuals +- Preview card typography, colors, stat layout +- Globe pin rendering, marker reveal, continent boundaries + +--- + +## Helpers to extract (recommended) + +In `app/(tabs)/map.tsx`: + +```ts +focusCountryOnMap(pick: MapCountry, source: SelectionSource, options?: { animate?: boolean }) +openCountryPreview(pick: MapCountry) +clearCountryFocus() +dismissCountryPreview() +advanceToCountryPreview(pick: MapCountry) // shuffle while preview open +``` + +Both 2D and 3D paths must call these — avoid duplicating focus + preview logic across FAB, tap, shuffle, and external entry. + +--- + +## Out of scope + +- Redesigning preview card visuals or adding Save button if not already wired +- Swipe-down to dismiss preview (optional stretch) +- Auto-opening preview after hint timeout +- New backend endpoints +- Region chip filter logic changes +- Persisting camera pose / map mode + +--- + +## Acceptance criteria + +- [ ] **First tap** on pin/marker focuses country (camera + highlight) — **no preview** +- [ ] **Second tap** on same focused pin opens preview with correct stats +- [ ] AI fun fact loads via `GET /country/:name` after preview opens +- [ ] Tab bar and map controls **stay visible** during country focus (no preview) +- [ ] Country focus pill shows name + “Details →” while focused +- [ ] Random FAB focuses country — does **not** open preview +- [ ] First-ever FAB shows one-time hint; subsequent FAB taps do not +- [ ] Hint auto-dismisses; preview does **not** auto-open on timeout +- [ ] Shuffle **inside preview** advances to next country with preview open +- [ ] Preview card shows **×** in all preview entry paths +- [ ] “Back to Continent” inside preview card when continent context +- [ ] Dismiss (×, Back to Continent, tap empty map) clears preview **and** deselects country +- [ ] Tap ocean while focused (no preview) clears focus only +- [ ] Search / external map entry focuses country — does not force preview +- [ ] 2D and 3D modes behave the same for focus / preview / dismiss +- [ ] Onboarding copy reflects focus-first model +- [ ] `npm run lint` passes +- [ ] Tested on device: no clipped chrome on iPhone SE / small Android + +--- + +## Testing + +```bash +# Terminal 1 — backend + Redis +# Terminal 2 +npx expo start +``` + +### Map tap flow (focus-first) + +1. Open **Map** → tap continent cluster → continent zoom + region chrome +2. Tap **Japan** → camera flies, pin highlights, **no preview**; tab bar still visible +3. Tap **Japan** again → preview opens +4. Tap **Explore** → Explore opens on that country +5. Return to Map → tap pin once → focus only +6. Tap pin again → preview open +7. Tap **×** → preview closes, country deselected, region chrome returns +8. Tap **Back to Continent** in card → same result as × + +### World flow + +1. Reset to world view (region chrome → World) +2. Tap a country from world zoom → focus only (no preview) +3. Tap same country again → preview opens +4. Dismiss → world view, no selection, no region chrome + +### FAB / coach mark + +1. Fresh install / reset `hasSeenRandomCountryHint` +2. Tap **Random Country** FAB → flies to country, **no preview** +3. One-time hint appears → auto-dismisses after ~4s +4. Tap FAB again → focus only, **no hint** +5. Tap focused pin → preview opens + +### Shuffle in preview + +1. Open preview on any country +2. Tap **Shuffle** → new country + preview stays open +3. Dismiss → correct zoom tier for continent vs world context + +### 2D ↔ 3D + +1. Repeat focus + preview + dismiss in **3D** mode +2. Toggle **2D** → repeat; behavior must match + +### Regression + +1. Search overlay → pick country → focuses on map (no forced preview) +2. Filter chips on continent → still filter markers +3. Tap empty ocean while focused → clears focus +4. Tap empty ocean while preview open → dismisses preview + selection +5. Map remains usable (pan/zoom) while country is focused + +--- + +## Next steps (post v3) + +- Swipe-down to dismiss preview (optional) +- Persist `mapMode` + last camera pose +- Saved countries screen +- Optional globe texture asset +- A/B: pill vs two-tap-only once analytics exist diff --git a/store/index.ts b/store/index.ts index fef9e90..66ed82d 100644 --- a/store/index.ts +++ b/store/index.ts @@ -1,4 +1,7 @@ export { useCountryFeedStore } from "./use-country-feed-store"; +export { useExperienceStore } from "./use-experience-store"; +export { useIdentityStore } from "./use-identity-store"; +export type { SelectionSource } from "./use-identity-store"; export { useMapStore } from "./use-map-store"; export { useSavedCountriesStore } from "./use-saved-countries-store"; export { useSearchUiStore } from "./use-search-ui-store"; diff --git a/store/use-country-feed-store.ts b/store/use-country-feed-store.ts index a996a69..31020df 100644 --- a/store/use-country-feed-store.ts +++ b/store/use-country-feed-store.ts @@ -1,7 +1,12 @@ import { create } from "zustand"; import { CONTINENTS } from "@/constants/regions"; -import { fetchFeedCountries, fetchSearchCountries } from "@/lib/api"; +import { + filterCountriesForExploreRegion, + normalizeCountriesRegions, +} from "@/lib/app-region"; +import { fetchFeedCountries } from "@/lib/api"; +import { fetchExploreRegionCountries } from "@/lib/explore-region-countries"; import { prefetchFeedHeroImages } from "@/lib/prefetch-feed-heroes"; import type { Country } from "@/types/country"; @@ -12,6 +17,11 @@ const regionFetchPromises = new Map>(); const DEFAULT_LIMIT = 20; type FeedStatus = "idle" | "loading" | "loadingMore" | "error"; +export type FeedSortField = "name" | "population"; +export type FeedSortOrder = "asc" | "desc" | "random"; + +export const DEFAULT_FEED_SORT_FIELD: FeedSortField = "name"; +export const DEFAULT_FEED_SORT_ORDER: FeedSortOrder = "random"; type ForYouSnapshot = { countries: Country[]; @@ -22,7 +32,11 @@ type CountryFeedState = { countries: Country[]; nextCursor: string | null; currentIndex: number; + /** Bumped when opening a country from search/home so Explore remounts at index 0. */ + focusEpoch: number; selectedRegion: string | null; + sortField: FeedSortField | null; + sortOrder: FeedSortOrder | null; regionCache: Record; forYouSnapshot: ForYouSnapshot | null; status: FeedStatus; @@ -33,6 +47,8 @@ type CountryFeedState = { ) => Promise; loadMoreFeed: (limit?: number) => Promise; setRegionFilter: (region: string | null) => Promise; + setSort: (field: FeedSortField, order: FeedSortOrder) => void; + clearSort: () => void; setCurrentIndex: (index: number) => void; focusCountryInFeed: (country: Country) => void; getCurrentCountry: () => Country | undefined; @@ -43,23 +59,88 @@ function isLoading(status: FeedStatus): boolean { return status === "loading" || status === "loadingMore"; } +function shuffleCountries(items: T[]): T[] { + const list = [...items]; + for (let i = list.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [list[i], list[j]] = [list[j], list[i]]; + } + return list; +} + +function sortCountries( + countries: Country[], + sortField: FeedSortField | null, + sortOrder: FeedSortOrder | null, +): Country[] { + const field = sortField ?? DEFAULT_FEED_SORT_FIELD; + const order = sortOrder ?? DEFAULT_FEED_SORT_ORDER; + + if (order === "random") { + return shuffleCountries(countries); + } + + const direction = order === "asc" ? 1 : -1; + return [...countries].sort((a, b) => { + if (field === "population") { + return (a.population - b.population) * direction; + } + return a.name.localeCompare(b.name) * direction; + }); +} + +/** Keep search / deep-link focus when async feed or region loads finish. */ +function mergeFetchedWithFocusedCountry( + fetched: Country[], + priorCountries: Country[], + priorIndex: number, + sortField: FeedSortField | null, + sortOrder: FeedSortOrder | null, +): { countries: Country[]; currentIndex: number } { + const sortedFetched = sortCountries(fetched, sortField, sortOrder); + + if (priorCountries.length === 0) { + return { countries: sortedFetched, currentIndex: 0 }; + } + + const focused = priorCountries[priorIndex] ?? priorCountries[0]; + if (!focused) { + return { countries: sortedFetched, currentIndex: 0 }; + } + + const focusedInFetched = sortedFetched.find((c) => c.name === focused.name); + if (!focusedInFetched) { + return { countries: sortedFetched, currentIndex: 0 }; + } + + const withoutFocused = sortedFetched.filter((c) => c.name !== focused.name); + + return { + countries: [focusedInFetched, ...withoutFocused], + currentIndex: 0, + }; +} + function cancelRegionPrefetch(): void { regionPrefetchGeneration += 1; } async function ensureRegionCountries(region: string): Promise { const cached = useCountryFeedStore.getState().regionCache[region]; - if (cached) return cached; + if (cached !== undefined) { + const filtered = filterCountriesForExploreRegion(cached, region); + if (filtered.length > 0) return filtered; + } const inFlight = regionFetchPromises.get(region); if (inFlight) return inFlight; - const promise = fetchSearchCountries(undefined, region) - .then(({ data }) => { + const promise = fetchExploreRegionCountries(region) + .then((countries) => { useCountryFeedStore.setState((state) => ({ - regionCache: { ...state.regionCache, [region]: data }, + regionCache: { ...state.regionCache, [region]: countries }, })); - return data; + return countries; }) .finally(() => { regionFetchPromises.delete(region); @@ -95,7 +176,10 @@ export const useCountryFeedStore = create((set, get) => ({ countries: [], nextCursor: null, currentIndex: 0, + focusEpoch: 0, selectedRegion: null, + sortField: DEFAULT_FEED_SORT_FIELD, + sortOrder: DEFAULT_FEED_SORT_ORDER, regionCache: {}, forYouSnapshot: null, status: "idle", @@ -111,18 +195,29 @@ export const useCountryFeedStore = create((set, get) => ({ } try { + const prior = get(); const { data, nextCursor } = await fetchFeedCountries(undefined, limit); - await prefetchFeedHeroImages(data); + const normalized = normalizeCountriesRegions(data); + await prefetchFeedHeroImages(normalized); + const { sortField, sortOrder } = get(); + const feedTail = sortCountries(normalized, sortField, sortOrder); + const { countries, currentIndex } = mergeFetchedWithFocusedCountry( + feedTail, + prior.countries, + prior.currentIndex, + sortField, + sortOrder, + ); set({ - countries: data, + countries, nextCursor, - currentIndex: 0, + currentIndex, selectedRegion: null, - forYouSnapshot: { countries: data, nextCursor }, + forYouSnapshot: { countries: feedTail, nextCursor }, status: "idle", error: null, }); - void prefetchFeedHeroImages(data.slice(2)); + void prefetchFeedHeroImages(countries.slice(1, 3)); prefetchRegionsSequentially(null); } catch (err) { set({ @@ -141,9 +236,10 @@ export const useCountryFeedStore = create((set, get) => ({ if (snapshot && snapshot.countries.length > 0) { await prefetchFeedHeroImages(snapshot.countries); if (requestId !== regionFilterGeneration) return; + const { sortField, sortOrder } = get(); set({ - countries: snapshot.countries, + countries: sortCountries(snapshot.countries, sortField, sortOrder), nextCursor: snapshot.nextCursor, currentIndex: 0, selectedRegion: null, @@ -159,24 +255,36 @@ export const useCountryFeedStore = create((set, get) => ({ return; } - if (get().selectedRegion === region) return; + if (get().selectedRegion === region && get().status !== "error") return; - if (get().selectedRegion === null && get().countries.length > 0) { - const { countries, nextCursor } = get(); - set({ - forYouSnapshot: { countries, nextCursor }, - }); + if (get().selectedRegion === null) { + const { forYouSnapshot, nextCursor } = get(); + if (forYouSnapshot) { + set({ forYouSnapshot: { ...forYouSnapshot, nextCursor } }); + } else if (get().countries.length > 0) { + set({ + forYouSnapshot: { countries: get().countries, nextCursor }, + }); + } } const cached = get().regionCache[region]; if (cached) { await prefetchFeedHeroImages(cached); if (requestId !== regionFilterGeneration) return; + const state = get(); + const { countries, currentIndex } = mergeFetchedWithFocusedCountry( + cached, + state.countries, + state.currentIndex, + state.sortField, + state.sortOrder, + ); set({ - countries: cached, + countries, nextCursor: null, - currentIndex: 0, + currentIndex, selectedRegion: region, status: "idle", error: null, @@ -199,16 +307,24 @@ export const useCountryFeedStore = create((set, get) => ({ await prefetchFeedHeroImages(data); if (requestId !== regionFilterGeneration) return; + const state = get(); + const { countries, currentIndex } = mergeFetchedWithFocusedCountry( + data, + state.countries, + state.currentIndex, + state.sortField, + state.sortOrder, + ); set({ - countries: data, + countries, nextCursor: null, - currentIndex: 0, + currentIndex, selectedRegion: region, status: "idle", error: null, }); - void prefetchFeedHeroImages(data.slice(2, 6)); + void prefetchFeedHeroImages(countries.slice(0, 4)); prefetchRegionsSequentially(region); } catch (err) { if (requestId !== regionFilterGeneration) return; @@ -236,11 +352,28 @@ export const useCountryFeedStore = create((set, get) => ({ nextCursor, limit, ); + const normalized = normalizeCountriesRegions(data); const { countries } = get(); const existingNames = new Set(countries.map((c) => c.name)); - const uniqueNew = data.filter((c) => !existingNames.has(c.name)); + const uniqueNew = normalized.filter((c) => !existingNames.has(c.name)); set((state) => { - const nextCountries = [...state.countries, ...uniqueNew]; + const appended = [...state.countries, ...uniqueNew]; + const nextCountries = + (state.sortOrder ?? DEFAULT_FEED_SORT_ORDER) === "random" + ? appended + : sortCountries( + appended, + state.sortField, + state.sortOrder, + ); + const snapshotTail = state.forYouSnapshot + ? sortCountries( + [...state.forYouSnapshot.countries, ...uniqueNew], + state.sortField, + state.sortOrder, + ) + : sortCountries(uniqueNew, state.sortField, state.sortOrder); + return { countries: nextCountries, nextCursor: newCursor, @@ -249,7 +382,7 @@ export const useCountryFeedStore = create((set, get) => ({ ...(state.selectedRegion === null ? { forYouSnapshot: { - countries: nextCountries, + countries: snapshotTail, nextCursor: newCursor, }, } @@ -265,6 +398,28 @@ export const useCountryFeedStore = create((set, get) => ({ } }, + setSort: (field, order) => { + set((state) => ({ + sortField: field, + sortOrder: order, + countries: sortCountries(state.countries, field, order), + currentIndex: 0, + })); + }, + + clearSort: () => { + set((state) => ({ + sortField: DEFAULT_FEED_SORT_FIELD, + sortOrder: DEFAULT_FEED_SORT_ORDER, + countries: sortCountries( + state.countries, + DEFAULT_FEED_SORT_FIELD, + DEFAULT_FEED_SORT_ORDER, + ), + currentIndex: 0, + })); + }, + setCurrentIndex: (index: number) => { const { countries } = get(); if (countries.length === 0) { @@ -276,13 +431,29 @@ export const useCountryFeedStore = create((set, get) => ({ }, focusCountryInFeed: (country: Country) => { - const { countries } = get(); - const existingIndex = countries.findIndex((c) => c.name === country.name); - if (existingIndex >= 0) { - set({ currentIndex: existingIndex }); + const { forYouSnapshot, nextCursor, status, focusEpoch } = get(); + const nextStatus = status === "loading" ? "idle" : status; + + if (!forYouSnapshot || forYouSnapshot.countries.length === 0) { + set({ + countries: [country], + currentIndex: 0, + focusEpoch: focusEpoch + 1, + status: nextStatus, + }); + void get().loadInitialFeed(undefined, { force: true }); return; } - set({ countries: [country, ...countries], currentIndex: 0 }); + + const tail = forYouSnapshot.countries.filter((c) => c.name !== country.name); + + set({ + countries: [country, ...tail], + currentIndex: 0, + focusEpoch: focusEpoch + 1, + nextCursor: forYouSnapshot.nextCursor ?? nextCursor, + status: nextStatus, + }); }, getCurrentCountry: () => { @@ -298,7 +469,10 @@ export const useCountryFeedStore = create((set, get) => ({ countries: [], nextCursor: null, currentIndex: 0, + focusEpoch: 0, selectedRegion: null, + sortField: DEFAULT_FEED_SORT_FIELD, + sortOrder: DEFAULT_FEED_SORT_ORDER, regionCache: {}, forYouSnapshot: null, status: "idle", diff --git a/store/use-experience-store.ts b/store/use-experience-store.ts new file mode 100644 index 0000000..d340ba8 --- /dev/null +++ b/store/use-experience-store.ts @@ -0,0 +1,55 @@ +import { create } from "zustand"; + +import type { SelectionSource } from "@/store/use-identity-store"; + +export type TransitionState = "idle" | "entering" | "focusing"; + +export type EntryMethod = Exclude; + +type ExperienceState = { + transitionState: TransitionState; + pulsing: boolean; + spotlightActive: boolean; + entryMethod: EntryMethod | null; + cameraTransitioning: boolean; + + startTransition: (method: EntryMethod) => void; + endTransition: () => void; + setSpotlight: (active: boolean) => void; + setPulsing: (active: boolean) => void; + resetExperience: () => void; +}; + +const EXPERIENCE_IDLE = { + transitionState: "idle" as const, + pulsing: false, + spotlightActive: false, + entryMethod: null, + cameraTransitioning: false, +}; + +export const useExperienceStore = create((set) => ({ + ...EXPERIENCE_IDLE, + + startTransition: (method) => + set({ + transitionState: "entering", + entryMethod: method, + pulsing: true, + spotlightActive: false, + cameraTransitioning: true, + }), + + endTransition: () => + set({ + transitionState: "idle", + pulsing: false, + cameraTransitioning: false, + }), + + setSpotlight: (active) => set({ spotlightActive: active }), + + setPulsing: (active) => set({ pulsing: active }), + + resetExperience: () => set(EXPERIENCE_IDLE), +})); diff --git a/store/use-identity-store.ts b/store/use-identity-store.ts new file mode 100644 index 0000000..0e1c0d2 --- /dev/null +++ b/store/use-identity-store.ts @@ -0,0 +1,35 @@ +import { create } from "zustand"; + +import type { MapCountry } from "@/types/country"; + +export type SelectionSource = + | "fab" + | "shuffle" + | "search" + | "explore" + | "mapTap" + | null; + +type IdentityState = { + activeCountry: MapCountry | null; + selectionSource: SelectionSource; + setActiveCountry: (country: MapCountry, source: SelectionSource) => void; + clearActiveCountry: () => void; +}; + +export const useIdentityStore = create((set) => ({ + activeCountry: null, + selectionSource: null, + + setActiveCountry: (country, source) => + set({ + activeCountry: country, + selectionSource: source, + }), + + clearActiveCountry: () => + set({ + activeCountry: null, + selectionSource: null, + }), +})); diff --git a/store/use-map-presentation-store.ts b/store/use-map-presentation-store.ts new file mode 100644 index 0000000..4d22da0 --- /dev/null +++ b/store/use-map-presentation-store.ts @@ -0,0 +1,36 @@ +import { create } from "zustand"; + +import type { + MapPresentationIntent, + MapPresentationMode, +} from "@/types/map-presentation"; + +type MapPresentationState = { + mode: MapPresentationMode; + pendingIntent: MapPresentationIntent | null; + setMode: (mode: MapPresentationMode) => void; + applyIntent: (intent: MapPresentationIntent) => void; + clearPendingIntent: () => void; + resetPresentation: () => void; +}; + +export const useMapPresentationStore = create((set) => ({ + mode: "idle", + pendingIntent: null, + + setMode: (mode) => set({ mode }), + + applyIntent: (intent) => + set({ + mode: intent.mode, + pendingIntent: intent, + }), + + clearPendingIntent: () => set({ pendingIntent: null }), + + resetPresentation: () => + set({ + mode: "idle", + pendingIntent: null, + }), +})); diff --git a/store/use-map-store.ts b/store/use-map-store.ts index bf3626e..9ff7d27 100644 --- a/store/use-map-store.ts +++ b/store/use-map-store.ts @@ -1,8 +1,14 @@ import { create } from "zustand"; +import { normalizeCountryRegion } from "@/lib/app-region"; import { fetchMapCountries } from "@/lib/api"; -import { isValidLatLng } from "@/lib/map-country"; -import type { MapCountry } from "@/types/country"; +import { countryToMapCountry, isValidLatLng } from "@/lib/map-country"; +import { + useIdentityStore, + type SelectionSource, +} from "@/store/use-identity-store"; +import type { Country, MapCountry } from "@/types/country"; +import type { MapPresentationIntent } from "@/types/map-presentation"; export type MapFilterChip = | "all" @@ -11,23 +17,68 @@ export type MapFilterChip = | "nature" | "history"; +export type MapMode = "2d" | "3d"; + type MapStatus = "idle" | "loading" | "error"; +export type GlobeCameraHandle = { + focusCountry: (country: MapCountry, duration?: number) => void; + focusLatLng: ( + lat: number, + lng: number, + duration?: number, + targetDistance?: number, + ) => void; + resetCamera: () => void; + zoomBy: (direction: "in" | "out") => void; +}; + type MapState = { countries: MapCountry[]; status: MapStatus; error: string | null; - selectedCountry: MapCountry | null; + /** True after a successful full fetch from GET /map/countries (not a single injected country). */ + mapCountriesFullyLoaded: boolean; + /** Set when opening Map from Explore/search; consumed once the map can fly the camera. */ + pendingMapIntent: MapPresentationIntent | null; activeChip: MapFilterChip; + mapMode: MapMode; + globeCamera: GlobeCameraHandle | null; loadMapCountries: () => Promise; - selectCountry: (name: string | null) => void; + focusCountryFromExternal: ( + name: string, + fallback?: Country, + source?: Exclude, + ) => void; + clearPendingMapIntent: () => void; selectRandomCountry: () => MapCountry | null; setActiveChip: (chip: MapFilterChip) => void; + setMapMode: (mode: MapMode) => void; + toggleMapMode: () => void; + registerGlobeCamera: (handle: GlobeCameraHandle | null) => void; + focusCountryOnGlobe: (name: string, duration?: number) => void; + focusLatLngOnGlobe: ( + lat: number, + lng: number, + duration?: number, + targetDistance?: number, + ) => void; getVisibleCountries: () => MapCountry[]; }; +let mapCountriesLoadPromise: Promise | null = null; + +function resolveMapCountry( + countries: MapCountry[], + name: string, +): MapCountry | null { + return countries.find((c) => c.name === name) ?? null; +} + function withValidCoordinates(countries: MapCountry[]): MapCountry[] { - return countries.filter((c) => isValidLatLng(c.latlng)); + return countries + .filter((c) => isValidLatLng(c.latlng)) + .map((c) => normalizeCountryRegion(c)); } /** Population chip: top 20% by population. Other chips are visual-only in v1. */ @@ -47,52 +98,116 @@ export const useMapStore = create((set, get) => ({ countries: [], status: "idle", error: null, - selectedCountry: null, + mapCountriesFullyLoaded: false, + pendingMapIntent: null, activeChip: "all", + mapMode: "2d", + globeCamera: null, loadMapCountries: async () => { - const { status } = get(); - if (status === "loading") return; - - set({ status: "loading", error: null }); - - try { - const { data } = await fetchMapCountries(); - set({ - countries: withValidCoordinates(data), - status: "idle", - error: null, - }); - } catch (err) { - const message = - err instanceof Error ? err.message : "Failed to load map countries"; - set({ status: "error", error: message }); + if (get().mapCountriesFullyLoaded) { + return; + } + if (mapCountriesLoadPromise) { + return mapCountriesLoadPromise; } + + mapCountriesLoadPromise = (async () => { + set({ status: "loading", error: null }); + + try { + const { data } = await fetchMapCountries(); + const nextCountries = withValidCoordinates(data); + set({ + countries: nextCountries, + status: "idle", + error: null, + mapCountriesFullyLoaded: true, + }); + } catch (err) { + const message = + err instanceof Error ? err.message : "Failed to load map countries"; + set({ status: "error", error: message }); + } finally { + mapCountriesLoadPromise = null; + } + })(); + + return mapCountriesLoadPromise; }, - selectCountry: (name) => { - if (!name) { - set({ selectedCountry: null }); - return; + focusCountryFromExternal: (name, fallback, source = "search") => { + const trimmed = name.trim(); + if (!trimmed) return; + + let country = resolveMapCountry(get().countries, trimmed); + let countries = get().countries; + + if (!country && fallback) { + const injected = countryToMapCountry(fallback); + country = injected; + if (!countries.some((c) => c.name === injected.name)) { + countries = [...countries, injected]; + } } - const country = get().countries.find((c) => c.name === name) ?? null; - set({ selectedCountry: country }); + set({ + countries, + pendingMapIntent: { + countryName: trimmed, + mode: "focus", + source, + }, + }); }, + clearPendingMapIntent: () => set({ pendingMapIntent: null }), + selectRandomCountry: () => { const visible = get().getVisibleCountries(); if (visible.length === 0) return null; const pick = visible[Math.floor(Math.random() * visible.length)] ?? null; if (pick) { - set({ selectedCountry: pick }); + set({ + pendingMapIntent: { + countryName: pick.name, + mode: "focus", + source: "shuffle", + }, + }); } return pick; }, setActiveChip: (chip) => set({ activeChip: chip }), + setMapMode: (mode) => set({ mapMode: mode }), + + toggleMapMode: () => + set((state) => ({ + mapMode: state.mapMode === "3d" ? "2d" : "3d", + })), + + registerGlobeCamera: (handle) => { + set({ globeCamera: handle }); + }, + + focusCountryOnGlobe: (name, duration) => { + const country = + resolveMapCountry(get().countries, name) ?? + (useIdentityStore.getState().activeCountry?.name === name + ? useIdentityStore.getState().activeCountry + : null); + if (!country) return; + get().globeCamera?.focusCountry(country, duration); + }, + + focusLatLngOnGlobe: (lat, lng, duration, targetDistance) => { + if (!Number.isFinite(lat) || !Number.isFinite(lng)) return; + get().globeCamera?.focusLatLng(lat, lng, duration, targetDistance); + }, + getVisibleCountries: () => { const { countries, activeChip } = get(); return filterMapCountriesByChip(countries, activeChip); diff --git a/store/use-map-ui-store.ts b/store/use-map-ui-store.ts index e03f254..9412a55 100644 --- a/store/use-map-ui-store.ts +++ b/store/use-map-ui-store.ts @@ -2,44 +2,181 @@ import AsyncStorage from "@react-native-async-storage/async-storage"; import { create } from "zustand"; import { createJSONStorage, persist } from "zustand/middleware"; +import { + DEFAULT_MAP_BOUNDARY_STYLE, + normalizeBoundaryStyle, + type MapBoundaryStyleSettings, +} from "@/constants/map-boundary-style"; + export type MapDisplayMode = "globalPulse" | "explore"; -export type FeaturedShortcut = "trending" | "forYou" | "newActivity"; +export type FeaturedShortcut = "all" | "terrain" | "saved"; + +/** Country pin display on the 2D map: flag, dot circle, or hidden. */ +export type CountryMarkerDisplayMode = "flag" | "circle" | "hidden"; + +export const COUNTRY_MARKER_DISPLAY_CYCLE: CountryMarkerDisplayMode[] = [ + "flag", + "circle", + "hidden", +]; + +export function nextCountryMarkerDisplayMode( + current: CountryMarkerDisplayMode, +): CountryMarkerDisplayMode { + const index = COUNTRY_MARKER_DISPLAY_CYCLE.indexOf(current); + if (index < 0) return "flag"; + return COUNTRY_MARKER_DISPLAY_CYCLE[ + (index + 1) % COUNTRY_MARKER_DISPLAY_CYCLE.length + ]!; +} + +/** 3D globe: yellow pins visible whenever mode is not hidden. */ +export function isGlobeYellowPinsVisible( + mode: CountryMarkerDisplayMode, +): boolean { + return mode !== "hidden"; +} + +/** 3D globe: flag control toggles yellow pins only (flag ↔ hidden). */ +export function toggleGlobeYellowPins( + mode: CountryMarkerDisplayMode, +): CountryMarkerDisplayMode { + return mode === "hidden" ? "flag" : "hidden"; +} + +function normalizeCountryMarkerMode( + value: unknown, + legacyShowFlags?: boolean, +): CountryMarkerDisplayMode { + if (value === "flag" || value === "circle" || value === "hidden") { + return value; + } + if (typeof legacyShowFlags === "boolean") { + return legacyShowFlags ? "flag" : "circle"; + } + return "flag"; +} type MapUiState = { hasSeenMapOnboarding: boolean; + hasSeenRandomCountryHint: boolean; displayMode: MapDisplayMode; focusedRegion: string | null; featuredShortcut: FeaturedShortcut | null; + countryMarkerMode: CountryMarkerDisplayMode; + /** When false, country/continent boundary polygons are hidden on the 2D map. */ + showBoundaryLines: boolean; + boundaryStyle: MapBoundaryStyleSettings; + /** Bumped on every boundary style write so 2D polygons remount on RN Maps. */ + boundaryStyleRevision: number; dismissMapOnboarding: () => void; + dismissRandomCountryHint: () => void; setDisplayMode: (mode: MapDisplayMode) => void; setFocusedRegion: (region: string | null) => void; setFeaturedShortcut: (shortcut: FeaturedShortcut | null) => void; + setCountryMarkerMode: (mode: CountryMarkerDisplayMode) => void; + cycleCountryMarkerMode: () => void; + setShowBoundaryLines: (show: boolean) => void; + setBoundaryStyle: (style: MapBoundaryStyleSettings) => void; + resetBoundaryStyle: () => void; resetGlobalPulse: () => void; + /** Clears continent/shortcut session state (not persisted across app restarts). */ + resetMapExplorationSession: () => void; +}; + +/** Fields that belong to the current map session only — never written to AsyncStorage. */ +const MAP_EXPLORATION_SESSION_DEFAULTS = { + displayMode: "globalPulse" as MapDisplayMode, + focusedRegion: null, + featuredShortcut: "all", }; export const useMapUiStore = create()( persist( (set) => ({ hasSeenMapOnboarding: false, + hasSeenRandomCountryHint: false, displayMode: "globalPulse", focusedRegion: null, - featuredShortcut: null, + featuredShortcut: "all", + countryMarkerMode: "flag", + showBoundaryLines: true, + boundaryStyle: DEFAULT_MAP_BOUNDARY_STYLE, + boundaryStyleRevision: 0, dismissMapOnboarding: () => set({ hasSeenMapOnboarding: true }), + dismissRandomCountryHint: () => set({ hasSeenRandomCountryHint: true }), setDisplayMode: (mode) => set({ displayMode: mode }), setFocusedRegion: (region) => set({ focusedRegion: region }), setFeaturedShortcut: (shortcut) => set({ featuredShortcut: shortcut }), + setCountryMarkerMode: (mode) => set({ countryMarkerMode: mode }), + cycleCountryMarkerMode: () => + set((state) => ({ + countryMarkerMode: nextCountryMarkerDisplayMode(state.countryMarkerMode), + })), + setShowBoundaryLines: (show) => set({ showBoundaryLines: show }), + setBoundaryStyle: (style) => + set((state) => ({ + boundaryStyle: normalizeBoundaryStyle(style), + boundaryStyleRevision: state.boundaryStyleRevision + 1, + })), + resetBoundaryStyle: () => + set((state) => ({ + boundaryStyle: DEFAULT_MAP_BOUNDARY_STYLE, + boundaryStyleRevision: state.boundaryStyleRevision + 1, + })), + + resetGlobalPulse: () => set(MAP_EXPLORATION_SESSION_DEFAULTS), - resetGlobalPulse: () => - set({ - displayMode: "globalPulse", - focusedRegion: null, - featuredShortcut: null, - }), + resetMapExplorationSession: () => set(MAP_EXPLORATION_SESSION_DEFAULTS), }), { name: "worldloop-map-ui", + version: 2, storage: createJSONStorage(() => AsyncStorage), + partialize: (state) => ({ + hasSeenMapOnboarding: state.hasSeenMapOnboarding, + hasSeenRandomCountryHint: state.hasSeenRandomCountryHint, + countryMarkerMode: state.countryMarkerMode, + showBoundaryLines: state.showBoundaryLines, + boundaryStyle: state.boundaryStyle, + }), + migrate: (persistedState) => { + const persisted = persistedState as + | (Partial & { showCountryFlags?: boolean }) + | undefined; + if (!persisted) return persistedState; + const { + displayMode: _displayMode, + focusedRegion: _focusedRegion, + featuredShortcut: _featuredShortcut, + showCountryFlags, + ...settings + } = persisted; + return settings; + }, + merge: (persistedState, currentState) => { + const persisted = persistedState as + | (Partial & { showCountryFlags?: boolean }) + | undefined; + return { + ...currentState, + ...MAP_EXPLORATION_SESSION_DEFAULTS, + hasSeenMapOnboarding: + persisted?.hasSeenMapOnboarding ?? + currentState.hasSeenMapOnboarding, + hasSeenRandomCountryHint: + persisted?.hasSeenRandomCountryHint ?? + currentState.hasSeenRandomCountryHint, + showBoundaryLines: + persisted?.showBoundaryLines ?? currentState.showBoundaryLines, + countryMarkerMode: normalizeCountryMarkerMode( + persisted?.countryMarkerMode, + persisted?.showCountryFlags, + ), + boundaryStyle: normalizeBoundaryStyle(persisted?.boundaryStyle), + }; + }, }, ), ); diff --git a/store/use-recently-viewed-store.ts b/store/use-recently-viewed-store.ts index 0cbfd20..6522c45 100644 --- a/store/use-recently-viewed-store.ts +++ b/store/use-recently-viewed-store.ts @@ -73,7 +73,7 @@ function buildSeedEntries(): RecentlyViewedEntry[] { "Peru", "PE", "Lima", - "Americas", + "South America", 33_715_471, [-9.19, -75.0152], [ diff --git a/store/use-search-ui-store.ts b/store/use-search-ui-store.ts index 97c073a..4124da0 100644 --- a/store/use-search-ui-store.ts +++ b/store/use-search-ui-store.ts @@ -1,13 +1,17 @@ import { create } from "zustand"; +export type SearchUiContext = "default" | "map"; + type SearchUiState = { isOpen: boolean; - openSearch: () => void; + context: SearchUiContext; + openSearch: (context?: SearchUiContext) => void; closeSearch: () => void; }; export const useSearchUiStore = create((set) => ({ isOpen: false, - openSearch: () => set({ isOpen: true }), - closeSearch: () => set({ isOpen: false }), + context: "default", + openSearch: (context = "default") => set({ isOpen: true, context }), + closeSearch: () => set({ isOpen: false, context: "default" }), })); diff --git a/types/assets.d.ts b/types/assets.d.ts index 9ce1c27..8ab8bd1 100644 --- a/types/assets.d.ts +++ b/types/assets.d.ts @@ -4,6 +4,18 @@ declare module "*.png" { export default value; } +declare module "*.jpg" { + import type { ImageSourcePropType } from "react-native"; + const value: ImageSourcePropType; + export default value; +} + +declare module "*.jpeg" { + import type { ImageSourcePropType } from "react-native"; + const value: ImageSourcePropType; + export default value; +} + declare module "*.ttf" { const value: number; export default value; diff --git a/types/map-presentation.ts b/types/map-presentation.ts new file mode 100644 index 0000000..828aa40 --- /dev/null +++ b/types/map-presentation.ts @@ -0,0 +1,9 @@ +import type { SelectionSource } from "@/store/use-identity-store"; + +export type MapPresentationMode = "idle" | "focus" | "preview"; + +export type MapPresentationIntent = { + countryName: string; + mode: Extract; + source: Exclude; +};