« first day (770 days earlier)      last day (2410 days later) » 
00:00 - 16:0016:00 - 00:00

12:00 AM
Type  New Date
value As String
End Type

Function Sub End Exit Function () As  New Date
Dim var As  New Date
Sub End Exit Function  = var
End Function
 
RELOAD!
[Cardshifter/Cardshifter] 1 opened issue. 1 closed issue.
[Hosch250/Rubberduck] 19 commits. 3613 additions. 473 deletions.
[retailcoder/Rubberduck] 92 commits. 18849 additions. 2774 deletions.
[rubberduck-vba/Rubberduck] 17 commits. 5 opened issues. 2 closed issues. 25 issue comments. 5327 additions. 461 deletions.
 
Private Type
   As Variant
End Type

Sub  ()
    Dim   As
       .  = 42
     Debug.Print .
End Sub
 
12:22 AM
brainsplode
2
 
The best bit is that Rubberduck just deals with the special chars.
 
[rubberduck-vba/Rubberduck] Hosch250 pushed commit bbf7eed3 to next: Fix ParameterCanBeByVal bugs
[rubberduck-vba/Rubberduck] Hosch250 pushed commit 4c4a4d8a to next: Mark Line Input, Input, and Get references as assignments
[rubberduck-vba/Rubberduck] Hosch250 pushed commit 4ee1d441 to next: Fires for interface params where all can by byval
[rubberduck-vba/Rubberduck] Hosch250 pushed commit 7079946b to next: Quick fix works for interfaces
[rubberduck-vba/Rubberduck] Hosch250 pushed commit 59e940bf to next: Clean up inspection/quick fix
[rubberduck-vba/Rubberduck] Hosch250 pushed commit b94d23fa to next: Correctly fires on events
[rubberduck-vba/Rubberduck] Hosch250 pushed commit 9b2ddce0 to next: Event quick fix works
[rubberduck-vba/Rubberduck] Hosch250 pushed commit 6039b16a to next: Refactor and reduce duplicated code.
[rubberduck-vba/Rubberduck] web-flow pushed commit bce3a7cd to next: Merge branch 'next' into Issue541
Merge pull request #2055 from Hosch250/Issue541

Parameter Can By ByVal and resolving IsAssignment
[rubberduck-vba/Rubberduck] build for commit 982db171 on next: AppVeyor build succeeded
[rubberduck-vba/Rubberduck] build for commit f40a5f31 on next: AppVeyor build succeeded
 
1:01 AM
393
Q: Write a program that makes 2 + 2 = 5

qwrWrite a program that seemingly adds the numbers 2 and 2 and outputs 5. This is an underhanded contest. Your program cannot output any errors. Watch out for memory holes! Input is optional. Redefining 2+2 as 5 is not very creative! Don't doublethink it, try something else.

Too bad it's closed
Function TwoPlusTwo()

  Const  5 = 4
  Debug.Assert 2 + 2 =  5

End Function
 
@ThunderFrame nice, lol my brain is hurting
 
@ThunderFrame and here Rubberduck is saying your wicked function returns no value and is implicitly public ;-)
Damn that's evil
#ThingsIWishIDidntKnow
@ThunderFrame you could still save a number of bytes by renaming the function to   
 
How about a declaration that looks the same as a line continuation?
 
#KillMeNow
 
 
2 hours later…
2:55 AM
[retailcoder/Rubberduck] retailcoder pushed 20 commits to next (only showing some of them below)
[retailcoder/Rubberduck] web-flow pushed commit bce3a7cd to next: Merge branch 'next' into Issue541
Revert "Check CanExecute before running hotkey commands"

This reverts commit 86220610a74ea4858b40d231b60a0bb8fdc7bc44.
[retailcoder/Rubberduck] Hosch250 pushed commit 0b128f99 to next: Redo hotkey CanExecute before Execute
[retailcoder/Rubberduck] web-flow pushed commit 89711515 to next: Merge branch 'next' into hotkeys
Merge pull request #2060 from Hosch250/hotkeys

Hotkeys
[retailcoder/Rubberduck] Hosch250 pushed commit 8c84ed4a to next: Potential fix for #2054
[retailcoder/Rubberduck] Hosch250 pushed commit 5c4f2f97 to next: Make the COM library say "Rubberduck Source Control 2.0"
Merge pull request #2061 from Hosch250/comCollector

