diff --git a/CHANGELOG.md b/CHANGELOG.md index 0185cd0..3ea3adf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,12 +61,20 @@ Drill-down and naming - **Name it…** on any host or device names it on the spot; the name is saved and shown everywhere. The Names box on Sources now shows examples. -Countries and networks database -- Upload a database on the Sources page: MaxMind GeoLite2 or DB-IP Lite - `.mmdb` files (country or ASN) or an IP-to-ASN table (`.tsv`, `.tsv.gz`). - It is checked, saved and used for new traffic at once, without a - restart. The `.mmdb` reader was checked against MaxMind's own reader on - 60,000 lookups in six DB-IP databases with no difference. +Countries and networks +- Works out of the box: DB-IP's free country and ASN databases (CC BY 4.0) + are built in, so countries and networks show without uploading anything. + **Update DB-IP Lite now** on the Sources page downloads this month's + version. +- Sources lists the free databases (DB-IP Lite, MaxMind GeoLite2, IPinfo + Lite, IPtoASN) with their licences and where to get them. Uploaded files + are used first and the built-in DB-IP Lite answers the rest; **Remove** + goes back. IPinfo Lite, which holds countries and networks in one file, + is now understood. +- The `.mmdb` reader was checked against MaxMind's own reader on 60,000 + lookups in six DB-IP databases with no difference. +- **Geo & networks** shows remote traffic on a world map; point at a country + for its traffic, click it to filter. Simpler pages - Top-N is one table: conversations (client, server, service, country) by @@ -76,6 +84,9 @@ Simpler pages smallest average packet size finds scanners and floods. The row of eleven tabs is gone. - "Who grew" is gone from the overview (web and terminal UI). +- Narrow windows: the menu, time range and tables no longer push the page + wider than the window, and "Log out" stays inside the menu in every + language. - Flow paths: labels, bars and flows can all be clicked; before, only the thin bars could. - The side menu no longer shows group headings that looked like buttons; diff --git a/README.md b/README.md index de7bd54..45efd04 100644 --- a/README.md +++ b/README.md @@ -570,27 +570,43 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. Countries, networks and threat lists -Countries and network (AS) names need a database that maps addresses to -them. Upload one in the web UI: **Sources → Countries and networks -database → Upload a database file…**. It is checked, saved in the data +Countries and networks (AS) work out of the box: traffic66 has DB-IP's free +**IP to Country Lite** and **IP to ASN Lite** databases built in (licensed +[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); "IP Geolocation +by DB-IP", [db-ip.com](https://db-ip.com)). The pages that show countries +and networks name the data's source. + +The built-in copy is from the release you run. DB-IP publishes a new one +every month; **Sources → Countries and networks database → Update DB-IP +Lite now** downloads the latest from db-ip.com (the server running +traffic66 needs internet access for this; the web UI says so if it fails). + +You can also use another free database. Download it, then upload it on the +same page with **Upload a database file…**. It is checked, saved in the data directory and used for new traffic at once; no restart is needed. Traffic already stored keeps the country it was saved with. -Accepted files: +| Database | Gives | Licence | Where to get it | +|---|---|---|---| +| DB-IP Lite (built in) | countries; networks | CC BY 4.0, no account | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country and ASN, `.mmdb` | countries; networks | GeoLite2 EULA, free account | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | countries and networks in one file | CC BY-SA 4.0, free account | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | networks with their country | PDDL 1.0, no account | [iptoasn.com](https://iptoasn.com) | -| File | Gives | Where to get it | -|---|---|---| -| DB-IP Lite country or ASN, `.mmdb` | country, or AS number and name | free, no account: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country or ASN, `.mmdb` | country, or AS number and name | free with a MaxMind account: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP-to-ASN table, `.tsv` or `.tsv.gz` | AS number, AS name and country | free: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | - -Upload a country database and an ASN database to get both; where several -are loaded, the `.mmdb` files take precedence for what they contain. New -versions come out monthly: upload the new file the same way to replace the -old one. +Your own files are used first; the built-in DB-IP Lite answers what they +do not cover. **Remove** next to a file goes back to the rest. The page +lists what is in use and the date of each database. Without the web UI, copy the file into the data directory as -`country.mmdb`, `asn.mmdb` or `asn.tsv.gz` and restart traffic66. +`country.mmdb`, `asn.mmdb`, `both.mmdb` (a file with countries and +networks, such as IPinfo Lite) or `asn.tsv.gz` and restart traffic66. + +**Geo & networks** shows the traffic to and from other countries on a +world map: the darker a country, the more traffic. Point at a country for +its traffic; click it to filter or open its flow records. Country outlines +come from [Natural Earth](https://www.naturalearthdata.com) (public domain). + +![Geo & networks: remote traffic by country on a world map](docs/images/geo.png) Threat lists are plain text files with one address or network per line (text after `#` or `;` is ignored), saved as `/threats/.txt`, for @@ -633,7 +649,7 @@ Pages: | Traffic details | Clients, servers and services over time, in bits/s and in packets/s: the top 8 of each, and how many there were | | Findings | What needs attention: scans, password guessing, lateral movement, unusual uploads, floods and threat list traffic ([more](#findings)) | | Flow paths | Which host uses which application towards which country: the 8 busiest hosts, the rest as Other. **Client → server** shows client → service → server; **By network** shows networks instead of hosts | -| Geo & networks | The networks (AS) traffic came from and went to, over time in bits/s and packets/s; traffic by country and by network | +| Geo & networks | A world map of traffic by country; the networks (AS) traffic came from and went to, over time in bits/s and packets/s; traffic by country and by network | | Threat intel | Hosts that talked to addresses on your threat lists, and how much they sent | | Flow records | How many flow records there were and when (a bar per interval), and the records themselves, newest first, page by page, with selectable columns | | Interface check | Traffic of every interface over time (ingress and egress, bits/s and packets/s), and flow numbers next to the interface counters, worst first, with reasons | @@ -847,7 +863,7 @@ Options of `traffic66` and `traffic66 demo`: | `-sampling-wait` | `5m` | how long records wait for a sampling rate | | `-capture` | | capture on a local interface (repeatable) | | `-inventory` | `/inventory.txt` | names file | -| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` files: upload them, or `/country.mmdb` and `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` files: upload them, or `/country.mmdb`, `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | extra threat list as `name=path` (repeatable) | | `-dns-upstream` | system resolver | DNS server for showing host names | | `-dns-rate` | `20` | reverse lookups per second at most | @@ -873,7 +889,7 @@ The data directory holds everything: | `password` | login passwords (hashed) | | `inventory.txt` | names (**Sources → Names**) | | `logo.png` (or `.svg`, `.jpg`, `.webp`, `.gif`) | your logo (**Sources → Logo**), if you uploaded one | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | countries and networks databases and threat lists you added | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | countries and networks databases you added or downloaded, and threat lists | **How long data is kept**: flow detail 30 days, summaries (overview and long time ranges) 400 days. Older data is deleted automatically, checked every 5 diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md new file mode 100644 index 0000000..ec4110d --- /dev/null +++ b/THIRD_PARTY_NOTICES.md @@ -0,0 +1,22 @@ +# Third-party data in traffic66 + +traffic66 itself contains no third-party code beyond its Go modules (see +`go.mod`). It includes the following data. + +## DB-IP Lite + +`internal/geo/dbip/country.mmdb.gz` and `internal/geo/dbip/asn.mmdb.gz`: +DB-IP "IP to Country Lite" and "IP to ASN Lite", in MaxMind DB format as +packaged by the ip-location-db project. + +IP Geolocation by DB-IP (https://db-ip.com), licensed under the Creative +Commons Attribution 4.0 International License +(https://creativecommons.org/licenses/by/4.0/). traffic66 shows this +attribution on the pages that use the data. + +## Natural Earth + +`internal/web/static/world.json`: country outlines derived from Natural +Earth 1:50m Admin 0 – Countries (https://www.naturalearthdata.com), public +domain, via world-atlas (https://github.com/topojson/world-atlas, ISC +license), simplified and projected by `tools/worldmap/build.mjs`. diff --git a/cmd/traffic66/main.go b/cmd/traffic66/main.go index f82e96a..882b417 100644 --- a/cmd/traffic66/main.go +++ b/cmd/traffic66/main.go @@ -31,7 +31,6 @@ import ( "github.com/githubflyideas/traffic66/internal/dnsres" "github.com/githubflyideas/traffic66/internal/enrich" "github.com/githubflyideas/traffic66/internal/flow" - "github.com/githubflyideas/traffic66/internal/geo" "github.com/githubflyideas/traffic66/internal/pipeline" "github.com/githubflyideas/traffic66/internal/sim" "github.com/githubflyideas/traffic66/internal/snmp" @@ -247,21 +246,14 @@ func serve(args []string, demo bool) { log.Printf("ASN table: %d ranges from %s", asn.Size(), asnPath) } } - for _, name := range []string{"country.mmdb", "asn.mmdb"} { - p := filepath.Join(f.data, name) - if _, err := os.Stat(p); err != nil { - continue - } - r, err := geo.Open(p) - if err != nil { - log.Printf("%s: %v", p, err) - continue - } - asn.SetMMDB(r, name) - log.Printf("geo database %s: %s", name, r.Type) + for _, err := range asn.LoadMMDBs(f.data) { + log.Printf("geo database %v", err) + } + if err := asn.LoadDBIP(f.data); err != nil { + log.Printf("%v", err) } - if !asn.Loaded() { - log.Printf("no country/ASN database; upload one on the Sources page to see countries and networks") + for _, src := range asn.Sources() { + log.Printf("geo database: %s %s (%s, built %s)", src.Kind, src.File, src.Type, src.Built.Format("2006-01-02")) } thr := enrich.NewThreats() threatFiles := map[string]string{} diff --git a/docs/README.ar.md b/docs/README.ar.md index bd543bb..95b693b 100644 --- a/docs/README.ar.md +++ b/docs/README.ar.md @@ -598,25 +598,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. الدول والشبكات وقوائم التهديدات -تحتاج أسماء الدول والشبكات (AS) إلى قاعدة بيانات تربط العناوين بها. ارفعها من -واجهة الويب: **المصادر ← قاعدة بيانات الدول والشبكات ← رفع ملف قاعدة بيانات…**. -يُفحص الملف ويُحفظ في دليل البيانات ويُستخدم للحركة الجديدة فورًا؛ ولا حاجة -إلى إعادة التشغيل. أما الحركة المخزّنة من قبل فتحتفظ بالدولة التي حُفظت بها. +تعمل الدول والشبكات (AS) فوراً: يتضمن traffic66 قاعدتَي DB-IP المجانيتين **IP to Country Lite** و**IP to ASN Lite** (الترخيص [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)؛ "IP Geolocation by DB-IP"، [db-ip.com](https://db-ip.com)). تذكر الصفحات التي تعرض الدول والشبكات مصدر البيانات. -الملفات المقبولة: +النسخة المدمجة هي نسخة الإصدار الذي تشغّله. تنشر DB-IP نسخة جديدة كل شهر؛ و**المصادر ← قاعدة بيانات الدول والشبكات ← حدّث DB-IP Lite الآن** ينزّل أحدثها من db-ip.com (يحتاج الخادم الذي يشغّل traffic66 إلى الإنترنت، وتخبرك الواجهة إن فشل التنزيل). -| الملف | ما يقدّمه | من أين تحصل عليه | -|---|---|---| -| DB-IP Lite للدول أو ASN، `.mmdb` | الدولة، أو رقم AS واسمه | مجاني، دون حساب: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country أو ASN، `.mmdb` | الدولة، أو رقم AS واسمه | مجاني مع حساب MaxMind: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| جدول IP-to-ASN، `.tsv` أو `.tsv.gz` | رقم AS واسم AS والدولة | مجاني: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +يمكنك أيضاً استخدام قاعدة مجانية أخرى. نزّلها ثم ارفعها في الصفحة نفسها عبر **رفع ملف قاعدة بيانات…**. يُفحص الملف ويُحفظ في مجلد البيانات ويُستخدم للحركة الجديدة فوراً دون إعادة تشغيل. تحتفظ الحركة المخزنة بالدولة التي حُفظت بها. + +| القاعدة | تعطي | الترخيص | من أين تحصل عليها | +|---|---|---|---| +| DB-IP Lite (مدمجة) | الدول؛ الشبكات | CC BY 4.0، بلا حساب | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country وASN، ‏`.mmdb` | الدول؛ الشبكات | GeoLite2 EULA، حساب مجاني | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite، ‏`ipinfo_lite.mmdb` | الدول والشبكات في ملف واحد | CC BY-SA 4.0، حساب مجاني | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN، ‏`ip2asn-combined.tsv.gz` | الشبكات ودولها | PDDL 1.0، بلا حساب | [iptoasn.com](https://iptoasn.com) | + +تُستخدم ملفاتك أولاً، وتجيب DB-IP Lite المدمجة عمّا لا تغطيه. يعيدك زر **إزالة** بجانب الملف إلى البقية. تعرض الصفحة ما هو مستخدم وتاريخ كل قاعدة. + +من دون واجهة الويب، انسخ الملف إلى مجلد البيانات باسم `country.mmdb` أو `asn.mmdb` أو `both.mmdb` (ملف فيه الدول والشبكات معاً مثل IPinfo Lite) أو `asn.tsv.gz` ثم أعد تشغيل traffic66. -ارفع قاعدة بيانات للدول وأخرى لـ ASN لتحصل على الاثنين معًا؛ وعند تحميل عدة -ملفات، تكون الأولوية لملفات `.mmdb` فيما تحتويه. تصدر نسخ جديدة كل شهر: ارفع -الملف الجديد بالطريقة نفسها ليحلّ محل القديم. +تعرض **الجغرافيا والشبكات** الحركة مع الدول الأخرى على خريطة العالم: كلما كان لون الدولة أغمق زادت الحركة. مرّر المؤشر على دولة لترى حركتها، وانقر عليها للتصفية أو لفتح سجلات التدفق. حدود الدول من [Natural Earth](https://www.naturalearthdata.com) (ملكية عامة). -دون واجهة الويب، انسخ الملف إلى دليل البيانات باسم `country.mmdb` أو -`asn.mmdb` أو `asn.tsv.gz` وأعد تشغيل traffic66. +![الجغرافيا والشبكات: الحركة الخارجية حسب الدولة على خريطة العالم](images/geo.png) قوائم التهديدات ملفات نصية عادية فيها عنوان أو شبكة في كل سطر (يُتجاهل النص بعد `#` أو `;`)، تُحفظ في `/threats/.txt`، @@ -659,7 +660,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | تفاصيل الحركة | العملاء والخوادم والخدمات عبر الزمن، بوحدة bits/s وpackets/s: أعلى 8 من كل منها، وكم كان عددها | | الاكتشافات | ما يستدعي الانتباه: عمليات المسح، وتخمين كلمات المرور، والتحرك الجانبي، وعمليات الرفع غير المعتادة، والإغراق، وحركة قوائم التهديدات ([المزيد](#findings)) | | مسارات الحركة | أي مضيف يستخدم أي تطبيق نحو أي دولة: أكثر 8 مضيفات نشاطًا، والباقي ضمن «أخرى». ويعرض **العميل ← الخادم** العميل ← الخدمة ← الخادم؛ ويعرض **حسب المقطع** الشبكات بدل المضيفات | -| الجغرافيا والشبكات | الشبكات (AS) التي جاءت منها الحركة وذهبت إليها، عبر الزمن بوحدة bits/s وpackets/s؛ والحركة حسب الدولة وحسب الشبكة | +| الجغرافيا والشبكات | خريطة العالم للحركة حسب الدولة؛ الشبكات (AS) التي جاءت منها الحركة وذهبت إليها، عبر الزمن بوحدة bits/s وpackets/s؛ والحركة حسب الدولة وحسب الشبكة | | معلومات التهديدات | المضيفات التي تواصلت مع عناوين في قوائم تهديداتك، وكم أرسلت | | سجلات التدفق | كم سجل تدفق كان هناك ومتى (شريط لكل فترة)، والسجلات نفسها، الأحدث أولًا، صفحةً صفحة، مع أعمدة قابلة للاختيار | | مطابقة الواجهات | حركة كل واجهة عبر الزمن (الدخول والخروج، bits/s وpackets/s)، وأرقام التدفقات بجوار عدّادات الواجهات، الأسوأ أولًا، مع الأسباب | @@ -888,7 +889,7 @@ sudo traffic66 -capture en0 | `-sampling-wait` | `5m` | مدة انتظار السجلات لمعدّل أخذ العينات | | `-capture` | | الالتقاط على واجهة محلية (يمكن تكراره) | | `-inventory` | `/inventory.txt` | ملف الأسماء | -| `-asn` | `/asn.tsv.gz` | جدول IP-to-ASN (ملفات `.mmdb`: ارفعها، أو `/country.mmdb` و`/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | جدول IP-to-ASN (ملفات `.mmdb`: ارفعها، أو `/country.mmdb` و`/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | قائمة تهديدات إضافية بصيغة `name=path` (يمكن تكراره) | | `-dns-upstream` | محلّل النظام | خادم DNS لعرض أسماء المضيفات | | `-dns-rate` | `20` | الحد الأقصى لاستعلامات DNS العكسية في الثانية | @@ -916,7 +917,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | كلمات مرور تسجيل الدخول (مُجزّأة) | | `inventory.txt` | الأسماء (**المصادر ← الأسماء**) | | `logo.png` (أو `.svg`، `.jpg`، `.webp`، `.gif`) | شعارك (**المصادر ← الشعار**)، إن كنت قد رفعته | -| `country.mmdb`، `asn.mmdb`، `asn.tsv.gz`، `threats/` | قواعد بيانات الدول والشبكات وقوائم التهديدات التي أضفتها | +| `country.mmdb`، `asn.mmdb`، `both.mmdb`، `asn.tsv.gz`، `dbip-country.mmdb`، `dbip-asn.mmdb`، `threats/` | قواعد بيانات الدول والشبكات وقوائم التهديدات التي أضفتها | **مدة الاحتفاظ بالبيانات**: تفاصيل التدفقات 30 يومًا، والملخصات (النظرة العامة والفترات الطويلة) 400 يوم. تُحذف البيانات الأقدم تلقائيًا، ويُفحص ذلك كل 5 دقائق؛ لا يُحذف شيء غير ذلك ولا يوجد حد آخر. غيّر مدة التفاصيل diff --git a/docs/README.bn.md b/docs/README.bn.md index f1cd8a6..d229316 100644 --- a/docs/README.bn.md +++ b/docs/README.bn.md @@ -603,26 +603,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. দেশ, নেটওয়ার্ক ও threat list -দেশ ও নেটওয়ার্ক (AS)-এর নামের জন্য এমন একটি database লাগে যা address থেকে -সেগুলো বের করে। web UI-তে সেটি আপলোড করুন: **উৎস → দেশ ও নেটওয়ার্ক ডেটাবেস → ডেটাবেস ফাইল আপলোড করুন…**। -ফাইলটি যাচাই করা হয়, data directory-তে সেভ হয় এবং নতুন ট্রাফিকের জন্য সঙ্গে -সঙ্গে ব্যবহার হয়; restart লাগে না। আগে থেকে সংরক্ষিত ট্রাফিক যে দেশ নিয়ে সেভ -হয়েছিল সেটিই রাখে। +দেশ ও নেটওয়ার্ক (AS) শুরু থেকেই কাজ করে: traffic66-এ DB-IP-এর বিনামূল্যের **IP to Country Lite** ও **IP to ASN Lite** ডেটাবেস অন্তর্নির্মিত (লাইসেন্স [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); "IP Geolocation by DB-IP", [db-ip.com](https://db-ip.com))। দেশ ও নেটওয়ার্ক দেখানো পেজগুলো ডেটার উৎস জানায়। -গ্রহণযোগ্য ফাইল: +অন্তর্নির্মিত কপিটি আপনার চালানো রিলিজের সময়ের। DB-IP প্রতি মাসে নতুন সংস্করণ প্রকাশ করে; **উৎস → দেশ ও নেটওয়ার্ক ডেটাবেস → DB-IP Lite এখনই আপডেট করুন** db-ip.com থেকে সর্বশেষটি ডাউনলোড করে (traffic66 চালানো সার্ভারের ইন্টারনেট লাগবে; ব্যর্থ হলে ওয়েব UI জানায়)। -| ফাইল | কী দেয় | কোথায় পাবেন | -|---|---|---| -| DB-IP Lite country বা ASN, `.mmdb` | দেশ, অথবা AS number ও নাম | বিনামূল্যে, account ছাড়া: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country বা ASN, `.mmdb` | দেশ, অথবা AS number ও নাম | MaxMind account থাকলে বিনামূল্যে: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP-to-ASN table, `.tsv` বা `.tsv.gz` | AS number, AS name ও দেশ | বিনামূল্যে: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +অন্য কোনো বিনামূল্যের ডেটাবেসও ব্যবহার করতে পারেন। সেটি ডাউনলোড করে একই পেজে **ডেটাবেস ফাইল আপলোড করুন…** দিয়ে আপলোড করুন। ফাইলটি যাচাই করে ডেটা ডিরেক্টরিতে রাখা হয় এবং সঙ্গে সঙ্গে নতুন ট্রাফিকে ব্যবহার হয়; রিস্টার্ট লাগে না। আগে সংরক্ষিত ট্রাফিক সংরক্ষণের সময়ের দেশই রাখে। + +| ডেটাবেস | যা দেয় | লাইসেন্স | কোথায় পাবেন | +|---|---|---|---| +| DB-IP Lite (অন্তর্নির্মিত) | দেশ; নেটওয়ার্ক | CC BY 4.0, অ্যাকাউন্ট লাগে না | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country ও ASN, `.mmdb` | দেশ; নেটওয়ার্ক | GeoLite2 EULA, বিনামূল্যের অ্যাকাউন্ট | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | দেশ ও নেটওয়ার্ক একটি ফাইলে | CC BY-SA 4.0, বিনামূল্যের অ্যাকাউন্ট | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | নেটওয়ার্ক ও তাদের দেশ | PDDL 1.0, অ্যাকাউন্ট লাগে না | [iptoasn.com](https://iptoasn.com) | + +আপনার নিজের ফাইল আগে ব্যবহার হয়; যা তাতে নেই তা অন্তর্নির্মিত DB-IP Lite দেখে। ফাইলের পাশে **মুছুন** বাকিগুলোতে ফিরিয়ে দেয়। পেজে দেখা যায় কোনটি ব্যবহার হচ্ছে এবং প্রতিটি ডেটাবেসের তারিখ। + +ওয়েব UI ছাড়া, ফাইলটি ডেটা ডিরেক্টরিতে `country.mmdb`, `asn.mmdb`, `both.mmdb` (দেশ ও নেটওয়ার্ক একসাথে থাকা ফাইল, যেমন IPinfo Lite) বা `asn.tsv.gz` নামে কপি করে traffic66 রিস্টার্ট করুন। -দুটোই পেতে একটি country database ও একটি ASN database আপলোড করুন; একাধিক লোড -থাকলে, `.mmdb` ফাইলগুলোতে যা আছে সে বিষয়ে সেগুলোই অগ্রাধিকার পায়। নতুন -version প্রতি মাসে বের হয়: পুরোনোটি বদলাতে নতুন ফাইল একইভাবে আপলোড করুন। +**ভূগোল ও নেটওয়ার্ক** অন্য দেশের সঙ্গে ট্রাফিক বিশ্ব মানচিত্রে দেখায়: দেশ যত গাঢ়, ট্রাফিক তত বেশি। কোনো দেশের ওপর পয়েন্টার রাখলে তার ট্রাফিক দেখা যায়; ক্লিক করে ফিল্টার করুন বা তার flow records খুলুন। দেশের সীমানা [Natural Earth](https://www.naturalearthdata.com) (পাবলিক ডোমেইন) থেকে। -web UI ছাড়া, ফাইলটি data directory-তে `country.mmdb`, `asn.mmdb` বা -`asn.tsv.gz` নামে কপি করুন এবং traffic66 restart করুন। +![ভূগোল ও নেটওয়ার্ক: বিশ্ব মানচিত্রে দেশ অনুযায়ী বাইরের ট্রাফিক](images/geo.png) Threat list হলো সাধারণ text ফাইল, প্রতি লাইনে একটি address বা নেটওয়ার্ক (`#` বা `;`-এর পরের লেখা উপেক্ষা করা হয়), সেভ করা হয় @@ -667,7 +667,7 @@ application, দেশ, ডিভাইস — ক্লিক করা যা | ট্রাফিকের বিস্তারিত | সময়ের সাথে client, server ও service, bits/s ও packets/s-এ: প্রতিটির শীর্ষ 8টি, আর মোট কতগুলো ছিল | | সন্দেহজনক কার্যকলাপ | কীসে নজর দিতে হবে: scan, পাসওয়ার্ড অনুমান, lateral movement, অস্বাভাবিক upload, flood আর threat list-এর ট্রাফিক ([আরও](#findings)) | | ট্রাফিকের পথ | কোন host কোন দেশের দিকে কোন application ব্যবহার করে: সবচেয়ে ব্যস্ত 8টি host, বাকিগুলো "অন্যান্য" হিসেবে। **ক্লায়েন্ট → সার্ভার** client → service → server দেখায়; **সেগমেন্ট অনুযায়ী** host-এর বদলে নেটওয়ার্ক দেখায় | -| ভূগোল ও নেটওয়ার্ক | যেসব নেটওয়ার্ক (AS) থেকে ট্রাফিক এসেছে ও যেখানে গেছে, সময়ের সাথে bits/s ও packets/s-এ; দেশ ও নেটওয়ার্ক অনুযায়ী ট্রাফিক | +| ভূগোল ও নেটওয়ার্ক | দেশ অনুযায়ী ট্রাফিকের বিশ্ব মানচিত্র; যেসব নেটওয়ার্ক (AS) থেকে ট্রাফিক এসেছে ও যেখানে গেছে, সময়ের সাথে bits/s ও packets/s-এ; দেশ ও নেটওয়ার্ক অনুযায়ী ট্রাফিক | | হুমকির তথ্য | যেসব host আপনার threat list-এর address-এর সাথে কথা বলেছে, এবং কতটা পাঠিয়েছে | | ফ্লো রেকর্ড | কতগুলো flow record ছিল এবং কখন (প্রতি interval-এ একটি bar), আর record-গুলো নিজেই, নতুনগুলো আগে, পেজ ধরে ধরে, বেছে নেওয়া যায় এমন column সহ | | ইন্টারফেস মিলানো | সময়ের সাথে প্রতিটি interface-এর ট্রাফিক (ingress ও egress, bits/s ও packets/s), আর interface counter-এর পাশে flow-এর সংখ্যা, সবচেয়ে খারাপগুলো আগে, কারণসহ | @@ -896,7 +896,7 @@ port-এ) দুবার গোনা হয়। | `-sampling-wait` | `5m` | record কতক্ষণ sampling rate-এর জন্য অপেক্ষা করবে | | `-capture` | | local interface-এ capture (একাধিকবার দেওয়া যায়) | | `-inventory` | `/inventory.txt` | নামের ফাইল | -| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` ফাইল: সেগুলো আপলোড করুন, অথবা `/country.mmdb` ও `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` ফাইল: সেগুলো আপলোড করুন, অথবা `/country.mmdb` ও `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | অতিরিক্ত threat list, `name=path` আকারে (একাধিকবার দেওয়া যায়) | | `-dns-upstream` | system resolver | host name দেখানোর জন্য DNS server | | `-dns-rate` | `20` | প্রতি সেকেন্ডে সর্বোচ্চ reverse lookup | @@ -924,7 +924,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | login পাসওয়ার্ড (hashed) | | `inventory.txt` | নাম (**উৎস → নাম**) | | `logo.png` (বা `.svg`, `.jpg`, `.webp`, `.gif`) | আপনার লোগো (**উৎস → লোগো**), যদি আপলোড করে থাকেন | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | আপনার যোগ করা দেশ ও নেটওয়ার্ক database এবং threat list | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | আপনার যোগ করা দেশ ও নেটওয়ার্ক database এবং threat list | **ডেটা কতদিন রাখা হয়**: flow detail 30 দিন, summary (overview ও দীর্ঘ সময়সীমা) 400 দিন। এর চেয়ে পুরোনো ডেটা নিজে থেকেই মুছে যায়, প্রতি 5 মিনিটে যাচাই হয়; এ ছাড়া কিছু মোছা হয় না এবং অন্য কোনো সীমা নেই। detail-এর মেয়াদ diff --git a/docs/README.es.md b/docs/README.es.md index 66a1485..18d100c 100644 --- a/docs/README.es.md +++ b/docs/README.es.md @@ -616,28 +616,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. Países, redes y listas de amenazas -Los países y los nombres de red (AS) necesitan una base de datos que asocie -las direcciones con ellos. Súbala en la interfaz web: **Fuentes → Base de -datos de países y redes → Subir un archivo de base de datos…**. Se -comprueba, se guarda en el directorio de datos y se usa al momento para el -tráfico nuevo; no hace falta reiniciar. El tráfico ya almacenado conserva el -país con el que se guardó. +Los países y las redes (AS) funcionan desde el primer momento: traffic66 incluye las bases de datos gratuitas **IP to Country Lite** e **IP to ASN Lite** de DB-IP (licencia [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); "IP Geolocation by DB-IP", [db-ip.com](https://db-ip.com)). Las páginas que muestran países y redes indican de dónde vienen los datos. -Archivos admitidos: +La copia incluida es la de la versión que usa. DB-IP publica una nueva cada mes; **Fuentes → Base de datos de países y redes → Actualizar DB-IP Lite ahora** descarga la última de db-ip.com (el servidor donde corre traffic66 necesita acceso a internet; si falla, la interfaz lo indica). -| Archivo | Aporta | Dónde conseguirlo | -|---|---|---| -| DB-IP Lite country o ASN, `.mmdb` | país, o número y nombre de AS | gratis, sin cuenta: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country o ASN, `.mmdb` | país, o número y nombre de AS | gratis con una cuenta de MaxMind: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| Tabla IP-a-ASN, `.tsv` o `.tsv.gz` | número de AS, nombre de AS y país | gratis: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +También puede usar otra base de datos gratuita. Descárguela y súbala en la misma página con **Subir un archivo de base de datos…**. Se comprueba, se guarda en el directorio de datos y se usa para el tráfico nuevo al instante, sin reiniciar. El tráfico ya guardado conserva el país con el que se guardó. + +| Base de datos | Da | Licencia | Dónde obtenerla | +|---|---|---|---| +| DB-IP Lite (incluida) | países; redes | CC BY 4.0, sin cuenta | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country y ASN, `.mmdb` | países; redes | GeoLite2 EULA, cuenta gratuita | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | países y redes en un solo archivo | CC BY-SA 4.0, cuenta gratuita | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | redes con su país | PDDL 1.0, sin cuenta | [iptoasn.com](https://iptoasn.com) | + +Primero se usan sus archivos; lo que no cubren lo responde la DB-IP Lite incluida. **Quitar** junto a un archivo vuelve al resto. La página muestra lo que está en uso y la fecha de cada base de datos. + +Sin la interfaz web, copie el archivo al directorio de datos como `country.mmdb`, `asn.mmdb`, `both.mmdb` (un archivo con países y redes, como IPinfo Lite) o `asn.tsv.gz` y reinicie traffic66. -Suba una base de datos de países y otra de ASN para tener ambas cosas; si -hay varias cargadas, los archivos `.mmdb` tienen prioridad en lo que -contienen. Cada mes salen versiones nuevas: suba el archivo nuevo de la -misma manera para sustituir al anterior. +**Geografía y redes** muestra en un mapa del mundo el tráfico con otros países: cuanto más oscuro, más tráfico. Al pasar el ratón sobre un país se ve su tráfico; al hacer clic se puede filtrar o abrir sus registros de flujo. Los contornos de los países son de [Natural Earth](https://www.naturalearthdata.com) (dominio público). -Sin la interfaz web, copie el archivo en el directorio de datos como -`country.mmdb`, `asn.mmdb` o `asn.tsv.gz` y reinicie traffic66. +![Geografía y redes: tráfico remoto por país en un mapa del mundo](images/geo.png) Las listas de amenazas son archivos de texto plano con una dirección o red por línea (se ignora lo que va tras `#` o `;`), guardados como @@ -685,7 +683,7 @@ Páginas: | Detalles del tráfico | Clientes, servidores y servicios en el tiempo, en bits/s y en paquetes/s: los 8 primeros de cada uno, y cuántos hubo | | Hallazgos | Qué requiere atención: escaneos, adivinación de contraseñas, movimiento lateral, subidas inusuales, inundaciones y tráfico de listas de amenazas ([más](#findings)) | | Rutas de tráfico | Qué host usa qué aplicación hacia qué país: los 8 hosts con más tráfico, el resto como Otros. **Cliente → servidor** muestra cliente → servicio → servidor; **Por segmento** muestra segmentos en lugar de hosts | -| Geografía y redes | Las redes (AS) de las que vino y a las que fue el tráfico, en el tiempo en bits/s y paquetes/s; tráfico por país y por red | +| Geografía y redes | Un mapa del mundo del tráfico por país; las redes (AS) de las que vino y a las que fue el tráfico, en el tiempo en bits/s y paquetes/s; tráfico por país y por red | | Inteligencia de amenazas | Hosts que hablaron con direcciones de sus listas de amenazas y cuánto enviaron | | Registros de flujo | Cuántos registros de flujo hubo y cuándo (una barra por intervalo), y los registros mismos, del más reciente al más antiguo, página a página, con columnas seleccionables | | Verificación de interfaces | Tráfico de cada interfaz en el tiempo (entrada y salida, bits/s y paquetes/s), y cifras de flujo junto a los contadores de interfaz, de peor a mejor, con motivos | @@ -922,7 +920,7 @@ Opciones de `traffic66` y `traffic66 demo`: | `-sampling-wait` | `5m` | cuánto esperan los registros a una tasa de muestreo | | `-capture` | | captura en una interfaz local (repetible) | | `-inventory` | `/inventory.txt` | archivo de nombres | -| `-asn` | `/asn.tsv.gz` | tabla IP-a-ASN (archivos `.mmdb`: súbalos, o `/country.mmdb` y `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | tabla IP-a-ASN (archivos `.mmdb`: súbalos, o `/country.mmdb` y `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | lista de amenazas adicional como `name=path` (repetible) | | `-dns-upstream` | resolver del sistema | servidor DNS para mostrar nombres de host | | `-dns-rate` | `20` | máximo de resoluciones inversas por segundo | @@ -950,7 +948,7 @@ El directorio de datos lo contiene todo: | `password` | contraseñas de acceso (con hash) | | `inventory.txt` | nombres (**Fuentes → Nombres**) | | `logo.png` (o `.svg`, `.jpg`, `.webp`, `.gif`) | su logotipo (**Fuentes → Logotipo**), si subió uno | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | bases de datos de países y redes y listas de amenazas que haya añadido | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | bases de datos de países y redes y listas de amenazas que haya añadido | **Cuánto tiempo se guardan los datos**: el detalle de flujos 30 días; los resúmenes (vista general y periodos largos) 400 días. Lo más antiguo se borra automáticamente, con una comprobación cada 5 minutos; no se borra nada más ni hay diff --git a/docs/README.fr.md b/docs/README.fr.md index 2421dcb..8d4055b 100644 --- a/docs/README.fr.md +++ b/docs/README.fr.md @@ -633,29 +633,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. Pays, réseaux et listes de menaces -Les pays et les noms de réseau (AS) nécessitent une base de données qui -associe les adresses à ces informations. Importez-en une dans l'interface -web : **Sources → Base de données pays et réseaux → Importer un fichier de -base de données…**. Le fichier est vérifié, enregistré dans le répertoire -de données et utilisé aussitôt pour le nouveau trafic ; aucun redémarrage -n'est nécessaire. Le trafic déjà stocké garde le pays avec lequel il a été -enregistré. +Les pays et les réseaux (AS) fonctionnent d'emblée : traffic66 intègre les bases gratuites **IP to Country Lite** et **IP to ASN Lite** de DB-IP (licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) ; « IP Geolocation by DB-IP », [db-ip.com](https://db-ip.com)). Les pages qui affichent pays et réseaux indiquent la source des données. -Fichiers acceptés : +La copie intégrée date de la version que vous utilisez. DB-IP en publie une nouvelle chaque mois ; **Sources → Base de données pays et réseaux → Mettre à jour DB-IP Lite** télécharge la dernière depuis db-ip.com (le serveur qui exécute traffic66 doit avoir accès à internet ; en cas d'échec, l'interface l'indique). -| Fichier | Fournit | Où le trouver | -|---|---|---| -| DB-IP Lite country ou ASN, `.mmdb` | pays, ou numéro et nom d'AS | gratuit, sans compte : [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country ou ASN, `.mmdb` | pays, ou numéro et nom d'AS | gratuit avec un compte MaxMind : [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| Table IP-vers-ASN, `.tsv` ou `.tsv.gz` | numéro d'AS, nom d'AS et pays | gratuit : [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +Vous pouvez aussi utiliser une autre base gratuite. Téléchargez-la puis importez-la sur la même page avec **Importer un fichier de base de données…**. Elle est vérifiée, enregistrée dans le répertoire de données et utilisée aussitôt pour le nouveau trafic, sans redémarrage. Le trafic déjà enregistré garde le pays avec lequel il a été enregistré. + +| Base | Fournit | Licence | Où l'obtenir | +|---|---|---|---| +| DB-IP Lite (intégrée) | pays ; réseaux | CC BY 4.0, sans compte | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country et ASN, `.mmdb` | pays ; réseaux | GeoLite2 EULA, compte gratuit | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | pays et réseaux dans un seul fichier | CC BY-SA 4.0, compte gratuit | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | réseaux avec leur pays | PDDL 1.0, sans compte | [iptoasn.com](https://iptoasn.com) | + +Vos fichiers sont utilisés en premier ; DB-IP Lite intégrée répond pour le reste. **Supprimer** à côté d'un fichier revient aux autres. La page liste ce qui est utilisé et la date de chaque base. + +Sans l'interface web, copiez le fichier dans le répertoire de données sous le nom `country.mmdb`, `asn.mmdb`, `both.mmdb` (un fichier avec pays et réseaux, comme IPinfo Lite) ou `asn.tsv.gz`, puis redémarrez traffic66. -Importez une base pays et une base ASN pour avoir les deux ; lorsque -plusieurs sont chargées, les fichiers `.mmdb` l'emportent pour ce qu'ils -contiennent. De nouvelles versions sortent chaque mois : importez le -nouveau fichier de la même manière pour remplacer l'ancien. +**Géographie et réseaux** affiche sur une carte du monde le trafic avec les autres pays : plus un pays est foncé, plus il y a de trafic. Survolez un pays pour voir son trafic ; cliquez pour filtrer ou ouvrir ses enregistrements de flux. Les contours des pays viennent de [Natural Earth](https://www.naturalearthdata.com) (domaine public). -Sans l'interface web, copiez le fichier dans le répertoire de données sous -le nom `country.mmdb`, `asn.mmdb` ou `asn.tsv.gz` et redémarrez traffic66. +![Géographie et réseaux : trafic distant par pays sur une carte du monde](images/geo.png) Les listes de menaces sont des fichiers texte avec une adresse ou un réseau par ligne (le texte après `#` ou `;` est ignoré), enregistrés sous @@ -704,7 +701,7 @@ Pages : | Détails du trafic | Clients, serveurs et services dans le temps, en bits/s et en paquets/s : les 8 premiers de chaque, et combien il y en avait | | Détections | Ce qui demande votre attention : scans, essais de mots de passe, mouvements latéraux, envois inhabituels, inondations et trafic des listes de menaces ([plus](#findings)) | | Chemins du trafic | Quel hôte utilise quelle application vers quel pays : les 8 hôtes les plus actifs, le reste dans Autres. **Client → serveur** affiche client → service → serveur ; **Par segment** affiche les segments au lieu des hôtes | -| Géographie et réseaux | Les réseaux (AS) d'où venait et où allait le trafic, dans le temps en bits/s et paquets/s ; trafic par pays et par réseau | +| Géographie et réseaux | Une carte du monde du trafic par pays ; les réseaux (AS) d'où venait et où allait le trafic, dans le temps en bits/s et paquets/s ; trafic par pays et par réseau | | Menaces | Hôtes ayant communiqué avec des adresses de vos listes de menaces, et volume envoyé | | Enregistrements de flux | Combien d'enregistrements de flux il y a eu et quand (une barre par intervalle), et les enregistrements eux-mêmes, du plus récent au plus ancien, page par page, avec colonnes au choix | | Contrôle des interfaces | Trafic de chaque interface dans le temps (entrée et sortie, bits/s et paquets/s), et chiffres de flux à côté des compteurs d'interface, les pires en premier, avec les causes | @@ -951,7 +948,7 @@ Options de `traffic66` et `traffic66 demo` : | `-sampling-wait` | `5m` | durée pendant laquelle les enregistrements attendent un taux d'échantillonnage | | `-capture` | | capture sur une interface locale (répétable) | | `-inventory` | `/inventory.txt` | fichier de noms | -| `-asn` | `/asn.tsv.gz` | table IP-vers-ASN (fichiers `.mmdb` : importez-les, ou `/country.mmdb` et `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | table IP-vers-ASN (fichiers `.mmdb` : importez-les, ou `/country.mmdb` et `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | liste de menaces supplémentaire sous la forme `name=path` (répétable) | | `-dns-upstream` | résolveur du système | serveur DNS pour afficher les noms d'hôte | | `-dns-rate` | `20` | nombre maximal de résolutions inverses par seconde | @@ -979,7 +976,7 @@ Le répertoire de données contient tout : | `password` | mots de passe de connexion (hachés) | | `inventory.txt` | noms (**Sources → Noms**) | | `logo.png` (ou `.svg`, `.jpg`, `.webp`, `.gif`) | votre logo (**Sources → Logo**), si vous en avez importé un | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | bases de données pays et réseaux et listes de menaces que vous avez ajoutées | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | bases de données pays et réseaux et listes de menaces que vous avez ajoutées | **Durée de conservation** : le détail des flux 30 jours, les résumés (vue d'ensemble et longues périodes) 400 jours. Les données plus anciennes sont supprimées automatiquement, vérifiées toutes les 5 minutes ; rien d'autre n'est diff --git a/docs/README.hi.md b/docs/README.hi.md index d987765..168cce5 100644 --- a/docs/README.hi.md +++ b/docs/README.hi.md @@ -604,27 +604,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. देश, नेटवर्क और threat lists -देशों और नेटवर्क (AS) के नामों के लिए एक database चाहिए जो addresses को उनसे -जोड़ता है। इसे web UI में अपलोड करें: **स्रोत → देश और नेटवर्क डेटाबेस → डेटाबेस फ़ाइल अपलोड करें…**। -फ़ाइल जाँची जाती है, data directory में सेव होती है और नए ट्रैफ़िक के लिए तुरंत -इस्तेमाल होती है; restart की ज़रूरत नहीं। पहले से सेव ट्रैफ़िक वही देश रखता है -जिसके साथ वह सेव हुआ था। +देश और नेटवर्क (AS) शुरू से ही काम करते हैं: traffic66 में DB-IP के मुफ़्त **IP to Country Lite** और **IP to ASN Lite** डेटाबेस अंतर्निहित हैं (लाइसेंस [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); "IP Geolocation by DB-IP", [db-ip.com](https://db-ip.com))। देश और नेटवर्क दिखाने वाले पेज डेटा का स्रोत बताते हैं। -स्वीकार की जाने वाली फ़ाइलें: +अंतर्निहित प्रति आपके चलाए जा रहे रिलीज़ के समय की है। DB-IP हर महीने नया संस्करण जारी करता है; **स्रोत → देश और नेटवर्क डेटाबेस → DB-IP Lite अभी अपडेट करें** db-ip.com से नवीनतम डाउनलोड करता है (traffic66 चलाने वाले सर्वर को इंटरनेट चाहिए; विफल होने पर वेब UI बताता है)। -| फ़ाइल | क्या देती है | कहाँ से लें | -|---|---|---| -| DB-IP Lite country या ASN, `.mmdb` | देश, या AS number और नाम | मुफ़्त, बिना account: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country या ASN, `.mmdb` | देश, या AS number और नाम | MaxMind account के साथ मुफ़्त: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP-to-ASN table, `.tsv` या `.tsv.gz` | AS number, AS name और देश | मुफ़्त: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +आप कोई दूसरा मुफ़्त डेटाबेस भी इस्तेमाल कर सकते हैं। उसे डाउनलोड करें, फिर उसी पेज पर **डेटाबेस फ़ाइल अपलोड करें…** से अपलोड करें। फ़ाइल जाँची जाती है, डेटा डायरेक्टरी में सहेजी जाती है और नए ट्रैफ़िक के लिए तुरंत इस्तेमाल होती है; रीस्टार्ट की ज़रूरत नहीं। पहले से सहेजा गया ट्रैफ़िक वही देश रखता है जिसके साथ वह सहेजा गया था। + +| डेटाबेस | क्या देता है | लाइसेंस | कहाँ से मिलेगा | +|---|---|---|---| +| DB-IP Lite (अंतर्निहित) | देश; नेटवर्क | CC BY 4.0, खाता नहीं चाहिए | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country और ASN, `.mmdb` | देश; नेटवर्क | GeoLite2 EULA, मुफ़्त खाता | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | देश और नेटवर्क एक ही फ़ाइल में | CC BY-SA 4.0, मुफ़्त खाता | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | नेटवर्क और उनका देश | PDDL 1.0, खाता नहीं चाहिए | [iptoasn.com](https://iptoasn.com) | + +आपकी अपनी फ़ाइलें पहले इस्तेमाल होती हैं; जो उनमें नहीं है उसका जवाब अंतर्निहित DB-IP Lite देता है। फ़ाइल के पास **हटाएँ** बाक़ी पर लौटा देता है। पेज दिखाता है कि क्या इस्तेमाल हो रहा है और हर डेटाबेस की तारीख़। + +वेब UI के बिना, फ़ाइल को डेटा डायरेक्टरी में `country.mmdb`, `asn.mmdb`, `both.mmdb` (देश और नेटवर्क वाली एक फ़ाइल, जैसे IPinfo Lite) या `asn.tsv.gz` नाम से कॉपी करें और traffic66 रीस्टार्ट करें। -दोनों पाने के लिए एक country database और एक ASN database अपलोड करें; जहाँ कई -लोड हों, वहाँ `.mmdb` फ़ाइलों में जो जानकारी है उसके लिए उन्हें प्राथमिकता मिलती -है। नए versions हर महीने आते हैं: पुरानी फ़ाइल बदलने के लिए नई फ़ाइल इसी तरह -अपलोड करें। +**भूगोल और नेटवर्क** दूसरे देशों के साथ ट्रैफ़िक को विश्व मानचित्र पर दिखाता है: देश जितना गहरा, ट्रैफ़िक उतना ज़्यादा। किसी देश पर पॉइंटर ले जाएँ तो उसका ट्रैफ़िक दिखता है; क्लिक करके फ़िल्टर करें या उसके flow records खोलें। देशों की सीमाएँ [Natural Earth](https://www.naturalearthdata.com) (सार्वजनिक डोमेन) से हैं। -web UI के बिना, फ़ाइल को data directory में `country.mmdb`, `asn.mmdb` या -`asn.tsv.gz` नाम से कॉपी करें और traffic66 restart करें। +![भूगोल और नेटवर्क: विश्व मानचित्र पर देश के अनुसार बाहरी ट्रैफ़िक](images/geo.png) Threat lists सादी text फ़ाइलें होती हैं, हर लाइन में एक address या नेटवर्क (`#` या `;` के बाद का टेक्स्ट नज़रअंदाज़ होता है), जो @@ -669,7 +668,7 @@ application, देश, डिवाइस — पर क्लिक किय | ट्रैफ़िक विवरण | समय के साथ clients, servers और services, bits/s और packets/s में: हर एक के top 8, और वे कुल कितने थे | | संदिग्ध गतिविधि | किस पर ध्यान देना है: scans, पासवर्ड का अनुमान, lateral movement, असामान्य uploads, floods और threat list वाला ट्रैफ़िक ([और जानें](#findings)) | | ट्रैफ़िक के रास्ते | कौन-सा host किस देश की ओर किस application का इस्तेमाल करता है: सबसे व्यस्त 8 hosts, बाकी "अन्य" के रूप में। **क्लाइंट → सर्वर** client → service → server दिखाता है; **सेगमेंट के अनुसार** hosts की जगह नेटवर्क दिखाता है | -| भूगोल और नेटवर्क | वे नेटवर्क (AS) जहाँ से ट्रैफ़िक आया और जहाँ गया, समय के साथ bits/s और packets/s में; देश के हिसाब से और नेटवर्क के हिसाब से ट्रैफ़िक | +| भूगोल और नेटवर्क | देश के अनुसार ट्रैफ़िक का विश्व मानचित्र; वे नेटवर्क (AS) जहाँ से ट्रैफ़िक आया और जहाँ गया, समय के साथ bits/s और packets/s में; देश के हिसाब से और नेटवर्क के हिसाब से ट्रैफ़िक | | ख़तरे की जानकारी | वे hosts जिन्होंने आपकी threat lists के addresses से बात की, और उन्होंने कितना भेजा | | फ़्लो रिकॉर्ड | कितने flow records थे और कब (हर interval के लिए एक bar), और ख़ुद records, सबसे नए पहले, पेज-दर-पेज, चुने जा सकने वाले columns के साथ | | इंटरफ़ेस मिलान | समय के साथ हर interface का ट्रैफ़िक (ingress और egress, bits/s और packets/s), और interface counters के बगल में flow के आँकड़े, सबसे ख़राब पहले, कारणों के साथ | @@ -900,7 +899,7 @@ packets (जैसे दो mirror ports पर) दो बार गिने | `-sampling-wait` | `5m` | records sampling rate का कितनी देर इंतज़ार करें | | `-capture` | | local interface पर capture (दोहराया जा सकता है) | | `-inventory` | `/inventory.txt` | नामों की फ़ाइल | -| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` फ़ाइलें: उन्हें अपलोड करें, या `/country.mmdb` और `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` फ़ाइलें: उन्हें अपलोड करें, या `/country.mmdb` और `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | अतिरिक्त threat list, `name=path` के रूप में (दोहराया जा सकता है) | | `-dns-upstream` | system resolver | host names दिखाने के लिए DNS server | | `-dns-rate` | `20` | प्रति सेकंड अधिकतम reverse lookups | @@ -928,7 +927,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | login पासवर्ड (hashed) | | `inventory.txt` | नाम (**स्रोत → नाम**) | | `logo.png` (या `.svg`, `.jpg`, `.webp`, `.gif`) | आपका लोगो (**स्रोत → लोगो**), अगर आपने अपलोड किया है | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | आपके जोड़े हुए देश और नेटवर्क databases और threat lists | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | आपके जोड़े हुए देश और नेटवर्क databases और threat lists | **डेटा कितने समय तक रखा जाता है**: flow detail 30 दिन, summaries (overview और लंबी समय-सीमाएँ) 400 दिन। इससे पुराना डेटा अपने आप हटता है, हर 5 मिनट में जाँच होती है; इसके अलावा कुछ नहीं हटता और कोई और सीमा नहीं है। diff --git a/docs/README.id.md b/docs/README.id.md index 218dfc6..2f4459f 100644 --- a/docs/README.id.md +++ b/docs/README.id.md @@ -614,27 +614,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. Negara, jaringan, dan daftar ancaman -Negara dan nama jaringan (AS) membutuhkan basis data yang memetakan alamat ke -keduanya. Unggah di antarmuka web: **Sumber → Basis data negara dan jaringan → Unggah file basis data…**. -File diperiksa, disimpan di direktori data, dan langsung dipakai untuk trafik -baru; tidak perlu restart. Trafik yang sudah tersimpan tetap memakai negara -saat ia disimpan. +Negara dan jaringan (AS) langsung berfungsi: traffic66 sudah membawa basis data gratis **IP to Country Lite** dan **IP to ASN Lite** dari DB-IP (lisensi [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); "IP Geolocation by DB-IP", [db-ip.com](https://db-ip.com)). Halaman yang menampilkan negara dan jaringan menyebutkan sumber datanya. -File yang diterima: +Salinan bawaan berasal dari rilis yang Anda jalankan. DB-IP menerbitkan versi baru tiap bulan; **Sumber → Basis data negara dan jaringan → Perbarui DB-IP Lite sekarang** mengunduh yang terbaru dari db-ip.com (server yang menjalankan traffic66 perlu akses internet; jika gagal, antarmuka akan memberi tahu). -| File | Memberikan | Tempat mendapatkannya | -|---|---|---| -| DB-IP Lite country atau ASN, `.mmdb` | negara, atau nomor dan nama AS | gratis, tanpa akun: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country atau ASN, `.mmdb` | negara, atau nomor dan nama AS | gratis dengan akun MaxMind: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| Tabel IP-to-ASN, `.tsv` atau `.tsv.gz` | nomor AS, nama AS, dan negara | gratis: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +Anda juga bisa memakai basis data gratis lain. Unduh, lalu unggah di halaman yang sama dengan **Unggah file basis data…**. File diperiksa, disimpan di direktori data, dan langsung dipakai untuk trafik baru tanpa restart. Trafik yang sudah tersimpan tetap memakai negara saat disimpan. + +| Basis data | Isi | Lisensi | Tempat mendapatkan | +|---|---|---|---| +| DB-IP Lite (bawaan) | negara; jaringan | CC BY 4.0, tanpa akun | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country dan ASN, `.mmdb` | negara; jaringan | GeoLite2 EULA, akun gratis | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | negara dan jaringan dalam satu file | CC BY-SA 4.0, akun gratis | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | jaringan beserta negaranya | PDDL 1.0, tanpa akun | [iptoasn.com](https://iptoasn.com) | + +File Anda dipakai lebih dulu; yang tidak tercakup dijawab DB-IP Lite bawaan. **Hapus** di samping file kembali ke yang lain. Halaman menampilkan apa yang sedang dipakai dan tanggal tiap basis data. + +Tanpa antarmuka web, salin file ke direktori data sebagai `country.mmdb`, `asn.mmdb`, `both.mmdb` (file berisi negara dan jaringan, seperti IPinfo Lite) atau `asn.tsv.gz`, lalu restart traffic66. -Unggah basis data negara dan basis data ASN untuk mendapatkan keduanya; bila -beberapa dimuat, file `.mmdb` didahulukan untuk isi yang dimilikinya. Versi -baru terbit setiap bulan: unggah file baru dengan cara yang sama untuk -mengganti yang lama. +**Geografi & jaringan** menampilkan trafik dengan negara lain di peta dunia: makin gelap, makin banyak trafiknya. Arahkan kursor ke negara untuk melihat trafiknya; klik untuk memfilter atau membuka catatan flow-nya. Batas negara berasal dari [Natural Earth](https://www.naturalearthdata.com) (domain publik). -Tanpa antarmuka web, salin file ke direktori data sebagai `country.mmdb`, -`asn.mmdb`, atau `asn.tsv.gz` lalu restart traffic66. +![Geografi & jaringan: trafik luar per negara di peta dunia](images/geo.png) Daftar ancaman adalah file teks biasa berisi satu alamat atau jaringan per baris (teks setelah `#` atau `;` diabaikan), disimpan sebagai @@ -681,7 +680,7 @@ Halaman: | Detail trafik | Klien, server, dan layanan dari waktu ke waktu, dalam bit/s dan paket/s: 8 teratas dari masing-masing, dan berapa jumlahnya | | Temuan | Apa yang perlu diperhatikan: pemindaian, tebakan kata sandi, pergerakan lateral, unggahan tidak biasa, flood, dan trafik daftar ancaman ([selengkapnya](#findings)) | | Jalur trafik | Host mana memakai aplikasi apa menuju negara mana: 8 host tersibuk, sisanya sebagai Lainnya. **Klien → server** menampilkan klien → layanan → server; **Per segmen** menampilkan jaringan, bukan host | -| Geografi & jaringan | Jaringan (AS) asal dan tujuan trafik, dari waktu ke waktu dalam bit/s dan paket/s; trafik per negara dan per jaringan | +| Geografi & jaringan | Peta dunia trafik per negara; jaringan (AS) asal dan tujuan trafik, dari waktu ke waktu dalam bit/s dan paket/s; trafik per negara dan per jaringan | | Intel ancaman | Host yang berkomunikasi dengan alamat di daftar ancaman Anda, dan berapa banyak yang mereka kirim | | Catatan flow | Berapa banyak catatan flow dan kapan (satu batang per interval), dan catatannya sendiri, terbaru di atas, per halaman, dengan kolom yang bisa dipilih | | Pencocokan antarmuka | Trafik setiap interface dari waktu ke waktu (masuk dan keluar, bit/s dan paket/s), dan angka flow di samping counter interface, yang paling buruk di atas, beserta alasannya | @@ -921,7 +920,7 @@ Opsi untuk `traffic66` dan `traffic66 demo`: | `-sampling-wait` | `5m` | berapa lama record menunggu sampling rate | | `-capture` | | capture di interface lokal (bisa diulang) | | `-inventory` | `/inventory.txt` | file nama | -| `-asn` | `/asn.tsv.gz` | tabel IP-to-ASN (file `.mmdb`: unggah, atau `/country.mmdb` dan `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | tabel IP-to-ASN (file `.mmdb`: unggah, atau `/country.mmdb` dan `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | daftar ancaman tambahan dalam format `name=path` (bisa diulang) | | `-dns-upstream` | resolver sistem | server DNS untuk menampilkan nama host | | `-dns-rate` | `20` | maksimum reverse lookup per detik | @@ -949,7 +948,7 @@ Semua tersimpan di direktori data: | `password` | kata sandi login (dalam bentuk hash) | | `inventory.txt` | nama (**Sumber → Nama**) | | `logo.png` (atau `.svg`, `.jpg`, `.webp`, `.gif`) | logo Anda (**Sumber → Logo**), jika Anda mengunggahnya | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | basis data negara dan jaringan serta daftar ancaman yang Anda tambahkan | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | basis data negara dan jaringan serta daftar ancaman yang Anda tambahkan | **Berapa lama data disimpan**: detail flow 30 hari, ringkasan (ikhtisar dan rentang waktu panjang) 400 hari. Data yang lebih lama dihapus otomatis, diperiksa setiap 5 menit; tidak ada yang lain dihapus dan tidak ada batas lain. diff --git a/docs/README.ja.md b/docs/README.ja.md index 1d65bb5..7747f46 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -505,19 +505,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. 国、ネットワーク、脅威リスト -国とネットワーク(AS)名の表示には、アドレスからそれらを引くデータベースが必要です。Web UI でアップロードしてください:**受信状況 → 国・ネットワークデータベース → データベースファイルをアップロード…**。ファイルは検証されてデータディレクトリに保存され、新しいトラフィックにすぐ使われます。再起動は不要です。保存済みのトラフィックは、保存時の国のままです。 +国とネットワーク(AS)は最初から表示されます。traffic66 には DB-IP の無料データベース **IP to Country Lite** と **IP to ASN Lite** が内蔵されています(ライセンス [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)、"IP Geolocation by DB-IP"、[db-ip.com](https://db-ip.com))。国とネットワークを表示するページにはデータの出典を表示します。 -使えるファイル: +内蔵データは、使っているリリース時点のものです。DB-IP は毎月新版を公開します。**受信状況 → 国・ネットワークデータベース → DB-IP Lite を今すぐ更新** で db-ip.com から最新版をダウンロードできます(traffic66 を動かしているサーバーからインターネットに出られる必要があります。失敗した場合は画面に表示されます)。 -| ファイル | 得られる情報 | 入手先 | -|---|---|---| -| DB-IP Lite country または ASN、`.mmdb` | 国、または AS 番号と名前 | 無料、アカウント不要:[db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country または ASN、`.mmdb` | 国、または AS 番号と名前 | MaxMind アカウントがあれば無料:[maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP-ASN 対応表、`.tsv` または `.tsv.gz` | AS 番号、AS 名、国 | 無料:[iptoasn.com](https://iptoasn.com)(`ip2asn-combined.tsv.gz`) | +ほかの無料データベースも使えます。ダウンロードして、同じページの **データベースファイルをアップロード…** でアップロードします。ファイルは検査されてデータディレクトリに保存され、すぐに新しいトラフィックに使われます。再起動は不要です。保存済みのトラフィックは保存時の国のままです。 + +| データベース | 内容 | ライセンス | 入手先 | +|---|---|---|---| +| DB-IP Lite(内蔵) | 国、ネットワーク | CC BY 4.0、登録不要 | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country と ASN、`.mmdb` | 国、ネットワーク | GeoLite2 EULA、無料アカウントが必要 | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite、`ipinfo_lite.mmdb` | 国とネットワークを 1 ファイルで | CC BY-SA 4.0、無料アカウントが必要 | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN、`ip2asn-combined.tsv.gz` | ネットワークとその国 | PDDL 1.0、登録不要 | [iptoasn.com](https://iptoasn.com) | + +アップロードしたファイルが優先され、そこにない分は内蔵の DB-IP Lite が答えます。ファイルの横の **削除** で残りの構成に戻ります。ページには使用中のデータベースとそれぞれの日付が表示されます。 + +Web UI を使わない場合は、ファイルを `country.mmdb`、`asn.mmdb`、`both.mmdb`(IPinfo Lite のように国とネットワークが 1 ファイルのもの)または `asn.tsv.gz` という名前でデータディレクトリに置き、traffic66 を再起動します。 -国データベースと ASN データベースを両方アップロードすれば両方が得られます。複数読み込まれている場合、`.mmdb` ファイルに含まれる情報はそちらが優先されます。新しい版は毎月出ます。同じ方法で新しいファイルをアップロードすれば古いものと置き換わります。 +**地域とネットワーク** には他の国とのトラフィックが世界地図で表示されます。色が濃いほどトラフィックが多い国です。国にポインタを合わせるとトラフィック量が、クリックすると絞り込みやフローレコードの表示ができます。国境は [Natural Earth](https://www.naturalearthdata.com)(パブリックドメイン)のものです。 -Web UI を使わない場合は、ファイルを `country.mmdb`、`asn.mmdb`、`asn.tsv.gz` のいずれかの名前でデータディレクトリにコピーし、traffic66 を再起動してください。 +![地域とネットワーク:国別の外部トラフィックを示す世界地図](images/geo.png) 脅威リストは 1 行に 1 つのアドレスまたはネットワークを書いたプレーンテキストファイルで(`#` または `;` 以降は無視されます)、`/threats/.txt` として保存します。例: @@ -552,7 +559,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | トラフィック詳細 | クライアント、サーバー、サービスの推移(bits/s と packets/s):それぞれの上位 8 件と、その総数 | | 検知 | 対応が必要なもの:スキャン、パスワード総当たり、横展開、不審なアップロード、フラッド、脅威リストとの通信([詳しく](#findings)) | | フローの流れ | どのホストがどの国に向けてどのアプリケーションを使っているか。通信量の多い 8 ホストを表示し、残りは「その他」にまとめます。**クライアント → サーバー** でクライアント → サービス → サーバーを表示し、**ネットワーク別** でホストの代わりにネットワークを表示します | -| 地域とネットワーク | トラフィックの送信元・送信先のネットワーク(AS)の推移(bits/s と packets/s)、国別・ネットワーク別のトラフィック | +| 地域とネットワーク | 国別トラフィックの世界地図、トラフィックの送信元・送信先のネットワーク(AS)の推移(bits/s と packets/s)、国別・ネットワーク別のトラフィック | | 脅威インテル | 脅威リスト上のアドレスと通信したホストと、その送信量 | | フローレコード | フローレコードの数とその時期(間隔ごとの棒グラフ)と、レコードそのもの(新しい順、ページ送り、表示列は選択可能) | | インターフェース照合 | 全インターフェースのトラフィックの推移(受信と送信、bits/s と packets/s)と、フローの数値とインターフェースカウンターの対比(差の大きい順、理由付き) | @@ -725,7 +732,7 @@ sudo traffic66 -capture en0 | `-sampling-wait` | `5m` | レコードがサンプリングレートを待つ時間 | | `-capture` | | ローカルインターフェースでキャプチャ(複数指定可) | | `-inventory` | `/inventory.txt` | 名前ファイル | -| `-asn` | `/asn.tsv.gz` | IP-ASN 対応表(`.mmdb` ファイルはアップロードするか、`/country.mmdb` と `/asn.mmdb` に置く) | +| `-asn` | `/asn.tsv.gz` | IP-ASN 対応表(`.mmdb` ファイルはアップロードするか、`/country.mmdb` と `/asn.mmdb`, `/both.mmdb` に置く) | | `-threat` | `/threats/*.txt` | 追加の脅威リストを `name=path` で指定(複数指定可) | | `-dns-upstream` | システムのリゾルバー | ホスト名表示に使う DNS サーバー | | `-dns-rate` | `20` | 1 秒あたりの逆引き回数の上限 | @@ -752,7 +759,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | ログインパスワード(ハッシュ化) | | `inventory.txt` | 名前(**受信状況 → 名前**) | | `logo.png`(または `.svg`、`.jpg`、`.webp`、`.gif`) | アップロードしたロゴ(**受信状況 → ロゴ**)。アップロードした場合のみ | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | 追加した国・ネットワークデータベースと脅威リスト | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | 追加した国・ネットワークデータベースと脅威リスト | **データの保存期間**:フロー明細は 30 日、集計(概要と長い期間)は 400 日です。それより古いデータは自動で削除され、5 分ごとに確認します。それ以外は何も削除せず、ほかの制限もありません。明細の保存日数は `-retention-days` で変更でき、何日でも指定できます(例:`-retention-days 365`)。ディスク使用量もそれに応じて増えます。保存日数分が入りきらないときは、サイドメニューの **空き** が赤くなります。ディスクが満杯になると、空きができるまで新しいフローは保存できません。 diff --git a/docs/README.ko.md b/docs/README.ko.md index 1aa0684..828974e 100644 --- a/docs/README.ko.md +++ b/docs/README.ko.md @@ -582,25 +582,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. 국가, 네트워크, 위협 목록 -국가와 네트워크(AS) 이름을 표시하려면 주소를 국가와 네트워크로 매핑하는 데이터베이스가 -필요합니다. 웹 UI에서 업로드하십시오: **수집 상태 → 국가 및 네트워크 데이터베이스 → -데이터베이스 파일 업로드…**. 파일은 검사를 거쳐 데이터 디렉터리에 저장되고 새 트래픽에 바로 -사용되며, 재시작할 필요는 없습니다. 이미 저장된 트래픽은 저장될 때의 국가를 유지합니다. +국가와 네트워크(AS)는 처음부터 표시됩니다. traffic66에는 DB-IP의 무료 데이터베이스 **IP to Country Lite**와 **IP to ASN Lite**가 내장되어 있습니다(라이선스 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), "IP Geolocation by DB-IP", [db-ip.com](https://db-ip.com)). 국가와 네트워크를 보여 주는 페이지에는 데이터 출처가 표시됩니다. -사용할 수 있는 파일: +내장 데이터는 사용 중인 릴리스 시점의 것입니다. DB-IP는 매월 새 버전을 냅니다. **수집 상태 → 국가 및 네트워크 데이터베이스 → DB-IP Lite 지금 업데이트**를 누르면 db-ip.com에서 최신판을 내려받습니다(traffic66이 실행되는 서버가 인터넷에 연결되어 있어야 하며, 실패하면 화면에 알려 줍니다). -| 파일 | 제공 정보 | 구하는 곳 | -|---|---|---| -| DB-IP Lite country 또는 ASN, `.mmdb` | 국가, 또는 AS 번호와 이름 | 무료, 계정 불필요: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country 또는 ASN, `.mmdb` | 국가, 또는 AS 번호와 이름 | MaxMind 계정이 있으면 무료: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP-ASN 매핑 테이블, `.tsv` 또는 `.tsv.gz` | AS 번호, AS 이름, 국가 | 무료: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +다른 무료 데이터베이스도 쓸 수 있습니다. 내려받은 뒤 같은 페이지의 **데이터베이스 파일 업로드…**로 올리면 됩니다. 파일은 검사 후 데이터 디렉터리에 저장되고 새 트래픽에 바로 적용됩니다. 재시작은 필요 없습니다. 이미 저장된 트래픽은 저장할 때의 국가를 유지합니다. + +| 데이터베이스 | 내용 | 라이선스 | 받는 곳 | +|---|---|---|---| +| DB-IP Lite(내장) | 국가, 네트워크 | CC BY 4.0, 가입 불필요 | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country 및 ASN, `.mmdb` | 국가, 네트워크 | GeoLite2 EULA, 무료 계정 필요 | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | 국가와 네트워크를 한 파일에 | CC BY-SA 4.0, 무료 계정 필요 | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | 네트워크와 그 국가 | PDDL 1.0, 가입 불필요 | [iptoasn.com](https://iptoasn.com) | + +직접 올린 파일을 먼저 쓰고, 거기에 없는 주소는 내장 DB-IP Lite가 답합니다. 파일 옆의 **삭제**를 누르면 나머지 구성으로 돌아갑니다. 페이지에는 사용 중인 데이터베이스와 각각의 날짜가 나옵니다. + +웹 UI 없이 하려면 파일을 `country.mmdb`, `asn.mmdb`, `both.mmdb`(IPinfo Lite처럼 국가와 네트워크가 한 파일인 경우) 또는 `asn.tsv.gz`라는 이름으로 데이터 디렉터리에 복사하고 traffic66을 재시작합니다. -국가 데이터베이스와 ASN 데이터베이스를 함께 업로드하면 둘 다 얻을 수 있습니다. 여러 개가 -로드되어 있으면 `.mmdb` 파일에 담긴 정보는 그 파일이 우선합니다. 새 버전은 매달 나옵니다. -같은 방법으로 새 파일을 업로드하면 이전 파일을 대체합니다. +**지역 및 네트워크**는 다른 국가와 주고받은 트래픽을 세계 지도로 보여 줍니다. 색이 진할수록 트래픽이 많습니다. 국가에 마우스를 올리면 트래픽 양이, 클릭하면 필터나 플로 레코드를 볼 수 있습니다. 국경선은 [Natural Earth](https://www.naturalearthdata.com)(퍼블릭 도메인)의 것입니다. -웹 UI 없이 하려면 파일을 데이터 디렉터리에 `country.mmdb`, `asn.mmdb` 또는 `asn.tsv.gz`로 -복사하고 traffic66을 재시작하십시오. +![지역 및 네트워크: 세계 지도에 표시한 국가별 외부 트래픽](images/geo.png) 위협 목록은 한 줄에 주소나 네트워크 하나씩 적은 일반 텍스트 파일이며(`#` 또는 `;` 뒤는 무시됨), `/threats/.txt`로 저장합니다. 예: @@ -643,7 +644,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 트래픽 상세 | 시간에 따른 클라이언트, 서버, 서비스(bits/s와 packets/s): 각각의 상위 8개와 전체 개수 | | 탐지 | 살펴봐야 할 것: 스캔, 비밀번호 대입, 내부 확산, 비정상 업로드, 플러드, 위협 목록 트래픽([자세히](#findings)) | | 트래픽 경로 | 어느 호스트가 어느 국가로 어느 애플리케이션을 쓰는지: 트래픽이 가장 많은 호스트 8개, 나머지는 기타로 묶음. **클라이언트 → 서버**는 클라이언트 → 서비스 → 서버를 보여 주고, **세그먼트별**은 호스트 대신 세그먼트를 보여 줍니다 | -| 지역 및 네트워크 | 트래픽이 오간 네트워크(AS)의 시간에 따른 변화(bits/s와 packets/s), 국가별, 네트워크별 트래픽 | +| 지역 및 네트워크 | 국가별 트래픽 세계 지도, 트래픽이 오간 네트워크(AS)의 시간에 따른 변화(bits/s와 packets/s), 국가별, 네트워크별 트래픽 | | 위협 정보 | 위협 목록에 있는 주소와 통신한 호스트와 그 전송량 | | 플로 레코드 | 플로 레코드가 얼마나, 언제 있었는지(간격마다 막대 하나), 그리고 레코드 자체, 최신순, 페이지 단위, 표시할 열 선택 가능 | | 인터페이스 대조 | 모든 인터페이스의 시간에 따른 트래픽(수신과 송신, bits/s와 packets/s), 그리고 플로 수치와 인터페이스 카운터 비교, 차이가 큰 순, 원인 포함 | @@ -861,7 +862,7 @@ sudo traffic66 -capture en0 | `-sampling-wait` | `5m` | 레코드가 샘플링 레이트를 기다리는 시간 | | `-capture` | | 로컬 인터페이스에서 캡처(반복 지정 가능) | | `-inventory` | `/inventory.txt` | 이름 파일 | -| `-asn` | `/asn.tsv.gz` | IP-ASN 매핑 테이블(`.mmdb` 파일은 업로드하거나 `/country.mmdb`와 `/asn.mmdb`에 둠) | +| `-asn` | `/asn.tsv.gz` | IP-ASN 매핑 테이블(`.mmdb` 파일은 업로드하거나 `/country.mmdb`와 `/asn.mmdb`, `/both.mmdb`에 둠) | | `-threat` | `/threats/*.txt` | 추가 위협 목록, `name=path` 형식(반복 지정 가능) | | `-dns-upstream` | 시스템 리졸버 | 호스트 이름 표시에 쓰는 DNS 서버 | | `-dns-rate` | `20` | 초당 최대 역방향 조회 횟수 | @@ -888,7 +889,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | 로그인 비밀번호(해시) | | `inventory.txt` | 이름(**수집 상태 → 이름**) | | `logo.png`(또는 `.svg`, `.jpg`, `.webp`, `.gif`) | 업로드한 경우 내 로고(**수집 상태 → 로고**) | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | 추가한 국가 및 네트워크 데이터베이스와 위협 목록 | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | 추가한 국가 및 네트워크 데이터베이스와 위협 목록 | **데이터 보존 기간**: 플로 상세는 30일, 요약(개요와 긴 기간)은 400일입니다. 그보다 오래된 데이터는 자동으로 삭제되며 5분마다 확인합니다. 그 밖에는 아무것도 삭제하지 않고 다른 제한도 없습니다. 상세 보존 일수는 `-retention-days`로 바꿀 수 있고 diff --git a/docs/README.pt.md b/docs/README.pt.md index 64346aa..b0578fc 100644 --- a/docs/README.pt.md +++ b/docs/README.pt.md @@ -617,27 +617,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. Países, redes e listas de ameaças -Países e nomes de rede (AS) exigem um banco de dados que associe os -endereços a eles. Envie um pela interface web: **Fontes → Banco de dados -de países e redes → Enviar arquivo de banco de dados…**. Ele é verificado, -salvo no diretório de dados e usado na hora para o tráfego novo; não é -preciso reiniciar. O tráfego já armazenado mantém o país com que foi salvo. +Países e redes (AS) funcionam desde o início: o traffic66 traz embutidas as bases gratuitas **IP to Country Lite** e **IP to ASN Lite** da DB-IP (licença [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); "IP Geolocation by DB-IP", [db-ip.com](https://db-ip.com)). As páginas que mostram países e redes indicam a origem dos dados. -Arquivos aceitos: +A cópia embutida é da versão que você usa. A DB-IP publica uma nova a cada mês; **Fontes → Banco de dados de países e redes → Atualizar DB-IP Lite agora** baixa a mais recente de db-ip.com (o servidor que roda o traffic66 precisa de acesso à internet; se falhar, a interface avisa). -| Arquivo | Fornece | Onde obter | -|---|---|---| -| DB-IP Lite country ou ASN, `.mmdb` | país, ou número e nome do AS | grátis, sem conta: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country ou ASN, `.mmdb` | país, ou número e nome do AS | grátis com uma conta MaxMind: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| Tabela IP-para-ASN, `.tsv` ou `.tsv.gz` | número do AS, nome do AS e país | grátis: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +Você também pode usar outro banco gratuito. Baixe-o e envie-o na mesma página com **Enviar arquivo de banco de dados…**. Ele é verificado, salvo no diretório de dados e usado para o tráfego novo na hora, sem reiniciar. O tráfego já guardado mantém o país com que foi salvo. + +| Banco | Fornece | Licença | Onde obter | +|---|---|---|---| +| DB-IP Lite (embutida) | países; redes | CC BY 4.0, sem conta | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country e ASN, `.mmdb` | países; redes | GeoLite2 EULA, conta gratuita | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | países e redes em um só arquivo | CC BY-SA 4.0, conta gratuita | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | redes com seu país | PDDL 1.0, sem conta | [iptoasn.com](https://iptoasn.com) | + +Seus arquivos são usados primeiro; o que eles não cobrem vem da DB-IP Lite embutida. **Remover** ao lado de um arquivo volta ao restante. A página lista o que está em uso e a data de cada banco. + +Sem a interface web, copie o arquivo para o diretório de dados como `country.mmdb`, `asn.mmdb`, `both.mmdb` (um arquivo com países e redes, como o IPinfo Lite) ou `asn.tsv.gz` e reinicie o traffic66. -Envie um banco de países e um banco de ASN para ter os dois; quando há -vários carregados, os arquivos `.mmdb` têm precedência no que contêm. Novas -versões saem todo mês: envie o arquivo novo da mesma forma para substituir -o antigo. +**Geografia e redes** mostra num mapa-múndi o tráfego com outros países: quanto mais escuro, mais tráfego. Passe o mouse sobre um país para ver o tráfego; clique para filtrar ou abrir os registros de fluxo. Os contornos dos países vêm do [Natural Earth](https://www.naturalearthdata.com) (domínio público). -Sem a interface web, copie o arquivo para o diretório de dados como -`country.mmdb`, `asn.mmdb` ou `asn.tsv.gz` e reinicie o traffic66. +![Geografia e redes: tráfego remoto por país num mapa-múndi](images/geo.png) Listas de ameaças são arquivos de texto puro com um endereço ou rede por linha (o texto depois de `#` ou `;` é ignorado), salvos como @@ -684,7 +683,7 @@ Páginas: | Detalhes do tráfego | Clientes, servidores e serviços ao longo do tempo, em bits/s e em pacotes/s: os 8 maiores de cada, e quantos havia | | Detecções | O que precisa de atenção: varreduras, tentativas de senhas, movimento lateral, envios incomuns, inundações e tráfego de listas de ameaças ([mais](#findings)) | | Caminhos do tráfego | Qual host usa qual aplicação para qual país: os 8 hosts com mais tráfego, o resto como Outros. **Cliente → servidor** mostra cliente → serviço → servidor; **Por segmento** mostra segmentos em vez de hosts | -| Geografia e redes | As redes (AS) de onde o tráfego veio e para onde foi, ao longo do tempo em bits/s e pacotes/s; tráfego por país e por rede | +| Geografia e redes | Um mapa-múndi do tráfego por país; as redes (AS) de onde o tráfego veio e para onde foi, ao longo do tempo em bits/s e pacotes/s; tráfego por país e por rede | | Ameaças | Hosts que se comunicaram com endereços das suas listas de ameaças, e quanto enviaram | | Registros de fluxo | Quantos registros de fluxo houve e quando (uma barra por intervalo), e os próprios registros, dos mais recentes para os mais antigos, página a página, com colunas selecionáveis | | Conferência de interfaces | Tráfego de cada interface ao longo do tempo (entrada e saída, bits/s e pacotes/s), e números de fluxo ao lado dos contadores de interface, piores primeiro, com os motivos | @@ -920,7 +919,7 @@ Opções de `traffic66` e `traffic66 demo`: | `-sampling-wait` | `5m` | quanto tempo os registros esperam por uma taxa de amostragem | | `-capture` | | captura em uma interface local (repetível) | | `-inventory` | `/inventory.txt` | arquivo de nomes | -| `-asn` | `/asn.tsv.gz` | tabela IP-para-ASN (arquivos `.mmdb`: envie-os, ou `/country.mmdb` e `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | tabela IP-para-ASN (arquivos `.mmdb`: envie-os, ou `/country.mmdb` e `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | lista de ameaças extra no formato `name=path` (repetível) | | `-dns-upstream` | resolvedor do sistema | servidor DNS para exibir nomes de host | | `-dns-rate` | `20` | máximo de consultas reversas por segundo | @@ -948,7 +947,7 @@ O diretório de dados guarda tudo: | `password` | senhas de login (em hash) | | `inventory.txt` | nomes (**Fontes → Nomes**) | | `logo.png` (ou `.svg`, `.jpg`, `.webp`, `.gif`) | seu logotipo (**Fontes → Logotipo**), se você enviou um | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | bancos de dados de países e redes e listas de ameaças que você adicionou | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | bancos de dados de países e redes e listas de ameaças que você adicionou | **Por quanto tempo os dados ficam**: o detalhe de fluxos 30 dias; os resumos (visão geral e períodos longos) 400 dias. O que for mais antigo é apagado automaticamente, com verificação a cada 5 minutos; nada mais é apagado e diff --git a/docs/README.ru.md b/docs/README.ru.md index a36fa6a..6e1d354 100644 --- a/docs/README.ru.md +++ b/docs/README.ru.md @@ -610,27 +610,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. Страны, сети и списки угроз -Для стран и названий сетей (AS) нужна база, сопоставляющая им адреса. -Загрузите её в веб-интерфейсе: **Источники → База стран и сетей → Загрузить файл базы…**. -Файл проверяется, сохраняется в каталоге данных и сразу используется для -нового трафика; перезапуск не нужен. Уже сохранённый трафик сохраняет ту -страну, с которой был записан. +Страны и сети (AS) работают сразу: в traffic66 встроены бесплатные базы DB-IP **IP to Country Lite** и **IP to ASN Lite** (лицензия [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); «IP Geolocation by DB-IP», [db-ip.com](https://db-ip.com)). Страницы со странами и сетями указывают источник данных. -Поддерживаемые файлы: +Встроенная копия — на момент выпуска вашей версии. DB-IP выпускает новую каждый месяц; **Источники → База стран и сетей → Обновить DB-IP Lite** загружает свежую с db-ip.com (серверу с traffic66 нужен доступ в интернет; при ошибке интерфейс об этом сообщит). -| Файл | Что даёт | Где взять | -|---|---|---| -| DB-IP Lite country или ASN, `.mmdb` | страну или номер и название AS | бесплатно, без регистрации: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country или ASN, `.mmdb` | страну или номер и название AS | бесплатно, с учётной записью MaxMind: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| Таблица IP-to-ASN, `.tsv` или `.tsv.gz` | номер AS, название AS и страну | бесплатно: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +Можно использовать и другую бесплатную базу. Скачайте её и загрузите на той же странице кнопкой **Загрузить файл базы…**. Файл проверяется, сохраняется в каталоге данных и сразу применяется к новому трафику, без перезапуска. Уже сохранённый трафик сохраняет страну, с которой был записан. + +| База | Даёт | Лицензия | Где взять | +|---|---|---|---| +| DB-IP Lite (встроена) | страны; сети | CC BY 4.0, без регистрации | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country и ASN, `.mmdb` | страны; сети | GeoLite2 EULA, бесплатная учётная запись | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite, `ipinfo_lite.mmdb` | страны и сети в одном файле | CC BY-SA 4.0, бесплатная учётная запись | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN, `ip2asn-combined.tsv.gz` | сети и их страна | PDDL 1.0, без регистрации | [iptoasn.com](https://iptoasn.com) | + +Сначала используются ваши файлы; то, чего в них нет, определяет встроенная DB-IP Lite. **Удалить** рядом с файлом возвращает к остальным. На странице видно, что используется, и дата каждой базы. + +Без веб-интерфейса скопируйте файл в каталог данных как `country.mmdb`, `asn.mmdb`, `both.mmdb` (файл со странами и сетями, например IPinfo Lite) или `asn.tsv.gz` и перезапустите traffic66. -Чтобы получить и то и другое, загрузите базу стран и базу ASN; если загружено -несколько, файлы `.mmdb` имеют приоритет в том, что они содержат. Новые -версии выходят ежемесячно: чтобы заменить старый файл, загрузите новый тем же -способом. +**География и сети** показывает трафик с другими странами на карте мира: чем темнее страна, тем больше трафика. Наведите на страну, чтобы увидеть её трафик; нажмите, чтобы отфильтровать или открыть записи потоков. Границы стран — из [Natural Earth](https://www.naturalearthdata.com) (общественное достояние). -Без веб-интерфейса скопируйте файл в каталог данных как `country.mmdb`, -`asn.mmdb` или `asn.tsv.gz` и перезапустите traffic66. +![География и сети: внешний трафик по странам на карте мира](images/geo.png) Списки угроз — это текстовые файлы с одним адресом или сетью на строку (текст после `#` или `;` игнорируется), сохранённые как @@ -677,7 +676,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | Детали трафика | Клиенты, серверы и сервисы во времени, в бит/с и в пакетах/с: топ 8 каждого и сколько их было всего | | Обнаружения | Что требует внимания: сканирования, подбор паролей, боковое перемещение, необычные выгрузки, флуд и трафик со списков угроз ([подробнее](#findings)) | | Пути трафика | Какой узел к какому приложению в какой стране обращается: 8 самых активных узлов, остальные как «Прочее». **Клиент → сервер** показывает клиент → сервис → сервер; **По сегментам** показывает сети вместо узлов | -| География и сети | Сети (AS), откуда трафик пришёл и куда ушёл, во времени в бит/с и пакетах/с; трафик по странам и по сетям | +| География и сети | Карта мира с трафиком по странам; сети (AS), откуда трафик пришёл и куда ушёл, во времени в бит/с и пакетах/с; трафик по странам и по сетям | | Угрозы | Хосты, обращавшиеся к адресам из ваших списков угроз, и сколько они отправили | | Записи потоков | Сколько было записей потоков и когда (столбик на интервал), и сами записи, новые сверху, постранично, с выбором столбцов | | Сверка интерфейсов | Трафик каждого интерфейса во времени (вход и выход, бит/с и пакеты/с) и цифры по потокам рядом со счётчиками интерфейсов, худшие сверху, с причинами | @@ -914,7 +913,7 @@ Wi-Fi. | `-sampling-wait` | `5m` | сколько записи ждут коэффициент сэмплирования | | `-capture` | | захват на локальном интерфейсе (можно повторять) | | `-inventory` | `/inventory.txt` | файл названий | -| `-asn` | `/asn.tsv.gz` | таблица IP-to-ASN (файлы `.mmdb`: загрузите их или положите как `/country.mmdb` и `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | таблица IP-to-ASN (файлы `.mmdb`: загрузите их или положите как `/country.mmdb` и `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | дополнительный список угроз в виде `name=path` (можно повторять) | | `-dns-upstream` | системный резолвер | DNS-сервер для отображения имён хостов | | `-dns-rate` | `20` | максимум обратных DNS-запросов в секунду | @@ -942,7 +941,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | пароли для входа (в виде хешей) | | `inventory.txt` | названия (**Источники → Названия**) | | `logo.png` (или `.svg`, `.jpg`, `.webp`, `.gif`) | ваш логотип (**Источники → Логотип**), если вы его загрузили | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | добавленные вами базы стран и сетей и списки угроз | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | добавленные вами базы стран и сетей и списки угроз | **Сколько хранятся данные**: детализация потоков 30 дней, сводки (обзор и длинные периоды) 400 дней. Более старые данные удаляются автоматически, проверка каждые 5 минут; больше ничего не удаляется и других ограничений нет. diff --git a/docs/README.ur.md b/docs/README.ur.md index 82985fe..1324c76 100644 --- a/docs/README.ur.md +++ b/docs/README.ur.md @@ -605,26 +605,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. ممالک، نیٹ ورک اور threat lists -ممالک اور نیٹ ورک (AS) کے ناموں کے لیے ایسا database درکار ہے جو addresses کو -ان سے جوڑے۔ اسے web UI میں اپ لوڈ کریں: **ذرائع → ممالک اور نیٹ ورکس کا ڈیٹابیس → ڈیٹابیس فائل اپ لوڈ کریں…**۔ -فائل جانچی جاتی ہے، data directory میں محفوظ ہوتی ہے اور نئی ٹریفک کے لیے فوراً -استعمال ہوتی ہے؛ restart کی ضرورت نہیں۔ پہلے سے محفوظ ٹریفک وہی ملک رکھتی ہے -جس کے ساتھ وہ محفوظ ہوئی تھی۔ +ممالک اور نیٹ ورکس (AS) شروع سے کام کرتے ہیں: traffic66 میں DB-IP کے مفت **IP to Country Lite** اور **IP to ASN Lite** ڈیٹابیس اندرونی طور پر شامل ہیں (لائسنس [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)؛ "IP Geolocation by DB-IP"، [db-ip.com](https://db-ip.com))۔ ممالک اور نیٹ ورکس دکھانے والے صفحات ڈیٹا کا ماخذ بتاتے ہیں۔ -قابلِ قبول فائلیں: +اندرونی کاپی آپ کے چلائے جا رہے ریلیز کے وقت کی ہے۔ DB-IP ہر ماہ نیا ورژن جاری کرتا ہے؛ **ذرائع ← ممالک اور نیٹ ورکس کا ڈیٹابیس ← DB-IP Lite ابھی اپ ڈیٹ کریں** db-ip.com سے تازہ ترین ڈاؤن لوڈ کرتا ہے (traffic66 چلانے والے سرور کو انٹرنیٹ چاہیے؛ ناکامی پر ویب UI بتاتا ہے)۔ -| فائل | کیا دیتی ہے | کہاں سے ملے گی | -|---|---|---| -| DB-IP Lite country یا ASN، `.mmdb` | ملک، یا AS number اور نام | مفت، account کے بغیر: [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country یا ASN، `.mmdb` | ملک، یا AS number اور نام | MaxMind account کے ساتھ مفت: [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP-to-ASN table، `.tsv` یا `.tsv.gz` | AS number، AS name اور ملک | مفت: [iptoasn.com](https://iptoasn.com) (`ip2asn-combined.tsv.gz`) | +آپ کوئی دوسرا مفت ڈیٹابیس بھی استعمال کر سکتے ہیں۔ اسے ڈاؤن لوڈ کریں، پھر اسی صفحے پر **ڈیٹابیس فائل اپ لوڈ کریں…** سے اپ لوڈ کریں۔ فائل جانچی جاتی ہے، ڈیٹا ڈائریکٹری میں محفوظ ہوتی ہے اور نئے ٹریفک کے لیے فوراً استعمال ہوتی ہے؛ ری اسٹارٹ کی ضرورت نہیں۔ پہلے سے محفوظ ٹریفک وہی ملک رکھتا ہے جس کے ساتھ محفوظ ہوا تھا۔ + +| ڈیٹابیس | کیا دیتا ہے | لائسنس | کہاں سے ملے گا | +|---|---|---|---| +| DB-IP Lite (اندرونی) | ممالک؛ نیٹ ورکس | CC BY 4.0، اکاؤنٹ کی ضرورت نہیں | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country اور ASN، `.mmdb` | ممالک؛ نیٹ ورکس | GeoLite2 EULA، مفت اکاؤنٹ | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite، `ipinfo_lite.mmdb` | ممالک اور نیٹ ورکس ایک فائل میں | CC BY-SA 4.0، مفت اکاؤنٹ | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN، `ip2asn-combined.tsv.gz` | نیٹ ورکس اور ان کا ملک | PDDL 1.0، اکاؤنٹ کی ضرورت نہیں | [iptoasn.com](https://iptoasn.com) | + +آپ کی اپنی فائلیں پہلے استعمال ہوتی ہیں؛ جو ان میں نہیں اس کا جواب اندرونی DB-IP Lite دیتا ہے۔ فائل کے ساتھ **ہٹائیں** باقی پر واپس لے جاتا ہے۔ صفحہ دکھاتا ہے کہ کیا استعمال ہو رہا ہے اور ہر ڈیٹابیس کی تاریخ۔ + +ویب UI کے بغیر، فائل کو ڈیٹا ڈائریکٹری میں `country.mmdb`، `asn.mmdb`، `both.mmdb` (ممالک اور نیٹ ورکس والی ایک فائل، جیسے IPinfo Lite) یا `asn.tsv.gz` کے نام سے کاپی کریں اور traffic66 ری اسٹارٹ کریں۔ -دونوں حاصل کرنے کے لیے ایک country database اور ایک ASN database اپ لوڈ کریں؛ -جہاں کئی لوڈ ہوں، وہاں `.mmdb` فائلیں اپنے مواد کے لیے ترجیح پاتی ہیں۔ نئے -versions ہر مہینے آتے ہیں: پرانی فائل بدلنے کے لیے نئی فائل اسی طرح اپ لوڈ کریں۔ +**مقامات اور نیٹ ورک** دوسرے ممالک کے ساتھ ٹریفک کو دنیا کے نقشے پر دکھاتا ہے: ملک جتنا گہرا، ٹریفک اتنی زیادہ۔ کسی ملک پر پوائنٹر لے جائیں تو اس کی ٹریفک نظر آتی ہے؛ کلک کر کے فلٹر کریں یا اس کے flow records کھولیں۔ ممالک کی سرحدیں [Natural Earth](https://www.naturalearthdata.com) (پبلک ڈومین) سے ہیں۔ -web UI کے بغیر، فائل کو data directory میں `country.mmdb`، `asn.mmdb` یا -`asn.tsv.gz` کے نام سے کاپی کریں اور traffic66 restart کریں۔ +![مقامات اور نیٹ ورک: دنیا کے نقشے پر ملک کے لحاظ سے بیرونی ٹریفک](images/geo.png) Threat lists سادہ text فائلیں ہیں، ہر لائن میں ایک address یا نیٹ ورک (`#` یا `;` کے بعد کا متن نظرانداز ہوتا ہے)، جو @@ -669,7 +669,7 @@ application، ملک، ڈیوائس — پر کلک کیا جا سکتا ہے: | ٹریفک کی تفصیل | وقت کے ساتھ clients، servers اور services، bits/s اور packets/s میں: ہر ایک کے سرفہرست 8، اور وہ کل کتنے تھے | | مشتبہ سرگرمی | کس چیز پر توجہ چاہیے: scans، پاس ورڈ کا اندازہ، lateral movement، غیر معمولی uploads، floods اور threat list والی ٹریفک ([مزید](#findings)) | | ٹریفک کے راستے | کون سا host کس ملک کی طرف کون سی application استعمال کرتا ہے: 8 سب سے مصروف hosts، باقی "دیگر" کے طور پر۔ **کلائنٹ ← سرور** کلائنٹ ← سروس ← سرور دکھاتا ہے؛ **سیگمنٹ کے لحاظ سے** hosts کی جگہ نیٹ ورکس دکھاتا ہے | -| مقامات اور نیٹ ورک | وہ نیٹ ورکس (AS) جہاں سے ٹریفک آئی اور جہاں گئی، وقت کے ساتھ bits/s اور packets/s میں؛ ملک کے حساب سے اور نیٹ ورک کے حساب سے ٹریفک | +| مقامات اور نیٹ ورک | ملک کے لحاظ سے ٹریفک کا دنیا کا نقشہ؛ وہ نیٹ ورکس (AS) جہاں سے ٹریفک آئی اور جہاں گئی، وقت کے ساتھ bits/s اور packets/s میں؛ ملک کے حساب سے اور نیٹ ورک کے حساب سے ٹریفک | | خطرے کی معلومات | وہ hosts جنہوں نے آپ کی threat lists کے addresses سے بات کی، اور کتنا بھیجا | | فلو ریکارڈ | کتنے flow records تھے اور کب (ہر interval کے لیے ایک bar)، اور خود records، نئے پہلے، صفحہ بہ صفحہ، منتخب کیے جا سکنے والے columns کے ساتھ | | انٹرفیس جانچ | وقت کے ساتھ ہر interface کی ٹریفک (ingress اور egress، bits/s اور packets/s)، اور interface counters کے ساتھ flow کے اعداد، بدترین پہلے، وجوہات کے ساتھ | @@ -900,7 +900,7 @@ Capture کے لیے root درکار ہے؛ کچھ انسٹال نہیں کرنا | `-sampling-wait` | `5m` | records کتنی دیر sampling rate کا انتظار کریں | | `-capture` | | local interface پر capture (دہرایا جا سکتا ہے) | | `-inventory` | `/inventory.txt` | ناموں کی فائل | -| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` فائلیں: انہیں اپ لوڈ کریں، یا `/country.mmdb` اور `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | IP-to-ASN table (`.mmdb` فائلیں: انہیں اپ لوڈ کریں، یا `/country.mmdb` اور `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | اضافی threat list، `name=path` کی شکل میں (دہرایا جا سکتا ہے) | | `-dns-upstream` | system resolver | host names دکھانے کے لیے DNS server | | `-dns-rate` | `20` | فی سیکنڈ زیادہ سے زیادہ reverse lookups | @@ -927,7 +927,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | login پاس ورڈز (hashed) | | `inventory.txt` | نام (**ذرائع → نام**) | | `logo.png` (یا `.svg`، `.jpg`، `.webp`، `.gif`) | آپ کا لوگو (**ذرائع → لوگو**)، اگر آپ نے اپ لوڈ کیا ہو | -| `country.mmdb`، `asn.mmdb`، `asn.tsv.gz`، `threats/` | آپ کے شامل کردہ ممالک اور نیٹ ورکس کے databases اور threat lists | +| `country.mmdb`، `asn.mmdb`، `both.mmdb`، `asn.tsv.gz`، `dbip-country.mmdb`، `dbip-asn.mmdb`، `threats/` | آپ کے شامل کردہ ممالک اور نیٹ ورکس کے databases اور threat lists | **ڈیٹا کتنی دیر رکھا جاتا ہے**: flow detail 30 دن، summaries (overview اور لمبی مدتیں) 400 دن۔ اس سے پرانا ڈیٹا خود بخود حذف ہوتا ہے، ہر 5 منٹ میں جانچ ہوتی ہے؛ اس کے علاوہ کچھ حذف نہیں ہوتا اور کوئی اور حد نہیں۔ detail diff --git a/docs/README.zh.md b/docs/README.zh.md index 7b2eefa..3aa9e31 100644 --- a/docs/README.zh.md +++ b/docs/README.zh.md @@ -505,19 +505,26 @@ snmp 192.0.2.9 s3cret 10.99.0.9:161 ## 8. 国家、运营商网络与威胁情报列表 -显示国家和网络(AS)名称需要一个把地址映射到国家和网络的数据库。在 Web 界面中上传即可:**接入 → 国家和运营商数据库 → 上传数据库文件…**。文件会经过校验、保存到数据目录,并立即用于新的流量,无需重启。已经存储的流量保留保存时的国家。 +国家和运营商(AS)开箱即用:traffic66 内置了 DB-IP 的免费 **IP to Country Lite** 和 **IP to ASN Lite** 数据库(许可证 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/);"IP Geolocation by DB-IP",[db-ip.com](https://db-ip.com))。显示国家和运营商的页面会注明数据来源。 -可接受的文件: +内置的是你所运行版本发布时的数据。DB-IP 每月发布新版;**接入 → 国家和运营商数据库 → 立即更新 DB-IP Lite** 会从 db-ip.com 下载最新版(运行 traffic66 的服务器需要能上网;下载失败时界面会提示)。 -| 文件 | 提供 | 获取途径 | -|---|---|---| -| DB-IP Lite country 或 ASN,`.mmdb` | 国家,或 AS 号和名称 | 免费,无需账号:[db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | -| MaxMind GeoLite2 Country 或 ASN,`.mmdb` | 国家,或 AS 号和名称 | 注册 MaxMind 账号后免费:[maxmind.com](https://www.maxmind.com/en/geolite2/signup) | -| IP 到 ASN 映射表,`.tsv` 或 `.tsv.gz` | AS 号、AS 名称和国家 | 免费:[iptoasn.com](https://iptoasn.com)(`ip2asn-combined.tsv.gz`) | +也可以换用其他免费数据库:下载后在同一页面点 **上传数据库文件…**。文件会经过校验、保存到数据目录,并立即用于新的流量,无需重启。已经存储的流量保留保存时的国家。 + +| 数据库 | 提供 | 许可证 | 获取途径 | +|---|---|---|---| +| DB-IP Lite(内置) | 国家;运营商 | CC BY 4.0,无需账号 | [db-ip.com/db/lite.php](https://db-ip.com/db/lite.php) | +| MaxMind GeoLite2 Country 和 ASN,`.mmdb` | 国家;运营商 | GeoLite2 EULA,需免费账号 | [maxmind.com](https://www.maxmind.com/en/geolite2/signup) | +| IPinfo Lite,`ipinfo_lite.mmdb` | 国家和运营商在同一个文件里 | CC BY-SA 4.0,需免费账号 | [ipinfo.io/lite](https://ipinfo.io/lite) | +| IPtoASN,`ip2asn-combined.tsv.gz` | 运营商及其所属国家 | PDDL 1.0,无需账号 | [iptoasn.com](https://iptoasn.com) | + +优先使用你自己的文件,查不到的再由内置的 DB-IP Lite 回答。文件旁的 **删除** 可恢复为其余的库。页面列出正在使用的库和各自的日期。 + +不使用 Web 界面时,把文件复制到数据目录,命名为 `country.mmdb`、`asn.mmdb`、`both.mmdb`(国家和运营商在同一个文件里,如 IPinfo Lite)或 `asn.tsv.gz`,然后重启 traffic66。 -同时上传一个国家数据库和一个 ASN 数据库即可两者兼得;加载了多个时,`.mmdb` 文件对其包含的内容优先。新版本每月发布:用同样的方式上传新文件即可替换旧文件。 +**地理与运营商** 在世界地图上显示与其他国家之间的流量:颜色越深,流量越大。鼠标指向国家可看到流量,点击可筛选或打开它的流记录。国界来自 [Natural Earth](https://www.naturalearthdata.com)(公有领域)。 -不使用 Web 界面时,把文件复制到数据目录,命名为 `country.mmdb`、`asn.mmdb` 或 `asn.tsv.gz`,然后重启 traffic66。 +![地理与运营商:世界地图上按国家显示的外部流量](images/geo.png) 威胁情报列表是纯文本文件,每行一个地址或网段(`#` 或 `;` 之后的内容会被忽略),保存为 `/threats/.txt`,例如: @@ -552,7 +559,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 流量明细 | 客户端、服务器和服务随时间的变化,单位为 bits/s 和 packets/s:各自的前 8 名,以及总共有多少个 | | 发现 | 哪些需要处理:扫描、暴力破解、横向移动、异常上传、泛洪和威胁情报流量([详见](#findings)) | | 流向 | 哪台主机在访问哪个国家的哪个应用:流量最大的 8 台主机,其余归为“其他”。**客户端 → 服务器** 显示客户端 → 服务 → 服务器;**按网段** 显示网段而不是主机 | -| 地理与运营商 | 流量来自和去往哪些网络(AS),以 bits/s 和 packets/s 显示随时间的变化;按国家和按网络统计的流量 | +| 地理与运营商 | 世界地图上按国家显示的流量;流量来自和去往哪些网络(AS),以 bits/s 和 packets/s 显示随时间的变化;按国家和按网络统计的流量 | | 威胁情报 | 与威胁情报列表中地址有通信的主机,以及它们发送了多少流量 | | 流记录 | 有多少条流记录、出现在什么时候(每个间隔一根柱),以及流记录本身,最新的在前,分页显示,可选择显示列 | | 接口对账 | 每个接口的流量随时间变化(入向和出向,bits/s 和 packets/s),以及流统计与接口计数器并列对比,差异最大的在前,附原因 | @@ -725,7 +732,7 @@ sudo traffic66 -capture en0 | `-sampling-wait` | `5m` | 记录等待采样率的最长时间 | | `-capture` | | 在本机网卡上抓包(可重复指定) | | `-inventory` | `/inventory.txt` | 名称文件 | -| `-asn` | `/asn.tsv.gz` | IP 到 ASN 映射表(`.mmdb` 文件:在 Web 界面上传,或放在 `/country.mmdb` 和 `/asn.mmdb`) | +| `-asn` | `/asn.tsv.gz` | IP 到 ASN 映射表(`.mmdb` 文件:在 Web 界面上传,或放在 `/country.mmdb` 和 `/asn.mmdb`, `/both.mmdb`) | | `-threat` | `/threats/*.txt` | 额外的威胁情报列表,格式为 `name=path`(可重复指定) | | `-dns-upstream` | 系统解析器 | 用于显示主机名的 DNS 服务器 | | `-dns-rate` | `20` | 每秒反向解析次数上限 | @@ -752,7 +759,7 @@ traffic66 -data /var/lib/traffic66 -listen "sflow=:6343,netflow=:2055,ipfix=:473 | `password` | 登录密码(哈希) | | `inventory.txt` | 名称(**接入 → 名称**) | | `logo.png`(或 `.svg`、`.jpg`、`.webp`、`.gif`) | 你的 Logo(**接入 → Logo**),如果上传过 | -| `country.mmdb`, `asn.mmdb`, `asn.tsv.gz`, `threats/` | 你添加的国家和运营商数据库以及威胁情报列表 | +| `country.mmdb`, `asn.mmdb`, `both.mmdb`, `asn.tsv.gz`, `dbip-country.mmdb`, `dbip-asn.mmdb`, `threats/` | 你添加的国家和运营商数据库以及威胁情报列表 | **数据保留多久**:流明细 30 天,汇总(总览和长时间范围)400 天。更早的数据自动删除,每 5 分钟检查一次;除此之外不删任何数据,也没有其他限制。用 `-retention-days` 修改明细保留天数,任意天数都可以,例如 `-retention-days 365`。占用的磁盘随之增长:保留天数放不下时,侧边栏的 **可用** 会变红。磁盘写满后,新的流无法保存,直到腾出空间。 diff --git a/docs/images/geo.png b/docs/images/geo.png new file mode 100644 index 0000000..d8670c2 Binary files /dev/null and b/docs/images/geo.png differ diff --git a/internal/api/dbip.go b/internal/api/dbip.go new file mode 100644 index 0000000..c39303c --- /dev/null +++ b/internal/api/dbip.go @@ -0,0 +1,129 @@ +package api + +import ( + "compress/gzip" + "context" + "errors" + "fmt" + "io" + "log" + "net/http" + "os" + "path/filepath" + "slices" + "time" + + "github.com/githubflyideas/traffic66/internal/enrich" + "github.com/githubflyideas/traffic66/internal/geo" +) + +// dbipBase is where DB-IP publishes its free Lite databases, one file per +// month: dbip-country-lite-2026-10.mmdb.gz. +var dbipBase = "https://download.db-ip.com/free/" + +// fetchDBIP downloads this month's (or, early in a month, last month's) +// DB-IP Lite database of one kind ("country" or "asn"). +func fetchDBIP(ctx context.Context, kind string, now time.Time) (*geo.Reader, []byte, error) { + var last error + for _, m := range []time.Time{now, now.AddDate(0, 0, -now.Day())} { + url := fmt.Sprintf("%sdbip-%s-lite-%s.mmdb.gz", dbipBase, kind, m.Format("2006-01")) + b, err := download(ctx, url) + if err != nil { + last = err + continue + } + r, err := geo.FromBytes(b) + if err != nil { + return nil, nil, fmt.Errorf("%s: %w", url, err) + } + if k := r.Kind(); k != kind && k != "both" { + return nil, nil, fmt.Errorf("%s: holds %s, not %s", url, k, kind) + } + return r, b, nil + } + return nil, nil, last +} + +func download(ctx context.Context, url string) ([]byte, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + return nil, err + } + req.Header.Set("User-Agent", "traffic66") + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("%s: %s", url, resp.Status) + } + zr, err := gzip.NewReader(io.LimitReader(resp.Body, maxGeoUpload)) + if err != nil { + return nil, fmt.Errorf("%s: %w", url, err) + } + b, err := io.ReadAll(io.LimitReader(zr, maxGeoUpload)) + if err != nil { + return nil, fmt.Errorf("%s: %w", url, err) + } + return b, nil +} + +// updateDBIP downloads the latest DB-IP Lite country and ASN databases and +// uses them instead of the built-in ones. +func (s *Server) updateDBIP(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), 3*time.Minute) + defer cancel() + now := time.Now().UTC() + cty, cb, err := fetchDBIP(ctx, "country", now) + if err != nil { + fail(w, fmt.Errorf("download: %w", err)) + return + } + as, ab, err := fetchDBIP(ctx, "asn", now) + if err != nil { + fail(w, fmt.Errorf("download: %w", err)) + return + } + for name, b := range map[string][]byte{enrich.DBIPCountryFile: cb, enrich.DBIPASNFile: ab} { + if err := writeFileAtomic(filepath.Join(s.DataDir, name), b); err != nil { + fail(w, err) + return + } + } + s.ASN.SetFallback(cty, as, enrich.DBIPCountryFile, enrich.DBIPASNFile) + log.Printf("geo: DB-IP Lite downloaded (country %s, ASN %s)", cty.Built.Format("2006-01-02"), as.Built.Format("2006-01-02")) + writeJSON(w, http.StatusOK, map[string]any{"sources": s.ASN.Sources()}) +} + +// deleteGeo removes an installed database; what it held falls back to the +// remaining ones and the built-in DB-IP Lite. +func (s *Server) deleteGeo(w http.ResponseWriter, r *http.Request) { + name := r.URL.Query().Get("file") + dir := s.DataDir + switch { + case slices.Contains(enrich.MMDBFiles, name): + os.Remove(filepath.Join(dir, name)) + s.ASN.LoadMMDBs(dir) + case name == enrich.DBIPCountryFile || name == enrich.DBIPASNFile: + os.Remove(filepath.Join(dir, name)) + bc, ba, err := geo.Builtin() + if err != nil { + fail(w, err) + return + } + if name == enrich.DBIPCountryFile { + s.ASN.SetFallback(bc, nil, "built-in", "") + } else { + s.ASN.SetFallback(nil, ba, "", "built-in") + } + case name != "" && name == s.ASN.TableFile(): + os.Remove(filepath.Join(dir, name)) + s.ASN.TakeTable(enrich.NewASNDB(), "") + default: + fail(w, errors.New("no such country or ASN file")) + return + } + log.Printf("geo: removed %s", name) + writeJSON(w, http.StatusOK, map[string]any{"sources": s.ASN.Sources()}) +} diff --git a/internal/api/dbip_test.go b/internal/api/dbip_test.go new file mode 100644 index 0000000..fefd802 --- /dev/null +++ b/internal/api/dbip_test.go @@ -0,0 +1,134 @@ +package api + +import ( + "bytes" + "compress/gzip" + "encoding/json" + "net/http" + "net/http/httptest" + "net/netip" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/githubflyideas/traffic66/internal/enrich" +) + +func lookup(s *Server, ip string) (uint32, string, string) { + return s.ASN.Lookup(netip.MustParseAddr(ip)) +} + +// The built-in DB-IP Lite answers only what the operator's databases do not; +// removing an operator database falls back to it. +func TestGeoFallback(t *testing.T) { + dir := t.TempDir() + s := &Server{ASN: enrich.NewASNDB(), DataDir: dir} + if err := s.ASN.LoadDBIP(dir); err != nil { + t.Fatal(err) + } + if asn, cc, _ := lookup(s, "1.1.1.1"); asn != 13335 || cc == "" { + t.Fatalf("built-in: %d %q", asn, cc) + } + b, _ := os.ReadFile(filepath.Join("..", "geo", "testdata", "ipinfo.mmdb")) + w := httptest.NewRecorder() + s.putGeo(w, httptest.NewRequest("POST", "/api/geo", bytes.NewReader(b))) + if w.Code != 200 || !strings.Contains(w.Body.String(), `"installed":"both.mmdb"`) { + t.Fatalf("upload: %d %s", w.Code, w.Body) + } + if asn, cc, org := lookup(s, "1.1.1.1"); asn != 13335 || cc != "AU" || org != "Cloudflare, Inc." { + t.Errorf("uploaded: %d %s %s", asn, cc, org) + } + if asn, cc, _ := lookup(s, "9.9.9.9"); asn == 0 || cc == "" { // not in the upload + t.Errorf("fallback: %d %q", asn, cc) + } + kinds := "" + for _, src := range s.ASN.Sources() { + kinds += src.Kind + ":" + src.File + " " + } + if kinds != "both:both.mmdb country:built-in asn:built-in " { + t.Errorf("sources %q", kinds) + } + w = httptest.NewRecorder() + s.deleteGeo(w, httptest.NewRequest("DELETE", "/api/geo?file=both.mmdb", nil)) + if w.Code != 200 { + t.Fatalf("delete: %d %s", w.Code, w.Body) + } + if _, err := os.Stat(filepath.Join(dir, "both.mmdb")); err == nil { + t.Error("file kept") + } + if n := len(s.ASN.Sources()); n != 2 { + t.Errorf("%d sources after delete", n) + } + w = httptest.NewRecorder() + s.deleteGeo(w, httptest.NewRequest("DELETE", "/api/geo?file=../inventory.txt", nil)) + if w.Code != 400 { + t.Errorf("unknown file: %d", w.Code) + } +} + +// Update downloads this month's or last month's DB-IP Lite files. +func TestDBIPUpdate(t *testing.T) { + gz := func(name string) []byte { + b, err := os.ReadFile(filepath.Join("..", "geo", "testdata", name)) + if err != nil { + t.Fatal(err) + } + var buf bytes.Buffer + zw := gzip.NewWriter(&buf) + zw.Write(b) + zw.Close() + return buf.Bytes() + } + files := map[string][]byte{} + var asked []string + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + asked = append(asked, r.URL.Path) + for k, b := range files { + if strings.HasPrefix(r.URL.Path, "/free/"+k) { + w.Write(b) + return + } + } + http.NotFound(w, r) + })) + defer ts.Close() + old := dbipBase + dbipBase = ts.URL + "/free/" + defer func() { dbipBase = old }() + + dir := t.TempDir() + s := &Server{ASN: enrich.NewASNDB(), DataDir: dir} + s.ASN.LoadDBIP(dir) + post := func() *httptest.ResponseRecorder { + w := httptest.NewRecorder() + s.updateDBIP(w, httptest.NewRequest("POST", "/api/geo/dbip", nil)) + return w + } + if w := post(); w.Code != 400 { + t.Fatalf("nothing to download: %d", w.Code) + } + files["dbip-country-lite-"] = gz("country.mmdb") + files["dbip-asn-lite-"] = gz("asn.mmdb") + w := post() + if w.Code != 200 { + t.Fatalf("update: %d %s", w.Code, w.Body) + } + var out struct{ Sources []enrich.GeoSource } + json.Unmarshal(w.Body.Bytes(), &out) + if len(out.Sources) != 2 || out.Sources[0].File != enrich.DBIPCountryFile || out.Sources[1].File != enrich.DBIPASNFile || !out.Sources[0].Fallback { + t.Errorf("sources %+v", out.Sources) + } + for _, f := range []string{enrich.DBIPCountryFile, enrich.DBIPASNFile} { + if _, err := os.Stat(filepath.Join(dir, f)); err != nil { + t.Error(err) + } + } + if asn, cc, _ := lookup(s, "8.8.8.8"); asn != 15169 || cc != "US" { + t.Errorf("after update: %d %s", asn, cc) + } + // both months were tried before the files existed + if len(asked) < 2 || asked[0] == asked[1] { + t.Errorf("asked %v", asked) + } +} diff --git a/internal/api/geo.go b/internal/api/geo.go index 4c278d4..1f20715 100644 --- a/internal/api/geo.go +++ b/internal/api/geo.go @@ -49,7 +49,13 @@ func (s *Server) putGeo(w http.ResponseWriter, r *http.Request) { fail(w, err) return } - s.ASN.SetMMDB(rd, name) + if name == "both.mmdb" { // replaces the separate ones + os.Remove(filepath.Join(s.DataDir, "country.mmdb")) + os.Remove(filepath.Join(s.DataDir, "asn.mmdb")) + } + for _, err := range s.ASN.LoadMMDBs(s.DataDir) { + log.Printf("geo: %v", err) + } default: plain := b if len(b) > 2 && b[0] == 0x1f && b[1] == 0x8b { diff --git a/internal/api/server.go b/internal/api/server.go index 475c544..cdc4416 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -100,6 +100,8 @@ func (s *Server) Handler() http.Handler { api("DELETE /api/logo", s.deleteLogo) api("GET /api/geo", s.getGeo) api("POST /api/geo", s.putGeo) + api("DELETE /api/geo", s.deleteGeo) + api("POST /api/geo/dbip", s.updateDBIP) static := http.FileServer(http.FS(s.Static)) mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-Content-Type-Options", "nosniff") diff --git a/internal/enrich/enrich.go b/internal/enrich/enrich.go index de0ed69..3e02517 100644 --- a/internal/enrich/enrich.go +++ b/internal/enrich/enrich.go @@ -342,9 +342,11 @@ type asRange struct { // ASNDB maps addresses to ASN, country and organisation. Sources: a // tab-separated table (range_start range_end as_number country description, -// as published by iptoasn.com) and MaxMind DB files (.mmdb, as GeoLite2 and -// DB-IP Lite): a country database and an ASN database. When several are -// loaded, the .mmdb files win for what they hold. +// as published by iptoasn.com), MaxMind DB files (.mmdb, as GeoLite2, DB-IP +// Lite and IPinfo Lite) installed by the operator, and the DB-IP Lite +// databases built into the program (or a newer download of them). The +// operator's .mmdb files win over the table for what they hold; the DB-IP +// Lite databases answer only what nothing else does. type ASNDB struct { mu sync.RWMutex v4, v6 []asRange @@ -352,41 +354,99 @@ type ASNDB struct { cty, as *geo.Reader ctyFile string asFile string + // fallback: DB-IP Lite, built in or downloaded + fcty, fas *geo.Reader + fctyFile, fasFile string } // GeoSource describes one loaded database. type GeoSource struct { - Kind string `json:"kind"` // "table", "country" or "asn" - File string `json:"file"` // file name in the data directory - Type string `json:"type"` // database type from the file - Built time.Time `json:"built"` // build date of an .mmdb - Entries int `json:"entries"` // ranges in a table + Kind string `json:"kind"` // "table", "country", "asn" or "both" + File string `json:"file"` // file name in the data directory, or "built-in" + Type string `json:"type"` // database type from the file + Vendor string `json:"vendor"` // dbip, maxmind, ipinfo, iptoasn or "" + Built time.Time `json:"built"` // build date of an .mmdb + Entries int `json:"entries"` // ranges in a table + Fallback bool `json:"fallback"` // used only where the others have no answer +} + +// Vendor guesses who published a database from its type name. +func Vendor(typ string) string { + t := strings.ToLower(typ) + switch { + case strings.Contains(t, "dbip") || strings.Contains(t, "db-ip"): + return "dbip" + case strings.Contains(t, "geolite") || strings.Contains(t, "geoip2"): + return "maxmind" + case strings.Contains(t, "ipinfo"): + return "ipinfo" + } + return "" } -// SetMMDB installs an .mmdb reader as the country or ASN database. +// SetMMDB installs an .mmdb reader as the country or ASN database, or both. func (db *ASNDB) SetMMDB(r *geo.Reader, file string) { db.mu.Lock() defer db.mu.Unlock() - if r.Kind() == "asn" { + k := r.Kind() + if k == "asn" || k == "both" { db.as, db.asFile = r, file - } else { + } + if k == "country" || k == "both" { db.cty, db.ctyFile = r, file } } +// SetFallback installs the DB-IP Lite country and ASN databases; nil keeps +// the one in place. +func (db *ASNDB) SetFallback(cty, as *geo.Reader, ctyFile, asFile string) { + db.mu.Lock() + defer db.mu.Unlock() + if cty != nil { + db.fcty, db.fctyFile = cty, ctyFile + } + if as != nil { + db.fas, db.fasFile = as, asFile + } +} + +// Fallback returns the DB-IP Lite databases in use. +func (db *ASNDB) Fallback() (cty, as *geo.Reader) { + db.mu.RLock() + defer db.mu.RUnlock() + return db.fcty, db.fas +} + // Sources lists the loaded databases. func (db *ASNDB) Sources() []GeoSource { db.mu.RLock() defer db.mu.RUnlock() var out []GeoSource if n := len(db.v4) + len(db.v6); n > 0 { - out = append(out, GeoSource{Kind: "table", File: db.tsvFile, Type: "IP to ASN table", Entries: n}) + out = append(out, GeoSource{Kind: "table", File: db.tsvFile, Type: "IP to ASN table", Vendor: "iptoasn", Entries: n}) } - if db.cty != nil { - out = append(out, GeoSource{Kind: "country", File: db.ctyFile, Type: db.cty.Type, Built: db.cty.Built}) + src := func(kind string, r *geo.Reader, file string, fb bool) GeoSource { + v := Vendor(r.Type) + if fb { + v = "dbip" + } + return GeoSource{Kind: kind, File: file, Type: r.Type, Vendor: v, Built: r.Built, Fallback: fb} } - if db.as != nil { - out = append(out, GeoSource{Kind: "asn", File: db.asFile, Type: db.as.Type, Built: db.as.Built}) + if db.cty != nil && db.cty == db.as { + out = append(out, src("both", db.cty, db.ctyFile, false)) + } else { + if db.cty != nil { + out = append(out, src("country", db.cty, db.ctyFile, false)) + } + if db.as != nil { + out = append(out, src("asn", db.as, db.asFile, false)) + } + } + if db.fcty != nil { + out = append(out, src("country", db.fcty, db.fctyFile, true)) + } + if db.fas != nil { + out = append(out, src("asn", db.fas, db.fasFile, true)) } return out } @@ -505,6 +565,16 @@ func (db *ASNDB) Lookup(a netip.Addr) (asn uint32, cc, org string) { asn, org = in.ASN, in.Org } } + if cc == "" && db.fcty != nil { + if in, ok := db.fcty.Lookup(a); ok { + cc = in.Country + } + } + if asn == 0 && db.fas != nil { + if in, ok := db.fas.Lookup(a); ok && in.ASN != 0 { + asn, org = in.ASN, in.Org + } + } return asn, cc, org } @@ -599,3 +669,68 @@ func (t *Threats) Lists() map[string]int { } return out } + +// ---------------------------------------------------------------- geo files + +// MMDBFiles are the operator's databases in the data directory, in loading +// order: a later file replaces what an earlier one holds. +var MMDBFiles = []string{"both.mmdb", "country.mmdb", "asn.mmdb"} + +// LoadMMDBs (re)loads the operator's .mmdb files from dir; databases whose +// file is gone are dropped. +func (db *ASNDB) LoadMMDBs(dir string) []error { + db.mu.Lock() + db.cty, db.as, db.ctyFile, db.asFile = nil, nil, "", "" + db.mu.Unlock() + var errs []error + for _, name := range MMDBFiles { + p := filepath.Join(dir, name) + if _, err := os.Stat(p); err != nil { + continue + } + r, err := geo.Open(p) + if err != nil { + errs = append(errs, fmt.Errorf("%s: %w", p, err)) + continue + } + db.SetMMDB(r, name) + } + return errs +} + +// DB-IP Lite files downloaded into the data directory. +const ( + DBIPCountryFile = "dbip-country.mmdb" + DBIPASNFile = "dbip-asn.mmdb" +) + +// LoadDBIP installs the DB-IP Lite databases: a download in dir when it is +// newer than the built-in one, else the built-in one. +func (db *ASNDB) LoadDBIP(dir string) error { + bc, ba, err := geo.Builtin() + if err != nil { + return fmt.Errorf("built-in country and ASN data: %w", err) + } + pick := func(b *geo.Reader, name string) (*geo.Reader, string) { + if dir != "" { + if r, err := geo.Open(filepath.Join(dir, name)); err == nil && r.Built.After(b.Built) { + return r, name + } + } + return b, "built-in" + } + c, cf := pick(bc, DBIPCountryFile) + a, af := pick(ba, DBIPASNFile) + db.SetFallback(c, a, cf, af) + return nil +} + +// TableFile is the file the table was loaded from. +func (db *ASNDB) TableFile() string { + db.mu.RLock() + defer db.mu.RUnlock() + if len(db.v4)+len(db.v6) == 0 { + return "" + } + return filepath.Base(db.tsvFile) +} diff --git a/internal/geo/builtin.go b/internal/geo/builtin.go new file mode 100644 index 0000000..06880cf --- /dev/null +++ b/internal/geo/builtin.go @@ -0,0 +1,39 @@ +package geo + +import ( + "bytes" + "compress/gzip" + _ "embed" + "io" +) + +// The built-in databases: DB-IP Lite country and ASN (CC BY 4.0), see +// dbip/README.md. +var ( + //go:embed dbip/country.mmdb.gz + builtinCountry []byte + //go:embed dbip/asn.mmdb.gz + builtinASN []byte +) + +// Builtin opens the built-in DB-IP Lite country and ASN databases. +func Builtin() (country, asn *Reader, err error) { + open := func(gz []byte) (*Reader, error) { + zr, err := gzip.NewReader(bytes.NewReader(gz)) + if err != nil { + return nil, err + } + b, err := io.ReadAll(zr) + if err != nil { + return nil, err + } + return FromBytes(b) + } + if country, err = open(builtinCountry); err != nil { + return nil, nil, err + } + if asn, err = open(builtinASN); err != nil { + return nil, nil, err + } + return country, asn, nil +} diff --git a/internal/geo/dbip/README.md b/internal/geo/dbip/README.md new file mode 100644 index 0000000..0b1117b --- /dev/null +++ b/internal/geo/dbip/README.md @@ -0,0 +1,17 @@ +# Built-in country and ASN databases + +`country.mmdb.gz` and `asn.mmdb.gz` are DB-IP's free "IP to Country Lite" +and "IP to ASN Lite" databases (https://db-ip.com), as packaged in MaxMind +DB format by the ip-location-db project +(npm `@ip-location-db/dbip-country-mmdb` 2.3.2026060120 and +`@ip-location-db/dbip-asn-mmdb` 2.3.2026060407), compressed with gzip. + +They are licensed under the Creative Commons Attribution 4.0 International +License (https://creativecommons.org/licenses/by/4.0/). Attribution: IP +Geolocation by DB-IP (https://db-ip.com). traffic66 shows this attribution +on the pages that use the data. + +To update them, replace both files with newer versions of the same packages +(`npm pack @ip-location-db/dbip-country-mmdb @ip-location-db/dbip-asn-mmdb`, +then `gzip -9c dbip-country.mmdb > country.mmdb.gz` and the same for ASN). +Users can also update them at run time on the Sources page. diff --git a/internal/geo/dbip/asn.mmdb.gz b/internal/geo/dbip/asn.mmdb.gz new file mode 100644 index 0000000..e4ab7da Binary files /dev/null and b/internal/geo/dbip/asn.mmdb.gz differ diff --git a/internal/geo/dbip/country.mmdb.gz b/internal/geo/dbip/country.mmdb.gz new file mode 100644 index 0000000..8074656 Binary files /dev/null and b/internal/geo/dbip/country.mmdb.gz differ diff --git a/internal/geo/mmdb.go b/internal/geo/mmdb.go index 882bfe1..5d392f7 100644 --- a/internal/geo/mmdb.go +++ b/internal/geo/mmdb.go @@ -12,6 +12,7 @@ import ( "math" "net/netip" "os" + "strconv" "strings" "sync" "time" @@ -185,6 +186,15 @@ func infoFrom(v any) Info { } in.ASN = uint32(asUint(m["autonomous_system_number"])) in.Org, _ = m["autonomous_system_organization"].(string) + if in.ASN == 0 { // IPinfo Lite: "asn": "AS15169", "as_name": "Google LLC" + if s, ok := m["asn"].(string); ok { + n, _ := strconv.ParseUint(strings.TrimPrefix(strings.ToUpper(s), "AS"), 10, 32) + in.ASN = uint32(n) + in.Org, _ = m["as_name"].(string) + } else { + in.ASN = uint32(asUint(m["asn"])) + } + } return in } @@ -342,13 +352,35 @@ func decode(d []byte, off, depth int) (any, int, error) { return nil, 0, fmt.Errorf("unsupported data type %d", typ) } -// Kind tells whether a database holds countries, AS numbers or both. +// probes are well-known addresses every country or ASN database covers. +var probes = []netip.Addr{ + netip.MustParseAddr("8.8.8.8"), netip.MustParseAddr("1.1.1.1"), netip.MustParseAddr("9.9.9.9"), + netip.MustParseAddr("208.67.222.222"), netip.MustParseAddr("114.114.114.114"), netip.MustParseAddr("77.88.8.8"), + netip.MustParseAddr("2001:4860:4860::8888"), netip.MustParseAddr("2606:4700:4700::1111"), +} + +// Kind tells whether a database holds countries ("country"), AS numbers +// ("asn") or both ("both"), from what it answers for a few well-known +// addresses, or else from its type name. func (r *Reader) Kind() string { - t := strings.ToLower(r.Type) + var cty, as bool + for _, a := range probes { + if in, ok := r.Lookup(a); ok { + cty = cty || in.Country != "" + as = as || in.ASN != 0 + } + } switch { - case strings.Contains(t, "asn") || strings.Contains(t, "-as-") || strings.Contains(t, "isp"): + case cty && as: + return "both" + case as: return "asn" - default: + case cty: return "country" } + t := strings.ToLower(r.Type) + if strings.Contains(t, "asn") || strings.Contains(t, "-as-") || strings.Contains(t, "isp") { + return "asn" + } + return "country" } diff --git a/internal/geo/mmdb_test.go b/internal/geo/mmdb_test.go index 100f3d7..e020170 100644 --- a/internal/geo/mmdb_test.go +++ b/internal/geo/mmdb_test.go @@ -79,3 +79,33 @@ func TestRejectsGarbage(t *testing.T) { t.Fatal("metadata without record size accepted") } } + +// IPinfo Lite keeps country and ASN in one database, the ASN as "AS15169". +func TestCombined(t *testing.T) { + r, err := Open("testdata/ipinfo.mmdb") + if err != nil { + t.Fatal(err) + } + if k := r.Kind(); k != "both" { + t.Fatalf("kind %q", k) + } + if in, ok := r.Lookup(netip.MustParseAddr("8.8.8.8")); !ok || in != (Info{Country: "US", ASN: 15169, Org: "Google LLC"}) { + t.Fatalf("%+v %v", in, ok) + } +} + +func TestBuiltin(t *testing.T) { + c, a, err := Builtin() + if err != nil { + t.Fatal(err) + } + if c.Kind() != "country" || a.Kind() != "asn" { + t.Fatalf("kinds %q %q", c.Kind(), a.Kind()) + } + if in, _ := c.Lookup(netip.MustParseAddr("8.8.8.8")); in.Country != "US" { + t.Errorf("8.8.8.8 country %+v", in) + } + if in, _ := a.Lookup(netip.MustParseAddr("2606:4700:4700::1111")); in.ASN != 13335 { + t.Errorf("Cloudflare ASN %+v", in) + } +} diff --git a/internal/geo/testdata/ipinfo.mmdb b/internal/geo/testdata/ipinfo.mmdb new file mode 100644 index 0000000..8deca48 Binary files /dev/null and b/internal/geo/testdata/ipinfo.mmdb differ diff --git a/internal/web/static/app.css b/internal/web/static/app.css index f29f5cc..7556836 100644 --- a/internal/web/static/app.css +++ b/internal/web/static/app.css @@ -3,7 +3,7 @@ --bg:#f4f6f9; --surface:#ffffff; --surface-2:#f3f5f8; --line:#e4e8ee; --line-2:#cfd6e0; --ink:#1b2432; --ink-2:#4c5869; --ink-3:#6f7a8a; --accent:#2a78d6; --accent-soft:#e8f1fc; --accent-ink:#1c5cab; - --c1:#2a78d6; --c2:#eb6834; --c3:#1baf7a; --c4:#eda100; --c5:#e87ba4; --c6:#008300; --c7:#4a3aa7; --c8:#e34948; --other:#b9bfc9; + --c1:#2a78d6; --c2:#eb6834; --c3:#1baf7a; --c4:#eda100; --c5:#e87ba4; --c6:#008300; --c7:#4a3aa7; --c8:#e34948; --other:#b9bfc9; --map-none:#e9edf2; --base:#8e98a6; --good:#0ca30c; --warn:#fab219; --crit:#d03b3b; --warn-ink:#8a5d00; } @@ -34,7 +34,7 @@ nav.dash button[aria-current="page"]{background:var(--accent-soft);color:var(--a .self .live i{width:8px;height:8px;border-radius:50%;background:currentColor} .self .live.ok{color:var(--good)}.self .live.idle{color:var(--ink-3)} .foot{display:flex;gap:8px;align-items:center;padding:0 18px 14px} -.foot select{flex:1;border:1px solid var(--line-2);border-radius:6px;padding:3px 6px;background:var(--surface);font-size:13px} +.foot select{flex:1 1 0;min-width:0;border:1px solid var(--line-2);border-radius:6px;padding:3px 6px;background:var(--surface);font-size:13px} .linkbtn{border:0;background:none;color:var(--ink-3);cursor:pointer;font-size:12.5px;padding:2px;white-space:nowrap} .linkbtn:hover{color:var(--accent-ink)} @@ -74,13 +74,14 @@ nav.dash button[aria-current="page"]{background:var(--accent-soft);color:var(--a main{padding:16px 20px 32px;min-width:0} .view{display:none}.view.on{display:block} .grid{display:grid;grid-template-columns:repeat(12,1fr);gap:14px} +.grid>.panel{min-width:0;overflow-x:auto} .panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:14px 16px;min-width:0} .ph{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px;flex-wrap:wrap} .ph h2{font-size:14px;font-weight:600;margin:0} .ph .sub{font-size:12.5px;color:var(--ink-3)} .c12{grid-column:span 12}.c8{grid-column:span 8}.c6{grid-column:span 6}.c4{grid-column:span 4} @media (max-width:1180px){.c8,.c4{grid-column:span 12}} -@media (max-width:820px){.app{grid-template-columns:1fr}aside{position:static;height:auto}nav.dash{display:flex;overflow-x:auto;padding:6px}nav.dash hr{display:none}nav.dash button{white-space:nowrap;width:auto}.self{display:none}.c6{grid-column:span 12}main{padding:12px}.row1,.row2{padding-inline:12px}} +@media (max-width:820px){.app{grid-template-columns:minmax(0,1fr)}.main{min-width:0}aside{position:static;height:auto}nav.dash{display:flex;overflow-x:auto;padding:6px}nav.dash hr{display:none}nav.dash button{white-space:nowrap;width:auto}.self{display:none}.c6{grid-column:span 12}main{padding:12px}.row1,.row2{padding-inline:12px}.range{max-width:100%;overflow-x:auto;margin-inline-start:0}} .kpis{display:grid;grid-template-columns:repeat(5,1fr)} .kpi{padding:4px 18px;border-inline-start:1px solid var(--line);min-width:0} @@ -234,3 +235,11 @@ th.sk .ar{font-size:10px;margin-inline-start:3px;opacity:.7} /* talkers tables */ .talk tr.sum td{border-top:2px solid var(--line-2);font-weight:650} .legend .muted{margin-inline-start:4px} +.wmap{width:100%;height:auto;display:block;max-height:520px} +.wmap path,.wmap circle{stroke:#fff;stroke-width:.5;cursor:pointer} +.wmap path:hover,.wmap circle:hover{stroke:var(--ink);stroke-width:1.2} +.maplegend{display:flex;align-items:center;gap:3px;flex-wrap:wrap;font-size:12px;margin-top:8px} +.maplegend i{display:inline-block;width:22px;height:10px;border-radius:2px;vertical-align:middle} +.attrib{font-size:11.5px;margin:8px 0 0} +.attrib a{color:inherit} +h3.subhead{font-size:14px;font-weight:650;margin:20px 0 4px} diff --git a/internal/web/static/app.js b/internal/web/static/app.js index 8f5bdba..c890fa4 100644 --- a/internal/web/static/app.js +++ b/internal/web/static/app.js @@ -818,18 +818,63 @@ views.sankey = async (el) => { if (!sEl._ro) { sEl._ro = new ResizeObserver(draw); sEl._ro.observe(sEl); } }; +// ------------------------------------------------------------ world map +let WORLD; +const worldMap = () => WORLD || (WORLD = fetch('world.json').then(r => r.json()).catch(e => { WORLD = null; throw e; })); +// five steps of the sequential blue, light to dark; no traffic is grey +const MAP_STEPS = ['#cde2fb', '#86b6ef', '#3987e5', '#1c5cab', '#0d366b']; +function mapBins(vals) { + const v = vals.filter(x => x > 0).sort((a, b) => a - b); + if (!v.length) return []; + // log-spaced edges between the smallest and largest country + const lo = Math.log10(v[0]), hi = Math.log10(v[v.length - 1]); + return MAP_STEPS.slice(1).map((_, i) => Math.pow(10, lo + (hi - lo) * (i + 1) / MAP_STEPS.length)); +} +const mapStep = (v, edges) => { let i = 0; while (i < edges.length && v >= edges[i]) i++; return i; }; +function drawMap(el, w, rows) { + const by = new Map(rows.map(r => [r.key, r.wire])); + const edges = mapBins(rows.map(r => r.wire)); + const fill = cc => by.get(cc) > 0 ? MAP_STEPS[mapStep(by.get(cc), edges)] : 'var(--map-none)'; + const dots = Object.entries(w.s).filter(([cc]) => by.get(cc) > 0); + el.innerHTML = ` + ${Object.entries(w.c).map(([cc, d]) => ``).join('')} + ${dots.map(([cc, [x, y]]) => ``).join('')} +
${edges.length ? `${t('geo.map_less')}${MAP_STEPS.map((c, i) => ``).join('')}${t('geo.map_more')} + ${esc(fmtBytes(Math.min(...rows.map(r => r.wire).filter(x => x > 0))))} – ${esc(fmtBytes(Math.max(...rows.map(r => r.wire))))}` : ''} + ${t('geo.map_none')}
`; + const total = rows.reduce((a, r) => a + r.wire, 0) || 1; + el.querySelectorAll('[data-cc]').forEach(p => { + const cc = p.dataset.cc, v = by.get(cc) || 0; + p.onmousemove = e => showTip(e, `
${esc(country(cc))}
${v ? fmtBytes(v) : t('geo.map_none')}${v ? ` ${nf(100 * v / total, 1)}%` : ''}`); + p.onmouseleave = hideTip; + if (v) p.onclick = e => { e.stopPropagation(); hideTip(); openPop({k: 'country', v: cc, label: country(cc)}, {left: e.clientX, right: e.clientX, top: e.clientY, bottom: e.clientY}); }; + else p.style.cursor = 'default'; + }); +} +const ATTRIB = { + dbip: 'IP Geolocation by DB-IP', + maxmind: 'This product includes GeoLite2 data created by MaxMind, available from https://www.maxmind.com', + ipinfo: 'IP address data powered by IPinfo', + iptoasn: 'IPtoASN' +}; +const attribution = srcs => [...new Set((srcs || []).map(g => g.vendor).filter(v => ATTRIB[v]))].map(v => ATTRIB[v]).join(' · '); + views.geo = async (el) => { const asCharts = [['asn_src', 'wire'], ['asn_dst', 'wire'], ['asn_src', 'pkts'], ['asn_dst', 'pkts']]; - const [c, a, ...ad] = await Promise.all([api('topn', {dim: 'country', limit: 66}), api('topn', {dim: 'asn', limit: 66}), ...asCharts.map(([by, m]) => seriesData(by, m))]); - const cr = (c.rows || []).filter(r => r.key !== '__internal__'), ar = a.rows || []; + const [c, a, gd, w, ...ad] = await Promise.all([api('topn', {dim: 'country', limit: 300}), api('topn', {dim: 'asn', limit: 66}), api('geo').catch(() => ({})), worldMap().catch(() => null), ...asCharts.map(([by, m]) => seriesData(by, m))]); + const all = (c.rows || []).filter(r => r.key !== '__internal__' && r.key), cr = all.slice(0, 66), ar = a.rows || []; const cm = Math.max(1, ...cr.map(r => r.wire)), am = Math.max(1, ...ar.map(r => r.wire)); - el.innerHTML = `
${asCharts.map(([by, m], i) => seriesPanel('asr' + i, 'c6', `${t(by === 'asn_src' ? 'geo.as_src' : 'geo.as_dst')} · ${t(m === 'wire' ? 'ch.bps' : 'ch.pps')}`, i < 2 ? esc(t(by === 'asn_src' ? 'geo.as_src_sub' : 'geo.as_dst_sub')) : '')).join('')}
+ const attr = attribution(gd.sources); + el.innerHTML = `
${panel('c12', t('geo.map'), t('geo.map_sub', {n: nf(all.length)}), `
+

${attr ? `${t('geo.data_from')} ${attr} · ` : ''}${t('geo.map_from')} Natural Earth

`)}
+
${asCharts.map(([by, m], i) => seriesPanel('asr' + i, 'c6', `${t(by === 'asn_src' ? 'geo.as_src' : 'geo.as_dst')} · ${t(m === 'wire' ? 'ch.bps' : 'ch.pps')}`, i < 2 ? esc(t(by === 'asn_src' ? 'geo.as_src_sub' : 'geo.as_dst_sub')) : '')).join('')}
${panel('c6', t('geo.countries'), t('geo.countries_sub'), ` ${cr.map((r, i) => ``).join('') || ``}
${t('col.country')}${t('col.traffic')}${t('col.share')}
${i + 1}${V('country', r.key, country(r.key))} ${esc(r.key)}${fmtBytes(r.wire)}${bar(r.wire, cm)}
${t('geo.no_table')}
`)} ${panel('c6', t('geo.as'), '', ` ${ar.map((r, i) => ``).join('') || ``}
${t('col.asn')}${t('col.org')}${t('col.traffic')}${t('col.share')}
${i + 1}${r.key === '0' ? `${t('unknown')}` : V('asn', r.key, 'AS' + r.key)}${esc(r.extra)}${fmtBytes(r.wire)}${bar(r.wire, am)}
${t('geo.no_table')}
`)}
`; + if (w) drawMap($('#wmap'), w, all); else $('#wmap').innerHTML = `
${t('empty.nodata')}
`; asCharts.forEach(([by, m], i) => fillSeries('asr' + i, ad[i], by, m)); }; @@ -950,7 +995,18 @@ views.ifaces = async (el) => { views.sources = async (el) => { const [d, inv, gd] = await Promise.all([api('sources'), api('inventory').catch(() => ({text: ''})), api('geo').catch(() => ({sources: []}))]); - const geoRows = (gd.sources || []).map(g => `
  • ${status('ok', t('geo.kind_' + g.kind))} ${esc(g.file)}${g.kind !== 'table' ? ' · ' + esc(g.type) : ''}${g.entries ? ' · ' + esc(t('geo.entries', {n: nf(g.entries)})) : ''}${g.built && !g.built.startsWith('0001') ? ' · ' + esc(t('geo.built', {d: new Intl.DateTimeFormat(LANG, {dateStyle: 'medium'}).format(new Date(g.built))})) : ''}
  • `).join(''); + const dfmt = d => d && !d.startsWith('0001') ? new Intl.DateTimeFormat(LANG, {dateStyle: 'medium'}).format(new Date(d)) : ''; + const VENDOR = {dbip: 'DB-IP Lite', maxmind: 'MaxMind GeoLite2', ipinfo: 'IPinfo Lite', iptoasn: 'IPtoASN'}; + const geoRows = (gd.sources || []).map(g => `${status('ok', t('geo.kind_' + g.kind))} + ${esc(VENDOR[g.vendor] || g.type)} ${esc(g.file === 'built-in' ? t('geo.builtin') : g.file)}${g.entries ? ' · ' + esc(t('geo.entries', {n: nf(g.entries)})) : ''} + ${esc(dfmt(g.built))}${t(g.fallback ? 'geo.role_fallback' : 'geo.role_main')} + ${g.file !== 'built-in' ? `` : ''}`).join(''); + const FREE = [ + ['DB-IP Lite', 'geo.f_dbip', 'CC BY 4.0', 'https://db-ip.com/db/lite.php'], + ['MaxMind GeoLite2', 'geo.f_maxmind', 'GeoLite2 EULA', 'https://www.maxmind.com/en/geolite2/signup'], + ['IPinfo Lite', 'geo.f_ipinfo', 'CC BY-SA 4.0', 'https://ipinfo.io/lite'], + ['IPtoASN', 'geo.f_iptoasn', 'PDDL 1.0', 'https://iptoasn.com']]; + const freeRows = FREE.map(([n, k, lic, url]) => `${n}${esc(t(k))}${lic}`).join(''); const srcs = d.sources || []; const issueText = (code, s) => t('issue.' + code, {n: nf(s.pending), p: nf(s.lost_pct, 1) + '%', s: Math.round(Math.abs(s.clock_skew_ns) / 1e9) + ' s'}); const rows = srcs.map(s => { @@ -972,8 +1028,10 @@ views.sources = async (el) => { ${rows || `${t('empty.first')}`}

    ${t('src.listeners')} ${lis || '—'} ${caps}

    ${snmp ? `

    ${t('src.snmp')} ${snmp}

    ` : ''}`)} - ${panel('c12', t('geo.title'), t('geo.sub'), `
      ${geoRows || `
    • ${esc(t('geo.none'))}
    • `}
    -
    + ${panel('c12', t('geo.title'), t('geo.sub'), `${geoRows}
    ${t('geo.col_holds')}${t('geo.col_db')}${t('geo.col_built')}${t('geo.col_use')}
    +
    +

    ${t('geo.free')}

    ${t('geo.free_sub')}

    + ${freeRows}
    ${t('geo.col_db')}${t('geo.col_holds')}${t('geo.col_lic')}

    ${t('geo.where')}

    `)} ${panel('c12', t('logo.title'), t('logo.sub'), `
    logo
    @@ -985,6 +1043,22 @@ iface 192.168.1.1 3 ${esc(t('src.ex_iface'))} snmp 192.168.1.1 public
    `)}
    `; + const geoMsg = (ok, text) => { const m = $('#geoMsg'); m.style.color = ok === null ? '' : ok ? 'var(--good)' : 'var(--crit)'; m.textContent = text; }; + $('#geoDbip').onclick = async e => { + e.target.disabled = true; geoMsg(null, t('geo.updating')); + try { + const res = await fetch('/api/geo/dbip', {method: 'POST'}); + const j = await res.json().catch(() => ({})); + if (!res.ok) { geoMsg(false, t('geo.update_failed', {e: j.error || res.statusText})); e.target.disabled = false; return; } + geoMsg(true, t('geo.updated')); setTimeout(render, 1500); + } catch (err) { geoMsg(false, String(err.message || err)); e.target.disabled = false; } + }; + el.querySelectorAll('[data-geodel]').forEach(b => b.onclick = async () => { + if (!confirm(t('geo.remove_confirm', {f: b.dataset.geodel}))) return; + const res = await fetch('/api/geo?file=' + encodeURIComponent(b.dataset.geodel), {method: 'DELETE'}); + if (!res.ok) { const j = await res.json().catch(() => ({})); geoMsg(false, j.error || res.statusText); return; } + render(); + }); $('#geoFile').onchange = async e => { const f = e.target.files[0]; if (!f) return; const msg = $('#geoMsg'); msg.style.color = ''; msg.textContent = t('geo.uploading'); diff --git a/internal/web/static/i18n/ar.json b/internal/web/static/i18n/ar.json index 6fcfc87..f51a9ec 100644 --- a/internal/web/static/i18n/ar.json +++ b/internal/web/static/i18n/ar.json @@ -132,7 +132,7 @@ "geo.countries": "دول الطرف الآخر", "geo.countries_sub": "الحركة الداخلية مستبعدة", "geo.as": "شبكات الطرف الآخر (AS)", -"geo.no_table": "لا توجد بيانات. ارفع قاعدة بيانات الدول والشبكات في صفحة المصادر لعرض الدول والشبكات.", +"geo.no_table": "لا توجد حركة مع دول أخرى في هذه الفترة.", "thr.hosts": "مضيفون تواصلوا مع عناوين مدرجة", "thr.upload": "ما أُرسل إلى عناوين مدرجة", "thr.flows": "تدفقات مع عناوين مدرجة", @@ -248,7 +248,7 @@ "geo.upload": "رفع ملف قاعدة بيانات…", "geo.uploading": "جارٍ الرفع والتحقق…", "geo.installed": "ثُبّتت باسم {f}. تُطبَّق على الحركة الجديدة من الآن.", -"geo.where": "المقبول: ملفات .mmdb (MaxMind GeoLite2 أو DB-IP Lite، للدول أو ASN) وجداول IP-to-ASN (.tsv أو .tsv.gz، مثل ملفات iptoasn.com). تنزيلات مجانية: db-ip.com/db/lite.php و iptoasn.com؛ يتطلب GeoLite2 حسابًا مجانيًا لدى MaxMind. تحتفظ الحركة المخزنة مسبقًا بالدولة التي حُفظت بها.", +"geo.where": "المقبول: ملفات ‎.mmdb (DB-IP وMaxMind GeoLite2 وIPinfo Lite؛ دول أو شبكات أو كلاهما) وجداول IP-to-ASN (‎.tsv أو ‎.tsv.gz). تُستخدم ملفاتك أولاً، وتجيب DB-IP Lite المدمجة عن الباقي. تحتفظ الحركة المخزنة بالدولة التي حُفظت بها.", "geo.kind_table": "جدول IP-to-ASN", "geo.kind_country": "الدول", "geo.kind_asn": "الشبكات (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "أكثر الخوادم", "topn.top_n": "أعلى {n}", "topn.all": "كل الحركة", -"ch.rest": "أخرى (غير مرسومة)" +"ch.rest": "أخرى (غير مرسومة)", +"geo.kind_both": "الدول والشبكات (AS)", +"geo.builtin": "مدمجة", +"geo.role_main": "تُستخدم أولاً", +"geo.role_fallback": "تُستخدم حين لا تجد غيرها جواباً", +"geo.remove": "إزالة", +"geo.remove_confirm": "إزالة {f}؟ سيأتي ما كان فيها من القواعد الأخرى ومن DB-IP Lite المدمجة.", +"geo.update": "حدّث DB-IP Lite الآن", +"geo.updating": "جارٍ التنزيل من db-ip.com…", +"geo.updated": "تم التحديث. تستخدمها الحركة الجديدة من الآن.", +"geo.update_failed": "تعذّر التنزيل: {e}. نزّل الملفات بنفسك ثم ارفعها هنا.", +"geo.free": "قواعد بيانات مجانية", +"geo.free_sub": "نزّل إحداها وارفعها هنا. DB-IP Lite مدمجة مسبقاً.", +"geo.f_dbip": "الدول والشبكات. بلا تسجيل، تُحدَّث شهرياً. مدمجة؛ «حدّث DB-IP Lite الآن» يجلب أحدث نسخة.", +"geo.f_maxmind": "الدول والشبكات (GeoLite2-Country وGeoLite2-ASN). تحتاج حساب MaxMind مجانياً.", +"geo.f_ipinfo": "الدول والشبكات في ملف واحد (ipinfo_lite.mmdb). تحتاج حساب IPinfo مجانياً.", +"geo.f_iptoasn": "الشبكات ودولها (ip2asn-combined.tsv.gz). بلا تسجيل، تُحدَّث كل ساعة.", +"geo.col_holds": "المحتوى", +"geo.col_db": "قاعدة البيانات", +"geo.col_built": "التاريخ", +"geo.col_use": "الاستخدام", +"geo.col_lic": "الترخيص", +"geo.map": "الحركة الخارجية حسب الدولة", +"geo.map_sub": "{n} دولة · الأغمق يعني حركة أكثر · انقر على دولة للتصفية", +"geo.map_less": "أقل", +"geo.map_more": "أكثر", +"geo.map_none": "لا حركة", +"geo.data_from": "بيانات الدول والشبكات:", +"geo.map_from": "الخريطة:" } diff --git a/internal/web/static/i18n/bn.json b/internal/web/static/i18n/bn.json index 3a10d77..a78cd25 100644 --- a/internal/web/static/i18n/bn.json +++ b/internal/web/static/i18n/bn.json @@ -132,7 +132,7 @@ "geo.countries": "অপর পক্ষের দেশ", "geo.countries_sub": "অভ্যন্তরীণ ট্রাফিক বাদ", "geo.as": "অপর পক্ষের নেটওয়ার্ক (AS)", -"geo.no_table": "কোনো ডেটা নেই। দেশ ও নেটওয়ার্ক দেখতে উৎস পেজে দেশ ও নেটওয়ার্ক ডেটাবেস আপলোড করুন।", +"geo.no_table": "এই সময়ের মধ্যে অন্য দেশের সঙ্গে কোনো ট্রাফিক নেই।", "thr.hosts": "তালিকাভুক্ত ঠিকানার সঙ্গে যোগাযোগকারী হোস্ট", "thr.upload": "তালিকাভুক্ত ঠিকানায় পাঠানো", "thr.flows": "তালিকাভুক্ত ঠিকানাসহ ফ্লো", @@ -248,7 +248,7 @@ "geo.upload": "ডেটাবেস ফাইল আপলোড করুন…", "geo.uploading": "আপলোড ও যাচাই হচ্ছে…", "geo.installed": "{f} নামে ইনস্টল হয়েছে। এখন থেকে নতুন ট্রাফিকে প্রযোজ্য।", -"geo.where": "গ্রহণযোগ্য: .mmdb ফাইল (MaxMind GeoLite2 বা DB-IP Lite, দেশ বা ASN) এবং IP-to-ASN টেবিল (.tsv বা .tsv.gz, যেমন iptoasn.com থেকে)। বিনামূল্যে ডাউনলোড: db-ip.com/db/lite.php ও iptoasn.com; GeoLite2-এর জন্য বিনামূল্যের MaxMind অ্যাকাউন্ট লাগে। আগে সংরক্ষিত ট্রাফিক সংরক্ষণের সময়ের দেশই রাখে।", +"geo.where": "গ্রহণযোগ্য: .mmdb ফাইল (DB-IP, MaxMind GeoLite2, IPinfo Lite; দেশ, নেটওয়ার্ক বা দুটোই) এবং IP-to-ASN টেবিল (.tsv বা .tsv.gz)। আপনার ফাইল আগে ব্যবহার হয়; বাকিটা অন্তর্নির্মিত DB-IP Lite দেখে। আগে সংরক্ষিত ট্রাফিক সংরক্ষণের সময়ের দেশই রাখে।", "geo.kind_table": "IP-to-ASN টেবিল", "geo.kind_country": "দেশ", "geo.kind_asn": "নেটওয়ার্ক (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "শীর্ষ সার্ভার", "topn.top_n": "শীর্ষ {n}", "topn.all": "সমস্ত ট্রাফিক", -"ch.rest": "অন্যান্য (চার্টে নেই)" +"ch.rest": "অন্যান্য (চার্টে নেই)", +"geo.kind_both": "দেশ ও নেটওয়ার্ক (AS)", +"geo.builtin": "অন্তর্নির্মিত", +"geo.role_main": "আগে ব্যবহার হয়", +"geo.role_fallback": "অন্যগুলোতে উত্তর না থাকলে", +"geo.remove": "মুছুন", +"geo.remove_confirm": "{f} মুছবেন? এরপর এই তথ্য অন্য ডেটাবেস ও অন্তর্নির্মিত DB-IP Lite থেকে আসবে।", +"geo.update": "DB-IP Lite এখনই আপডেট করুন", +"geo.updating": "db-ip.com থেকে ডাউনলোড হচ্ছে…", +"geo.updated": "আপডেট হয়েছে। এখন থেকে নতুন ট্রাফিক এটি ব্যবহার করবে।", +"geo.update_failed": "ডাউনলোড করা গেল না: {e}। ফাইলগুলো নিজে ডাউনলোড করে এখানে আপলোড করুন।", +"geo.free": "বিনামূল্যের ডেটাবেস", +"geo.free_sub": "একটি ডাউনলোড করে এখানে আপলোড করুন। DB-IP Lite আগে থেকেই অন্তর্নির্মিত।", +"geo.f_dbip": "দেশ ও নেটওয়ার্ক। নিবন্ধন লাগে না, প্রতি মাসে আপডেট। অন্তর্নির্মিত; “DB-IP Lite এখনই আপডেট করুন” সর্বশেষটি আনে।", +"geo.f_maxmind": "দেশ ও নেটওয়ার্ক (GeoLite2-Country ও GeoLite2-ASN)। বিনামূল্যের MaxMind অ্যাকাউন্ট লাগে।", +"geo.f_ipinfo": "দেশ ও নেটওয়ার্ক একটি ফাইলে (ipinfo_lite.mmdb)। বিনামূল্যের IPinfo অ্যাকাউন্ট লাগে।", +"geo.f_iptoasn": "নেটওয়ার্ক ও তাদের দেশ (ip2asn-combined.tsv.gz)। নিবন্ধন লাগে না, প্রতি ঘণ্টায় আপডেট।", +"geo.col_holds": "কী আছে", +"geo.col_db": "ডেটাবেস", +"geo.col_built": "তারিখ", +"geo.col_use": "ব্যবহার", +"geo.col_lic": "লাইসেন্স", +"geo.map": "দেশ অনুযায়ী বাইরের ট্রাফিক", +"geo.map_sub": "{n}টি দেশ · গাঢ় রং মানে বেশি ট্রাফিক · ফিল্টার করতে দেশে ক্লিক করুন", +"geo.map_less": "কম", +"geo.map_more": "বেশি", +"geo.map_none": "ট্রাফিক নেই", +"geo.data_from": "দেশ ও নেটওয়ার্ক ডেটা:", +"geo.map_from": "মানচিত্র:" } diff --git a/internal/web/static/i18n/en.json b/internal/web/static/i18n/en.json index 1b4a34f..7fdd0e6 100644 --- a/internal/web/static/i18n/en.json +++ b/internal/web/static/i18n/en.json @@ -132,7 +132,7 @@ "geo.countries": "Remote countries", "geo.countries_sub": "Internal traffic is excluded", "geo.as": "Remote networks (AS)", -"geo.no_table": "No data. Upload a countries and networks database on the Sources page to see countries and networks.", +"geo.no_table": "No traffic to or from other countries in this time range.", "thr.hosts": "Hosts talking to listed addresses", "thr.upload": "Sent to listed addresses", "thr.flows": "Flows involving listed addresses", @@ -248,7 +248,7 @@ "geo.upload": "Upload a database file…", "geo.uploading": "Uploading and checking…", "geo.installed": "Installed as {f}. It applies to new traffic from now on.", -"geo.where": "Accepted: .mmdb files (MaxMind GeoLite2 or DB-IP Lite, country or ASN) and IP-to-ASN tables (.tsv or .tsv.gz, as from iptoasn.com). Free downloads: db-ip.com/db/lite.php and iptoasn.com; GeoLite2 needs a free MaxMind account. Traffic already stored keeps the country it was saved with.", +"geo.where": "Accepted: .mmdb files (DB-IP, MaxMind GeoLite2, IPinfo Lite; countries, networks or both) and IP-to-ASN tables (.tsv or .tsv.gz). Your own files are used first; the built-in DB-IP Lite answers the rest. Traffic already stored keeps the country it was saved with.", "geo.kind_table": "IP-to-ASN table", "geo.kind_country": "Countries", "geo.kind_asn": "Networks (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Top servers", "topn.top_n": "Top {n}", "topn.all": "All traffic", -"ch.rest": "Others (not drawn)" +"ch.rest": "Others (not drawn)", +"geo.kind_both": "Countries and networks (AS)", +"geo.builtin": "built in", +"geo.role_main": "Used first", +"geo.role_fallback": "Used where the others have no answer", +"geo.remove": "Remove", +"geo.remove_confirm": "Remove {f}? What it held then comes from the other databases and the built-in DB-IP Lite.", +"geo.update": "Update DB-IP Lite now", +"geo.updating": "Downloading from db-ip.com…", +"geo.updated": "Updated. New traffic uses it from now on.", +"geo.update_failed": "Could not download: {e}. Download the files yourself and upload them.", +"geo.free": "Free databases", +"geo.free_sub": "Download one and upload it here. DB-IP Lite is already built in.", +"geo.f_dbip": "Countries and networks. No sign-up, updated monthly. Built in; “Update DB-IP Lite now” fetches the latest.", +"geo.f_maxmind": "Countries and networks (GeoLite2-Country and GeoLite2-ASN). Needs a free MaxMind account.", +"geo.f_ipinfo": "Countries and networks in one file (ipinfo_lite.mmdb). Needs a free IPinfo account.", +"geo.f_iptoasn": "Networks with their country (ip2asn-combined.tsv.gz). No sign-up, updated hourly.", +"geo.col_holds": "Holds", +"geo.col_db": "Database", +"geo.col_built": "Date", +"geo.col_use": "Use", +"geo.col_lic": "Licence", +"geo.map": "Remote traffic by country", +"geo.map_sub": "{n} countries · darker means more traffic · click a country to filter", +"geo.map_less": "less", +"geo.map_more": "more", +"geo.map_none": "no traffic", +"geo.data_from": "Countries and networks:", +"geo.map_from": "Map:" } diff --git a/internal/web/static/i18n/es.json b/internal/web/static/i18n/es.json index d35de39..d9a117a 100644 --- a/internal/web/static/i18n/es.json +++ b/internal/web/static/i18n/es.json @@ -132,7 +132,7 @@ "geo.countries": "Países remotos", "geo.countries_sub": "Se excluye el tráfico interno", "geo.as": "Redes remotas (AS)", -"geo.no_table": "Sin datos. Suba una base de datos de países y redes en la página Fuentes para ver países y redes.", +"geo.no_table": "No hay tráfico con otros países en este intervalo.", "thr.hosts": "Equipos que hablan con direcciones listadas", "thr.upload": "Enviado a direcciones listadas", "thr.flows": "Flujos con direcciones listadas", @@ -248,7 +248,7 @@ "geo.upload": "Subir un archivo de base de datos…", "geo.uploading": "Subiendo y comprobando…", "geo.installed": "Instalada como {f}. Se aplica al tráfico nuevo a partir de ahora.", -"geo.where": "Se aceptan: archivos .mmdb (MaxMind GeoLite2 o DB-IP Lite, de países o ASN) y tablas IP-to-ASN (.tsv o .tsv.gz, como las de iptoasn.com). Descargas gratuitas: db-ip.com/db/lite.php e iptoasn.com; GeoLite2 requiere una cuenta gratuita de MaxMind. El tráfico ya almacenado conserva el país con el que se guardó.", +"geo.where": "Se aceptan archivos .mmdb (DB-IP, MaxMind GeoLite2, IPinfo Lite; países, redes o ambos) y tablas IP-to-ASN (.tsv o .tsv.gz). Primero se usan tus archivos; lo demás lo responde DB-IP Lite, que viene incluida. El tráfico ya guardado conserva el país con el que se guardó.", "geo.kind_table": "Tabla IP-to-ASN", "geo.kind_country": "Países", "geo.kind_asn": "Redes (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Principales servidores", "topn.top_n": "Top {n}", "topn.all": "Todo el tráfico", -"ch.rest": "Otros (no dibujados)" +"ch.rest": "Otros (no dibujados)", +"geo.kind_both": "Países y redes (AS)", +"geo.builtin": "incluida", +"geo.role_main": "Se usa primero", +"geo.role_fallback": "Se usa cuando las demás no tienen respuesta", +"geo.remove": "Quitar", +"geo.remove_confirm": "¿Quitar {f}? Lo que contenía saldrá de las demás bases de datos y de DB-IP Lite incluida.", +"geo.update": "Actualizar DB-IP Lite ahora", +"geo.updating": "Descargando de db-ip.com…", +"geo.updated": "Actualizada. El tráfico nuevo la usa desde ahora.", +"geo.update_failed": "No se pudo descargar: {e}. Descarga los archivos tú mismo y súbelos.", +"geo.free": "Bases de datos gratuitas", +"geo.free_sub": "Descarga una y súbela aquí. DB-IP Lite ya viene incluida.", +"geo.f_dbip": "Países y redes. Sin registro, se actualiza cada mes. Incluida; «Actualizar DB-IP Lite ahora» trae la última.", +"geo.f_maxmind": "Países y redes (GeoLite2-Country y GeoLite2-ASN). Requiere una cuenta gratuita de MaxMind.", +"geo.f_ipinfo": "Países y redes en un solo archivo (ipinfo_lite.mmdb). Requiere una cuenta gratuita de IPinfo.", +"geo.f_iptoasn": "Redes con su país (ip2asn-combined.tsv.gz). Sin registro, se actualiza cada hora.", +"geo.col_holds": "Contiene", +"geo.col_db": "Base de datos", +"geo.col_built": "Fecha", +"geo.col_use": "Uso", +"geo.col_lic": "Licencia", +"geo.map": "Tráfico remoto por país", +"geo.map_sub": "{n} países · más oscuro, más tráfico · haz clic en un país para filtrar", +"geo.map_less": "menos", +"geo.map_more": "más", +"geo.map_none": "sin tráfico", +"geo.data_from": "Países y redes:", +"geo.map_from": "Mapa:" } diff --git a/internal/web/static/i18n/fr.json b/internal/web/static/i18n/fr.json index 6eafae2..0b3ff6b 100644 --- a/internal/web/static/i18n/fr.json +++ b/internal/web/static/i18n/fr.json @@ -132,7 +132,7 @@ "geo.countries": "Pays distants", "geo.countries_sub": "Le trafic interne est exclu", "geo.as": "Réseaux distants (AS)", -"geo.no_table": "Aucune donnée. Importez une base de données pays et réseaux sur la page Sources pour voir les pays et réseaux.", +"geo.no_table": "Aucun trafic avec d'autres pays sur cette période.", "thr.hosts": "Hôtes en contact avec des adresses listées", "thr.upload": "Envoyé vers des adresses listées", "thr.flows": "Flux impliquant des adresses listées", @@ -248,7 +248,7 @@ "geo.upload": "Importer un fichier de base de données…", "geo.uploading": "Import et vérification…", "geo.installed": "Installée sous {f}. Elle s'applique au nouveau trafic à partir de maintenant.", -"geo.where": "Formats acceptés : fichiers .mmdb (MaxMind GeoLite2 ou DB-IP Lite, pays ou ASN) et tables IP-to-ASN (.tsv ou .tsv.gz, comme celles d'iptoasn.com). Téléchargements gratuits : db-ip.com/db/lite.php et iptoasn.com ; GeoLite2 nécessite un compte MaxMind gratuit. Le trafic déjà stocké conserve le pays avec lequel il a été enregistré.", +"geo.where": "Formats acceptés : fichiers .mmdb (DB-IP, MaxMind GeoLite2, IPinfo Lite ; pays, réseaux ou les deux) et tables IP-to-ASN (.tsv ou .tsv.gz). Vos fichiers sont utilisés en premier ; DB-IP Lite, intégrée, répond au reste. Le trafic déjà enregistré garde le pays avec lequel il a été enregistré.", "geo.kind_table": "Table IP-to-ASN", "geo.kind_country": "Pays", "geo.kind_asn": "Réseaux (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Principaux serveurs", "topn.top_n": "Top {n}", "topn.all": "Tout le trafic", -"ch.rest": "Autres (non tracés)" +"ch.rest": "Autres (non tracés)", +"geo.kind_both": "Pays et réseaux (AS)", +"geo.builtin": "intégrée", +"geo.role_main": "Utilisée en premier", +"geo.role_fallback": "Utilisée quand les autres n'ont pas de réponse", +"geo.remove": "Supprimer", +"geo.remove_confirm": "Supprimer {f} ? Son contenu viendra alors des autres bases et de DB-IP Lite intégrée.", +"geo.update": "Mettre à jour DB-IP Lite", +"geo.updating": "Téléchargement depuis db-ip.com…", +"geo.updated": "Mise à jour faite. Le nouveau trafic l'utilise dès maintenant.", +"geo.update_failed": "Téléchargement impossible : {e}. Téléchargez les fichiers vous-même puis importez-les.", +"geo.free": "Bases gratuites", +"geo.free_sub": "Téléchargez-en une puis importez-la ici. DB-IP Lite est déjà intégrée.", +"geo.f_dbip": "Pays et réseaux. Sans inscription, mise à jour mensuelle. Intégrée ; « Mettre à jour DB-IP Lite » récupère la dernière.", +"geo.f_maxmind": "Pays et réseaux (GeoLite2-Country et GeoLite2-ASN). Nécessite un compte MaxMind gratuit.", +"geo.f_ipinfo": "Pays et réseaux dans un seul fichier (ipinfo_lite.mmdb). Nécessite un compte IPinfo gratuit.", +"geo.f_iptoasn": "Réseaux avec leur pays (ip2asn-combined.tsv.gz). Sans inscription, mise à jour toutes les heures.", +"geo.col_holds": "Contenu", +"geo.col_db": "Base", +"geo.col_built": "Date", +"geo.col_use": "Usage", +"geo.col_lic": "Licence", +"geo.map": "Trafic distant par pays", +"geo.map_sub": "{n} pays · plus foncé = plus de trafic · cliquez sur un pays pour filtrer", +"geo.map_less": "moins", +"geo.map_more": "plus", +"geo.map_none": "aucun trafic", +"geo.data_from": "Pays et réseaux :", +"geo.map_from": "Carte :" } diff --git a/internal/web/static/i18n/hi.json b/internal/web/static/i18n/hi.json index 69df855..b285463 100644 --- a/internal/web/static/i18n/hi.json +++ b/internal/web/static/i18n/hi.json @@ -132,7 +132,7 @@ "geo.countries": "दूसरे पक्ष के देश", "geo.countries_sub": "आंतरिक ट्रैफ़िक शामिल नहीं", "geo.as": "दूसरे पक्ष के नेटवर्क (AS)", -"geo.no_table": "कोई डेटा नहीं। देश और नेटवर्क देखने के लिए स्रोत पेज पर देश और नेटवर्क डेटाबेस अपलोड करें।", +"geo.no_table": "इस समय-सीमा में दूसरे देशों से कोई ट्रैफ़िक नहीं है।", "thr.hosts": "सूचीबद्ध पतों से संपर्क करने वाले होस्ट", "thr.upload": "सूचीबद्ध पतों पर भेजा गया", "thr.flows": "सूचीबद्ध पतों वाले फ़्लो", @@ -248,7 +248,7 @@ "geo.upload": "डेटाबेस फ़ाइल अपलोड करें…", "geo.uploading": "अपलोड और जाँच हो रही है…", "geo.installed": "{f} के रूप में इंस्टॉल हुआ। अब से नए ट्रैफ़िक पर लागू होगा।", -"geo.where": "स्वीकार्य: .mmdb फ़ाइलें (MaxMind GeoLite2 या DB-IP Lite, देश या ASN) और IP-to-ASN तालिकाएँ (.tsv या .tsv.gz, जैसे iptoasn.com से)। मुफ़्त डाउनलोड: db-ip.com/db/lite.php और iptoasn.com; GeoLite2 के लिए मुफ़्त MaxMind खाता चाहिए। पहले से सहेजा गया ट्रैफ़िक वही देश रखता है जिसके साथ वह सहेजा गया था।", +"geo.where": "स्वीकार्य: .mmdb फ़ाइलें (DB-IP, MaxMind GeoLite2, IPinfo Lite; देश, नेटवर्क या दोनों) और IP-to-ASN तालिकाएँ (.tsv या .tsv.gz)। आपकी फ़ाइलें पहले इस्तेमाल होती हैं; बाक़ी का जवाब अंतर्निहित DB-IP Lite देता है। पहले से सहेजा गया ट्रैफ़िक वही देश रखता है जिसके साथ वह सहेजा गया था।", "geo.kind_table": "IP-to-ASN तालिका", "geo.kind_country": "देश", "geo.kind_asn": "नेटवर्क (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "शीर्ष सर्वर", "topn.top_n": "शीर्ष {n}", "topn.all": "सारा ट्रैफ़िक", -"ch.rest": "अन्य (चार्ट में नहीं)" +"ch.rest": "अन्य (चार्ट में नहीं)", +"geo.kind_both": "देश और नेटवर्क (AS)", +"geo.builtin": "अंतर्निहित", +"geo.role_main": "पहले इस्तेमाल", +"geo.role_fallback": "जब दूसरों में जवाब न हो", +"geo.remove": "हटाएँ", +"geo.remove_confirm": "{f} हटाएँ? इसके बाद यह जानकारी दूसरे डेटाबेस और अंतर्निहित DB-IP Lite से आएगी।", +"geo.update": "DB-IP Lite अभी अपडेट करें", +"geo.updating": "db-ip.com से डाउनलोड हो रहा है…", +"geo.updated": "अपडेट हो गया। अब से नया ट्रैफ़िक इसे इस्तेमाल करेगा।", +"geo.update_failed": "डाउनलोड नहीं हो सका: {e}। फ़ाइलें ख़ुद डाउनलोड करके यहाँ अपलोड करें।", +"geo.free": "मुफ़्त डेटाबेस", +"geo.free_sub": "एक डाउनलोड करें और यहाँ अपलोड करें। DB-IP Lite पहले से अंतर्निहित है।", +"geo.f_dbip": "देश और नेटवर्क। साइन-अप नहीं, हर महीने अपडेट। अंतर्निहित; “DB-IP Lite अभी अपडेट करें” नया संस्करण लाता है।", +"geo.f_maxmind": "देश और नेटवर्क (GeoLite2-Country और GeoLite2-ASN)। मुफ़्त MaxMind खाता चाहिए।", +"geo.f_ipinfo": "देश और नेटवर्क एक ही फ़ाइल में (ipinfo_lite.mmdb)। मुफ़्त IPinfo खाता चाहिए।", +"geo.f_iptoasn": "नेटवर्क और उनका देश (ip2asn-combined.tsv.gz)। साइन-अप नहीं, हर घंटे अपडेट।", +"geo.col_holds": "क्या है", +"geo.col_db": "डेटाबेस", +"geo.col_built": "तारीख़", +"geo.col_use": "उपयोग", +"geo.col_lic": "लाइसेंस", +"geo.map": "देश के अनुसार बाहरी ट्रैफ़िक", +"geo.map_sub": "{n} देश · गहरा रंग = ज़्यादा ट्रैफ़िक · फ़िल्टर करने के लिए देश पर क्लिक करें", +"geo.map_less": "कम", +"geo.map_more": "ज़्यादा", +"geo.map_none": "कोई ट्रैफ़िक नहीं", +"geo.data_from": "देश और नेटवर्क डेटा:", +"geo.map_from": "नक़्शा:" } diff --git a/internal/web/static/i18n/id.json b/internal/web/static/i18n/id.json index d1c1a91..09093b0 100644 --- a/internal/web/static/i18n/id.json +++ b/internal/web/static/i18n/id.json @@ -132,7 +132,7 @@ "geo.countries": "Negara lawan", "geo.countries_sub": "Trafik internal tidak dihitung", "geo.as": "Jaringan lawan (AS)", -"geo.no_table": "Tidak ada data. Unggah basis data negara dan jaringan di halaman Sumber untuk melihat negara dan jaringan.", +"geo.no_table": "Tidak ada lalu lintas dengan negara lain dalam rentang waktu ini.", "thr.hosts": "Host yang berhubungan dengan alamat terdaftar", "thr.upload": "Dikirim ke alamat terdaftar", "thr.flows": "Flow dengan alamat terdaftar", @@ -248,7 +248,7 @@ "geo.upload": "Unggah file basis data…", "geo.uploading": "Mengunggah dan memeriksa…", "geo.installed": "Terpasang sebagai {f}. Berlaku untuk trafik baru mulai sekarang.", -"geo.where": "Diterima: file .mmdb (MaxMind GeoLite2 atau DB-IP Lite, negara atau ASN) dan tabel IP-to-ASN (.tsv atau .tsv.gz, seperti dari iptoasn.com). Unduh gratis: db-ip.com/db/lite.php dan iptoasn.com; GeoLite2 memerlukan akun MaxMind gratis. Trafik yang sudah tersimpan tetap memakai negara saat disimpan.", +"geo.where": "Diterima: file .mmdb (DB-IP, MaxMind GeoLite2, IPinfo Lite; negara, jaringan, atau keduanya) dan tabel IP-to-ASN (.tsv atau .tsv.gz). File Anda dipakai lebih dulu; sisanya dijawab DB-IP Lite bawaan. Lalu lintas yang sudah tersimpan tetap memakai negara saat disimpan.", "geo.kind_table": "Tabel IP-to-ASN", "geo.kind_country": "Negara", "geo.kind_asn": "Jaringan (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Server teratas", "topn.top_n": "Top {n}", "topn.all": "Semua trafik", -"ch.rest": "Lainnya (tidak digambar)" +"ch.rest": "Lainnya (tidak digambar)", +"geo.kind_both": "Negara dan jaringan (AS)", +"geo.builtin": "bawaan", +"geo.role_main": "Dipakai lebih dulu", +"geo.role_fallback": "Dipakai jika yang lain tidak punya jawaban", +"geo.remove": "Hapus", +"geo.remove_confirm": "Hapus {f}? Isinya akan diambil dari database lain dan DB-IP Lite bawaan.", +"geo.update": "Perbarui DB-IP Lite sekarang", +"geo.updating": "Mengunduh dari db-ip.com…", +"geo.updated": "Diperbarui. Lalu lintas baru memakainya mulai sekarang.", +"geo.update_failed": "Gagal mengunduh: {e}. Unduh filenya sendiri lalu unggah di sini.", +"geo.free": "Database gratis", +"geo.free_sub": "Unduh salah satu lalu unggah di sini. DB-IP Lite sudah bawaan.", +"geo.f_dbip": "Negara dan jaringan. Tanpa daftar, diperbarui tiap bulan. Sudah bawaan; “Perbarui DB-IP Lite sekarang” mengambil versi terbaru.", +"geo.f_maxmind": "Negara dan jaringan (GeoLite2-Country dan GeoLite2-ASN). Perlu akun MaxMind gratis.", +"geo.f_ipinfo": "Negara dan jaringan dalam satu file (ipinfo_lite.mmdb). Perlu akun IPinfo gratis.", +"geo.f_iptoasn": "Jaringan beserta negaranya (ip2asn-combined.tsv.gz). Tanpa daftar, diperbarui tiap jam.", +"geo.col_holds": "Isi", +"geo.col_db": "Database", +"geo.col_built": "Tanggal", +"geo.col_use": "Penggunaan", +"geo.col_lic": "Lisensi", +"geo.map": "Lalu lintas luar per negara", +"geo.map_sub": "{n} negara · makin gelap makin banyak · klik negara untuk memfilter", +"geo.map_less": "sedikit", +"geo.map_more": "banyak", +"geo.map_none": "tanpa lalu lintas", +"geo.data_from": "Negara dan jaringan:", +"geo.map_from": "Peta:" } diff --git a/internal/web/static/i18n/ja.json b/internal/web/static/i18n/ja.json index f4542fc..5519ab6 100644 --- a/internal/web/static/i18n/ja.json +++ b/internal/web/static/i18n/ja.json @@ -132,7 +132,7 @@ "geo.countries": "相手の国", "geo.countries_sub": "内部トラフィックは除外", "geo.as": "相手のネットワーク(AS)", -"geo.no_table": "データがありません。国とネットワークを表示するには、「受信状況」ページで国・ネットワークデータベースをアップロードしてください。", +"geo.no_table": "この期間に他の国との通信はありません。", "thr.hosts": "リスト掲載アドレスと通信したホスト", "thr.upload": "リスト掲載アドレスへの送信量", "thr.flows": "リスト掲載アドレスが関わるフロー", @@ -248,7 +248,7 @@ "geo.upload": "データベースファイルをアップロード…", "geo.uploading": "アップロードして確認中…", "geo.installed": "{f} としてインストールしました。今後の新しいトラフィックに適用されます。", -"geo.where": "対応形式:.mmdb ファイル(MaxMind GeoLite2 または DB-IP Lite の国または ASN 版)と IP-to-ASN テーブル(iptoasn.com などの .tsv / .tsv.gz)。無料ダウンロード:db-ip.com/db/lite.php と iptoasn.com。GeoLite2 には無料の MaxMind アカウントが必要です。保存済みのトラフィックは保存時の国のままです。", +"geo.where": "対応形式:.mmdb ファイル(DB-IP、MaxMind GeoLite2、IPinfo Lite。国、ネットワーク、または両方)と IP-to-ASN テーブル(.tsv / .tsv.gz)。アップロードしたファイルを優先し、見つからないものは内蔵の DB-IP Lite で調べます。保存済みのトラフィックは保存時の国のままです。", "geo.kind_table": "IP-to-ASN テーブル", "geo.kind_country": "国", "geo.kind_asn": "ネットワーク(AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "上位サーバー", "topn.top_n": "上位 {n}", "topn.all": "全トラフィック", -"ch.rest": "その他(グラフ外)" +"ch.rest": "その他(グラフ外)", +"geo.kind_both": "国とネットワーク(AS)", +"geo.builtin": "内蔵", +"geo.role_main": "優先して使用", +"geo.role_fallback": "他で見つからない時に使用", +"geo.remove": "削除", +"geo.remove_confirm": "{f} を削除しますか?以後は他のデータベースと内蔵の DB-IP Lite を使います。", +"geo.update": "DB-IP Lite を今すぐ更新", +"geo.updating": "db-ip.com からダウンロード中…", +"geo.updated": "更新しました。これからの新しいトラフィックに使われます。", +"geo.update_failed": "ダウンロードできませんでした:{e}。ファイルを自分でダウンロードしてアップロードしてください。", +"geo.free": "無料のデータベース", +"geo.free_sub": "ダウンロードしてここでアップロードします。DB-IP Lite は内蔵済みです。", +"geo.f_dbip": "国とネットワーク。登録不要、毎月更新。内蔵済みで、「DB-IP Lite を今すぐ更新」で最新版を取得します。", +"geo.f_maxmind": "国とネットワーク(GeoLite2-Country と GeoLite2-ASN)。無料の MaxMind アカウントが必要です。", +"geo.f_ipinfo": "国とネットワークを 1 ファイルで(ipinfo_lite.mmdb)。無料の IPinfo アカウントが必要です。", +"geo.f_iptoasn": "ネットワークとその国(ip2asn-combined.tsv.gz)。登録不要、毎時更新。", +"geo.col_holds": "内容", +"geo.col_db": "データベース", +"geo.col_built": "日付", +"geo.col_use": "使い方", +"geo.col_lic": "ライセンス", +"geo.map": "国別の外部トラフィック", +"geo.map_sub": "{n} か国 · 色が濃いほど多い · 国をクリックで絞り込み", +"geo.map_less": "少", +"geo.map_more": "多", +"geo.map_none": "通信なし", +"geo.data_from": "国・ネットワークのデータ:", +"geo.map_from": "地図:" } diff --git a/internal/web/static/i18n/ko.json b/internal/web/static/i18n/ko.json index 9a378e9..534e5a3 100644 --- a/internal/web/static/i18n/ko.json +++ b/internal/web/static/i18n/ko.json @@ -132,7 +132,7 @@ "geo.countries": "상대 국가", "geo.countries_sub": "내부 트래픽은 제외", "geo.as": "상대 네트워크(AS)", -"geo.no_table": "데이터가 없습니다. 국가와 네트워크를 보려면 '수집 상태' 페이지에서 국가 및 네트워크 데이터베이스를 업로드하세요.", +"geo.no_table": "이 기간에 다른 국가와 주고받은 트래픽이 없습니다.", "thr.hosts": "목록의 주소와 통신한 호스트", "thr.upload": "목록의 주소로 보낸 양", "thr.flows": "목록의 주소가 포함된 플로", @@ -248,7 +248,7 @@ "geo.upload": "데이터베이스 파일 업로드…", "geo.uploading": "업로드 및 확인 중…", "geo.installed": "{f}(으)로 설치했습니다. 지금부터 새 트래픽에 적용됩니다.", -"geo.where": "지원 형식: .mmdb 파일(MaxMind GeoLite2 또는 DB-IP Lite, 국가 또는 ASN)과 IP-to-ASN 테이블(.tsv 또는 .tsv.gz, iptoasn.com 제공 형식). 무료 다운로드: db-ip.com/db/lite.php 및 iptoasn.com. GeoLite2는 무료 MaxMind 계정이 필요합니다. 이미 저장된 트래픽은 저장 당시의 국가를 유지합니다.", +"geo.where": "지원 형식: .mmdb 파일(DB-IP, MaxMind GeoLite2, IPinfo Lite — 국가, 네트워크 또는 둘 다)과 IP-to-ASN 표(.tsv 또는 .tsv.gz). 직접 올린 파일을 먼저 쓰고, 찾지 못한 주소는 내장된 DB-IP Lite로 찾습니다. 이미 저장된 트래픽은 저장할 때의 국가를 유지합니다.", "geo.kind_table": "IP-to-ASN 테이블", "geo.kind_country": "국가", "geo.kind_asn": "네트워크(AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "상위 서버", "topn.top_n": "상위 {n}", "topn.all": "전체 트래픽", -"ch.rest": "기타(그래프에 미표시)" +"ch.rest": "기타(그래프에 미표시)", +"geo.kind_both": "국가와 네트워크(AS)", +"geo.builtin": "내장", +"geo.role_main": "먼저 사용", +"geo.role_fallback": "다른 곳에 없을 때 사용", +"geo.remove": "삭제", +"geo.remove_confirm": "{f}을(를) 삭제할까요? 이후에는 다른 데이터베이스와 내장 DB-IP Lite를 씁니다.", +"geo.update": "DB-IP Lite 지금 업데이트", +"geo.updating": "db-ip.com에서 내려받는 중…", +"geo.updated": "업데이트했습니다. 지금부터 새 트래픽에 적용됩니다.", +"geo.update_failed": "내려받지 못했습니다: {e}. 파일을 직접 내려받아 올려 주세요.", +"geo.free": "무료 데이터베이스", +"geo.free_sub": "내려받은 뒤 여기에 올리면 됩니다. DB-IP Lite는 이미 내장되어 있습니다.", +"geo.f_dbip": "국가와 네트워크. 가입 불필요, 매월 업데이트. 내장되어 있으며 'DB-IP Lite 지금 업데이트'로 최신판을 받습니다.", +"geo.f_maxmind": "국가와 네트워크(GeoLite2-Country와 GeoLite2-ASN). 무료 MaxMind 계정이 필요합니다.", +"geo.f_ipinfo": "국가와 네트워크를 한 파일에(ipinfo_lite.mmdb). 무료 IPinfo 계정이 필요합니다.", +"geo.f_iptoasn": "네트워크와 그 국가(ip2asn-combined.tsv.gz). 가입 불필요, 매시간 업데이트.", +"geo.col_holds": "내용", +"geo.col_db": "데이터베이스", +"geo.col_built": "날짜", +"geo.col_use": "용도", +"geo.col_lic": "라이선스", +"geo.map": "국가별 외부 트래픽", +"geo.map_sub": "{n}개 국가 · 색이 진할수록 많음 · 국가를 클릭해 필터", +"geo.map_less": "적음", +"geo.map_more": "많음", +"geo.map_none": "트래픽 없음", +"geo.data_from": "국가·네트워크 데이터:", +"geo.map_from": "지도:" } diff --git a/internal/web/static/i18n/pt.json b/internal/web/static/i18n/pt.json index 314c1d4..102283e 100644 --- a/internal/web/static/i18n/pt.json +++ b/internal/web/static/i18n/pt.json @@ -132,7 +132,7 @@ "geo.countries": "Países remotos", "geo.countries_sub": "O tráfego interno foi excluído", "geo.as": "Redes remotas (AS)", -"geo.no_table": "Sem dados. Envie um banco de dados de países e redes na página Fontes para ver países e redes.", +"geo.no_table": "Não há tráfego com outros países neste período.", "thr.hosts": "Hosts que falaram com endereços listados", "thr.upload": "Enviado para endereços listados", "thr.flows": "Fluxos com endereços listados", @@ -248,7 +248,7 @@ "geo.upload": "Enviar arquivo de banco de dados…", "geo.uploading": "Enviando e verificando…", "geo.installed": "Instalado como {f}. Vale para o tráfego novo a partir de agora.", -"geo.where": "Aceitos: arquivos .mmdb (MaxMind GeoLite2 ou DB-IP Lite, de países ou ASN) e tabelas IP-to-ASN (.tsv ou .tsv.gz, como as do iptoasn.com). Downloads gratuitos: db-ip.com/db/lite.php e iptoasn.com; o GeoLite2 exige uma conta gratuita da MaxMind. O tráfego já armazenado mantém o país com que foi salvo.", +"geo.where": "Aceitos: arquivos .mmdb (DB-IP, MaxMind GeoLite2, IPinfo Lite; países, redes ou ambos) e tabelas IP-to-ASN (.tsv ou .tsv.gz). Seus arquivos são usados primeiro; o restante vem da DB-IP Lite embutida. O tráfego já guardado mantém o país com que foi salvo.", "geo.kind_table": "Tabela IP-to-ASN", "geo.kind_country": "Países", "geo.kind_asn": "Redes (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Principais servidores", "topn.top_n": "Top {n}", "topn.all": "Todo o tráfego", -"ch.rest": "Outros (não desenhados)" +"ch.rest": "Outros (não desenhados)", +"geo.kind_both": "Países e redes (AS)", +"geo.builtin": "embutida", +"geo.role_main": "Usada primeiro", +"geo.role_fallback": "Usada quando as outras não têm resposta", +"geo.remove": "Remover", +"geo.remove_confirm": "Remover {f}? O que ele continha passará a vir das outras bases e da DB-IP Lite embutida.", +"geo.update": "Atualizar DB-IP Lite agora", +"geo.updating": "Baixando de db-ip.com…", +"geo.updated": "Atualizada. O tráfego novo já usa a nova base.", +"geo.update_failed": "Não foi possível baixar: {e}. Baixe os arquivos você mesmo e envie-os.", +"geo.free": "Bases gratuitas", +"geo.free_sub": "Baixe uma e envie aqui. A DB-IP Lite já vem embutida.", +"geo.f_dbip": "Países e redes. Sem cadastro, atualizada todo mês. Embutida; “Atualizar DB-IP Lite agora” busca a mais recente.", +"geo.f_maxmind": "Países e redes (GeoLite2-Country e GeoLite2-ASN). Requer uma conta gratuita da MaxMind.", +"geo.f_ipinfo": "Países e redes em um só arquivo (ipinfo_lite.mmdb). Requer uma conta gratuita da IPinfo.", +"geo.f_iptoasn": "Redes com seu país (ip2asn-combined.tsv.gz). Sem cadastro, atualizada a cada hora.", +"geo.col_holds": "Contém", +"geo.col_db": "Base", +"geo.col_built": "Data", +"geo.col_use": "Uso", +"geo.col_lic": "Licença", +"geo.map": "Tráfego remoto por país", +"geo.map_sub": "{n} países · mais escuro, mais tráfego · clique num país para filtrar", +"geo.map_less": "menos", +"geo.map_more": "mais", +"geo.map_none": "sem tráfego", +"geo.data_from": "Países e redes:", +"geo.map_from": "Mapa:" } diff --git a/internal/web/static/i18n/ru.json b/internal/web/static/i18n/ru.json index aa0f164..8c58335 100644 --- a/internal/web/static/i18n/ru.json +++ b/internal/web/static/i18n/ru.json @@ -132,7 +132,7 @@ "geo.countries": "Страны собеседников", "geo.countries_sub": "Внутренний трафик исключён", "geo.as": "Сети собеседников (AS)", -"geo.no_table": "Нет данных. Загрузите базу стран и сетей на странице «Источники», чтобы видеть страны и сети.", +"geo.no_table": "За этот период нет трафика с другими странами.", "thr.hosts": "Узлы, связывавшиеся с адресами из списков", "thr.upload": "Отправлено на адреса из списков", "thr.flows": "Потоки с адресами из списков", @@ -248,7 +248,7 @@ "geo.upload": "Загрузить файл базы…", "geo.uploading": "Загрузка и проверка…", "geo.installed": "Установлено как {f}. Применяется к новому трафику с этого момента.", -"geo.where": "Принимаются: файлы .mmdb (MaxMind GeoLite2 или DB-IP Lite, страны или ASN) и таблицы IP-to-ASN (.tsv или .tsv.gz, как на iptoasn.com). Бесплатная загрузка: db-ip.com/db/lite.php и iptoasn.com; для GeoLite2 нужна бесплатная учётная запись MaxMind. Для уже сохранённого трафика остаётся страна, определённая при сохранении.", +"geo.where": "Подходят файлы .mmdb (DB-IP, MaxMind GeoLite2, IPinfo Lite: страны, сети или и то и другое) и таблицы IP-to-ASN (.tsv или .tsv.gz). Сначала используются ваши файлы, остальное определяет встроенная DB-IP Lite. Уже сохранённый трафик сохраняет страну, с которой был записан.", "geo.kind_table": "Таблица IP-to-ASN", "geo.kind_country": "Страны", "geo.kind_asn": "Сети (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Основные серверы", "topn.top_n": "Топ {n}", "topn.all": "Весь трафик", -"ch.rest": "Прочее (не показано)" +"ch.rest": "Прочее (не показано)", +"geo.kind_both": "Страны и сети (AS)", +"geo.builtin": "встроенная", +"geo.role_main": "Используется первой", +"geo.role_fallback": "Используется, если в других нет ответа", +"geo.remove": "Удалить", +"geo.remove_confirm": "Удалить {f}? Его данные будут браться из других баз и встроенной DB-IP Lite.", +"geo.update": "Обновить DB-IP Lite", +"geo.updating": "Загрузка с db-ip.com…", +"geo.updated": "Обновлено. Новый трафик уже использует новую базу.", +"geo.update_failed": "Не удалось загрузить: {e}. Скачайте файлы сами и загрузите их здесь.", +"geo.free": "Бесплатные базы", +"geo.free_sub": "Скачайте и загрузите сюда. DB-IP Lite уже встроена.", +"geo.f_dbip": "Страны и сети. Без регистрации, обновляется ежемесячно. Встроена; «Обновить DB-IP Lite» загружает свежую версию.", +"geo.f_maxmind": "Страны и сети (GeoLite2-Country и GeoLite2-ASN). Нужна бесплатная учётная запись MaxMind.", +"geo.f_ipinfo": "Страны и сети в одном файле (ipinfo_lite.mmdb). Нужна бесплатная учётная запись IPinfo.", +"geo.f_iptoasn": "Сети и их страна (ip2asn-combined.tsv.gz). Без регистрации, обновляется ежечасно.", +"geo.col_holds": "Содержит", +"geo.col_db": "База", +"geo.col_built": "Дата", +"geo.col_use": "Порядок", +"geo.col_lic": "Лицензия", +"geo.map": "Внешний трафик по странам", +"geo.map_sub": "Стран: {n} · темнее — больше трафика · нажмите на страну, чтобы отфильтровать", +"geo.map_less": "меньше", +"geo.map_more": "больше", +"geo.map_none": "нет трафика", +"geo.data_from": "Страны и сети:", +"geo.map_from": "Карта:" } diff --git a/internal/web/static/i18n/ur.json b/internal/web/static/i18n/ur.json index 583cf33..dc65e44 100644 --- a/internal/web/static/i18n/ur.json +++ b/internal/web/static/i18n/ur.json @@ -132,7 +132,7 @@ "geo.countries": "بیرونی ممالک", "geo.countries_sub": "اندرونی ٹریفک شامل نہیں", "geo.as": "بیرونی نیٹ ورکس (AS)", -"geo.no_table": "کوئی ڈیٹا نہیں۔ ممالک اور نیٹ ورکس دیکھنے کے لیے ذرائع صفحے پر ممالک اور نیٹ ورکس کا ڈیٹابیس اپ لوڈ کریں۔", +"geo.no_table": "اس مدت میں دوسرے ممالک کے ساتھ کوئی ٹریفک نہیں۔", "thr.hosts": "فہرست شدہ پتوں سے رابطے والے ہوسٹ", "thr.upload": "فہرست شدہ پتوں کو بھیجا گیا", "thr.flows": "فہرست شدہ پتوں والے فلو", @@ -248,7 +248,7 @@ "geo.upload": "ڈیٹابیس فائل اپ لوڈ کریں…", "geo.uploading": "اپ لوڈ اور جانچ ہو رہی ہے…", "geo.installed": "{f} کے طور پر انسٹال ہو گیا۔ اب سے نئے ٹریفک پر لاگو ہو گا۔", -"geo.where": "قابلِ قبول: .mmdb فائلیں (MaxMind GeoLite2 یا DB-IP Lite، ملک یا ASN) اور IP-to-ASN جدول (.tsv یا .tsv.gz، جیسے iptoasn.com سے)۔ مفت ڈاؤن لوڈ: db-ip.com/db/lite.php اور iptoasn.com؛ GeoLite2 کے لیے مفت MaxMind اکاؤنٹ درکار ہے۔ پہلے سے محفوظ ٹریفک وہی ملک رکھتا ہے جس کے ساتھ وہ محفوظ ہوا تھا۔", +"geo.where": "قابلِ قبول: ‎.mmdb فائلیں (DB-IP، MaxMind GeoLite2، IPinfo Lite؛ ممالک، نیٹ ورکس یا دونوں) اور IP-to-ASN جدولیں (‎.tsv یا ‎.tsv.gz)۔ آپ کی فائلیں پہلے استعمال ہوتی ہیں؛ باقی کا جواب اندرونی DB-IP Lite دیتا ہے۔ پہلے سے محفوظ ٹریفک وہی ملک رکھتا ہے جس کے ساتھ محفوظ ہوا تھا۔", "geo.kind_table": "IP-to-ASN جدول", "geo.kind_country": "ممالک", "geo.kind_asn": "نیٹ ورکس (AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "سرفہرست سرور", "topn.top_n": "سرفہرست {n}", "topn.all": "تمام ٹریفک", -"ch.rest": "دیگر (چارٹ میں نہیں)" +"ch.rest": "دیگر (چارٹ میں نہیں)", +"geo.kind_both": "ممالک اور نیٹ ورکس (AS)", +"geo.builtin": "اندرونی", +"geo.role_main": "پہلے استعمال", +"geo.role_fallback": "جب دوسروں میں جواب نہ ہو", +"geo.remove": "ہٹائیں", +"geo.remove_confirm": "{f} ہٹائیں؟ اس کے بعد یہ معلومات دوسرے ڈیٹا بیس اور اندرونی DB-IP Lite سے آئیں گی۔", +"geo.update": "DB-IP Lite ابھی اپ ڈیٹ کریں", +"geo.updating": "db-ip.com سے ڈاؤن لوڈ ہو رہا ہے…", +"geo.updated": "اپ ڈیٹ ہو گیا۔ اب سے نیا ٹریفک اسے استعمال کرے گا۔", +"geo.update_failed": "ڈاؤن لوڈ نہیں ہو سکا: {e}۔ فائلیں خود ڈاؤن لوڈ کر کے یہاں اپ لوڈ کریں۔", +"geo.free": "مفت ڈیٹا بیس", +"geo.free_sub": "ایک ڈاؤن لوڈ کریں اور یہاں اپ لوڈ کریں۔ DB-IP Lite پہلے سے اندرونی ہے۔", +"geo.f_dbip": "ممالک اور نیٹ ورکس۔ سائن اپ نہیں، ہر ماہ اپ ڈیٹ۔ اندرونی؛ «DB-IP Lite ابھی اپ ڈیٹ کریں» تازہ ترین لاتا ہے۔", +"geo.f_maxmind": "ممالک اور نیٹ ورکس (GeoLite2-Country اور GeoLite2-ASN)۔ مفت MaxMind اکاؤنٹ درکار۔", +"geo.f_ipinfo": "ممالک اور نیٹ ورکس ایک فائل میں (ipinfo_lite.mmdb)۔ مفت IPinfo اکاؤنٹ درکار۔", +"geo.f_iptoasn": "نیٹ ورکس اور ان کا ملک (ip2asn-combined.tsv.gz)۔ سائن اپ نہیں، ہر گھنٹے اپ ڈیٹ۔", +"geo.col_holds": "مواد", +"geo.col_db": "ڈیٹا بیس", +"geo.col_built": "تاریخ", +"geo.col_use": "استعمال", +"geo.col_lic": "لائسنس", +"geo.map": "ملک کے لحاظ سے بیرونی ٹریفک", +"geo.map_sub": "{n} ممالک · گہرا رنگ یعنی زیادہ ٹریفک · فلٹر کرنے کے لیے ملک پر کلک کریں", +"geo.map_less": "کم", +"geo.map_more": "زیادہ", +"geo.map_none": "ٹریفک نہیں", +"geo.data_from": "ممالک اور نیٹ ورکس کا ڈیٹا:", +"geo.map_from": "نقشہ:" } diff --git a/internal/web/static/i18n/zh.json b/internal/web/static/i18n/zh.json index 93d7850..c278730 100644 --- a/internal/web/static/i18n/zh.json +++ b/internal/web/static/i18n/zh.json @@ -132,7 +132,7 @@ "geo.countries": "对端国家", "geo.countries_sub": "内网流量已排除", "geo.as": "对端运营商(AS)", -"geo.no_table": "没有数据。请在“接入”页面上传国家和运营商数据库,即可查看国家和运营商。", +"geo.no_table": "这个时间范围内没有与其他国家之间的流量。", "thr.hosts": "和名单地址通信的主机", "thr.upload": "发往名单地址的流量", "thr.flows": "涉及名单地址的流", @@ -248,7 +248,7 @@ "geo.upload": "上传数据库文件…", "geo.uploading": "正在上传并校验…", "geo.installed": "已安装为 {f},从现在起对新流量生效。", -"geo.where": "支持:.mmdb 文件(MaxMind GeoLite2 或 DB-IP Lite,国家库或 ASN 库),以及 IP-to-ASN 表(.tsv 或 .tsv.gz,如 iptoasn.com 提供的)。免费下载:db-ip.com/db/lite.php 和 iptoasn.com;GeoLite2 需要注册免费的 MaxMind 账号。已入库的流量保留入库时的国家。", +"geo.where": "支持:.mmdb 文件(DB-IP、MaxMind GeoLite2、IPinfo Lite;国家库、运营商库或二合一)和 IP-to-ASN 表(.tsv 或 .tsv.gz)。优先用你上传的库,查不到的再用内置的 DB-IP Lite。已入库的流量保留入库时的国家。", "geo.kind_table": "IP-to-ASN 表", "geo.kind_country": "国家", "geo.kind_asn": "运营商(AS)", @@ -347,5 +347,33 @@ "topn.top_servers": "Top 服务器", "topn.top_n": "前 {n} 名", "topn.all": "全部流量", -"ch.rest": "其他(未画出)" +"ch.rest": "其他(未画出)", +"geo.kind_both": "国家和运营商(AS)", +"geo.builtin": "内置", +"geo.role_main": "优先使用", +"geo.role_fallback": "其他库查不到时使用", +"geo.remove": "删除", +"geo.remove_confirm": "删除 {f}?删除后改用其他库和内置的 DB-IP Lite。", +"geo.update": "立即更新 DB-IP Lite", +"geo.updating": "正在从 db-ip.com 下载…", +"geo.updated": "已更新,从现在起的新流量使用新库。", +"geo.update_failed": "下载失败:{e}。可以自己下载文件后上传。", +"geo.free": "免费数据库", +"geo.free_sub": "下载后在这里上传即可。DB-IP Lite 已经内置。", +"geo.f_dbip": "国家和运营商。无需注册,每月更新。已内置;点“立即更新 DB-IP Lite”获取最新版。", +"geo.f_maxmind": "国家和运营商(GeoLite2-Country 和 GeoLite2-ASN)。需要注册免费的 MaxMind 账号。", +"geo.f_ipinfo": "国家和运营商在同一个文件里(ipinfo_lite.mmdb)。需要注册免费的 IPinfo 账号。", +"geo.f_iptoasn": "运营商及其所属国家(ip2asn-combined.tsv.gz)。无需注册,每小时更新。", +"geo.col_holds": "内容", +"geo.col_db": "数据库", +"geo.col_built": "日期", +"geo.col_use": "用途", +"geo.col_lic": "许可", +"geo.map": "按国家看外部流量", +"geo.map_sub": "共 {n} 个国家 · 颜色越深流量越大 · 点击国家可筛选", +"geo.map_less": "少", +"geo.map_more": "多", +"geo.map_none": "无流量", +"geo.data_from": "国家和运营商数据:", +"geo.map_from": "地图:" } diff --git a/internal/web/static/world.json b/internal/web/static/world.json new file mode 100644 index 0000000..05c288b --- /dev/null +++ b/internal/web/static/world.json @@ -0,0 +1 @@ +{"w":960,"h":430,"src":"Natural Earth (public domain) via world-atlas","c":{"ZW":"M562.5,316.9L558.2,316.1L557.4,316.3L556.5,315L554.1,314.3L553.1,312.7L553.3,311.1L552.2,310.9L552.1,309.9L549.4,307.9L547.2,302.5L551.2,303.3L551.8,303L554.4,299.7L556.7,298.5L557,297L558.7,295.9L561.1,295.7L561.2,296.8L563.3,296.9L565.1,298.2L567.8,299.1L567.7,304.1L566.9,305.7L567.5,309L565.9,311.6L565.5,313.6Z","ZM":"M561.1,295.7L558.7,295.9L557,297L556.7,298.5L554.4,299.7L551.8,303L551.2,303.3L547.2,302.5L546.3,301.7L544.6,301.5L542.2,302L539,298.7L538.6,296.7L538.9,287.5L544.2,287.4L544.4,280.8L545.3,282.4L548,281.9L548,283.2L549.8,284L552.3,284L553,283.1L553.8,284.9L556,285.8L557.7,288.6L559.8,288.7L559.9,284.8L558.9,285.7L557.9,285.4L556.4,283.7L556.1,282.7L556.9,280.2L556.9,277.5L556.4,275.7L558,273.3L562.8,272.4L563.6,273.7L564.3,273.7L565.9,275.1L568.5,276.2L569.2,276.9L570.4,279.9L569.3,280.9L569.1,282.9L569.5,285.9L568.5,286.3L568.3,288.2L567.4,289.4L568.8,290.6L560.8,293.7Z","YE":"M621.5,194.8L619.5,195.9L619.4,197.9L617.8,198.9L611.9,201.1L610.2,202.9L608.4,202.9L606.9,204.1L604.5,204.9L602.2,205.1L600.7,206.8L597.7,207.4L596.5,206.7L595.8,205.4L595.8,204.2L594,197.9L594.1,195.6L595,194.7L595,192.6L595.5,192.1L596.9,192.7L600.2,192.3L600.9,192.7L604.3,192.8L605.1,193.8L606.3,193.3L608.1,190L610.7,188.6L618,187.4L620.4,192.7ZM593.7,199L593.7,199L593.7,199ZM594.4,204L594.4,204L594.4,204ZM594.5,203.2L594.5,203.2L594.5,203.2ZM624.1,207.3L626.1,207.6L623.7,208.3L622.9,207.7Z","VN":"M759.5,214.4L759.5,214.4L759.5,214.4ZM765.2,179.5L763.8,180.2L763.4,181.3L762,181.1L762,183.4L760.8,184.5L760.3,187.5L761.3,189L763.2,190.7L763.2,191.4L765.5,194L768,195.8L770.5,198.8L772.4,203.5L772.6,205.3L773.3,207.5L772.7,207.3L772.9,210.2L772.5,211.4L768.1,214.3L766,214.7L766.9,215.2L766,217L763.7,218.4L762.8,219.9L761.9,220L761.8,216.8L762.4,215.9L760.5,214.3L761.6,213.9L762,212.8L763.9,212.5L765,213.1L764.1,211.5L764.3,210.1L767.9,208.5L768.2,207.6L768.1,204.8L767.1,202.7L767.3,200.9L767.5,199.1L766,197.3L766.5,196.7L764.5,195.4L763.7,193.8L758,188L755.6,186.3L755.8,185.3L757.2,185.5L758,184.2L756.7,182.2L755.1,181.3L754.2,182.1L752.6,181.5L751.1,179L749.2,176.8L749.8,175.7L751.5,176.6L752.1,175.6L753.8,176.3L755.9,175.1L756.9,173.8L758.7,175.1L761.2,175.5L760.8,176.7L761.4,178.1L763.5,179.2ZM766.8,219.7L766.8,219.7L766.8,219.7ZM767.9,214.3L767.9,214.3L767.9,214.3ZM762.6,181.7L762.6,181.7L762.6,181.7ZM764.4,180.5L764.4,180.5L764.4,180.5ZM764.3,181.4L764.3,181.4L764.3,181.4ZM763.1,181.9L763.1,181.9L763.1,181.9Z","VE":"M316.5,218.3L316.5,218.3L316.5,218.3ZM308.6,212.1L308.4,212.8L307.1,212.5ZM304.9,212.8L304.9,212.8L304.9,212.8ZM315.9,219.1L315.9,219.1L315.9,219.1ZM318.5,220.1L319,220.9L317.1,222.4L316.5,223.4L317.5,224.6L316.4,225.7L315.3,225.9L315.3,227.4L314.6,228.4L316.2,230.6L316.6,231.2L315.5,232.7L312.4,234L310.8,234.3L310.1,235.6L309.3,234.6L307.3,234.6L305.2,233.6L306.7,235.6L307.2,238.9L308.9,239.3L308.9,239.9L307.2,240.9L306.9,241.8L304.3,243.4L303,244.7L302.6,243.8L301,244.5L299.5,243L298.6,239.4L297,237.8L298.4,236.2L297.5,234.8L297,232.8L297.1,230.4L298.3,228L297.9,227.3L292.9,227.7L291.2,225.2L289.7,224.7L286.4,225L284.9,223.3L285.2,220.6L284.2,218.4L282.8,218L283.8,216.2L284.3,214.1L287,210.4L288.7,209.8L287,211.2L287.8,213.3L286.2,216.2L287.2,218.5L288.3,218.3L289,216.5L288.2,214.8L288.1,212.6L292.5,211.1L291.5,209.7L292.3,208.8L293.2,211L295.3,211.1L296.4,212L297,214L302.1,213.6L303.1,214.8L305.8,215.3L308.5,213.8L311.6,213.2L313.9,213.3L311,213.9L312.5,216.3L313.1,215.6L314.5,215.9L316.6,217.6L315.8,218.4L315.1,220.6L316.4,220Z","VA":"M510.7,115.6L510.7,115.6L510.7,115.6Z","VU":"M925.5,293.2L926.3,293.5L926.3,295.2L925.2,295.7L924.9,293.3ZM926.5,297.2L927.4,298.3L926.3,298.6ZM928.8,299.3L928.8,299.3L928.8,299.3ZM928.7,297.9L928.7,297.9L928.7,297.9ZM928.2,301.7L928.2,301.7L928.2,301.7ZM928.3,295.1L928.3,295.1L928.3,295.1ZM928.7,296.8L928.7,296.8L928.7,296.8ZM929.1,294.8L929.1,294.8L929.1,294.8ZM926.2,296L926.2,296L926.2,296ZM928.1,291.4L928.1,291.4L928.1,291.4ZM928.1,290.3L928.1,290.3L928.1,290.3ZM929.9,310L929.9,310L929.9,310ZM929.4,308L929.4,308L929.4,308ZM929.5,306.1L929.5,306.1L929.5,306.1Z","UZ":"M654.9,114.5L653.5,116.6L655.3,117.5L656.9,117.9L657.2,116.7L658,117.7L661.4,119L658.4,121L656.5,120.7L654.9,120.1L655.6,119.2L654.6,118.3L653.1,119.4L652.2,119L652.4,120.9L651.5,121L650.8,122.9L648.9,122.6L648.3,123.8L650.4,124.7L650.4,125.6L651.5,127.6L650.7,129.3L650.7,130.3L647.5,129.8L647.4,127.9L644.6,127L640.5,124.7L636.1,121.9L633.4,118.1L629.7,117.7L628.7,117.1L628.7,115.8L627.5,114.3L626.5,114.3L624.1,112.8L623.1,113.3L622.5,114.7L621.5,114.8L620.7,115.7L621.2,117.5L618.6,117.3L616.1,106L621.7,104.3L622.3,104.4L628.8,107.8L631.9,110.6L634.8,110.2L637.9,110.4L638.9,109.9L640.6,111.2L641.7,112.5L642.4,112.2L642.9,115.2L644.1,115.3L645.5,117.9L648.3,117.7L648.8,118.9L650.3,119.4L650.1,118.7L650.9,117.2ZM655.2,118.5L655.2,118.5L655.2,118.5ZM657.4,121.8L657.4,121.8L657.4,121.8ZM658.8,121.6L658.8,121.6L658.8,121.6Z","UY":"M343.8,352.6L343,354.6L342.2,355.5L340.5,356.3L338.4,355.8L337.4,356.3L334.4,354.8L332.8,354.9L331,353.1L330.7,350.8L331.3,349.9L330.8,348.6L330.6,346.9L331.2,341.4L333.2,341.2L335.1,342.8L335.8,344.2L336.8,343.6L337.8,344.7L339.6,345.5L342,347.3L342.6,348.4L343.9,349.4L343.1,350.8Z","FM":"M919.4,230.2L919.4,230.2L919.4,230.2ZM851.4,217.2L851.4,217.2L851.4,217.2ZM888.4,223.9L888.4,223.9L888.4,223.9ZM889,223.6L889,223.6L889,223.6ZM906.5,225.5L906.5,225.5L906.5,225.5Z","MH":"M937.2,228.6L937.2,228.6L937.2,228.6ZM934.6,224L934.6,224L934.6,224ZM942.1,224.8L942.1,224.8L942.1,224.8ZM940.8,224.5L940.8,224.5L940.8,224.5ZM927.9,212L927.9,212L927.9,212Z","MP":"M866.9,188.1L866.9,188.1L866.9,188.1ZM868.5,195.7L868.5,195.7L868.5,195.7ZM868.5,202.6L868.5,202.6L868.5,202.6ZM867.5,190.3L867.5,190.3L867.5,190.3ZM869.3,199.5L869.3,199.5L869.3,199.5ZM869.1,200L869.1,200L869.1,200Z","VI":"M307.7,189.5L307.7,189.5L307.7,189.5ZM308.2,189.4L308.2,189.4L308.2,189.4ZM307.8,191.2L307.8,191.2L307.8,191.2Z","GU":"M867.5,205.4L867.5,205.4L867.5,205.4Z","AS":"M23.5,291.7L23.5,291.7L23.5,291.7Z","PR":"M304.3,189.1L305.6,189.3L304.6,190.6L301.3,190.6L301.6,189ZM306.1,190.2L306.1,190.2L306.1,190.2ZM299.6,190.4L299.6,190.4L299.6,190.4Z","US":"M179,71.3L179,71.3L179,71.3ZM178.4,72.1L178.4,72.1L178.4,72.1ZM179.2,66.4L179.2,66.4L179.2,66.4ZM160,60.3L160,60.3L160,60.3ZM160,61.8L160,61.8L160,61.8ZM152.9,61.1L152.9,61.1L152.9,61.1ZM144.9,60.2L144.9,60.2L144.9,60.2ZM113.5,74.8L113.5,74.8L113.5,74.8ZM114.8,75.8L114.8,75.8L114.8,75.8ZM114.9,75.3L114.9,75.3L114.9,75.3ZM95.9,79.5L95.9,79.5L95.9,79.5ZM68.3,85.2L68.3,85.2L68.3,85.2ZM130.9,43.9L130.9,43.9L130.9,43.9ZM111.7,51L114.1,50.9L115.9,52.3L113.7,52.6L112.4,51.6L110.9,51.9L110.4,51.5ZM113.8,60.2L114.5,60.4L113.7,61.5L112.2,61.9L110.6,61.3L110.4,60.7ZM136.5,67.5L137.6,67.5L137.4,68.2L132.4,69.9L131.2,70.2L131.2,68.9L132.2,68.3L134.9,67.8L136.3,67.1ZM183.9,73.2L181.7,75.7L180.3,76.4L180,75.3L180.9,74.7L181.6,72.8L179.8,73.2L178.7,74.2L178.5,73.6L180.3,72.4L179.7,69.8L178.8,69.4L179.7,67.9L179.4,66.3L178.7,65.9L178.7,64.6L179.5,62.9L178.7,63.6L177.7,66.1L176,65.9L176.9,64L176.1,64.8L175,64L175.6,65.9L174.1,66.3L172.7,65.3L172.1,63.9L169.9,62.6L171.6,61.2L169.4,62.1L168.1,62L166.8,61.4L164.2,61L161.4,61.2L160.5,60.3L161.4,59.6L159.6,60.2L158.6,59.9L159.6,59.4L157.9,59.3L158.8,58.1L156.5,58.7L155.2,58.5L153.6,59L154.1,59.7L152.8,60.8L150.9,61.4L150,61L148.7,61.9L146,62.5L144.5,63.4L142.5,63.6L142.8,63L144.6,62.5L143.8,61.9L146.7,60L147.3,59.2L150,58.4L151.8,58.5L151.8,57.6L150.4,57.6L147.4,58.5L146.5,59.1L143.2,60.6L142.1,61.5L140.9,61.7L137.7,63.1L137,63.7L138.1,64.5L135.7,65.6L134.3,66.6L132.3,67L127.2,69L126.1,69.9L122.9,71L120.6,71.6L120.3,72.3L118.6,72.9L115.2,73.5L113.6,74.2L111,74.6L111.6,73.9L109,75.4L107.2,75.2L110.3,73.7L113.2,72.8L114.8,73.3L114.7,72.8L116,71.9L120.6,70.3L124.9,68.3L127.6,65.8L129.7,64.5L127.1,65.2L126.1,64.4L124.9,65.7L124.3,65.7L124.1,64.4L123,64L119.7,65.1L119.3,64.7L119.9,63.3L121.2,62.5L121.7,60.5L120.6,61.3L117.1,61.8L116.8,60.4L116,59.7L118.2,58.7L119.7,59.6L120.8,59.1L117.6,58.5L118.6,58.2L117.4,57.6L117.3,56.6L119.2,56L119.6,55.3L121.8,54.3L122.7,54.3L123.5,53.4L126.4,52.1L127.4,52.7L129.6,52.1L131.1,51.3L133.2,51.4L135.1,50.5L135.9,49.4L135.8,48.6L137,48.4L137.4,47.5L135.9,47.8L132.4,49L131.1,48.4L128.2,48.8L125.9,48.4L126.3,47.5L125.9,46.9L127.9,46.5L125.7,46.1L125,45.5L127.8,44.9L132.8,43.4L137,42.9L135.2,44L135.5,44.3L139.4,44.4L140.8,43.8L140.3,43.5L140.2,42.1L141.1,42.4L140.7,43L142.8,43.5L144.2,43L143.2,42.7L141.7,43.1L141.2,42.7L142.5,41.9L139.8,41.8L138.8,41.3L139.2,40.2L137.9,39L135.9,38.2L137,38L138.8,36.8L142.8,36.7L146.5,35.5L148.1,34.5L151.2,33.4L153.7,33.1L158.9,31.6L161.4,31.6L166.2,30.2L167.1,30.9L165.7,31.7L167.9,31L169,31.8L171.3,31.4L173,31.7L172,32.1L173.9,32.8L178.1,32.5L180.4,33.3L184.1,33.4L184.9,33.8L189.3,33.6L191.7,34.8L192.5,34.8L169,60.4L171,60.8L173.4,60.3L172.5,61L174.1,63.5L173.7,64.4L176.1,63.7L177.7,62.4L180.1,61.9L180.1,63.3L181.3,65L181.7,69.8L181.2,71.1L181.8,71.1L184.2,72.5ZM105.4,75.8L105,76.5L101.3,77.5L101.2,76.9L102.7,76.1ZM175.7,74.2L175.7,74.2L175.7,74.2ZM179.2,75.5L179.2,75.5L179.2,75.5ZM179.6,72.5L178.3,72.6L179.8,71.4ZM180.9,74.3L179.8,75.2L179.6,74.6L178.4,75.3L180.1,73.3L181.2,73ZM178.6,69.9L179.3,70.3L177.8,71.5L176.9,71.5L177.2,69.9ZM175.3,76.1L175.3,76.1L175.3,76.1ZM157.5,60L157.5,60L157.5,60ZM153,61.8L155.5,60.3L155.7,60.6ZM154.7,60L154.7,60L154.7,60ZM155,58.9L155,58.9L155,58.9ZM134.5,69.5L134.5,69.5L134.5,69.5ZM139.1,65.6L139.1,65.6L139.1,65.6ZM135.8,67.5L135.8,67.5L135.8,67.5ZM125.5,73.4L125.5,73.4L125.5,73.4ZM129,71.6L129,71.6L129,71.6ZM130.3,71.3L130.3,71.3L130.3,71.3ZM112.6,74.8L112.6,74.8L112.6,74.8ZM107.7,76.2L107.7,76.2L107.7,76.2ZM106,77.5L106,77.5L106,77.5ZM114,75.4L114,75.4L114,75.4ZM97.6,78.5L97.6,78.5L97.6,78.5ZM98.4,78.3L98.4,78.3L98.4,78.3ZM120.5,65.4L120.5,65.4L120.5,65.4ZM99.5,60L99.5,60L99.5,60ZM96,69.4L96,69.4L96,69.4ZM85.6,82.1L85.6,82.1L85.6,82.1ZM82.5,82.9L82.5,82.9L82.5,82.9ZM77.7,83.9L77.7,83.9L77.7,83.9ZM95.4,71L95.4,71L95.4,71ZM67.6,85.3L67.6,85.3L67.6,85.3ZM68.7,84.7L68.7,84.7L68.7,84.7ZM65.3,85.5L65.3,85.5L65.3,85.5ZM897.5,84.9L897.5,84.9L897.5,84.9ZM901,86.6L901,86.6L901,86.6ZM885,83.6L885,83.6L885,83.6ZM175.8,68.9L175.2,70.6L174,72.2L174.5,70.9L173.8,70.4L174.5,69.8L173.8,69L175.3,68.4ZM178.2,66.5L179.1,66.6L178.1,68.9L176.1,69.8ZM176,66.3L175.7,67L177.2,66.9L176.1,68.5L175.2,68L174.3,68.7L173.5,67.1L174.6,66.4ZM176.8,71.8L177.5,71.9L178.1,74.4L178,75.1L176.6,76.6L175.8,74.7L176.4,74L175.3,73.5ZM176.9,70.4L175.4,72.5L174.8,72.6L176,70.4ZM138.9,66L139.8,66.1L137.3,67L136.1,66.8L138.1,65.8ZM90.9,80.7L87,82.2L90.5,80.2ZM95.4,79L96.4,78.9L94,80.3L91.7,80.9L93.3,80.1L94.7,78.8ZM74.8,84.3L74.8,84.3L74.8,84.3ZM71.9,84.6L71.9,84.6L71.9,84.6ZM67,85.1L67,85.1L67,85.1ZM63.5,85.7L63.5,85.7L63.5,85.7ZM900.2,85L900.2,85L900.2,85ZM894.9,85L894.9,85L894.9,85ZM881.2,81.6L883.1,82.1L882.2,82.4ZM67.1,187.4L66.4,187.2L66.4,185.1L67.4,183.4L68.9,184.3L69.6,185.8ZM64.5,180.5L64.5,180.5L64.5,180.5ZM66.2,181.3L67.4,181.8L66.1,182.3ZM63.2,179.7L63.2,179.7L63.2,179.7ZM59.5,178.2L58.5,177.9L59.8,177.3ZM57.3,178.5L57.3,178.5L57.3,178.5ZM65.1,181.8L65.1,181.8L65.1,181.8ZM298.3,105.9L306.1,105.9L306.8,105.1L307.8,105.2L309.9,103.2L311.3,100.7L313.8,98.4L314.6,99.2L316.1,98.8L316.9,99.6L315.8,103.8L316.5,104.1L316.2,105.1L316.9,105.4L316.3,107L312.7,108.2L311.8,107.7L311.3,108.7L309.2,109.7L308.9,109.5L307.1,111.1L305.9,112.7L306.3,113.3L305,114.2L305.8,115.9L307.1,116.2L304,116.8L303.7,115.9L303,117.2L299.5,117.5L295.7,119.6L296.1,120.4L295.1,122.3L292.9,124.6L291.5,123.1L291.9,126.1L289.9,128.9L288.6,130L290,127.9L289.5,124L289.1,123.9L288.1,127.2L286.8,126.6L288.4,128L287.3,131.2L288.3,131.1L288,133.4L285.8,134.1L288.1,134.3L286.7,136L284.9,137.2L285.9,137.3L283.8,138L281.9,139.4L281.2,140.5L278.7,141.1L277.4,142.8L273.7,145.2L271.6,146.9L269.9,150.1L269.9,153.5L270.4,155.8L270.3,157.9L271,161.6L271.1,163.6L269.6,167.5L267.6,168.1L267.3,166L266.4,165.5L266,162.6L265.4,162.7L264.6,159.6L265.7,156.3L263.7,153.1L262.9,152.5L261.9,153.1L259.3,153.8L258.5,152.3L256.9,151.6L253.4,151.9L253.1,150.7L252.5,151.7L250.6,151.5L248.6,152.3L247.1,151.6L247,152.7L248.2,152.3L249,153.4L247.9,154L249.4,155.3L248.5,155.8L247.4,154.5L246.3,155.7L244.9,155.6L242.4,153.4L241.3,154.2L239.1,153.5L237.1,153.4L234.7,154.3L233,156.1L231.3,157.1L229.3,156.9L229.7,157.7L227.8,158.8L226,161.3L225.7,163.9L226.1,165.5L225.5,165.8L221.3,164L220.8,162.2L221,160.6L219.5,158.1L219.2,155.8L217.4,153.4L215.6,153.2L214.2,154L213.5,155.3L212.4,156L209.7,153.9L209.3,150.8L206.5,147.3L201.9,147.2L201.5,148.7L194.3,148.7L185.6,144.9L186.1,144.3L179.8,144.9L179.7,142.5L177.8,140.2L176.3,139.9L175.5,138.9L173.3,138.8L173.6,136.9L171.9,132.9L172.6,131L171.6,130.2L172,128.4L172.8,129.4L172.5,127.4L172.1,128.3L171.3,127.5L171.4,126.3L170.5,124.9L171.3,121.9L171,119.9L173,117.2L173.9,112.7L176.1,110L180.6,102.3L180.3,102L181.4,99.7L181.7,97.1L182.2,95.6L183.6,96.2L186.5,96.3L185.5,98.9L186.2,98.7L187.5,96.7L187.3,95.3L187.9,93.7L222,91.2L253.6,93.7L254.1,92.6L254.7,92.8L254.5,94.5L256.5,95.2L258.3,94.9L261.1,96.6L262.9,96.1L264.7,96.7L266.4,96.7L268.9,95.8L275.7,100.1L275.9,101.5L276.9,101.2L277,102.6L277.9,102.5L277.6,103.4L279.6,104.9L278.8,110.4L276.9,113.3L275.3,114.3L274.8,115.3L276.3,116.3L279.6,114.6L282.3,114.1L286.1,112.4L286,110.7L287.3,110.2L291.9,110.2L293.2,108.9L297.1,106.3ZM300.2,118.4L301.8,118.2L298.3,119.4L296.2,119.5L297.5,118.6ZM313.6,108L313.6,108L313.6,108ZM295.7,119.8L295.7,119.8L295.7,119.8ZM305.5,117.2L305.5,117.2L305.5,117.2ZM303.8,116.8L303.8,116.8L303.8,116.8ZM306.7,117.5L306.7,117.5L306.7,117.5ZM288.4,134.4L288.4,134.4L288.4,134.4ZM288.2,136.4L288.2,136.4L288.2,136.4ZM287.6,136.5L287.6,136.5L287.6,136.5ZM285.4,138.2L285.4,138.2L285.4,138.2ZM265.9,164L265.9,164L265.9,164ZM265.8,163.7L265.8,163.7L265.8,163.7ZM269.5,168.1L269.5,168.1L269.5,168.1ZM242.4,154.4L242.4,154.4L242.4,154.4ZM227.8,159.4L227.8,159.4L227.8,159.4ZM228.6,158.6L228.6,158.6L228.6,158.6ZM226.5,161.3L226.5,161.3L226.5,161.3ZM233.8,155.5L233.8,155.5L233.8,155.5ZM226.2,164.9L226.2,164.9L226.2,164.9ZM173.2,140.2L173.2,140.2L173.2,140.2ZM174.6,142.7L174.6,142.7L174.6,142.7ZM177,143.9L177,143.9L177,143.9ZM173.8,140.5L173.8,140.5L173.8,140.5ZM174.4,140L174.4,140L174.4,140ZM177.5,142.2L177.5,142.2L177.5,142.2ZM187.3,94.7L187.3,94.7L187.3,94.7ZM186.5,95.2L186.5,95.2L186.5,95.2ZM187,96.3L187,96.3L187,96.3ZM303.5,116.8L303.5,116.8L303.5,116.8ZM295.1,122.5L295.1,122.5L295.1,122.5ZM290.7,128.1L290.7,128.1L290.7,128.1ZM285.3,138.2L285.3,138.2L285.3,138.2ZM266.7,169.7L266.7,169.7L266.7,169.7ZM268.1,169.2L268.1,169.2L268.1,169.2ZM268.7,168.9L268.7,168.9L268.7,168.9ZM267.5,169.5L267.5,169.5L267.5,169.5ZM270.2,149.8L270.2,149.8L270.2,149.8ZM266.1,169.8L266.1,169.8L266.1,169.8ZM271.2,161.4L271.2,161.4L271.2,161.4ZM265.5,170L265.5,170L265.5,170ZM250.1,153.7L250.1,153.7L250.1,153.7ZM251.3,152.2L251.3,152.2L251.3,152.2ZM252.6,152L252.6,152L252.6,152ZM249.5,152.6L249.5,152.6L249.5,152.6ZM250.3,153.4L250.3,153.4L250.3,153.4ZM260.4,154L260.4,154L260.4,154ZM184.7,99.2L184.7,99.2L184.7,99.2ZM186.2,98.6L186.2,98.6L186.2,98.6ZM186.2,98L186.2,98L186.2,98ZM186.8,95.4L186.8,95.4L186.8,95.4ZM312.5,108.4L312.5,108.4L312.5,108.4Z","GS":"M421.3,427.9L421.3,427.9L421.3,427.9ZM394.5,415.1L396.3,415.7L397.8,417.2L397.2,417.5L396.1,416.5L393.6,415.4Z","IO":"M675.2,269.9L675.2,269.9L675.2,269.9Z","SH":"M464.8,296.8L464.8,296.8L464.8,296.8ZM441.3,271.7L441.3,271.7L441.3,271.7Z","PN":"M143.4,323.2L143.4,323.2L143.4,323.2Z","AI":"M312.6,189.8L312.6,189.8L312.6,189.8Z","FK":"M341.9,406.8L344,407.2L344.6,408.1L341.7,409L341.5,409.9L340.7,408.8L341.7,408.1ZM338.7,407.4L341,407.3L340,408.9L338.4,409.6L337.6,409.2L339.1,408.3ZM337.2,408.4L337.2,408.4L337.2,408.4ZM343.5,409L343.5,409L343.5,409ZM339,407.2L339,407.2L339,407.2ZM340.8,409.7L340.8,409.7L340.8,409.7Z","KY":"M264.2,186.3L264.2,186.3L264.2,186.3ZM268,185.2L268,185.2L268,185.2ZM268.4,185.2L268.4,185.2L268.4,185.2Z","BM":"M314,145.6L314,145.6L314,145.6Z","VG":"M308.9,189.1L308.9,189.1L308.9,189.1ZM308.4,189.3L308.4,189.3L308.4,189.3ZM309.3,188.2L309.3,188.2L309.3,188.2Z","TC":"M290.9,178.7L290.9,178.7L290.9,178.7ZM290.3,178.5L290.3,178.5L290.3,178.5ZM289.1,178.5L289.1,178.5L289.1,178.5Z","MS":"M314.4,194.5L314.4,194.5L314.4,194.5Z","JE":"M475.2,93L475.2,93L475.2,93Z","GG":"M474,92.2L474,92.2L474,92.2Z","IM":"M469.8,78.2L469.8,78.2L469.8,78.2Z","GB":"M473.8,85.8L472.3,86.5L469.2,85.5L468.5,85.8L467.7,85L469.8,84.1L470.7,83L470.5,81.9L469.1,82.3L470.5,81L472.7,80.5L473.4,78.2L472.7,78.3L471.8,77.3L472.1,75.9L470.9,76.4L468.2,76.2L469.3,74.3L469,72.7L467.8,73.3L466.8,74.6L467.2,72.7L468.3,70.6L467.2,71.3L466.1,70.7L467.5,69.2L467.4,67.4L468.4,67.4L468.1,66.3L468.7,65.5L473.2,65.2L472.8,66.1L471,67.1L470.7,68.2L472.4,67.9L475.3,67.9L476,68.5L474.1,71.2L472.7,71.7L474,71.9L472.4,72.7L474.1,72.8L476.2,74.1L477,76.4L479.8,78.4L479.5,78.7L480.8,81.2L480.1,82L482.5,81.8L483.9,82.4L484.1,83.3L483,85.1L481.8,85.5L481.6,86.5L483.3,86.6L483.3,87.1L480.5,88.4L478.2,88.4L476.7,88L475.2,88.9L472.9,88.5L472,88.8L471,90L470.2,89.5L467.6,90.6L467.4,89.9L470.2,87.1L472.6,87.1ZM470.3,80.7L470.3,80.7L470.3,80.7ZM474.3,63.5L474.3,63.5L474.3,63.5ZM477.7,59.8L477.7,59.8L477.7,59.8ZM477.1,59.8L477.7,60L477.4,61.3L476.3,60.5ZM478.3,59L478.3,59L478.3,59ZM472.9,64.7L472.9,64.7L472.9,64.7ZM473.5,64.9L473.5,64.9L473.5,64.9ZM473.2,64.1L473.2,64.1L473.2,64.1ZM473.9,63.6L473.9,63.6L473.9,63.6ZM465,71.1L465,71.1L465,71.1ZM468.3,74.4L468.3,74.4L468.3,74.4ZM466.9,71.8L466,72L466.2,70.9ZM466.1,73L466.1,73L466.1,73ZM466.4,73.4L466.4,73.4L466.4,73.4ZM466.1,66L465.6,67L464.4,67.7L464.3,66.4L466.1,65.6ZM465.8,70L465.8,70L465.8,70ZM466.2,68.4L467.2,69.3L466.6,69.8L464.8,68.6ZM463.8,67.9L463.8,67.9L463.8,67.9ZM463.6,69.6L463.6,69.6L463.6,69.6ZM463.2,70L463.2,70L463.2,70ZM465.7,78.5L464.7,78.5L463.8,77.5L463,78.4L461.3,77.5L463.5,75.5L466,75.1L467.2,76.8L467.1,77.9ZM477.5,88.6L477.5,88.6L477.5,88.6Z","AE":"M627.3,166.5L627.8,168.6L626.2,169L626.4,170.9L627,171.5L625.7,171.9L625.9,172.6L625.4,175.8L625.2,176L618.4,175.1L615.4,171.3L615.4,170.8L616.3,171.8L618.2,171.2L621.5,171.5L622.8,170.8L623.5,169.2L626.3,166.1L626.5,165.2ZM627.4,167.8L627.4,167.8L627.4,167.8ZM620,170.9L620,170.9L620,170.9ZM618.1,170.8L618.1,170.8L618.1,170.8ZM621.6,171.1L621.6,171.1L621.6,171.1ZM622.9,170.3L622.9,170.3L622.9,170.3Z","UA":"M571.9,99.5L566.4,101L564.2,102.3L564.8,103.7L563.9,103L561.3,102.2L561.2,102.6L558.5,102.6L556.7,101.9L558.6,101L556,100.8L554.3,101.2L553.2,103.3L551.7,103.9L552.1,105.2L550.9,104.7L549.9,105.2L548.4,104.6L550,102.7L550.3,101.3L552.1,101.8L552,100.3L550,98.4L549.6,96.8L548.1,96.5L545.7,95.3L543.6,96L542.6,96.8L539.7,97.6L535.3,96.5L534.8,96.9L532.8,95.5L533.6,93.5L534.3,93.7L533.7,92.1L536,89.5L536.6,89.4L536.7,88.1L535.3,86.1L537,85.1L540.6,84.9L543.5,85.4L543.9,85.8L547,86L548.3,85.8L548.8,86.5L550.7,86.2L551.7,86.9L551.5,85.9L552.4,84.5L554.2,84.4L555.8,83.7L558.7,83.6L560.5,85.3L559.9,85.6L560.4,86.9L562.3,87.1L563,87.5L563.5,89.1L566.5,90.1L568.3,89.4L570,90.9L570.5,90.5L574.9,91.9L575.3,93L574.4,93.7L575.2,94.2L574.6,95L575.5,95.9L575.2,97.2L573.2,97.2L571.8,98.1ZM557.4,102.3L557.4,102.3L557.4,102.3Z","UG":"M571.5,250L563.3,250L562.4,250.2L561.3,251.1L559.8,251.2L560.2,246.5L560.8,244.3L564.4,240.5L562.9,239.2L563.2,235.9L564,235L565.8,235L566.8,235.8L569,234.7L570.4,235.1L571.6,233.7L572.9,235.6L573,237L574.2,239.1L574.4,241.7L571.6,246.3Z","TM":"M612.9,125.2L612.9,125.2L612.9,125.2ZM618.6,117.3L621.2,117.5L620.7,115.7L621.5,114.8L622.5,114.7L623.1,113.3L624.1,112.8L626.5,114.3L627.5,114.3L628.7,115.8L628.7,117.1L629.7,117.7L633.4,118.1L636.1,121.9L640.5,124.7L644.6,127L647.4,127.9L647.5,129.8L645.5,129.1L645.1,130.1L643.4,130.4L643.1,132.9L641.7,133.9L639.9,134.6L640,135.7L638.2,136.6L637.1,135.7L635.3,135.2L634.3,132L632.4,132L629.2,129.2L627,128.8L624,127.7L623.5,127L621.6,126.9L621.2,127.5L619.5,127.4L618.4,128L617.8,129.3L615.8,129.8L615.2,127.9L614.9,125L614.2,123.9L612.8,123.8L612.8,122.7L613.7,122.9L613.3,121.7L611.8,121.7L611.1,120.2L611.2,118.2L613.5,119.4L615,119.3L615.7,118.7L615.2,117.7L613.8,116.7L612.8,115L610.7,115.3L610.9,117.7L609.7,115.9L611.3,114.6L613.4,114.2L615.5,115.5L617.5,117.5Z","TR":"M544.6,121L544.6,121L544.6,121ZM582.7,116.7L585.1,117L585.8,116.6L587.6,118L588.5,119.2L588.8,120.9L590.3,121.3L591.6,122.4L591.8,122.6L589.9,123.4L591.4,126.6L591.1,128L592,128.5L592.8,130.4L591.7,130.9L591.2,130L589.6,130.1L587.7,129.7L586.8,130.5L586.5,130L584.6,130.6L582.6,130.5L579.4,131.8L577.9,131.8L576.3,131.2L574.5,132L572.5,131.5L572.7,133.2L571.6,134.5L570.9,134.2L570.6,133L571.4,131.9L570.9,131.1L569.4,132.2L567.3,131.5L565.2,133.4L563,133.9L560.9,132.3L559.1,131.5L557.3,131.3L556.9,133.2L555.1,133.5L553.7,132.7L553.3,131.8L551.4,131.4L549.8,131.9L551.2,130.8L549,130.8L549.4,130.3L548.1,128.7L548.4,127.8L546,126.8L547.9,126.4L547,125.5L547.6,124.9L546.7,123.7L546.9,122.8L545.2,123.1L545.2,121.5L546.5,120.2L548.3,120.5L552.2,120.1L551.9,119.5L554.1,119.2L552,118.3L552.6,117.6L557.4,118L559.8,116.1L562.4,115.2L565.8,115.4L566.4,115L567.2,116.1L569.1,116.2L570.4,117.5L575.2,118.6L577.7,118L579.8,118.5ZM549.1,115.3L550.1,116.9L552,117.6L551.4,118.4L549.8,118.1L548.2,118.4L545.2,121.2L545.3,120.5L546.5,119.5L544.6,119.2L545.9,117.1L545,116.1L545.6,115.4L547.3,115Z","TN":"M509.4,142.8L509.5,145.2L507.8,146.3L506,148.2L506.3,150.4L504.6,152.1L503.2,146.3L501.4,144.8L500.7,143.1L499.8,142.6L499.2,140L501,138L501.3,136.5L500.7,132.4L501.6,131L504.4,129.8L505.7,130.2L506.3,131.7L507.9,130.6L508.1,131.2L506.6,133L506.8,134.3L507.9,135.1L508.2,136.4L506.8,138.5L505.7,139.6L505.9,140.7L507.4,141.8L508.3,141.6ZM508.7,137.9L508.7,137.9L508.7,137.9ZM508,141.1L508,141.1L508,141.1Z","TT":"M316.9,211.9L316.9,211.9L316.9,211.9ZM316.1,215.2L313.7,215.4L314.8,214.7L314.5,213.3L316.5,213Z","TO":"M17.1,313.1L17.1,313.1L17.1,313.1ZM18,305.1L18,305.1L18,305.1ZM17.9,313.5L17.9,313.5L17.9,313.5Z","TG":"M482.4,212.5L482.1,214.4L483.6,215.6L483.7,217.6L484.3,218.6L484.4,227.4L483.2,227.8L481.4,225.4L481.9,220.9L481,219.5L481.4,217.5L480.6,217.3L481,214.7L479.8,213.6L479.8,212.1Z","TL":"M818.1,272.3L818.1,272.3L818.1,272.3ZM816.2,276.6L816,274.8L816.8,273.8L818.5,273.4L822.5,273.1L819.9,274.8L817.2,275.8ZM813.5,276L814.6,275.5L813.5,276Z","TH":"M755.2,210.3L755.2,210.3L755.2,210.3ZM754.7,209.4L754.7,209.4L754.7,209.4ZM744.9,222.1L744.9,222.1L744.9,222.1ZM745.1,183.3L746.3,184L746.1,185L746.8,185.8L748.4,185.7L748.8,187.5L748.5,189.3L748.5,191.8L749.1,192.2L751.5,189.9L753.2,190.9L754.4,189.3L756.5,189.9L759,192.7L759.1,194.8L760.1,196.3L761.9,197.8L761.9,201.4L761.2,202L760.1,201.7L755.9,202L754.5,204.4L753.9,204.5L754.6,207.2L755.4,208L756.1,210.3L752.6,207.2L750.2,207.1L750.3,204.9L747.8,205.1L748.1,208.8L746.4,214.6L746.5,216.4L747.3,218L748.1,217.7L748.9,219.7L749.9,221L750.5,224.4L752.1,225.4L753.4,225.4L755.1,227.3L754.6,228.6L753.7,228.4L752.6,229.2L752.3,227.3L749.9,226L749.8,226.7L748.5,225.4L748.2,223.9L747.6,223.8L746.6,222.2L744.3,220.1L744.5,217.8L745.2,215L745.2,213.5L747.2,210L746.4,207.6L745.4,205.9L745.3,204L742.5,200.5L742.2,199.3L743.1,198.7L743,196.7L743.5,196.2L742.2,193.8L740.1,191.5L739,189L739.6,188.6L739.4,186L739.8,185.1L742.1,185L743.3,183.1ZM749,216.5L749,216.5L749,216.5ZM749,216.9L749,216.9L749,216.9ZM748.5,226.5L748.5,226.5L748.5,226.5ZM745.4,222L745.4,222L745.4,222ZM744.4,218.6L744.4,218.6L744.4,218.6ZM746.8,223.1L746.8,223.1L746.8,223.1Z","TZ":"M586.4,266.1L585.7,266.4L586,264.7ZM587.5,262.2L587.5,262.2L587.5,262.2ZM568.5,276.2L565.9,275.1L564.3,273.7L563.6,273.7L562.8,272.4L561.6,269.3L560,267.5L559.5,265.7L559.8,264.7L559.1,262.4L559.3,260.7L560.2,260.7L561.3,259.6L563.1,257.1L562.1,255.8L562.5,254.3L563.2,254.1L563.2,251.7L562.4,250.2L563.3,250L571.5,250L571.7,250L581.6,256.3L582,258.3L585.8,261.5L584.6,265.2L584.8,266.6L586.4,269.1L585.8,270.3L586.2,271.9L585.8,273.2L586.6,275.6L586.9,277.8L588.7,279.5L587.4,280.6L583.3,282.5L582.5,282.1L580.3,283.4L578.9,283L578,283.4L576,282.6L573.8,283L572.9,281.3L573.1,280.3L572.6,277.9L571.4,276.5L571.2,277.1ZM586.9,271.8L586.9,271.8L586.9,271.8Z","TJ":"M650.7,130.3L650.7,129.3L651.5,127.6L650.4,125.6L650.4,124.7L648.3,123.8L648.9,122.6L650.8,122.9L651.5,121L652.4,120.9L652.2,119L653.1,119.4L654.6,118.3L655.6,119.2L654.9,120.1L656.5,120.7L655.4,121.3L654.1,120.8L652.6,121.6L652.9,123L656.2,122.8L656.6,123.3L658.3,122.7L659.4,123.7L663.8,123.2L664.9,125.8L667.3,126.1L669.1,129.6L668.7,130.1L666.9,129.5L665.8,130.1L664.9,129.4L663.6,130L661.3,131.8L660,130.4L659.8,127.9L657.7,126.3L656.4,128L656.7,128.8L654.8,129.1L654.6,130.5L653.7,129.8L651.7,131ZM655.2,118.5L655.2,118.5L655.2,118.5ZM656.2,122L656.2,122L656.2,122Z","TW":"M798.8,176L798.9,178.2L797.1,176.3L796,174.4L795.8,172.8L797.1,168.5L798.4,167.7L799.5,168.6L799.5,174.3ZM790.6,170.1L790.6,170.1L790.6,170.1Z","SY":"M570.9,134.2L571.6,134.5L572.7,133.2L572.5,131.5L574.5,132L576.3,131.2L577.9,131.8L579.4,131.8L582.6,130.5L584.6,130.6L586.5,130L586.8,130.5L585.5,132.1L584.6,132.4L584.4,133.8L584.8,135.1L584.8,137.8L583.6,139.2L579.1,142.2L574.4,145.5L573.3,145.3L571.7,144.2L571.7,142L572.1,140.8L573.2,139.6L572.7,138.3L571.5,138.3L570.7,135.3Z","CH":"M502.9,98.2L502.9,99L503.1,99.6L505.2,100.2L504,101.8L502.4,101.4L501.7,103.4L500.2,101.5L498.9,103.1L497,103.1L496.3,101.6L494.7,102.4L494.6,101.6L496.8,98.8L498.3,98L500.2,98L500.7,97.5Z","SE":"M522.9,67.5L522.6,68.8L521,70.1L520.8,68.3L521.7,67.5ZM517.5,72L517.2,71.2L518.6,69ZM505.4,64L506,64.3L505.9,62.4L507.6,61L507.7,60L507,58.4L507.8,58.3L508.2,57.4L506.5,56.4L506.7,54.8L506.4,52.8L505.9,52L507.1,50.2L508.5,49.8L509.9,50L510,48.8L509.1,48.4L510.7,46.5L510.6,44.2L512.5,43.7L512.4,43.2L514.2,41.7L513.6,40.7L514.8,39.4L515.8,38.9L517.1,39.3L517.9,37.7L521.2,38.2L521.8,37.2L521.3,36.4L522.3,36.4L525.3,37.8L527,38.1L528.9,39.3L528.8,40.6L530.2,42.4L529.7,43.3L531,45.1L528.8,45.3L527.2,45L527,45.7L525.7,46.2L525.8,46.8L525,47.8L525.9,48.8L524.5,50.4L521.6,51.5L520.1,52.3L519.9,53.1L518.7,53.3L519.1,53.9L518.1,54.4L517.5,56.4L517.9,59.3L519.5,59.6L521.5,61L522,62L520.5,62.9L520.7,63.8L517.5,65.3L517.2,67.6L517.3,69.7L516.4,72.2L513.5,72.4L512.4,73.3L512.4,74.6L509.5,74.6L509.5,73.4L508.4,72L509.2,71L508.1,70.2L506.4,67.8L505.2,65.6L504.9,63.9ZM523,67.2L523,67.2L523,67.2ZM521,64.1L521,64.1L521,64.1ZM521.3,62.8L521.3,62.8L521.3,62.8Z","SZ":"M563.5,328.1L563.7,330.9L563.2,332.4L560.9,331.7L560.4,329.5L562.2,327.4Z","SR":"M334,230.1L333.2,231.2L333.4,234.2L334.3,235.6L333.8,238L332.6,239.6L331.6,238.7L328.5,239.7L328.8,241.1L327.6,240.8L327,240.5L325.6,237.8L325.4,236.3L324.7,236.4L323.4,233.8L324.4,231.2L325.4,231.2L325.8,229.5L326.5,228.1L329.2,228.7L329.5,228.2L332.2,228.1L334.3,228.7Z","SS":"M571.6,233.7L570.4,235.1L569,234.7L566.8,235.8L565.8,235L564,235L563.2,235.9L561.5,234.4L560,232.5L558.6,233.1L557.5,232.8L556,233.2L553.9,230.9L553,228.8L551.5,227.9L551,226.1L547.8,223.3L546.9,221.4L545.4,220.9L545,219.8L546,219.1L546.6,216.3L547.3,214.7L549.3,214.3L551.4,217.1L555,216.8L555.4,217.7L557.6,217.7L557.9,216.9L559.2,216.3L560.6,214.7L562.6,216.4L563.9,216.2L565.8,213.5L567,212.3L566.7,210.2L566,209.3L567.8,209.3L569,208.7L568.7,210.6L569.1,212.9L571.1,215L571.1,217.3L571.6,217.3L571.7,220L569.4,220.6L568.9,222L570.6,222.9L573.5,226L574.6,229.1L575.1,229.7Z","SD":"M571.6,217.3L571.1,217.3L571.1,215L569.1,212.9L568.7,210.6L569,208.7L567.8,209.3L566,209.3L566.7,210.2L567,212.3L565.8,213.5L563.9,216.2L562.6,216.4L560.6,214.7L559.2,216.3L557.9,216.9L557.6,217.7L555.4,217.7L555,216.8L551.4,217.1L549.3,214.3L547.3,214.7L546.6,216.3L546,219.1L545,219.8L543.3,219.3L543.6,216.1L541.4,212.7L541.5,211.4L540.5,210.4L539.9,207.3L538.5,206.9L539.5,205.2L539.2,203.9L540.2,202.7L539.8,201.4L540.6,200.8L541.7,197.7L544,197.5L543.6,185.8L543.5,184.3L546.2,184.3L545.9,178L577.3,178L578.3,180.5L578.8,185.6L579.5,188L582.7,190.5L581.7,191.9L578.6,193.5L578.4,195.9L577.3,199.5L577.7,202.3L576.7,207.1L575.4,207.7L574.2,209.9L573.8,212.9L572.8,212.8L572.1,213.9Z","LK":"M695,216.7L695,216.7L695,216.7ZM694.8,218.6L694.8,218.6L694.8,218.6ZM695,216.2L695.7,216.2L697,217.6L698.9,220.5L700.5,224.1L700,226.8L697.6,228.2L695.8,227.6L695.1,225.5L694.5,221.6L694.8,221.7L695.3,218.4Z","ES":"M484,125.6L484,125.6L484,125.6ZM487.8,122.1L488.6,122.2L487.7,123.6L485.9,122.7L487.9,121.6ZM490.7,122L490.7,122L490.7,122ZM483.6,124.8L483.6,124.8L483.6,124.8ZM475.6,110.9L476.4,111.9L481.6,113.1L481.7,112.6L483.5,113.4L484.2,113.7L485,114.1L487.9,113.9L488,115.4L485.2,117.5L482.6,118.2L479.2,123L479.5,124.4L480.5,125.3L478.4,127.2L477.9,129L476.7,129.1L474.5,131.6L469,131.7L466.9,132.7L465.8,133.9L464.7,133.4L463.6,131L462.7,130.2L461.3,130.3L461.1,129L462.4,127.6L461.6,126.3L462.5,124.4L461.2,122.5L462.5,122.4L463.1,120.4L462.8,118.3L464.6,116.7L463.7,115.4L461.7,115.8L459.7,115.6L459.7,114.8L458.3,115.4L458.6,114.4L458.1,112.8L457.3,112.2L458.3,111.1L459.8,110.8L461.2,109.8L462.2,110.3L466.1,110.3L468.9,110.8L471.2,110.5L474.3,111.1ZM437.6,157.9L436.7,159.1L436.1,158.1ZM444.5,156.3L444.5,156.3L444.5,156.3ZM443.1,158.6L443.8,156.8L443.8,158.3ZM440,158.7L440,158.7L440,158.7ZM435.3,159.1L435.3,159.1L435.3,159.1ZM433.5,159.7L433.5,159.7L433.5,159.7ZM433.7,157.6L433.7,157.6L433.7,157.6Z","KR":"M798.3,128.4L798.7,127L801.2,126.7L801.6,125.8L805.8,130L806.8,131.7L807.5,133.8L807.9,133.8L808.1,136.5L806.4,136.8L806.5,137.5L804.6,137.3L804.2,138.8L803.6,137.9L802.2,139.2L800.7,136.6L801.1,134.7L799.3,131.8L798.4,131.2L799.4,130.2ZM807.4,137.8L807.4,137.8L807.4,137.8ZM805.6,137.7L805.6,137.7L805.6,137.7ZM801.5,139.1L801.5,139.1L801.5,139.1ZM798.1,128.5L798.1,128.5L798.1,128.5ZM802.8,139.2L802.8,139.2L802.8,139.2ZM805.2,138.3L805.2,138.3L805.2,138.3ZM799.4,132.4L799.4,132.4L799.4,132.4ZM800.9,138L800.9,138L800.9,138ZM809.5,129.3L809.5,129.3L809.5,129.3ZM803,142.7L802.8,142L804.2,141.8Z","ZA":"M557.4,316.3L558.2,316.1L562.5,316.9L563,320.3L563.9,323.4L563.5,328.1L562.2,327.4L560.4,329.5L560.9,331.7L563.2,332.4L563.7,330.9L565.8,330.9L564.5,335.2L563.8,336.5L561.1,338.9L558,343.9L554,348L551.3,350.4L549.2,351.9L547.5,352.7L546.4,352.5L545.4,353.4L543.8,353.3L543.3,353.9L540.2,353.4L536.7,353.6L535.5,354.6L532.3,354.9L530.9,355.9L529.9,355.8L528,353.7L526.8,354L527.1,353.1L525.7,349.7L526.8,349.2L526.8,346.3L525.5,344L524.4,341.1L523.9,339L522.7,336.5L524.3,334.6L525.3,336.7L527.5,337.3L529.9,337.4L531.9,336L532.4,324.4L533.3,325.2L534.4,328L533.8,329.6L534.1,330.9L536.4,330.9L539.2,328.5L539.9,326.5L540.9,325.9L542.5,327L544.7,327.7L546.9,327L547.9,324.3L549.2,323.9L550.4,322.7L550.9,321L553,319.4L554.3,317.9ZM554.2,341.1L555.2,340.6L556.1,338.5L554.3,336.4L551.9,337.5L550,339.8L550.7,341.8L552.3,342.8L553.3,341.3ZM571.1,393.7L571.1,393.7L571.1,393.7Z","SO":"M592.1,252.1L590.6,249.6L590.5,238L593,234.4L595.4,233.4L596,232.6L598.7,231.4L601.2,231.5L605.1,226.5L609.1,221.9L611.6,217.3L611.3,211.7L614.4,210.8L616.2,209.4L617.5,209.9L617.1,211.4L617.3,213.5L618,214.4L616.8,214.5L616.6,217.4L612.9,225L612.2,227.6L609.4,232.8L606.5,236.6L604.3,239.1L599.7,242.5L597.3,244.9L593.3,249.9ZM611.3,211.7L611.6,217.3L609.1,221.9L606.3,221.8L598.4,218.8L596.9,217.5L595.1,215L594.6,213.6L595.2,212.5L596,210.9L597.8,213.1L599.2,214.2L600.7,214.2L603,213L605,213.3L607.2,211.9Z","SB":"M909.6,273.4L909.6,273.4L909.6,273.4ZM927.8,283.3L927.8,283.3L927.8,283.3ZM926.1,280.4L926.1,280.4L926.1,280.4ZM910.7,283.7L910.7,283.7L910.7,283.7ZM914.2,276.9L914.2,276.9L914.2,276.9ZM908.1,275.3L908.1,275.3L908.1,275.3ZM910.8,274.9L910.8,274.9L910.8,274.9ZM904.5,272.6L903.1,272.8L903.7,271.8ZM905.5,274.4L905.5,274.4L905.5,274.4ZM905.3,274L905.3,274L905.3,274ZM903.4,274.1L903.4,274.1L903.4,274.1ZM901.8,271.6L901.8,271.6L901.8,271.6ZM901.4,272.4L901.4,272.4L901.4,272.4ZM903,272.2L903,272.2L903,272.2ZM899.7,269L899.7,269L899.7,269ZM904.1,274.2L904.1,274.2L904.1,274.2ZM909.5,275.8L911.1,276.3L912.2,277.6L909.6,277.4ZM910.1,273.5L907.8,271.9L906.6,270.4L910.1,272.8ZM904.1,269.7L903,269.7L901.5,267.8L903,268.4ZM912.6,272.8L913.4,274.8L913.6,276.8L912.6,275.4L912.1,272.8ZM914.4,279.3L915.4,279.5L916,280.6L913.8,279.8Z","SK":"M533.6,93.5L532.8,95.5L531.2,95.1L528.9,95.2L527.6,96.4L525,96.8L524.9,97.4L522.6,97.5L521,96.7L520.4,94.9L520.9,94.1L522.3,94.1L523.1,92.9L524.7,92.2L526.1,91.9L527,93.1L528.9,92.5L531.4,92.5Z","SI":"M519.8,101.3L517.8,102.3L517.2,104.5L512.9,104.4L513.3,104.1L513.1,101.3L515,101.6L516.2,101L518.5,100.8L518.8,100.2Z","SG":"M760.7,242.7L760.7,242.7L760.7,242.7Z","SL":"M452.3,220.3L451.3,222.6L449,225.3L446.4,223.8L446.3,222.9L444.6,221.2L444.3,218.6L445.7,217.6L446.4,216L449.9,215.7L451.3,217.7L451.8,219.7L451.2,220.8ZM446.3,223.6L446.3,223.6L446.3,223.6Z","SC":"M629.8,261.5L629.8,261.5L629.8,261.5Z","RS":"M535.4,108.3L534.8,109L535.3,110.7L536.4,111.6L535.2,112.6L535.1,114.3L533.2,114.5L533.5,113.2L532.6,112.9L530.9,111.3L530,112.7L528,111.5L527,110.5L527.9,108.9L526.7,108.1L527.1,106.3L526.3,106.4L526.5,105.4L525.8,103.1L527.2,102.4L528.9,102.5L530.3,103.7L530.4,104.5L532.1,105.4L532,106.4L533.9,107.4L534.8,106.9Z","SN":"M447.2,200.5L447.9,202.4L447.7,204.2L448.9,205L449.5,206.4L449.5,208.1L447.1,208.3L443.2,207.2L439.3,207.2L438.3,207.8L435.2,208.2L435.1,206L437.6,205.7L439.5,204.5L441.9,205.5L442.9,205.2L440,203.8L438.5,204.4L435.7,204.4L434.1,201.1L434.2,200.2L435.9,197.3L436.7,195.1L438,195.3L440.1,194.7L441.9,195L443,196.3L443.9,196.4L445.7,199.2Z","SA":"M576.6,167.4L576.6,167.4L576.6,167.4ZM591.9,194.6L591.9,194.6L591.9,194.6ZM618,187.4L610.7,188.6L608.1,190L606.3,193.3L605.1,193.8L604.3,192.8L600.9,192.7L600.2,192.3L596.9,192.7L595.5,192.1L595,192.6L595,194.7L594.1,195.6L592.6,192.3L591,190.9L589.5,188.4L588,185L584.8,182.6L583.3,180.2L582.9,178.4L582.7,175.6L580.6,172L578.5,170.8L577.5,169.1L577.3,167.6L571.4,159L569.9,158.7L570.5,154.9L573.3,155.4L575,153.3L576.8,152.9L578,151.3L575.1,148.1L580.1,146.5L580.5,146.2L583.7,146.7L588.4,149.4L595.8,155.3L600.6,155.7L602.9,156L603.7,157.4L605.7,157.4L606.9,160L610.4,162.8L611.1,164.4L610.7,165.1L613.2,169.2L614.5,169.8L615.4,170.8L615.4,171.3L618.4,175.1L625.2,176L625.4,175.8L626.8,178L625.6,184.3ZM575.7,166.3L575.7,166.3L575.7,166.3Z","ST":"M500,241.9L500,241.9L500,241.9ZM498,246.5L498,246.5L498,246.5Z","SM":"M510.5,109.3L510.5,109.3L510.5,109.3Z","WS":"M18.7,288.9L19.2,290L17.6,289.1ZM21.4,290.7L21.4,290.7L21.4,290.7Z","VC":"M316.2,205.7L316.2,205.7L316.2,205.7ZM316,206.2L316,206.2L316,206.2ZM315.7,207.2L315.7,207.2L315.7,207.2Z","LC":"M317.1,203.6L317.1,203.6L317.1,203.6Z","KN":"M313.5,193.3L313.5,193.3L313.5,193.3ZM313.3,192.9L313.3,192.9L313.3,192.9Z","RW":"M559.8,251.2L561.3,251.1L562.4,250.2L563.2,251.7L563.2,254.1L562.5,254.3L560.8,254.1L560.6,255.3L558.3,255.3L557.9,254.5L558.6,252.6Z","RU":"M837.5,110.7L837.5,110.7L837.5,110.7ZM838.4,110.2L838.4,110.2L838.4,110.2ZM838,110.9L838,110.9L838,110.9ZM794.1,75.5L794.1,75.5L794.1,75.5ZM815.4,64.1L815.4,64.1L815.4,64.1ZM717.3,25.9L717.3,25.9L717.3,25.9ZM723.8,24L723.8,24L723.8,24ZM678.4,13.4L678.4,13.4L678.4,13.4ZM682.8,15.6L682.8,15.6L682.8,15.6ZM665.6,17.2L665.6,17.2L665.6,17.2ZM665,18.1L665,18.1L665,18.1ZM663.7,10.2L663.7,10.2L663.7,10.2ZM630.9,25L630.9,25L630.9,25ZM641.5,23.3L641.5,23.3L641.5,23.3ZM644.9,22.4L644.9,22.4L644.9,22.4ZM647.7,21.1L647.7,21.1L647.7,21.1ZM586.4,6.5L586.4,6.5L586.4,6.5ZM110.8,36.5L110.8,36.5L112.3,37.2L112.8,38L116.1,40L116.1,40.9L113.6,42.9L113.9,43.6L116,42.4L116.1,41.6L117.8,41.5L118.2,41.9L121.1,42L122,44.1L122.9,44.2L120.9,44.8L119.4,45.6L118.3,45.1L118.4,45.8L115.6,46L114.4,47.2L112.2,47.6L110.4,49.2L108.7,48.8L108.6,48.3L106.9,47.8L106.5,47.3L107.5,46L105.9,45.6L102.8,46L103.9,43.6L101.4,44.5L100.7,45.9L97.9,47.1L97.9,47.1L110.8,36.5ZM862.1,47.1L861.8,47.2L861.7,47.8L860.4,48.4L858.4,48.1L856.3,47.3L856.8,47.9L854.1,47.4L856.6,48.3L857.5,47.9L858.6,48.8L860.4,49.4L860.6,49L862.7,50.1L864.4,51.3L866.6,52.3L868.7,53.7L868.9,54.7L864.1,53.9L860.4,55.8L858.8,56.4L858,58.3L855.9,60L856.7,61.4L855.6,61.1L852.4,59.6L850.1,59.6L848.2,60.4L848.1,61.6L847.3,61.3L846.4,59.9L844.7,61L845.2,61.7L843.2,61.1L842,61.2L841.7,61.7L842.8,63.3L842.6,65.7L843.2,66.8L845.2,67.7L845.2,67.2L846.8,67.6L846.9,68.9L848.4,70.5L849.8,70.8L851.1,72.1L851,72.7L849.5,72.2L848.7,72.6L849.7,74.7L852.1,76.5L851.8,77.1L849.5,77.1L848.8,78.2L849.3,79.4L851.2,81.3L850,81L848.6,82.1L849.6,83.8L849.9,85.2L848.6,87.8L847.4,86.7L844.2,83.1L842.4,81.7L835.6,74.7L833.3,70.8L833.8,69.5L833.6,68.6L832.4,67.7L833.8,67.6L833.7,67L834.9,66.9L835.7,65.8L835.7,63.8L837.2,60.8L837,60.1L838.1,59.1L839.4,58.7L838.8,57.5L836.6,54.8L836.9,54.3L838.6,54.2L835.6,53.7L834,54.1L835.4,56.2L834.4,56.6L833.4,59.1L832.4,59.5L831.8,58.4L830.7,58.6L829.5,56.2L828.1,56.4L826.5,55.8L824.7,56.3L823.3,56.2L822.4,57.1L822.9,57.7L822.4,59.3L821.6,60.2L821.5,61.8L822,62.6L824.7,63.1L825.1,63.6L823.5,63.5L822.8,63.9L821,63.5L820.7,64.3L819.4,64.1L817.4,64.5L816.4,63.9L818.6,63.5L816.1,62.6L814.2,62.5L811.4,61.9L810.1,62.6L811,63.3L809.2,63L807.9,63.4L805.1,62.9L804.6,63.6L803.2,63L798.1,63.1L796.3,64.1L796.3,64.9L795.2,66.4L795.6,67.6L794.8,67.9L793.4,70L793.1,72.4L790.1,75.9L790.5,76.6L792.2,77L794.3,76.9L795.8,79.3L796.8,79.2L796,78.3L798.1,78.9L797.4,80L798.7,80L800,79.3L799.3,77.8L801.7,77.9L807.9,81.1L807.8,81.6L809.1,83.6L810.2,84.1L810.3,87L811.2,89L813.2,91.9L814.4,95.2L813.7,97.1L813.3,99.6L813.7,101.2L813.4,103.4L811.5,107.9L811,110.5L808.7,112.7L807.5,113.1L805.1,112.5L804.5,111.2L803.3,111.3L802.7,113.3L801.6,113.2L802,114.3L802,114.3L801.3,113.6L800.7,113L802.1,112.4L801.8,111L800.7,108.8L798.9,106.2L800.1,104.9L803.2,105.9L803,104.4L803.4,102.1L802.3,98.9L802.9,97.6L801.4,95.8L800.7,95.6L797.6,96.9L797.6,97.5L794,97.7L792.8,96.7L792.4,95.7L790.9,94.1L790,94L787.4,92.5L785.3,92L783.5,92L781.8,91.1L781.4,90.1L778.2,87.4L774.4,83.5L771.7,81.6L769.5,81.3L766,80.1L762.7,80.3L760.4,80.8L759.2,82.3L760.9,83L762,84.8L761.3,85.9L761.2,89.5L762,90.5L760.4,91.2L759.6,92.2L756.3,91.2L754.7,90.7L752.7,90.8L749.9,89.9L748,91.3L748,91.9L744.4,92.6L743.4,93.2L739.4,92.7L737.9,92.7L736.2,91.9L735.5,90.9L733.7,90.7L731.9,89.7L728.6,89.3L724.9,90.3L721.1,88.9L719.6,86.6L717.7,86.3L715.2,85.5L713.8,85.4L710.9,84.3L709.8,86.6L710,87.7L711.7,89.1L711.9,90.5L710.3,91.5L709.6,91L706.7,90.6L703.8,90.6L702.2,89L699.4,88.9L697.3,88.1L692.2,91L692.4,91.5L691.2,92.3L689.3,92.3L688.7,93.2L687.7,93.5L685.3,91.9L684.4,92.2L682,91.7L681,90.5L679.2,90L677.6,88.3L676,87.7L674.3,88.5L671.8,88.5L669.8,86.8L668.9,87.1L668.3,88.3L666.3,86.2L662.6,82.8L660,80.6L656.7,78.9L656.7,77.4L654.4,78.4L652.1,79.8L649.9,80.3L650,78.9L646.4,77.9L643.8,78.1L643.6,76.9L641.8,74.9L640.6,75.3L637.6,74.6L635.3,76.1L630.4,76.9L630,77.6L628.3,77.6L622.9,78.9L621.4,78.6L621,79.8L622.4,80.1L621.8,80.8L623.9,81.4L623.9,81.9L621.8,81.8L621.4,82.4L622.1,83.5L620.4,84.7L621.6,85.7L623.9,86.3L624.6,87L624.5,88.1L623.6,88.6L621.2,88.2L621,88.9L618.7,88.6L617.2,87.5L615.9,87.4L615.2,88L614,87.5L612.8,87.6L611.5,88.9L608.5,87.6L608.8,88.7L605,86.2L603.2,86.2L602.5,85.6L600.4,86.2L598.9,85.5L597.9,86.8L596.3,87.4L596.1,88.1L594.6,88.8L595.5,90.6L594.7,91.2L592.6,89.5L591.8,89.9L591.1,92.6L591.8,93.4L591.2,94.3L591.4,95.5L592.3,95.9L593.3,97.6L595.3,97.5L597.9,100.5L597.2,101.1L598.9,101.8L596.9,103.6L595.2,104.1L594.6,106.5L593.9,107L595.8,109.1L596.6,112L600,115.7L598.5,117.7L597,117.4L595.5,115.8L594.6,115.6L592.5,114.6L592.6,113.8L590.3,112.9L588.2,113.5L587.7,112.9L584.1,111.4L582,111.5L579.6,110.5L578,110.8L574.5,108.2L572.2,106.9L569.1,105.6L571.4,104.8L571.8,102.9L573.1,102.6L571.1,100.9L572.8,100.8L572.6,100.4L574.5,99.5L574.2,99L571.9,99.5L571.8,98.1L573.2,97.2L575.2,97.2L575.5,95.9L574.6,95L575.2,94.2L574.4,93.7L575.3,93L574.9,91.9L570.5,90.5L570,90.9L568.3,89.4L566.5,90.1L563.5,89.1L563,87.5L562.3,87.1L560.4,86.9L559.9,85.6L560.5,85.3L558.7,83.6L555.8,83.7L554.2,84.4L552.9,81.1L554.6,81.4L555.8,80.7L555,79.6L553.3,79.3L551.6,76.9L550.7,76.4L551,75.6L550.6,74.1L548.2,73.3L547.2,73.8L546.9,73L545.4,73L544,72.4L543.7,71.2L542.5,70.4L542.8,69.2L541.6,68.4L542.4,67.5L541.6,66.2L541.2,64.6L542.2,62.7L542.1,62.1L544.1,61.8L544.4,61.3L546.7,61.6L545.6,60.7L544.2,60.7L542.7,59.4L541.2,59.8L544,57.6L547.8,54L548.2,53.1L547.2,52.2L544.4,50.7L545.3,50L544.3,49L544,47.9L542.9,47.4L543,45.7L543.6,45.4L542.9,44.3L540.8,41.9L542.2,40L540.7,39L539.3,38.7L538.7,37.9L539.1,37.1L538.3,36.8L539.4,36.4L540.1,35.7L541.3,35.5L541.6,34.8L543,35.1L542.9,34.4L544.1,34.7L545,34L547.1,34.5L545.6,34.7L546.1,35.2L548.2,35.3L548.9,35.7L553.4,36L557.6,37.3L559.3,38.2L561.8,39L562.1,38.7L563.7,39.6L565,39.9L566.2,41.3L566.1,42.3L565,43.3L562.7,44.2L560.8,44.4L554.5,43.5L553,42.9L550.1,42.5L548.7,41.6L546.5,41.4L549.6,43.1L550.1,43.7L551.7,43.9L553.3,44.9L552.8,46.2L553.9,47.3L554.3,48.5L556.1,49L557.9,50L560.3,50.6L561.5,50L561.1,49.2L559.4,48.9L557.7,47.7L558.2,46.8L559.6,47L560.8,47.6L564.7,48.5L566.1,47.9L564.3,46.3L564.2,45.7L565.7,44.7L567.3,44.2L568.5,43.1L570.7,43.4L572.9,44.5L573.2,42.7L572.4,41.6L571.4,41.3L571.5,39.2L571.2,38.3L569.3,37.5L572.8,37.6L574.6,37.9L576.8,39.6L574.4,39.8L573.5,40.9L575,41.3L576.1,42.2L577.2,42.4L579.5,41.9L579.5,40.3L581.9,39.5L584.9,38.2L587.7,37.5L590.4,36.5L591.2,38L590,38.4L592.6,38.4L594.1,37.6L595.3,37.4L597.6,37.7L599.4,36.8L601.1,36.5L602.1,37.2L601.8,38L603.5,38L603.2,37.3L604.4,37.2L605,36.5L602.7,34.9L604.2,34.2L609.2,34.7L613.1,35.8L617.6,36.8L621.1,38.3L621.9,36.6L620.6,36.6L618.9,35.2L616.2,34.8L615.8,31.9L614.8,31.8L614.1,31L614.4,30.5L616.6,29.5L616.8,26.9L617.7,26.4L621.3,26.3L624.2,26.9L624.7,28.5L624.1,30.1L625.9,30.9L627.1,32.7L626.9,33.1L627.8,34.4L628.7,36.3L629.2,36.8L631.4,37.6L631.1,38.7L631.6,39.5L630.8,40.3L629.7,42.5L628.3,43.1L626.1,42.3L624.4,42.4L625,43L627.7,43.6L629.4,43.6L631.1,43.9L631.8,43L634.1,41.9L634.1,40.7L635.1,39.8L633.4,38L633.3,37.2L636.9,36.6L639.2,37.9L640,39.8L641.3,40.3L643.9,40.3L640.9,39.8L640.5,38.7L641,38.5L639.4,36.8L635.6,35.9L633.3,36.3L631.6,36.2L629.9,34.6L629.8,33.4L630.3,32.3L627.6,30.6L626.5,30.1L627.1,29.1L629.3,28.3L629.1,27.6L628,26.6L629.1,26.6L630.6,27.9L630.3,29.1L631.2,30.4L632.9,30.7L636,30.8L638.2,31.3L637.1,30.6L635.5,30.4L632.8,29.7L631.7,28.9L633.7,28.6L634.9,29.1L636.1,28.8L634.2,28.2L635.9,27.6L637.8,27.7L640.9,28.4L642.9,29.3L645.9,29.3L646.3,30.2L645.3,30.6L646.3,32.4L646.5,31.5L647.3,31.5L648.4,33.1L649.3,32.4L647.3,31L647.3,29.7L646.1,29L644.9,28.9L643.5,28L640.4,27.4L639.7,26.2L638.8,25.9L638.2,24.7L640.5,24.4L643.9,24.4L649.5,23.8L650.4,24L648.6,24.9L651,24.5L650.7,23.9L647.7,22.5L649.9,22.7L646.6,22L647.1,21.5L648.2,21.9L649.2,21.2L648.1,20.9L649.4,20.8L653.4,19.6L659.4,19L658,18.9L657.8,18.4L660.7,18.3L663.7,18.4L663.3,18.9L664.9,18.9L668.4,18L670.8,18.3L668.1,17.5L671.9,17.4L671.2,16.2L673.8,14.7L675.3,14.5L678.9,15L679.9,15.3L677,16L679.8,16L680.1,16.2L682.4,16.1L683.5,16.4L682.6,17.4L684.9,17.4L685.2,16.9L691,16.9L694.7,17.7L695.6,18.3L696.2,18L698.4,19.6L696,19L697.2,19.7L699,20L698.4,21L694,22.8L692.2,24.3L690.5,24.5L690,25.3L689,25.3L689.1,26.5L690,25.7L692.4,25.7L695.9,24.9L697.3,24.3L695.2,24.3L695.5,23.5L699.9,24.3L701.1,24.2L700.7,23.7L702.5,24.5L702.4,24.9L706.2,24.3L712.5,24.6L713.3,25.5L716.5,26.2L719.1,26.3L723.3,26.2L723.6,25.6L722.2,24.8L723.8,24.2L726.8,24.8L727.9,24.7L729.1,25.3L729.5,24.7L731,24.9L734,25.6L734.2,26.4L736,26.9L734.8,27.3L737.3,27.8L736.9,28.5L733.8,27.5L734.2,27.9L737.7,29.3L741,30.9L744.7,31.9L745.1,31.5L744.6,29.6L744.7,28.8L747.4,30L750.2,30.2L751.9,29.6L756.9,30.7L756.6,29.8L757.5,29.6L759.1,30.1L760.5,30L758.5,28.7L758.9,28.1L757.1,28.2L757,27.4L759.7,27.2L758.2,26.4L761.3,26.8L764.2,26.9L770.4,27.5L770.6,27.8L767.6,27.7L766.8,28L771.5,27.9L771.2,28.3L770,28.1L770.8,28.8L769.6,28.8L770.4,29.4L771.5,29.3L773,27.8L775,27.9L777.6,28.2L779.3,29.1L777.8,29.2L780.7,29.9L784.4,30.5L787.5,31.7L790,31.6L793.6,31L798.1,31.1L801.5,31.8L804.2,33L805.5,34.4L808.2,34.9L810,36.2L811.7,36.8L810.2,35.5L811.1,34.8L814.5,34.6L815.5,34.9L820.7,35.2L821.5,34.5L823.1,35L824.3,35.8L827,36.3L828.6,37.1L830.3,37L830.6,36.4L828,35L827,34.8L826.1,33.6L830.8,33.9L832.7,34.3L833.4,34.1L837.5,34.1L840.7,34.8L845.5,35.5L848.9,36.5L849.2,36.5L862.1,47.1ZM565.6,7.5L567.5,7.6L568.1,7.9L566.1,7.7L565.7,8L563.7,8.3L561.3,8ZM570.7,7.3L573.5,7.8L572.4,8.1L568.8,8.5L569.2,9L566.8,9.1L564.8,8.7L567.7,8.1L569,8.2L568.9,7.5ZM609.4,18.1L606.9,18.7L602.3,19.4L598.3,20.3L596.6,21.2L597.2,21.3L594.9,22.3L593.8,22.3L594.1,23.3L592.9,23.5L593.3,24.1L592.1,25.2L591.1,25.3L588.1,24.9L586.9,25.2L585.3,24.2L586.9,23.7L587.7,22.5L589.1,22.4L588,22L589.4,21.2L589.6,20.2L591.1,20.2L591.5,19.5L592.9,19L596.6,18.5L596.8,17.9L600.2,18.1L602.9,17.7L605.2,17.1L605.4,16.8L607.8,16.2L609.8,16.4L611.1,17.2ZM588.9,25.3L591.2,25.6L591,26.6L589.9,27.5L590.3,28.8L592.5,30.3L594.6,31.4L596.3,32L595.5,32.3L592.4,32L590.3,32.1L587.6,31.6L588.9,30.9L586.9,30.2L586.9,29.8L583.8,30L582.8,29.2L582.8,28.5L584.1,28.3L584.8,26.9L584,26.8L585.5,26.3L585.1,25.5L587.8,25.1ZM653.7,7L656.7,7.6L655.9,8.2L656.9,8.8L652.4,9L651.4,9.3L647.9,8.9L646.3,8.5L647.8,8.2L648.5,7.6L647.3,7.6L647.7,7.2L651.9,6.6ZM658,9L658.9,9.3L658.8,9.9L659.9,9.2L661.2,9.3L663.2,9.8L663.6,10.8L662.5,10.9L664.3,11.3L664.2,11.9L660.8,12L659,11.6L655.1,11.4L653.3,10.7L651,10.4L653.2,9.1ZM669.6,11L669.7,11.9L671.3,11.2L673.9,11.9L674.8,12L675.9,12.7L675.4,13L673.5,13.3L669,13.4L667.4,13.9L665.7,13.8L666.4,13.1L666.2,12.3L667,12.1L666.6,11.1L668.1,10.6ZM748.6,19L750.2,19.5L750.4,18.3L754.6,19.1L755.4,19L759.3,19.6L759.5,20.4L758.5,21L756.7,20.8L755.2,20.3L754.7,19.5L753,19.5L755.5,20.8L757,21.2L756.2,21.5L754.7,21.1L751.8,21.5L750.3,21.2L750.1,21.9L747.7,21.6L745.1,20.8L743.5,19.2L744.2,18.4L745.3,18.2ZM762.9,20.2L765.9,20.1L766.4,20.4L769.7,20.5L771.6,21.2L770.1,21.6L767,21.5L762.2,20.6L761.6,19.7ZM808.5,77.6L810.1,79.3L812.2,81L813.6,82.8L814.3,84.4L816.3,86.3L819.6,89.8L822.6,92.8L824.5,94.3L821.4,92.8L820.1,93.1L821,96.5L821.6,97.6L825,100.4L825.7,100.6L826.9,102.8L825.6,101.2L823.6,100.7L823.8,103.1L822.3,101.5L821.5,99.4L820.5,98L820.2,96.7L818,94.5L817.1,92L815,89.1L814.4,87.7L813.2,86.4L811.7,85.5L808.6,80.7L810,80.4L809.4,79L807.7,77.9ZM842.4,31.3L842.2,31.3L840.6,31.7L839.4,30.6L840.4,29.9L840.5,29.9L842.4,31.3ZM119.5,29.9L119.5,29.9L119.5,29.9L122.7,29.9L123.5,30.6L122.2,31.1L118.3,31.4L117.6,31.3L117.6,31.3L119.5,29.9ZM556,46.8L556,46.8L556,46.8ZM569.4,42.7L569.4,42.7L569.4,42.7ZM586.1,30.3L586.8,31.2L585.5,30.6ZM866.2,77L866.2,77L866.2,77ZM804.1,31.7L804.1,31.7L804.1,31.7ZM811.5,36.8L810.2,36.2L809.8,35.5ZM772.3,18.3L772.3,18.3L772.3,18.3ZM763.4,17L763.4,17L763.4,17ZM756.4,29.9L756.4,29.9L756.4,29.9ZM681.2,13.6L681.2,13.6L681.2,13.6ZM693.8,17.1L693.8,17.1L693.8,17.1ZM664.2,18L664.1,18.3L662,17.9ZM662.2,16.2L660.3,16.2L662.3,15.7ZM649.1,15.8L649.1,15.8L649.1,15.8ZM627.6,26.4L626.4,25.8L627.9,25.9ZM628.4,24.9L628.4,24.9L628.4,24.9ZM643.2,23.4L643.2,23.4L643.2,23.4ZM617.5,35.1L617.5,35.1L617.5,35.1ZM614.6,32.4L614.6,32.4L614.6,32.4ZM626.8,43.2L625.4,42.5L626.7,42.7ZM571.3,9.2L571.3,9.2L571.3,9.2ZM573.9,9.4L571.5,9.4L572.9,9.1ZM571.4,7.1L571.4,7.1L571.4,7.1ZM580.9,8.7L580.9,8.7L580.9,8.7ZM578.7,8.3L578.7,8.3L578.7,8.3ZM589,9.4L587.6,9.2L588.5,9.1ZM585.5,7.1L586.4,7.6L584.7,7.6L583,7.1L584.4,6.9ZM596.4,104.5L596.4,104.5L596.4,104.5ZM582.9,36L581.9,36.9L580.1,37.2L579,36.4L579,35.6L580.5,35.1ZM594.6,7.8L592.9,7.5L593.8,7.2L595.5,7.2L595.6,6.8L597.2,6.9L598,7.3L596.7,7.7ZM585.6,9.1L584.6,9L583.5,8.2L586.1,8.3L587.7,8.6L586.2,8.6ZM592.2,7.5L592.4,8L590.9,8.4L587.6,8.2L587.6,7.6L591.1,7.4ZM590.2,7.3L588.2,7.2L590.6,6.9ZM577.5,8.9L575,8.7L576,8.4L578,8.7ZM583.7,8.6L584.1,9.1L581.6,9.1L581.8,8.6ZM583.3,6L584.6,6.2L583.3,6.9L582,6.7L580.1,6.8L582.1,6ZM578.4,6.9L581.1,7.1L584.2,7.6L582.8,7.9L580.9,7.9L577.7,7.6ZM593.7,5.9L590.8,5.7L593.7,5.7ZM584,5.7L583.5,5.4L585.5,5.4ZM649.9,10L648.9,10L646.6,9.5L646.8,9.2L651.5,9.5ZM644.6,6.9L644.2,7L641.8,6.9L641.8,6.7ZM755.7,23.6L754.9,23.8L753.4,23.1L754.6,22.9ZM758.3,23.8L761.4,24.7L762.7,25.5L758.7,25.3L755.9,24.9L756.2,23.9ZM741.9,20.1L741,20.1L740.2,19L741.8,19.6ZM746.5,23.8L746.5,23.8L746.5,23.8ZM795.9,75.5L796.6,75.7L796.2,76.8L794.8,75.2ZM825.2,35L821.5,34.3L822.1,33.8L824.6,34.2ZM845.5,65.3L844.7,64.1L846,63.5L847,64.5ZM862.3,76.2L862.6,76.7L859.1,74.9L860.2,74.8ZM847.7,92.8L847.7,92.8L847.7,92.8ZM848.5,88.7L848.5,88.7L848.5,88.7ZM848.1,89.8L847,90.4L847.5,88.4ZM847,94.4L847,94.4L847,94.4ZM846.3,88.2L846.3,88.2L846.3,88.2ZM846.8,97.5L846.8,97.5L846.8,97.5ZM845.9,100.1L845.9,100.1L845.9,100.1ZM842.8,104L842.4,103.4L843.8,102.2ZM840.8,105L839.1,106L838.3,107.8L838.3,106.7L839.2,105.3ZM839,109.8L839,109.8L839,109.8ZM836.4,107.5L837.4,107.7L836.1,109.5ZM700.8,22.6L700.3,23.3L697.2,22.7L697.9,22.2ZM619.8,10.1L622.6,10.4L620.9,10.4ZM624.5,7.5L622.9,7.6L622.8,7.2L625,7.3ZM619.4,25.9L618,25.9L617.9,25L619.4,24.8L621.2,25.7ZM634.4,27.9L632.9,27.9L633.8,27L635.5,27.4ZM637.4,26.8L635.5,26.4L636.2,25.9ZM638.3,20.1L638.3,20.1L638.3,20.1ZM602.9,34L603.1,34.6L601.4,34.5L599.9,34.1L598.5,33.2L599.4,32.6ZM527.9,74.9L527.2,75.8L528.6,76L528.6,75L531.7,75.6L532.4,76.2L532.4,77.7L525.1,77.4L525.8,76L527,75.8L527.8,74.9ZM561.2,102.6L561.3,102.2L563.9,103L564.8,103.7L566.3,105L568.8,104.7L568.5,105.8L566.4,105.6L565.4,106.6L564.5,106.6L562.7,107.8L561.5,107.3L561.6,105.7L558.9,104.7L561.5,103Z","RO":"M548.4,104.6L549.9,105.2L550.9,104.7L552.1,105.2L551.9,106.4L550.7,106.7L550.5,106L549.9,108.1L550,109.8L546.2,108.5L544.1,109L542.4,110.1L536.8,109.4L535.4,108.3L534.8,106.9L533.9,107.4L532,106.4L532.1,105.4L530.4,104.5L530.3,103.7L528.9,102.5L530.8,102.1L533.4,97.6L534.8,96.9L535.3,96.5L539.7,97.6L542.6,96.8L543.6,96L544.5,96.3L545.5,97.9L547.6,99.9L548.1,100.9L548,103Z","QA":"M614.5,169.8L613.2,169.2L612.9,167.2L613.9,164.9L614.7,165.7L615.2,168.1Z","PT":"M436,143.8L436,143.8L436,143.8ZM458.3,115.4L459.7,114.8L459.7,115.6L461.7,115.8L463.7,115.4L464.6,116.7L462.8,118.3L463.1,120.4L462.5,122.4L461.2,122.5L462.5,124.4L461.6,126.3L462.4,127.6L461.1,129L461.3,130.3L460.2,130.8L458.3,130.5L457.3,130.7L457.8,129.5L457.7,126.3L456.3,125.4L456.6,123.5L457.2,122.9L458.5,118.3ZM416.9,131L416.9,131L416.9,131ZM402.3,123.3L402.3,123.3L402.3,123.3ZM412.2,125.7L412.2,125.7L412.2,125.7ZM410.4,126L410.4,126L410.4,126ZM408.2,126.1L408.2,126.1L408.2,126.1ZM409.4,126.3L409.4,126.3L409.4,126.3ZM415.6,128.2L415.6,128.2L415.6,128.2Z","PL":"M535.3,86.1L536.7,88.1L536.6,89.4L536,89.5L533.7,92.1L534.3,93.7L533.6,93.5L531.4,92.5L528.9,92.5L527,93.1L526.1,91.9L524.7,92.2L523.9,91.1L522.3,90.8L519.8,89.4L519.4,90.4L518.2,89.4L518.7,89L514.9,88.1L515.3,86.9L514.2,85.2L514,83.1L512.8,82.1L513.4,80.8L513,79.5L512.8,79.1L512.8,78.9L517.3,77.9L518.1,77.1L519.6,76.6L522,76.2L522.9,77.4L525.1,77.4L532.4,77.7L533.8,78.1L534.2,78.9L535.5,81.6L535.5,82.7L534.1,83.9L535.3,84.5Z","PH":"M801.6,188.6L803.8,189.6L804.9,189.3L805,191.6L806.2,193.3L805.7,196.2L804.4,197L804.1,198.9L805.2,200.8L805.6,202.5L806.6,203.2L807.5,202.1L808.5,202.3L809.7,203.9L809.9,202.9L811.4,203.7L810.6,204.2L811.9,206.4L810.3,206.1L809.7,204.8L807.6,203.4L808.5,205.4L805.8,203.3L804.4,204.2L802.8,203.7L802.6,202.5L803.2,201.1L802.2,200.3L802,201.7L800.8,200.4L799.5,195.8L800.5,196.7L801,196.1L800.2,191.7L800.4,188.9ZM795.6,220.5L795.7,219.6L797.3,217.9L799.7,214.5L800.7,211.4L801.4,213.9L800.3,215.4L799.2,215.9L798.5,217.9ZM808.6,210.5L810.4,210.8L809.6,213L807.6,214.2L807.6,210.5ZM811.1,218.5L809.5,217.2L809.1,215.7L810.1,215.3L810.2,212.8L811.8,213.1L811,216L811.6,217.9ZM814.3,211.4L815.2,211.3L816.5,214.8L815.2,215.1L815.1,213.5L814.1,212.7L813.6,210.8ZM815.6,207.7L816.5,208.7L816.7,210.6L817.4,211.9L816.1,212L815,210L813.6,208.9L813.1,207.6ZM803.1,204.7L804.5,204.9L805.4,205.8L805.7,207.3L805,208.7L804.2,207.9L802.3,204.6ZM818.8,217.7L819.8,219.2L820.9,224.2L819.9,225.4L820,227.1L818.8,223.9L817.8,225.6L818.7,228.2L817.7,229.2L814.7,227.4L814,225.4L814.5,223.7L812.4,222.4L812.2,223.7L811.4,222.8L809.8,222.9L809,225.1L808.5,225.1L808.8,222.4L810.8,221.4L812.1,219.6L813.2,220.5L813.1,221.7L814.2,221.1L814.8,219.9L815.6,220.1L815.8,218.8L817.5,218.7L817.4,216.3ZM811.7,217.3L811.6,215.7L812.9,211.6L813.1,213.8ZM803.6,187.7L803.6,187.7L803.6,187.7ZM802.3,186.3L802.3,186.3L802.3,186.3ZM802.8,183.1L802.8,183.1L802.8,183.1ZM802.4,181.8L802.4,181.8L802.4,181.8ZM806.5,227.9L806.5,227.9L806.5,227.9ZM795.1,222.2L795.1,222.2L795.1,222.2ZM802.1,214.1L802.1,214.1L802.1,214.1ZM802,208.8L802,208.8L802,208.8ZM802,210.3L802,210.3L802,210.3ZM809.4,214.1L809.4,214.1L809.4,214.1ZM814.9,216.3L813.1,216.8L813.6,215.2ZM804.2,230.4L804.2,230.4L804.2,230.4ZM809,226.8L809,226.8L809,226.8ZM818.8,216.3L818.8,216.3L818.8,216.3ZM817.8,215.9L817.8,215.9L817.8,215.9ZM801.8,203.9L801.8,203.9L801.8,203.9ZM806.3,204.5L806.3,204.5L806.3,204.5ZM807.3,208.2L807.3,208.2L807.3,208.2ZM808.8,208.4L808.8,208.4L808.8,208.4ZM810.3,206.7L810.3,206.7L810.3,206.7ZM811.7,207.9L811.7,207.9L811.7,207.9ZM811.6,208.4L812.7,210.1L811.2,208.7L810.3,209.6L810.2,207.5ZM812.8,204.2L811.9,204.1L812.3,202.8ZM806.8,202.9L806.8,202.9L806.8,202.9ZM806,199.9L806,199.9L806,199.9ZM813.8,213.7L813.8,213.7L813.8,213.7ZM816.6,215.6L816.6,215.6L816.6,215.6ZM811,223.7L811,223.7L811,223.7ZM818.8,225.1L818.8,225.1L818.8,225.1ZM814.3,210.9L814.3,210.9L814.3,210.9ZM815.6,218.3L815.6,218.3L815.6,218.3ZM801.8,187.1L801.8,187.1L801.8,187.1ZM801.6,210.8L801.6,210.8L801.6,210.8ZM812.1,211.6L812.1,211.6L812.1,211.6ZM807.8,207.7L807.8,207.7L807.8,207.7ZM818.6,216.9L818.6,216.9L818.6,216.9ZM814.9,210.6L814.9,210.6L814.9,210.6ZM795.8,221.2L795.8,221.2L795.8,221.2ZM812.6,218L812.6,218L812.6,218Z","PE":"M291.3,260.1L289,259.9L288.6,260.4L286.2,260.9L283.5,262.8L282.6,265.9L283,267L281.3,268.4L281.4,269.7L280.8,270.4L282.1,272.9L283.7,274.9L283.2,276.2L285.4,276.5L286.1,278.1L288.6,278L290.4,276.3L290.2,277.5L290.4,281.2L293.2,281.1L295.9,285.9L295.2,287.1L295.2,289.6L295.8,291.2L294.7,293.6L295.3,294.5L294.7,295.6L295.4,297.3L296.3,297.7L296.1,298.9L294.6,300.6L295,301.6L294.2,302.2L294.2,303.8L292.9,304.2L290.2,302.1L289.6,300.9L286.9,299.1L283.1,297.3L279.5,295L277.1,292.6L275.7,290.2L276.1,289.1L274.1,285.4L273.1,284.5L272.9,283.3L271.7,282.1L271.3,280.7L269.9,278.4L267.4,272.5L266.3,271.3L265.2,268.9L264.2,267.6L261.3,265.7L262,264.8L260.7,261.4L260.8,260.3L262,258.5L263.3,257.4L263.7,258.9L262.8,259.5L263.2,260.8L263.9,260.2L265.2,260.7L266.8,262.4L267.8,261.1L268.6,257.4L269.9,256.1L273.1,254.8L274.6,253.5L276,251.6L276.8,248.6L275.8,247.3L276.8,247.2L278.1,247.5L279.6,249.9L281.2,250.7L281.6,252.1L282.4,252.6L282.6,253.9L284.6,254.4L286.3,253.6L287.3,254.1L288.6,253.8L290.9,255.4L289.2,258.6L290.3,258.7Z","PY":"M326,309.9L327.1,312.5L327.1,316L329.9,316.5L331.2,316L332.8,316.6L334.4,321.8L336.5,321.4L337.6,322.1L337.1,326.9L337,330.3L334.7,332.7L333.3,333.1L327.2,332L328.2,330.2L328,329.4L329.4,326.8L328.6,325.5L324.8,323.7L322.7,322.3L319.6,321.2L317,319L314.8,316.4L315.4,312.7L315.2,311.2L316.3,308.3L320.8,307.2L323.3,307.2L325.8,308.8Z","PG":"M892.5,261.7L891.8,260.9L891.6,259.3L890.6,257.8L887,255.3L887,254.9L890.6,257.5L892.8,259.7ZM889.8,260.2L891.1,260.4L891,261.6L889.9,262.5L890.2,263.6L888.4,264.2L887.6,265.3L885.3,266.4L883.2,266.5L880,264.8L879.9,264.1L882.3,264.2L884.7,263.8L886.9,263.8L888,262.3L889,262.1L888.9,260ZM859.1,275.3L860.4,255L863.7,256.5L867.2,257.5L868.5,258.6L869.9,258.9L873.1,261.9L872.9,263.7L876.3,265.3L877.2,265.4L878.3,266.6L878.2,267.8L876.3,267.8L875.8,268.5L876.3,269.9L878.7,272.1L879.6,275.1L881.4,275.2L881.1,276.2L883.1,277L882.7,278.1L884.7,278.9L883.7,280.1L882.3,279.2L877,278.3L874.5,275L873,272.1L870.3,271.2L869.1,270.5L866.5,272.4L865.1,272.8L865.6,274.8L863.5,276L862.5,275.5L859.5,275.6ZM879,265L879,265L879,265ZM873.8,261.6L873.8,261.6L873.8,261.6ZM892,256.6L892,256.6L892,256.6ZM890.4,256L890.4,256L890.4,256ZM884.3,251.7L884.3,251.7L884.3,251.7ZM886,278.1L886,278.1L886,278.1ZM884.2,276.5L884.2,276.5L884.2,276.5ZM886.5,274.1L886.5,274.1L886.5,274.1ZM894,282.3L894,282.3L894,282.3ZM866.3,273.3L866.3,273.3L866.3,273.3ZM876.8,263.8L876.8,263.8L876.8,263.8ZM876.9,253L877.3,253.6L875.5,253.7ZM886,255.1L886,255.1L886,255.1ZM884.7,276L885.6,277L884.4,276.9ZM890.5,274.8L890.5,274.8L890.5,274.8ZM891.9,282.7L891.9,282.7L891.9,282.7ZM866.3,273.8L866.3,273.8L866.3,273.8ZM879.1,254L879.1,254L879.1,254ZM890.1,255.7L890.1,255.7L890.1,255.7ZM885.2,279.8L885.2,279.8L885.2,279.8ZM894.5,259.6L894.5,259.6L894.5,259.6ZM900.1,267.7L898.5,267.8L898.2,266.5L897.1,265.5L897.1,263.8L898.1,264.4ZM896.9,263.8L896.9,263.8L896.9,263.8Z","PA":"M271.9,219.8L272.2,221.7L270.2,224.3L268.9,221.7L269.8,220.7L267.3,218.7L266.4,218.7L265.5,220L263.5,221.6L264.6,223.4L262.3,224.3L261.5,222.3L260.6,222.7L260.1,221.4L257.5,220.8L257,221.6L256.6,220.9L257.5,219L257,217.3L258.1,216.9L258.8,218.6L261.2,219.4L264.6,218.1L266.1,216.9L270.1,218ZM267.7,221L267.7,221L267.7,221ZM260.3,223.9L260.3,223.9L260.3,223.9ZM258.9,217.5L258.9,217.5L258.9,217.5ZM267.2,221.1L267.2,221.1L267.2,221.1Z","PW":"M834,237.4L834,237.4L834,237.4ZM842.4,223.8L842.4,223.8L842.4,223.8Z","PK":"M674.6,135L675.7,136.8L674.8,137.9L672.7,138.7L669,137.9L668,139.2L669.4,141.8L669.2,142.6L671.4,144.9L673.3,145.7L671.5,147.5L672.2,149.6L670.7,151.5L670.7,152.5L669.7,153L668.9,155.9L667.6,156.8L666.8,159.2L664.4,160L663,159L661.3,161.7L661.2,162.9L663.1,163.9L663.1,165.2L664.9,167.2L666.3,169.5L666.4,170.4L665.1,170.4L663,171.2L660.4,170.9L660.5,171.8L659.1,172.2L657.8,172.3L656.7,171.2L656.1,169.3L654.8,169L653.8,166.8L649.3,168L646.4,167.5L646.3,167.9L641.3,167.9L641.6,164.7L643,163.7L644.8,163.3L645,161.9L643.5,161.4L643,158.3L640.6,157.4L638.8,154.8L637.3,153.3L641.7,154.7L644.5,154.4L646,154.8L647,154.2L648.7,154.2L651.1,153.4L651.1,150L652.2,148.7L654.3,148.6L653.8,148.1L655.1,147.2L657.1,147.7L657.9,146.7L657.5,145.2L657.9,143.3L659.6,142.5L658.2,140.6L661.2,140.1L660.6,138.6L661.9,136.5L661.5,135.4L660.2,133.9L661,132.6L663.2,131.4L667.9,130.8L670.1,131.1L671.5,131.9L672.1,133.7L672.9,134.5Z","OM":"M635.5,183.6L635.5,183.6L635.5,183.6ZM621.5,194.8L620.4,192.7L618,187.4L625.6,184.3L626.8,178L625.4,175.8L625.9,172.6L625.7,171.9L627,171.5L626.4,170.9L626.2,169L627.8,168.6L628.6,170.2L630.3,171.9L634,172.8L637.7,177.3L636.8,179.6L635.7,180.8L634.8,183L633.7,182.5L633,185.5L633.4,187.4L631.8,187.7L630.5,188.7L629.6,190.7L627.5,191L626.6,193.6L624,193.7ZM627.3,166.5L626.5,165.2L627.4,164.4ZM627.4,167.8L627.4,167.8L627.4,167.8Z","NO":"M522.3,36.4L521.3,36.4L521.8,37.2L521.2,38.2L517.9,37.7L517.1,39.3L515.8,38.9L514.8,39.4L513.6,40.7L514.2,41.7L512.4,43.2L512.5,43.7L510.6,44.2L510.7,46.5L509.1,48.4L510,48.8L509.9,50L508.5,49.8L507.1,50.2L505.9,52L506.4,52.8L506.7,54.8L506.5,56.4L508.2,57.4L507.8,58.3L507,58.4L507.7,60L507.6,61L505.9,62.4L506,64.3L505.4,64L504.1,63.6L503.4,62.5L502.7,64.1L501.6,64.1L499.1,66.1L496.8,67L494.7,66.7L492.8,65.5L492.5,64.1L493.1,64L493.9,62.6L491.9,63.7L491.8,62.3L493.8,61.8L492.7,61.7L494.4,60.1L493.6,60.3L491.3,62.2L491.5,59.7L491,58.3L495.4,58.2L494.6,57.9L491.7,58.1L490.8,56.4L491.2,55.2L493.6,54L496.7,54L497.4,53.5L494.7,53.7L495.1,52.9L497.5,52.6L498.5,52L498.1,51.3L500.8,51.1L501.5,51.7L503.1,51.5L503.5,50.7L501.3,51.4L500.6,50.6L502.6,48.9L504.5,48L504.4,47.4L505.8,46.8L506.1,45.6L507.6,43.9L507.7,42.8L509.4,41.5L512.2,41.2L510.1,41L511.1,40.3L512.2,40.6L511.7,39.8L510.7,40L511.2,39.3L513.1,38.5L513.7,39.5L514.3,37.5L515.7,37L517.1,36.1L517.4,35.2L518.1,35.3L519.1,34.5L520.2,34.4L520.1,35.4L520.8,34.2L524.5,33.8L523.3,33.2L525.9,32.9L527.3,33.9L527.4,33.2L529.3,32L529.9,31.2L532,31.6L531.1,32.4L530.8,33.6L533.4,31.5L533.9,31.6L533.8,32.8L535.6,31.7L535.5,31L537.2,31.3L537.1,33.1L537.7,31.9L538.7,31.6L542.7,33.1L540.8,33.6L538.4,33.5L540.2,33.9L540.4,34.4L542.9,34.4L543,35.1L541.6,34.8L541.3,35.5L540.1,35.7L539.4,36.4L539.1,36L539.9,35.2L539.4,34.7L536.7,33.7L534,34.1L533,34.8L532.8,36.5L531.4,37.6L529,37L528,37.4L526.1,37.2L524.2,35.8ZM490.9,58.2L490.9,58.2L490.9,58.2ZM491.2,60.4L491.2,60.4L491.2,60.4ZM541,34.4L541,34.4L541,34.4ZM505.3,45.6L505.3,45.6L505.3,45.6ZM498.2,51L498.2,51L498.2,51ZM497.5,51.9L497.5,51.9L497.5,51.9ZM527.3,31.7L526.6,32.3L525.2,32.5L524.4,32.1ZM531.5,30.9L531.5,30.9L531.5,30.9ZM527.8,32.4L527,33.1L526.4,32.7ZM528.6,32.4L528.6,32.4L528.6,32.4ZM508.6,38.5L508.6,38.5L508.6,38.5ZM506.9,39.5L506.9,39.5L506.9,39.5ZM511.2,36.7L511.3,37.5L509.9,37.5ZM520.1,33.3L520.1,33.3L520.1,33.3ZM522.2,33.6L522.2,33.6L522.2,33.6ZM519.1,33.7L519.8,33.9L518.3,35L517.3,35.1L517.4,34.5L519,33.2ZM506.4,44.8L506.4,44.8L506.4,44.8ZM506.1,44.4L506.1,44.4L506.1,44.4ZM503.9,47.7L503.9,47.7L503.9,47.7ZM515.7,34.9L516.8,35.2L516.8,36L515.2,36.4L514.8,35.5ZM512.5,37.7L513.5,36.8L514,37.5L512.8,38.1L509.5,38.7L511.7,37.5L511.7,36.4L512.5,35.8ZM461.9,31.7L463.2,30.9L463.9,31.1ZM517.4,22.6L517.4,22.6L517.4,22.6ZM529.9,12.4L529.9,12.4L529.9,12.4ZM539.3,9.1L537.4,9.1L540.8,8.8ZM520.2,12.5L521,12.5L521.6,13.3L523.8,13.5L523.3,13.9L526.7,14.4L523,15.6L522.8,14.9L519.7,15.2L520.6,14L519.7,13.8L517.9,12.7ZM518,8.8L519.2,8.8L520.7,9.2L520.8,8.4L522.3,8.4L522.1,8.9L524.2,8.5L527.1,8.9L528.9,9L529.7,9.5L527.7,10.2L527.2,10.7L525.6,10.7L524.2,11.1L522.2,11L522.1,10.6L518.4,10.7L516.1,10.2L518.1,9.9L514.7,9.9L513.4,9.5L514.4,9.2L512.7,9L516,8.8L515.6,8.3ZM510.7,9.5L512.1,9.6L512.9,10L512.5,10.7L513.5,10.2L514.5,10.5L515.2,11.2L517.2,11.2L519.7,12.2L516.7,12.4L515.5,13.1L515.5,13.7L514.5,13.8L514.3,15L513.6,15L512.5,16.1L512.4,17L511.8,17.2L507.1,15.7L506.5,14.9L507.7,15L508,14.6L512,14.3L511.6,14.1L507.4,14.4L505.9,14.2L505.6,13.8L511.3,13.1L511.2,12.3L508.7,12.8L508.4,12.1L506.9,12.3L507.3,12.9L506.3,13.2L504.5,13.3L501.9,12.2L501.4,11.6L502.7,11.8L501.3,10.9L500.7,11.3L499.7,10.4L499.9,9.8L502.5,10L505.1,9.6L504.5,10.3L505.7,10.8L505.8,10.2L506.7,9.8L507.6,10L508.9,11L510.1,11.6L509,10L509.4,9.3ZM500.9,12.5L502.6,13.3L500.7,12.8L499.5,11.8ZM514.1,8.7L514.1,8.7L514.1,8.7ZM533.8,11.8L533.8,11.8L533.8,11.8Z","KP":"M801.6,125.8L801.2,126.7L798.7,127L798.3,128.4L797.1,128.5L795.9,127.8L795.2,128.6L793,127.3L793.8,125.6L793.2,125L792.8,122.9L789.7,121.5L790.4,120L792.5,118.6L793.5,115.9L794.5,116.7L797.1,117.1L796,115.3L798.1,115.1L798.5,114L799.4,113.8L799,112.1L801.3,113.6L802,114.3L801.5,114.3L800.6,116.1L801.8,118.8L799.5,121.4L798,122.1L798.3,123.9ZM791.7,122.9L791.7,122.9L791.7,122.9Z","NG":"M499.7,233L499.7,233L499.7,233ZM516.4,204L517.7,206L518.1,208.1L519.2,209L519.1,210.9L517.3,212L515.7,215.5L515.4,217L514.8,217.4L514.5,219.1L513.4,220L511.9,224.6L510.1,226.7L508.6,224.8L507.3,225L504.4,228.1L503.1,232L502.4,232.6L500.3,232.3L498.9,233.1L496.4,233.4L495.1,232.3L494.5,230L493.1,228L491.1,226.8L487.3,226.9L487.5,225.9L487.2,222.2L487.5,218.6L488.2,218.5L489.6,214.7L490.3,213.7L489.4,211.2L489.6,210.3L489.8,207.7L490.6,206.9L491.1,204.8L492.9,203.8L494.7,203.5L497.1,204.3L498.9,206.2L500.9,205.1L503.4,206.5L505.8,206.8L507.3,205.4L510.6,205.1L513.4,205.9L513.9,205.2Z","NE":"M516.4,204L513.9,205.2L513.4,205.9L510.6,205.1L507.3,205.4L505.8,206.8L503.4,206.5L500.9,205.1L498.9,206.2L497.1,204.3L494.7,203.5L492.9,203.8L491.1,204.8L490.6,206.9L489.8,207.7L489.6,210.3L487.7,208.2L486.4,208.6L486.4,209.7L485.5,208.2L485.6,207.1L484.2,207.3L482.7,206.1L483.2,205.1L481.7,204L480.4,201.5L480.6,200.2L482.5,200L483.5,199.1L489.4,198.8L490.3,197.6L491.3,193.7L491.2,187L495.5,185.9L499.8,181.5L511.5,173.2L515.5,174.3L517.5,176L519.4,174.9L520.1,179.5L522.2,183.3L521.7,184.6L521.2,194L518.3,197.6L516,201.9Z","NI":"M257.9,200L257.6,202L256.9,203.1L256.1,207.2L255.6,207.8L255.6,210.5L254.9,211.5L255.5,212.7L255,213.3L253.6,212.5L252.1,212.6L250.3,211.9L249.9,212.3L247.4,208.8L245.2,206.5L246.1,206.3L247.9,205.2L247.9,203.8L249,203.8L249.9,202.9L250.5,203.6L252.9,200.7L254.1,201.1Z","NZ":"M908.6,376.2L910.7,375.3L912.1,375.4L910.6,376.9L910.6,377.6L905.5,381.5L903.5,382.6L903.2,384.2L901,384.3L898.7,385L896.2,387.6L893.6,389.8L889.3,392.5L886,392.6L885.2,391.4L882.9,391.4L883.2,390.2L885.9,388.1L891.3,384.9L892.6,384.6L900.7,380.6L903.6,377.8L905.6,376.7L906.9,375.1L908.9,373.8ZM911.4,374.9L911.4,374.9L911.4,374.9ZM884.1,389.7L884.1,389.7L884.1,389.7ZM885.7,388.3L885.7,388.3L885.7,388.3ZM884.9,393.4L884.7,394.1L882.5,394.6L884.4,392.9ZM923.9,360.6L923.9,360.6L923.9,360.6ZM920.4,356.3L922.5,357.3L922,360.7L920.9,362.3L922.4,363.3L923.3,361.2L923.6,362.7L922.8,364.7L925.4,365.9L927.9,364.6L928.9,365L926.7,367.7L925.6,368.2L924.5,369.8L923.5,369.3L921.9,370.2L921.7,371.2L920.1,372.7L915.9,376L913.4,377.2L912.4,376.2L915,374.1L915.9,373.1L915.9,372L914.1,370.7L914.4,369.6L917.1,368.4L919.7,365.3L920.1,361.2L921,360.4L920,360.2L919.5,357.2ZM874.1,410.5L874.1,410.5L874.1,410.5ZM871.4,405.3L871.4,405.3L871.4,405.3ZM48.9,383.8L49.1,384.8L47.4,384.1ZM50.1,385.6L50.1,385.6L50.1,385.6ZM16,273.6L16,273.6L16,273.6ZM19.8,276.1L19.8,276.1L19.8,276.1Z","NU":"M29.4,306.5L29.4,306.5L29.4,306.5Z","CK":"M57.9,313.3L57.9,313.3L57.9,313.3Z","NL":"M494.1,88.4L493.3,88.1L493.7,87.3L491.2,86.2L489.9,86.5L488.1,86L489.8,85.8L489.2,85.2L490.5,83.7L490.9,82.3L494,80.5L495.8,80.4L496.7,80.8L496.4,83.5L495.8,84.9L493.9,85.4L494.5,86.2L493.9,87.7ZM489.9,86.5L489.2,87L487.9,86.5ZM494.7,80.2L494.7,80.2L494.7,80.2ZM493.7,80.3L493.7,80.3L493.7,80.3ZM491.8,80.8L491.8,80.8L491.8,80.8ZM492.3,80.5L492.3,80.5L492.3,80.5ZM491.3,81.5L491.3,81.5L491.3,81.5ZM489.2,85.5L489.2,85.5L489.2,85.5ZM495.6,80L495.6,80L495.6,80ZM297.1,208.9L297.1,208.9L297.1,208.9ZM312.5,192.1L312.5,192.1L312.5,192.1ZM311.8,191.7L311.8,191.7L311.8,191.7Z","AW":"M292.7,207.9L292.7,207.9L292.7,207.9Z","CW":"M295.7,209.2L295.7,209.2L295.7,209.2Z","NP":"M709.1,159.5L709.3,161.9L709.9,164.1L707.9,164.3L702.5,163.1L700.7,162.1L700.4,161.3L698.9,160.7L696.9,161.1L692.8,159.5L690.8,158.1L687.6,156.5L688.2,153.2L689.2,152.3L690.2,151.8L691.8,151.8L692.2,152.5L695.1,154.1L696.5,155.4L697.8,155.3L698.4,156.3L699.8,157.3L701,157.3L701.1,158.1L702.5,158.3L703.5,159.4L704.9,158.9L706.6,159.6Z","NR":"M930.7,248.4L930.7,248.4L930.7,248.4Z","NA":"M542.2,302L544.6,301.5L546.3,301.7L547.2,302.5L544.8,303.1L542.7,304.5L541.9,303.2L535.7,304.1L535.3,315.7L532.7,315.7L532.4,324.4L531.9,336L529.9,337.4L527.5,337.3L525.3,336.7L524.3,334.6L522.7,336.5L520.9,334.4L520,332.6L519.1,329.3L518.9,325.2L518.1,322.6L517.9,318.7L518.3,317.9L517.8,316.3L515.6,312.3L514.9,310L513.1,306L511.3,303.1L511.3,300.8L513.4,300.7L514.9,299.9L517.1,301.2L529,301.2L530.4,302.5L537,303.1Z","MZ":"M562.5,316.9L565.5,313.6L565.9,311.6L567.5,309L566.9,305.7L567.7,304.1L567.8,299.1L565.1,298.2L563.3,296.9L561.2,296.8L561.1,295.7L560.8,293.7L568.8,290.6L569.9,292.4L571.8,291.9L572.2,292.5L572.2,294.7L571.4,296.5L571.7,297.5L574,300.3L573.7,298.6L574.3,297.4L575.4,297L575.8,292.7L574.3,290.3L572.5,288.6L572.1,285L573,283L573.8,283L576,282.6L578,283.4L578.9,283L580.3,283.4L582.5,282.1L583.3,282.5L587.4,280.6L588.7,279.5L589.1,280.1L588.4,282.2L588.7,286.3L588.5,288.9L588.7,292.3L589.1,293.1L588.3,295.2L586.2,298.2L584.1,299.9L581.5,300.8L579.1,302.3L576.5,305.6L574.6,306.8L572.6,308.8L572.1,308.8L571.9,310.7L572.5,311.9L573.1,314.6L573.3,317.1L573.6,316.1L573.7,318.7L573,321.3L573.4,321.4L572.2,323.7L570.7,324.5L567.3,325.9L565.8,327.1L565.2,328.3L565.8,329.1L565.8,330.9L563.7,330.9L563.5,328.1L563.9,323.4L563,320.3ZM572.9,284.4L572.9,284.4L572.9,284.4ZM573.1,284.7L573.1,284.7L573.1,284.7Z","MA":"M474.4,136.8L475.4,137.9L475.7,142.4L476.1,143.8L477.3,145.1L476.7,146.3L473.7,146.1L472.3,147.1L470.2,147.6L470.7,149.5L467.2,151.4L465.9,153L463.2,153.4L462.8,154.2L461.7,154L457.5,156.9L457.4,160.2L457.1,161.9L455.5,162L454.6,162.7L451.5,162.2L450.3,162.6L450.4,163.4L449.4,165.1L448.6,165.3L447.4,169.1L445.7,170.4L445,171.8L443.5,172.7L442.5,177L440.8,179.7L438.4,179.6L435.1,179.8L435.3,178.3L436.9,176.1L438.2,172.2L440.6,170L441.3,167.3L442.4,164.6L444.6,163.1L446.3,159.4L448.9,158.7L450.3,157.9L452.8,155.8L455,152.5L454.5,150.6L454.8,148.4L456,146.3L456.3,144.7L458,142.8L462.4,140.4L463.9,137.8L465,134.7L466.5,134.8L467.7,136.2L469,136.6L471.9,136.4Z","EH":"M457.4,160.2L457.4,161.4L457.3,165.4L448.6,165.4L448.4,173.4L445.7,174.8L445.5,176.4L445.6,180.1L435.2,180.1L434.9,181.7L435.1,179.8L438.4,179.6L440.8,179.7L442.5,177L443.5,172.7L445,171.8L445.7,170.4L447.4,169.1L448.6,165.3L449.4,165.1L450.4,163.4L450.3,162.6L451.5,162.2L454.6,162.7L455.5,162L457.1,161.9Z","ME":"M527,110.5L528,111.5L530,112.7L529.4,113.5L528.4,113.3L527.5,114.7L527.8,115.6L525.6,113.9L525.4,113.5L525.3,112.2L526.4,110.6Z","MN":"M688.7,93.2L689.3,92.3L691.2,92.3L692.4,91.5L692.2,91L697.3,88.1L699.4,88.9L702.2,89L703.8,90.6L706.7,90.6L709.6,91L710.3,91.5L711.9,90.5L711.7,89.1L710,87.7L709.8,86.6L710.9,84.3L713.8,85.4L715.2,85.5L717.7,86.3L719.6,86.6L721.1,88.9L724.9,90.3L728.6,89.3L731.9,89.7L733.7,90.7L735.5,90.9L736.2,91.9L737.9,92.7L739.4,92.7L743.4,93.2L744.4,92.6L748,91.9L748,91.3L749.9,89.9L752.7,90.8L754.7,90.7L756.3,91.2L756.6,96.9L757.8,97.7L759.6,97.2L761.3,97.8L761.8,96.8L763.6,96.8L767.8,99.4L768.6,101L766.3,100.5L765.1,100.7L763.3,101.8L761.5,102L761.5,103.5L760.6,104.5L758,104.8L756.6,106.7L752,105.8L751.8,107.9L754,109.9L752.2,111.1L751.4,112.8L749.5,113.8L746.4,113.9L743.1,114.3L739.9,116.1L738.3,116.3L738,115.6L736.2,116L734.4,115.2L731.4,114.6L730.5,113.8L725.9,113.1L724.8,113.5L719,112.8L717,113L715.3,111.5L712.7,108.2L711.1,108L707.9,106.3L705.6,105.8L702.6,105.7L700.8,105.4L699.9,104.3L700.1,102.8L698.7,100L696.5,97.7L694.3,96.7L693.1,96.8L691.3,95.6L689.9,95.1Z","MD":"M543.6,96L545.7,95.3L548.1,96.5L549.6,96.8L550,98.4L552,100.3L552.1,101.8L550.3,101.3L550,102.7L548.4,104.6L548,103L548.1,100.9L547.6,99.9L545.5,97.9L544.5,96.3Z","MC":"M498.2,109.8L498.1,109.9L498.2,109.8Z","MX":"M179.8,144.9L186.1,144.3L185.6,144.9L194.3,148.7L201.5,148.7L201.9,147.2L206.5,147.3L209.3,150.8L209.7,153.9L212.4,156L213.5,155.3L214.2,154L215.6,153.2L217.4,153.4L219.2,155.8L219.5,158.1L221,160.6L220.8,162.2L221.3,164L225.5,165.8L226.1,165.5L223.7,170.5L222.2,176L222.2,179.2L223,182.3L224.4,184.7L224.6,186.3L225.6,188.2L227.3,188.3L228.7,190L231.5,189.2L233.3,189.1L235.8,188.3L236.1,189.1L237.6,188.6L237.3,187.8L239.3,186.3L240.2,184.5L241.1,181.1L242.7,180.3L247.3,179.2L250.7,179.8L250.3,181.5L248.3,183.9L247.6,185.4L248.2,185.6L246.5,189.7L246.3,187.9L245.4,189.1L242.9,191.1L238,191.1L237.8,192.9L236.7,192.9L239,195.6L238.8,196.6L235.3,196.6L233.9,198.9L233.5,201.4L232.1,199.5L229.5,196.6L227.6,196.2L227,195.5L225.4,196.9L222.4,197.9L219.3,196.9L216.8,195.1L214.4,194.6L211.5,193L209.2,190.8L207,190.3L205.1,189.5L204.1,187.9L201.7,186.4L200.3,183.1L201.5,182.5L201,181.8L202.1,179.6L201.3,178L201.3,176L200,174.2L198.8,171.7L196.9,169.8L197,168.5L194.3,166.7L194.1,165.3L194.9,164.5L193.5,162L192.3,161.3L192.6,159.6L191.1,159.2L189.3,155.9L188.4,150.3L189,149.1L186.4,148.1L184.8,146.9L184.2,149.2L184,152.8L185.4,154.6L185.8,156.2L187,157.8L186.8,159.7L189,163.2L189,166.1L189.9,169.2L189.6,170.6L190.6,170.6L192.3,173.3L192,174.2L190.6,175.2L189.9,172.9L186.3,169.1L186.8,167L186.5,164.7L185.1,163.6L185,162.4L183.7,163.1L181.9,161.6L180.9,159.6L182,159.8L183.2,159.1L183.8,157.2L182.3,154.8L180.9,153.6L180.8,150.3L180,147.9ZM249.8,183.3L249.8,183.3L249.8,183.3ZM198.8,179.2L198.8,179.2L198.8,179.2ZM185.5,188.2L185.5,188.2L185.5,188.2ZM190.3,168.5L190.3,168.5L190.3,168.5ZM186.8,155.8L186.8,155.8L186.8,155.8ZM180.7,158.9L180.7,158.9L180.7,158.9ZM189.2,156L189.2,156L189.2,156ZM173.5,156.2L173.5,156.2L173.5,156.2ZM250.9,180.4L250.9,180.4L250.9,180.4ZM236.5,188.4L236.5,188.4L236.5,188.4ZM191.7,171.2L191.7,171.2L191.7,171.2ZM185.2,147.5L185.2,147.5L185.2,147.5ZM189.7,165.4L189.7,165.4L189.7,165.4ZM186.9,170.5L186.9,170.5L186.9,170.5ZM186.1,170L186.1,170L186.1,170Z","MU":"M632.6,310.9L631.7,310.7L632.7,309.4Z","MR":"M436.6,185.2L436.6,185.2L436.6,185.2ZM447.2,200.5L445.7,199.2L443.9,196.4L443,196.3L441.9,195L440.1,194.7L438,195.3L436.7,195.1L435.9,197.3L436.1,194.9L437.2,192L437.3,188.9L436.2,186.3L437.1,183.6L435.4,180.9L434.9,181.7L435.2,180.1L445.6,180.1L445.5,176.4L445.7,174.8L448.4,173.4L448.6,165.4L457.3,165.4L457.4,161.4L467.4,168.6L462.7,168.6L465,195L465.7,195.9L465.3,198.4L455.5,198.4L453.5,198.8L451.4,198.6L450.9,199.5L449.3,197.9L448.3,200Z","MT":"M516.9,134.4L516.9,134.4L516.9,134.4ZM516.2,133.9L516.2,133.9L516.2,133.9Z","ML":"M449.5,208.1L449.5,206.4L448.9,205L447.7,204.2L447.9,202.4L447.2,200.5L448.3,200L449.3,197.9L450.9,199.5L451.4,198.6L453.5,198.8L455.5,198.4L465.3,198.4L465.7,195.9L465,195L462.7,168.6L467.4,168.6L483,180.8L483.1,181.7L484.5,183.1L488.5,184.9L488.2,186.9L489,187.4L491.2,187L491.3,193.7L490.3,197.6L489.4,198.8L483.5,199.1L482.5,200L480.6,200.2L478,199.8L474.7,201.6L474.3,202.5L473.4,202.2L471.4,204.1L471.2,205.3L469.2,205L468.4,205.8L468.7,206.9L468.1,208.3L465.8,209.9L465.8,211.8L465.3,212.3L465.2,214.3L463.8,215L463.2,213.3L462.1,213.5L461.3,215L459.4,214.3L458.5,215.1L457.8,214.1L457.6,212.5L456.8,212.3L457.4,211.3L456.3,210.4L455.8,208.1L453.7,209.2L452.5,208.7L451.4,209.7L450.7,208.7L449.7,209.3Z","MV":"M678.1,236.7L678.1,236.7L678.1,236.7ZM678.3,233.8L678.3,233.8L678.3,233.8Z","MY":"M749.8,226.7L749.9,226L752.3,227.3L752.6,229.2L753.7,228.4L754.6,228.6L755.1,227.3L757.6,229.6L758.9,231.7L758.8,235.1L759.1,237.7L760.2,238.8L761.5,242.4L759,242L757.3,241L753.3,237.8L753.3,236.7L751.7,234.4L751.3,232.3ZM797.1,233.8L795.8,233.3L792.6,233.2L791.8,234.5L791.5,237.4L790.6,238L790.8,239L789.8,239.8L789.2,242.3L787.5,242.4L786.7,243L784.9,241.9L782.8,242.3L781.7,243.7L779.5,243.7L778.3,244.1L776,241.8L775.9,240.5L776.9,241.5L777.9,241.5L779.9,242.5L780.2,239.2L781.5,237.9L785,236.8L787.3,233.6L787.6,232.5L789.2,234.3L790.2,231.5L790.5,233.1L791,233.2L790.5,231.5L791.6,230.9L791.2,229.9L792.2,229.5L794.5,225L794.6,226.2L795.5,225.1L797,226.6L797,228.3L798,227.9L799.7,229.4L801.4,229.9L801.2,230.9L798.9,231.3L799.9,232.9ZM761.3,238.3L761.3,238.3L761.3,238.3ZM750.4,230.3L750.4,230.3L750.4,230.3ZM749,226.6L749,226.6L749,226.6ZM795.5,224.4L795.5,224.4L795.5,224.4ZM753.4,237.5L753.4,237.5L753.4,237.5ZM780.6,239.3L780.6,239.3L780.6,239.3ZM798,233.8L797.3,233.8L798,233.8Z","MW":"M573.1,284.7L573.1,284.7L573.1,284.7ZM572.9,284.4L572.9,284.4L572.9,284.4ZM568.8,290.6L567.4,289.4L568.3,288.2L568.5,286.3L569.5,285.9L569.1,282.9L569.3,280.9L570.4,279.9L569.2,276.9L568.5,276.2L571.2,277.1L571.4,276.5L572.6,277.9L573.1,280.3L572.9,281.3L573.8,283L573,283L572.1,285L572.5,288.6L574.3,290.3L575.8,292.7L575.4,297L574.3,297.4L573.7,298.6L574,300.3L571.7,297.5L571.4,296.5L572.2,294.7L572.2,292.5L571.8,291.9L569.9,292.4Z","MG":"M612.8,285.7L613.7,287.7L614.3,292.9L614.8,294.9L613.9,296.7L613.2,295.2L612.5,295.5L612.9,297.7L612.6,299.4L611.6,301.1L611.2,304.2L606.4,316.9L604.9,321.6L603.7,324.4L602.4,325.6L600.9,325.8L599.1,326.9L598,326.8L595.4,325.1L594.7,323.1L595,320.5L594.3,318.5L594.1,315.8L594.9,313.7L595.9,312.8L597.7,309.2L597.9,307.6L597,304L597.1,301.2L598.4,299.1L598.6,297.5L600.6,296.7L603.6,296L605.8,294.2L606.8,292.8L607.7,292.6L608.6,289.3L609.1,289.7L610.7,288.3L610.8,285.8L611.9,284.6ZM609.4,288.6L609.4,288.6L609.4,288.6ZM613,299.7L613,299.7L613,299.7Z","MK":"M533.2,114.5L535.1,114.3L536.9,116.1L536.7,117.3L535.7,118L534.3,118L533.5,118.8L532,118.8L530.7,117.5L530.8,115.6L531.9,114.7Z","LU":"M494.5,90.3L495.4,91.3L495.1,92.3L493.7,92.1L493.6,90.9Z","LT":"M527.9,74.9L527.8,74.9L527.9,74.9ZM532.4,77.7L532.4,76.2L531.7,75.6L528.6,75L527.9,72.6L530.1,71.6L534.8,72.1L536.5,71.7L540.7,73.8L541.2,74.9L539.3,76L538.8,77.7L537.1,78.8L534.2,78.9L533.8,78.1Z","LI":"M503.1,99.6L502.9,99L503.1,99.6Z","LY":"M504.6,152.1L506.3,150.4L506,148.2L507.8,146.3L509.5,145.2L509.4,142.8L511.5,143.8L514,143.7L518.9,145.3L519.8,147.6L521.5,148.9L524.7,149.4L526.9,150.4L528.9,151.9L530.9,151.3L531.9,149.4L531.2,147.1L532.2,145.2L535.4,143.6L536.8,143.7L539.2,144.6L539.8,145.9L542,146.5L543.4,146.5L544.7,147.6L544,148.6L544.4,150.4L543.8,152.2L544.7,155.4L545.9,178L546.2,184.3L543.5,184.3L543.6,185.8L522,173.4L519.4,174.9L517.5,176L515.5,174.3L511.5,173.2L510.2,170.7L506.9,169.8L506.2,167.5L504.7,165.2L505.7,163.7L505.4,161.2L505.8,159.8L505.5,156.1L504.9,154L504.1,152.5Z","LR":"M449,225.3L451.3,222.6L452.3,220.3L453.7,220.2L454.4,220.8L454.5,223.7L456.1,224.1L457.2,223.2L457.7,224.7L456.8,226.5L458.7,227.4L459.9,228.6L459.5,231.8L459.7,233.2L457.7,232.5L455.4,231L452.3,227.8Z","LS":"M554.2,341.1L553.3,341.3L552.3,342.8L550.7,341.8L550,339.8L551.9,337.5L554.3,336.4L556.1,338.5L555.2,340.6Z","LB":"M571.5,138.3L572.7,138.3L573.2,139.6L572.1,140.8L571.7,142L570.6,143.2L569.8,143.1L570.8,139.5Z","LV":"M540.7,73.8L536.5,71.7L534.8,72.1L530.1,71.6L527.9,72.6L527.7,70.4L528.9,68.3L530.7,67.8L533.5,70L535,69L534.6,67.4L536.3,66.8L538.4,67.5L539.7,68.4L541.6,68.4L542.8,69.2L542.5,70.4L543.7,71.2L544,72.4L542.9,73.4Z","LA":"M749.2,176.8L751.1,179L752.6,181.5L754.2,182.1L755.1,181.3L756.7,182.2L758,184.2L757.2,185.5L755.8,185.3L755.6,186.3L758,188L763.7,193.8L764.5,195.4L766.5,196.7L766,197.3L767.5,199.1L767.3,200.9L765.6,202.1L764.7,201.3L763.4,202L763.3,203.3L761.2,202L761.9,201.4L761.9,197.8L760.1,196.3L759.1,194.8L759,192.7L756.5,189.9L754.4,189.3L753.2,190.9L751.5,189.9L749.1,192.2L748.5,191.8L748.5,189.3L748.8,187.5L748.4,185.7L746.8,185.8L746.1,185L746.3,184L745.1,183.3L745.2,182L747.1,179.3L747.5,180.4L748.9,180.6L748,176.5Z","KG":"M656.5,120.7L658.4,121L661.4,119L658,117.7L657.2,116.7L656.9,117.9L655.3,117.5L653.5,116.6L654.9,114.5L655.2,113L657.7,112.9L661,114L660.7,112.1L662.1,111.4L663.8,112.2L665.9,112.7L666.2,112.3L669,112.2L674.6,112.8L675.7,113.8L677.8,114.6L677.9,115.1L675.9,115.9L673.9,117.2L673.6,118.1L670.5,118.4L670.1,120.1L668.2,120.5L667.7,119.6L664.2,121.3L664.4,122.7L663.8,123.2L659.4,123.7L658.3,122.7L656.6,123.3L656.2,122.8L652.9,123L652.6,121.6L654.1,120.8L655.4,121.3ZM657.4,121.8L657.4,121.8L657.4,121.8ZM658.8,121.6L658.8,121.6L658.8,121.6ZM656.2,122L656.2,122L656.2,122Z","KW":"M604.9,154L604.9,154L604.9,154ZM605.7,157.4L603.7,157.4L602.9,156L600.6,155.7L601.8,152.8L604,152.9L604.4,154.9Z","XK":"M530,112.7L530.9,111.3L532.6,112.9L533.5,113.2L533.2,114.5L531.9,114.7L530.8,115.6L530.5,114.5L529.4,113.5Z","KI":"M946.7,237.1L946.7,237.1L946.7,237.1ZM946.4,237.3L946.4,237.3L946.4,237.3ZM947,241.1L947,241.1L947,241.1ZM947,241.5L947,241.5L947,241.5ZM947.1,243.7L947.1,243.7L947.1,243.7ZM951.1,249.3L951.1,249.3L951.1,249.3ZM951.8,250.6L951.8,250.6L951.8,250.6ZM947.1,242.6L947.1,242.6L947.1,242.6ZM937.7,249.6L937.7,249.6L937.7,249.6ZM15.6,260.9L15.6,260.9L15.6,260.9ZM18.4,256.6L18.4,256.6L18.4,256.6ZM18.2,260.8L18.2,260.8L18.2,260.8ZM9.4,261.4L9.4,261.4L9.4,261.4ZM62,259.6L62,259.6L62,259.6ZM72.8,282.6L72.8,282.6L72.8,282.6ZM59.9,264.4L59.9,264.4L59.9,264.4ZM55.3,241L55.3,241L55.3,241ZM50.2,234.6L50.2,234.6L50.2,234.6ZM16.7,255.5L16.7,255.5L16.7,255.5Z","KE":"M590.6,253.6L590.6,253.6L590.6,253.6ZM571.5,250L571.6,246.3L574.4,241.7L574.2,239.1L573,237L572.9,235.6L571.6,233.7L575.1,229.7L576.4,230.1L576.4,231.8L577.3,232.9L579.5,233.1L582.8,235.4L586.6,236L587.5,234.8L590,233.5L591.2,234.5L593,234.4L590.5,238L590.6,249.6L592.1,252.1L590.4,253.2L589.7,254.8L588.5,255.2L588.2,257L587.5,258L586.5,260.8L585.8,261.5L582,258.3L581.6,256.3L571.7,250Z","KZ":"M602.1,106.4L602.1,106.4L602.1,106.4ZM602.4,106L602.4,106L602.4,106ZM607.8,104.7L607.8,104.7L607.8,104.7ZM654.9,114.5L650.9,117.2L650.1,118.7L650.3,119.4L648.8,118.9L648.3,117.7L645.5,117.9L644.1,115.3L642.9,115.2L642.4,112.2L641.7,112.5L640.6,111.2L638.9,109.9L637.9,110.4L634.8,110.2L631.9,110.6L628.8,107.8L622.3,104.4L621.7,104.3L616.1,106L618.6,117.3L617.5,117.5L615.5,115.5L613.4,114.2L611.3,114.6L609.7,115.9L609.3,112.9L607.7,112.6L605.9,111.6L605.7,110.6L604.1,108.4L602.6,107.8L602.8,107.1L605.6,107.4L604.3,106.5L604.8,104.9L609.1,104.9L608,104.2L608.4,102.3L608.2,100.8L607.4,100L605.4,100.3L603.1,99.5L598.9,101.8L597.2,101.1L597.9,100.5L595.3,97.5L593.3,97.6L592.3,95.9L591.4,95.5L591.2,94.3L591.8,93.4L591.1,92.6L591.8,89.9L592.6,89.5L594.7,91.2L595.5,90.6L594.6,88.8L596.1,88.1L596.3,87.4L597.9,86.8L598.9,85.5L600.4,86.2L602.5,85.6L603.2,86.2L605,86.2L608.8,88.7L608.5,87.6L611.5,88.9L612.8,87.6L614,87.5L615.2,88L615.9,87.4L617.2,87.5L618.7,88.6L621,88.9L621.2,88.2L623.6,88.6L624.5,88.1L624.6,87L623.9,86.3L621.6,85.7L620.4,84.7L622.1,83.5L621.4,82.4L621.8,81.8L623.9,81.9L623.9,81.4L621.8,80.8L622.4,80.1L621,79.8L621.4,78.6L622.9,78.9L628.3,77.6L630,77.6L630.4,76.9L635.3,76.1L637.6,74.6L640.6,75.3L641.8,74.9L643.6,76.9L643.8,78.1L646.4,77.9L650,78.9L649.9,80.3L652.1,79.8L654.4,78.4L656.7,77.4L656.7,78.9L660,80.6L662.6,82.8L666.3,86.2L668.3,88.3L668.9,87.1L669.8,86.8L671.8,88.5L674.3,88.5L676,87.7L677.6,88.3L679.2,90L681,90.5L682,91.7L684.4,92.2L685.3,91.9L687.7,93.5L686.4,93.7L686.5,95.1L684.7,95.6L684.7,97L685.8,99L684.2,100.3L680,99.2L679.7,99.7L679.6,104.1L680.4,105.6L678.3,104.9L674.7,105.9L675.9,106.7L676.3,108.7L678.3,111.6L677.2,113.2L677.8,114.6L675.7,113.8L674.6,112.8L669,112.2L666.2,112.3L665.9,112.7L663.8,112.2L662.1,111.4L660.7,112.1L661,114L657.7,112.9L655.2,113Z","JO":"M571.7,144.2L573.3,145.3L574.4,145.5L579.1,142.2L580.5,146.2L580.1,146.5L575.1,148.1L578,151.3L576.8,152.9L575,153.3L573.3,155.4L570.5,154.9L570.5,154.2L571.2,148.2L571.2,145.3Z","JP":"M817.4,133.3L817.4,133.3L817.4,133.3ZM827.7,128.3L827.7,128.3L827.7,128.3ZM823.7,139.4L823.7,139.4L823.7,139.4ZM817.3,152L817.3,152L817.3,152ZM818,151.6L818,151.6L818,151.6ZM813.8,145.8L813.8,145.8L813.8,145.8ZM809.5,139.9L809.5,139.9L809.5,139.9ZM809.5,139.1L809.5,139.1L809.5,139.1ZM809.5,144.1L809.5,144.1L809.5,144.1ZM814.3,145.2L814.3,145.2L814.3,145.2ZM822.5,104.9L822.5,104.9L822.5,104.9ZM823.4,105.6L823.4,105.6L823.4,105.6ZM824.1,115L824.1,115L824.1,115ZM822,138.7L822,138.7L822,138.7ZM834.7,138L834.7,138L834.7,138ZM810.5,143.9L810.5,143.9L810.5,143.9ZM811.1,142.7L811.1,142.7L811.1,142.7ZM811.3,141.1L811.3,141.1L811.3,141.1ZM818,139.9L818,139.9L818,139.9ZM817.4,140.4L817.4,140.4L817.4,140.4ZM813.5,147.6L813.5,147.6L813.5,147.6ZM851,163.5L851,163.5L851,163.5ZM831.3,108.7L834,109.2L834.6,108L835,109.8L837.1,111.6L835.3,112.3L834.2,112.2L833.3,113.4L833.5,115.2L829.1,113.4L827.4,114.2L825.8,113.5L825.7,114.2L828.6,115.8L827.4,115.8L826.8,117L825.9,115.5L824.4,114L824.2,113.2L825,112L824.3,111.2L826.7,111.5L826.2,109L825.3,106.8L824,105.5L824.2,104.4L827.3,106.5ZM815,141.5L816,141.4L816.3,142.5L817.2,142.6L817.9,143.9L817.6,144.7L817.9,148.4L816.6,149.6L815.1,148.8L814.2,146.3L814.8,144.6L813.6,143.1L812.6,144.3L811.3,142.7L814.1,140.7ZM822.3,139.5L823.1,139.6L823.8,140.8L823.1,142.6L821.4,141.8L820.7,142.3L820.5,143.9L819.7,144.1L818.4,142L818.6,140.3L820.6,140.2L821.5,139.1ZM829.5,117.2L830,117.1L831.3,119.6L833.9,122.1L834.7,124.2L834.3,124.7L834.7,126.5L833.9,126.7L834,127.9L835.5,130.8L835.3,132.4L835.9,133.8L837,134.8L836.2,135.5L836.4,136.6L835.7,137.4L834.4,135.1L834.6,136.7L833.5,136.2L833.4,138.3L832,136.8L831.7,138.4L828.1,137.7L827.3,138.1L828.6,139.2L827.5,139.7L827.2,141.6L826,141.7L824.2,139.4L824.6,138.7L822.7,137.9L819.2,139.3L817,139.5L817.2,140.8L815.9,140.1L813.9,140.3L813.6,139L814.5,139L817.1,135.5L820.3,135.4L822.5,134.8L824.1,135.5L824.8,134.7L824.3,134L825,131.7L824.5,129.7L825.5,129.2L825,130.3L825.7,131.4L828.5,130.2L829,128.2L829.9,127.3L829.6,123.3L829.1,122.2L828.1,121.7L828.2,120.5L827.5,119.6L828,118.8L827.7,117.6L828.9,118.7L830,118.7L829.7,117.6L828.8,117.9L828.6,116.8ZM806,170.1L806,170.1L806,170.1ZM805.2,170.8L805.2,170.8L805.2,170.8ZM808.9,169.4L808.9,169.4L808.9,169.4ZM814.6,163.4L813.4,164.1L814.4,162.6ZM815.6,160L815.6,160L815.6,160ZM816.3,158.5L816.3,158.5L816.3,158.5ZM816.1,158.8L816.1,158.8L816.1,158.8ZM837.8,143.2L837.8,143.2L837.8,143.2Z","JM":"M274.8,189.1L277.1,190.1L277.4,190.8L275.7,190.6L274.6,191.4L273.2,190.9L272.2,189.1Z","IT":"M497,103.1L498.9,103.1L500.2,101.5L501.7,103.4L502.4,101.4L504,101.8L505.2,100.2L509.3,99.6L509.9,100.7L513.1,101.3L513.3,104.1L513,103.6L509.8,104.6L510.5,106.1L509.8,106.8L510.3,108.4L513.1,110.2L514.5,113.1L517.4,115.4L519.4,115.4L519.6,117L522.4,118.2L524.6,119.4L526,121.1L525.7,122L524.4,120.6L522.1,120L521.2,121.9L522.7,123.4L523,124.6L521.5,125.5L521.5,126.4L520.3,127.9L519.5,127.9L520,125.5L520.6,125.3L519.1,121.5L517.2,120.7L516.7,119.4L515,118.9L514,117.6L512.4,117.6L511.3,116.9L508.7,114.3L506.3,112.3L504.6,109L501.4,107.7L499.8,109.3L498.3,109.8L498.8,108.8L496.8,108L497.1,106.8L496.1,105.6L497.4,104.7L496.5,103.8ZM510.7,115.6L510.7,115.6L510.7,115.6ZM510.5,109.3L510.5,109.3L510.5,109.3ZM505.6,112.6L505.6,112.6L505.6,112.6ZM514.6,119.3L514.6,119.3L514.6,119.3ZM510.4,131.6L510.4,131.6L510.4,131.6ZM519.1,127L518,129.4L518.6,130.8L518.2,131.8L516.6,131.5L511.3,128.3L512,127.1L514.4,127.7ZM503.9,118.7L504.3,119.7L504,123.5L502.6,123.8L502.2,124.9L501,123.9L501.3,122L500.4,118.6L501.3,118.8L502.9,117.6ZM501.2,124.4L501.2,124.4L501.2,124.4ZM500.5,118.2L500.5,118.2L500.5,118.2Z","IL":"M571.7,142L571.7,144.2L571.2,145.3L570.2,144.9L569.7,146L570.5,147.3L569.7,148.4L571.2,148.2L570.5,154.2L570.3,154.5L568.2,149L568.7,147.8L569.8,143.1L570.6,143.2Z","PS":"M568.7,147.8L568.2,149L568,148.7ZM571.2,145.3L571.2,148.2L569.7,148.4L570.5,147.3L569.7,146L570.2,144.9Z","IE":"M457,79L457,79L457,79ZM463.5,75.5L461.3,77.5L463,78.4L463.8,77.5L464.7,78.5L465.7,78.5L466,81.9L465.3,83.9L462.4,84.4L459.4,85.9L456.9,86.2L457.2,85.2L455.7,85.1L456.8,84.3L455.7,84.3L457.6,83L458.4,81.4L456.6,80.1L457.3,78.4L456.8,78L460.3,78L461.3,76.8L459.9,76.7L461.1,75.3Z","IQ":"M586.8,130.5L587.7,129.7L589.6,130.1L591.2,130L591.7,130.9L592.8,130.4L594.8,133.9L597,134.5L596.6,135.6L597.2,136.7L596.2,137.8L595.8,140.4L597.2,141.5L598.7,143.6L601.5,145.2L602.9,147.2L602.8,149.7L603.7,149.7L603.9,151.4L605.5,153L604,152.9L601.8,152.8L600.6,155.7L595.8,155.3L588.4,149.4L583.7,146.7L580.5,146.2L579.1,142.2L583.6,139.2L584.8,137.8L584.8,135.1L584.4,133.8L584.6,132.4L585.5,132.1Z","IR":"M626.5,162.5L626,163.2L624.4,163.4ZM615.8,129.8L617.8,129.3L618.4,128L619.5,127.4L621.2,127.5L621.6,126.9L623.5,127L624,127.7L627,128.8L629.2,129.2L632.4,132L634.3,132L635.3,135.2L635.1,138.2L634.2,140L634.5,141.4L635.6,141.8L634.9,143L636.1,145.8L636.5,148.2L638.7,148.5L639.3,150.2L637.3,153.3L638.8,154.8L640.6,157.4L643,158.3L643.5,161.4L645,161.9L644.8,163.3L643,163.7L641.6,164.7L641.3,167.9L634.5,167.2L629.9,166.1L628.6,162.6L626.8,161.6L625.1,162.3L623.3,163.7L620.1,163.1L617.2,161.3L616.6,160.3L614.4,159.6L613.2,158.7L611.8,155.8L609.7,153.1L609.3,152.2L608.1,152.7L606.7,151.9L605.5,153L603.9,151.4L603.7,149.7L602.8,149.7L602.9,147.2L601.5,145.2L598.7,143.6L597.2,141.5L595.8,140.4L596.2,137.8L597.2,136.7L596.6,135.6L597,134.5L594.8,133.9L592.8,130.4L592,128.5L591.1,128L591.4,126.6L589.9,123.4L591.8,122.6L594,124.7L595.4,125L596.3,124.9L599.2,122.6L600.6,123.3L600.2,125.2L601.8,126.4L602.5,126.4L603.4,128.8L606.2,129.6L607.4,130.8L609,131.7L611.8,132L614.7,131.3L616.2,131.4Z","ID":"M743.1,242.3L744.4,243.8L743.7,245L742,242.4ZM747.7,252.4L746.2,250.6L746.9,249.7L747.9,251.9ZM793.8,273.7L793,274.7L792.3,273.2L793.3,272.5ZM790.7,272.3L791.3,273.1L789.9,274.4L788.1,272.2ZM766.2,252L767.1,254.5L768.3,254.9L767.8,256.4L766,255.7L765.5,253.6L763.8,253.2L765,251.6ZM812.2,261L811.6,263L812.2,263.3L811,264.5L810.5,264.1L811.6,260.7ZM810.7,263.3L809.7,263.4L810,261.7L810.9,261.3ZM772.2,235.3L771.3,234.2L772.4,234.4ZM772,256.2L770.4,256.9L770.6,254.8L771.7,254.9ZM845.5,248.9L846.8,249.1L848.1,250.3L846.7,250.3ZM845.7,251.8L849.5,252.5L848.3,252.7ZM833.1,246.8L834.4,247.3L833.7,248L831.6,247.5ZM826.7,240.4L826,239.7L827.1,238.7ZM825.9,252L823.9,252L824.6,251ZM820.2,254.5L820.2,254.5L820.2,254.5ZM820.2,252.4L820.2,252.4L820.2,252.4ZM817.3,252.2L818.3,252.5L815.8,253.1L815.7,252.1ZM833.5,271.8L832.9,271.4L834.5,269.1L834.6,270.1ZM821.4,270.8L820.4,271.7L818.6,271.8L819.1,270.8ZM815.3,272.3L816.6,272.9L814.8,273.2ZM833.6,250.9L832.7,249.8L833.8,249.9ZM740.2,230.5L742.7,230.5L744,231.6L745.2,234.1L749.1,236.9L751.1,239.8L752.3,240.7L752.7,239.8L753.9,241.5L754.7,241.8L756.6,244.4L759,245.2L760.2,246.7L759.2,247.4L760,249.6L761.7,250.1L762.1,252.5L763,253.4L762.6,254.9L763.4,254.2L764.9,254.6L766.1,256.5L765.6,258.1L765.5,262.5L765.2,264.6L764,264.2L763.2,264.8L762.1,264.1L761.9,265.3L760,262.7L756.6,259.8L755.5,258.1L754.1,256.7L752.2,253.5L752.2,252.9L750.8,249.4L748.9,246.5L747.7,245.7L746.7,242.2L746,240.9L743.7,239.5L743.4,237.9L741.6,235.7L740.2,234.9L737.5,232L736.7,229.5L737.8,229.3ZM810.3,273.7L807.2,274.6L804.3,274.3L802.5,274.5L802.7,273.2L804.6,272.6L806.9,273.7L808.2,273.2L808.9,273.8L810.6,272.8ZM802.7,276.1L804.7,278.2L803.5,279L801.4,277.4L800.1,277.2L800.4,276.1ZM798.2,272.8L800.2,272.9L800.5,273.9L794.8,275.3L794.1,275L794.3,273.5L796.3,273.2L796.9,274L798.1,273.7L796.9,272.3ZM817.1,243.7L815.9,245.4L814.1,245.9L812.3,245.3L806.7,245.5L805.2,245.2L804,247.4L804.2,248.9L805.7,251.1L806.7,251.2L808,249.5L813.1,248.9L813,250L811.5,249.9L810.7,251L808.5,252.6L807.5,252.9L808.9,254.1L810.3,256.8L809.8,258.1L811.5,259.7L811.5,260.4L809.6,260.9L808.8,262L807.6,261.1L808.1,259.6L806.2,257.9L806.7,255.4L805.6,255.2L804.5,256.4L804.9,258.4L804.7,261.6L804.3,262.9L804.6,264.3L802.7,264.6L801.8,263.8L802.7,259.4L802.2,257.7L800.7,257.4L800.6,255.5L802.1,252.9L802.1,251.2L803.2,249L803.2,247.1L804.1,244.7L804.8,243.8L805.6,244.2L806.4,242.8L808.2,243.5L810.5,243.7L811.7,244.2L814.3,244.2L815.5,243.6L817.4,241.5L818,242.1ZM769.4,265.6L770.1,266.2L771.8,266.4L772.8,268L777.4,268.5L778.4,267.1L783.1,268.5L783.7,270.4L784.9,270.9L787.1,270.7L788.1,271.5L787.8,273.1L788.2,274.2L784.8,272.7L783.2,273.1L777.7,272.3L775.7,271.3L772.8,270.8L771.9,271.2L768.9,270.2L766.7,269.8L766.9,268.9L764.2,268L765.9,265.3L767.9,265.9ZM775.9,240.5L776,241.8L778.3,244.1L779.5,243.7L781.7,243.7L782.8,242.3L784.9,241.9L786.7,243L787.5,242.4L789.2,242.3L789.8,239.8L790.8,239L790.6,238L791.5,237.4L791.8,234.5L792.6,233.2L795.8,233.3L797.1,233.8L797.7,235.3L796.1,235.5L798.6,239.6L797.9,240.5L801.2,243.8L800,244.3L798.3,243.4L797.3,246.1L797.4,249.1L793.8,252.4L794.5,254.7L792.8,258.1L789.4,259.9L789,257.4L787,257.6L785,256L783.8,257.5L781.7,257.9L781.7,256.4L780.5,256L779.3,256.4L777.6,256.2L777,251.2L776.4,250L775,249.1L775,246.7L774.1,245.7L774.4,242.2ZM824.8,244.2L826.1,242.5L827.4,241.9L827.4,243.4L826.2,244.5L828,246.2L825.5,245.4L825.5,247.6L826.2,249.1L824.7,247.6L824.5,244.2L824,242.9L824.5,241.1L825.2,241.1L825.5,242.7ZM830.1,255.8L831.8,256.2L833.1,258L832.9,258.9L830.3,257.2L829.3,257.6L827.4,257.1L826.5,257.5L825,256.9L825.9,255.8L829.3,255.5ZM822.3,256.5L823.3,258.2L821.8,258.8L820.5,258.1L820.1,256.7ZM816,274.8L816.2,276.6L814.3,278.5L812.1,279L812.5,276.9L813.5,276L814.6,275.5ZM843.2,264.7L843.1,266.1L842.3,266.6L841.5,265.8L842.9,263.8ZM842.5,267L841.9,268.1L841.1,268L841.4,266.2ZM852.8,272.7L850.5,273.1L851.6,270.7L853.7,269.9L854.2,270.9ZM860.4,255L859.1,275.3L856.6,272.1L853.7,272.3L854.5,270.5L853.3,268.5L854.1,268.3L853,266.6L852.2,263.9L849.7,262.2L846.7,261L844.6,260.7L843.4,259.2L841.4,258.8L840.6,257.3L839.4,259.5L838.7,259.6L838.2,257.1L836.1,255.5L838.2,255.5L839.5,254.4L840.6,254.8L841.5,253.4L838.8,253.9L837.1,253.8L836.1,251.7L833.6,251.3L834.3,249.5L836.7,248.3L838,248L840.3,249.1L841.7,249.2L842.4,251.1L842.1,253.7L842.8,255.7L843.3,254.8L844.4,257.2L845.6,257.3L847.7,254.9L848.1,253.9L850.2,253.2L850.1,252.6L852,251.5L854.2,252.4L857.3,254.2ZM853.7,273L853.7,273L853.7,273ZM754.5,240.3L754.5,240.3L754.5,240.3ZM756.5,243.7L756.5,243.7L756.5,243.7ZM756.7,242.3L756.7,242.3L756.7,242.3ZM758.1,244.5L756.6,244.1L756.8,243.3ZM758.5,244.1L758.5,244.1L758.5,244.1ZM758.8,245.1L758.8,245.1L758.8,245.1ZM759.3,244.8L759.3,244.8L759.3,244.8ZM760.8,243.1L760.8,243.1L760.8,243.1ZM762.3,243L762.3,243L762.3,243ZM762.9,247.4L762.9,247.4L762.9,247.4ZM762,247.9L762,247.9L762,247.9ZM760,247.9L760,247.9L760,247.9ZM776.1,250.5L776.1,250.5L776.1,250.5ZM786.6,269L785.6,269.4L783.7,269.1L784,268.4L787,268.3ZM844.3,250.3L844.3,250.3L844.3,250.3ZM823.5,248.4L823.5,248.4L823.5,248.4ZM824.4,247.8L825.2,249.4L824.1,249.4L823.7,247.9ZM838.3,265.3L838.3,265.3L838.3,265.3ZM837.9,265.1L837.9,265.1L837.9,265.1ZM826.1,258.3L826.1,258.3L826.1,258.3ZM822.1,234.2L822.1,234.2L822.1,234.2ZM819,236.1L819,236.1L819,236.1ZM832.1,272.8L832.1,272.8L832.1,272.8ZM829.5,271.7L829.5,271.7L829.5,271.7ZM824,272.1L824,272.1L824,272.1ZM831.8,252.1L831.5,253.2L830.2,252.7ZM756,263.9L756,263.9L756,263.9ZM751,256.8L751,256.8L751,256.8ZM750.4,255.4L750.4,255.4L750.4,255.4ZM749.5,254.1L749.5,254.1L749.5,254.1ZM745.8,248.5L745.8,248.5L745.8,248.5ZM740.3,239.5L738.6,238.5L738.5,237.7ZM809,263.8L809,263.8L809,263.8ZM812.6,250.5L811.7,251.8L811.8,250.5ZM809,248.1L809,248.1L809,248.1ZM804.8,266.5L804.8,266.5L804.8,266.5ZM790.8,268.6L790.8,268.6L790.8,268.6ZM793.8,258.9L793,258.4L793.7,257ZM810.1,280.9L810.1,280.9L810.1,280.9ZM814.4,272.8L814.4,272.8L814.4,272.8ZM813.5,272.7L813.5,272.7L813.5,272.7ZM811.8,272.9L811.8,272.9L811.8,272.9ZM842.9,267.3L842.9,267.3L842.9,267.3ZM759.2,243.6L759.2,243.6L759.2,243.6ZM760.3,244.3L760.3,244.3L760.3,244.3ZM761.4,244.2L761.4,244.2L761.4,244.2ZM762.6,246.6L762.6,246.6L762.6,246.6ZM766.8,237L766.8,237L766.8,237ZM765.4,237.9L765.4,237.9L765.4,237.9ZM773.8,237.8L773.8,237.8L773.8,237.8ZM774.1,251.9L774.1,251.9L774.1,251.9ZM770,255.9L770,255.9L770,255.9ZM768.4,256.2L768.4,256.2L768.4,256.2ZM788.1,269.1L788.1,269.1L788.1,269.1ZM783.8,265L783.8,265L783.8,265ZM763.6,267.6L763.6,267.6L763.6,267.6ZM742.7,240.4L742.7,240.4L742.7,240.4ZM737,228.7L737,228.7L737,228.7ZM813.6,252.2L813.6,252.2L813.6,252.2ZM812.4,259.7L812.4,259.7L812.4,259.7ZM814.3,252.9L814.3,252.9L814.3,252.9ZM812.4,252.5L812.4,252.5L812.4,252.5ZM801.4,274.1L801.4,274.1L801.4,274.1ZM800.4,272.6L800.4,272.6L800.4,272.6ZM791,274.2L791,274.2L791,274.2ZM797.3,233.8L798,233.8L797.3,233.8ZM797.5,236.6L797.5,236.6L797.5,236.6ZM814.3,265.5L814.3,265.5L814.3,265.5ZM813.3,263.3L813.3,263.3L813.3,263.3ZM805.3,269.1L805.3,269.1L805.3,269.1ZM796.3,273L796.3,273L796.3,273ZM794.1,257.7L794.1,257.7L794.1,257.7ZM823.8,244.4L823.8,244.4L823.8,244.4ZM842.7,253.5L842.7,253.5L842.7,253.5ZM840.3,260.1L840.3,260.1L840.3,260.1ZM833.4,249.3L833.4,249.3L833.4,249.3ZM832.6,248.5L832.6,248.5L832.6,248.5ZM829.7,247.4L829.7,247.4L829.7,247.4ZM824.1,246.9L824.1,246.9L824.1,246.9ZM824,244.8L824,244.8L824,244.8ZM823.6,249.3L823.6,249.3L823.6,249.3ZM827.3,257.9L827.3,257.9L827.3,257.9ZM826.9,258L826.9,258L826.9,258ZM821.8,234.7L821.8,234.7L821.8,234.7ZM822.2,235.1L822.2,235.1L822.2,235.1ZM818.4,238.6L818.4,238.6L818.4,238.6ZM835.4,269.3L835.4,269.3L835.4,269.3ZM826.5,269.3L826.5,269.3L826.5,269.3ZM823,270.6L823,270.6L823,270.6ZM811.5,279L811.5,279L811.5,279ZM807.3,279.9L807.3,279.9L807.3,279.9ZM843.3,266.9L843.3,266.9L843.3,266.9ZM842.8,267.9L842.8,267.9L842.8,267.9ZM825.4,256L825.4,256L825.4,256ZM824.3,257.2L824.3,257.2L824.3,257.2ZM810.9,273.5L810.9,273.5L810.9,273.5Z","IN":"M659.1,172.2L660.5,171.8L660.4,170.9L663,171.2L665.1,170.4L666.4,170.4L666.3,169.5L664.9,167.2L663.1,165.2L663.1,163.9L661.2,162.9L661.3,161.7L663,159L664.4,160L666.8,159.2L667.6,156.8L668.9,155.9L669.7,153L670.7,152.5L670.7,151.5L672.2,149.6L671.5,147.5L673.3,145.7L671.4,144.9L669.2,142.6L669.4,141.8L668,139.2L669,137.9L672.7,138.7L674.8,137.9L675.7,136.8L677.3,135.6L679.2,138.2L681.2,139.5L680.8,140L681.3,141.8L682.3,142.7L683.1,145L682.4,145.4L680.9,144.9L682.2,146.7L682.6,148.7L683.5,148.4L685,149.9L686.7,150.4L686.9,151L689.2,152.3L688.2,153.2L687.6,156.5L690.8,158.1L692.8,159.5L696.9,161.1L698.9,160.7L700.4,161.3L700.7,162.1L702.5,163.1L707.9,164.3L709.9,164.1L709.3,161.9L709.1,159.5L710.3,158.8L711,159.5L711.5,161.3L711.6,162.4L714.2,163.2L715.6,162.6L716.7,163L720,162.7L719.5,160.9L718.4,159.9L720.9,159.3L721.9,157.3L723.5,156.6L725,155L727.3,155.8L728.6,154.6L730.5,156.7L730.8,157.7L732.8,158.4L732.3,160.1L732.9,162L731.7,161.2L730.2,161.6L728.2,163.5L728.6,165.3L727.6,167.8L728.1,168.4L727.3,172.1L725.1,171.6L725.7,174.4L725.2,175.7L725.3,178L724.2,178.1L722.5,172.7L721.2,174.9L720.3,174.5L719.7,173L719.9,171.4L721.2,171.1L722,168.5L721.1,168L716.9,168.1L715.2,167.6L714.8,165.6L714.1,164.7L713.3,165.3L712.4,164.1L711,163.8L710.3,165.8L712.3,167L712.8,167.9L711.7,168L710.8,169.7L712.9,170.8L712.8,172.7L713.9,174.7L714.9,177.7L715.1,179.1L712.5,179L712.5,177.6L711.5,179.1L710,179.6L709.5,180.4L710.1,182.1L708.6,184.5L706,185.8L703.5,189.6L699.2,193.9L699.2,195.1L698,195.8L696.7,195.8L696.1,197.6L695.1,197.1L694.3,197.7L693.8,199.7L694.2,202.4L695.1,205.1L695,207.2L694.1,209.4L694.5,214.6L693.3,214.6L692.3,216.6L692.4,217.9L690.3,219.1L690,220.6L688.6,221.6L687.1,220.6L685.9,219L685.2,217.3L685.2,215.8L683.2,211.3L681.6,209.2L680.2,206L678.8,201.5L677.5,199.7L677.4,198.7L676,196.6L673.5,188.4L672.6,184.8L672.9,182.5L671.8,179.7L672.8,178.9L671.5,178.9L671.8,178.1L670.7,177.4L670.1,178.5L670.8,179.5L670.3,180.6L667.9,181.9L666.4,181.6L665.1,180.6L662,177.4L664.9,176.2L665.4,174.9L663.5,175.6L660.6,174.3ZM732.9,225.5L732.9,225.5L732.9,225.5ZM732.4,223.9L732.4,223.9L732.4,223.9ZM730.6,221.1L730.6,221.1L730.6,221.1ZM731.5,222.2L731.5,222.2L731.5,222.2ZM731.8,221.7L731.8,221.7L731.8,221.7ZM729.5,218.3L729.5,218.3L729.5,218.3ZM728.4,213.9L728.4,213.9L728.4,213.9ZM728.7,211.3L728.7,211.3L728.7,211.3ZM728.8,210.8L728.2,209.7L728.5,208.2L728.6,205.1L729.2,207.7ZM729.4,209.2L729.4,209.2L729.4,209.2ZM728.4,206.6L728.4,206.6L728.4,206.6ZM675.3,211.8L675.3,211.8L675.3,211.8ZM676.6,221L676.6,221L676.6,221Z","IS":"M447.3,43.9L448.8,43.5L448.2,44.2L449.1,44.5L448.7,45.2L451.2,45.9L451.1,47.2L449.1,48.7L445.6,49.7L444.3,50.4L441.8,50.8L439.9,51.7L436.6,51.3L434.5,50.2L431.4,50.5L433.8,48.9L432.2,47.9L428.9,47.7L431.5,47.2L433.5,47.2L432.4,46.7L433.8,46.1L431.6,45.7L429.4,46.2L428.3,45.9L429.1,45.2L430.9,45.2L430,44.4L430.9,44.1L431.5,44.6L432.8,44.4L431.5,43.6L432.9,43.4L434.9,44.5L434.7,46L435.2,46.6L436.2,45.5L436.8,45.7L437.1,44.5L438.7,45.2L439.2,44.4L440.5,44.1L441.8,45L441.5,44.1L443,44.7L443.9,44L445.3,44L445.3,43.3L446.5,43.2Z","HU":"M532.8,95.5L534.8,96.9L533.4,97.6L530.8,102.1L528.9,102.5L527.2,102.4L525.8,103.1L524.7,103.6L523.1,103.5L519.8,101.3L518.8,100.2L519.6,99.8L519.7,97.5L520.9,97.7L521,96.7L522.6,97.5L524.9,97.4L525,96.8L527.6,96.4L528.9,95.2L531.2,95.1Z","HN":"M257.9,200L254.1,201.1L252.9,200.7L250.5,203.6L249.9,202.9L249,203.8L247.9,203.8L247.9,205.2L246.1,206.3L245.8,205.1L244.9,205L245.3,203.7L244.2,203.1L243.4,203.5L241.1,201.8L241.6,200.4L244.6,197.7L246.3,197.1L249.6,197.5L251.2,196.8L253.4,196.8L255.2,197.4L256.3,199.3L256.7,198.8ZM249.6,195.6L249.6,195.6L249.6,195.6ZM251.1,195.4L251.1,195.4L251.1,195.4Z","HT":"M289.8,185.2L289.9,187L288.8,188.7L289.2,190.4L288.5,189.8L286.3,190.1L285,189.8L283.6,190.4L282.1,189.1L282.9,188.5L286.6,189.2L287.9,188.4L286.8,187.2L287.2,186L285.5,185.3L286.9,184.5ZM286.7,188.1L286.7,188.1L286.7,188.1ZM287.5,184.2L287.5,184.2L287.5,184.2Z","GY":"M316.2,230.6L314.6,228.4L315.3,227.4L315.3,225.9L316.4,225.7L317.5,224.6L316.5,223.4L317.1,222.4L319,220.9L318.5,220.1L320.7,221.6L322.5,223.9L322.1,226.5L322.7,225.4L323.8,225.6L325.8,227.5L325.8,229.5L325.4,231.2L324.4,231.2L323.4,233.8L324.7,236.4L325.4,236.3L325.6,237.8L327,240.5L327.6,240.8L325.8,240.5L324.5,241.5L322.5,241.9L322.1,242.8L320.1,242.5L318.7,240.9L318.1,238.4L318.5,235.6L319.4,234.5L319,233.2L317.9,232.7L318.3,231Z","GW":"M435.2,208.2L438.3,207.8L439.3,207.2L443.2,207.2L442.6,208.8L443.2,210.2L440.6,210.9L439.6,212.6L438.7,211.8L438.6,209.5L437.6,210.1ZM436.7,212.3L436.7,212.3L436.7,212.3ZM437.3,212.2L437.3,212.2L437.3,212.2ZM437.8,211.8L437.8,211.8L437.8,211.8ZM438.3,210.8L438.3,210.8L438.3,210.8ZM437.3,211L437.3,211L437.3,211ZM437.1,209.7L437.1,209.7L437.1,209.7Z","GN":"M452.3,220.3L451.2,220.8L451.8,219.7L451.3,217.7L449.9,215.7L446.4,216L445.7,217.6L444.3,218.6L443.2,215.8L441.2,214.8L440.3,212.7L439.6,212.6L440.6,210.9L443.2,210.2L442.6,208.8L443.2,207.2L447.1,208.3L449.5,208.1L449.7,209.3L450.7,208.7L451.4,209.7L452.5,208.7L453.7,209.2L455.8,208.1L456.3,210.4L457.4,211.3L456.8,212.3L457.6,212.5L457.8,214.1L458.5,215.1L458.1,217.2L459.1,218.5L458.6,219.4L459.3,220.6L457.8,220.4L458.4,221.4L457.8,223.2L457.2,223.2L456.1,224.1L454.5,223.7L454.4,220.8L453.7,220.2Z","GT":"M233.5,201.4L233.9,198.9L235.3,196.6L238.8,196.6L239,195.6L236.7,192.9L237.8,192.9L238,191.1L242.9,191.1L241.9,197.1L242.9,197.2L244.6,197.7L241.6,200.4L241.1,201.8L238.9,203.9L236.2,203.3Z","GD":"M314.5,209.3L314.5,209.3L314.5,209.3Z","GR":"M550.4,132.2L550.4,132.2L550.4,132.2ZM531.7,126.5L531.7,126.5L531.7,126.5ZM532.5,128.3L532.5,128.3L532.5,128.3ZM531.8,125.8L531.8,125.8L531.8,125.8ZM532.1,126.7L532.1,126.7L532.1,126.7ZM530.1,123.2L530.1,123.2L530.1,123.2ZM538.6,124.7L540.4,125.6L540.9,127L539.6,126.5L538.2,125.2ZM539.4,124.2L539.4,124.2L539.4,124.2ZM539.7,124.1L539.7,124.1L539.7,124.1ZM541.8,125.2L541.8,125.2L541.8,125.2ZM541.5,119.6L541.5,119.6L541.5,119.6ZM539.2,127.9L539.2,127.9L539.2,127.9ZM538.3,133.4L538.3,133.4L538.3,133.4ZM548.9,135.7L548.9,135.7L548.9,135.7ZM548.1,131L548.1,131L548.1,131ZM548,131.7L548,131.7L548,131.7ZM544.4,131L544.4,131L544.4,131ZM543.7,130.6L543.7,130.6L543.7,130.6ZM544.4,132.8L544.4,132.8L544.4,132.8ZM544.1,131.9L544.1,131.9L544.1,131.9ZM547.4,128.3L547.4,128.3L547.4,128.3ZM545.5,129.2L545.5,129.2L545.5,129.2ZM545.3,131.5L545.3,131.5L545.3,131.5ZM546.8,132.1L546.8,132.1L546.8,132.1ZM541.3,129L541.3,129L541.3,129ZM541.5,129.8L541.5,129.8L541.5,129.8ZM541.9,131.6L541.9,131.6L541.9,131.6ZM542.8,129.3L542.8,129.3L542.8,129.3ZM542.8,128.5L542.8,128.5L542.8,128.5ZM543.5,129L543.5,129L543.5,129ZM542.4,131.1L542.4,131.1L542.4,131.1ZM545.5,127L545.5,127L545.5,127ZM546,123.6L546.5,124.5L544.6,124ZM543.8,120.1L543.8,120.1L543.8,120.1ZM543.4,121.5L543.4,121.5L543.4,121.5ZM544,129.5L544,129.5L544,129.5ZM541.8,130.5L541.8,130.5L541.8,130.5ZM550.5,134.2L550.1,133.4L551.4,132.6ZM540.5,135.4L541.7,136L544.7,136.2L546.7,137L543,137.3L542.8,136.8L539.7,135.8ZM545,116.1L545.9,117.1L544.6,119.2L542.2,118.4L539,119.1L539.3,120.2L538,120.8L536.2,119.9L536.3,121.4L538.2,123.7L537.1,123.8L536.5,124.9L540.1,126.9L540.5,128.6L539.2,127.7L537.9,128.1L539.1,129.5L538.3,129.8L537.2,129.2L538,130.8L536.5,132.4L535.7,130.8L535.3,131.7L534.4,130.6L534.3,129.2L533.1,128.2L533.7,127.1L534.7,126.7L537.6,127.8L538.1,127.2L536.2,126.3L532.9,126.5L532,124.6L529.9,122.4L530.8,122.1L532.2,119.5L532,118.8L533.5,118.8L534.3,118L535.7,118L536.7,117.3L540.6,116.6L542.5,117.6L544.7,117.2Z","GH":"M479.8,212.1L479.8,213.6L481,214.7L480.6,217.3L481.4,217.5L481,219.5L481.9,220.9L481.4,225.4L483.2,227.8L482.6,228.7L480.7,228.9L477.9,230.5L474.6,232L471.6,230.9L471.7,230.8L471.9,230.8L472.4,230.7L471.4,227L471.3,225.6L472.5,222.1L473.3,221.2L472.6,218.6L472.8,217.2L472.4,212.5L478.1,212.5Z","DE":"M502.9,98.2L500.7,97.5L500.2,98L498.3,98L498.1,96.6L499.4,93.8L497.7,93.3L496,93.2L495.1,92.3L495.4,91.3L494.5,90.3L495,89.7L494.1,88.4L493.9,87.7L494.5,86.2L493.9,85.4L495.8,84.9L496.4,83.5L496.7,80.8L496.8,79.7L498.5,79.6L499.7,80.2L499.9,79.1L500.7,78.9L499.9,77.5L500.6,77.1L499.9,76L502.4,76.3L503.3,77.3L505.3,77.6L505.2,78.7L506.3,78.9L507.9,78.2L508.9,77.3L511.6,78.3L513,79.5L513.4,80.8L512.8,82.1L514,83.1L514.2,85.2L515.3,86.9L514.9,88.1L513.8,88L509.4,89.6L508.9,90.4L510,92.3L512.9,94.4L512.6,95.2L510.6,96.3L511.2,98.4L509.3,97.6L506.4,98.6L505,98.2L504.8,98.9ZM511.6,77.6L510.8,78L510.8,76.7ZM512.8,78.9L512.8,79.1L512.8,78.9ZM506,77.5L506,77.5L506,77.5ZM499.1,76.4L499.1,76.4L499.1,76.4ZM499.7,76.6L499.7,76.6L499.7,76.6Z","GE":"M587.6,118L585.8,116.6L585.1,117L582.7,116.7L583.1,115.3L582.1,113.2L580.3,111.9L578,110.8L579.6,110.5L582,111.5L584.1,111.4L587.7,112.9L588.2,113.5L590.3,112.9L592.6,113.8L592.5,114.6L594.6,115.6L594.2,116.1L595.6,117.5L595.1,118.1L592,117L591.4,117.4Z","GM":"M435.7,204.4L438.5,204.4L440,203.8L442.9,205.2L441.9,205.5L439.5,204.5L437.6,205.7L435.1,206L435,205.1L436.2,205.1Z","GA":"M515.9,240.1L515.5,241.7L515.8,243L518.3,242.6L519,244L517.5,246.2L517.4,247.5L519.1,248.8L518.8,252.7L518,254.5L517.1,253.5L516.3,254.3L515.1,254.1L514.5,252.9L513.6,252.9L513.6,254.1L511.3,254.1L511.1,255.7L512.2,257.2L512,258.4L511,257.8L510,259.1L507.9,256.2L506.3,254.7L505.1,252.8L503.8,249L505.1,247.9L505.1,245.9L505.8,245.9L505.9,243.6L510.6,243.7L510.6,240.1L510.6,239.7L515.7,239.8Z","FR":"M503.3,112.7L503.6,114.7L502.7,117.2L501.8,116.5L501.1,114.1L501.5,113.5ZM498.3,98L496.8,98.8L494.6,101.6L494.7,102.4L496.3,101.6L497,103.1L496.5,103.8L497.4,104.7L496.1,105.6L497.1,106.8L496.8,108L498.8,108.8L498.3,109.8L498.2,109.8L498.1,109.9L495.9,111.6L495,111.9L492.4,110.8L491.4,110.9L489.9,110.3L488,111.5L487.5,112.4L487.9,113.9L485,114.1L484.2,113.7L483.5,113.4L481.7,112.6L481.6,113.1L476.4,111.9L475.6,110.9L476.4,110.4L477.5,103.7L477.2,101.9L475.7,101.3L474.2,98.4L468.8,96.6L469.7,96.2L468.7,95.1L472.3,94.2L473.6,95.1L474.2,94.8L476.7,94.8L475.6,91.6L477,91.7L477.3,92.5L479.6,92.8L481,92.4L480.4,91.6L482.9,90.7L483.8,89.9L483.7,88.5L484.5,87.7L485.9,87.4L486.7,88.5L487.3,88.3L488.7,89.7L489.9,89.9L489.8,90.7L491.5,90.3L491.5,91.3L493.7,92.1L495.1,92.3L496,93.2L497.7,93.3L499.4,93.8L498.1,96.6ZM477.2,103.2L477.2,103.2L477.2,103.2ZM601,287.4L601,287.4L601,287.4ZM627.4,313.6L626.3,313.4L626.3,312.2L627.2,312.2ZM317.4,201.5L317.4,201.5L317.4,201.5ZM316.5,196.1L316.5,196.1L316.5,196.1ZM315.7,196.8L315.7,196.8L315.7,196.8ZM316.7,197.2L316.7,197.2L316.7,197.2ZM332.6,239.6L333.8,238L334.3,235.6L333.4,234.2L333.2,231.2L334,230.1L334.9,228.8L337.4,229.9L340.3,232.6L340.7,234.1L339.7,235.3L337.8,239.5L337.1,240L334.9,239.5L333.9,240.2Z","PM":"M344.7,100.5L344.7,100.5L344.7,100.5ZM344.5,100.3L344.5,100.3L344.5,100.3Z","WF":"M8.4,288.5L8.4,288.5L8.4,288.5ZM4,291.6L4,291.6L4,291.6Z","MF":"M312.5,190.3L312.2,190.3L312.5,190.3Z","BL":"M312.9,190.9L312.9,190.9L312.9,190.9Z","PF":"M76.4,298.9L76.4,298.9L76.4,298.9ZM81.4,301.7L81.4,301.7L81.4,301.7ZM76.7,299.6L76.7,299.6L76.7,299.6ZM82.8,302.1L82.8,302.1L82.8,302.1ZM106.3,277.1L106.3,277.1L106.3,277.1ZM106.3,277.9L106.3,277.9L106.3,277.9ZM107.6,279.7L107.6,279.7L107.6,279.7ZM103.3,274.7L103.3,274.7L103.3,274.7ZM103.4,276.3L103.4,276.3L103.4,276.3ZM105.5,302.7L105.5,302.7L105.5,302.7ZM104.7,274.8L104.7,274.8L104.7,274.8ZM106.2,304.3L106.2,304.3L106.2,304.3ZM105.7,303.7L105.7,303.7L105.7,303.7ZM118,304.8L118,304.8L118,304.8ZM116.1,304.2L116.1,304.2L116.1,304.2ZM113.7,312.1L113.7,312.1L113.7,312.1ZM99.9,297.2L99.9,297.2L99.9,297.2ZM97.8,298.8L97.8,298.8L97.8,298.8ZM97.4,298.8L97.4,298.8L97.4,298.8ZM93,296.4L93,296.4L93,296.4ZM92.1,297.9L92.1,297.9L92.1,297.9Z","NC":"M914.8,310.2L916.9,311.8L917.7,313.4L920.4,316L919.6,316.9L915.8,313.4L914.5,310.9ZM921.4,317.6L921.4,317.6L921.4,317.6ZM904.3,307.2L904.3,307.2L904.3,307.2ZM923.8,313.9L923.8,313.9L923.8,313.9ZM920.6,311.6L920.6,311.6L920.6,311.6ZM922.4,313L921.7,312.3L922.3,311.5Z","TF":"M644.5,400.3L645.5,399.9L645.5,400.8L647.3,400.1L646.8,401.2L645.6,401.4L646.2,402.1L644,401.6L643,401.9L643.6,400.1L644.6,398.9ZM644.8,400.1L644.8,400.1L644.8,400.1ZM605.1,392.1L605.1,392.1L605.1,392.1Z","AX":"M524.1,60.3L524.1,60.3L524.1,60.3ZM523.4,60.7L523.4,60.7L523.4,60.7ZM525.6,61.2L525.6,61.2L525.6,61.2Z","FI":"M531,45.1L529.7,43.3L530.2,42.4L528.8,40.6L528.9,39.3L527,38.1L525.3,37.8L522.3,36.4L524.2,35.8L526.1,37.2L528,37.4L529,37L531.4,37.6L532.8,36.5L533,34.8L534,34.1L536.7,33.7L539.4,34.7L539.9,35.2L539.1,36L539.4,36.4L538.3,36.8L539.1,37.1L538.7,37.9L539.3,38.7L540.7,39L542.2,40L540.8,41.9L542.9,44.3L543.6,45.4L543,45.7L542.9,47.4L544,47.9L544.3,49L545.3,50L544.4,50.7L547.2,52.2L548.2,53.1L547.8,54L544,57.6L541.2,59.8L540,59.7L536.6,60.3L535.5,60.7L530.8,61.8L531.3,61.2L530.5,60.7L529.7,61.2L529.8,60.2L527.2,59.6L526.9,58.5L527.2,56.8L526.3,55.6L525.7,53.9L526.7,52.7L526.4,52.3L528.1,52L528.4,51L529.8,50.3L531.8,48.6L532.3,47.8L533.8,47.7L533.6,46ZM528.5,60.3L528.5,60.3L528.5,60.3ZM525.7,52.2L525.7,52.2L525.7,52.2ZM528.9,60.2L528.9,60.2L528.9,60.2ZM527.2,59.8L527.2,59.8L527.2,59.8ZM528.2,60.9L528.2,60.9L528.2,60.9ZM527.8,61L527.8,61L527.8,61ZM532.8,47.3L532.8,47.3L532.8,47.3Z","FJ":"M960,297.4L958.4,299.2L957.5,299.1L955.9,299.9L955.9,298.8ZM954.5,301.2L955.1,302L955,303.4L952.6,303.9L951.4,303.4L952.7,301.4ZM0.5,299.3L0.5,299.3L0.5,299.3ZM959.4,299.9L959.4,299.9L959.4,299.9ZM953.7,306.2L953.7,306.2L953.7,306.2ZM4.1,303.1L4.1,303.1L4.1,303.1ZM4.9,303.9L4.9,303.9L4.9,303.9ZM6.1,303L6.1,303L6.1,303ZM3.6,300.8L3.6,300.8L3.6,300.8ZM6.3,306.8L6.3,306.8L6.3,306.8ZM2.8,306.1L2.8,306.1L2.8,306.1ZM951.9,300.5L951.9,300.5L951.9,300.5ZM957.5,301.1L957.5,301.1L957.5,301.1ZM956.8,303.4L956.8,303.4L956.8,303.4ZM955.7,302.3L955.7,302.3L955.7,302.3ZM0.3,298.4L0.3,298.4L0.3,298.5L0.3,298.5L0.3,298.4ZM959.7,298.5L959.7,298.5L959.7,298.5L959.7,298.5L959.8,298.4L959.7,298.5ZM0,297.3L0,297.3L0,297.3ZM954.7,285.9L954.7,285.9L954.7,285.9ZM941,314.7L941,314.7L941,314.7ZM7.2,311.5L7.2,311.5L7.2,311.5Z","ET":"M575.1,229.7L574.6,229.1L573.5,226L570.6,222.9L568.9,222L569.4,220.6L571.7,220L571.6,217.3L572.1,213.9L572.8,212.8L573.8,212.9L574.2,209.9L575.4,207.7L576.7,207.1L577.7,202.3L579.6,201.7L580.5,202.6L581.2,200.4L582.9,201.7L584.4,201.1L587.5,201.7L589,202.6L591.8,205.6L593.6,207.9L592.1,210.6L592.2,212.5L595.2,212.5L594.6,213.6L595.1,215L596.9,217.5L598.4,218.8L606.3,221.8L609.1,221.9L605.1,226.5L601.2,231.5L598.7,231.4L596,232.6L595.4,233.4L593,234.4L591.2,234.5L590,233.5L587.5,234.8L586.6,236L582.8,235.4L579.5,233.1L577.3,232.9L576.4,231.8L576.4,230.1Z","EE":"M541.6,68.4L539.7,68.4L538.4,67.5L536.3,66.8L534.6,67.4L534.9,66L533.2,66L532.2,64.4L532.3,63.6L534.1,62.8L536.5,62.6L536.5,62.3L539.9,62.8L542.2,62.7L541.2,64.6L541.6,66.2L542.4,67.5ZM530.5,65.2L532.1,65.6L529.7,66.6L528.9,65.6ZM531.1,64.6L530.3,65L529.2,64.3L530.3,63.9ZM532.2,65.4L532.2,65.4L532.2,65.4Z","ER":"M577.7,202.3L577.3,199.5L578.4,195.9L578.6,193.5L581.7,191.9L582.7,190.5L583.6,192.3L584.8,197.1L586.3,199.6L586.4,198.5L587.4,199.9L590.1,201.1L591.4,203.1L593.1,204.4L593.5,205.5L595.5,207.1L594.4,208.2L593.6,207.9L591.8,205.6L589,202.6L587.5,201.7L584.4,201.1L582.9,201.7L581.2,200.4L580.5,202.6L579.6,201.7ZM586.9,196.6L586.9,196.6L586.9,196.6ZM587.1,197.8L587.1,197.8L587.1,197.8Z","GQ":"M503.6,235.1L504.1,235.5L502.9,236.6ZM510.6,240.1L510.6,243.7L505.9,243.6L505.3,243.3L506.5,240.8L506.5,239.6L506.9,240.1Z","SV":"M241.1,201.8L243.4,203.5L244.2,203.1L245.3,203.7L244.9,205L244.6,205.6L242.1,205.3L238.9,203.9Z","EG":"M577.3,178L545.9,178L544.7,155.4L543.8,152.2L544.4,150.4L544,148.6L544.7,147.6L546.6,147.7L550.1,148.5L554.7,150.1L555.8,149.9L558.2,148.3L561.1,148.2L562.7,149.4L567.3,149.1L568,148.7L568.2,149L570.3,154.5L570,155.1L569.4,159.1L569,159.9L566.3,157.3L564.2,152.9L563.7,154L565.4,157.4L567.2,159.4L568.6,163.4L570.4,166.4L572.3,170.2L574,171.9L573.4,172L574,175L575.5,176Z","EC":"M276.8,247.2L275.8,247.3L276.8,248.6L276,251.6L274.6,253.5L273.1,254.8L269.9,256.1L268.6,257.4L267.8,261.1L266.8,262.4L265.2,260.7L263.9,260.2L263.2,260.8L262.8,259.5L263.7,258.9L263.3,257.4L264.4,256.5L264.8,254.9L264.1,254.2L263.3,255.3L261.5,253.7L262,253.3L261.6,250.2L262.6,249.5L262.8,248L263.7,246.9L263.8,244.4L267,243.1L267.1,242.3L268.6,243.6L270.9,244.8L271,245.5L273.5,246.1L274,245.4ZM263.8,256.1L263.8,256.1L263.8,256.1ZM267,242.9L267,242.9L267,242.9ZM236.2,249.2L236.2,249.2L236.2,249.2ZM238.6,249.7L238.6,249.7L238.6,249.7ZM233.2,248.3L233.2,248.3L233.2,248.3ZM235.9,251L235.9,251L235.9,251ZM233.6,246.8L234.9,249.2L233.4,250L234,248.8ZM235.5,247.9L235.5,247.9L235.5,247.9Z","DO":"M289.2,190.4L288.8,188.7L289.9,187L289.8,185.2L292,184.5L294.1,185.4L295.3,187L297.7,187.7L298.5,188.6L297.4,189.9L296.9,189.3L294.7,189.2L293.5,189.8L291.3,189.7L290.1,191.7Z","DM":"M316.4,199.2L316.4,199.2L316.4,199.2Z","DJ":"M596,210.9L595.2,212.5L592.2,212.5L592.1,210.6L593.6,207.9L594.4,208.2L595.5,207.1L596.4,208.7L594.4,210.7Z","GL":"M428.1,2.1L430.5,2.3L434.8,2.6L434.4,2.7L427.5,2.8L424.1,3L424,3.2L426.9,2.9L432.8,3L436.2,2.8L437.1,3.4L440.5,3.5L442.1,3.9L440.3,4.3L437.8,4.5L427.6,4.8L427,5.2L430.6,5L435.3,5.1L436.7,5.7L437.9,5.6L439,5.1L442.2,5L442.1,5.9L441.1,6.4L438.4,7.3L440.5,7.1L444.2,6L448.7,6.3L450.8,5.6L452.3,5.4L455.6,5.5L457.8,5.7L459.6,6.2L455.8,7.1L453.9,7.2L453.8,7.7L449.6,8.1L451.1,8.4L449.3,8.9L447.1,8.9L444.7,8.8L443.2,9.3L443.1,9.8L444.7,10L444.3,10.8L444.8,11.2L443.6,11.4L442.9,11.9L440.8,12.3L441.1,12.6L439.2,14.4L439.5,14.7L440.9,14.1L443.4,14.5L441.1,14.8L441.9,15.3L443.6,15.7L445.4,15.7L444.9,16.8L442,16.4L440.3,16.5L438.9,17L437.6,16.7L437.1,17L438.4,17.2L439.1,18L441.6,18.1L442.6,19.2L442.7,20.1L441.8,20.7L440.5,20.3L439.4,20.9L440,21.8L441.3,21.1L442.6,22.4L442.3,22.9L438.7,23.3L436.5,22.9L437,23.6L440.1,24L439.7,24.9L437.6,25L436.3,25.4L434.8,25.2L432.7,24.2L431.3,24.8L427.2,25.8L431.7,25L433,25.1L436.5,26.3L435.6,28.4L432.2,27.4L431.4,26L427.2,26.8L427.7,26.9L431,26.4L431,27.5L436.1,29.3L434.9,29.9L436.4,30L436.5,32.5L434.7,32.6L434.8,31.6L434.1,32.7L432.8,32.7L431.6,32.2L430.7,30.7L428.2,29.8L426,29.6L425.7,29.9L428.4,30.1L428.3,30.8L426.2,31.4L423,31.2L423.2,32.1L421.3,32.6L423.3,32.8L425.9,32.6L426.3,32.8L424.1,33.5L428.3,32.9L432,33.5L434.8,33.5L433.2,34.4L427.6,36.4L425.5,37.4L419.6,38.4L418.4,38.3L416.7,38.8L415.1,38.8L413.4,38L413.4,39.2L411.2,40.2L408.6,42.6L406.1,43.9L404.8,43.4L405.1,44.2L403.3,45L401.9,44.9L400.2,45.7L399.8,45.3L401.7,43.7L400.7,43.8L398.4,45.6L395,45.9L396.2,46.4L394.5,47.2L392.8,47L394.3,48.7L392.8,49.4L393,50.8L389,53.7L387.1,53.6L388.7,54L387.7,56.5L386.1,59.1L384.6,60L384.7,61.1L382.4,61.8L379.8,60.7L380,60L378.7,59.5L379.6,57.9L377,59L374.1,58.8L372.9,57.7L372.3,55L370.9,54.3L371,53.3L369.5,51L369.6,50L372.3,49.2L369.6,49.8L370.8,48.5L373.3,48.1L372.1,47.8L370.5,48.3L369,49.4L369.2,46L367.6,45.7L368.8,43.9L367.2,44.1L367.4,43.4L369.1,42.3L367.6,41.5L368.1,40.7L370.8,39.8L373.7,40.1L374.3,39.7L372.6,39.9L371.5,39.6L368.4,40.4L370.2,38.6L373.3,39L374.3,38.3L372.2,38.6L369.8,38.4L370.8,37.5L372.4,37.3L373.7,37.7L374.6,37.2L376.7,34.6L377.8,33.8L373.9,33.7L373,33.2L370.7,32.8L369.9,32.1L370.8,31.7L373.4,31.9L375.7,32.7L377.4,32.8L376.3,32.3L376.7,31.6L375.8,31.3L376.7,30.9L373.5,30.8L374.3,29.9L376,29.7L374.7,29.5L373,29.7L373.2,29L371.9,29.5L371.8,30.1L370.3,30.3L368.7,29.8L369.8,28.4L369.6,27.5L371.4,27L371.8,26.4L370.2,25.8L371.1,25.4L369.8,24.7L370.6,23.8L369.4,23L370.6,22.3L368.2,21L367.1,20.1L367.6,19.4L362.8,18.2L359,17.8L357.3,17.9L354.9,18.3L354.2,18.1L351.9,18.3L352.3,18.7L349.7,18.5L347.7,17.8L347.8,17.6L350.4,17L348.4,17L346.4,16.7L345.4,16.2L346.1,15.8L349.7,15.8L350.7,15.4L353.8,15.4L354.7,15.6L355.3,14.9L354.7,14.6L352.1,15L351,14.8L349.4,15.1L347.5,14.5L345,14L344,13.5L345.3,12.7L352.2,11.9L352.3,11.7L355.7,11.3L358.2,11.3L359.6,10.8L362.4,9L359.9,9.3L357.8,9.1L357.8,8.7L359.2,8.2L361.2,7.8L363.8,7.2L365,7L366.2,7.4L366.9,6.7L369.5,6.9L370.5,6.3L370.8,5.7L371.7,5.4L373.5,5.2L378.2,6.2L374.8,5.1L375.9,4.9L383.3,4.4L384.5,4.5L384.9,5L384.4,5.8L385.6,5.4L386.3,4.4L389.5,5.3L391.9,5.3L390.3,4.6L390.1,4.2L393.8,4.3L397.3,4.9L399.4,5.4L400.8,5.4L400.9,4.9L401.9,4.4L400,3.7L400.9,3.5L405.1,3.6L407.3,3.5L401.6,3.3L399.1,3.4L399.4,3L400.6,3.1L404.8,2.6L407.9,2.9L409.8,2.5L412.1,2.8L413.1,3.1L413.8,2.8L412.7,2.4L414.4,2.2L422.9,2ZM372.8,34L374,34.4L373.6,35.2L370.4,35.8L369.4,35.4L370.2,35.1L368.1,34.6L369.8,33L371.8,33.3ZM375.9,35L375.5,34.2L376.9,34.3ZM372.3,31.1L372.3,31.1L372.3,31.1ZM371.1,26.6L369.9,27.2L368.7,26.8ZM344.8,15.4L344.8,15.4L344.8,15.4ZM400.4,4.9L397.4,4.4L396.9,3.8L398.5,3.7L401,4.3ZM428.8,31.4L428.7,32.2L426.8,32.7L426.2,32.4L423.5,32.7L424.2,31.5L425.6,31.6L428,31.1ZM446.8,5.4L445.2,5.1L445.8,4.8ZM447.8,9.7L447,10L445.2,9.8L445.3,9.5L448.1,9.3ZM444.4,13.9L444,13.1L444.7,12.9ZM444.5,18.5L443.6,17.6L444.4,17.1ZM445.3,20.1L446,21.1L443.9,21.1L443.6,20.3ZM446.3,14.7L446.3,14.7L446.3,14.7ZM401.7,45.8L401.7,45.8L401.7,45.8ZM378.3,59.1L378.3,59.1L378.3,59.1ZM375.8,31.6L375.8,31.6L375.8,31.6Z","FO":"M465.6,56.2L465.6,56.2L465.6,56.2ZM465.4,57.2L465.4,57.2L465.4,57.2ZM464.4,55.2L464.4,55.2L464.4,55.2ZM465.6,55L465.4,55.6L464.4,54.8ZM466.1,54.9L466.1,54.9L466.1,54.9Z","DK":"M508.7,73.5L507.9,74.4L507.2,76.4L506.7,75.2L505.8,75.2L505,73.6L506.1,73L508.6,72.6ZM502.4,76.3L499.9,76L499.7,74.5L498.6,74L498.5,71.1L499.7,71.4L499.9,70.7L498.7,70.3L499.5,69.6L501.6,69.2L502.4,68.2L503.7,67.8L503.7,69.2L503.3,71L504.6,71.3L504.7,72L503.5,72.2L503.2,73.2L501.9,74.3L501.7,75.6ZM504.3,74L504.7,75.4L502.9,75.3L502.5,74.2ZM506.1,76.1L506.1,76.1L506.1,76.1ZM504.6,76.5L504.6,76.5L504.6,76.5ZM508.8,75.9L508.8,75.9L508.8,75.9ZM508.9,74L508.9,74L508.9,74ZM504.1,76.2L504.1,76.2L504.1,76.2ZM503.1,76.1L503.1,76.1L503.1,76.1ZM504.2,73.5L504.2,73.5L504.2,73.5ZM504.9,69.2L504.9,69.2L504.9,69.2ZM514.6,75.7L514.6,75.7L514.6,75.7Z","CZ":"M524.7,92.2L523.1,92.9L522.3,94.1L520.9,94.1L520.4,94.9L515.6,93.8L515,94.9L512.9,94.4L510,92.3L508.9,90.4L509.4,89.6L513.8,88L514.9,88.1L518.7,89L518.2,89.4L519.4,90.4L519.8,89.4L522.3,90.8L523.9,91.1Z","CY":"M566.4,136.9L563.1,136.6L563.6,135.9L564.9,136.1L567.6,135L566.2,136.2ZM563.1,136.6L566.4,136.9L563.8,138.4L562.1,137.3Z","CU":"M264.7,174.3L267.7,174.5L270.1,175.7L271,176.7L272.6,176.8L275.1,178.6L275.5,178.4L277.5,180.2L280.1,181.1L279.9,182L281.7,182.2L283.7,183.3L283.3,184L281,184.6L278.3,184.3L274.1,184.7L275.6,183.3L275.7,182.2L273.7,182L272.5,181L272.3,179.5L270.7,179.4L267.7,177.8L264.2,177.4L263.6,176.8L264.2,175.9L262.1,175.8L260.1,177.3L258.6,177.5L257,178.7L257.6,176.8L258.6,175.9L260.8,174.9ZM275.1,178.1L275.1,178.1L275.1,178.1ZM274.3,177.1L274.3,177.1L274.3,177.1ZM272.8,176.3L272.8,176.3L272.8,176.3ZM274.6,177.6L274.6,177.6L274.6,177.6ZM262,179.3L261.2,179.7L260.7,178.6L261.7,178.3ZM271,175.9L271,175.9L271,175.9Z","HR":"M512.9,104.4L517.2,104.5L517.8,102.3L519.8,101.3L523.1,103.5L524.7,103.6L525.8,103.1L526.5,105.4L526.3,106.4L525.4,105.7L523.3,105.7L521.1,105.1L519.6,105.9L518.4,105.4L518.3,106.7L520.9,109.7L522.3,110.8L523.2,112.3L521.4,110.9L519.2,110.5L516.9,108.3L517.8,108.2L516.3,106.9L516.1,105.7L514.7,104.9L514,106.5L513.1,105.6ZM520.9,112.1L520.9,112.1L520.9,112.1ZM522.2,111.7L522.2,111.7L522.2,111.7ZM521.2,111.3L521.2,111.3L521.2,111.3ZM517.2,108.9L517.2,108.9L517.2,108.9ZM516,106L516,106L516,106ZM516.1,106.7L516.1,106.7L516.1,106.7ZM517.1,108L517.1,108L517.1,108ZM517.1,109.3L517.1,109.3L517.1,109.3ZM517.6,109.1L517.6,109.1L517.6,109.1ZM515.3,107L515.3,107L515.3,107ZM523.3,112.9L523.3,112.9L523.3,112.9ZM525.4,113.5L525.6,113.9L523.4,112.5Z","CI":"M471.7,230.8L471.6,230.9L471.7,230.8ZM458.5,215.1L459.4,214.3L461.3,215L462.1,213.5L463.2,213.3L463.8,215L465.2,214.3L466.7,215.8L468.4,216.7L469.6,215.9L471.3,215.9L472.8,217.2L472.6,218.6L473.3,221.2L472.5,222.1L471.3,225.6L471.4,227L472.4,230.7L471.9,230.8L469.1,230.5L465,230.9L461.5,232.2L459.7,233.2L459.5,231.8L459.9,228.6L458.7,227.4L456.8,226.5L457.7,224.7L457.2,223.2L457.8,223.2L458.4,221.4L457.8,220.4L459.3,220.6L458.6,219.4L459.1,218.5L458.1,217.2Z","CR":"M258.1,216.9L257,217.3L257.5,219L256.6,220.9L257,221.6L256.3,220L254.7,219.9L255.1,218.6L252.5,216.7L252.4,215.9L251.2,216.9L249.9,215.9L249.5,214.3L249.9,212.3L250.3,211.9L252.1,212.6L253.6,212.5L255,213.3L255.5,212.7L255.9,214.1Z","CD":"M562.8,272.4L558,273.3L556.4,275.7L556.9,277.5L556.9,280.2L556.1,282.7L556.4,283.7L557.9,285.4L558.9,285.7L559.9,284.8L559.8,288.7L557.7,288.6L556,285.8L553.8,284.9L553,283.1L552.3,284L549.8,284L548,283.2L548,281.9L545.3,282.4L544.4,280.8L544,281.2L540.6,281.4L539.8,281.8L539.6,278.2L538.6,276.4L538.9,272.9L538.6,269.7L535.5,269.6L535.2,268.4L532.6,269.1L532.1,271.7L530.2,271.6L527.2,272.1L525.7,269.5L525,266.1L524,265.2L515.2,265.2L513.5,265.5L512.9,264.8L513.7,264.6L513.6,262.7L515.3,261.3L516.2,261.9L518.7,260.3L518.9,261.9L519.9,262L523.6,257.7L523.8,253.6L525.8,250.4L527.9,248.5L528.4,245.2L528.3,243.3L528.8,240.5L529.9,237.7L530.2,236L530.1,233.5L531.4,231.6L532.6,230.8L534.5,231.7L535.5,232.9L540.5,233.9L541.4,232.3L543.2,232.3L545.6,231.2L548.1,231.1L548.8,230.2L552.3,231L553.9,230.9L556,233.2L557.5,232.8L558.6,233.1L560,232.5L561.5,234.4L563.2,235.9L562.9,239.2L564.4,240.5L560.8,244.3L560.2,246.5L559.8,251.2L558.6,252.6L557.9,254.5L558.3,255.3L558.9,256.4L558.8,259L559.3,260.7L559.1,262.4L559.8,264.7L559.5,265.7L560,267.5L561.6,269.3Z","CG":"M510,259.1L511,257.8L512,258.4L512.2,257.2L511.1,255.7L511.3,254.1L513.6,254.1L513.6,252.9L514.5,252.9L515.1,254.1L516.3,254.3L517.1,253.5L518,254.5L518.8,252.7L519.1,248.8L517.4,247.5L517.5,246.2L519,244L518.3,242.6L515.8,243L515.5,241.7L515.9,240.1L519.1,240.1L522.5,240.9L523.3,241.6L523.7,239.7L524.4,238L524.7,236L527,235.3L530.2,236L529.9,237.7L528.8,240.5L528.3,243.3L528.4,245.2L527.9,248.5L525.8,250.4L523.8,253.6L523.6,257.7L519.9,262L518.9,261.9L518.7,260.3L516.2,261.9L515.3,261.3L514.8,260.7L513.4,261.3L512.4,262.5L511.8,261.1Z","KM":"M599.3,284.6L599.3,284.6L599.3,284.6ZM597.4,285.3L597.4,285.3L597.4,285.3ZM596.6,284L596.6,284L596.6,284Z","CO":"M288.7,209.8L287,210.4L284.3,214.1L283.8,216.2L282.8,218L284.2,218.4L285.2,220.6L284.9,223.3L286.4,225L289.7,224.7L291.2,225.2L292.9,227.7L297.9,227.3L298.3,228L297.1,230.4L297,232.8L297.5,234.8L298.4,236.2L297,237.8L298.6,239.4L299.5,243L297.8,240.2L296,241.5L291.5,241.5L291.4,243.5L292.8,243.5L293.3,244.8L290.9,245L290.9,247.3L291.9,248.3L292.7,250.6L291.3,260.1L290.3,258.7L289.2,258.6L290.9,255.4L288.6,253.8L287.3,254.1L286.3,253.6L284.6,254.4L282.6,253.9L282.4,252.6L281.6,252.1L281.2,250.7L279.6,249.9L278.1,247.5L276.8,247.2L274,245.4L273.5,246.1L271,245.5L270.9,244.8L268.6,243.6L267.1,242.3L267.9,241.3L267.8,239.6L269.2,239.1L270.4,237.8L272.1,234.6L271.3,234.5L271.6,232.1L271.3,229.9L271.8,228.8L271.2,227.5L271.6,226.5L270.2,224.3L272.2,221.7L271.9,219.8L273.5,221.8L273.1,220.1L274.9,218.7L275.3,217.9L276.7,217.3L277.4,213.7L279.1,212.1L280.2,213.2L281.3,211.4L283.3,211.5L286.2,209.7L287.8,208L289,208.3ZM269.2,238.9L269.2,238.9L269.2,238.9Z","CN":"M790,170.1L790,170.1L790,170.1ZM793.4,148.1L793.4,148.1L793.4,148.1ZM796.1,152.9L796.1,152.9L796.1,152.9ZM796,153.8L796,153.8L796,153.8ZM796.4,153.2L796.4,153.2L796.4,153.2ZM793.6,167.1L793.6,167.1L793.6,167.1ZM771.8,180.8L771.8,180.8L771.8,180.8ZM795.1,158.9L795.1,158.9L795.1,158.9ZM779.1,175.5L779.1,175.5L779.1,175.5ZM777.8,179.2L777.8,179.2L777.8,179.2ZM777.4,179.1L777.4,179.1L777.4,179.1ZM765.2,179.5L763.5,179.2L761.4,178.1L760.8,176.7L761.2,175.5L758.7,175.1L756.9,173.8L755.9,175.1L753.8,176.3L752.1,175.6L751.5,176.6L749.8,175.7L749.2,176.8L748,176.5L748.9,180.6L747.5,180.4L747.1,179.3L746.8,178.8L744.7,179.7L743.6,177.9L741.6,177.6L741.5,174.5L740.1,174.2L739.3,172.2L739.5,171.4L737.4,171.5L736.5,172.1L735.9,170.2L736.8,166.7L737.9,166L737.5,162.9L736.7,160.5L735.8,160.5L734.9,158.7L733.5,157.6L732.8,158.4L730.8,157.7L730.5,156.7L728.6,154.6L727.3,155.8L725,155L723.5,156.6L721.9,157.3L720.9,159.3L718.4,159.9L718.1,159.3L714.8,158.9L713.7,158.1L712.7,158.8L711.5,161.3L711,159.5L710.3,158.8L709.1,159.5L706.6,159.6L704.9,158.9L703.5,159.4L702.5,158.3L701.1,158.1L701,157.3L699.8,157.3L698.4,156.3L697.8,155.3L696.5,155.4L695.1,154.1L692.2,152.5L691.8,151.8L690.2,151.8L689.2,152.3L686.9,151L686.7,150.4L685,149.9L683.5,148.4L682.6,148.7L682.2,146.7L680.9,144.9L682.4,145.4L683.1,145L682.3,142.7L681.3,141.8L680.8,140L681.2,139.5L679.2,138.2L677.3,135.6L674.6,135L672.9,134.5L672.1,133.7L671.5,131.9L670.1,131.1L667.9,130.8L668.7,130.1L669.1,129.6L667.3,126.1L664.9,125.8L663.8,123.2L664.4,122.7L664.2,121.3L667.7,119.6L668.2,120.5L670.1,120.1L670.5,118.4L673.6,118.1L673.9,117.2L675.9,115.9L677.9,115.1L677.8,114.6L677.2,113.2L678.3,111.6L676.3,108.7L675.9,106.7L674.7,105.9L678.3,104.9L680.4,105.6L679.6,104.1L679.7,99.7L680,99.2L684.2,100.3L685.8,99L684.7,97L684.7,95.6L686.5,95.1L686.4,93.7L687.7,93.5L688.7,93.2L689.9,95.1L691.3,95.6L693.1,96.8L694.3,96.7L696.5,97.7L698.7,100L700.1,102.8L699.9,104.3L700.8,105.4L702.6,105.7L705.6,105.8L707.9,106.3L711.1,108L712.7,108.2L715.3,111.5L717,113L719,112.8L724.8,113.5L725.9,113.1L730.5,113.8L731.4,114.6L734.4,115.2L736.2,116L738,115.6L738.3,116.3L739.9,116.1L743.1,114.3L746.4,113.9L749.5,113.8L751.4,112.8L752.2,111.1L754,109.9L751.8,107.9L752,105.8L756.6,106.7L758,104.8L760.6,104.5L761.5,103.5L761.5,102L763.3,101.8L765.1,100.7L766.3,100.5L768.6,101L767.8,99.4L763.6,96.8L761.8,96.8L761.3,97.8L759.6,97.2L757.8,97.7L756.6,96.9L756.3,91.2L759.6,92.2L760.4,91.2L762,90.5L761.2,89.5L761.3,85.9L762,84.8L760.9,83L759.2,82.3L760.4,80.8L762.7,80.3L766,80.1L769.5,81.3L771.7,81.6L774.4,83.5L778.2,87.4L781.4,90.1L781.8,91.1L783.5,92L785.3,92L787.4,92.5L790,94L790.9,94.1L792.4,95.7L792.8,96.7L794,97.7L797.6,97.5L797.6,96.9L800.7,95.6L801.4,95.8L802.9,97.6L802.3,98.9L803.4,102.1L803,104.4L803.2,105.9L800.1,104.9L798.9,106.2L800.7,108.8L801.8,111L802.1,112.4L800.7,113L801.3,113.6L799,112.1L799.4,113.8L798.5,114L798.1,115.1L796,115.3L797.1,117.1L794.5,116.7L793.5,115.9L792.5,118.6L790.4,120L789.7,121.5L789.3,122L786.8,122.5L785.5,123.4L784.4,125L783,124.8L784.2,124.2L784.2,123.4L782.8,123.4L783.8,119.8L782.3,118.8L780.5,118.7L779.7,120.7L777.9,121.8L777.2,124.1L774.4,124.2L774.5,125.8L776.2,127.1L778.7,127.6L779.6,129.8L781.1,130.5L783.5,128.2L786.2,129.4L788.6,129.5L789,131L787.5,131L785.6,132.1L785.3,133.5L784.1,134.4L783.1,136.2L783.2,137.9L786.4,139.4L789.3,143.4L789.6,144.5L791.3,145.4L793.2,147.5L790,146.6L793.1,148.7L794.1,150L793.2,150.2L791.6,152.4L792.8,151.9L795.6,153.2L795.9,155.6L795.2,157.1L795.8,158L794.5,158.2L793.4,162L793.3,163.3L791.9,162.9L793,164.4L791.7,165.5L792.6,165.4L793.1,167.4L791.8,167.3L791,169.9L789.7,169.7L789.9,170.9L786.8,173.7L786.6,175L784.2,175.7L783.4,175.4L781.1,176.3L780.5,176.4L779.2,175.3L779.4,177.2L779.3,177.4L776.5,178.8L775.4,178.5L774.7,179.4L771.7,180.1L771.4,181.6L772.5,182.6L771.6,183.4L770.5,182.3L769.9,180.7L770.4,179.6L768.1,179.7L766.3,178.3L766.5,179ZM773.8,184.3L774.3,185.3L773.4,186.9L773.3,188.2L771.1,189.9L768.7,188.9L768.3,186.3L769.6,184.6L773.1,183.8Z","MO":"M779.3,177.4L779.4,177.2L779.3,177.4Z","HK":"M780.5,176.4L781.1,176.3L780.5,176.4ZM781.2,177.3L781.2,177.3L781.2,177.3ZM780.6,177.3L780.6,177.3L780.6,177.3Z","CL":"M195.3,331.8L195.3,331.8L195.3,331.8ZM278.8,352.3L278.8,352.3L278.8,352.3ZM292.9,304.2L294.2,303.8L294.2,302.2L295,301.6L296.3,303.3L297,306.2L298.4,307.6L297.9,308.5L298.1,310.8L299.8,313.5L301.2,318.3L303,318.3L303.6,318.8L303.1,322.1L300.9,323.2L300.3,324.6L300.9,325.4L300.5,326.6L301.3,328.7L301,329.9L301.9,331.5L300.6,331.9L300.2,334.3L299.2,335.8L298.7,338.7L299.4,342L298.9,342.2L298.5,345.8L300.1,348.6L301,351.1L301.5,351.2L302,354.1L301.6,354.4L301.2,357.6L301.8,359.9L300.5,361.3L301.1,365.2L302.4,368.3L301.4,369L301.6,371L301.4,374.4L302.3,377.3L303,378.7L302.3,379.4L302.8,381.5L303.8,382L303.8,382.9L304.8,384.4L304.8,385.8L306.3,386L306.5,387L304.8,387.1L306.7,388.4L306.1,389.5L306.7,390.6L306.3,391.3L307.1,393L307.2,394.5L306.4,395.4L306.4,396.5L307.2,398L306.3,400.9L305.5,400.9L306.3,403.4L307.7,405.2L309.1,404.8L310,405.7L310.3,407.6L311.9,409L316.5,409L320.4,410.1L318.4,409.6L317.8,410.4L315.4,411.3L316,414.3L315.4,414.6L313.1,413.9L312.4,412.7L313.7,412.7L314.6,411.5L314,411.3L312,412.7L312.1,413.4L310.7,412.7L311,411.2L313.5,410.8L310.8,410.6L310.3,412.2L308.8,411.5L309.6,411.1L307.8,410.9L306.5,409.3L309.3,409.4L310.4,408.3L308.6,409.2L306.3,408L306.6,407L304.2,406.2L303.1,405L304.1,405L303.8,404.1L305.3,405.3L305,404.4L303.7,403.6L304.2,402.9L302.7,398.7L301.5,396.9L303.9,396.9L301.1,396L301.8,394.4L298.8,392.6L297.6,392.7L298.9,391.3L298.3,390.4L300.4,390.1L300.9,389.1L300.9,391.2L301.8,390.1L301.2,389.2L302.3,388.8L301.6,387.6L302.9,386.9L302.8,386L301.1,385.1L301.3,383.5L300.7,379.4L301.6,379.8L300.4,377.4L299.4,377L299.1,377.7L297.8,377.6L296.7,375.7L296.6,372.5L297,369.8L295.9,367.9L295.5,366.1L294.8,365L294.6,363.4L295.5,363.3L295.9,358.4L296.6,356.8L296.5,353.9L297,352.3L296.5,350.6L296.8,348.3L295.1,343.2L295.5,339.7L294.6,337.5L295.2,335.7L295.5,329.3L295.1,327.6L295.5,325.6L294.9,324L294.8,321.3L294.3,319L294.8,318.3L294.9,314.1L294.3,311.7L294.1,308.5ZM320.3,410.9L322.5,417.5L320.6,417.5L319.9,417.1L318.3,417.3L315.4,416.4L317.3,416L316.4,414.6L318.5,416.1L319.5,415.9L320.8,416.6L321.2,416.2L318.7,415.3L317.9,414.2L319.5,413.4L317.7,413.2L316.6,412.6L318.1,410.5ZM326.5,418.4L324.3,418.6L323.5,417.8L325.9,417.8ZM299.1,382.6L297.5,382.1L297.6,381.2L297.1,377.8L298.5,378.1L299.1,379.9L298.4,380.2L299.6,381.3ZM303,400.4L303.6,403L302.2,401.6L302.3,402.5L301.1,402.3L301.6,400.8L301.2,400.2L301.8,399.1ZM300.1,399.2L299.6,398.7L299.6,397L300.8,398.8ZM307.2,411.8L309.6,412.4L307.7,412.2ZM302.2,398.7L301.4,398.8L300,396.8L300.8,396.5ZM311.2,413.4L313.2,414.4L312.7,415.2L312,414.5L310.8,414.8L310.6,414.1L309.2,413.6ZM304.8,407.9L305.8,409L305.4,409.8L304.3,408.4ZM320.2,417.7L322.1,418L323.8,418.7L324.8,419.8L321.4,418.4L321.4,419.2L319.8,418.3ZM315.4,415L316.3,416.1L314.4,415.8L313.8,414.6ZM300.2,385.8L299.6,386.2L300.8,388.1L300.1,388.7L298.2,386.6L299.5,385ZM302.3,387L301.1,386.6L301.4,385.7L302.7,386.3ZM297.4,387.4L297.4,387.4L297.4,387.4ZM302.6,405L302.6,405L302.6,405ZM301.1,399.5L300.6,400.6L300,399.6ZM300.1,396.4L300.1,396.4L300.1,396.4ZM297.2,383.4L297.2,383.4L297.2,383.4ZM300.8,387.2L300.8,387.2L300.8,387.2ZM305,406.8L305,406.8L305,406.8ZM302.8,403.9L301.9,404L301.9,403ZM299.5,384.1L299.5,384.1L299.5,384.1ZM306.7,408.8L306.7,408.8L306.7,408.8ZM299.9,389.8L299,389.8L299.5,388.2ZM326.1,420.5L326.1,420.5L326.1,420.5ZM327.9,418.6L327.9,418.6L327.9,418.6ZM317.2,417.5L318.5,417.6L318.9,418.4ZM326.6,420.2L326.6,420.2L326.6,420.2Z","TD":"M543.6,185.8L544,197.5L541.7,197.7L540.6,200.8L539.8,201.4L540.2,202.7L539.2,203.9L539.5,205.2L538.5,206.9L539.9,207.3L540.5,210.4L541.5,211.4L541.4,212.7L540.4,212.5L538.3,213.8L538.4,214.4L535.9,217.4L534.7,218.3L531.5,218.7L531.4,219.8L530,221.7L527.5,221.9L525.2,223.2L524.5,222.3L522.7,223.5L521.7,223.3L520.7,220.1L518.5,218.1L517.6,216.6L518.3,215.7L522.1,215.6L521,214.5L520.3,212.1L520.5,209.8L518.9,206.3L517.7,206L516.4,204L516,201.9L518.3,197.6L521.2,194L521.7,184.6L522.2,183.3L520.1,179.5L519.4,174.9L522,173.4Z","CF":"M545,219.8L545.4,220.9L546.9,221.4L547.8,223.3L551,226.1L551.5,227.9L553,228.8L553.9,230.9L552.3,231L548.8,230.2L548.1,231.1L545.6,231.2L543.2,232.3L541.4,232.3L540.5,233.9L535.5,232.9L534.5,231.7L532.6,230.8L531.4,231.6L530.1,233.5L530.2,236L527,235.3L524.7,236L524.4,238L523.7,239.7L523.4,237.8L520.8,234.9L520.5,233.2L519.7,232.3L519.3,230.3L519.4,228.5L518.9,228L519.8,227.1L521.7,223.3L522.7,223.5L524.5,222.3L525.2,223.2L527.5,221.9L530,221.7L531.4,219.8L531.5,218.7L534.7,218.3L535.9,217.4L538.4,214.4L538.3,213.8L540.4,212.5L541.4,212.7L543.6,216.1L543.3,219.3Z","CV":"M413,193.8L413,193.8L413,193.8ZM417.4,199.9L417.4,199.9L417.4,199.9ZM413.7,194.3L413.7,194.3L413.7,194.3ZM418.9,196.1L418.9,196.1L418.9,196.1ZM415.1,200.4L415.1,200.4L415.1,200.4ZM415.8,194.9L415.8,194.9L415.8,194.9ZM419,194.7L419,194.7L419,194.7ZM418.1,199.5L418.1,199.5L418.1,199.5Z","CA":"M174.3,78.3L176.6,78.3L174,80.9L172.6,80.2L173.4,78.2ZM174.5,81.1L173.7,84.2L172.5,81.3ZM180.3,88.8L183.8,89.7L184.2,92.4L185.4,93L185.5,95L184.8,95.7L181.9,94.4L183,93.6L181.4,93.9L180.4,92.4L180.6,91.7L179.3,90.3L177.8,90.3L178.3,89.3L177.8,88.4L179,88.1ZM183.9,73.2L184.2,72.5L181.8,71.1L181.2,71.1L181.7,69.8L181.3,65L180.1,63.3L180.1,61.9L177.7,62.4L176.1,63.7L173.7,64.4L174.1,63.5L172.5,61L173.4,60.3L171,60.8L169,60.4L192.5,34.8L195.9,35.1L197.1,36.1L199.3,36.8L201.1,36.7L202.5,35.7L205.4,35.2L206,34.7L206.7,35.2L205.4,35.8L208,35.3L215.2,33.5L216.5,33.9L213,34.8L210.9,35L206.2,36.8L207.4,37L208,36.3L210.8,35.4L212.3,35.4L211.9,35.9L214.3,34.8L217.3,34.2L217.2,34.6L219.6,33.6L221.1,33.2L221.3,32.4L222.2,33.2L222.1,34.6L222.5,35.3L223.7,35.6L225.2,34.3L227.4,33.6L227,34.7L225.7,35.4L227.4,35.5L229.5,34.4L231.5,34.3L233.4,34.7L234.2,35.4L236.8,35.8L237.9,36.4L241.6,36.9L242.8,36.6L244.4,37.2L245,38.1L243.1,38.4L240.9,39.4L244.1,40L246.7,40L249.9,39.7L252.1,39.2L252.6,39.9L254.4,40.3L255,41.4L253.7,41.6L254.6,42.6L255.3,41.8L256,42.2L256,39.9L257,39.1L260.1,38.6L262.1,37.8L262,37.5L260.1,38.2L257.9,38.3L256.3,38.8L255.6,38.4L257.1,37.5L262.1,36.7L262.9,37L262.7,37.9L264.4,39.1L266.1,38.9L267.1,39.7L269.3,40L271.8,39.6L274.5,39.9L276,39.6L277.6,40.2L278.6,39.5L276.8,39.4L276.5,38.2L279.5,38L279.8,38.5L281,38.3L279.9,39L281.8,38.5L279.7,40.5L280.7,41L280.9,41.9L281.6,41.1L281.6,39.9L282.5,39.1L283.8,39.1L287.3,37.5L287.5,36.5L286.7,37.1L285.9,36.7L287.3,36.1L287.5,35.3L284.5,34.3L284.4,33L286.2,32.4L285.3,31.7L286.4,30.5L288.8,30L288.2,29.7L290,28.9L291.4,28.7L293.3,30.6L292.5,31.6L293.4,32.2L293.6,33.1L292.2,33.6L293.2,33.8L290.7,34.7L292.4,35.1L295.1,35.2L293.4,35.7L294.2,36.9L293.4,37.9L293.8,38.5L296.1,36.5L297.8,35.8L299.1,37L298.6,38.4L297.6,38.4L297.1,39.8L298.1,41.4L300.1,40.5L302.2,39L304.2,37.1L306.1,36.3L305.2,35.9L306.2,34.3L308.5,34.3L309.5,34.6L312,34.8L311,35.2L311.9,35.8L313.4,36.2L311.7,36.8L312.8,37.4L311.2,37.9L309.8,38L310.1,39.5L311,40.6L310.1,41.6L306.8,43L304.7,43.6L303.5,41.9L302.7,42L303.7,42.8L303.9,43.8L302.4,44.1L300.6,43L298.4,43.1L298.8,44.5L295.2,46.3L293.7,46.3L290.9,44.7L288.3,44.7L290.5,45.3L291.6,46.3L295.5,46.7L294.4,47.8L291.6,49.5L289.8,50.1L286.9,50.1L286.2,51L284.8,51.2L282.8,50.9L284.6,51.8L283.7,53L282.2,53.4L280.3,53.3L280.9,53.8L278.7,54.6L278.9,55.1L276.2,55.8L276.5,56.3L274.1,57.6L271.4,60.1L270.4,61.4L268.9,64.4L269.6,65L271.9,64.8L271.5,69.1L270.4,70.1L274.5,69.2L275.6,69.3L278.8,70.3L280.2,71.5L280.8,72.7L284.2,73.8L285.5,74.9L288.1,74.8L291,75.3L291.4,76.3L290.3,77.7L290.3,79.3L289,81.8L289.7,84L291.3,85.4L291.1,86.8L292.7,87.3L294.2,85.8L294.7,87.1L295.5,86.2L295.2,85.5L296.9,83.9L296.8,82.8L297.3,78.4L297.1,76.7L301.8,75.1L305.7,72.5L306.9,70.2L307.2,68.8L306.9,67L304.7,65L307.3,63L307.8,62.2L309.2,61.2L308.9,59.5L308.3,58.9L310.7,56.9L310,56.3L310.6,54.6L312.4,54L315.4,54.7L317.8,55L320.1,54.3L322,55.5L323.5,58L325.9,58.2L326.1,58.8L327.6,58.4L326.3,60L326.1,61.1L323.9,61.3L325.6,61.4L325.8,63.2L325,64.5L327.4,64.8L327.4,65.9L328.6,66.4L331.2,65.4L334,63.8L335.2,61.9L337.3,60.3L338.8,63.2L338.7,63.8L339.6,65.1L338.2,65.7L340,65.6L338.8,66.7L340,66.6L341,67.4L340.6,68.1L339.3,68.6L341.4,69.9L341,70.8L339.5,70.8L340.6,71.8L340.2,72.8L342.5,73.5L342.5,74.3L341.2,75.6L343.4,74.9L345,75.3L345.2,76.2L347.1,76.1L348.1,77L346.2,77.7L344.8,78.6L341.9,79.2L340.2,80.9L346,78L347.7,78.2L347.9,79.4L350.2,79.9L350.6,81.1L349.9,83.2L350,84.3L346.4,86.3L342.9,86.8L338.1,89.9L335.2,90.1L331.9,89.8L322.9,90.1L321.7,90.7L320,92.7L318.3,92.9L315.9,94.2L313.1,96.5L312.6,97.3L310,99.4L308.3,100.4L306.8,100.8L303.7,102.2L300.4,104.9L298.3,105.9L297.1,106.3L293.2,108.9L291.9,110.2L287.3,110.2L286,110.7L286.1,112.4L282.3,114.1L279.6,114.6L276.3,116.3L274.8,115.3L275.3,114.3L276.9,113.3L278.8,110.4L279.6,104.9L277.6,103.4L277.9,102.5L277,102.6L276.9,101.2L275.9,101.5L275.7,100.1L268.9,95.8L266.4,96.7L264.7,96.7L262.9,96.1L261.1,96.6L258.3,94.9L256.5,95.2L254.5,94.5L254.7,92.8L254.1,92.6L253.6,93.7L222,91.2L187.9,93.7L187.2,93.8L187.3,92.3L186.1,92.2L186.5,91.1L185.6,91.4L184.9,90.6L185.1,89.1L181.9,89L182.6,87.5L181,88.1L180,87.2L180.7,85.7L181.9,83.8L180.3,85.3L180.4,84.2L182.4,82L181.6,82.2L181.8,81L181,80.6L181.5,79.8L182.4,80.4L183,79L179.7,80.9L178.8,79.5L180.3,78.3L180,77.5L184.1,74.4L182.9,74.7ZM276.1,12.4L276.1,13.1L272.2,13.2L271.1,13L268.9,13.2L269.3,12.9L275.3,12.1ZM273.5,13.6L274.5,14L272.1,14.3L273.3,14.5L272.6,15L268.9,15.4L267.1,15L267.9,14.1ZM262.2,15.4L260.1,16L259,17.2L257.4,17.3L256.5,17.9L255.2,17.5L256.5,16.7L253.9,17.4L253.7,17.8L252.2,18.3L252.1,17.8L250.1,19L249.1,19.1L249.2,18.2L248.4,18.6L245.6,18.8L245.7,18.2L246.8,17.7L248.3,17.6L255.3,15.5L260,15.3L260.2,15ZM272.9,18.5L273.7,18.5L272.8,19.1L274.7,19L276.5,18.5L277.7,18.8L277.5,19.3L275.6,20.6L272.5,21.3L270.2,21.2L269.6,20.9L267.9,21.4L265.6,21.6L262.7,22.3L260,22.6L258,21.9L261.6,21.1L263.8,21.1L265.7,20.5L260.2,20.9L261.4,20.1L260.4,20L258.8,20.9L256,21.2L255.1,20.7L253.2,20.6L254.5,19.9L256.6,19.9L258.9,19.3L255,19.6L255.5,19.3L259.7,18.9L257,18.9L257,18.5L259,18L259.8,17.6L262.5,17.5L262.6,18.1L264.8,18.1L266.1,19.1L266.4,19.7L270.1,19.8L270.8,19.4L269.5,19L270.5,18.6L269.7,17.8L272.5,16.8L274.1,16.9ZM253,27.1L255.2,26.9L256.4,26.2L258.5,26.4L259.7,26.8L257.6,27.7L259.2,27.7L261.7,27L261.5,26.1L262.7,26.1L264.3,27.4L263.7,29.3L264,29.6L265.8,28.9L265.6,28.3L266.5,25.8L267.4,25.2L269.4,25.4L271.1,26.1L271.4,26.6L271,27.6L271,29.7L269.7,30.9L270.2,31.9L271.5,32.5L271.9,32.1L273.9,33.5L274.9,33.8L274.3,34.6L272.9,34.7L271.9,34.3L270.6,35L269.3,34.7L269,35.9L270.8,35.2L271.6,35.4L271.1,36.4L268.6,37L264.3,36.7L264.8,36.3L262.4,36L262.1,35.3L259.6,36.5L257.6,36.7L256.1,37.1L250.8,37.7L246.9,37.8L246.6,36.9L247.2,36L243.5,35.7L241.9,35.3L241.6,34.3L242.2,33.6L247.8,33L251.6,33.3L253.8,33L253.1,32.7L250.3,32.1L245.6,32.3L242.4,32.2L241.6,31.3L242.9,30.9L247.5,30.3L248.5,29.8L243.9,30.2L243,30.1L244.4,29.5L242.3,29.5L242.8,28.7L244.9,28L244.7,27.6L248.3,26.3L254.5,25.2L255.2,25.4L254.4,26.5ZM246.2,23.3L247.2,23.5L248.9,23L251.3,23.1L253.3,24.5L253,25L250.6,25.5L244.4,26.9L242.7,27.7L240.9,28.1L238.3,29.9L235.9,30.1L232.9,31L232.1,30.7L231.9,29.5L230.1,28.7L229,28.7L232.2,27.2L233.7,25.9L237.4,24.2L237.1,22.7L243.3,22.2L246.8,23ZM358.5,3.1L363.7,3.3L359.6,3.8L361.5,3.8L366.3,3.3L366.8,3.5L368.4,3.5L368.9,4L371.6,4.2L371.6,4.5L369.7,5L364.9,5.6L361,5.9L360.3,6.1L356.8,6.5L357.4,6.6L362.4,6.1L364.1,6.1L362.5,6.6L355.8,7.9L353.3,8.5L351.8,8.2L352.1,8.8L348.6,9.1L350.8,9.1L349.3,9.9L347.2,10L345.4,9.9L345.2,10.4L341.1,10.6L338.7,10.4L342.3,11.4L339.8,11.3L334.8,11.4L335.9,11.7L339,11.5L341.9,12.2L340.8,12.6L338,12.7L339.8,13.1L338,13.8L333.9,14L333.1,15L331.6,15.4L328,15.5L326.3,15L326.9,15.6L328.3,15.9L330.1,15.8L329.9,16.4L331.8,16.3L332,16.8L331.1,17.3L328.3,17.9L325.9,18.2L326,17.6L324.3,17.4L323.3,16.9L323.4,17.5L320.2,17.5L320,17L319.3,17.8L317.6,17.9L315.6,17.2L314.8,17.7L311.6,17.6L309.5,17.4L310.2,16.6L312.9,16L315.9,15.8L314.8,15.1L314.6,14.5L317,14.1L318.3,14.5L318.8,15.1L320.2,15.4L322.3,15.2L324.4,14.5L325.2,14L322.4,15L319.6,14.9L319.8,14L322,13.4L321.5,13.1L320.4,13.5L318.8,13.7L319.9,13.1L317.6,13.6L316.5,13.5L317.1,12.9L319,12.1L322.2,11.8L325.6,12.1L327.4,11.8L324.3,11.7L323.9,11.3L325.6,11.4L323.9,10.2L321.9,9.7L322.1,9.1L323.1,8.6L327.6,8.8L330,9.9L331.5,10L329.1,8.7L330.1,8.5L334.9,8.2L335.9,7.9L341.3,7.4L338.4,7.3L339.3,6.8L342.3,6.3L340.2,6.5L337.3,7L336.5,7.4L333.4,7.9L329.8,8.1L331.4,7.6L329.2,7.8L327.6,8.1L323.7,8.1L323.3,7.9L326.4,7.2L330.3,6.9L325.6,7.1L322,7.9L319.4,7.6L319,7.3L320.7,7.2L324.3,7.1L327.6,6.6L323,7L318.6,7.1L318.4,6.8L321.9,6L318.2,6.3L319.6,5.9L316.3,5.8L319,5.3L321.1,5.3L322.9,5L326.3,5L328,5.2L328.6,5L326.7,4.7L330.3,4.2L332.3,4.4L332.9,4.8L333.8,4.6L338.7,5.4L337.8,5L335,4.5L334.5,4.2L336.1,4.1L335.6,3.8L337.8,3.9L337.5,3.6L341.6,3.7L339.6,3.3L344,3.3L346.1,4L347,3.9L345.2,3.1L349.9,3.1L351.4,3.6L351.4,3.3L352.8,3L355.2,3.1L357.9,2.9ZM300.9,14.3L304.4,14.4L305,14.7L303.9,15.1L299.3,15.1L299.5,14.5ZM299.1,21L298.4,21.9L296.1,22L294.2,21.5L293.2,20.9L295.9,19.8L298.5,19.6L299.3,20.2ZM284.4,23.7L285.6,24.2L289,23.9L289.7,24.4L288.3,24.7L288.7,25.1L285.6,26.1L287.5,26.1L287.5,27L288.8,26.9L287.6,27.9L287,29.1L284.7,29.6L283.2,29.2L283.1,30.1L281,30.3L280.7,29.3L279.7,28.3L277.8,27.8L276.7,26.7L278.1,25.9L278.9,26L279.4,26.7L281.1,26.7L282.3,26.2L282.2,25.5L280.5,25L282.3,24.1L284.1,24.1ZM300,46.6L301,46.1L305.2,48.3L305.3,49.6L304.6,50L307,49.8L307.7,50.7L305.7,51.5L303.1,50.9L303.3,50.2L301.1,49.9L300.4,50.6L297.7,52L295.6,52.4L295.8,50.9L292.7,51.2L293.8,50.3L295.5,49.7L295.9,48.5L298.5,45.4L299.7,44.8ZM293.9,17.5L292.9,19L292.5,20.1L291.5,20.1L291.3,20.8L289.3,21.1L286.1,21.1L285.8,20.2L288.7,19.5L288.1,19.4L282.7,19.8L282.4,19.6L284.6,18.9L285.7,19.2L285.1,17.9L286,17.6L288.4,18.8L288.3,18L289.3,17.9L287.9,17.5L290.5,17.1L291.1,17.5L292.5,17ZM289.5,10.8L290.3,11L290.1,11.8L292.1,11.4L294.9,12.5L294,13.2L294.7,13.6L294.1,14.2L292.5,14.3L291.5,14.1L291.3,13.4L288.6,13.3L288.6,13L285.4,13.2L284.7,12.7L287,12.7L287.4,11.6L285.7,12L286.2,11.4L284.9,11.5L285.9,10.8ZM314.8,6.9L315.8,8L318.2,8.3L317.7,8.7L319.2,9.1L319,8.5L320.7,8.5L319.7,9.1L321,9.6L319.8,10.3L321.1,10.1L321.9,10.5L322.9,10.2L323.4,10.8L322.7,11.1L318.9,11.8L317.4,12.3L317,11.6L316,12.8L315.1,12.5L314.2,13.4L312.7,12.5L312.9,13.5L311,13.1L310.7,13.5L308.5,13.3L307.5,12.7L309.2,12.6L306.7,12.5L305.9,11.6L311.9,10.7L309.3,10.5L306.9,10.9L306.3,10.7L304.8,10.9L304.3,10.4L306.7,10.1L304.1,10L303.6,9L307.3,9.2L307.8,8.9L306.1,9L304.7,8.7L306.4,8.5L306.1,7.8L309.8,8.1L307.6,7.5L308.4,7.2L312.2,6.7L311.1,6.5L312.7,6.4ZM301.3,16.4L303.1,16.8L301.8,17.5L303.2,17.1L305.6,17L307.4,17.2L306.9,17.6L309.7,17.9L309.2,18.2L305.6,18.2L307.4,18.5L308.8,19.3L307.6,19.7L308.8,20L309.2,19.5L310.3,19.8L312.3,19.6L314.4,20.1L314.4,19.8L317.5,19.5L319,19.1L320.2,19.2L322.5,19L325.6,19.5L326.6,20L326.3,20.6L324.6,21L326.3,21.3L324.6,21.6L324,22.1L320.9,22.4L318.8,22.2L318.9,21.5L317.5,22.2L311.4,22.4L308,22.3L308.7,21.6L305.4,22.2L301.7,21.6L301.9,20.1L303.3,19L302.5,17.8L301.3,18L298.2,18L297.4,17.3L296.1,16.8L296.8,16.3L298.7,16.1ZM301.1,12.6L303.2,13.1L302.1,13.3L302,13.9L298.1,14.3L297.4,13.7L298.9,13.5L297.4,13.3L297.1,12.9L298,12L300.7,12.3ZM298.2,23.2L299.7,23.6L302,23.6L303.1,23.9L297.7,26.7L293.5,26.7L294.2,27.6L292.5,28.6L290.2,28.6L291,27.4L290.9,26.7L292.5,24.3L294,24.4L294,23.6L295.5,23.3ZM281.3,34.8L283.1,35.6L283.3,37.2L281.3,37.9L279.3,37.7L278.1,36.9L275.9,36.7L276.3,36.1L278.7,35.6L279.8,34.5L281,34.2ZM332.1,103.1L332.1,103.8L334.4,101.9L335.3,103L333.7,103.9L331.4,104.2L331.2,103.1L333.4,100.4L334.7,99.8L333.6,102.4ZM316.9,105.4L316.2,105.1L316.5,104.1L315.8,103.8L316.9,99.6L316.1,98.8L314.6,99.2L313.8,98.4L311.3,100.7L309.9,103.2L307.8,105.2L306.8,105.1L306.1,105.9L298.3,105.9L301.5,104.6L303,102.8L306.7,100.9L310.4,99.7L315.2,95.9L319.1,94.2L322.7,93.1L325.9,93.1L327,94L326.4,95.5L323.9,96.7L322.4,96.2L321.1,96.6L323,97.7L325,97.6L322.9,99.5L323.7,100.2L324.1,102.1L326.7,103.6L328.6,104L330,103.3L331.8,105.1L324.6,107.5L324.1,107.1L321.4,109.5L319,110.4L318.2,109.6L318.8,107.9L320.2,106.7L323.8,105L323.6,105.5L326.2,104.8L322.5,104.8L324.3,103.4L320,105.3L317.5,105.7ZM350,86.1L348.5,86.7L348.8,87.6L346,90.5L345.3,91.9L347,90.4L348.7,90.7L347.2,91.6L346.9,92.3L349,92.3L348.7,93.1L350.8,92.1L352,92.4L352.6,93.3L351,94.4L352,94.7L350.9,95.5L353.5,94.8L351.9,96.1L351,97.4L351.5,97.8L353.6,96.4L352.5,97.8L353.7,98.1L352,100.9L350.8,100.8L351.2,99.4L349.6,100.2L350.7,98.6L350.2,97.2L349,98.7L348.3,98.6L346.8,100.1L345.7,100.2L348.4,98.1L347.3,97.8L346,98.2L346.2,97.3L343.4,98.1L340.2,97.7L338.2,98.1L338.2,96.8L340.8,95.2L340,94.9L341.1,93.5L342.2,93L342.4,92.1L345,88.6L346.8,86.8L348.7,86ZM305.7,31.2L308.9,30.8L309.1,31.2L310.5,29.6L309.5,29.5L308.7,28.7L310.3,28.1L311.9,28.5L310.5,27.6L310.6,26.6L312.7,25.2L315.3,25L315.6,24.6L318,24.3L320.3,24.5L320.3,25.3L321,25.8L321.1,26.7L318.5,27.9L318.6,28.9L320.6,28.1L321,27.6L324.4,27.7L324.7,27.1L327.7,26.8L330.6,27.4L330.7,28.1L329.1,28.9L330.8,28.4L332,28.6L329.9,30.2L331.2,29.5L332.6,29.4L333.2,29.9L334.2,29.5L336.5,29.9L337.1,30.4L336.2,31L337.6,31L337.3,31.8L335.3,32.4L335.8,32.5L339,31.6L341.6,32.3L341.7,32.6L337.7,33.7L340.5,33.3L340.2,34L342,33L343.2,33.8L343.1,34.6L341.5,34.5L338.6,35.1L340.2,35L342.4,35.2L343.6,35.7L343.2,36.1L341,35.8L339.5,36L341.1,36.4L340.5,37.1L339.7,36.9L339.9,37.7L342.5,38L342,38.6L343.3,38.4L342.4,39.6L345.6,39L346.8,40.2L347,41.1L348.7,41.2L346.8,42.3L350.6,41.8L351.6,42.8L350.1,43.7L348.7,43.5L349.5,44.5L348.2,44.5L347.6,45.5L346.2,45.6L344.8,47.5L344.4,47L343,47L342.1,45L343.2,44.3L341.4,44.6L340,43.1L338.9,43.1L338.6,43.7L337.7,43.2L338.6,44.5L337.1,44.7L336.1,43.9L336.8,45.2L338,46.1L337.4,46.3L338.4,47.4L339.8,47.6L341.1,48.8L340.5,50L341.5,50L341,52.1L340.1,50.7L339.8,52.1L340.2,53L339.2,53L338.9,53.8L337.1,52.5L336.6,52.7L335.3,52L334.3,50.8L334.3,51.6L333,50.8L332.1,50.9L333.1,52.3L334,52.6L336.6,55L335.6,56L333.4,55.2L330.1,54.5L329.5,53.5L328.1,53.5L326.2,52.7L325.1,51.6L326.4,51.4L325,50.9L323.3,48.9L320.6,47.9L320.9,48.5L316,49.4L313.9,49L313.4,48.3L314,47.5L316,46.8L316.4,46.1L319.3,46.7L319.6,46.4L324.4,46L324.4,45.2L323.4,44.2L329.6,41.2L328.8,38.2L328,38.4L327.7,37.6L326.8,37.6L326.3,36.5L325.2,36.6L322.5,37.3L323,36.5L324.3,36.4L325,35.7L323.9,35.3L324.1,34.7L322.8,34.8L322.1,34.3L322.3,33.2L321.2,33.3L320.2,32.3L319.3,32.9L320,33.7L318.7,34.1L315.3,33.6L312.8,34.3L311,33.8L309.5,34L304.8,33.5L304.6,32.8L301.8,33.2L300.3,32.5L300,31.1L303.1,31.4L304.5,31.3L303.4,30.7L301.1,30.5L300,30L300.4,28.8L301.5,28.3L301.5,27.6L303.9,25.9L305.5,25.1L308,24.3L310.1,24L313.3,24.1L313.4,24.3L310.5,25.4L308.5,26.7L308.6,27.5L308,28.3L308.1,29.2L309.4,30.3ZM333.1,93.4L332,93.5L329.1,92.5L327.4,91.2L328.3,90.9L331.1,91.6L333.2,92.9ZM326,101.4L330,101.4L327.9,102.9L324.8,100.9L325.6,100.5ZM302.9,52.9L302.2,53.8L299.6,55L298.1,55.2L298.1,54.3L299.8,53.1ZM307.4,54.5L307.8,54.9L306.1,56.6L305.1,56L305.6,55.2ZM323.8,38.3L324.8,38.5L323.9,40.4L322.2,41.1L319.6,41.1L319.6,40L321.5,38.5ZM324,24.4L326.4,24.4L328.3,24.8L329.5,25.9L328.9,26.6L326.2,26.4L322.6,26.7L321.9,26.4L322,25.5L321,25.1L321.6,24.2ZM292.3,82.4L289.6,81.5L291.9,81.1ZM300.8,72.4L300.8,72.4L300.8,72.4ZM300.7,72.1L297.9,73L300.4,71.1ZM298.3,72.2L298.3,72.2L298.3,72.2ZM310.5,15.6L309.6,15.7L308.2,15.3L308.6,14.8L310.5,14.8ZM282.4,15.9L281.2,15.8L280.9,14.5L281.8,14.5L282.9,15.4ZM299.6,9.4L298.9,9.9L297.2,9.6L298.1,9ZM271.9,26.3L271,25.3L269.9,24.9L270.9,24.3L273.3,24.2L274.6,24.5L274.2,25.2ZM284.4,18.6L283.2,19.2L281.7,19.2L280.7,18.2L284.2,17.9ZM282.2,17.2L283.7,17.5L281.1,17.8L281.1,17.2ZM252.5,19.7L250.5,19.6L254.9,18.4L254.8,18.7ZM266.4,14.4L264.9,14.4L264.7,13.9L266.2,13.7ZM178.9,77.3L178.9,77.3L178.9,77.3ZM173.8,84.8L173.8,84.8L173.8,84.8ZM179.5,78.8L179.5,78.8L179.5,78.8ZM178.8,81.2L178,80.1L179.1,80.4ZM180.3,76.4L181.7,75.7L180.3,76.4ZM181.4,81.9L180.6,82.4L180,81.8L180.9,80.9ZM180.6,92.6L180.6,92.6L180.6,92.6ZM185.5,92.1L185.5,92.1L185.5,92.1ZM179.8,91.9L179.8,91.9L179.8,91.9ZM184.1,90.4L184.1,90.4L184.1,90.4ZM179.7,83.1L179.7,83.1L179.7,83.1ZM180.1,86.3L180.1,86.3L180.1,86.3ZM180.8,83.5L180.8,83.5L180.8,83.5ZM179.7,81.7L179.7,81.7L179.7,81.7ZM180.3,81.3L180.3,81.3L180.3,81.3ZM185.9,94.5L185.9,94.5L185.9,94.5ZM333.8,109.2L333.8,109.2L333.8,109.2ZM332.1,104.5L332.1,104.5L332.1,104.5ZM331.3,98.9L331.3,98.9L331.3,98.9ZM325.6,97.1L325.6,97.1L325.6,97.1ZM325.7,96.9L325.7,96.9L325.7,96.9ZM318.3,108.1L318.3,108.1L318.3,108.1ZM317.4,106.9L317.4,106.9L317.4,106.9ZM301.6,104.5L301.6,104.5L301.6,104.5ZM301.3,104.2L301.3,104.2L301.3,104.2ZM309,100.2L309,100.2L309,100.2ZM349.2,88.5L349.2,88.5L349.2,88.5ZM350.7,91.9L350.7,91.9L350.7,91.9ZM350.6,85L350.6,85L350.6,85ZM351.9,91.5L351.9,91.5L351.9,91.5ZM349.9,98.5L349.9,98.5L349.9,98.5ZM339.5,54.1L339.5,54.1L339.5,54.1ZM329.4,60.6L330.2,59.6L330.5,60.2ZM327.6,54.1L326.3,53.2L327.6,53.6ZM338.2,57.4L337.2,56.6L338.6,56.6ZM338.3,56L338.3,56L338.3,56ZM326,64L326,64L326,64ZM338,60.2L338,60.2L338,60.2ZM341.2,72.7L341.2,72.7L341.2,72.7ZM341,68.3L341,68.3L341,68.3ZM341.4,35.1L341.4,35.1L341.4,35.1ZM349.2,41.7L349.2,41.7L349.2,41.7ZM328.5,18.8L327.3,18.9L329,18.3ZM299.2,70.6L299.2,70.6L299.2,70.6ZM300.5,68.4L300.5,68.4L300.5,68.4ZM299.9,70.9L299.9,70.9L299.9,70.9ZM294.8,80.8L294.8,80.8L294.8,80.8ZM294.5,84.8L294.5,84.8L294.5,84.8ZM186.3,94.1L186.3,94.1L186.3,94.1ZM184.4,90.6L184.4,90.6L184.4,90.6ZM327.3,39.7L325.4,39.6L325.5,39L328,39.2ZM312.5,51.5L313,52L311.9,52.5L311.1,51.6ZM298.6,19.2L298.6,19.2L298.6,19.2ZM302,62.4L302,62.4L302,62.4ZM302.7,61.9L302.7,61.9L302.7,61.9ZM288.8,26.3L288.8,26.3L288.8,26.3ZM290.7,22.3L290.7,22.3L290.7,22.3ZM287.6,23.9L285.5,23.8L289.2,23.3ZM295.7,35.4L295.7,35.4L295.7,35.4ZM294.8,35.9L294.8,35.9L294.8,35.9ZM319.7,53.9L319.7,53.9L319.7,53.9ZM325.5,38.2L324.7,37.8L325.7,37.4ZM307.4,59.2L307.4,59.2L307.4,59.2ZM316.8,38.6L316.8,38.6L316.8,38.6ZM315,51.7L313.8,51.2L314.4,50.9ZM318.3,34.4L316.7,35.1L315.3,34.7ZM321,34.6L321,34.6L321,34.6ZM313.7,50.1L313.7,50.1L313.7,50.1ZM305.4,43.8L305.4,43.8L305.4,43.8ZM317.3,36.9L317,36.7L319.3,35.5L320,35.7ZM322.3,36.1L322.3,35.3L323.3,35.5ZM303.6,33.6L303.6,33.6L303.6,33.6ZM303.4,45.1L302.5,45.2L302.4,44.2ZM300.4,39.9L300.2,38.9L301.1,38.3L301.1,39.4ZM301,45.7L300.4,45.3L301.1,44.5ZM277.2,56.1L277.2,56.1L277.2,56.1ZM287.5,17.2L287.5,17.2L287.5,17.2ZM287.6,13.5L287.6,13.5L287.6,13.5ZM289,14.6L288,14.2L289.6,14.1L290.4,14.5ZM309.2,17.4L308.4,17.4L308.2,16.7L309.4,16.6ZM295.1,19.8L293.3,20.1L294.9,19.5ZM294.7,22.3L294.7,22.3L294.7,22.3ZM247.6,19.3L247.6,19.3L247.6,19.3ZM264.4,16.8L262.2,16.8L264.1,16.5ZM278.6,21L277.4,20.7L279,20L279.9,20.6ZM274.1,37L274.1,37L274.1,37ZM274.9,36.5L274.9,36.5L274.9,36.5ZM277.1,32.6L277.1,32.6L277.1,32.6ZM285.1,35L285.1,35L285.1,35ZM273.3,35.4L273.3,35.4L273.3,35.4ZM270.3,37.6L270.3,37.6L270.3,37.6ZM264.4,38.1L264.4,38.1L264.4,38.1ZM255.5,40.8L255.5,40.8L255.5,40.8ZM254,39.2L254,39.2L254,39.2ZM254.3,41.8L254.3,41.8L254.3,41.8ZM253.7,39.2L253.7,39.2L253.7,39.2ZM196.3,35L196.3,35L196.3,35Z","CM":"M503.1,232L504.4,228.1L507.3,225L508.6,224.8L510.1,226.7L511.9,224.6L513.4,220L514.5,219.1L514.8,217.4L515.4,217L515.7,215.5L517.3,212L519.1,210.9L519.2,209L518.1,208.1L517.7,206L518.9,206.3L520.5,209.8L520.3,212.1L521,214.5L522.1,215.6L518.3,215.7L517.6,216.6L518.5,218.1L520.7,220.1L521.7,223.3L519.8,227.1L518.9,228L519.4,228.5L519.3,230.3L519.7,232.3L520.5,233.2L520.8,234.9L523.4,237.8L523.7,239.7L523.3,241.6L522.5,240.9L519.1,240.1L515.9,240.1L515.7,239.8L510.6,239.7L510.6,240.1L506.9,240.1L506.5,239.6L506.9,237.2L505.8,235L504.3,234.1L504.1,232.6Z","KH":"M756.5,211.6L756.5,211.6L756.5,211.6ZM757.4,213.3L757.4,213.3L757.4,213.3ZM767.3,200.9L767.1,202.7L768.1,204.8L768.2,207.6L767.9,208.5L764.3,210.1L764.1,211.5L765,213.1L763.9,212.5L762,212.8L761.6,213.9L760.5,214.3L758,213.7L757.9,212L756.9,212.7L756.1,210.3L755.4,208L754.6,207.2L753.9,204.5L754.5,204.4L755.9,202L760.1,201.7L761.2,202L763.3,203.3L763.4,202L764.7,201.3L765.6,202.1Z","MM":"M745.1,183.3L743.3,183.1L742.1,185L739.8,185.1L739.4,186L739.6,188.6L739,189L740.1,191.5L742.2,193.8L743.5,196.2L743,196.7L743.1,198.7L742.2,199.3L742.5,200.5L745.3,204L745.4,205.9L746.4,207.6L747.2,210L745.2,213.5L745.2,215L744.4,213.5L744.9,210.6L744,205.7L742.9,203.9L741.3,200.4L740.4,195L739.5,195.2L738.1,192.7L737.5,195L735.4,196.3L734.5,197.7L734.3,196.7L732.5,197.1L732.5,195.6L731.3,196.8L731.7,191.9L731,189.9L729.8,187.9L728,186.2L729.3,186L727.3,184.1L726.3,184L724.2,181.8L723.6,180.2L724.7,180.2L724.2,178.1L725.3,178L725.2,175.7L725.7,174.4L725.1,171.6L727.3,172.1L728.1,168.4L727.6,167.8L728.6,165.3L728.2,163.5L730.2,161.6L731.7,161.2L732.9,162L732.3,160.1L732.8,158.4L733.5,157.6L734.9,158.7L735.8,160.5L736.7,160.5L737.5,162.9L737.9,166L736.8,166.7L735.9,170.2L736.5,172.1L737.4,171.5L739.5,171.4L739.3,172.2L740.1,174.2L741.5,174.5L741.6,177.6L743.6,177.9L744.7,179.7L746.8,178.8L747.1,179.3L745.2,182ZM743.7,212.6L743.7,212.6L743.7,212.6ZM743.8,215.8L743.8,215.8L743.8,215.8ZM743.5,211L743.5,211L743.5,211ZM744.2,209.6L744.2,209.6L744.2,209.6ZM744.3,210.1L744.3,210.1L744.3,210.1ZM743.7,207.5L743.7,207.5L743.7,207.5ZM743.1,208.9L743.1,208.9L743.1,208.9ZM732,197L732,197L732,197ZM740.2,196L740.2,196L740.2,196ZM728.8,188.4L728.8,188.4L728.8,188.4ZM727.7,184.6L727.7,184.6L727.7,184.6ZM728.5,185.7L728.5,185.7L728.5,185.7ZM744.5,212.6L744.5,212.6L744.5,212.6ZM743.1,210.3L743.1,210.3L743.1,210.3ZM742.9,208.1L742.9,208.1L742.9,208.1ZM743.3,205.9L743.3,205.9L743.3,205.9ZM733,197.4L733,197.4L733,197.4ZM726.4,184.5L726.4,184.5L726.4,184.5Z","BI":"M562.5,254.3L562.1,255.8L563.1,257.1L561.3,259.6L560.2,260.7L559.3,260.7L558.8,259L558.9,256.4L558.3,255.3L560.6,255.3L560.8,254.1Z","BF":"M482.4,212.5L479.8,212.1L478.1,212.5L472.4,212.5L472.8,217.2L471.3,215.9L469.6,215.9L468.4,216.7L466.7,215.8L465.2,214.3L465.3,212.3L465.8,211.8L465.8,209.9L468.1,208.3L468.7,206.9L468.4,205.8L469.2,205L471.2,205.3L471.4,204.1L473.4,202.2L474.3,202.5L474.7,201.6L478,199.8L480.6,200.2L480.4,201.5L481.7,204L483.2,205.1L482.7,206.1L484.2,207.3L485.6,207.1L485.5,208.2L486.4,209.7L485.3,211.2L483.8,211.1Z","BG":"M549.1,115.3L547.3,115L545.6,115.4L545,116.1L544.7,117.2L542.5,117.6L540.6,116.6L536.7,117.3L536.9,116.1L535.1,114.3L535.2,112.6L536.4,111.6L535.3,110.7L534.8,109L535.4,108.3L536.8,109.4L542.4,110.1L544.1,109L546.2,108.5L550,109.8L549.8,110.9L548.5,111.6L548.6,112.9L547.7,113.8Z","BN":"M790.5,231.5L791,233.2L790.5,233.1L790.2,231.5ZM790.2,231.5L789.2,234.3L787.6,232.5Z","BR":"M299.5,243L301,244.5L302.6,243.8L303,244.7L304.3,243.4L306.9,241.8L307.2,240.9L308.9,239.9L308.9,239.3L307.2,238.9L306.7,235.6L305.2,233.6L307.3,234.6L309.3,234.6L310.1,235.6L310.8,234.3L312.4,234L315.5,232.7L316.6,231.2L316.2,230.6L318.3,231L317.9,232.7L319,233.2L319.4,234.5L318.5,235.6L318.1,238.4L318.7,240.9L320.1,242.5L322.1,242.8L322.5,241.9L324.5,241.5L325.8,240.5L327.6,240.8L328.8,241.1L328.5,239.7L331.6,238.7L332.6,239.6L333.9,240.2L334.9,239.5L337.1,240L337.8,239.5L339.7,235.3L340.7,234.1L341.8,234L342.3,236.6L343.8,241.1L345.2,241.6L345.3,243.2L342.8,246.3L341.6,247.1L339.6,251.2L337.9,251.7L339.8,251.8L342.6,249.8L343.2,252.3L344,253.1L346.9,252.2L346.4,254.9L347.2,252.8L348.5,251.5L349.2,251.9L349.2,250.4L350.1,249.1L352.1,248.8L353.6,249.3L357.3,251.1L357.7,252.2L358.3,251.4L359.5,252.3L360.1,253.6L359.3,256.6L362.9,254.3L366,255.6L368.5,256L370.8,255.6L372.2,255.8L376.2,258.4L377.4,260L379.8,262.2L381.4,262.8L384.2,262.9L385,264.2L386.3,269.6L386.2,271.7L385.5,274.7L382.2,279.6L380.8,280.6L379,284.6L377.6,287L376.3,286.3L375.4,289.3L375.6,292.6L376.3,296.4L375.6,301L375.8,302.2L375,303.1L374.5,305.1L374.7,307.1L373.1,311.2L372.1,312.2L371.5,315.9L370.1,316.7L369.3,318.7L366.2,318.8L364.5,318.5L362.5,319L360.5,321.3L359.2,321.3L357,322.7L354.6,325.1L353.8,326.4L352.6,326.6L353.1,327.7L353,330.5L353.5,332L353.7,334.8L353.4,336.3L351.2,338.8L350.2,342.2L348.4,345.5L346.4,347.5L346.3,346.6L347.2,346.4L348.3,345L349.3,343L349.2,341.6L347.8,341.5L347.5,344.1L346.3,345.2L346.2,347.6L345.3,350.7L343.8,352.6L343.1,350.8L343.9,349.4L342.6,348.4L342,347.3L339.6,345.5L337.8,344.7L336.8,343.6L335.8,344.2L335.1,342.8L333.2,341.2L331.2,341.4L332.7,339.6L335.2,335.2L337.3,333.1L339.7,331.8L339.8,329L339,327.2L337.1,326.9L337.6,322.1L336.5,321.4L334.4,321.8L332.8,316.6L331.2,316L329.9,316.5L327.1,316L327.1,312.5L326,309.9L326.7,309.3L325.9,308.6L326.6,306.5L327,304L326.1,301.6L324.6,300.7L323.9,297.9L319.6,297.7L319.2,295.2L318.2,294L319,294L318.1,289.9L316.5,289L314.6,289.1L313.5,287.9L311.9,287.5L311,286.4L307.4,285.7L305.7,284.3L304.5,282L304.2,277.2L300.7,278L296.4,281.3L293.2,281.1L290.4,281.2L290.2,277.5L290.4,276.3L288.6,278L286.1,278.1L285.4,276.5L283.2,276.2L283.7,274.9L282.1,272.9L280.8,270.4L281.4,269.7L281.3,268.4L283,267L282.6,265.9L283.5,262.8L286.2,260.9L288.6,260.4L289,259.9L291.3,260.1L292.7,250.6L291.9,248.3L290.9,247.3L290.9,245L293.3,244.8L292.8,243.5L291.4,243.5L291.5,241.5L296,241.5L297.8,240.2ZM346,247.5L347.4,247.3L349.4,247.9L347.9,251.5L346.4,251.6L345.6,252.4L343.7,252.4L342.9,250L343.3,247.7L344.4,247.2ZM363.9,319.3L363.9,319.3L363.9,319.3ZM353.2,329.5L353.2,329.5L353.2,329.5ZM361.1,321.6L361.1,321.6L361.1,321.6ZM359.9,256L359.9,256L359.9,256ZM376.2,287.8L376.2,287.8L376.2,287.8ZM375.9,288.9L375.9,288.9L375.9,288.9ZM358.9,251L358.9,251L358.9,251ZM345.7,246L345.5,246.8L344.3,246.1ZM344.3,240.8L344.3,240.8L344.3,240.8ZM343.3,247.2L343.3,247.2L343.3,247.2ZM346.5,247.2L346.5,247.2L346.5,247.2ZM343.9,246.4L343.9,246.4L343.9,246.4ZM344.6,245.6L344.6,245.6L344.6,245.6ZM340.1,251.3L340.9,248.9L341.9,248.9L341.6,250ZM353.9,333.8L353.9,333.8L353.9,333.8Z","BW":"M547.2,302.5L549.4,307.9L552.1,309.9L552.2,310.9L553.3,311.1L553.1,312.7L554.1,314.3L556.5,315L557.4,316.3L554.3,317.9L553,319.4L550.9,321L550.4,322.7L549.2,323.9L547.9,324.3L546.9,327L544.7,327.7L542.5,327L540.9,325.9L539.9,326.5L539.2,328.5L536.4,330.9L534.1,330.9L533.8,329.6L534.4,328L533.3,325.2L532.4,324.4L532.7,315.7L535.3,315.7L535.7,304.1L541.9,303.2L542.7,304.5L544.8,303.1Z","BA":"M527,110.5L526.4,110.6L525.3,112.2L525.4,113.5L523.4,112.5L523.2,112.3L522.3,110.8L520.9,109.7L518.3,106.7L518.4,105.4L519.6,105.9L521.1,105.1L523.3,105.7L525.4,105.7L526.3,106.4L527.1,106.3L526.7,108.1L527.9,108.9Z","BO":"M295,301.6L294.6,300.6L296.1,298.9L296.3,297.7L295.4,297.3L294.7,295.6L295.3,294.5L294.7,293.6L295.8,291.2L295.2,289.6L295.2,287.1L295.9,285.9L293.2,281.1L296.4,281.3L300.7,278L304.2,277.2L304.5,282L305.7,284.3L307.4,285.7L311,286.4L311.9,287.5L313.5,287.9L314.6,289.1L316.5,289L318.1,289.9L319,294L318.2,294L319.2,295.2L319.6,297.7L323.9,297.9L324.6,300.7L326.1,301.6L327,304L326.6,306.5L325.9,308.6L326.7,309.3L326,309.9L325.8,308.8L323.3,307.2L320.8,307.2L316.3,308.3L315.2,311.2L315.4,312.7L314.8,316.4L314.2,315.7L311.3,315.9L310.6,318.3L309.6,316.4L306.5,316L305.2,315.1L303,318.3L301.2,318.3L299.8,313.5L298.1,310.8L297.9,308.5L298.4,307.6L297,306.2L296.3,303.3Z","BT":"M718.4,159.9L719.5,160.9L720,162.7L716.7,163L715.6,162.6L714.2,163.2L711.6,162.4L711.5,161.3L712.7,158.8L713.7,158.1L714.8,158.9L718.1,159.3Z","BJ":"M484.4,227.4L484.3,218.6L483.7,217.6L483.6,215.6L482.1,214.4L482.4,212.5L483.8,211.1L485.3,211.2L486.4,209.7L486.4,208.6L487.7,208.2L489.6,210.3L489.4,211.2L490.3,213.7L489.6,214.7L488.2,218.5L487.5,218.6L487.2,222.2L487.5,225.9L487.3,226.9Z","BZ":"M242.9,191.1L245.4,189.1L245.8,190.2L245.2,191.8L244.7,194.8L242.9,197.2L241.9,197.1ZM246.1,190.8L246.1,190.8L246.1,190.8ZM246.2,192.4L246.2,192.4L246.2,192.4Z","BE":"M489.9,86.5L491.2,86.2L493.7,87.3L493.3,88.1L494.1,88.4L495,89.7L494.5,90.3L493.6,90.9L493.7,92.1L491.5,91.3L491.5,90.3L489.8,90.7L489.9,89.9L488.7,89.7L487.3,88.3L486.7,88.5L485.9,87.4L487.9,86.5L489.2,87Z","BY":"M554.2,84.4L552.4,84.5L551.5,85.9L551.7,86.9L550.7,86.2L548.8,86.5L548.3,85.8L547,86L543.9,85.8L543.5,85.4L540.6,84.9L537,85.1L535.3,86.1L535.3,84.5L534.1,83.9L535.5,82.7L535.5,81.6L534.2,78.9L537.1,78.8L538.8,77.7L539.3,76L541.2,74.9L540.7,73.8L542.9,73.4L544,72.4L545.4,73L546.9,73L547.2,73.8L548.2,73.3L550.6,74.1L551,75.6L550.7,76.4L551.6,76.9L553.3,79.3L555,79.6L555.8,80.7L554.6,81.4L552.9,81.1Z","BB":"M320.7,206L320.7,206L320.7,206Z","BD":"M714.9,177.7L713.9,174.7L712.8,172.7L712.9,170.8L710.8,169.7L711.7,168L712.8,167.9L712.3,167L710.3,165.8L711,163.8L712.4,164.1L713.3,165.3L714.1,164.7L714.8,165.6L715.2,167.6L716.9,168.1L721.1,168L722,168.5L721.2,171.1L719.9,171.4L719.7,173L720.3,174.5L721.2,174.9L722.5,172.7L724.2,178.1L724.7,180.2L723.6,180.2L724.2,181.8L723.3,180.6L722.9,179L720.9,175.2L719.6,176.1L718.4,174.4L718.2,175.6L718.9,177.2L718.1,178.5L717.3,177.9L715.9,178.9ZM720.4,177.4L720.4,177.4L720.4,177.4ZM721.4,176.8L721.4,176.8L721.4,176.8ZM719.4,177.7L718.3,175.4L719.5,176.5ZM722.5,178.5L722.5,178.5L722.5,178.5ZM722.8,179.5L722.8,179.5L722.8,179.5ZM718.6,175L718.6,175L718.6,175Z","BH":"M612.3,165.8L612.3,165.8L612.3,165.8Z","BS":"M276.2,170.9L276.1,172.5L275.3,171ZM278.1,165.7L278.1,165.7L278.1,165.7ZM287,180.5L286.6,181.2L285.3,180.8ZM276.2,169.5L275.2,170.8L274.3,169.7L275.8,168.3ZM275.3,163.1L276.7,163.1L274.7,163.8ZM277.4,168.5L277.4,168.5L277.4,168.5ZM284.9,175.7L284.9,175.7L284.9,175.7ZM284.6,171.5L284.6,171.5L284.6,171.5ZM284.3,177.3L284.3,177.3L284.3,177.3ZM279.4,167L279.4,167L279.4,167ZM281,173.4L281,173.4L281,173.4ZM282.9,175.2L282.9,175.2L282.9,175.2ZM282.3,171.1L282.3,171.1L282.3,171.1ZM287.5,176.6L287.5,176.6L287.5,176.6ZM287.4,179.5L287.4,179.5L287.4,179.5Z","AZ":"M591.8,122.6L591.6,122.4L592.3,122.2L594.3,123.4L595.4,125L594,124.7ZM602.5,126.4L601.8,126.4L600.2,125.2L600.6,123.3L599.2,122.6L596.3,124.9L595.3,122.7L593.5,121.5L594.3,120.7L592.7,119.5L593.1,118.8L591.4,117.4L592,117L595.1,118.1L595.6,117.5L594.2,116.1L594.6,115.6L595.5,115.8L597,117.4L598.5,117.7L600,115.7L602,118.3L605.3,120.6L603.3,120.9L603,124.4L602.5,124.2ZM593.1,119.5L593.1,119.5L593.1,119.5ZM591.6,118.3L591.6,118.3L591.6,118.3Z","AT":"M502.9,99L502.9,98.2L504.8,98.9L505,98.2L506.4,98.6L509.3,97.6L511.2,98.4L510.6,96.3L512.6,95.2L512.9,94.4L515,94.9L515.6,93.8L520.4,94.9L521,96.7L520.9,97.7L519.7,97.5L519.6,99.8L518.8,100.2L518.5,100.8L516.2,101L515,101.6L513.1,101.3L509.9,100.7L509.3,99.6L505.2,100.2L503.1,99.6Z","AU":"M864,284.2L863.6,285.3L864.2,286.3L864.4,291.7L866.3,291.3L868.1,293.5L867.7,298.1L868.5,300.2L868.8,302L868.1,303.7L868.7,306.5L871,307.4L871.9,309L873.5,309.9L873.4,311.2L874.7,314.4L874.5,316.5L875.2,317.4L875.8,316.2L877.3,317.5L876.7,320.3L878.8,322.6L880.2,326.5L880.3,328.1L878.9,332L878.9,335.3L878.3,337.2L877.1,338.6L874.8,342.6L873.5,345.3L870.9,348.5L868.6,350L866.4,352.1L862.7,357.1L860.4,359.2L858.6,362L857.3,364.5L855.8,365.2L852.6,365.4L849.8,366.6L847.8,368L845.8,368.7L844.3,367.6L844,365.6L843,366.6L839.3,368.5L837.5,367.4L835.5,366.8L834.6,367.1L833.1,366L832.1,363.6L833.1,361.8L833.1,360L832.4,358.4L830.3,358.5L832.2,355.8L831.9,353.9L829.7,357L827.5,357.3L828.3,356.3L829.2,356.3L830.4,353.9L832.3,352.1L832.8,349.7L830.4,352.2L827.9,353.5L824.8,356.4L824.9,353.1L824.6,351.3L823.5,350.8L824,348.8L822.7,347.7L820.9,347L819.5,347.1L817.3,345.5L811.4,346.2L806.6,348L803,348.1L797.5,350.7L795.5,352.9L794.2,353.4L791.5,353.4L789.8,352.9L785.7,353.3L784.2,354.6L782.7,354.9L780.2,356.5L778.7,356.9L776.1,356.5L774.6,355.1L773,354.2L773.8,351.9L775.1,351.9L775.8,350.9L777.3,346.8L776.9,342.6L777.6,339L777.3,336.2L776.7,334.8L776.9,332.5L775.9,329.6L777.3,329.3L776.6,327.3L777.3,327.7L777.9,329.5L778.6,327.8L777.6,323.3L778.2,321.6L779.2,320.1L779.5,317.7L781.2,315.1L780.8,317.2L783.2,314.8L784.9,314.1L786.7,312.6L788.8,311.5L790.6,311.7L794.4,310.2L795.5,309.4L796.8,309.5L800.4,308.3L802.4,306.6L803.7,304.6L805.3,303.2L805.2,301L807.8,298.2L808.8,301.6L809.7,299.6L809.1,298.4L811.8,297.9L812.2,295.3L814.1,293.8L815.7,292.1L816.5,292.5L817.5,290.6L818.5,291.1L819.6,289.8L821.4,291.2L822.6,292.9L825.4,293.3L826.2,294.2L826.9,293.2L825.9,291.8L827.5,289.3L828.7,288.4L828.7,287.3L830.1,285.7L832,284.5L832.3,285.2L835.6,284.4L835.9,283.2L833.7,282.1L835,281.8L836,282.8L840,284.4L841.3,284.3L842.5,285L844.2,284L845.2,285.7L846.2,284.2L847.1,285.4L845.8,286.8L845.4,288.2L843.9,288.4L843.4,291.1L841.8,293L842,293.7L847.2,297.6L848.3,299.1L850.3,299.7L850.6,301L852.5,302.2L854.8,301.3L856.3,298.9L858.3,293.9L858.5,290L859.3,287.3L860.2,286.8L859.8,285.4L860.7,284L861.7,281L862.5,280.3L863.3,282.2L863.2,283.8ZM880.3,327.5L880.8,325.7L881.7,325.3ZM851.8,298.7L851.8,298.7L851.8,298.7ZM845.8,290L846,291.5L844.6,291.3ZM830,283.3L829,283.8L829.8,282.3ZM830.5,282.4L832.3,281.8L832.9,282.6L831.2,284.1L830.1,283.1ZM775.8,328.4L775.8,328.4L775.8,328.4ZM828.7,358.9L829.8,358.9L827.8,359.9L826.1,359.8L826.2,358.9L828.2,358.4ZM844.8,367.1L844.8,367.1L844.8,367.1ZM844.2,367.5L844.2,367.5L844.2,367.5ZM874.6,310.3L874.6,310.3L874.6,310.3ZM874.4,309.9L874.4,309.9L874.4,309.9ZM877.4,320.4L877.4,320.4L877.4,320.4ZM876.8,316.7L876.8,316.7L876.8,316.7ZM875.4,316.3L875.4,316.3L875.4,316.3ZM879.7,332.8L879.7,332.8L879.7,332.8ZM879.6,332.4L879.6,332.4L879.6,332.4ZM862,280.3L862,280.3L862,280.3ZM862.4,278.7L862.4,278.7L862.4,278.7ZM862,278.6L862,278.6L862,278.6ZM868.8,303.8L868.8,303.8L868.8,303.8ZM846.5,282.4L846.5,282.4L846.5,282.4ZM845.8,283.1L845.8,283.1L845.8,283.1ZM845.8,296.2L845.8,296.2L845.8,296.2ZM845.3,295.7L845.3,295.7L845.3,295.7ZM844.5,295.7L844.5,295.7L844.5,295.7ZM851.3,300.3L851.3,300.3L851.3,300.3ZM844.5,290L844.5,290L844.5,290ZM835.8,282.1L835.8,282.1L835.8,282.1ZM814.6,292.4L814.6,292.4L814.6,292.4ZM812.6,295L812.6,295L812.6,295ZM785.4,311.9L785.4,311.9L785.4,311.9ZM839.9,374.7L840.5,374.6L842.5,375.8L845.6,375.3L847.2,374.6L847.7,375.1L845.9,378.6L844.1,380.2L843.2,382L842,381.3L839.6,383.4L837.7,383.2L837.4,381.3L837.9,379.1L838.5,379.5L838.2,377.3L838.6,375.3L839.3,374.3ZM838.2,372.6L839.1,370.9L839,372.1ZM848.9,371.4L849.3,372.2L848.4,373L848.2,371.8ZM841.2,382.8L841.2,382.8L841.2,382.8ZM844.3,380.6L844.3,380.6L844.3,380.6ZM841.7,382.3L841.7,382.3L841.7,382.3ZM839.7,373.8L839.7,373.8L839.7,373.8ZM848.9,373.2L848.9,373.2L848.9,373.2ZM848.3,373.8L848.3,373.8L848.3,373.8ZM844.8,417L844.8,417L844.8,417ZM811.3,285.7L811.3,285.7L811.3,285.7Z","HM":"M651,412.4L651,412.4L651,412.4Z","NF":"M915.3,337.7L915.3,337.7L915.3,337.7Z","AM":"M591.6,122.4L590.3,121.3L588.8,120.9L588.5,119.2L587.6,118L591.4,117.4L593.1,118.8L592.7,119.5L594.3,120.7L593.5,121.5L595.3,122.7L596.3,124.9L595.4,125L594.3,123.4L592.3,122.2ZM591.6,118.3L591.6,118.3L591.6,118.3ZM593.1,119.5L593.1,119.5L593.1,119.5Z","AR":"M331.2,341.4L330.6,346.9L330.8,348.6L331.1,350.1L330.6,350.6L330.5,352.4L331.7,355.6L334.5,357.1L335.1,360.1L336.7,361L337,362.4L335.5,366.2L334.2,367.3L330.3,368.6L325.9,369.1L323.9,368.6L325.1,370.2L324.8,371.9L325.2,375L324,375.7L322,375.8L319.1,374.7L318.4,374.9L319.4,378.3L322.1,379.6L322.7,378.8L323.4,380.9L322.4,381.1L320.9,380.1L320.1,380.8L322,381.4L320.6,382.4L320.2,383.5L320.6,386.1L320.4,387.7L319,387.6L317.4,388.5L316.6,390.7L316.9,391.8L319.3,393.9L321.3,394.1L322.1,394.9L322.5,396.7L320.2,398.8L319.2,400.7L319.5,402.6L317.3,404.1L317.3,406L318.2,407.6L320.4,410.1L316.5,409L311.9,409L310.3,407.6L310,405.7L309.1,404.8L307.7,405.2L306.3,403.4L305.5,400.9L306.3,400.9L307.2,398L306.4,396.5L306.4,395.4L307.2,394.5L307.1,393L306.3,391.3L306.7,390.6L306.1,389.5L306.7,388.4L304.8,387.1L306.5,387L306.3,386L304.8,385.8L304.8,384.4L303.8,382.9L303.8,382L302.8,381.5L302.3,379.4L303,378.7L302.3,377.3L301.4,374.4L301.6,371L301.4,369L302.4,368.3L301.1,365.2L300.5,361.3L301.8,359.9L301.2,357.6L301.6,354.4L302,354.1L301.5,351.2L301,351.1L300.1,348.6L298.5,345.8L298.9,342.2L299.4,342L298.7,338.7L299.2,335.8L300.2,334.3L300.6,331.9L301.9,331.5L301,329.9L301.3,328.7L300.5,326.6L300.9,325.4L300.3,324.6L300.9,323.2L303.1,322.1L303.6,318.8L303,318.3L305.2,315.1L306.5,316L309.6,316.4L310.6,318.3L311.3,315.9L314.2,315.7L314.8,316.4L317,319L319.6,321.2L322.7,322.3L324.8,323.7L328.6,325.5L329.4,326.8L328,329.4L328.2,330.2L327.2,332L333.3,333.1L334.7,332.7L337,330.3L337.1,326.9L339,327.2L339.8,329L339.7,331.8L337.3,333.1L335.2,335.2L332.7,339.6ZM322.5,417.5L320.3,410.9L321.2,411.7L321.3,412.8L324.8,415.1L327.8,416.5L330.3,417L330.1,417.5L327.6,418L323.5,417.4ZM331.8,417.1L333.5,417.1L331.8,417.6ZM325.4,369.6L325.4,369.6L325.4,369.6Z","AG":"M315.7,193.6L315.7,193.6L315.7,193.6ZM315.7,191.9L315.7,191.9L315.7,191.9Z","AO":"M515.3,261.3L513.6,262.7L513.7,264.6L512.9,264.8L512.4,262.5L513.4,261.3L514.8,260.7ZM544.4,280.8L544.2,287.4L538.9,287.5L538.6,296.7L539,298.7L542.2,302L537,303.1L530.4,302.5L529,301.2L517.1,301.2L514.9,299.9L513.4,300.7L511.3,300.8L511.4,296.3L511.9,295.7L513.6,288.8L514.8,286.8L516,286L517,283.7L517.2,281.4L515.5,277.1L515,275.1L516,273L513.2,265.9L515.2,265.2L524,265.2L525,266.1L525.7,269.5L527.2,272.1L530.2,271.6L532.1,271.7L532.6,269.1L535.2,268.4L535.5,269.6L538.6,269.7L538.9,272.9L538.6,276.4L539.6,278.2L539.8,281.8L540.6,281.4L544,281.2Z","AD":"M484.2,113.7L483.5,113.4L484.2,113.7Z","DZ":"M501.6,131L500.7,132.4L501.3,136.5L501,138L499.2,140L499.8,142.6L500.7,143.1L501.4,144.8L503.2,146.3L504.6,152.1L504.1,152.5L504.9,154L505.5,156.1L505.8,159.8L505.4,161.2L505.7,163.7L504.7,165.2L506.2,167.5L506.9,169.8L510.2,170.7L511.5,173.2L499.8,181.5L495.5,185.9L491.2,187L489,187.4L488.2,186.9L488.5,184.9L484.5,183.1L483.1,181.7L483,180.8L467.4,168.6L457.4,161.4L457.4,160.2L457.5,156.9L461.7,154L462.8,154.2L463.2,153.4L465.9,153L467.2,151.4L470.7,149.5L470.2,147.6L472.3,147.1L473.7,146.1L476.7,146.3L477.3,145.1L476.1,143.8L475.7,142.4L475.4,137.9L474.4,136.8L475.1,136.8L478.9,134.4L480.1,134.3L481.3,133.2L483.2,132.4L486.6,132.1L489.5,131.2L492,131.2L493.7,131.9L496.4,130.6L497.5,131.1L498.2,130.6L500,131.3Z","AL":"M527.8,115.6L527.5,114.7L528.4,113.3L529.4,113.5L530.5,114.5L530.8,115.6L530.7,117.5L532,118.8L532.2,119.5L530.8,122.1L529.9,122.4L528.5,120.8L528,119.4L528.4,115.9Z","AF":"M647.5,129.8L650.7,130.3L651.7,131L653.7,129.8L654.6,130.5L654.8,129.1L656.7,128.8L656.4,128L657.7,126.3L659.8,127.9L660,130.4L661.3,131.8L663.6,130L664.9,129.4L665.8,130.1L666.9,129.5L668.7,130.1L667.9,130.8L663.2,131.4L661,132.6L660.2,133.9L661.5,135.4L661.9,136.5L660.6,138.6L661.2,140.1L658.2,140.6L659.6,142.5L657.9,143.3L657.5,145.2L657.9,146.7L657.1,147.7L655.1,147.2L653.8,148.1L654.3,148.6L652.2,148.7L651.1,150L651.1,153.4L648.7,154.2L647,154.2L646,154.8L644.5,154.4L641.7,154.7L637.3,153.3L639.3,150.2L638.7,148.5L636.5,148.2L636.1,145.8L634.9,143L635.6,141.8L634.5,141.4L634.2,140L635.1,138.2L635.3,135.2L637.1,135.7L638.2,136.6L640,135.7L639.9,134.6L641.7,133.9L643.1,132.9L643.4,130.4L645.1,130.1L645.5,129.1Z","SX":"M312.2,190.3L312.5,190.3L312.2,190.3Z"},"s":{"VA":[511,116],"VU":[926,295],"FM":[891,224],"MH":[937,223],"MP":[868,196],"VI":[308,190],"GU":[868,205],"AS":[24,292],"PR":[303,190],"GS":[396,416],"IO":[675,270],"SH":[453,284],"PN":[143,323],"AI":[313,190],"FK":[341,408],"KY":[267,186],"BM":[314,146],"VG":[309,189],"TC":[290,179],"MS":[314,194],"JE":[475,93],"GG":[474,92],"IM":[470,78],"TT":[315,214],"TO":[18,311],"TL":[819,274],"SZ":[562,330],"SB":[910,274],"SG":[761,243],"SC":[630,261],"ST":[499,244],"SM":[511,109],"WS":[18,289],"VC":[316,206],"LC":[317,204],"KN":[313,193],"QA":[614,168],"PW":[838,231],"NU":[29,307],"CK":[58,313],"AW":[293,208],"CW":[296,209],"NR":[931,248],"ME":[527,113],"MC":[498,110],"MU":[632,310],"MT":[517,134],"MV":[678,235],"LU":[494,91],"LI":[503,99],"LB":[571,141],"XK":[531,113],"KI":[468,251],"JM":[275,190],"PS":[570,147],"GD":[315,209],"GM":[438,205],"PM":[345,100],"WF":[6,290],"MF":[312,190],"BL":[313,191],"PF":[100,294],"NC":[917,313],"TF":[645,401],"AX":[524,61],"FJ":[955,301],"DM":[316,199],"FO":[465,55],"CY":[564,137],"KM":[598,285],"MO":[779,177],"HK":[781,176],"CV":[416,197],"BN":[789,233],"BB":[321,206],"BH":[612,166],"BS":[277,171],"HM":[651,412],"NF":[915,338],"AG":[316,193],"AD":[484,114],"SX":[312,190]}} \ No newline at end of file diff --git a/tools/worldmap/build.mjs b/tools/worldmap/build.mjs new file mode 100644 index 0000000..f202dc9 --- /dev/null +++ b/tools/worldmap/build.mjs @@ -0,0 +1,47 @@ +// Builds internal/web/static/world.json, the outline of every country for +// the world map on the Geo page, from Natural Earth (public domain) as +// packaged by world-atlas (ISC): +// +// npm i d3-geo topojson-client topojson-simplify world-atlas i18n-iso-countries +// node build.mjs > ../../internal/web/static/world.json +// +// Countries are keyed by ISO 3166 alpha-2 code, projected with the Natural +// Earth projection into a 960-wide box; Antarctica is left out. +import {createRequire} from 'module'; +import {geoNaturalEarth1, geoPath} from 'd3-geo'; +import {feature} from 'topojson-client'; +import {presimplify, simplify, quantile} from 'topojson-simplify'; +import countries from 'i18n-iso-countries'; + +const require = createRequire(import.meta.url); +let topo = require('world-atlas/countries-50m.json'); +topo = presimplify(topo); +topo = simplify(topo, quantile(topo, 0.12)); + +const byName = {'Kosovo': 'XK', 'Somaliland': 'SO', 'N. Cyprus': 'CY'}; +const fc = feature(topo, topo.objects.countries); +const W = 960; +const keep = fc.features.filter(f => { + const id = f.id ? countries.numericToAlpha2(f.id) : byName[f.properties.name]; + f.cc = id; + return id && id !== 'AQ'; +}); +const proj = geoNaturalEarth1().fitWidth(W, {type: 'FeatureCollection', features: keep}); +const path = geoPath(proj).digits(1); +const [[, y0], [, y1]] = path.bounds({type: 'FeatureCollection', features: keep}); +proj.translate([proj.translate()[0], proj.translate()[1] - y0 + 2]); +const out = {}; +for (const f of keep) { + const d = path(f); + if (d) out[f.cc] = (out[f.cc] || '') + d; +} +// centres, for countries too small to click +const ctr = {}; +for (const f of keep) { + const [x, y] = path.centroid(f); + const a = path.area(f); + if (!ctr[f.cc] || a > ctr[f.cc][2]) ctr[f.cc] = [Math.round(x), Math.round(y), a]; +} +const small = {}; +for (const [cc, [x, y, a]] of Object.entries(ctr)) if (a < 12) small[cc] = [x, y]; +process.stdout.write(JSON.stringify({w: W, h: Math.ceil(y1 - y0 + 4), src: 'Natural Earth (public domain) via world-atlas', c: out, s: small}));