# Copyright (C) 2013 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.

# Prefixes from http://www.itu.int/oth/T0202000088/en

230525|Cellplus
230529|MTML
2305421|Emtel
2305422|Emtel
2305423|Emtel
2305428|Emtel
2305429|Emtel
230544|Emtel
2305471|Mauritius Telecom
2305472|Emtel
2305473|Emtel
2305474|Emtel
2305475|Emtel
2305476|Emtel
2305477|Emtel
2305478|Emtel
2305479|Emtel
230549|Emtel
230570|Cellplus
230571|Emtel
230572|Emtel
230573|Emtel
230574|Emtel
230575|Cellplus
230576|Cellplus
230577|Cellplus
230578|Cellplus
230579|Cellplus
230582|Cellplus
230585|Emtel
230586|MTML
2305871|MTML
2305875|Cellplus
2305876|Cellplus
2305877|Cellplus
2305878|Cellplus
230590|Cellplus
230591|Cellplus
230592|Cellplus
230593|Emtel
230594|Cellplus
230595|MTML
230596|MTML
230597|Emtel
230598|Emtel
