UNPKG

@tricoteuses/assemblee

Version:

Retrieve, clean up & handle French Assemblée nationale's open data

124 lines (121 loc) 18.5 kB
"use strict"; require("core-js/modules/es.object.define-property.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.dateFromNullableDateOrIsoString = dateFromNullableDateOrIsoString; exports.dateFromYearMonthDayTimezoneString = dateFromYearMonthDayTimezoneString; exports.displayDateFromLocalIsoString = displayDateFromLocalIsoString; exports.existingDateToJson = void 0; exports.formatRelativeFrenchTime = formatRelativeFrenchTime; exports.frenchDateSameYearShortFormat = exports.frenchDateFormat = void 0; exports.frenchDateWithoutDayOfWeekFromDateOrString = frenchDateWithoutDayOfWeekFromDateOrString; exports.frenchTimeFormat = void 0; exports.frenchTimeFromDateOrString = frenchTimeFromDateOrString; exports.localIso8601StringFromDate = localIso8601StringFromDate; exports.patchedDateToJson = void 0; require("core-js/modules/es.date.to-iso-string.js"); require("core-js/modules/es.date.to-json.js"); require("core-js/modules/es.date.to-string.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/es.string.ends-with.js"); require("core-js/modules/es.string.replace.js"); var _format = require("date-fns/format"); var _fr = require("date-fns/locale/fr"); var _parse = require("date-fns/parse"); var _parseISO = require("date-fns/parseISO"); // Patch Date.prototype.toJSON to ensure that dates keep their timezone when converted to strings. // https://stackoverflow.com/questions/31096130/how-to-json-stringify-a-javascript-date-and-preserve-timezone var existingDateToJson = exports.existingDateToJson = Date.prototype.toJSON; var _patchedDateToJson = exports.patchedDateToJson = function patchedDateToJson() { try { var hours = this.getHours(); var minutes = this.getMinutes(); var seconds = this.getSeconds(); var milliseconds = this.getMilliseconds(); var timezoneOffsetInHours = -(this.getTimezoneOffset() / 60); //UTC minus local time // When year <= 1900, timezoneOffsetInHours is 0.15, minutes is 9 and seconds is 21! if (timezoneOffsetInHours === 0.15 && hours === 0 && minutes === 9 && seconds === 21 || hours - timezoneOffsetInHours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) { return this.toISOString().split("T")[0]; } // It's a bit unfortunate that we need ttimezoneOffsetInHours = -(this.getTimezoneOffset() / 60) o construct a new Date instance // (we don't want _this_ Date instance to be modified). var correctedDate = new Date(this.getFullYear(), this.getMonth(), this.getDate(), hours, minutes, seconds, milliseconds); correctedDate.setHours(this.getHours() + timezoneOffsetInHours); // Remove milliseconds & trailing "Z". var iso = correctedDate.toISOString().replace(/(\.0+)?Z$/, ""); var sign = timezoneOffsetInHours >= 0 ? "+" : "-"; var leadingZero = Math.abs(timezoneOffsetInHours) < 10 ? "0" : ""; return iso + sign + leadingZero + Math.abs(timezoneOffsetInHours).toString().split(".")[0] + ":00"; } catch (e) { Date.prototype.toJSON = existingDateToJson; var jsonDate = this.toJSON(); Date.prototype.toJSON = _patchedDateToJson; return jsonDate; } }; var frenchDateFormat = exports.frenchDateFormat = new Intl.DateTimeFormat("fr-FR", { day: "numeric", month: "long", weekday: "long", year: "numeric" }); var frenchDateSameYearShortFormat = exports.frenchDateSameYearShortFormat = new Intl.DateTimeFormat("fr-FR", { day: "numeric", month: "short" }); var frenchTimeFormat = exports.frenchTimeFormat = new Intl.DateTimeFormat("fr-FR", { hour: "numeric", minute: "2-digit" }); function dateFromNullableDateOrIsoString(date, defaultValue) { if (date instanceof Date) { return date; } if (typeof date === "string") { return (0, _parseISO.parseISO)(date); } return defaultValue; } /// Convert strings like "2017-11-24+01:00" to dates. function dateFromYearMonthDayTimezoneString(dateString) { return (0, _parse.parse)(dateString, "yyyy-MM-ddXXX", new Date()); } function displayDateFromLocalIsoString(dateString) { var date = (0, _parseISO.parseISO)(dateString); dateString = (0, _format.format)(date, "EEEE d LLLL yyyy H'h'mm", { locale: _fr.fr }); if (dateString.endsWith(" 0h00")) { dateString = dateString.substring(0, dateString.length - 5); } return dateString; } function formatRelativeFrenchTime(date, now) { if (date.getFullYear() === now.getFullYear() && date.getMonth() === now.getMonth() && date.getDate() === now.getDate()) { return frenchTimeFormat.format(date); } return frenchDateSameYearShortFormat.format(date); } function frenchDateWithoutDayOfWeekFromDateOrString(dateOrString) { var date = dateOrString instanceof Date ? dateOrString : (0, _parseISO.parseISO)(dateOrString); var dateString = (0, _format.format)(date, "d LLLL yyyy H'h'mm", { locale: _fr.fr }); if (dateString.endsWith(" 0h00")) { dateString = dateString.substring(0, dateString.length - 5); } return dateString; } function frenchTimeFromDateOrString(dateOrString) { var date = dateOrString instanceof Date ? dateOrString : (0, _parseISO.parseISO)(dateOrString); return (0, _format.format)(date, "H'h'mm", { locale: _fr.fr }); } function localIso8601StringFromDate(date) { return new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().split("T")[0]; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZm9ybWF0IiwicmVxdWlyZSIsIl9mciIsIl9wYXJzZSIsIl9wYXJzZUlTTyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsImV4cG9ydHMiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJob3VycyIsImdldEhvdXJzIiwibWludXRlcyIsImdldE1pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInRpbWV6b25lT2Zmc2V0SW5Ib3VycyIsImdldFRpbWV6b25lT2Zmc2V0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsImNvcnJlY3RlZERhdGUiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldEhvdXJzIiwiaXNvIiwicmVwbGFjZSIsInNpZ24iLCJsZWFkaW5nWmVybyIsIk1hdGgiLCJhYnMiLCJ0b1N0cmluZyIsImUiLCJqc29uRGF0ZSIsImZyZW5jaERhdGVGb3JtYXQiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJkYXkiLCJtb250aCIsIndlZWtkYXkiLCJ5ZWFyIiwiZnJlbmNoRGF0ZVNhbWVZZWFyU2hvcnRGb3JtYXQiLCJmcmVuY2hUaW1lRm9ybWF0IiwiaG91ciIsIm1pbnV0ZSIsImRhdGVGcm9tTnVsbGFibGVEYXRlT3JJc29TdHJpbmciLCJkYXRlIiwiZGVmYXVsdFZhbHVlIiwicGFyc2VJU08iLCJkYXRlRnJvbVllYXJNb250aERheVRpbWV6b25lU3RyaW5nIiwiZGF0ZVN0cmluZyIsInBhcnNlIiwiZGlzcGxheURhdGVGcm9tTG9jYWxJc29TdHJpbmciLCJmb3JtYXQiLCJsb2NhbGUiLCJmckxvY2FsZSIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiZm9ybWF0UmVsYXRpdmVGcmVuY2hUaW1lIiwibm93IiwiZnJlbmNoRGF0ZVdpdGhvdXREYXlPZldlZWtGcm9tRGF0ZU9yU3RyaW5nIiwiZGF0ZU9yU3RyaW5nIiwiZnJlbmNoVGltZUZyb21EYXRlT3JTdHJpbmciLCJsb2NhbElzbzg2MDFTdHJpbmdGcm9tRGF0ZSIsImdldFRpbWUiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcImRhdGUtZm5zL2Zvcm1hdFwiXG5pbXBvcnQgeyBmciBhcyBmckxvY2FsZSB9IGZyb20gXCJkYXRlLWZucy9sb2NhbGUvZnJcIlxuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiZGF0ZS1mbnMvcGFyc2VcIlxuaW1wb3J0IHsgcGFyc2VJU08gfSBmcm9tIFwiZGF0ZS1mbnMvcGFyc2VJU09cIlxuXG4vLyBQYXRjaCBEYXRlLnByb3RvdHlwZS50b0pTT04gdG8gZW5zdXJlIHRoYXQgZGF0ZXMga2VlcCB0aGVpciB0aW1lem9uZSB3aGVuIGNvbnZlcnRlZCB0byBzdHJpbmdzLlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzEwOTYxMzAvaG93LXRvLWpzb24tc3RyaW5naWZ5LWEtamF2YXNjcmlwdC1kYXRlLWFuZC1wcmVzZXJ2ZS10aW1lem9uZVxuZXhwb3J0IGNvbnN0IGV4aXN0aW5nRGF0ZVRvSnNvbiA9IERhdGUucHJvdG90eXBlLnRvSlNPTlxuZXhwb3J0IGNvbnN0IHBhdGNoZWREYXRlVG9Kc29uID0gZnVuY3Rpb24gKHRoaXM6IERhdGUpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IGhvdXJzID0gdGhpcy5nZXRIb3VycygpXG4gICAgY29uc3QgbWludXRlcyA9IHRoaXMuZ2V0TWludXRlcygpXG4gICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuZ2V0U2Vjb25kcygpXG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gdGhpcy5nZXRNaWxsaXNlY29uZHMoKVxuXG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLSh0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCkgLy9VVEMgbWludXMgbG9jYWwgdGltZVxuICAgIC8vIFdoZW4geWVhciA8PSAxOTAwLCB0aW1lem9uZU9mZnNldEluSG91cnMgaXMgMC4xNSwgbWludXRlcyBpcyA5IGFuZCBzZWNvbmRzIGlzIDIxIVxuICAgIGlmIChcbiAgICAgICh0aW1lem9uZU9mZnNldEluSG91cnMgPT09IDAuMTUgJiZcbiAgICAgICAgaG91cnMgPT09IDAgJiZcbiAgICAgICAgbWludXRlcyA9PT0gOSAmJlxuICAgICAgICBzZWNvbmRzID09PSAyMSkgfHxcbiAgICAgIChob3VycyAtIHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA9PT0gMCAmJlxuICAgICAgICBtaW51dGVzID09PSAwICYmXG4gICAgICAgIHNlY29uZHMgPT09IDAgJiZcbiAgICAgICAgbWlsbGlzZWNvbmRzID09PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICB9XG5cbiAgICAvLyBJdCdzIGEgYml0IHVuZm9ydHVuYXRlIHRoYXQgd2UgbmVlZCB0dGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLSh0aGlzLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCkgbyBjb25zdHJ1Y3QgYSBuZXcgRGF0ZSBpbnN0YW5jZVxuICAgIC8vICh3ZSBkb24ndCB3YW50IF90aGlzXyBEYXRlIGluc3RhbmNlIHRvIGJlIG1vZGlmaWVkKS5cbiAgICBjb25zdCBjb3JyZWN0ZWREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLmdldEZ1bGxZZWFyKCksXG4gICAgICB0aGlzLmdldE1vbnRoKCksXG4gICAgICB0aGlzLmdldERhdGUoKSxcbiAgICAgIGhvdXJzLFxuICAgICAgbWludXRlcyxcbiAgICAgIHNlY29uZHMsXG4gICAgICBtaWxsaXNlY29uZHMsXG4gICAgKVxuICAgIGNvcnJlY3RlZERhdGUuc2V0SG91cnModGhpcy5nZXRIb3VycygpICsgdGltZXpvbmVPZmZzZXRJbkhvdXJzKVxuICAgIC8vIFJlbW92ZSBtaWxsaXNlY29uZHMgJiB0cmFpbGluZyBcIlpcIi5cbiAgICBjb25zdCBpc28gPSBjb3JyZWN0ZWREYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvKFxcLjArKT9aJC8sIFwiXCIpXG4gICAgY29uc3Qgc2lnbiA9IHRpbWV6b25lT2Zmc2V0SW5Ib3VycyA+PSAwID8gXCIrXCIgOiBcIi1cIlxuICAgIGNvbnN0IGxlYWRpbmdaZXJvID0gTWF0aC5hYnModGltZXpvbmVPZmZzZXRJbkhvdXJzKSA8IDEwID8gXCIwXCIgOiBcIlwiXG4gICAgcmV0dXJuIChcbiAgICAgIGlzbyArXG4gICAgICBzaWduICtcbiAgICAgIGxlYWRpbmdaZXJvICtcbiAgICAgIE1hdGguYWJzKHRpbWV6b25lT2Zmc2V0SW5Ib3VycykudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMF0gK1xuICAgICAgXCI6MDBcIlxuICAgIClcbiAgfSBjYXRjaCAoZSkge1xuICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuICAgIGNvbnN0IGpzb25EYXRlID0gdGhpcy50b0pTT04oKVxuICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG4gICAgcmV0dXJuIGpzb25EYXRlXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZyZW5jaERhdGVGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImZyLUZSXCIsIHtcbiAgZGF5OiBcIm51bWVyaWNcIixcbiAgbW9udGg6IFwibG9uZ1wiLFxuICB3ZWVrZGF5OiBcImxvbmdcIixcbiAgeWVhcjogXCJudW1lcmljXCIsXG59KVxuZXhwb3J0IGNvbnN0IGZyZW5jaERhdGVTYW1lWWVhclNob3J0Rm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJmci1GUlwiLCB7XG4gIGRheTogXCJudW1lcmljXCIsXG4gIG1vbnRoOiBcInNob3J0XCIsXG59KVxuZXhwb3J0IGNvbnN0IGZyZW5jaFRpbWVGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImZyLUZSXCIsIHtcbiAgaG91cjogXCJudW1lcmljXCIsXG4gIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUZyb21OdWxsYWJsZURhdGVPcklzb1N0cmluZyhcbiAgZGF0ZTogRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsXG4gIGRlZmF1bHRWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCB8IG51bGwsXG4pOiBEYXRlIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBkYXRlXG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhcnNlSVNPKGRhdGUpXG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZVxufVxuXG4vLy8gQ29udmVydCBzdHJpbmdzIGxpa2UgXCIyMDE3LTExLTI0KzAxOjAwXCIgdG8gZGF0ZXMuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUZyb21ZZWFyTW9udGhEYXlUaW1lem9uZVN0cmluZyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHtcbiAgcmV0dXJuIHBhcnNlKGRhdGVTdHJpbmcsIFwieXl5eS1NTS1kZFhYWFwiLCBuZXcgRGF0ZSgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheURhdGVGcm9tTG9jYWxJc29TdHJpbmcoZGF0ZVN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlSVNPKGRhdGVTdHJpbmcpXG4gIGRhdGVTdHJpbmcgPSBmb3JtYXQoZGF0ZSwgXCJFRUVFIGQgTExMTCB5eXl5IEgnaCdtbVwiLCB7IGxvY2FsZTogZnJMb2NhbGUgfSlcbiAgaWYgKGRhdGVTdHJpbmcuZW5kc1dpdGgoXCIgMGgwMFwiKSkge1xuICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDUpXG4gIH1cbiAgcmV0dXJuIGRhdGVTdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlRnJlbmNoVGltZShkYXRlOiBEYXRlLCBub3c6IERhdGUpIHtcbiAgaWYgKFxuICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gbm93LmdldEZ1bGxZZWFyKCkgJiZcbiAgICBkYXRlLmdldE1vbnRoKCkgPT09IG5vdy5nZXRNb250aCgpICYmXG4gICAgZGF0ZS5nZXREYXRlKCkgPT09IG5vdy5nZXREYXRlKClcbiAgKSB7XG4gICAgcmV0dXJuIGZyZW5jaFRpbWVGb3JtYXQuZm9ybWF0KGRhdGUpXG4gIH1cbiAgcmV0dXJuIGZyZW5jaERhdGVTYW1lWWVhclNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJlbmNoRGF0ZVdpdGhvdXREYXlPZldlZWtGcm9tRGF0ZU9yU3RyaW5nKFxuICBkYXRlT3JTdHJpbmc6IERhdGUgfCBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBkYXRlOiBEYXRlID1cbiAgICBkYXRlT3JTdHJpbmcgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZU9yU3RyaW5nIDogcGFyc2VJU08oZGF0ZU9yU3RyaW5nKVxuICBsZXQgZGF0ZVN0cmluZyA9IGZvcm1hdChkYXRlLCBcImQgTExMTCB5eXl5IEgnaCdtbVwiLCB7IGxvY2FsZTogZnJMb2NhbGUgfSlcbiAgaWYgKGRhdGVTdHJpbmcuZW5kc1dpdGgoXCIgMGgwMFwiKSkge1xuICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nLmxlbmd0aCAtIDUpXG4gIH1cbiAgcmV0dXJuIGRhdGVTdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyZW5jaFRpbWVGcm9tRGF0ZU9yU3RyaW5nKFxuICBkYXRlT3JTdHJpbmc6IERhdGUgfCBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBkYXRlOiBEYXRlID1cbiAgICBkYXRlT3JTdHJpbmcgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZU9yU3RyaW5nIDogcGFyc2VJU08oZGF0ZU9yU3RyaW5nKVxuICByZXR1cm4gZm9ybWF0KGRhdGUsIFwiSCdoJ21tXCIsIHsgbG9jYWxlOiBmckxvY2FsZSB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxJc284NjAxU3RyaW5nRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMClcbiAgICAudG9JU09TdHJpbmcoKVxuICAgIC5zcGxpdChcIlRcIilbMF1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUVBO0FBQ0E7QUFDTyxJQUFNSSxrQkFBa0IsR0FBQUMsT0FBQSxDQUFBRCxrQkFBQSxHQUFHRSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsTUFBTTtBQUNoRCxJQUFNQyxrQkFBaUIsR0FBQUosT0FBQSxDQUFBSSxpQkFBQSxHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUEsRUFBaUM7RUFDN0QsSUFBSTtJQUNGLElBQU1DLEtBQUssR0FBRyxJQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLElBQU1DLE9BQU8sR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLElBQU1DLE9BQU8sR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLElBQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQyxDQUFDO0lBRTNDLElBQU1DLHFCQUFxQixHQUFHLEVBQUUsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUM7SUFDL0Q7SUFDQSxJQUNHRCxxQkFBcUIsS0FBSyxJQUFJLElBQzdCUixL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