/**
 * @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/fr-CA", ["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 = [
        [
            ['minuit', 'midi', 'mat.', 'après-midi', 'soir', 'mat.'],
            ['minuit', 'midi', 'du mat.', 'après-midi', 'du soir', 'du mat.'],
            ['minuit', 'midi', 'du matin', 'de l’après-midi', 'du soir', 'du matin']
        ],
        [
            ['minuit', 'midi', 'mat.', 'après-midi', 'soir', 'mat.'],
            ['minuit', 'midi', 'mat.', 'après-midi', 'soir', 'nuit'],
            ['minuit', 'midi', 'matin', 'après-midi', 'soir', 'nuit']
        ],
        ['00:00', '12:00', ['04:00', '12:00'], ['12:00', '18:00'], ['18:00', '24:00'], ['00:00', '04:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnItQ0EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9mci1DQS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ3hELENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7WUFDakUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO1NBQ3pFO1FBQ0Q7WUFDRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ3hELENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDeEQsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztTQUMxRDtRQUNELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIFtcbiAgICBbJ21pbnVpdCcsICdtaWRpJywgJ21hdC4nLCAnYXByw6hzLW1pZGknLCAnc29pcicsICdtYXQuJ10sXG4gICAgWydtaW51aXQnLCAnbWlkaScsICdkdSBtYXQuJywgJ2FwcsOocy1taWRpJywgJ2R1IHNvaXInLCAnZHUgbWF0LiddLFxuICAgIFsnbWludWl0JywgJ21pZGknLCAnZHUgbWF0aW4nLCAnZGUgbOKAmWFwcsOocy1taWRpJywgJ2R1IHNvaXInLCAnZHUgbWF0aW4nXVxuICBdLFxuICBbXG4gICAgWydtaW51aXQnLCAnbWlkaScsICdtYXQuJywgJ2FwcsOocy1taWRpJywgJ3NvaXInLCAnbWF0LiddLFxuICAgIFsnbWludWl0JywgJ21pZGknLCAnbWF0LicsICdhcHLDqHMtbWlkaScsICdzb2lyJywgJ251aXQnXSxcbiAgICBbJ21pbnVpdCcsICdtaWRpJywgJ21hdGluJywgJ2FwcsOocy1taWRpJywgJ3NvaXInLCAnbnVpdCddXG4gIF0sXG4gIFsnMDA6MDAnLCAnMTI6MDAnLCBbJzA0OjAwJywgJzEyOjAwJ10sIFsnMTI6MDAnLCAnMTg6MDAnXSwgWycxODowMCcsICcyNDowMCddLCBbJzAwOjAwJywgJzA0OjAwJ11dXG5dO1xuIl19