/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        var v = factory(null, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === "function" && define.amd) {
        define("@angular/common/locales/extra/ky", ["require", "exports"], factory);
    }
})(function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    // THIS CODE IS GENERATED - DO NOT MODIFY
    // See angular/tools/gulp-tasks/cldr/extract.js
    var u = undefined;
    exports.default = [
        [
            ['түн орт', 'чт', 'эртң мн', 'түшт кйн', 'кечк', 'түн'],
            ['түн ортосу', 'чак түш', 'эртең менен', 'түштөн кийин', 'кечинде', 'түн ичинде'], u
        ],
        [['түн ортосу', 'чак түш', 'эртең менен', 'түштөн кийин', 'кечкурун', 'түн'], u, u],
        ['00:00', '12:00', ['06:00', '12:00'], ['12:00', '18:00'], ['18:00', '21:00'], ['21:00', '06:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9reS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBQ3ZELENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQ3JGO1FBQ0QsQ0FBQyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBUSElTIENPREUgSVMgR0VORVJBVEVEIC0gRE8gTk9UIE1PRElGWVxuLy8gU2VlIGFuZ3VsYXIvdG9vbHMvZ3VscC10YXNrcy9jbGRyL2V4dHJhY3QuanNcblxuY29uc3QgdSA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGRlZmF1bHQgW1xuICBbXG4gICAgWyfRgtKv0L0g0L7RgNGCJywgJ9GH0YInLCAn0Y3RgNGC0qMg0LzQvScsICfRgtKv0YjRgiDQutC50L0nLCAn0LrQtdGH0LonLCAn0YLSr9C9J10sXG4gICAgWyfRgtKv0L0g0L7RgNGC0L7RgdGDJywgJ9GH0LDQuiDRgtKv0YgnLCAn0Y3RgNGC0LXSoyDQvNC10L3QtdC9JywgJ9GC0q/RiNGC06nQvSDQutC40LnQuNC9JywgJ9C60LXRh9C40L3QtNC1JywgJ9GC0q/QvSDQuNGH0LjQvdC00LUnXSwgdVxuICBdLFxuICBbWyfRgtKv0L0g0L7RgNGC0L7RgdGDJywgJ9GH0LDQuiDRgtKv0YgnLCAn0Y3RgNGC0LXSoyDQvNC10L3QtdC9JywgJ9GC0q/RiNGC06nQvSDQutC40LnQuNC9JywgJ9C60LXRh9C60YPRgNGD0L0nLCAn0YLSr9C9J10sIHUsIHVdLFxuICBbJzAwOjAwJywgJzEyOjAwJywgWycwNjowMCcsICcxMjowMCddLCBbJzEyOjAwJywgJzE4OjAwJ10sIFsnMTg6MDAnLCAnMjE6MDAnXSwgWycyMTowMCcsICcwNjowMCddXVxuXTtcbiJdfQ==