Commit Graph
100 Commits
Author SHA1 Message Date
William Casarin d0be18c80e clippy: fix enum too large issue
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-10 16:33:58 -08:00
William Casarin 194fa68641 profilesearch: add some padding
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-10 16:08:19 -08:00
William Casarin a95bc6ad5e egui: replace with damus-io repo
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-10 15:57:50 -08:00
William Casarin 8c49e6e5f6 Merge explicitly activate and deactivate account relay/muted list #678
Ken Sedgwick (4):
      drive-by compiler warning fixes
      improve debug logging, comments, and variable names for clarity
      explicitly activate and deactivate account relay list subs
      explicitly activate and deactivate account muted list subs
2025-02-07 11:07:17 -08:00
William Casarin 0d22debb05 Merge multiple image uploading
kernelkind (1):
      allow multiple media uploads per selection
2025-02-06 16:51:01 -08:00
William Casarin 36dc28451a Merge fix file logging #718
kernelkind (1):
      fix file logging
2025-02-06 14:00:55 -08:00
William Casarin c32a42f9b9 clippy: fix naming lint
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-06 12:17:48 -08:00
William Casarin fd030f5b5c Merge rewrite deck serialization, timeline cache, add algo timelines #712
William Casarin (19):
      algos: introduce last_n_per_pubkey_from_tags
      wip algo timelines
      Initial token parser combinator
      token_parser: unify parsing and serialization
      token_serializer: introduce TokenWriter
      token_parser: simplify AddColumnRoute serialization
      tokens: add a more advanced tokens parser
      tokens: add AccountsRoute token serializer
      tokens: add PubkeySource and ListKinds token serializer
      tokens: add TimelineRoute token serializer
      tokens: initial Route token serializer
      add tokenator crate
      note_id: add hex helpers for root notes
      tokens: add token serialization for AlgoTimeline
      tokens: add token serialization for TimelineKind
      tokens: switch over to using token serialization
      Switch to unified timeline cache via TimelineKinds
      hashtags: click hashtags to open them
2025-02-05 18:46:16 -08:00
William Casarin ac10c7e5b2 hashtags: click hashtags to open them
Fixes: https://github.com/damus-io/notedeck/issues/695
Fixes: https://github.com/damus-io/notedeck/issues/713
Changelog-Added: Add ability to click hashtags
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-05 18:43:09 -08:00
William Casarin 0cc1d8a600 Switch to unified timeline cache via TimelineKinds
This is a fairly large rewrite which unifies our threads, timelines and
profiles. Now all timelines have a MultiSubscriber, and can be added
and removed to columns just like Threads and Profiles.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-05 18:30:45 -08:00
William Casarin ae85f2dd34 version: bump to 0.3.1
Just a binary fix for ubuntu

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 11:51:16 -08:00
William Casarin 74801098f3 ci: upload artifacts step
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 11:18:21 -08:00
William Casarin d46e526a45 tokens: switch over to using token serialization
This removes all of the old serialization code

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 5ba06986db tokens: add token serialization for TimelineKind
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin d108df86b4 tokens: add token serialization for AlgoTimeline
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin d85b610cf4 note_id: add hex helpers for root notes
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin ed455f7ea4 add tokenator crate
also remove a lot of the "advanced" token parsing style
which was a bit too verbose for my tastes

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 29491cca05 tokens: initial Route token serializer
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 4e87ed7065 tokens: add TimelineRoute token serializer
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 70a39ca69c tokens: add PubkeySource and ListKinds token serializer
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 6b57401e14 tokens: add AccountsRoute token serializer
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 00ef3082f3 tokens: add a more advanced tokens parser
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin efa5b7e32f token_parser: simplify AddColumnRoute serialization
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 4f89d95aef token_serializer: introduce TokenWriter
This simplifies token serialization

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 61b3a92792 token_parser: unify parsing and serialization
This reduces the number of things we have to update in our token parser
and serializer. For payloads, we we have to handle the payload cases
different, but we now have a structure that can deal with that
efficiently.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 005ecd740d Initial token parser combinator
In an attempt to make our deck serializer more localized,
comprehensible, and less error-prone, we introduce a new parser
combinator based around string tokens.

