/**
 * @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/nb-SJ", ["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 = [
        [
            ['mn.', 'mg.', 'fm.', 'em.', 'kv.', 'nt.'],
            ['midn.', 'morg.', 'form.', 'etterm.', 'kveld', 'natt'],
            ['midnatt', 'morgenen', 'formiddagen', 'ettermiddagen', 'kvelden', 'natten']
        ],
        [
            ['mn.', 'mg.', 'fm.', 'em.', 'kv.', 'nt.'],
            ['midn.', 'morg.', 'form.', 'etterm.', 'kveld', 'natt'],
            ['midnatt', 'morgen', 'formiddag', 'ettermiddag', 'kveld', 'natt']
        ],
        [
            '00:00', ['06:00', '10:00'], ['10:00', '12:00'], ['12:00', '18:00'], ['18:00', '24:00'],
            ['00:00', '06:00']
        ]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmItU0ouanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9uYi1TSi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQzFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDdkQsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQztTQUM3RTtRQUNEO1lBQ0UsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUMxQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQ3ZELENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7U0FDbkU7UUFDRDtZQUNFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDdkYsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1NBQ25CO0tBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBUSElTIENPREUgSVMgR0VORVJBVEVEIC0gRE8gTk9UIE1PRElGWVxuLy8gU2VlIGFuZ3VsYXIvdG9vbHMvZ3VscC10YXNrcy9jbGRyL2V4dHJhY3QuanNcblxuY29uc3QgdSA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGRlZmF1bHQgW1xuICBbXG4gICAgWydtbi4nLCAnbWcuJywgJ2ZtLicsICdlbS4nLCAna3YuJywgJ250LiddLFxuICAgIFsnbWlkbi4nLCAnbW9yZy4nLCAnZm9ybS4nLCAnZXR0ZXJtLicsICdrdmVsZCcsICduYXR0J10sXG4gICAgWydtaWRuYXR0JywgJ21vcmdlbmVuJywgJ2Zvcm1pZGRhZ2VuJywgJ2V0dGVybWlkZGFnZW4nLCAna3ZlbGRlbicsICduYXR0ZW4nXVxuICBdLFxuICBbXG4gICAgWydtbi4nLCAnbWcuJywgJ2ZtLicsICdlbS4nLCAna3YuJywgJ250LiddLFxuICAgIFsnbWlkbi4nLCAnbW9yZy4nLCAnZm9ybS4nLCAnZXR0ZXJtLicsICdrdmVsZCcsICduYXR0J10sXG4gICAgWydtaWRuYXR0JywgJ21vcmdlbicsICdmb3JtaWRkYWcnLCAnZXR0ZXJtaWRkYWcnLCAna3ZlbGQnLCAnbmF0dCddXG4gIF0sXG4gIFtcbiAgICAnMDA6MDAnLCBbJzA2OjAwJywgJzEwOjAwJ10sIFsnMTA6MDAnLCAnMTI6MDAnXSwgWycxMjowMCcsICcxODowMCddLCBbJzE4OjAwJywgJzI0OjAwJ10sXG4gICAgWycwMDowMCcsICcwNjowMCddXG4gIF1cbl07XG4iXX0=