# Copyright 2012 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=21.0
#  number=$Revision: 5798 $
#  date=$Date: 2011-05-02 02:05:34 -0400 (Mon, 02 May 2011) $
#  type=root

AED = Dirham dos Emirados Árabes Unidos
AFA = Afeghani (1927-2002)|||1
AFN = Afgani afegão||0
ANG = Florim das Antilhas Holandesas
AWG = Florim de Aruba
BAD = Dinar da Bósnia-Herzegóvina|||1
BAM = Marco bósnio-herzegóvino conversível
BEC = Franco belga (convertível)|||1
BRL = Real brasileiro|BR$
BYB = Rublo novo bielorusso (1994-1999)|||1
CAD = Dólar canadiano|CA$
CYP = Libra de Chipre|||1
CZK = Coroa da República Checa
ECV = Unidad de Valor Constante (UVC) do Equador|||1
GHC = Cedi do Gana|||1
GMD = Dalasi da Gâmbia
GNF = Franco Guineense||0
GTQ = Quetzal da Guatemala
HNL = Lempira das Honduras
KWD = Dinar do Koweit||3
KYD = Dólar das Ilhas Caimão
MKD = Dinar Macedónio
MLF = Franco do Mali|||1
MWK = Cuacha do Malawi
MXP = Peso Plata mexicano (1861-1992)|||1
MXV = Unidad de Inversion (UDI) mexicana|||1
NIC = Córdoba nicaraguano|||1
NIO = Córdoba Ouro nicaraguano
PLN = Zloti polaco
PLZ = Zloti polaco (1950-1995)|||1
QAR = Rial do Catar
SGD = Dólar de Singapura
THB = Baht da Tailândia|฿
TZS = Xelim de Tanzânia||0
USD = Dólar dos Estados Unidos|US$
WST = Tala de Samoa Ocidental
XEU = Unidade da Moeda Europeia|||1
XXX = Moeda Desconhecida|||1
YUD = Dinar forte jugoslavo|||1
YUM = Super Dinar jugoslavo|||1
YUN = Dinar conversível jugoslavo|||1
ZWD = Dólar do Zimbabwe||0|1