This replaces the Selection-based intermediary types so that we have a
more direct serialization style.
2025-02-04 08:08:08 -08:00
William Casarin 662755550f wip algo timelines
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 08:08:08 -08:00
William Casarin 7afe3b7d7c algos: introduce last_n_per_pubkey_from_tags
This function creates filters for the base our first algo in Damus:

Called "last N note per pubkey". I don't have a better name for it.

This function generates a query in the form:

[
  {"authors": ["author_a"], "limit": 1, "kinds": [1]
, {"authors": ["author_b"], "limit": 1, "kinds": [1]
, {"authors": ["author_c"], "limit": 1, "kinds": [1]
, {"authors": ["author_c"], "limit": 1, "kinds": [1]
  ...
]

Due to an unfortunate restriction currently in nostrdb and strfry, we
can only do about 16 to 20 of these at any given time. I have made
this limit configurable in strfry[1]. I just need to do the same in
nostrdb now.

[1] https://github.com/hoytech/strfry/pull/133

Changelog-Added: Add last_n_per_pubkey_from_tags algo function
2025-02-04 08:08:08 -08:00
William Casarin 35dbe812b2 ci: run on older ubuntu
From guythatsits:

> Not sure if this is helpful but the reason it isn't installing in any
of the debian based is the libc6 dependency(requires 2.39, these are
both on 2.35). Looks like popos alpha apparently includes the updated
library. Had the same issue on just a barebone debian system as well.

By default, GitHub Actions uses the latest Ubuntu runner (e.g.,
ubuntu-latest), which has glibc 2.39+. Instead, we can explicitly use
ubuntu-20.04, which has glibc 2.31.

Reported-by: guythatsits
Fixes: https://github.com/damus-io/notedeck/issues/706
Changelog-Fixed: Fixed issue running binary on older debian distros
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 06:48:52 -08:00
William Casarin 9dd33d5c5b pfp: 4.0 stroke, add border_stroke method
This reduces code duplication, and makes the border a bit cleaner
so that it blends into the panel color

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-03 20:24:51 -08:00
William Casarin b35c7fc0ee theme: refactor dark theme logic to use is_oled
This actually has no behavioral change, but is more
logically correct if we ever end up updating these functions

Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-03 19:53:09 -08:00
William Casarin 96481a47f3 pfp: remove border except for profile
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-03 19:45:32 -08:00
William Casarin 635c9770de Merge 'add border behind pfp' #597
Hello new contributor!

jglad (4):
      #597 add border behind pfp
      replace with full circle border
      make optional
      fix formatting
2025-02-03 19:34:10 -08:00
William Casarin f8f3676450 clippy fixes
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-03 11:38:55 -08:00
William Casarin 8f4daa5e89 nix: don't shell zenity on macos
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-03 11:37:10 -08:00
William Casarin 69b7581a53 Notedeck Alpha 2 Release - v0.3
Thanks again to kernel and ken, as well as some new contributors:
kieran, daniel saxton for our alpha 2 release!

Added
=====

- Clicking a mention now opens profile page (William Casarin)
- Note previews when hovering reply descriptions (William Casarin)
- Media uploads (kernelkind)
- Profile editing (kernelkind)
- Add hashtags to posts (Daniel Saxton)
- Enhanced command-line interface for user interactions (Ken Sedgwick)
- Various Android updates and compatibility improvements (Ken Sedgwick, William Casarin)
- Debug features for user relay-list and mute list synchronization (Ken Sedgwick)

Changed
=======

- Add confirmation when deleting columns (kernelkind)
- Enhance Android build and performance (Ken Sedgwick)
- Image cache handling using sha256 hash (kieran)
- Introduction of decks_cache and improvements (kernelkind)
- Migrated to egui v0.29.1 (William Casarin)
- Only show column delete button when not navigating (William Casarin)
- Show profile pictures in column headers (William Casarin)
- Show usernames in user columns (William Casarin)
- Switch to only notes & replies on some tabs (William Casarin)
- Tombstone muted notes (Ken)
- Pointer interactions enhancements in UI (William Casarin)
- Persistent theme setup across sessions (kernelkind)
- Increased ping intervals for network performance (William Casarin)
- Nostrdb update for async support (Ken Sedgwick)

Fixed
=====

- Fix GIT_COMMIT_HASH compilation issue (William Casarin)
- Fix avatar alignment in profile previews (William Casarin)
- Fix broken quote repost hitbox (William Casarin)
- Fix crash when navigating in debug mode (William Casarin)
- Fix long delays when reconnecting (William Casarin)
- Fix repost button size (William Casarin)
- Fixed since kind filters (kernelkind)
- Clippy warnings resolved (Dimitris Apostolou)

Refactoring & Improvements
==========================

- Numerous internal structural improvements and modularization (William Casarin, Ken Sedgwick)

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-31 10:31:07 -08:00
William Casarin 5d4548d3f7 Switch to GameActivity and gradle build
Fixes: https://github.com/damus-io/notedeck/issues/189
Fixes: https://github.com/damus-io/notedeck/issues/190
Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-27 17:31:28 -08:00
William Casarin 478603e16e contacts: disable hashtag follows for now
People are spamming hashtags with AI CP. Let's disable this until we
at least have image blurring.

Alternatively we could only show the link for people you don't follow.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-27 12:30:22 -08:00
William Casarin d0265a5dcb nix: add zenity
needed for file selector
2025-01-25 17:14:27 -08:00
William Casarin 6dd0e5207e Merge image uploading from kernel
kernelkind (8):
      upload media button
      get file binary
      import base64
      notedeck_columns: use sha2 & base64
      use rfd for desktop file selection
      add utils for uploading media
      draft fields for media upload feat
      ui: user can upload images
2025-01-25 16:17:11 -08:00
William Casarin 0c3db9a31e Merge additional account relay list improvements from Ken
Ken Sedgwick (1):
      additional account relay list improvements
2025-01-25 16:16:03 -08:00
William Casarin 8ad9ad20ba Merge clippy fixes from Dimitris
Dimitris Apostolou (1):
      Fix clippy warnings
2025-01-25 16:15:13 -08:00
William Casarin 8a87791594 morenotes: show pointer on hover
all clickable things should show pointers

Cc: kernel
2025-01-25 16:06:32 -08:00
William Casarin 181be70c0f networking: increase ping interval
some relays are really slow to respond on this for some reason
2025-01-25 16:05:56 -08:00
William Casarin 2cbae68a7f Merge remote-tracking branches 'github/pr/657' and 'github/pr/658' 2025-01-22 16:04:45 -08:00
William Casarin 835851ee52 Merge remote-tracking branch 'pr/656' 2025-01-20 15:51:03 -08:00
William Casarin 43637f52bb Merge a few fixes from kernel #652,#649
kernelkind (2):
      log nip05 error
      fix persist deck author profile bug
2025-01-20 10:44:30 -08:00
William Casarin 4b542c0a74 switch to TimelineCache
Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-19 14:18:59 -08:00
William Casarin e52ba5937f debug: log when adding notes to start
Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-19 12:58:21 -08:00
William Casarin a94ebc3603 mutes: hide logs
these are getting spammed on each frame. not ideal

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-19 12:43:03 -08:00
William Casarin 9a48b12e36 enostr: introduce PubkeyRef
This will be used for typesafe and copy-free pubkey references

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-19 12:43:03 -08:00
William Casarin f9a09ea2be note: introduce RootNoteId
RootNoteId is simply a newtype for specifying an ID that is a root note
id (in the sense of a nip10 note)

This makes it more clear at the type level when referring to note ids

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-19 12:43:03 -08:00
William Casarin 9a4c5e394d envrc: update vrod's npub for testing
Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-17 10:01:59 -08:00
William Casarin b45a63a529 persistent: dont nuke decks when using cli columns
Sometimes the commandline is nice for loading individual threads you
want to lookup (we don't have a UI for this yet). If you don't currently
choose a different data directory, then your decks cache gets nuked when
doing this.

Change the logic so that deck persistence is disabled when using CLI
columns. This stops notedeck from nuking your default decks.

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-17 09:32:48 -08:00
William Casarin e4732f5112 grip: fix double frame border 2025-01-15 14:00:08 -08:00
William Casarin 8fbe954cf3 adjust context menu/grip circle sizes
also adjust grip position so that it is more right
2025-01-15 13:48:53 -08:00
William Casarin 3b68e285fb grip: show pointer cursor on grip 2025-01-15 13:48:33 -08:00
William Casarin 6647e7dc3f Merge Hashtag parsing
Daniel Saxton (5):
      Add t tags for hashtags
      Use HashSet, lowercase, and add emoji tests
      Add test and format
      Fix emoji hashtags
      Handle punctuation better

Link: https://github.com/damus-io/notedeck/pull/592
2025-01-14 10:16:12 -08:00
William Casarin 28af9c2272 Merge 'image-cache: use sha256 hash of url for key'
Link: https://github.com/damus-io/notedeck/pull/631
2025-01-10 07:13:50 -08:00
William Casarin f050de6b7a build: fix missing GIT_COMMIT_HASH in some cases
Some people try to build without git, this adds a fallback so that
compilation still works in those cases.

Changelog-Fixed: Fix GIT_COMMIT_HASH compilation issue
Fixes: https://github.com/damus-io/notedeck/issues/634
Fixes: https://github.com/damus-io/notedeck/issues/633
2025-01-10 06:33:39 -08:00
William Casarin d97dcb147d fixed reconnect duration
Changelog-Fixes: Fix long delays when reconnecting
2025-01-10 06:08:07 -08:00
William Casarin e08e30f912 mutes: simplify mutefun and don't render tombstone yet 2025-01-04 16:19:41 -08:00
William Casarin c7d3aae856 nav: slow down nav animation a bit
you care barely see it
2025-01-04 16:01:24 -08:00
William Casarin 4fd8ac377e multicast: remove rejoin debug message
it's spammy
2025-01-04 15:20:01 -08:00
William Casarin 212c296da5 Merge tombstone muted notes #606
Changelog-Changed: Tombstone muted notes
2025-01-04 14:16:16 -08:00
William Casarin 16b20568da Merge relay debug view
Fix a few conflicts
2025-01-04 13:54:29 -08:00
William Casarin e1187c372f Merge profiling editing #625
Changelog-Added: Added profile editing
2025-01-04 13:18:31 -08:00
William Casarin 5f21d32d96 android: fix android logging 2025-01-04 13:14:05 -08:00
William Casarin fe6206c546 Note multicasting
This is an initial implementation of note multicast, which sends posted
notes to other notedecks on the same network.

This came about after I nerd sniped myself thinking about p2p nostr on
local networks[1]

You can test this exclusively without joining any other relays by
passing -r multicast on the command line.

[1] https://damus.io/note1j50pseqwma38g3aqrsnhvld0m0ysdgppw6fjnvvcj0haeulgswgq80lpca

Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-04 10:37:11 -08:00
William Casarin f5afdd04a6 chrome: dont parse args twice
Signed-off-by: William Casarin <jb55@jb55.com>
2025-01-04 10:34:46 -08:00
William Casarin eeab1666e7 query: fix since filter on kind queries
Before kind queries with since filters wasn't working. Now it does.

Changelog-Fixed: Fixed since kind filters
2024-12-30 11:41:30 -08:00
William Casarin f569f948af nixos: fix wayland
Suggested-by: @duck1123
Fixes: #609
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-24 21:32:03 -08:00
William Casarin 6d1d28c84b lockfile: update
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-20 15:40:19 -08:00
William Casarin fcac49a0a5 previews: run previews as notedeck apps
This allows ./preview to be a notedeck app runner. I am currently
using it for the ProfilePic app (which will because notedeck_viz)

Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-20 15:39:26 -08:00
William Casarin 475314da75 columns: navigate back when switching account
Fixes: https://github.com/damus-io/notedeck/issues/600
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-20 13:54:20 -08:00
William Casarin 40c5dbf418 timeline: only show one tab in hashtag timeline 2024-12-19 09:52:56 -08:00
William Casarin ca988165cc column: show pointer button on hover 2024-12-19 09:08:52 -08:00
William Casarin 8025be823a ui: customizable tabs per column view
This reduces the number of choices the user needs to make. Some of these
filters were redundant anyways. This also saves memory.

Universe: Notes
Notificaitons: Notes & Replies
Everything else: Notes, Notes & Replies

Changelog-Changed: Simplified tab selections on some columns
Fixes: https://github.com/damus-io/notedeck/issues/517
2024-12-19 08:48:07 -08:00
William Casarin cb2330abac refactor: move reply_desc into its own file
it's grown up enough now to deserve that at least
2024-12-19 07:58:43 -08:00
William Casarin 5449d6ceb5 note: options: streamline bit macro
Include has method in the bit note options macro
2024-12-19 07:49:56 -08:00
William Casarin ef8d5b73ee columns: remove dead code 2024-12-19 07:31:40 -08:00
William Casarin 6fa6a5733e timeline: auto-add yourself to your home timeline
This is the most intuitive, and damus iOS does the same thing. You
have to follow yourself, sorry. Otherwise you won't see your posts
when you post which is confusing.

Fixes: https://github.com/damus-io/notedeck/issues/509
2024-12-19 07:21:15 -08:00
William Casarin 09d6568ef9 ui: make reply description mentions clickable
Small oversight from previous changes
2024-12-18 14:55:11 -08:00
William Casarin 11274ac4df nav: make back nav faster
Changed the egui-nav spring function so its now so slow near the
end of the aniation.

Fixes: https://github.com/damus-io/notedeck/issues/595
2024-12-18 13:04:09 -08:00
William Casarin f693bb54c1 fix weird crash with missing timeline
My timeline wen't missing and then I started crashing here..

bizarre
2024-12-18 13:03:51 -08:00
William Casarin f748b8b34a profile: fix avatar alignment in profile previews
Changelog-Fixed: Fix avatar alignment in profile previews
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 14:43:46 -08:00
William Casarin 4967f64bb6 ui: show note previews when hovering reply descriptions
Preview: https://cdn.jb55.com/s/bef26a2caf09e952.png
Demo: https://cdn.jb55.com/s/hover-preview-2.mp4

Changelog-Added: Show note previews when hovering reply descriptions
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 14:43:46 -08:00
William Casarin 5a241d730e mentions: open profile page when clicking a user mention
Fixes: https://github.com/damus-io/notedeck/issues/588
Changelog-Added: Clicking a mention now opens profile page
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 12:33:10 -08:00
William Casarin 80982059fc ui: fix repost button size
triggering ocd

Changelog-Fixed: Fix repost button size
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 12:32:58 -08:00
William Casarin 59dec0c066 ui: show cursor when hovering pfp
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 12:21:40 -08:00
William Casarin ed5b1c4cf4 mention: change ?? to @???
More consistent with the other label

Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 12:21:40 -08:00
William Casarin 49fe7ae5c7 ui: add show_pointer
For showing the cursor when hovering over a clickable thing. We need
this in more places.

Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-17 11:52:28 -08:00
William Casarin 482a3cb818 columns: move from Cow<'static, str> to ColumnTitle<'a>
This further deliminates our column titles to those that are simple,
and to those that require additional information from the database.

This allows us to avoid creating many transactions pointlessly if we
don't need to.

Changelog-Changed: Show usernames in user columns
2024-12-17 10:20:59 -08:00
William Casarin 47e0b0ed52 nostrdb: update to fix sub memleak 2024-12-17 09:19:35 -08:00
William Casarin 18226a35ff android: fix build
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-14 01:51:56 -08:00
William Casarin 1e0228e396 Fix notes note updating in profile view
Fixes: https://github.com/damus-io/notedeck/issues/576
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-14 00:06:33 -08:00
William Casarin e5ab8d5b9c nostrdb: update to fix profile queries
before profile queries were not working at the database level,
because there was no note_pubkey or note_pubkey_kind index. Now there
is! So profiles should be much faster to query now, and will actually
return results.

There still appears to be an issue with the profile NotesHolder which
is preventing it from updating, via the logic in poll_notes_into_view.
The original Timeline version of this function works fine, but it looks
like the NotesHolder one is broken.

Going to work on refactoring the notes holder next to fix.

Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-13 23:35:08 -08:00
William Casarin ab829b45fc enostr: update ewebsock
This was using an ancient version of rustls, which in turn included
an old version of ring, which was the real reason of the windows
compile issues (i think)

Cc: kernelkind <kernelkind@gmail.com>
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-13 11:01:09 -08:00
William Casarin 516bbb6bc6 deb: add name so package works again
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-13 11:01:09 -08:00
William Casarin 5fda025206 android: change apk name to Notedeck
Signed-off-by: William Casarin <jb55@jb55.com>
2024-12-13 10:45:47 -08:00