Load COM information more fully
Merge pull request #2055 from Hosch250/Issue541

Parameter Can By ByVal and resolving IsAssignment
Merge pull request #148 from rubberduck-vba/next

sync with main repo
Merge pull request #149 from rubberduck-vba/next

sync with main repo
 
3:08 AM
[Hosch250/Rubberduck] Hosch250 pushed 11 commits to ComApi
Merge pull request #2061 from Hosch250/comCollector

Load COM information more fully
Merge pull request #2055 from Hosch250/Issue541

Parameter Can By ByVal and resolving IsAssignment
[Hosch250/Rubberduck] web-flow pushed commit 43faed7b to ComApi: Merge branch 'next' into ComApi
[rubberduck-vba/Rubberduck] build for commit 43faed7b on unknown branch: AppVeyor build succeeded
[Hosch250/Rubberduck] build for commit 43faed7b on ComApi: AppVeyor build succeeded
 
3:26 AM
> Ok, found another code inspection error with RD 2.0.5 regarding variant for Binary type.

![capture 2 0 5 binary as variant error - before](https://cloud.githubusercontent.com/assets/2254567/16862557/bd04bc08-4a8d-11e6-8808-defe8099a95d.PNG)
![capture 2 0 5 binary as variant error - report error](https://cloud.githubusercontent.com/assets/2254567/16862556/bd0285d2-4a8d-11e6-9130-cb5c59fabddf.PNG)
[rubberduck 2.0.5 - Binary as Variant.zip](https://github.com/rubberduck-vba/Rubberduck/files/
 
I found how to pass the VBProjects around in the sinks and prevent the ghost project, I think.
 
> Was not sure if Code Explorer by design or logic show errors as they find them.
I presumed duirng Resolving declarations.

Comparing Module 1 there is a method yet under useful stuff node there are errors and question mark warning or errors. I didn't know how to interpret so I showed it.

![capture 2 0 5 code inspections errors](https://cloud.githubusercontent.com/assets/2254567/16862791/ff583b96-4a8f-11e6-878d-a054e5c16d14.PNG)
 
hello all. Just briefly here to raise two issues.
 
oh, wow. Access objects can also have nbsp's:
SELECT *
FROM  DROP TABLE MSysObjects;
 
3:38 AM
@ThunderFrame you're on a rolllllllllll
 
@Hosch250 oooh nice!
 
Considers changing username to !
3
 
> This means there was a parse/resolve error, and the CE doesn't know if these items are still there, but also isn't sure if they are gone.
 
be nice thunderman!
 
3:43 AM
There you go, @PeterMTaylor. Status-by-design.
 
thanks.
 
> Perhaps the bottom panel could display some useful message when one such node is selected?

> Module contains code that Rubberduck could not parse. Members are not known to still exist.

Or similar.
 
@ThunderFrame Don't forget labels...
Sub Versive()
 : Debug.Print "foo"
GoTo
End Sub
 
@Comintern lol and in the error handler.... Resume
 
LOL!
 
3:53 AM
error handler: End
 
LOL
 
Well, I had it sort-of working, but now it stopped...
 
Public Sub End Sub()
End Sub
 
Imagine source-controlling that with an ignore white-space setting.
@Mat'sMug Did you work out that UDT problem. I revisited the question, but I can't make it break.
 
3:56 AM
I'm having visions of programs encoded in a VBA macro...
 
The secret word file for my obfuscater would be rendered comical....
 
In all seriousness, I wonder if that breaks the indenter.
Does \s match  ?
 
Visual Brainfuck for Applications
4
 
I guess this is a problem for tomorrow.
 
3:58 AM
@ThunderFrame nonVisual....
Gotta go, cya
 
Nope. For future reference, \s doesn't match   in a regular expression.
 
makes sense
 
Wrong test. It does match \s
This breaks the indenter:
Public Sub End Sub()
Dim Select Case
End Sub
 
4:03 AM
@Comintern I call Phucket
 
well, nbsp seems to break most things. I can save a new table with an nbsp in the name, but I can't rename an existing table with an nbsp.
 
Eh, I'm in no rush, but it's an easy fix.
I just need to replace \s with an actual space in all the regular expressions.
 
and tab?
 
Tabs get replaced by spaces by the VBE in the expressions I'm looking for.
 
one of the nicest features of the VBE IMO
 
4:06 AM
They might break if you don't move the cursor off the line and\or compile, but any number of things break in that case.
 
@Mat'sMug If the UDT is declared in a public module, and everything is strongly typed, I can't reproduce the error.
 
^^^ same result.
 
dang
this is crazy
with a public factory method that takes a UDT parameter (among others)?
 
I've run into it before though. I'm still convinced that it has to do with how the VBE registers temporary classes with OLE
 
as I was playing with that and moving things around, I ran into an interesting "forward reference" compile error
seems the order of declarations in the declarations section does matter
 
4:08 AM
yep, I got it once, until I strongly typed everything
 
@ThunderFrame 'tis strongly typed
 
Yes, order matters. I can't figure out the order that it registers classes though.
 
shouldn't it be working out dependencies for that?
 
It's probably something stupid like alphabetical by name.
 
@Mat'sMug Your question doesn't show your calling code (in the standard module)
 
4:09 AM
It should, but there are a lot of things the VBE should be doing.
 
@ThunderFrame I don't have calling code
 
LOL - Alphabetical... Prefix all your public types with nbsp, and the problem will go away
 
LOL
 
@Mat'sMug What calls Something.Create?
 
Actually, that doesn't work. You'd need to use BEL or something with a low ASCII number.
 
4:11 AM
some macro in a std module calls it
doesn't matter
 
^^^agreed
 
it wouldn't compile before I even wrote the calling code
 
did the code in my answer run?
 
UDTs are mainly useful for API functions and memory hacks.
 
and reading/writing binary
 
4:12 AM
I'd consider reading/writing binary a less hackish memory hack.
 
@ThunderFrame yes.. as-is. I'm still trying to figure out what's different between that MCVE and my actual code
 
IMO reading binary with VBA types is easier than reading binary with safe C#
 
Serialization is easier than both.
 
> @Hosch250 status is unchanged: the event handler isn't invoked from the thread that the VBA code registered from, so handlers are null and no event gets raised.
 
I had to pull a resource out of an NE .exe last year. VBA was the easiest way.
 
4:14 AM
Actually, if I expose a getter property for the UDT member I get a new compiler error about coercing the UDT into a Variant. This is hopeless. — Mat's Mug 11 hours ago
then there was that
 
@ThunderFrame Really? C# isn't bad at random access.
 
in the end I took all the UDT members as parameters instead of the UDT value
 
@Mat'sMug Worst case you could have used CopyMemory or LSet?
@Comintern Well, NE has next to no docs. I had to quickly determine the bytes I needed.
May 9 at 22:19, by ThunderFrame
I have literally had the Windows 1.0 SDK user guide open on my desk in the past year.
 
The Variant coercion message points directly to COM registration. The compiler is trying to expose the UDT publicly, but can't marshal it.
 
@CaptainMan being murdered to death is pretty shocking. It can even be fatal. — user568458 12 hours ago
 
4:23 AM
I'd tell you what condescending means, but I doubt you'd understand.
 
@Comintern yup. that's when I thought "I know! I'll just pass it as a variant!" #fail
@ThunderFrame too much trouble for a factory method that takes a handful of parameters :)
 
And no circular type dependencies in the classes/modules?
 
heck, hold on, lemme repro...
 
Those can easily be resolved when there are registered tlbs, but not if you're calling CoRegisterClassObject - that takes them one at a time.
 
ok wtf
something's messed up
could it be the PredeclaredId?
nope
 
4:35 AM
Do you have a default value? That might mess with it.
 
neither
 
It almost make me think that the VBE is trying to compile the module as creatable.
 
@Mat'sMug Paste your code - I'll try here
 
I don't understand
Private this As TFoo
Private foobar As Integer

Public Function Create(ByRef values As TFoo, value As Integer) As SomeClass
    With New SomeClass
        .Foo = values
        Set Create = .Self
    End With
End Function

Public Property Get Self() As SomeClass
    Set Self = SomeClass
End Property

Public Property Get Foo() As TFoo
    Foo = this
End Property

Public Property Let Foo(ByRef value As TFoo)
    this = Foo
End Property

Public Property Get DaFooBar() As Integer
    DaFooBar = foobar
SomeClass ^^^
Option Explicit
Public Property Get Foo() As TFoo
End Property
Class1 ^^^
Option Explicit
Public Type TFoo
    Bar As Integer
    Barrrr As String
End Type


Public Sub DoSomething()
    Dim a As SomeClass
    Dim b As TFoo

    Set a = SomeClass.Create(b, 42)
End Sub
Module1 ^^^
and it compiles
and I don't understand how that is any fundamentally different than what I have at work
 
What are you doing to make Set a = SomeClass.Create(b, 42) compilable?
 
4:44 AM
there's the ByRef parameter As TFoo, the Property Get Foo() As TFoo, the interface, the PredeclaredId... yet this compiles
@Comintern VB_PredeclaredId = True
 
@Mat'sMug Where is TFoo defined?
 
in Module1
 
oh, oops, should have read the message - I didn't rename the class...
 
I'll have to take another look at that code at work tomorrow, because now I'm utterly puzzled. I'm 99.9997% certain the non-compiling code is structurally identical.
 
compiles here
and runs
 
4:48 AM
I know
but not at work and I don't understand why
 
ditto.
It isn't in a plugin that you use as a reference is it?
 
nope
oh, refactor/rename just failed to rename Class1_Foo() to ISomething_Foo() on me
 
hmm I think I had this problem when trying to add a UDT to a dictionary, but that would have been because of the weak type...
 
I'd try using a fresh project with compile on demand turned off, then import all the code into it and do a clean compile.
 
@Comintern looks like that just might work!
 
4:56 AM
I keep forgetting that there's a stored project in the document.
 
when in doubt: blame caching
it has to be it
never thought I'd say this, but ..... <small>can't wait to be at the office tomorrow morning</small>
 
or just do RD source-control - that will clean the project
dang, we need to unbury that feature
 
^^
 
Compile clean would be a great RD 2.1 feature.
 
agreed
TTGTB
 
5:01 AM
IIUC - it's all there - but only exposed as source-control
need to add it to API too
 
'night @ThunderFrame @Comintern :)
 
'night
 
Night
 
5:20 AM
'night again
 
 
5 hours later…
10:12 AM
> I have a test module declaring a variable of a missing class (looks like it has been lost in a crash during repository creation, but that's a different topic). When running the tests I get an error message (which I would anticipate), but the explorer hangs and is not reacting (similar to #2056 )

I'm able to reproduce the issue with following steps:
- create empty DB
- add test module, add test function
- add `Private x As NonExistentClass` at the beginning of the module
- run test funct
> Btw. MSACCESS process is running even after closing Access. In order to restart the program I need to kill the process.
 
11:06 AM
@Mat'sMug scheduled reminder: There's an open PR waiting to be merged.
 
 
1 hour later…
12:19 PM
 
lol - in code copyright:
Sub © Slow Learner 2016()

End Sub
 
12:44 PM
[rubberduck-vba/Rubberduck] retailcoder pushed 38 commits to next (only showing some of them below)
[rubberduck-vba/Rubberduck] Vogel612 pushed commit 35c803c8 to next: Introduced Tools ParentMenu in Rubberduck and moved NavigateMenuItem Orders into NavigateParentMenu.cs to match other ParentMenus
[rubberduck-vba/Rubberduck] Vogel612 pushed commit f2cb4174 to next: i18n check and todo cleanup
[rubberduck-vba/Rubberduck] Vogel612 pushed commit 04dd638c to next: Fixed compilation errors
Merge pull request #146 from rubberduck-vba/next

sync with main repo
Merge pull request #147 from Vogel612/RegexAssistant

Regex assistant
[rubberduck-vba/Rubberduck] retailcoder pushed commit ca4d8880 to next: updated UI, reworded some resource strings, broke treeview styling.
[rubberduck-vba/Rubberduck] retailcoder pushed commit d14bb269 to next: treeview/scrollviewer fix
[rubberduck-vba/Rubberduck] retailcoder pushed commit 2a9d3804 to next: treeview styling still broken
Merge pull request #2 from retailcoder/regextool

Regextool
Merge pull request #1871 from Vogel612/RegexAssistant

Regex Assistant - [review-and-merge-please]
 
@Vogel612 there you go!
 
[rubberduck-vba/Rubberduck] build for commit 6d82ad9b on next: AppVeyor build succeeded
 
@Mat'sMug thanks :)
 
1:13 PM
hi @Mat'sMug !!!! Sorry for the delay...
 
> The one assumption Rubberduck needs to make, is that the VBA can compile and run the code. Failing to resolve `NonExistingClass` to a known declaration will not trigger an error state, and so there is no way Rubberduck can know if your code compiles as it's being parsed. If it parses, it's assumed to compile.

Not sure there's anything we can do for this.
> @Hosch250 can you confirm a parse error in a test module disables running unit tests?
 
1:32 PM
> @Hosch250 I expected it to rename the variable I am highlighting or to ask me what variable I want to rename. Rather than rename the module.

@retailcoder where can I find the logs?
> @Vogel612 not quite yet. The "Regex Assistant" feature, for now, simply *analyses* a regex pattern.

We'll need to add another tab to that dialog, to implement an actual "builder", and then a place to paste some sample text and evaluate/validate the regex against some data (we don't have to reimplement the regex engine, we can very well use the .net engine for this - and use the analyzer to determine if the pattern is a valid VBScript-flavor regex pattern).

But it's a good start.
 
2:23 PM
> It's prompting for the module because it doesn't see the variable.

You can find the logs via the *settings* dialog; there's a button to open the log folder in Windows Explorer.
> ![image](https://cloud.githubusercontent.com/assets/5751684/16877467/35e41b36-4a76-11e6-9fe9-8e4e2a308100.png)

Yet, the Rubberduck commandbar is showing up, stuck on "loading references" - the Rubberduck menu isn't displayed.

This exception is top-level and Rubberduck is gone at that point: the commandbar should not have appeared. Not sure how to repro, but the commandbar must not load if the add-in fails to startup cleanly.
[retailcoder/Rubberduck] retailcoder pushed 35 commits to next
Merge pull request #2 from retailcoder/regextool

Regextool
Merge pull request #1871 from Vogel612/RegexAssistant

Regex Assistant - [review-and-merge-please]
Merge pull request #150 from rubberduck-vba/next

sync with main repo
 
2:44 PM
> ![image](https://cloud.githubusercontent.com/assets/5751684/16878025/e0893240-4a78-11e6-8690-1adccfe6e0b8.png)

Here the `header` parameter is known to be of type `THeaderInfo`, which is known to be a UDT type. UDT types cannot be passed `ByVal`, this inspection result is misleading and the fix will break the code.
 
2:58 PM
>

[rubberduck.txt](https://github.com/rubberduck-vba/Rubberduck/files/366250/rubberduck.txt)
> Could we change it to txt so we can just drag and drop the file without changing the extension?
To make it easier for people who spend time filing bug reports.
 
monking, @Duga. Seems like were the only ones here today...
So, whatcha been up to?
 
> This was brought up before. I fail to see a reason we'd need to hold on to a .log extension. Let's do this.
 
The refresh button in the CE doesn't seem to do anything. I had an Excel file open. I had to open a couple of others to look at some data, then closed them. On open, RD noticed they were there and parsed them, adding them to the CE listing. On close, it didn't (which I know is expected behavior at the moment). However, clicking the refresh button does NOT cause it to refresh & remove them from the listing.
 
The button appears enabled, it just doesn't seem to do anything.
 
@FreeMan It really is disable, but it is only an image, so it doesn't change its appearance.
And that isn't my star on your message, so there are two others at least.
 
> The suggestion when I brought this up was to get Git to update to the 20th century and realize that .log is a legitimate text file extension, but I think this will be resolved more quickly by RD making the change.
 
@FreeMan it's disabled if parser state is "ready". does the RD commandbar's refresh button do anything?
 
That button, and the other refreshes, except the one in the command bar, behave the same way (except the SC one).
The command bar one, if there are no changes, will re-run the inspections.
 
@Mat'sMug, nope, commandbar indicates Ready, and that refresh button doesn't do anything, either.
 
3:06 PM
And there are pending changes?
 
there were not. I was simply trying to clear the other projects from the CE listing.
 
Heck, try to hit ENTER on a blank line in any module, and refresh again.
 
When I hit Return to create a change, the commandbar kicked off a reparse, but the CE button didn't cause any change in the CE state, nor did it cause the commandbar to update to indicate it was parsing
 
@FreeMan Those should clear when they are removed...
 
and... now it seems to be hung on Resolving declarations... - code does compile.
 
3:09 PM
Do they show up in the VBE's project explorer?
 
And how big is your module?
 
Looks like we still have ghosts
 
@Hosch250 "removed" means the XLS was closed? then no, they did not.
@Hosch250 not that big
It normally parses in a second or two, maybe 3 max
 
Some cache problem, I'm guessing.
 
3:10 PM
Anyway, I'm re-re-redoing the sink part of the cache right now.
 
+1 for re-re-redoing!
I closed & reopened Excel. It took about 12 seconds from hitting F11 until Ready (1-1 thousand counting - not by a stop watch or the log file)
 
Aye, startup is heavy. But RD is a big addin
 
I wish we could do something like delayed-startup.
Not load things until they are asked for.
But that would impact performance the first time things were used...
 
about 7 seconds to reparse once open
@Hosch250 it's not like the IDE is locked/not responding while that's happening. I can start typing, hit the hotkey to bring up the CE, etc. I wouldn't worry about it too much. (says the guy who's been really picky.)
 
We could inject ninject-implemented abstract factories and delay resolution of most dependencies. The seed is planted.
@FreeMan huh, I mean the startup delay between alt-f11 and the vbe actually showing up
 
3:18 PM
Hopefully that happens after my internship is done.
That sounds a lot like interception.
 
15 hours ago, by Comintern
Private Type
   As Variant
End Type

Sub  ()
    Dim   As
       .  = 42
     Debug.Print .
End Sub
 
Not at all
 
wut???
 
OK.
@FreeMan I'm going to use that as a the "learned" part of my report this week.
 
> learned that the VBE is a crooked evil IDE
3
 
3:19 PM
@Mat'sMug Ah. Frankly, I hadn't really noticed (or have gotten used to) the additional lag...
 
I did =)
 
@Hosch250 I can have an unnamed sub? and a variable called .?
 
@Mat'sMug Nah, I'm going to write a snippet with 0-width spaces and post it as valid VBA.
 
I going to do that!!!
 
@FreeMan Nope, the . is a qualifier.
He is using Unicode spaces there...
 
3:21 PM
ah. well, I prefer my code with 2 wheels. My balance just isn't that good.
 
@Hosch250 what do you know about abstract factories?
 
@FreeMan I rather thought you liked it with about 90 wheels, more/less.
@Mat'sMug I know about generic factories.
 
the design pattern I mean, "abstract factory pattern"
interface IFooFactory
{
    IFoo Create();
}
 
Well, I've heard of it. Does that count? :P
 
somewhat
;-)
 
3:24 PM
Yeah, I know that, I just don't know that's its name.
It works best when there is only one implementation of an interface.
 
the abstract factory pattern is one of the major tools in the DI toolkit
and ninject's factory extension automates their implementations, so all we need to write is the interface
 
@Hosch250 so long as my code doesn't fall over too often, I'm alright. Whatever it takes.
 
i.e. instead of injecting ISomething, we'll inject an ISomethingFactory
 
Well, I guess we can trust it to not try to do the wrong thing (TM).
 
the binding already exists to Bind<ISomethingFactory>().ToFactory();
 
3:26 PM
Yeah, looks interesting.
Hang on, though, while I get the sinks working again.
 
we don't need to code a concrete implementation because it's thoroughly trivial and ninject already knows what the dependencies are
ok
 
Oh, wait a sec.
Just trying to figure out what that means.
It means that if the user doesn't save their changes into the VBE, we should revert the changes?
That makes it slightly more complicated than what I'm currently doing. Currently, I just save all changes on close, whether the user saves them or not.
 
1
Q: Word VBA Function to Find a Specified Heading & Return its Text as a String

Kelly Tessena KeckIn this post, I asked for an overall review of a script to auto-generate table captions, because it was running relatively slowly. I've used Debug.Print to isolate the problem, and this function takes the longest (at 16 seconds). The purpose of the function is to find the heading of a specified...

 
3:43 PM
OK, time for the big test. Does my cache refactoring work?
BTW, @Mat'sMug, you know that "key is null" issue that was a big problem a while back? I think I might have fixed that as well with the cache refactoring.
Everything works, except one thing...
The VBE has a runtime error when I open an additional project. It doesn't prevent anything from working, but...
 
so much for "stable"
 
3:59 PM
this shit is hard. are we doing it right?
 
00:00 - 16:0016:00 - 00:00

« first day (770 days earlier)      last day (2410 days later) »