# Copyright 2014 Google Inc.
# 
# 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.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA:
#  cldrVersion=25
#  date=$Date: 2014-03-06 06:14:25 +0100 (Thu, 06 Mar 2014) $
#  number=$Revision: 9876 $
#  type=zu
AED = i-Dirham yase-United Arab Emirates
AFN = i-Afghan Afghani||0
ALL = i-Albanian Lek||0
AMD = i-Armenian Dram||0
ANG = i-Netherlands Antillean Guilder
AOA = i-Angolan Kwanza
ARS = i-Argentina Peso
AUD = i-Austrilian Dollar|$
AWG = i-Aruban Florin
AZN = i-Azerbaijani Manat
BAM = i-Bosnia-Herzegovina Convertible Mark
BBD = i-Barbadian Dollar
BDT = i-Bangladeshi Taka|৳
BGN = i-Bulgarian Lev
BHD = i-Bahraini Dinar||3
BIF = i-Burundian Franc||0
BMD = i-Bermudan Dollar|$
BND = i-Brunei Dollar
BOB = i-Bolivian Boliviano
BRL = i-Brazilian Real|R$
BSD = i-Bahamian Dollar|$
BTN = i-Bhutanese Ngultrum
BWP = i-Botswana Pula
BYR = i-Belarusian Ruble||0
BZD = i-Belize Dollar|$
CAD = i-Candian Dollar|CA$
CDF = i-Congolese Franc
CHF = i-Swiss Franc
CLP = i-Chilean Peso|$|0
CNY = i-Chinese Yuan|¥
COP = i-Colombian Peso||0
CRC = i-Costa Rican Colón||0
CUC = i-Cuban Convertable Peso
CUP = I-Cuban Peso|$
CVE = i-Cape Verdean Escudo
CZK = i-Czech Republic Koruna
DJF = i-Djiboutian Franc||0
DKK = i-Danish Krone
DOP = i-Dominican Peso|$
DZD = i-Algerian Dinar
EGP = i-Egyptian Pound
ERN = i-Eritrean Nakfa
ETB = i-Ethopian Birr
EUR = i-Euro|€
FJD = i-Fijian Dollar
FKP = i-Falkland Islands Pound
GBP = i-British Pound Sterling|£
GEL = i-Georgian Lari
GHS = i-Ghanaian Cedi
GIP = i-Gibraltar Pound|£
GMD = i-Gambian Dalasi
GNF = i-Gunean Franc||0
GTQ = i-Guatemalan Quetzal
GYD = i-Guyanaese Dollar||0
HKD = i-Hong Kong Dollar|$
HNL = i-Honduran Lempira
HRK = i-Croatian Kuna
HTG = i-Haitian Gourde
HUF = i-Hungarian Forint||0
IDR = i-Indonesian Rupiah||0
ILS = i-Israeli New Sheqel|₪
INR = i-Indian Rupee|Rs.
IQD = i-Iraqi Dinar||0
IRR = i-Iranian Rial||0
ISK = i-Icelandic Króna||0
JMD = i-Jamaican Dollar
JOD = i-Jordanian Dinar||3
JPY = i-Japanese Yen|¥|0
KES = i-Kenyan Shilling
KGS = i-Kyrgystani Som
KHR = i-Cambodian Riel
KMF = i-Comorian Franc||0
KPW = i-North Korean Won||0
KRW = i-South Korean Won|₩|0
KWD = i-Kuwaiti Dinar||3
KYD = i-Cayman Islands Dollar|$
KZT = i-Kazakhstani Tenge|₸
LAK = i-Laotian Kip||0
LBP = i-Lebanese Pound||0
LKR = i-Sri Lankan Rupee
LRD = i-Liberian Dollar
LSL = i-Lesotho Loti
LTL = i-Lithuanian Litas
LVL = i-Latvian Lats|||1
LYD = i-Libyan Dinar||3
MAD = i-Moroccan Dirham
MDL = i-Moldovan Leu
MGA = i-Malagasy Ariary||0
MKD = i-Macedonian Denar
MMK = i-Myanma Kyat||0
MNT = i-Mongolian Tugrik||0
MOP = i-Macanese Pataca
MRO = i-Mauritanian Ouguiya||0
MUR = i-Mauritian Rupee||0
MVR = i-Maldivian Rufiyana
MWK = i-Malawian Kwacha
MXN = i-Mexican Peso|$
MYR = i-Malaysian Ringgit
MZN = I-Metical yase-Mozambicque
NAD = i-Namibian Dollar|$
NGN = i-Nigerian Naira
NIO = i-Nicaraguan Córdoba
NOK = i-Norwegian Krone
NPR = i-Nepalese Rupee
NZD = i-New Zealand Dollar|$
OMR = i-Omani Rial||3
PAB = i-Panamanian Balboa
PEN = i-Peruvian Nuevo Sol
PGK = i-Papua New Guinean Kina
PHP = i-Philippine Peso
PKR = i-Pakistani Rupee||0
PLN = i-Polish Zloty
PYG = i-Paraguayan Guarani|₲|0
QAR = i-Qatari Rial
RON = I-Romanian Leu
RSD = i-Serbian Dinar||0
RUB = i-Russian Ruble
RWF = i-Rwandan Franc||0
SAR = i-Saudi Riyal
SBD = i-Solomon Islands Dollar|$
SCR = i-Seychellois Rupee
SDG = i-Sudanese Pound
SEK = i-Swedish Krona
SGD = i-Singapore Dollar|$
SHP = i-Saint Helena Pound
SLL = i-Sierra Leonean Leone||0
SOS = i-Somali Shilling||0
SRD = i-Surinamese Dollar
SSP = Upondo waseNingizimu Sudan|£
STD = i-São Tomé kanye ne-Príncipe Dobra||0
SYP = i-Syrian Pound||0
SZL = i-Swazi Lilangeni
THB = i-Thai Baht|฿
TJS = i-Tajikistani Somoni
TMT = i-Turkmenistani Manat
TND = i-Tunisian Dinar||3
TOP = i-Tongan Paʻanga
TRY = i-Turkish Lira
TTD = Idola lase-Trinidad nase-Tobago|$
TWD = i-New Taiwan Dollar|NT$
TZS = i-Tanzanian Shilling||0
UAH = i-Ukrainian Hryvnia|₴
UGX = i-Ugandan Shilling||0
USD = i-US Dollar|$
UYU = i-Uruguayan Peso
UZS = i-Uzbekistan Som||0
VEF = i-Venezuelan Bolívar
VND = i-Vietnamese Dong|₫|0
VUV = i-Vanuatu Vatu||0
WST = i-Samoan Tala
XAF = i-CFA Franc BCEA|FCFA|0
XCD = i-East Caribbean Dollar|EC$
XOF = i-CFA Franc BCEAO|CFA|0
XPF = i-CFP Franc|CFPF|0
XXX = Imali engaziwa|||1
YER = i-Yemeni Rial||0
ZAR = i-South African Rand|R
ZMK = i-Zambian Kwacha (1968–2012)||0|1
ZMW = i-Zambian Kwacha
