diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index af0e1a7..c101819 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -452,9 +452,9 @@
 	} else if (!gettmarg(tup, &buf))
 		return NULL;
 
-        /* Checks added to make sure strftime() does not crash Python by
-            indexing blindly into some array for a textual representation
-            by some bad index (fixes bug #897625).
+	/* Checks added to make sure strftime() does not crash Python by
+	   indexing blindly into some array for a textual representation
+	   by some bad index (fixes bug #897625).
 
 	    Also support values of zero from Python code for arguments in which
 	    that is out of range by forcing that value to the lowest value that
@@ -475,50 +475,50 @@
 	    (1) gettmarg() handles bounds-checking.
 	    (2) Python's acceptable range is one greater than the range in C,
 	        thus need to check against automatic decrement by gettmarg().
-        */
+	*/
 	if (buf.tm_mon == -1)
 	    buf.tm_mon = 0;
 	else if (buf.tm_mon < 0 || buf.tm_mon > 11) {
-            PyErr_SetString(PyExc_ValueError, "month out of range");
-                        return NULL;
-        }
+		PyErr_SetString(PyExc_ValueError, "month out of range");
+			return NULL;
+	}
 	if (buf.tm_mday == 0)
 	    buf.tm_mday = 1;
 	else if (buf.tm_mday < 0 || buf.tm_mday > 31) {
-            PyErr_SetString(PyExc_ValueError, "day of month out of range");
-                        return NULL;
-        }
-        if (buf.tm_hour < 0 || buf.tm_hour > 23) {
-            PyErr_SetString(PyExc_ValueError, "hour out of range");
-            return NULL;
-        }
-        if (buf.tm_min < 0 || buf.tm_min > 59) {
-            PyErr_SetString(PyExc_ValueError, "minute out of range");
-            return NULL;
-        }
-        if (buf.tm_sec < 0 || buf.tm_sec > 61) {
-            PyErr_SetString(PyExc_ValueError, "seconds out of range");
-            return NULL;
-        }
-        /* tm_wday does not need checking of its upper-bound since taking
-        ``% 7`` in gettmarg() automatically restricts the range. */
-        if (buf.tm_wday < 0) {
-            PyErr_SetString(PyExc_ValueError, "day of week out of range");
-            return NULL;
-        }
+		PyErr_SetString(PyExc_ValueError, "day of month out of range");
+			return NULL;
+	}
+	if (buf.tm_hour < 0 || buf.tm_hour > 23) {
+		PyErr_SetString(PyExc_ValueError, "hour out of range");
+		return NULL;
+	}
+	if (buf.tm_min < 0 || buf.tm_min > 59) {
+		PyErr_SetString(PyExc_ValueError, "minute out of range");
+		return NULL;
+	}
+	if (buf.tm_sec < 0 || buf.tm_sec > 61) {
+		PyErr_SetString(PyExc_ValueError, "seconds out of range");
+		return NULL;
+	}
+	/* tm_wday does not need checking of its upper-bound since taking
+	``% 7`` in gettmarg() automatically restricts the range. */
+	if (buf.tm_wday < 0) {
+		PyErr_SetString(PyExc_ValueError, "day of week out of range");
+		return NULL;
+	}
 	if (buf.tm_yday == -1)
 	    buf.tm_yday = 0;
 	else if (buf.tm_yday < 0 || buf.tm_yday > 365) {
-            PyErr_SetString(PyExc_ValueError, "day of year out of range");
-            return NULL;
-        }
+		PyErr_SetString(PyExc_ValueError, "day of year out of range");
+		return NULL;
+	}
 	/* Normalize tm_isdst just in case someone foolishly implements %Z
 	   based on the assumption that tm_isdst falls within the range of
 	   [-1, 1] */
-        if (buf.tm_isdst < -1)
-	    buf.tm_isdst = -1;
+	if (buf.tm_isdst < -1)
+		buf.tm_isdst = -1;
 	else if (buf.tm_isdst > 1)
-	    buf.tm_isdst = 1;
+		buf.tm_isdst = 1;
 
 #ifdef HAVE_WCSFTIME
 	tmpfmt = PyBytes_FromStringAndSize(NULL,
@@ -614,14 +614,15 @@
 static PyObject *
 time_strptime(PyObject *self, PyObject *args)
 {
-    PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
-    PyObject *strptime_result;
+	PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
+	PyObject *strptime_result;
 
-    if (!strptime_module)
-        return NULL;
-    strptime_result = PyObject_CallMethod(strptime_module, "_strptime_time", "O", args);
-    Py_DECREF(strptime_module);
-    return strptime_result;
+	if (!strptime_module)
+		return NULL;
+	strptime_result = PyObject_CallMethod(strptime_module,
+						"_strptime_time", "O", args);
+	Py_DECREF(strptime_module);
+	return strptime_result;
 }
 
 PyDoc_STRVAR(strptime_doc,
