diff --git a/ImperatorToCK3.UnitTests/CK3/Characters/CharacterCollectionTests.cs b/ImperatorToCK3.UnitTests/CK3/Characters/CharacterCollectionTests.cs index 62cdfec30..fdab49784 100644 --- a/ImperatorToCK3.UnitTests/CK3/Characters/CharacterCollectionTests.cs +++ b/ImperatorToCK3.UnitTests/CK3/Characters/CharacterCollectionTests.cs @@ -339,7 +339,8 @@ public void ImperatorCountriesGoldCanBeDistributedAmongRulerAndVassals() { new List>()); var provinces = new ProvinceCollection(ck3ModFS); - provinces.ImportImperatorProvinces(imperatorWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + var ck3MapData = new MapData(ck3ModFS); + provinces.ImportImperatorProvinces(imperatorWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); titles.ImportImperatorGovernorships( imperatorWorld, diff --git a/ImperatorToCK3.UnitTests/CK3/Provinces/ProvincesTests.cs b/ImperatorToCK3.UnitTests/CK3/Provinces/ProvincesTests.cs index bbb0c7b37..ce47ac4fd 100644 --- a/ImperatorToCK3.UnitTests/CK3/Provinces/ProvincesTests.cs +++ b/ImperatorToCK3.UnitTests/CK3/Provinces/ProvincesTests.cs @@ -112,7 +112,9 @@ public void PrimaryImperatorProvinceIsProperlyDeterminedForCK3Province() { var cultureMapper = new CultureMapper(irRegionMapper, ck3RegionMapper, cultures); var religions = new ReligionCollection(titles); var religionMapper = new ReligionMapper(religions, irRegionMapper, ck3RegionMapper); - ck3Provinces.ImportImperatorProvinces(irWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + var ck3MapData = new MapData(ck3ModFs); + ck3MapData.ProvinceDefinitions.Add(new ProvinceDefinition(1) {}); + ck3Provinces.ImportImperatorProvinces(irWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); var targetProvince = ck3Provinces[1]; Assert.Equal((ulong)1, targetProvince.Id); @@ -123,7 +125,7 @@ public void PrimaryImperatorProvinceIsProperlyDeterminedForCK3Province() { // Scenario 2: Single developed province in country 2 outweighs sum of civilisation in country 1. irProvince6.CivilizationValue = 100; ck3Provinces = new ProvinceCollection { new(1) }; - ck3Provinces.ImportImperatorProvinces(irWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + ck3Provinces.ImportImperatorProvinces(irWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); targetProvince = ck3Provinces[1]; Assert.Equal((ulong)1, targetProvince.Id); diff --git a/ImperatorToCK3.UnitTests/CK3/Titles/LandedTitlesTests.cs b/ImperatorToCK3.UnitTests/CK3/Titles/LandedTitlesTests.cs index c8d3f5e8d..2c368a40e 100644 --- a/ImperatorToCK3.UnitTests/CK3/Titles/LandedTitlesTests.cs +++ b/ImperatorToCK3.UnitTests/CK3/Titles/LandedTitlesTests.cs @@ -313,7 +313,11 @@ public void GovernorshipsCanBeRecognizedAsCountyLevel() { ); var provinces = new ProvinceCollection(ck3ModFS); - provinces.ImportImperatorProvinces(imperatorWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + var ck3MapData = new MapData(ck3ModFS); + ck3MapData.ProvinceDefinitions.Add(new(1)); + ck3MapData.ProvinceDefinitions.Add(new(2)); + ck3MapData.ProvinceDefinitions.Add(new(3)); + provinces.ImportImperatorProvinces(imperatorWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); // Country 589 is imported as duchy-level title, so its governorship of galatia_region will be county level. titles.ImportImperatorGovernorships(imperatorWorld, provinces, tagTitleMapper, irLocDB, ck3LocDB, config, provinceMapper, definiteFormMapper, irRegionMapper, coaMapper, countyLevelGovernorships); @@ -372,7 +376,11 @@ public void DevelopmentIsCorrectlyCalculatedFor1ProvinceTo1BaronyCountyMapping() var cultureMapper = new CultureMapper(irRegionMapper, ck3RegionMapper, cultures); var religions = new ReligionCollection(titles); var religionMapper = new ReligionMapper(religions, irRegionMapper, ck3RegionMapper); - ck3Provinces.ImportImperatorProvinces(irWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + var ck3MapData = new MapData(ck3ModFS); + ck3MapData.ProvinceDefinitions.Add(new(1)); + ck3MapData.ProvinceDefinitions.Add(new(2)); + ck3MapData.ProvinceDefinitions.Add(new(3)); + ck3Provinces.ImportImperatorProvinces(irWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); var date = config.CK3BookmarkDate; titles.ImportDevelopmentFromImperator(ck3Provinces, date, defaultConfig.ImperatorCivilizationWorth); @@ -404,7 +412,11 @@ public void DevelopmentFromImperatorProvinceCanBeUsedForMultipleCK3Provinces() { var cultureMapper = new CultureMapper(irRegionMapper, ck3RegionMapper, cultures); var religions = new ReligionCollection(titles); var religionMapper = new ReligionMapper(religions, irRegionMapper, ck3RegionMapper); - ck3Provinces.ImportImperatorProvinces(irWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + var ck3MapData = new MapData(ck3ModFS); + ck3MapData.ProvinceDefinitions.Add(new(1)); + ck3MapData.ProvinceDefinitions.Add(new(2)); + ck3MapData.ProvinceDefinitions.Add(new(3)); + ck3Provinces.ImportImperatorProvinces(irWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); var date = config.CK3BookmarkDate; titles.ImportDevelopmentFromImperator(ck3Provinces, date, defaultConfig.ImperatorCivilizationWorth); @@ -438,7 +450,11 @@ public void DevelopmentOfCountyIsCalculatedFromAllCountyProvinces() { var cultureMapper = new CultureMapper(irRegionMapper, ck3RegionMapper, cultures); var religions = new ReligionCollection(titles); var religionMapper = new ReligionMapper(religions, irRegionMapper, ck3RegionMapper); - ck3Provinces.ImportImperatorProvinces(irWorld, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); + var ck3MapData = new MapData(ck3ModFS); + ck3MapData.ProvinceDefinitions.Add(new(1)); + ck3MapData.ProvinceDefinitions.Add(new(2)); + ck3MapData.ProvinceDefinitions.Add(new(3)); + ck3Provinces.ImportImperatorProvinces(irWorld, ck3MapData, titles, cultureMapper, religionMapper, provinceMapper, conversionDate, config); var date = config.CK3BookmarkDate; titles.ImportDevelopmentFromImperator(ck3Provinces, date, defaultConfig.ImperatorCivilizationWorth); diff --git a/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs b/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs index 7d3e47d61..817bab523 100644 --- a/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs +++ b/ImperatorToCK3/CK3/Provinces/ProvinceCollection.cs @@ -2,6 +2,7 @@ using commonItems.Collections; using commonItems.Mods; using ImperatorToCK3.CK3.Titles; +using ImperatorToCK3.CommonUtils.Map; using ImperatorToCK3.Exceptions; using ImperatorToCK3.Mappers.Culture; using ImperatorToCK3.Mappers.Province; @@ -104,6 +105,7 @@ public void ImportVanillaProvinces(ModFilesystem ck3ModFs) { public void ImportImperatorProvinces( Imperator.World irWorld, + MapData ck3MapData, Title.LandedTitles titles, CultureMapper cultureMapper, ReligionMapper religionMapper, @@ -115,8 +117,13 @@ Configuration config int importedIRProvsCount = 0; int modifiedCK3ProvsCount = 0; + + var provinceDefs = ck3MapData.ProvinceDefinitions; + var landProvinces = this + .Where(p => provinceDefs.TryGetValue(p.Id, out var def) && def.IsLand); + // Imperator provinces map to a subset of CK3 provinces. We'll only rewrite those we are responsible for. - Parallel.ForEach(this, province => { + Parallel.ForEach(landProvinces, province => { var sourceProvinceIds = provinceMapper.GetImperatorProvinceNumbers(province.Id); // Provinces we're not affecting will not be in this list. if (sourceProvinceIds.Count == 0) { diff --git a/ImperatorToCK3/CK3/World.cs b/ImperatorToCK3/CK3/World.cs index 774998037..2c78a4bf8 100644 --- a/ImperatorToCK3/CK3/World.cs +++ b/ImperatorToCK3/CK3/World.cs @@ -248,7 +248,7 @@ public World(Imperator.World impWorld, Configuration config) { Provinces.ImportVanillaProvinces(ModFS); // Next we import Imperator provinces and translate them ontop a significant part of all imported provinces. - Provinces.ImportImperatorProvinces(impWorld, LandedTitles, cultureMapper, religionMapper, provinceMapper, CorrectedDate, config); + Provinces.ImportImperatorProvinces(impWorld, MapData, LandedTitles, cultureMapper, religionMapper, provinceMapper, CorrectedDate, config); Provinces.LoadPrehistory(); var countyLevelGovernorships = new List(); diff --git a/ImperatorToCK3/Data_Files/configurables/province_mappings.txt b/ImperatorToCK3/Data_Files/configurables/province_mappings.txt index 11616ac81..32dec072e 100644 --- a/ImperatorToCK3/Data_Files/configurables/province_mappings.txt +++ b/ImperatorToCK3/Data_Files/configurables/province_mappings.txt @@ -1889,6 +1889,7 @@ imperator_invictus = { link = { imp = 8841 imp = 8839 imp = 8838 ck3 = 6237 } # Hubuna, Kutnah, Jurash -> KUTHBA link = { imp = 4650 ck3 = 6290 } # 'Adan -> ADEN link = { comment = "# FINLAND BY IHT" } + link = { imp = 5973 ck3 = 173 ck3 = 171 ck3 = 168 ck3 = 169 ck3 = 170 ck3 = 5138 ck3 = 167 } # Northern Baltic Coast Impassable -> KOIVISTO, RAUTU, KOPORYE, NYEN, NOTEBORG, Ladoga, YAMA link = { imp = 5976 ck3 = 216 ck3 = 217 ck3 = 180 ck3 = 179 ck3 = 178 ck3 = 177 ck3 = 175 ck3 = 176 ck3 = 197 ck3 = 182 } # Finland Impassable -> SUND, JOMALA, RAUMA, TURKU, RIKALA, RASEBORG, PORVOO, ESPOO, VEHKALAHTI, VIIPURI link = { comment = "# SOUTH INDIA BY IHT: PRESERVED ONLY NAME-BASED MAPPINGS, REST CAN BE AUTOGENERATED" } link = { imp = 6927 imp = 6926 ck3 = 7807 } # Urayur, Bata Pandiya -> Uraiyur @@ -5096,8 +5097,6 @@ imperator_invictus = { link = { autogenerated = yes imp = 5130 imp = 5021 ck3 = 2484 } # IMPASSIBLE TERRAIN 130, IMPASSIBLE TERRAIN 021 -> Northern Apennine Mountains 1 link = { autogenerated = yes imp = 5953 ck3 = 233 ck3 = 235 ck3 = 238 ck3 = 247 ck3 = 255 ck3 = 256 ck3 = 257 ck3 = 258 ck3 = 259 ck3 = 260 ck3 = 261 ck3 = 262 ck3 = 264 ck3 = 288 ck3 = 299 ck3 = 3260 ck3 = 7 } # Norwegian Impassable -> RINGARIKI, VALDRES, SUTHRI GUDBRANDSDALI, NUMEDAL, HARDANGER, SUNNHORDALAND, MITHRHORDALAND, NORTHRIHORDALAND, VOSS, SOGNFYLKI, BREMANGER, STOLSHEIMEN, DALE, HEDDALI, NORWEGIAN IMPASSABLE 9, NORWEGIAN MOUNTAINS, SCALLOWAY link = { autogenerated = yes imp = 5952 ck3 = 232 ck3 = 236 ck3 = 240 ck3 = 323 ck3 = 324 ck3 = 325 ck3 = 326 ck3 = 329 ck3 = 342 ck3 = 345 ck3 = 346 ck3 = 347 ck3 = 348 ck3 = 349 ck3 = 350 ck3 = 351 ck3 = 352 ck3 = 353 ck3 = 354 ck3 = 355 ck3 = 356 ck3 = 8728 ck3 = 8729 ck3 = 8731 ck3 = 8732 ck3 = 8739 ck3 = 8769 } # Swedish Impassable -> ROMERIKI, HEDMARK, SUTHRI EYSTRIDALI, TINGVALLA, FRISKDAL, GILLBERG, VASE, NORASKOG, UPPSALA, HENAMORUM, VAESTRAAROS, ARBUGAE, SKYNZEKKEBERGE, FERNABO, FALENE, MOR, MOLUNGR, NORRBARKE, GAVLE, OKLABO, ODMARDEN, Leksand, Lima, Nordmark, Josse, Farnebo, Stange - link = { autogenerated = yes imp = 9424 ck3 = 173 } # $PROV5854$ -> KOIVISTO - link = { autogenerated = yes imp = 5973 ck3 = 168 ck3 = 169 ck3 = 170 ck3 = 3200 ck3 = 5138 } # Northern Baltic Coast Impassable -> KOPORYE, NYEN, NOTEBORG, Brodnica, Ladoga link = { autogenerated = yes imp = 5882 ck3 = 1489 ck3 = 7080 } # Multen -> Ustyurt Plateau, Karasye link = { autogenerated = yes imp = 5256 imp = 5255 ck3 = 1471 } # IMPASSIBLE TERRAIN 256, IMPASSIBLE TERRAIN 255 -> PERSIAN IMPASSABLE TERRAIN link = { autogenerated = yes imp = 8813 imp = 7851 imp = 7852 imp = 8782 imp = 8784 imp = 8790 imp = 8793 imp = 8808 imp = 8809 ck3 = 1468 } # Myitkyina, SEAZONE IMPASSABLE WASTELAND, SEAZONE IMPASSABLE WASTELAND, Kettha, Pu, Danai, Burma Mountains, Thanlyin, Lashio -> Eastern Wasteland 3 @@ -5130,7 +5129,6 @@ imperator_invictus = { link = { autogenerated = yes imp = 6626 ck3 = 4357 } # Kham -> Munjan link = { autogenerated = yes imp = 6743 ck3 = 1440 } # Shiyan -> Khotan link = { autogenerated = yes imp = 9439 imp = 9438 ck3 = 4610 } # Ouensa, Khobna -> TUGGURT - link = { autogenerated = yes imp = 9404 ck3 = 5139 ck3 = 5142 } # Elpes -> Lyuban, Pushkin link = { autogenerated = yes imp = 9370 ck3 = 5506 } # Kutny -> Maza link = { autogenerated = yes imp = 9357 ck3 = 5170 } # Jarvi -> Toropets link = { autogenerated = yes imp = 9354 ck3 = 5222 } # Mukka -> Velizh @@ -5213,7 +5211,7 @@ imperator_invictus = { link = { autogenerated = yes imp = 2609 imp = 2605 imp = 2614 imp = 2620 imp = 6437 imp = 7906 imp = 7907 ck3 = 942 } # Mare Aegaeum, Fretum Carysteum, Fretum Artemisium, Mare Aegaeum, Mare Aegaeum, Pagasaeus Sinus, Sinus Malianus -> Aegean Sea link = { autogenerated = yes imp = 2679 imp = 2677 ck3 = 941 } # Mare Phoenicium, Mare Phoenicium -> Coast of Cyprus link = { autogenerated = yes imp = 2669 imp = 2580 imp = 2581 imp = 2582 ck3 = 940 } # Mare Phoenicium, Mare Phoenicium, Mare Phoenicium, Mare Phoenicium -> Coast of Jerusalem - link = { autogenerated = yes imp = 9377 ck3 = 94 ck3 = 96 ck3 = 97 ck3 = 98 ck3 = 167 } # Ohut -> REVAL, JARVA, WESENBURG, NARVA, YAMA + link = { autogenerated = yes imp = 9377 ck3 = 94 ck3 = 96 ck3 = 97 ck3 = 98 } # Ohut -> REVAL, JARVA, WESENBURG, NARVA link = { autogenerated = yes imp = 2667 imp = 2578 ck3 = 939 } # Mare Aegyptium, Delta Nili -> Nile Delta link = { autogenerated = yes imp = 2662 imp = 2576 ck3 = 938 } # Mare Aegyptium, Mare Aegyptium -> Libyan Sea link = { autogenerated = yes imp = 2663 imp = 2597 imp = 2601 imp = 2660 ck3 = 937 } # Mare Aegyptium, Mare Aegyptium, Mare Aegyptium, Mare Aegyptium -> Sea of Crete @@ -5585,13 +5583,14 @@ imperator_invictus = { link = { autogenerated = yes imp = 9385 ck3 = 5147 } # Kantadak -> Izborsk link = { autogenerated = yes imp = 9390 ck3 = 5146 ck3 = 5177 } # Leulu -> Pskov, Porkhov link = { autogenerated = yes imp = 9401 ck3 = 5144 ck3 = 5145 } # Imedak -> Dedovichi, Loknya - link = { autogenerated = yes imp = 9388 imp = 9391 imp = 5020 ck3 = 5141 } # Sisalikko, Ceketek, IMPASSIBLE SEA -> Luga + link = { autogenerated = yes imp = 9391 ck3 = 5142 } # Ceketek -> Pushkin + link = { autogenerated = yes imp = 9388 imp = 5020 ck3 = 5141 } # Sisalikko, IMPASSIBLE SEA -> Luga link = { autogenerated = yes imp = 9392 ck3 = 5140 } # Hapci -> Soltsy + link = { autogenerated = yes imp = 9404 ck3 = 5139 } # Elpes -> Lyuban link = { autogenerated = yes imp = 9403 ck3 = 5137 ck3 = 5143 } # Ema -> Novgorod, Rusa link = { autogenerated = yes imp = 9397 ck3 = 5135 } # Kadus -> Haradok link = { autogenerated = yes imp = 9395 ck3 = 5130 } # Nalja -> Drysa link = { autogenerated = yes imp = 9396 ck3 = 5129 } # Inhiminen -> Polotsk - link = { autogenerated = yes imp = 0 ck3 = 4617 ck3 = 4760 ck3 = 4761 ck3 = 6322 ck3 = 6452 ck3 = 6454 ck3 = 6455 ck3 = 6456 ck3 = 6457 ck3 = 6458 ck3 = 6460 ck3 = 6461 ck3 = 6463 ck3 = 6464 ck3 = 6465 ck3 = 6466 ck3 = 6467 ck3 = 6468 ck3 = 6473 ck3 = 6474 ck3 = 6475 ck3 = 6476 ck3 = 6477 ck3 = 6478 ck3 = 6479 ck3 = 6482 ck3 = 6483 ck3 = 6484 ck3 = 6485 ck3 = 6486 ck3 = 6487 ck3 = 6488 ck3 = 6489 ck3 = 6490 ck3 = 6491 ck3 = 6492 ck3 = 6493 ck3 = 6494 ck3 = 6495 ck3 = 6496 ck3 = 6497 ck3 = 6498 ck3 = 6499 ck3 = 6500 ck3 = 6501 ck3 = 6502 ck3 = 6503 ck3 = 6504 ck3 = 6505 ck3 = 6506 ck3 = 6507 ck3 = 6508 ck3 = 6509 ck3 = 6510 ck3 = 6511 ck3 = 6512 ck3 = 6513 ck3 = 6514 ck3 = 6515 ck3 = 6516 ck3 = 6517 ck3 = 6518 ck3 = 6519 ck3 = 6520 ck3 = 6521 ck3 = 6522 ck3 = 6523 ck3 = 6524 ck3 = 6525 ck3 = 6526 ck3 = 6527 ck3 = 6528 ck3 = 6529 ck3 = 6530 ck3 = 6531 ck3 = 6532 ck3 = 6533 ck3 = 6534 ck3 = 6535 ck3 = 6536 ck3 = 6537 ck3 = 6538 ck3 = 6539 ck3 = 6540 ck3 = 6541 ck3 = 6542 ck3 = 6543 ck3 = 6544 ck3 = 6545 ck3 = 6546 ck3 = 6547 ck3 = 6548 ck3 = 6549 ck3 = 6550 ck3 = 6551 ck3 = 6552 ck3 = 6553 ck3 = 6554 ck3 = 6555 ck3 = 6556 ck3 = 6557 ck3 = 6558 ck3 = 6559 ck3 = 6560 ck3 = 6561 ck3 = 6562 ck3 = 6563 ck3 = 6564 ck3 = 6565 ck3 = 6566 ck3 = 6567 ck3 = 6568 ck3 = 6569 ck3 = 6570 ck3 = 6571 ck3 = 6572 ck3 = 6573 ck3 = 6574 ck3 = 6575 ck3 = 6576 ck3 = 6577 ck3 = 6578 ck3 = 6579 ck3 = 6580 ck3 = 6581 ck3 = 6582 ck3 = 6590 ck3 = 6591 ck3 = 6608 ck3 = 6609 ck3 = 6610 ck3 = 6611 ck3 = 6612 ck3 = 6613 ck3 = 6614 ck3 = 6615 ck3 = 6616 ck3 = 6617 ck3 = 6618 ck3 = 6619 ck3 = 6620 ck3 = 6621 ck3 = 6622 ck3 = 6623 ck3 = 6624 ck3 = 6625 ck3 = 6626 ck3 = 6627 ck3 = 6628 ck3 = 6629 ck3 = 6630 ck3 = 6631 ck3 = 6632 ck3 = 6633 ck3 = 6634 ck3 = 6635 ck3 = 6636 ck3 = 6637 ck3 = 6638 ck3 = 6639 ck3 = 6640 ck3 = 6641 ck3 = 6642 ck3 = 6643 ck3 = 6644 ck3 = 6645 ck3 = 6646 ck3 = 6647 ck3 = 6648 ck3 = 6649 ck3 = 6650 ck3 = 6652 ck3 = 6653 ck3 = 6654 ck3 = 6655 ck3 = 6656 ck3 = 6657 ck3 = 6658 ck3 = 6659 ck3 = 6660 ck3 = 6662 ck3 = 6663 ck3 = 6664 ck3 = 6665 ck3 = 6666 ck3 = 6668 ck3 = 6670 ck3 = 6671 ck3 = 6672 ck3 = 6673 ck3 = 6674 ck3 = 6675 ck3 = 6676 ck3 = 6677 ck3 = 6678 ck3 = 6679 ck3 = 6680 ck3 = 6681 ck3 = 6682 ck3 = 6683 ck3 = 6684 ck3 = 6685 ck3 = 6686 ck3 = 6687 ck3 = 6688 ck3 = 6689 ck3 = 6690 ck3 = 6691 ck3 = 6692 ck3 = 6693 ck3 = 6694 ck3 = 6695 ck3 = 6696 ck3 = 6697 ck3 = 6698 ck3 = 6699 ck3 = 6700 ck3 = 6701 ck3 = 6702 ck3 = 6703 ck3 = 6704 ck3 = 6705 ck3 = 6706 ck3 = 6707 ck3 = 6708 ck3 = 6709 ck3 = 6710 ck3 = 6711 ck3 = 6712 ck3 = 6713 ck3 = 6714 ck3 = 6715 ck3 = 6716 ck3 = 6717 ck3 = 6718 ck3 = 6719 ck3 = 6720 ck3 = 6721 ck3 = 6722 ck3 = 6723 ck3 = 6724 ck3 = 6725 ck3 = 6726 ck3 = 6727 ck3 = 6728 ck3 = 6729 ck3 = 6730 ck3 = 6731 ck3 = 6732 ck3 = 6733 ck3 = 6734 ck3 = 6735 ck3 = 6736 ck3 = 6737 ck3 = 6738 ck3 = 6739 ck3 = 6740 ck3 = 6741 ck3 = 6742 ck3 = 6743 ck3 = 6744 ck3 = 6747 ck3 = 6748 ck3 = 6749 ck3 = 6750 ck3 = 6751 ck3 = 6752 ck3 = 6753 ck3 = 6754 ck3 = 6755 ck3 = 6756 ck3 = 6757 ck3 = 6758 ck3 = 6759 ck3 = 6760 ck3 = 6761 ck3 = 6762 ck3 = 6763 ck3 = 6764 ck3 = 6765 ck3 = 6766 ck3 = 6767 ck3 = 6768 ck3 = 6769 ck3 = 6770 ck3 = 6771 ck3 = 6772 ck3 = 6773 ck3 = 6774 ck3 = 6799 ck3 = 6801 ck3 = 6802 ck3 = 6803 ck3 = 6804 ck3 = 6805 ck3 = 6806 ck3 = 6807 ck3 = 6808 ck3 = 6809 ck3 = 6810 ck3 = 6811 ck3 = 6812 ck3 = 6813 ck3 = 6814 ck3 = 6815 ck3 = 6816 ck3 = 6817 ck3 = 6818 ck3 = 6819 ck3 = 6820 ck3 = 6821 ck3 = 6822 ck3 = 6823 ck3 = 6824 ck3 = 6825 ck3 = 6826 ck3 = 6827 ck3 = 6828 ck3 = 6829 ck3 = 6830 ck3 = 6831 ck3 = 6832 ck3 = 6833 ck3 = 6835 ck3 = 6836 ck3 = 6837 ck3 = 6838 ck3 = 6839 ck3 = 6840 ck3 = 6841 ck3 = 6842 ck3 = 6843 ck3 = 6844 ck3 = 6845 ck3 = 6846 ck3 = 6847 ck3 = 6848 ck3 = 6849 ck3 = 6850 ck3 = 6851 ck3 = 6852 ck3 = 6853 ck3 = 6854 ck3 = 6855 ck3 = 6856 ck3 = 6857 ck3 = 6858 ck3 = 6859 ck3 = 6860 ck3 = 6861 ck3 = 6862 ck3 = 6863 ck3 = 6864 ck3 = 6865 ck3 = 6866 ck3 = 6867 ck3 = 6868 ck3 = 6869 ck3 = 6870 ck3 = 6871 ck3 = 6872 ck3 = 6873 ck3 = 6874 ck3 = 6875 ck3 = 6876 ck3 = 6877 ck3 = 6878 ck3 = 6879 ck3 = 6880 ck3 = 6881 ck3 = 6885 ck3 = 6886 ck3 = 6887 ck3 = 6888 ck3 = 6889 ck3 = 6890 ck3 = 6891 ck3 = 6892 ck3 = 6893 ck3 = 6894 ck3 = 6895 ck3 = 6896 ck3 = 6905 ck3 = 6906 ck3 = 6907 ck3 = 6908 ck3 = 6909 ck3 = 6910 ck3 = 6911 ck3 = 6912 ck3 = 6913 ck3 = 6914 ck3 = 6915 ck3 = 6916 ck3 = 6917 ck3 = 6918 ck3 = 6919 ck3 = 6920 ck3 = 6921 ck3 = 6922 ck3 = 6923 ck3 = 6924 ck3 = 6925 ck3 = 6926 ck3 = 6927 ck3 = 6928 ck3 = 6929 ck3 = 6930 ck3 = 6931 ck3 = 6932 ck3 = 6933 ck3 = 6934 ck3 = 6935 ck3 = 6936 ck3 = 6937 ck3 = 6938 ck3 = 6939 ck3 = 6940 ck3 = 6941 ck3 = 6942 ck3 = 6943 ck3 = 6944 ck3 = 6945 ck3 = 6946 ck3 = 6947 ck3 = 6948 ck3 = 6949 ck3 = 6950 ck3 = 6951 ck3 = 6952 ck3 = 6953 ck3 = 6954 ck3 = 6955 ck3 = 6956 ck3 = 6957 ck3 = 6958 ck3 = 6959 ck3 = 6960 ck3 = 6961 ck3 = 6962 ck3 = 6963 ck3 = 6964 ck3 = 6965 ck3 = 6966 ck3 = 6967 ck3 = 6968 ck3 = 6969 ck3 = 6970 ck3 = 6971 ck3 = 6972 ck3 = 6973 ck3 = 6974 ck3 = 6975 ck3 = 6976 ck3 = 6977 ck3 = 6978 ck3 = 6979 ck3 = 6980 ck3 = 6981 ck3 = 6982 ck3 = 6983 ck3 = 6984 ck3 = 6985 ck3 = 6986 ck3 = 6987 ck3 = 6988 ck3 = 6989 ck3 = 6990 ck3 = 6991 ck3 = 6992 ck3 = 6993 ck3 = 6994 ck3 = 6995 ck3 = 6996 ck3 = 6997 ck3 = 8000 ck3 = 8001 ck3 = 8002 ck3 = 8003 ck3 = 8004 ck3 = 8005 ck3 = 8006 ck3 = 8007 ck3 = 8008 ck3 = 8009 ck3 = 8011 ck3 = 8012 ck3 = 8013 ck3 = 8014 ck3 = 8015 ck3 = 8016 ck3 = 8017 ck3 = 8018 ck3 = 8019 ck3 = 8021 ck3 = 8022 ck3 = 8024 ck3 = 8025 ck3 = 8026 ck3 = 8027 ck3 = 8028 ck3 = 8029 ck3 = 8030 ck3 = 8031 ck3 = 8032 ck3 = 8033 ck3 = 8034 ck3 = 8035 ck3 = 8036 ck3 = 8037 ck3 = 8038 ck3 = 8039 ck3 = 8040 ck3 = 8041 ck3 = 8042 ck3 = 8043 ck3 = 8044 ck3 = 8045 ck3 = 8046 ck3 = 8047 ck3 = 8048 ck3 = 8049 ck3 = 8050 ck3 = 8051 ck3 = 8052 ck3 = 8053 ck3 = 8054 ck3 = 8055 ck3 = 8056 ck3 = 8057 ck3 = 8058 ck3 = 8059 ck3 = 8060 ck3 = 8061 ck3 = 8062 ck3 = 8063 ck3 = 8064 ck3 = 8065 ck3 = 8066 ck3 = 8067 ck3 = 8068 ck3 = 8069 ck3 = 8070 ck3 = 8071 ck3 = 8072 ck3 = 8073 ck3 = 8074 ck3 = 8075 ck3 = 8076 ck3 = 8077 ck3 = 8078 ck3 = 8079 ck3 = 8080 ck3 = 8081 ck3 = 8083 ck3 = 8084 ck3 = 8086 ck3 = 8087 ck3 = 8088 ck3 = 8100 ck3 = 8101 ck3 = 8102 ck3 = 8103 ck3 = 8104 ck3 = 8105 ck3 = 8106 ck3 = 8107 ck3 = 8108 ck3 = 8109 ck3 = 8110 ck3 = 8111 ck3 = 8112 ck3 = 8113 ck3 = 8114 ck3 = 8115 ck3 = 8116 ck3 = 8117 ck3 = 8118 ck3 = 8119 ck3 = 8120 ck3 = 8121 ck3 = 8122 ck3 = 8123 ck3 = 8124 ck3 = 8125 ck3 = 8126 ck3 = 8127 ck3 = 8128 ck3 = 8129 ck3 = 8130 ck3 = 8131 ck3 = 8132 ck3 = 8133 ck3 = 8134 ck3 = 8135 ck3 = 8136 ck3 = 8137 ck3 = 8138 ck3 = 8139 ck3 = 8140 ck3 = 8141 ck3 = 8142 ck3 = 8143 ck3 = 8144 ck3 = 8145 ck3 = 8146 ck3 = 8147 ck3 = 8148 ck3 = 8149 ck3 = 8150 ck3 = 8151 ck3 = 8152 ck3 = 8153 ck3 = 8154 ck3 = 8155 ck3 = 8156 ck3 = 8157 ck3 = 8158 ck3 = 8159 ck3 = 8160 ck3 = 8161 ck3 = 8162 ck3 = 8163 ck3 = 8164 ck3 = 8165 ck3 = 8166 ck3 = 8167 ck3 = 8168 ck3 = 8169 ck3 = 8170 ck3 = 8171 ck3 = 8172 ck3 = 8173 ck3 = 8174 ck3 = 8175 ck3 = 8176 ck3 = 8182 ck3 = 8183 ck3 = 8203 ck3 = 8204 ck3 = 8206 ck3 = 8207 ck3 = 8208 ck3 = 8209 ck3 = 8210 ck3 = 8211 ck3 = 8212 ck3 = 8213 ck3 = 8214 ck3 = 8215 ck3 = 8216 ck3 = 8217 ck3 = 8218 ck3 = 8219 ck3 = 8222 ck3 = 8224 ck3 = 8227 ck3 = 8228 ck3 = 8230 ck3 = 8231 ck3 = 8993 ck3 = 8994 ck3 = 8995 ck3 = 8996 ck3 = 8997 ck3 = 8998 ck3 = 6428 ck3 = 6453 ck3 = 6472 ck3 = 6882 ck3 = 6897 ck3 = 1048 ck3 = 6326 ck3 = 6583 ck3 = 6584 ck3 = 6586 ck3 = 6589 ck3 = 6597 ck3 = 6598 ck3 = 6599 ck3 = 6600 ck3 = 6603 ck3 = 6604 ck3 = 6605 ck3 = 6606 ck3 = 6788 ck3 = 6789 ck3 = 6790 ck3 = 6902 ck3 = 6903 ck3 = 6904 ck3 = 6998 ck3 = 6999 ck3 = 730 ck3 = 731 ck3 = 8089 ck3 = 8090 ck3 = 8091 ck3 = 8097 ck3 = 8098 } # (Unknown) -> AL-QULAYA, TAGHAZA, TAOUDENI, TEDMAIT, DJADO, SAKADAME, GISSEBI, DIRKU, BILMA, DIBELA, GHAT, AL-FEWET, DJANET, EFERI, REGGANE, TAMENTIT, ADRAR_TIMMI, BOUDA, BIR_UM-GHREIN, TIRIS, IJIL, WADAN, TINIGI, SHINQITI, AZUKKI, TIRIS-SOUTH, GARUMELE, NGUIGMI, MANAN, KANEM, JIMI, TIE, TARAZKI, KAGUSTI, MADAN, AUNO, KORO_TORO, BORKOU, FAYA, AIN_GALAKKA, TIBESTI-SOUTH, TIBESTI-CENTRAL, BARDAI, AJERE, BALBELEC, GASKERU, DIFFA, YAU, KUKAWA, GARU_KIME, DIKWA, MEGE, YERWA, GALAGA, GAZARGAMO, GAMBARU, DIAKAM, ZAMTAM, MUNIO, NGURU, HADEJIA, KUFAN_KANAWA, KANO, KURA, BAUCHI, GOMBE, WUKARI, WASE, MURI, AZARE, KATAGUM, KUDU, RANO, DURUM, JOS, GONGOLA, KWARARAFA, FIKA, GABAS, DAURA, KATSINA, MARANDI, GOBIR, DUTSI, SOKOTO, ANKA, GUSAU, ZAZZAU, TURUNKU, NOK, TARUGA, BIDA, MINNA, KADUNA, ZURU, KONTOKORO, YAURI, GUMMI, KEBBI, SOKOTO-NORTH, TAHOUA, GOBIR-EAST, ZINDER, MARANDET, AGADEZ, TAKKEDA, AIR, TESSALIT, ADRAR_IFOGHAS, TADMEKKA, KIDAL, DOSSO, GAYA2, ROZI, TILLABERI, KUKIYA, TANDO_HUSUBIYA, KAMGALA, ANSONGO, GADEI, GAO, SARNAH, KOIMA, BOUREM, TIRAKKA, GURMA-RHAROUS, TIDIKELT, HAMADAT_TINGHERT, KABARA, TIMBUKTU, ARAWAN, RAS_EL-MA, KILLI, KOUGA, TONDIARU, AKUMBU, KOLIMA, TOLADIE, BOULEL, DIA, MARA, SHOMA, WEST_MEMA, NIARA, BOU_KHZAMA, WALATA, TIMBEDRA, KUMBI, AL-GHABA, GUMBU, BIRU2, AWGHAM, KRI, BANAMBA, NIAMINA, KOULIKORO, KOLOKANI, SIBI2, KIRINA, KANGABA, TABON, BANGASI, LANBA, TAMANI, SANADO, SEGOU, SOUM, KANIANA, TABA, SAN, AGHARAF_ROAD, TINDOUF_ROAD, IGUIDI_EAST, TAGHAZA_ROAD, SAOURA, ARAWAN_ROAD, KAWAR_ROAD, AIR_ROUTE, FACHI, FACHI_ROUTE, EAST_AHAGGAR, AHAGGAR, TADMEKKA_ROUTE, BAHR_EL-GHAZAL_ROUTE, TIBESTI_ROUTE, DJADO_ROUTE, BANGU, SAFARE, NGUMA, KORIENZA, ZAMPIA, DOUENTZA, SAMYERE, HOMBORI, DINDE, OURSI, KISSI, SAOUGA, DORI, GABOU, BURA, ARIBINDA, SIRBA, TONDIKWAREY, SAY, BILANGA, GURMA-WEST, NUNGU, TENKUDUGO, BURZANGA, GITI, MERGAO, WALGUYO, ZONDOMA, GURSI, GUILONGU, WAGADUGU, DOUNA, RIM, SANGA, OUNJOUGOU, BANDIAGARA, BANKASS, SENO-SOUTH, BENA, DOUROLA, MOPTI, JENNE-JENO, KIRI-BARA, BURUNFONGO, PEKINGA, BIRNIN_LAFIYA, SOTA, MADEKALI, BUSA, GOBNANGOU, PENTENGA, BIUN, SIKASSO, KUMYA, BANINKO, MANI, MORIBUGU, DAKAJALAN, FIGUIRA, NIANI, WASULU, YANFOLILA, KAMARO, KANKAN, JELIBAKORO, FADAMA, AMANA, KOUROUSSA, BALATO, SIGUIRI, TINKISSO, KONFARA, DIAKHA, NYENINGO, GOUNDAFA, YARESNA, GHIYARU, BAFULABE, KUNJAN, BADUMBE, KITA, BIRGO, GEMUKURA, FARABUGU, SORMA, BAKUNU, DIARA, NIORO, KEDAMA, MASIN, AKRIJIT, TICHITT, AWDAGHOST, HODH-SOUTH, HODH-WEST, TAGANT, TAGANT-WEST, KANIAGA, YELIMANE, SERO, GUIDIMAKA, DIAFUNU, KARAKORO, KINGUI, KONKO, SANGALAN, UPPER_GAMBIA, BAGUIRMI-WEST, BAGUIRMI, MASSENYA, BIDDIRI, DAM, BARMA2, MIGRI, BANRE, LOGONE-BIRNI, MAKARI, NGALA, BAMA, KOUSSERI, DUOLO, BOGO, MINDIF, KALFOU, DAGWAMBA, BIU, GAROUA, BIBEMI, BINDIR, MARGI, BABUR, KERA, GIZEY, MARBA, NGAMBAY, KIM, MILTOU, MASA, MBARA, LAFANA, BOUSSO, TUMAK, SUMRAY, NIELLIM, BOA, SARWA, MELFI_SAO, NGAMA, FELLATA, LAIRI, KOUKI, WAGNA, GHAZZAL, MANGA, YAO_FITRI, GASGA, KADAM, KADAM-WEST, KADAM-SOUTH, DAR_RASHID, IRO, SALAMAT, GOZ_BEIDA, DAR_SILA, ABECHE, WARA, WADAI, MASALIT, WADI_AZWA, KABKABIYA, KUBAYH, EL-FASHER, TURRA, DAR_WONA, KUNDI, MASA, URI, AIN_FARAH, MAO_DARFUR, HILEILA, HURAYZ, UMM_GAFALA, GHUBAYSH, EN_NAHUD, MALHA, KERKER, UMM_KEDADA, TAGABO, TEIGA, SIMIAT, TUREIQ, QIMR, TAMA, EAST_SILA, EAST_DARFUR, UPPER_MILK, ULAIRA, KULFO, KUTIGI, RABA, GBAJIGBO, TADA, ILORIN, OYO-ILE, JEBBA, KAIAMA, KAOJE, ILO, KANDI, SEGBANA, NIKKI, OKUTA, KENU, ILESA, IGBOHO, PARAKOU, ODO-AKABA, BORGU, MOSHI, NIKKI_WEST, ALIBORI, MEKROU, KOUANDE, YOHONGOU, SANSANE_MANGO, PUSUGA, BAWKU, DIKUTATENI, KUISUGU, PERMA, DJUGU, JIMBALE, SAKOGU, YENDI, SALAGA, MOLE_SOUTH, MAWLI, DABOYA, NAKANBE, PO, GURUNSI, LEO, LOWER_LOBI, UPPER_LOBI, KIRIKONGO, BOROMO, MOUHOUN, WA, UPPER_MOLE, BOLE2, BOUNA, LOROPENI, BANDA, BONDUKU, SAMPA, BEGHO, WENCHI, BUIPE, AHWENE_KOKO, UPPER_TANO, TEKYIMAN, BONO_MANSO, KINTAMPO, BUGURIBA, BOBO_DYULASSO, IRINGU, KOMOE, LERABA, KONG-NORTH, UPPER_NZI, KORHOGO, FOLONA, BANDAMA_SPRINGS, UPPER_NYENE, LOWER_NYENE, BANIFING, BAOULE, DEGOU, TUDUGU, ODIENNE, TYEME, SAMATIGILA, SANAFULA, BISANDUGU, BASANDO, KULIYA, NYADA, FWALA-KONYAN, KAYAO, GANEBOAFO, ATEBUBU, DONKORO_NKWANTA, MAMPON, BASSA-AFRAM, AFRAM, KWAHU-SOUTH, PRANG, ASANTE_MANSO, KUMASI, MANSO_NKWANTA, ADABOYE, ADANSE_MANSO, BUKURUWA, SHAI, ACCRA, MANKESSIM, ELMINA, SHAMA, WASSA, TARKWA, SANWI, AOWIN, SEHWI, NDENYE, MIDDLE_TANO, DIABE, AKPAFU, WUSUTA, AMEZDOFE, NOTSE, TODO: $WHAT$, LOME, KETA, NANUMBA, KETE_KARACHI, ATAKPAME, ABOMEY, WHYIDAH, SOKODE, KOTOKOL, UPPER_MONO, KPESSI, SAVALU, WEME, SHABE, Save, KETU, IFONYIN, BADAGRY, ILARO, IBARAPA, IGANA, ISEYIN, IGBODO-SAKI, OTEFAN, OGBOMOSO, OYO, IJAYE, IBADAN, ABEOKUTA, IKORODU, IJEBU, OWU, OSHUN, ILE-IFE, IJESHA, SILUKO, BENIN, BENIN-CITY, EDO, OWO, ONDO, OSSE, LOKOJA, KAKANDA, IKARE, EKITI, AJASE_IPO, GIRAGI, YAGBA, ODE_ITSERIKI, NEMBE, BENIN_MARSHES, LOWER_GUARA, UMAISHA, OPANDA, GUWARI, MODA, KEFFI, GBAGYE, IGALA, IBAH, ABAKALIKI, IGBO-UKWU, ONITSHA, NSUKKA, EAST_IGALA, SOUTH_IGBO, BONNY, OKRIKA, CALABAR, CHUKWU, UBURU, OTUKPO, IDOMA, BENDE, BOHI, ZANZAN, NASSIAN, KULANGO, KONG, DABAKALA, GYIMINI, SENUFO, BOUAKE, MIDDLE_NZI, SATAMA-SOKORO, EASTERN_NZI, EAST_ATTIE, NORTH_ATTIE, ATTIE, WEST_ATTIE, BORON, BORON-NORTH, BANDAMA, KWENI-EAST, BOU, DABOU, TIAGBA, KWENI, WORODUGU, SEGUELA, KORO, BARALA, MAU, BAFINKO, TURA, TOUBA, WORODUGU_EAST, KARAGWA, BEYTA, MUSADUGU, MACENTA, TOMA2, BUZYE, GUERZE, FALANKO, KISSI, MARA, LELE, DA, MAN, SERADU, MAFINDI-KABAYA, FIRIYA, MUSALA, SOLIMANA, LIMBA, KURANKA, KUNIKI, UPPER_BAFING, TIMBO, KOKASU, KONO, BANDAMA-WEST, BOUBO, GAGNOA, DAVO, UPPER_LOBO, LOWER_LOBO, KONDO, FOLGUE_KARU, KPELLE, GBANSHAY, GEBBA, BASSA, NUON, MANON, WENYON, TABU, SASSANDRA, NZO, NEYO, DIBRI, Zarmatarey, Zarmaganda, Sargan, Konni, Ader, Matankari, BIR_EL-KAI, TUMMO, ZAMMOUR, WEST_KORDOFAN, LAGOWA, ASANTE_HILLS, ERG-GHARBI, DAHAR_WALATA, AGHARAF, ERG_CHECH, TANZEROUFT, SAHARAT_HAGGAR, SAHARAT_AIR, TALAK, TENERE_GHARBI, TENERE_SHARQI, TIBESTI-DESERT, BODELE-DESERT, BAHR_EL-GHAZAL, HODH_DESERT, INLAND_NIGER_DELTA, SIKASSO_HILLS, MUERA_MTS, MANDARA_MTS, DARFUR_DESERT, VOLTA_HIGHLAND, GAMBAGA_ESCARPMENT, Eastern Sahara, Central Africa, NIGER_MARSHES, ASANTE_HILLS, TOGO_UPLANDS, JOS_PLATEAU, NIMBA_MOUNTS link = { autogenerated = yes imp = 9454 imp = 9453 imp = 9457 imp = 9448 imp = 9449 imp = 9455 imp = 9456 imp = 9458 ck3 = 4616 } # Berriane, Ghardaia, Metlili, Aroui, Ardjoun, Rmel, Dahoua, Sebseb -> GHARDAIA link = { autogenerated = yes imp = 9451 ck3 = 4615 ck3 = 4613 ck3 = 4614 } # Ouargla -> WARGLA, SADRATA, KARIMA link = { autogenerated = yes imp = 9440 imp = 9441 imp = 9442 ck3 = 4609 } # Oued, Reguiba, Magrane -> ARIGH