1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-11-30 23:30:16 +00:00
Commit Graph

1454 Commits

Author SHA1 Message Date
Scott Lahteine
330f82971b Buzzer requires BEEPER_PIN 2016-08-02 14:05:37 -07:00
AnHardt
39c4603598 Correct typo in retract. 2016-08-02 21:06:08 +02:00
Scott Lahteine
6eed37aafb Merge pull request #4486 from thinkyhead/rc_pid_add_extrusion_rate_off
PID_EXTRUSION_SCALING, disabled by default
2016-07-31 18:23:51 -07:00
Scott Lahteine
4bf3526d00 Merge pull request #4463 from thinkyhead/rc_azteeg_x3_eeb
Wrangle RAMPS variants and derivatives
2016-07-31 18:22:49 -07:00
Scott Lahteine
63fd1f49a6 PID_EXTRUSION_SCALING, disabled by default 2016-07-31 17:49:34 -07:00
Scott Lahteine
f388beafa1 Merge pull request #4476 from otvald/RCBugFix
FIX for endstop adjustemt on delta is offset
2016-07-31 01:09:54 -07:00
Thomas Otvald Jensen
fe059f1221 During homing, line_to_axis_pos will make a path which moves across the
endstop trigger point. The move is stopped at endstop, so current_position
should also be adjusted to reflect this!

Caused error in subsequent call in endstop adjustment, since the movement
would assume a wrong starting position.
2016-07-30 16:50:31 +02:00
esenapaj
bd73e6d3c8 Fix for PR #4452 (Additional heater-state output changes)
・Add missing ';'
2016-07-30 22:49:30 +09:00
Scott Lahteine
bdac2eb13a Don't set non-existent SLED_PIN 2016-07-30 04:17:21 -07:00
Scott Lahteine
8e2f095dde Merge pull request #4456 from jbrazio/speaker-type3
Improvement to non-blocking speaker
2016-07-30 04:07:08 -07:00
Scott Lahteine
9e21b2e51d Merge pull request #4455 from AnHardt/double-bump-feature
double bump probing as a feature
2016-07-29 20:00:10 -07:00
Scott Lahteine
db4d03bc81 Merge pull request #4452 from thinkyhead/rc_fix_heaterstates_part_2
Additional heater-state output changes
2016-07-29 19:58:00 -07:00
Scott Lahteine
844a4e799e Account for DELTA in Planner::refresh_positioning 2016-07-29 18:41:11 -07:00
AnHardt
7188ce0ad6 double bump probing as a feature
Why double touch probing is not a good thing.

It's widely believed we can get better __probing__ results when using a double touch when probing.

Let's compare to double touch __homing__.
Or better let's begin with single touch __homing__.
We home to find out out position, so our position is unknown.
To find the endstop we have to move into the direction of the endstop.
The maximum way we have to move is a bit longer than the axis length.
When we arrive at the endstop - when it triggers, the stepper pulses are stopped immediately.
It's a sudden stop. No smooth deacceleration is possible.
Depending on the speed and the moving mass we lose steps here.
Only if we approached slow enough (below jerk speed?) we will not lose steps.

Moving a complete axis length, that slow, takes for ever.
To speed up homing, we now make the first approach faster, get a guess about our position,
back up a bit and make a second slower approach to get a exact result without losing steps.

What we do in double touch probing is the same. But the difference here is:
a. we already know where we are
b. if the first approach is to fast we will lose steps here to.
But this time there is no second approach to set the position to 0. We are measuring only.
The lost steps are permanent until we home the next time.

So if you experienced permanently rising values in M48 you now know why. (Too fast, suddenly stopped, first approach)

