# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html#License
UNIT_CLDR_VERSION = %version%
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a '%local%' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example '%local%' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  UNIT_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  UNIT_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
UNIT_SYNTHETIC_ALIAS = az_AZ.txt az_Latn_AZ.txt bs_BA.txt bs_Latn_BA.txt\
 en_NH.txt en_RH.txt fil_PH.txt he_IL.txt id_ID.txt\
 in.txt in_ID.txt iw.txt iw_IL.txt ja_JP.txt\
 ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt no.txt\
 no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt pa_IN.txt\
 pa_PK.txt sh.txt sh_BA.txt sh_CS.txt sh_YU.txt\
 shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt sr_Cyrl_BA.txt\
 sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt sr_Cyrl_YU.txt sr_Latn_BA.txt\
 sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt sr_Latn_YU.txt sr_ME.txt\
 sr_RS.txt sr_XK.txt sr_YU.txt th_TH.txt th_TH_TRADITIONAL.txt\
 tl.txt tl_PH.txt uz_AF.txt uz_Arab_AF.txt uz_Latn_UZ.txt\
 uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt zh_CN.txt zh_HK.txt\
 zh_Hans_CN.txt zh_Hant_TW.txt zh_MO.txt zh_SG.txt zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
UNIT_ALIAS_SOURCE = $(UNIT_SYNTHETIC_ALIAS)


# Ordinary resources
UNIT_SOURCE = af.txt agq.txt ak.txt am.txt\
 ar.txt as.txt asa.txt ast.txt az.txt\
 az_Cyrl.txt az_Latn.txt bas.txt be.txt bem.txt\
 bez.txt bg.txt bm.txt bn.txt bo.txt\
 br.txt brx.txt bs.txt bs_Cyrl.txt bs_Latn.txt\
 ca.txt ce.txt cgg.txt chr.txt ckb.txt\
 cs.txt cy.txt da.txt dav.txt de.txt\
 de_CH.txt dje.txt dsb.txt dua.txt dyo.txt\
 dz.txt ebu.txt ee.txt el.txt en.txt\
 en_001.txt en_150.txt en_AG.txt en_AI.txt en_AT.txt\
 en_AU.txt en_BB.txt en_BE.txt en_BM.txt en_BS.txt\
 en_BW.txt en_BZ.txt en_CA.txt en_CC.txt en_CH.txt\
 en_CK.txt en_CM.txt en_CX.txt en_CY.txt en_DE.txt\
 en_DG.txt en_DK.txt en_DM.txt en_ER.txt en_FI.txt\
 en_FJ.txt en_FK.txt en_FM.txt en_GB.txt en_GD.txt\
 en_GG.txt en_GH.txt en_GI.txt en_GM.txt en_GY.txt\
 en_HK.txt en_IE.txt en_IL.txt en_IM.txt en_IN.txt\
 en_IO.txt en_JE.txt en_JM.txt en_KE.txt en_KI.txt\
 en_KN.txt en_KY.txt en_LC.txt en_LR.txt en_LS.txt\
 en_MG.txt en_MO.txt en_MS.txt en_MT.txt en_MU.txt\
 en_MW.txt en_MY.txt en_NA.txt en_NF.txt en_NG.txt\
 en_NL.txt en_NR.txt en_NU.txt en_NZ.txt en_PG.txt\
 en_PH.txt en_PK.txt en_PN.txt en_PW.txt en_RW.txt\
 en_SB.txt en_SC.txt en_SD.txt en_SE.txt en_SG.txt\
 en_SH.txt en_SI.txt en_SL.txt en_SS.txt en_SX.txt\
 en_SZ.txt en_TC.txt en_TK.txt en_TO.txt en_TT.txt\
 en_TV.txt en_TZ.txt en_UG.txt en_VC.txt en_VG.txt\
 en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt\
 eo.txt es.txt es_419.txt es_AR.txt es_BO.txt\
 es_BR.txt es_CL.txt es_CO.txt es_CR.txt es_CU.txt\
 es_DO.txt es_EC.txt es_GT.txt es_HN.txt es_MX.txt\
 es_NI.txt es_PA.txt es_PE.txt es_PR.txt es_PY.txt\
 es_SV.txt es_US.txt es_UY.txt es_VE.txt et.txt\
 eu.txt ewo.txt fa.txt ff.txt fi.txt\
 fil.txt fo.txt fr.txt fr_CA.txt fr_HT.txt\
 fur.txt fy.txt ga.txt gd.txt gl.txt\
 gsw.txt gu.txt guz.txt gv.txt ha.txt\
 haw.txt he.txt hi.txt hr.txt hsb.txt\
 hu.txt hy.txt id.txt ig.txt ii.txt\
 is.txt it.txt ja.txt jgo.txt jmc.txt\
 ka.txt kab.txt kam.txt kde.txt kea.txt\
 khq.txt ki.txt kk.txt kkj.txt kl.txt\
 kln.txt km.txt kn.txt ko.txt kok.txt\
 ks.txt ksb.txt ksf.txt ksh.txt kw.txt\
 ky.txt lag.txt lb.txt lg.txt lkt.txt\
 ln.txt lo.txt lrc.txt lt.txt lu.txt\
 luo.txt luy.txt lv.txt mas.txt mer.txt\
 mfe.txt mg.txt mgh.txt mgo.txt mk.txt\
 ml.txt mn.txt mr.txt ms.txt mt.txt\
 mua.txt my.txt mzn.txt naq.txt nb.txt\
 nd.txt nds.txt ne.txt nl.txt nmg.txt\
 nn.txt nnh.txt nus.txt nyn.txt om.txt\
 or.txt os.txt pa.txt pa_Arab.txt pa_Guru.txt\
 pl.txt ps.txt pt.txt pt_AO.txt pt_CH.txt\
 pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt\
 pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt qu.txt\
 rm.txt rn.txt ro.txt ro_MD.txt rof.txt\
 ru.txt rw.txt rwk.txt sah.txt saq.txt\
 sbp.txt se.txt seh.txt ses.txt sg.txt\
 shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\
 sl.txt smn.txt sn.txt so.txt sq.txt\
 sr.txt sr_Cyrl.txt sr_Latn.txt sv.txt sv_FI.txt\
 sw.txt ta.txt te.txt teo.txt th.txt\
 ti.txt to.txt tr.txt twq.txt tzm.txt\
 ug.txt uk.txt ur.txt ur_IN.txt uz.txt\
 uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt vai_Latn.txt\
 vai_Vaii.txt vi.txt vun.txt wae.txt xog.txt\
 yav.txt yi.txt yo.txt yue.txt zgh.txt\
 zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt zh_Hans_SG.txt\
 zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt

