Commit Graph

665 Commits

Author SHA1 Message Date
Jaime Wren 4aec1e76e2 Record and report the completion suggestions that take the longest to compute in completion_metrics.dart.
Change-Id: I5a4043a9754439c38be6b86c094a895366c2afc9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145562
Commit-Queue: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-29 22:38:58 +00:00
Jaime Wren 1784caa31d Completion metrics bug fix, pass in DartdocDirectiveInfo() when creating a DartCompletionManager()
Change-Id: Ib9a1c15016d3ed2427510e58dd63458655a50b5c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145504
Commit-Queue: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-29 20:05:44 +00:00
Jaime Wren 53601ecc18 Implement available suggestions in completion_metrics.dart, a flag is added to enable the new feature.
Change-Id: Ib7477b1a517d4aa1dc09d85df3df553ca61baa2e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145241
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-04-29 17:59:24 +00:00
Simon Binder aa529bc684 Support plugin notifications in LSP server
This adds support for analysis domains that plugins contribute to by
sending notifications. I've only implemented folding so far, but most
of this CL is to cache results from plugins and to adapt sending server
capabilities.

Instead of using a NullNotificationManager, the LSP server now uses a
regular NotificationManager, except that results won't be forwarded to
clients. LSP handlers will fetch partial results from plugins and merge
them with data from the server that will be computed when needed.

I've extracted the server capabilities calculation from the init
handlers into ServerCapabilityComputer. It will also contain the
interestingFiles glob from active plugins and re-register capabilities
whenever plugins change.

Change-Id: I9869240cbfa284592e952498933e638b89a2a763
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142981
Reviewed-by: Danny Tuppeny <danny@tuppeny.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-24 20:36:07 +00:00
Paul Berry eab774c255 Move much of migration tool UI code into pkg/nnbd_migration
Change-Id: Ia3b388b274c908dcc6f9cb9ee4bf004b82681c43
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/144320
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2020-04-23 23:43:42 +00:00
Brian Wilkerson c980e5d876 Produce a completion location for the argument list in an extension override
Change-Id: I694d77dbba171fb0d4806933ce766c9d411dba21
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/144664
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2020-04-23 19:30:19 +00:00
Brian Wilkerson d35f9a8aba Measure identifier length as a possible feature
See the email I sent as background.

Change-Id: Ib4f558a2dfdf585236e99d695bdfcaff045c95c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143940
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-17 16:47:58 +00:00
Brian Wilkerson 92db79412e Add a generator and generated code for the element kind relevance table
Change-Id: I8b25a6e7c992eb572305d0ae8392baee03e479ef
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143483
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-15 19:15:22 +00:00
Danny Tuppeny fad05e89dc Require exact type matches for equality in LSP classes
Change-Id: Ia3f502a315e2c6fbc62eb6fbe3785dad86c782cc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142992
Commit-Queue: Danny Tuppeny <danny@tuppeny.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-14 15:47:01 +00:00
Danny Tuppeny 2fbe4d9194 Resolve type aliases when generating LSP equals methods
Change-Id: Iccecfa8dc8d77cb0d4358db1f7fa54607ffaa428
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142991
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-14 15:47:01 +00:00
Brian Wilkerson 2aecf30d2b Add some missed children to code metrics
Change-Id: Ibfed9bfc32b291427247bd4750e57f0eaae62e4d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143253
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-13 16:08:53 +00:00
Brian Wilkerson 4e9ffc5a0d Remove the experimental flag from closing labels
I think it's safe to remove the experimental status at this point.

Change-Id: I3a992e7134633d1e9de0bba0f1a3d2ff357fd8b0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142884
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-09 16:51:19 +00:00
Brian Wilkerson c9888ad58a Update code_metrics to support running it over a corpus
Change-Id: I52eaf18914dd1ac1743f3c1830fdc27f607de9f1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142881
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-08 16:22:33 +00:00
Jaime Wren 3f36b1fed1 Modify the completion_metrics.dart file to print the delta between the generated completions with and without useNewRelevance set
Change-Id: Ic50cc0df6eee02d7aad44ed12766234268899601
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142723
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-04-07 19:45:56 +00:00
Jaime Wren ff6be8d822 Update the completion_metrics.dart algorithm to have 2 overlay options
1- remove the token to complete, and then attempt the completion
2- remove the token and the rest of the file, and then attempt the completion

The default remains that there is no overlay, the file remains the same and the completion attempt is made at the starting character of the token.

Change-Id: I45f840fef295f2da12f2278445f85152b6c17262
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142521
Commit-Queue: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-06 20:10:34 +00:00
Jaime Wren cedb19f386 Some additional prints in the completion_metrics.dart algorithm
Change-Id: Ic2f8c266a6c10a128fa06b9ea915e47131428b93
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142447
Commit-Queue: Jaime Wren <jwren@google.com>
Auto-Submit: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-05 17:50:50 +00:00
Jaime Wren 987ad1d967 Iterating on additional corner cases in the completion metrics algorithm
Change-Id: Ia497c258f639b808fb3c583870ea19c219ef3c53
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142448
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-04-05 17:09:50 +00:00
Jaime Wren 270c9ee459 Bug fix in the completion_metrics.dart visitor by fixing the element kind in the instance creation expressions
Change-Id: I4b2a07ad4a0975aad8892b65dbad9320db0c809f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142322
Commit-Queue: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-03 16:44:06 +00:00
Brian Wilkerson 0eadef9d95 Report more development time metrics
Change-Id: Ibee7131783d847aa95c19c4ef647ccbac5a8611a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142180
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-04-02 16:09:04 +00:00
Brian Wilkerson b85c68a73c Collect and print information about the worst completion results
Change-Id: I38e1d2a587f80ed4ee0da75f875b94aff922fe3a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142064
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jaime Wren <jwren@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
2020-04-01 21:45:48 +00:00
Jaime Wren a14d41958e Modify the completion_metrics.dart file to ignore named arguments in dynamic or unknown method calls.
This is a follow up on https://dart-review.googlesource.com/c/sdk/+/140775

Change-Id: Id84271f1bc8559f516c2c4e09c2b66dc10462f3f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141915
Commit-Queue: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-01 18:26:32 +00:00
Jaime Wren 11d6bc6055 Comment out the currently incomplete available suggestions work to ensure that the output is accurate for non-available suggestions users
Change-Id: I094392cb81edf5c0c7b11702ba42e5d2c80a1453
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141760
Commit-Queue: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-03-30 22:08:19 +00:00
Brian Wilkerson 93313eb244 Enable omit_loval_variable_types in analysis_server_client
Change-Id: I21271bfc6b2b7949fcafc5f91f23f8364697bcfc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141580
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-30 03:59:07 +00:00
Brian Wilkerson 8969b1839c Enable omit_local_variable_types in analysis_server
Change-Id: I7e5c13d40fd276854601681fc84be321e6031b10
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141583
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-30 03:58:44 +00:00
Brian Wilkerson a564026dc7 Remove the need for a --corpus flag from completion_metrics
Change-Id: Id395b3f4d58a072c435d97920a573379439d8580
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141471
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-28 17:50:53 +00:00
Brian Wilkerson 2b4f12f3c5 Remove the need for a --corpus flag from relevance_metrics
Change-Id: I7dacc57728258a9cbbe481950d618bbe73bfa22f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141470
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-28 17:50:44 +00:00
Brian Wilkerson 7e724e70b0 Sort non-generated files in analyis_server and add a test to ensure they stay that way
Change-Id: I6c7a38cefa69f46737bd50eefe2fbb88c127017b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141520
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-28 17:12:03 +00:00
Sam Rawlins 1aab8bccd0 Add a dev mode to Migrator preview site compiler
Change-Id: I355ca9f89371e497370664ed8733a581c5958ae5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140763
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2020-03-25 14:49:32 +00:00
Brian Wilkerson 2d0fed35bb Update the ArgListContributor to have new relevance scores
This also includes a new metric computation showing how often function
typed parameters have closures as arguments.

Change-Id: I8999cc3935bcc7514ebba90a8a4d246b2f236c42
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140702
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Jaime Wren <jwren@google.com>
2020-03-24 17:00:55 +00:00
Jaime Wren dd95365f76 Optimization for the MeanReciprocalRankComputer.  This change doesn't have the object hold onto the list of ranks for the entire duration of a run, but has a running sum instead (similar to ArithmeticMeanComputer).
This would have been an over-optimization originally, but at this point, we have 10 of these computer objects in completion_metrics.dart, and we are running this algorithm with up to 1.2 million ranks.

(Assuming that an int takes 4 bytes which I believe is true...) On a recent run of Brians, 29.4 MB of data was the running total of all the ranks.  With this change, the same data will be stored with 10 doubles and 10 ints.

Change-Id: If97ca18e78782c02a3ca0a3ed9d6a9725f5a05ea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140321
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-21 19:50:36 +00:00
Brian Wilkerson 49c3fd32da Measure how often context type information is available
Change-Id: I4dc3fea554ec16665e7ca5e4cfb1e577403a8ec9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139861
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-17 23:28:55 +00:00
Brian Wilkerson f617f92c15 Capture the syntactic metrics removed from relevance-metrics
Change-Id: I89f7112ad31f41b0b6bc406156f4371fa373d62c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139842
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-17 19:35:55 +00:00
Brian Wilkerson 169b88654d Split out metrics computations for static members
Also did a little cleanup and sorted the file.

Change-Id: I7bb288345abf851dd88d6f7cf28e4d49ade75ec6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139829
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-17 19:23:27 +00:00
Jaime Wren 810d85d4cf Measure and report the average number of milliseconds it takes per code completions.
Tests to come for the new class.

Change-Id: I387ec41966e8db674c0be26124a9dcb8abeeb30a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139700
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-16 19:58:20 +00:00
Konstantin Shcheglov 51f5636daf Report FLUTTER_GET_WIDGET_DESCRIPTION_CONTENT_MODIFIED when a file is changed during the request.
R=brianwilkerson@google.com

Change-Id: I9d77df28dd16fdaf30ba4dd04fe8cfff221c236d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139144
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2020-03-12 01:09:00 +00:00
Jaime Wren a7b8401517 Add a Stopwatch to time the completion_metrics.dart
Change-Id: I05ba8ac79ffa6a63c1cf66a79410d289d3659a29
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139062
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-11 18:24:09 +00:00
Jaime Wren 1d5601e7f9 Modify the completion_metrics.dart algorithm to compute the set of completion suggestions with useNewRelevance set to true and false, and printing out each set of results for comparison.
Change-Id: I2510d247b1ee7397cfb5a01e6e87a3015543bc31
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139036
Commit-Queue: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-03-11 17:33:59 +00:00
Jaime Wren 699f4b7395 Add additional metrics into the completion metrics algorithm, MRR broken apart by type member completions, and non-type member completions
Change-Id: I5fd0c6b0ac1f9f0450ba630964e335488046a698
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138912
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-10 19:48:21 +00:00
Brian Wilkerson d673c176ae Start implementing new relevance scores for members of a type
Change-Id: I5594da6c9f1b71d239593131c02b5b10a57a4725
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138907
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-10 17:28:51 +00:00
Konstantin Shcheglov 83378633e1 Add the attachment with the content of the file being analyzed.
Change-Id: I75b1c61e2d04cd5e03ef4375e97ef3c9f4add874
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138384
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-03-10 04:57:20 +00:00
Jaime Wren 005c5d7b52 Add an additional MMR "Max Rank 5" metric to the output of the completion_metrics.dart
Change-Id: I00ff65853eaef85bd33d76e930d7ba1d39783a14
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138882
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-09 21:54:20 +00:00
Brian Wilkerson 52ad8dc2d2 Gather metrics on super invocations
This only looks at method invocations and property accessors. It doesn't
look at operator invocations. While it might be interesting, I doubt it
would be significantly different.

Change-Id: I51ffd612fdbf5b60470bd40cbe90f3c2b82fe1e5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138883
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-09 21:47:40 +00:00
Jaime Wren f5dae48fac Add an ArgParser to completion_metrics.dart in the same manner as relevance_metrics.dart (https://dart-review.googlesource.com/c/sdk/+/138700)
Change-Id: I7a1cc9b6f042cff42b267ceda20233e061d167f0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138880
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-09 20:33:30 +00:00
Brian Wilkerson 7bc171483e Latest changes to the relevance metrics tool
I created a class to hold the methods that compute feature scores.

I moved more of the code into the feature computer.

I addressed a couple of TODO items.

I implemented a couple of extra ways of viewing the data so that I could
convince myself of the right feature definition for the feature that uses
the context type.

Change-Id: I448eb74e93e854a75be32d2a16ab0b50e295f4a7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138700
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-07 20:01:27 +00:00
Jaime Wren 69851f34c5 Remove the unused type hierarchy from the completion_metrics.dart
Change-Id: I71d4f2518f107d296b359f34c4a00c0e0a472d18
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138568
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-03-06 00:16:31 +00:00
Brian Wilkerson bf5171cfd1 Add support for reporting how an accessed member related to the context type and extract feature computation
Change-Id: Id5cd64ac5aaa8b5f502f978e4dab5f9502efb47c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138560
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-05 18:42:49 +00:00
pq 2a13c38ca7 corpus support
Basic support for running metrics over a corpus (e.g., directory containing n packages).

Change-Id: Ie92fc6d035edbe57c1581ccb2bee9b60ea9594d1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138380
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jaime Wren <jwren@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
2020-03-04 20:36:36 +00:00
Brian Wilkerson c01417a00f Add more data and improve output
Change-Id: Ib99336a26a83c9d502f1e7d1873151387e68c364
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138263
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-03 23:02:13 +00:00
pq af9d78555e make git clone recursive
Change-Id: I967bc82d2b9dece0e3f60b8ea30ff76365e91540
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138261
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
2020-03-03 21:36:23 +00:00
pq b774160615 handle null exception params
(This occurs if there is no catch keyword.)



Change-Id: I3d8d561f33f7d626b590d78be44d5cce2ec73ad0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138108
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
2020-03-03 19:31:31 +00:00