# Following code is generated from CLDR data by script. You can do
# emergency fix here, but you fix will be lost unless it is also
# fixed in CLDR. The data generation scripts exists outside GWT and
# will be run manually after each major CLDR updates. Each update
# will be manually checked before check in to make sure undesired
# changes in CLDR will not break existing applications as possible.

# CLDR version 1.7.1 is used in this generation.

eras = Yaasuusuk Duma, Yaasuusuk Wadir
eraNames = Yaasuusuk Duma, Yaasuusuk Wadir
narrowMonths = Q, N, C, A, C, Q, Q, L, W, D, X, K
months = Qunxa Garablu, Kudo, Ciggilta Kudo, Agda Baxis, Caxah Alsa, Qasa Dirri, Qado Dirri, Liiqen, Waysu, Diteli, Ximoli, Kaxxa Garablu
shortMonths = Qun, Nah, Cig, Agd, Cax, Qas, Qad, Leq, Way, Dit, Xim, Kax
standaloneNarrowMonths = Q, N, C, A, C, Q, Q, L, W, D, X, K
standaloneMonths = Qunxa Garablu, Kudo, Ciggilta Kudo, Agda Baxis, Caxah Alsa, Qasa Dirri, Qado Dirri, Liiqen, Waysu, Diteli, Ximoli, Kaxxa Garablu
standaloneShortMonths = Qun, Nah, Cig, Agd, Cax, Qas, Qad, Leq, Way, Dit, Xim, Kax
weekdays = Acaada, Etleeni, Talaata, Arbaqa, Kamiisi, Gumqata, Sabti
shortWeekdays = Aca, Etl, Tal, Arb, Kam, Gum, Sab
narrowWeekdays = A, E, T, A, K, G, S
standaloneWeekdays = Acaada, Etleeni, Talaata, Arbaqa, Kamiisi, Gumqata, Sabti
standaloneShortWeekdays = Aca, Etl, Tal, Arb, Kam, Gum, Sab
standaloneNarrowWeekdays = A, E, T, A, K, G, S
shortQuarters = Q1, Q2, Q3, Q4
quarters = Q1, Q2, Q3, Q4
ampms = saaku, carra
dateFormats = EEEE\\, MMMM dd\\, y, dd MMMM y, dd-MMM-y, dd/MM/yy
timeFormats = h:mm:ss a zzzz, h:mm:ss a z, h:mm:ss a, h:mm a
firstDayOfTheWeek = 7
weekendRange = 7, 1