What can we do to improve probing?
We can use the information about our current position.
We can make a really fast, but deaccelerated, move to a place we know it is a bit before the trigger point.
And then move the rest of the way really slow.
2016-07-30 03:00:49 +02:00
Scott Lahteine
c31f56a38c Deprecate EXTRUDER_WATTS and BED_WATTS 2016-07-29 17:34:14 -07:00
Scott Lahteine
e1970b4b28 Show power output in same order as temp output 2016-07-29 14:55:22 -07:00
Scott Lahteine
74df828acc Show ADC values inline rather than after 2016-07-29 14:55:18 -07:00
João Brázio
2b5faa61e2 Consolidates Buzzer and Speaker into a single object 2016-07-29 19:25:39 +01:00
Scott Lahteine
b40661cb18 Fix output of heater states 2016-07-28 17:40:01 -07:00
Scott Lahteine
8953e3e984 Allow Z_SAFE_HOMING without a probe 2016-07-27 04:33:56 -07:00
Scott Lahteine
5272147f7c Followup #4402 fixing 3-point leveling 2016-07-25 15:56:34 -07:00
Scott Lahteine
169c21b477 Merge pull request #4402 from thinkyhead/rc_consistent_positioning
Account for coordinate space offsets
2016-07-24 19:23:20 -07:00
Scott Lahteine
2595a40a61 Account for coordinate space more in G28 / G29 / M48 2016-07-24 18:34:05 -07:00
Scott Lahteine
b7b7c90477 Merge pull request #4389 from thinkyhead/rc_optimize_planner
Optimize planner with precalculation, etc.
2016-07-24 17:48:23 -07:00
Scott Lahteine
b183442c61 Fix inactive_extruder_x_pos for coordinate space 2016-07-24 17:20:36 -07:00
Scott Lahteine
f75b0c2ee1 Make POSITION macros global 2016-07-24 17:20:36 -07:00
Scott Lahteine
101b60ef42 Tweak Dual X Carriage data spacing 2016-07-24 17:20:35 -07:00
Scott Lahteine
d8f2876753 Replace some float division with multiplication 2016-07-24 13:27:50 -07:00
Scott Lahteine
f8b5749235 Replace division in planner with multiplication 2016-07-24 13:27:49 -07:00
Scott Lahteine
db5df9500b Move sync_plan_position closer to the top 2016-07-24 13:27:49 -07:00
João Brázio
50fb0f7cec M31 serial output is now always in EN 2016-07-24 15:52:03 +01:00
João Brázio
62d96d72f3 Renamed timestamp_t to duration_t 2016-07-24 03:16:02 +01:00
Scott Lahteine
bb93b6822a Use set_current_from_steppers_for_axis 2016-07-23 15:25:54 -07:00
AnHardt
96a162beda Use implications from #4370 in run_z_probe()
See also https://github.com/MarlinFirmware/Marlin/pull/4370#issuecomment-234713680
2016-07-23 13:09:28 -07:00
Scott Lahteine
4e67a85a5d Macros to loop over axes 2016-07-23 13:09:28 -07:00
esenapaj
784be56e99 Follow-up the PR #4353 (General cleanup: enum)
・Update description of M111
2016-07-24 00:53:35 +09:00
Scott Lahteine
08459a003f Undo the self-sabotage that is do_blocking_move_to_axis_pos 2016-07-23 00:59:11 -07:00
esenapaj
d32c4056ad Fix for the PR #4379 (Additional logging of do_blocking_move_to)
・Remove unneeded PSTR()
2016-07-23 16:38:57 +09:00
Scott Lahteine
8099ee51a5 Merge pull request #4379 from thinkyhead/rc_blocking_move_logging
Additional logging of do_blocking_move_to
2016-07-23 00:10:55 -07:00
Scott Lahteine
ad16d5019e Additional logging of do_blocking_move_to 2016-07-22 23:53:08 -07:00
Scott Lahteine
652fd8a826 Merge pull request #4362 from thinkyhead/rc_duplication_mode
DUAL_NOZZLE_DUPLICATION_MODE
2016-07-22 21:17:59 -07:00
Scott Lahteine
6da3729531 Merge pull request #4370 from thinkyhead/rc_delta_fwd_kinematics
Delta Forward Kinematics (and LOGICAL_POSITION)
2016-07-22 21:16:00 -07:00
Scott Lahteine
b3eb0c8569 Add LOGICAL_POSITION macro, apply to kinematics 2016-07-22 18:38:13 -07:00
Scott Lahteine
35a610abf9 const arg to inverse_kinematics 2016-07-22 17:42:48 -07:00
Scott Lahteine
b6afa028f4 Don't call adjust_delta on SCARA 2016-07-22 16:36:34 -07:00
Scott Lahteine
d5e2d523c7 Generalize kinematics function names 2016-07-22 16:36:34 -07:00
Scott Lahteine
9c4ad7d7ef Clean up delta declarations in Marlin_main.cpp 2016-07-22 16:36:33 -07:00
Scott Lahteine
4b1725628b Move kinematic functions to "private" scope 2016-07-22 16:36:33 -07:00
Scott Lahteine
cde068ea42 Use set_current_from_steppers in quickstop_stepper 2016-07-22 16:36:33 -07:00
Scott Lahteine
9f30cc84ce Use set_current_from_steppers for other kinematics 2016-07-22 16:36:33 -07:00
AnHardt
5db9b940ee Use forwardKinematics in DELTA run_z_probe() 2016-07-22 16:36:33 -07:00
Scott Lahteine
cbc7f22ad9 Implement DUAL_NOZZLE_DUPLICATION_MODE 2016-07-22 16:23:58 -07:00
Scott Lahteine
179e091473 Merge pull request #4374 from thinkyhead/rc_jbrazio_timestamp_t
Implements timestamp_t structure
2016-07-22 16:08:10 -07:00
AnHardt
499e404fbf forwardKinematics for Delta printers 2016-07-22 16:01:51 -07:00
João Brázio
23043a1e05 Rework some code to use timestamp_t struct (saves 72 bytes) 2016-07-22 15:53:31 -07:00
Scott Lahteine
0b2c608d2f Merge pull request #4372 from jbrazio/gcc-bark
Fix minor gcc warning
2016-07-22 15:18:53 -07:00
Scott Lahteine
311c7dadb6 Cleanup do_blocking_move_to for DELTA 2016-07-22 14:18:45 -07:00
Scott Lahteine
b78590e63d Patch and cleanup run_z_probe 2016-07-22 14:18:45 -07:00
João Brázio
2f7716987d Fix minor gcc warning 2016-07-22 16:08:56 +01:00
AnHardt
376a57232e DELTA do_blocking_move_to() more like the Chartesian one 2016-07-22 03:12:46 +02:00
AnHardt
6ef26a85d8 Back to the differences method in run_z_probe() 2016-07-21 18:16:38 +02:00
Scott Lahteine
16e5348659 Merge pull request #4360 from thinkyhead/rc_toolchange_for_G28
Always switch to tool 0 for G28
2016-07-20 19:07:35 -07:00
Scott Lahteine
d2e9a9c188 Always switch to tool 0 for G28 2016-07-20 09:36:55 -07:00
Scott Lahteine
194d9521c3 Merge pull request #4356 from thinkyhead/rc_simpler_run_z_probe
Unify run_z_probe
2016-07-19 19:02:39 -07:00
AnHardt
09a3cc33e6 Unify run_z_probe
Unify run_z_probe
Add double touch for DELTAs.
Introduce Z_PROBE_SPEED_FAST and Z_PROBE_SPEED_SLOW
  defaulting to homing_feedrate_mm_m[Z_AXIS] and homing_feedrate_mm_m[Z_AXIS]/2
