# Copyright (C) 2011 The Libphonenumber Authors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Generated from:
# http://en.wikipedia.org/wiki/+20 [439782121]
# with spelling changes for Qunea -> Qena and Damiette -> Damietta.

2013|Banha
2015|10th of Ramadan
202|Cairo/Giza/Qalyubia
203|Alexandria
2040|Tanta
2045|Damanhur
2046|Marsa Matruh
2047|Kafr El-Sheikh
2048|Monufia
2050|Mansoura
2055|Zagazig
2057|Damietta
2062|Suez
2064|Ismailia
2065|Red Sea
2066|Port Said
2068|El-Arish
2069|El-Tor
2082|Beni Suef
2084|Fayoum
2086|Minia
2088|Assiout
2092|Wadi El-Gedid
2093|Sohag
2095|Luxor
2096|Qena
2097|Aswan
