/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __export = (target, all) => { __markAsModule(target); for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __reExport = (target, module2, desc) => { if (module2 && typeof module2 === "object" || typeof module2 === "function") { for (let key of __getOwnPropNames(module2)) if (!__hasOwnProp.call(target, key) && key !== "default") __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); } return target; }; var __toModule = (module2) => { return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); }; var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; // src/main.ts __export(exports, { default: () => SimpleTimeTrackerPlugin }); var import_obsidian2 = __toModule(require("obsidian")); // src/settings.ts var defaultSettings = {}; // src/settings-tab.ts var import_obsidian = __toModule(require("obsidian")); var SimpleTimeTrackerSettingsTab = class extends import_obsidian.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.plugin = plugin; } display() { this.containerEl.empty(); this.containerEl.createEl("h2", { text: "Simple Time Tracker Settings" }); this.containerEl.createEl("hr"); this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" }); this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }).createEl("img", { attr: { src: "https://ellpeck.de/res/generalsupport.png" }, cls: "simple-time-tracker-support" }); } }; // src/tracker.ts function startEntry(tracker, name) { let entry = { name, startTime: Date.now(), endTime: null }; tracker.entries.push(entry); } function endEntry(tracker) { let last = tracker.entries.last(); last.endTime = Date.now(); } function isRunning(tracker) { let last = tracker.entries.last(); return last != null && !last.endTime; } function saveTracker(tracker, app, section) { return __async(this, null, function* () { let file = app.workspace.getActiveFile(); let content = yield app.vault.cachedRead(file); let lines = content.split("\n"); let prev = lines.filter((_, i) => i <= section.lineStart).join("\n"); let next = lines.filter((_, i) => i >= section.lineEnd).join("\n"); content = `${prev} ${JSON.stringify(tracker)} ${next}`; yield app.vault.modify(file, content); }); } function loadTracker(json) { if (json) { try { return JSON.parse(json); } catch (e) { console.log(`Failed to parse Tracker from ${json}`); } } return { entries: [] }; } function displayTracker(tracker, element) { let timer = element.createDiv({ cls: "simple-time-tracker-timers" }); let current = timer.createEl("div", { cls: "simple-time-tracker-timer" }); current.createEl("span", { cls: "simple-time-tracker-timer-time", text: "00:00" }); current.createEl("span", { text: "CURRENT" }); let total = timer.createEl("div", { cls: "simple-time-tracker-timer" }); total.createEl("span", { cls: "simple-time-tracker-timer-time", text: "01:00" }); total.createEl("span", { text: "TOTAL" }); let list = element.createEl("ul"); for (let entry of tracker.entries) list.createEl("li", { text: displayEntry(entry) }); } function displayEntry(entry) { let ret = ""; if (entry.name) ret += `${entry.name}: `; let start = new Date(entry.startTime); ret += `${start.toLocaleString()} - `; if (entry.endTime) { let end = new Date(entry.endTime); ret += `${end.toLocaleString()}`; } return ret; } // src/main.ts var SimpleTimeTrackerPlugin = class extends import_obsidian2.Plugin { onload() { return __async(this, null, function* () { yield this.loadSettings(); this.addSettingTab(new SimpleTimeTrackerSettingsTab(this.app, this)); this.registerMarkdownCodeBlockProcessor("simple-time-tracker", (s, e, i) => { e.empty(); let tracker = loadTracker(s); let running = isRunning(tracker); let btn = new import_obsidian2.ButtonComponent(e).setButtonText(running ? "End" : "Start").onClick(() => __async(this, null, function* () { if (running) { endEntry(tracker); } else { startEntry(tracker, name.getValue()); } yield saveTracker(tracker, this.app, i.getSectionInfo(e)); })); btn.buttonEl.addClass("simple-time-tracker-btn"); let name = new import_obsidian2.TextComponent(e).setPlaceholder("Segment Name").setDisabled(running); name.inputEl.addClass("simple-time-tracker-txt"); displayTracker(tracker, e); }); }); } loadSettings() { return __async(this, null, function* () { this.settings = Object.assign({}, defaultSettings, yield this.loadData()); }); } saveSettings() { return __async(this, null, function* () { yield this.saveData(this.settings); }); } }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9zZXR0aW5ncy10YWIudHMiLCAic3JjL3RyYWNrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCwgUGx1Z2luLCBUZXh0Q29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3NUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgZGlzcGxheVRyYWNrZXIsIGVuZEVudHJ5LCBpc1J1bm5pbmcsIGxvYWRUcmFja2VyLCBzYXZlVHJhY2tlciwgc3RhcnRFbnRyeSwgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IFNpbXBsZVRpbWVUcmFja2VyU2V0dGluZ3M7XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFwic2ltcGxlLXRpbWUtdHJhY2tlclwiLCAocywgZSwgaSkgPT4ge1xyXG5cdFx0XHRlLmVtcHR5KCk7XHJcblxyXG5cdFx0XHRsZXQgdHJhY2tlciA9IGxvYWRUcmFja2VyKHMpO1xyXG5cdFx0XHRsZXQgcnVubmluZyA9IGlzUnVubmluZyh0cmFja2VyKTtcclxuXHJcblx0XHRcdGxldCBidG4gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGUpXHJcblx0XHRcdFx0LnNldEJ1dHRvblRleHQocnVubmluZyA/IFwiRW5kXCIgOiBcIlN0YXJ0XCIpXHJcblx0XHRcdFx0Lm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJ1bm5pbmcpIHtcclxuXHRcdFx0XHRcdFx0ZW5kRW50cnkodHJhY2tlcik7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRzdGFydEVudHJ5KHRyYWNrZXIsIG5hbWUuZ2V0VmFsdWUoKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRhd2FpdCBzYXZlVHJhY2tlcih0cmFja2VyLCB0aGlzLmFwcCwgaS5nZXRTZWN0aW9uSW5mbyhlKSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdGJ0bi5idXR0b25FbC5hZGRDbGFzcyhcInNpbXBsZS10aW1lLXRyYWNrZXItYnRuXCIpO1xyXG5cclxuXHRcdFx0bGV0IG5hbWUgPSBuZXcgVGV4dENvbXBvbmVudChlKVxyXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIlNlZ21lbnQgTmFtZVwiKVxyXG5cdFx0XHRcdC5zZXREaXNhYmxlZChydW5uaW5nKTtcclxuXHRcdFx0bmFtZS5pbnB1dEVsLmFkZENsYXNzKFwic2ltcGxlLXRpbWUtdHJhY2tlci10eHRcIik7XHJcblxyXG5cdFx0XHRkaXNwbGF5VHJhY2tlcih0cmFja2VyLCBlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG59XHJcbiIsICJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzID0ge1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlVGltZVRyYWNrZXJTZXR0aW5ncyB7XHJcblxyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IFNpbXBsZVRpbWVUcmFja2VyUGx1Z2luIGZyb20gXCIuL21haW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaW1wbGVUaW1lVHJhY2tlclNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblxyXG4gICAgcGx1Z2luOiBTaW1wbGVUaW1lVHJhY2tlclBsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBTaW1wbGVUaW1lVHJhY2tlclBsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlNpbXBsZSBUaW1lIFRyYWNrZXIgU2V0dGluZ3NcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBzZXR0aW5ncyBnbyBoZXJlXHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwic2ltcGxlLXRpbWUtdHJhY2tlci1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFja2VyIHtcclxuICAgIGVudHJpZXM6IEVudHJ5W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW50cnkge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgc3RhcnRUaW1lOiBudW1iZXI7XHJcbiAgICBlbmRUaW1lOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdGFydEVudHJ5KHRyYWNrZXI6IFRyYWNrZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy8gZGF0ZSBjb25zdHJ1Y3RvciByZXR1cm5zIHRoZSBjdXJyZW50IGRhdGVcclxuICAgIGxldCBlbnRyeTogRW50cnkgPSB7IG5hbWU6IG5hbWUsIHN0YXJ0VGltZTogRGF0ZS5ub3coKSwgZW5kVGltZTogbnVsbCB9O1xyXG4gICAgdHJhY2tlci5lbnRyaWVzLnB1c2goZW50cnkpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVuZEVudHJ5KHRyYWNrZXI6IFRyYWNrZXIpOiB2b2lkIHtcclxuICAgIGxldCBsYXN0ID0gdHJhY2tlci5lbnRyaWVzLmxhc3QoKTtcclxuICAgIGxhc3QuZW5kVGltZSA9IERhdGUubm93KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1J1bm5pbmcodHJhY2tlcjogVHJhY2tlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGxhc3QgPSB0cmFja2VyLmVudHJpZXMubGFzdCgpO1xyXG4gICAgcmV0dXJuIGxhc3QgIT0gbnVsbCAmJiAhbGFzdC5lbmRUaW1lO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVRyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgYXBwOiBBcHAsIHNlY3Rpb246IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgZmlsZSA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG4gICAgbGV0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKTtcclxuXHJcbiAgICAvLyBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0aGUgY29udGVudCB3ZSBoYXZlIHRvIGVkaXRcclxuICAgIGxldCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcbiAgICBsZXQgcHJldiA9IGxpbmVzLmZpbHRlcigoXywgaSkgPT4gaSA8PSBzZWN0aW9uLmxpbmVTdGFydCkuam9pbihcIlxcblwiKTtcclxuICAgIGxldCBuZXh0ID0gbGluZXMuZmlsdGVyKChfLCBpKSA9PiBpID49IHNlY3Rpb24ubGluZUVuZCkuam9pbihcIlxcblwiKTtcclxuICAgIC8vIGVkaXQgb25seSB0aGUgY29kZSBibG9jayBjb250ZW50LCBsZWF2ZSB0aGUgcmVzdCB1bnRvdWNoZWRcclxuICAgIGNvbnRlbnQgPSBgJHtwcmV2fVxcbiR7SlNPTi5zdHJpbmdpZnkodHJhY2tlcil9XFxuJHtuZXh0fWA7XHJcblxyXG4gICAgYXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBjb250ZW50KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRUcmFja2VyKGpzb246IHN0cmluZyk6IFRyYWNrZXIge1xyXG4gICAgaWYgKGpzb24pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gcGFyc2UgVHJhY2tlciBmcm9tICR7anNvbn1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBlbnRyaWVzOiBbXSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheVRyYWNrZXIodHJhY2tlcjogVHJhY2tlciwgZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGxldCB0aW1lciA9IGVsZW1lbnQuY3JlYXRlRGl2KHsgY2xzOiBcInNpbXBsZS10aW1lLXRyYWNrZXItdGltZXJzXCIgfSk7XHJcbiAgICBsZXQgY3VycmVudCA9IHRpbWVyLmNyZWF0ZUVsKFwiZGl2XCIsIHsgY2xzOiBcInNpbXBsZS10aW1lLXRyYWNrZXItdGltZXJcIiB9KTtcclxuICAgIGN1cnJlbnQuY3JlYXRlRWwoXCJzcGFuXCIsIHsgY2xzOiBcInNpbXBsZS10aW1lLXRyYWNrZXItdGltZXItdGltZVwiLCB0ZXh0OiBcIjAwOjAwXCIgfSk7XHJcbiAgICBjdXJyZW50LmNyZWF0ZUVsKFwic3BhblwiLCB7IHRleHQ6IFwiQ1VSUkVOVFwiIH0pO1xyXG4gICAgbGV0IHRvdGFsID0gdGltZXIuY3JlYXRlRWwoXCJkaXZcIiwgeyBjbHM6IFwic2ltcGxlLXRpbWUtdHJhY2tlci10aW1lclwiIH0pO1xyXG4gICAgdG90YWwuY3JlYXRlRWwoXCJzcGFuXCIsIHsgY2xzOiBcInNpbXBsZS10aW1lLXRyYWNrZXItdGltZXItdGltZVwiLCB0ZXh0OiBcIjAxOjAwXCIgfSk7XHJcbiAgICB0b3RhbC5jcmVhdGVFbChcInNwYW5cIiwgeyB0ZXh0OiBcIlRPVEFMXCIgfSk7XHJcblxyXG4gICAgbGV0IGxpc3QgPSBlbGVtZW50LmNyZWF0ZUVsKFwidWxcIik7XHJcbiAgICBmb3IgKGxldCBlbnRyeSBvZiB0cmFja2VyLmVudHJpZXMpXHJcbiAgICAgICAgbGlzdC5jcmVhdGVFbChcImxpXCIsIHsgdGV4dDogZGlzcGxheUVudHJ5KGVudHJ5KSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5RW50cnkoZW50cnk6IEVudHJ5KTogc3RyaW5nIHtcclxuICAgIC8vIFRPRE8gYWRkIGFuIG9wdGlvbiB0byBkaXNwbGF5IHRoaXMgYXMgYW4gaW50ZXJ2YWwgcmF0aGVyIHRoYW4gYSBmcm9tIC0gdG8gc3RyaW5nXHJcbiAgICBsZXQgcmV0ID0gXCJcIjtcclxuICAgIGlmIChlbnRyeS5uYW1lKVxyXG4gICAgICAgIHJldCArPSBgJHtlbnRyeS5uYW1lfTogYDtcclxuXHJcbiAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZShlbnRyeS5zdGFydFRpbWUpO1xyXG4gICAgcmV0ICs9IGAke3N0YXJ0LnRvTG9jYWxlU3RyaW5nKCl9IC0gYDtcclxuXHJcbiAgICBpZiAoZW50cnkuZW5kVGltZSkge1xyXG4gICAgICAgIGxldCBlbmQgPSBuZXcgRGF0ZShlbnRyeS5lbmRUaW1lKTtcclxuICAgICAgICByZXQgKz0gYCR7ZW5kLnRvTG9jYWxlU3RyaW5nKCl9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFBdUQ7OztBQ0FoRCxJQUFNLGtCQUE2Qzs7O0FDQTFELHNCQUFzQztBQUcvQixpREFBMkMsaUNBQWlCO0FBQUEsRUFJL0QsWUFBWSxLQUFVLFFBQWlDO0FBQ25ELFVBQU0sS0FBSztBQUNYLFNBQUssU0FBUztBQUFBO0FBQUEsRUFHbEIsVUFBZ0I7QUFDWixTQUFLLFlBQVk7QUFDakIsU0FBSyxZQUFZ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