2016-07-19 18:42:48 -07:00
Scott Lahteine
204fd6ec44 Set homing feedrates individually 2016-07-19 17:31:58 -07:00
João Brázio
47fef80848 Nozzle::clean() no longer requires HAS_BED_PROBE 2016-07-19 15:07:02 -07:00
Scott Lahteine
6c899bb520 Merge pull request #4349 from jbrazio/gcc-bark-bark
Removes some minor GCC warnings
2016-07-19 13:42:33 -07:00
Scott Lahteine
c502018eab Merge pull request #4353 from jbrazio/global-enum-file
General cleanup: enum
2016-07-19 13:37:56 -07:00
AnHardt
11c075c6b2 Introduce line_to_axis_pos(axis_codes axis, float where, float feed_rate = 0.0)
and use it in `homeaxis()` instead of `do_blocking_move_to_axis_pos()`.
`do_blocking_move_to_axis_pos` was wrong because it performed subdivided, delta-corrected moves for x- and y-axis.

The first common move for delta homing is like quick_home but for 3 towers.

Fix two warnings.
2016-07-19 17:24:44 +02:00
João Brázio
3ebad4e020 Moves all global enums to a central file 2016-07-19 14:31:09 +01:00
João Brázio
30ac0782a9 Comment section style correction 2016-07-19 03:27:42 +01:00
João Brázio
79e7721b76 Removes some minor GCC warnings 2016-07-19 03:03:11 +01:00
Scott Lahteine
3422103863 Merge pull request #4310 from thinkyhead/rc_mbl_position_shift
Fix position shift with MBL
2016-07-17 18:31:25 -07:00
Scott Lahteine
493d30cd97 Drop intermediate nx, ny, and set destination directly 2016-07-17 17:59:52 -07:00
Scott Lahteine
07a735ad22 We always use destination so modify mesh_buffer_line 2016-07-17 17:57:33 -07:00
Scott Lahteine
04a5b7b257 A macro to normalize positions 2016-07-17 17:57:32 -07:00
Scott Lahteine
86eb5251c5 Fix some debug messages 2016-07-17 17:10:02 -07:00
Scott Lahteine
1e57a6af73 Use blocking_move, current_position in G28 homing 2016-07-17 16:56:13 -07:00
Scott Lahteine
f6a3a1da09 nz and ne are always set, so drop them down 2016-07-17 14:12:39 -07:00
Scott Lahteine
d0009e013b Rename cell index vars 2016-07-17 14:12:39 -07:00
Scott Lahteine
697373b071 Reduce code size of mesh_buffer_line 2016-07-17 14:11:25 -07:00
Scott Lahteine
f4a69281fc Only call mesh_buffer_line when MBL is active 2016-07-17 14:11:25 -07:00
Scott Lahteine
799a31cd30 Include the position_shift when splitting mesh lines 2016-07-17 14:08:20 -07:00
Scott Lahteine
f242aea032 Merge pull request #4319 from thinkyhead/rc_feedrates_to_mess_with_you
Wrangle feed rate variables
2016-07-17 14:07:52 -07:00
Scott Lahteine
0342661b3f Merge pull request #4335 from thinkyhead/rc_status_pad_jp
Debug char, fix compile errors for lcd pins
2016-07-17 14:07:08 -07:00
Scott Lahteine
5ed1e7a464 codenum => dwell_ms 2016-07-17 13:35:21 -07:00
Scott Lahteine
f38553b482 fix a debug message 2016-07-17 13:29:42 -07:00
Scott Lahteine
3d78b8f929 Use HYPOT macro instead of hypot function 2016-07-17 13:29:42 -07:00
Scott Lahteine
9f9fe043ba Apply sq macro throughout 2016-07-17 13:29:41 -07:00
Scott Lahteine
93ba5bddd7 Append units to feedrate variables 2016-07-17 13:29:41 -07:00
Scott Lahteine
21ee0612e3 Debug char 2016-07-17 12:27:36 -07:00
Scott Lahteine
8f24e0a556 Debugging of MBL in G28 2016-07-17 11:08:30 -07:00
Scott Lahteine
05da02f0a2 Implement MIXING_EXTRUDER and SWITCHING_EXTRUDER 2016-07-17 10:53:10 -07:00
Scott Lahteine
02285662f5 Merge pull request #4298 from jbrazio/feature/filament-counter
Adds filamentUsed and longestPrint stats to PrintCounter
2016-07-16 23:48:46 -07:00
Scott Lahteine
bf16ae5a70 Merge pull request #4299 from jbrazio/feature/g27-park-nozzle
Implements park nozzle feature
2016-07-16 23:47:12 -07:00
João Brázio
a8758619ec The safe_delay() is now globaly accessible 2016-07-16 12:28:06 +01:00
João Brázio
f5234b0695 Adds a customizable screen timeout for the default boot screen 2016-07-16 12:24:36 +01:00
João Brázio
2f26bc2153 Adds filamentUsed and longestPrint stats to PrintCounter 2016-07-16 12:12:27 +01:00
João Brázio
c711701626 Implements a nozzle parking command (G27) 2016-07-16 12:07:59 +01:00
João Brázio
5f368d1bc3 Followup for #4320 2016-07-16 11:57:35 +01:00
João Brázio
d7c51bc4b9 Merge pull request #4320 from jbrazio/followup/4307
Moves do_blocking_move_to_xy() out of the HAS_BED_PROBE define
2016-07-16 11:48:00 +01:00
Scott Lahteine
e563634a25 Merge pull request #4314 from AnHardt/use-d_b_m_t-in-g28
Use do_blicking_move_to*() in G28
2016-07-15 20:22:02 -07:00
Scott Lahteine
59ae1811c2 Merge pull request #4303 from AnHardt/delta-g28
DELTA: Move out of the clip-zone after G28
2016-07-15 20:20:22 -07:00
João Brázio
fdea8b6e6a Moves do_blocking_move_to_xy() out of the HAS_BED_PROBE define 2016-07-16 03:59:49 +01:00
AnHardt
d2a49c016d DELTA: Move out of the clip-zone after G28
Move down to a safe height after G28 for DELTAs.
2016-07-15 15:22:44 +02:00
AnHardt
46994fd17d Use do_blicking_move_to*() in G28 2016-07-15 15:02:15 +02:00
João Brázio
ffbb31b235 Fixes an PSTR overflow with print_xyz() 2016-07-15 11:25:34 +01:00
Scott Lahteine
cec7110409 Merge pull request #4308 from thinkyhead/rc_debug_gcode_t
Added logging related to gcode_T
2016-07-14 19:46:33 -07:00
Scott Lahteine
166f19251e Add more debugging for leveling
- Especially in `gcode_T`
- In `update_software_endstops`
- Some tweaks to observe
2016-07-14 19:04:13 -07:00
Scott Lahteine
7ac0b91a45 Collapsible long comment in gcode_T 2016-07-14 18:28:41 -07:00
João Brázio
e71a631f8f do_blocking_move_*() no longer depend on HAS_BED_PROBE 2016-07-15 01:54:14 +01:00
Scott Lahteine
8bf6861af8 Merge pull request #4054 from jbrazio/feature/g12-clean-tool
Implements clean nozzle feature (Lulzbot's REWIPE)
2016-07-14 14:38:38 -07:00
Scott Lahteine
1618870c84 card.printingHasFinished does print_job_timer.stop 2016-07-14 11:39:58 -07:00
Scott Lahteine
34da77dad3 Simply run M31 at the end of an SD print 2016-07-14 11:39:58 -07:00
Scott Lahteine
a8d71f0ac6 Support longer print times in M31 2016-07-14 11:39:58 -07:00
Scott Lahteine
e481b79af1 Allow stopwatch and printcounter to go over 18 hours 2016-07-14 11:39:57 -07:00
João Brázio
4937f9ada4 Minor G12 tweaks and point_t struct extension 2016-07-14 00:07:36 +01:00
João Brázio
021544f572 Improves G12 zig-zag pattern 2016-07-13 21:14:56 +01:00
João Brázio
b05a75655a Implements a nozzle cleaning pattern generator (G12) 2016-07-13 21:14:19 +01:00
Scott Lahteine
4f77adddbe Merge pull request #4286 from thinkyhead/rc_debug_clean
Prefix and suffix in debug output
2016-07-12 20:49:15 -07:00
Scott Lahteine
e5c7af5ddc Merge pull request #4222 from thinkyhead/rc_allow_cold_extrude
M302: Add "P" parameter, status output
2016-07-12 20:40:14 -07:00
Scott Lahteine
2224032568 Merge pull request #4285 from thinkyhead/rc_manual_move_fast_fine
No delay for the smallest LCD moves
2016-07-12 20:16:38 -07:00
Scott Lahteine
d4c68279c8 Add "P" parameter to M302 2016-07-12 20:04:15 -07:00
Scott Lahteine
a8b6b6a128 Merge pull request #4252 from thinkyhead/rc_rename_hpb
Replace PLA/ABS preheating with generic
2016-07-12 20:00:33 -07:00
Scott Lahteine
1e14df876d Use varname as prefix in DEBUG_POS, string as suffix 2016-07-12 19:58:09 -07:00
Scott Lahteine
9e8b3e5ee6 Homing direction is irrelevant in probe raise! 2016-07-12 18:09:02 -07:00
Scott Lahteine
4865447830 Merge pull request #4276 from esenapaj/Suppress-warnings
Suppress warnings
2016-07-11 19:08:59 -07:00
esenapaj
58177a1602 Suppress warnings 2016-07-12 08:22:24 +09:00
AnHardt
7bcab26f2a Don't deploy/stow the probe if z-min-endstop is used for homing
Don't deploy/stow the probe if z-min-endstop is used for homing.
Don't apply `zprobe_zoffset` if probe was not used.
2016-07-11 22:01:44 +02:00
AnHardt
e92e58df1f Adjust wait_for_cooling slope
Adjust wait_for_cooling slope
and drop mintemp for cooling.

See
https://github.com/MarlinFirmware/Marlin/pull/4169#issuecomment-231544532
2016-07-11 03:36:23 +02:00
Scott Lahteine
ee0983ab57 Further reduction when HOTENDS == 1 2016-07-10 16:54:30 -07:00
Scott Lahteine
f9e08b1fcd Merge pull request #4254 from AnHardt/killscreen
Add a kill-screen
2016-07-09 20:44:42 -07:00
AnHardt
faac2bcfdb Add a kill-screen 2016-07-10 04:50:45 +02:00
Scott Lahteine
3b3e52616c Merge pull request #4253 from thinkyhead/rc_clexpert_runout
Runout Sensor without SD Card, Print Timer support in M104
2016-07-09 19:10:36 -07:00
Scott Lahteine
4cd045791c Reduce code size by trusting the compiler 2016-07-09 18:17:44 -07:00
Scott Lahteine
a8538bd7ce General cleanup, code reduction in Marlin_main.cpp 2016-07-09 18:17:44 -07:00
Scott Lahteine
1026e5b071 Replace PLA/ABS preheating with generic 2016-07-09 18:06:51 -07:00
Petr Zahradník junior
315b4c2153 Runout sensor without SD Card 2016-07-09 17:57:53 -07:00
AnHardt
468f7f03a2 homeaxis() can leave early
when no known axis needs to be homed.

Most changes are only caused from altering the indentation.
```
if (axis == X_AXIS ? HOMEAXIS_DO(X) : axis == Y_AXIS ? HOMEAXIS_DO(Y) : axis == Z_AXIS ? HOMEAXIS_DO(Z) : 0) {
  ...
}

to

if (!(axis == X_AXIS ? HOMEAXIS_DO(X) : axis == Y_AXIS ? HOMEAXIS_DO(Y) : axis == Z_AXIS ? HOMEAXIS_DO(Z) : 0)) return;
...

```
2016-07-08 15:59:33 +02:00
AnHardt
eff7912243 Ensble/disable hardware endstops in G28 globally.
For moving away from the endstops we do not have to disable them.
They are not tested anyway.
2016-07-08 15:49:10 +02:00
AnHardt
f69434d81c Eliminate void setup_for_endstop_move() 2016-07-08 15:23:20 +02:00
AnHardt
0ea6247fc2 Use logic in Z_SAFE_HOMING
Use logic in Z_SAFE_HOMING

From
```
if (home_all_axis || homeZ) {
  if (home_all_axis) {
  ...
  home z
  }
  else if (homeZ) { // Don't need to Home Z twice
  home z
  }
}

```
to
```
if (home_all_axis || homeZ) {
  if (home_all_axis) {
  ...
  }
  home z
}
```
2016-07-08 15:08:50 +02:00
AnHardt
de3a169336 Always define MIN_Z_HEIGHT_FOR_HOMING even if 0
Always define MIN_Z_HEIGHT_FOR_HOMING even if 0
Always make a potential rise to `home_offset[Z_AXIS]` possible in G28.
Get rid of some very ugly constructs in MBL (ultralcd.cpp).
2016-07-08 15:08:32 +02:00
AnHardt
88ed232f53 Remove HAS_BED_PROBE case in first raise in G28
Differentiating made sense here when we could save a dozen lines of code,
but not for one line.
2016-07-08 14:59:44 +02:00
AnHardt
653eff3b31 Clean up quick_home_xy()
Since we do the actual homing now in the 'normal' routines `quick_home_xy()`
can be simplified to a relative simple diagonal move.
2016-07-08 14:59:27 +02:00
Scott Lahteine
98d0167a57 Merge pull request #4226 from thinkyhead/rc_emergency_command_parser
MarlinSerial emergency-command parser (with M108)
2016-07-07 16:53:55 -07:00
Scott Lahteine
2ee4e4f791 Make wait_for_heatup volatile 2016-07-07 16:37:23 -07:00
Scott Lahteine
834ad14c8d Add quickstop_stepper to update current position with stepper.quick_stop() 2016-07-07 16:37:22 -07:00
Scott Lahteine
ecffe92e20 Group EMERGENCY_PARSER commands 2016-07-07 16:37:22 -07:00