diff --git a/gyp/ports.gyp b/gyp/ports.gyp
index 1d45fd3..6ee1e32 100644
--- a/gyp/ports.gyp
+++ b/gyp/ports.gyp
@@ -124,7 +124,7 @@
             '../src/ports/SkTime_Unix.cpp',
             '../src/ports/SkTLS_pthread.cpp',
           ],
-		  'conditions': [
+          'conditions': [
             #    when we build for win, we only want one of these default files
             [ 'skia_directwrite', {
               'sources!': [
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 915268d..0c191d0 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -675,9 +675,9 @@
 
     enum DrawBitmapRectFlags {
         kNone_DrawBitmapRectflag            = 0x0,
-        /** 
+        /**
          *  When filtering is enabled, allow the color samples outside of
-         *  the src rect (but still in the src bitmap) to bleed into the 
+         *  the src rect (but still in the src bitmap) to bleed into the
          *  drawn portion
          */
         kBleed_DrawBitmapRectFlag            = 0x1,
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
index 759c7e4..414d2fa 100644
--- a/include/gpu/GrContext.h
+++ b/include/gpu/GrContext.h
@@ -840,7 +840,7 @@
                     GrPathRendererChain::DrawType drawType = GrPathRendererChain::kColor_DrawType,
                     GrPathRendererChain::StencilSupport* stencilSupport = NULL);
 
-    
+
 #if GR_CACHE_STATS
     void printCacheStats() const;
 #endif
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index 8b7131a..d06f6e6 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -377,7 +377,7 @@
 
 void SkDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap,
                               const SkRect* src, const SkRect& dst,
-                              const SkPaint& paint, 
+                              const SkPaint& paint,
                               SkCanvas::DrawBitmapRectFlags flags) {
     SkMatrix    matrix;
     SkRect      bitmapBounds, tmpSrc, tmpDst;
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp
index 06b54f6..097e0ea 100644
--- a/src/core/SkPicture.cpp
+++ b/src/core/SkPicture.cpp
@@ -277,7 +277,7 @@
 #ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V13_AND_ALL_OTHER_INSTANCES_TOO
         && PRIOR_PICTURE_VERSION != info.fVersion  // TODO: remove when .skps regenerated
 #endif
-        ) { 
+        ) {
         return false;
     }
 
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
index 77c2afd..9e9cfc4 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -837,7 +837,7 @@
                 SkCanvas::DrawBitmapRectFlags flags;
 #ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V13_AND_ALL_OTHER_INSTANCES_TOO
                 flags = SkCanvas::kNone_DrawBitmapRectflag;
-                // TODO: remove this backwards compatibility code once the .skps are 
+                // TODO: remove this backwards compatibility code once the .skps are
                 // regenerated
                 SkASSERT(32 == size || 48 == size ||    // old sizes
                          36 == size || 52 == size);     // new sizes
diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h
index 4e30302..51547a4 100644
--- a/src/core/SkPictureRecord.h
+++ b/src/core/SkPictureRecord.h
@@ -59,7 +59,7 @@
     virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
                             const SkPaint*) SK_OVERRIDE;
     virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
-                                      const SkRect& dst, const SkPaint* paint, 
+                                      const SkRect& dst, const SkPaint* paint,
                                       DrawBitmapRectFlags flags) SK_OVERRIDE;
     virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
                                   const SkPaint*) SK_OVERRIDE;
diff --git a/src/gpu/GrAAHairLinePathRenderer.cpp b/src/gpu/GrAAHairLinePathRenderer.cpp
index 1e445fe..5ef981b 100644
--- a/src/gpu/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/GrAAHairLinePathRenderer.cpp
@@ -105,15 +105,15 @@
         data[0 + baseIdx] = baseVert + 0; // p0
         data[1 + baseIdx] = baseVert + 1; // p1
         data[2 + baseIdx] = baseVert + 2; // p2
-        
+
         data[3 + baseIdx] = baseVert + 2; // p2
         data[4 + baseIdx] = baseVert + 1; // p1
         data[5 + baseIdx] = baseVert + 3; // p3
-        
+
         data[6 + baseIdx] = baseVert + 0; // p0
         data[7 + baseIdx] = baseVert + 5; // p5
         data[8 + baseIdx] = baseVert + 1; // p1
-        
+
         data[9 + baseIdx] = baseVert + 0; // p0
         data[10+ baseIdx] = baseVert + 4; // p4
         data[11+ baseIdx] = baseVert + 5; // p5
@@ -482,7 +482,7 @@
     GrPoint fPos;
     GrColor fCoverage;
 };
-        
+
 struct BezierVertex {
     GrPoint fPos;
     union {
@@ -1051,44 +1051,44 @@
                                           GrDrawTarget::AutoReleaseGeometry* arg,
                                           SkRect* devBounds) {
     GrDrawState* drawState = target->drawState();
-    
+
     const SkMatrix& viewM = drawState->getViewMatrix();
-    
+
     // All the vertices that we compute are within 1 of path control points with the exception of
     // one of the bounding vertices for each quad. The add_quads() function will update the bounds
     // for each quad added.
     *devBounds = path.getBounds();
     viewM.mapRect(devBounds);
     devBounds->outset(SK_Scalar1, SK_Scalar1);
-    
+
     int vertCnt = kVertsPerQuad * quadCnt + kVertsPerQuad * conicCnt;
-    
+
     target->drawState()->setVertexAttribs<gHairlineBezierAttribs>(SK_ARRAY_COUNT(gHairlineBezierAttribs));
     SkASSERT(sizeof(BezierVertex) == target->getDrawState().getVertexSize());
-    
+
     if (!arg->set(target, vertCnt, 0)) {
         return false;
     }
-    
+
     BezierVertex* verts = reinterpret_cast<BezierVertex*>(arg->vertices());
-    
+
     const SkMatrix* toDevice = NULL;
     const SkMatrix* toSrc = NULL;
     SkMatrix ivm;
-    
+
     if (viewM.hasPerspective()) {
         if (viewM.invert(&ivm)) {
             toDevice = &viewM;
             toSrc = &ivm;
         }
     }
-    
+
     int unsubdivQuadCnt = quads.count() / 3;
     for (int i = 0; i < unsubdivQuadCnt; ++i) {
         SkASSERT(qSubdivs[i] >= 0);
         add_quads(&quads[3*i], qSubdivs[i], toDevice, toSrc, &verts, devBounds);
     }
-    
+
     // Start Conics
     for (int i = 0; i < conicCnt; ++i) {
         add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts, devBounds);
@@ -1117,7 +1117,7 @@
     SkRect tolDevBounds = devBounds;
     tolDevBounds.outset(SK_Scalar1 / 10000, SK_Scalar1 / 10000);
     SkRect actualBounds;
-    
+
     VertexType* verts = reinterpret_cast<VertexType*>(vertices);
     bool first = true;
     for (int i = 0; i < vCount; ++i) {
@@ -1137,7 +1137,7 @@
     if (!first) {
         return tolDevBounds.contains(actualBounds);
     }
-    
+
     return true;
 }
 
@@ -1145,12 +1145,12 @@
                                           const SkStrokeRec&,
                                           GrDrawTarget* target,
                                           bool antiAlias) {
-    
+
     GrDrawState* drawState = target->drawState();
-    
+
     SkIRect devClipBounds;
     target->getClip()->getConservativeBounds(drawState->getRenderTarget(), &devClipBounds);
-    
+
     int lineCnt;
     int quadCnt;
     int conicCnt;
@@ -1163,7 +1163,7 @@
                                        &lines, &quads, &conics, &qSubdivs, &cWeights);
     lineCnt = lines.count() / 2;
     conicCnt = conics.count() / 3;
-    
+
     // do lines first
     {
         GrDrawTarget::AutoReleaseGeometry arg;
@@ -1209,12 +1209,12 @@
             }
         }
     }
-    
+
     // then quadratics/conics
     {
         GrDrawTarget::AutoReleaseGeometry arg;
         SkRect devBounds;
-        
+
         if (!this->createBezierGeom(path,
                                     target,
                                     quads,
@@ -1227,9 +1227,9 @@
                                     &devBounds)) {
             return false;
         }
-        
+
         GrDrawTarget::AutoStateRestore asr;
-        
+
         // createGeom transforms the geometry to device space when the matrix does not have
         // perspective.
         if (target->getDrawState().getViewMatrix().hasPerspective()) {
@@ -1240,14 +1240,14 @@
         GrDrawState* drawState = target->drawState();
 
         static const int kEdgeAttrIndex = 1;
-        
+
         GrEffectRef* hairQuadEffect = HairQuadEdgeEffect::Create();
         GrEffectRef* hairConicEffect = HairConicEdgeEffect::Create();
-        
+
         // Check devBounds
         SkASSERT(check_bounds<BezierVertex>(drawState, devBounds, arg.vertices(),
                                             kVertsPerQuad * quadCnt + kVertsPerQuad * conicCnt));
-        
+
         {
             GrDrawState::AutoRestoreEffects are(drawState);
             target->setIndexSourceToBuffer(fQuadsIndexBuffer);
@@ -1264,7 +1264,7 @@
                 quads += n;
             }
         }
-        
+
         {
             GrDrawState::AutoRestoreEffects are(drawState);
             int conics = 0;
@@ -1281,7 +1281,7 @@
             }
         }
     }
-    
+
     target->resetIndexSource();
 
     return true;
diff --git a/src/gpu/GrAAHairLinePathRenderer.h b/src/gpu/GrAAHairLinePathRenderer.h
index c8a3eae..22cc876e 100644
--- a/src/gpu/GrAAHairLinePathRenderer.h
+++ b/src/gpu/GrAAHairLinePathRenderer.h
@@ -21,11 +21,11 @@
                              const SkStrokeRec& stroke,
                              const GrDrawTarget* target,
                              bool antiAlias) const SK_OVERRIDE;
-    
+
     typedef SkTArray<SkPoint, true> PtArray;
     typedef SkTArray<int, true> IntArray;
     typedef SkTArray<float, true> FloatArray;
-    
+
 protected:
     virtual bool onDrawPath(const SkPath& path,
                             const SkStrokeRec& stroke,
@@ -43,7 +43,7 @@
                         int lineCnt,
                         GrDrawTarget::AutoReleaseGeometry* arg,
                         SkRect* devBounds);
-    
+
     bool createBezierGeom(const SkPath& path,
                           GrDrawTarget* target,
                           const PtArray& quads,
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
index 0c91fb8..7594278 100644
--- a/src/gpu/GrDrawTarget.h
+++ b/src/gpu/GrDrawTarget.h
@@ -627,17 +627,17 @@
     public:
         DrawToken(GrDrawTarget* drawTarget, uint32_t drawID) :
                   fDrawTarget(drawTarget), fDrawID(drawID) {}
-        
+
         bool isIssued() { return NULL != fDrawTarget && fDrawTarget->isIssued(fDrawID); }
-        
+
     private:
         GrDrawTarget*  fDrawTarget;
         uint32_t       fDrawID;   // this may wrap, but we're doing direct comparison
                                   // so that should be okay
     };
-    
+
     virtual DrawToken getCurrentDrawToken() { return DrawToken(this, 0); }
-        
+
 protected:
 
     enum GeometrySrcType {
@@ -858,7 +858,7 @@
 
     // Check to see if this set of draw commands has been sent out
     virtual bool       isIssued(uint32_t drawID) { return true; }
-    
+
     enum {
         kPreallocGeoSrcStateStackCnt = 4,
     };
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
index ba5e790..507be82 100644
--- a/src/gpu/GrInOrderDrawBuffer.h
+++ b/src/gpu/GrInOrderDrawBuffer.h
@@ -225,7 +225,7 @@
     SkSTArray<kGeoPoolStatePreAllocCnt, GeometryPoolState> fGeoPoolStateStack;
 
     virtual bool       isIssued(uint32_t drawID) { return drawID != fDrawID; }
-    
+
     bool                            fFlushing;
     uint32_t                        fDrawID;
 
diff --git a/src/pipe/SkGPipePriv.h b/src/pipe/SkGPipePriv.h
index 2c59071..0d25b5a 100644
--- a/src/pipe/SkGPipePriv.h
+++ b/src/pipe/SkGPipePriv.h
@@ -148,7 +148,7 @@
     // Specific to drawBitmapRect, but needs to be different from HasPaint,
     // which is used for all drawBitmap calls, so include it here.
     kDrawBitmap_HasSrcRect_DrawOpFlag = 1 << 1,
-    // SkCanvas::DrawBitmapRectFlags::kBleed_DrawBitmapRectFlag is 
+    // SkCanvas::DrawBitmapRectFlags::kBleed_DrawBitmapRectFlag is
     // converted into and out of this flag to save space
     kDrawBitmap_Bleed_DrawOpFlag      = 1 << 2,
 };
diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
index ae4e4b2..399c9be 100644
--- a/src/pipe/SkGPipeRead.cpp
+++ b/src/pipe/SkGPipeRead.cpp
@@ -579,7 +579,7 @@
     const SkRect* dst = skip<SkRect>(reader);
     const SkBitmap* bitmap = holder.getBitmap();
     if (state->shouldDraw()) {
-        canvas->drawBitmapRectToRect(*bitmap, src, *dst, 
+        canvas->drawBitmapRectToRect(*bitmap, src, *dst,
                                      hasPaint ? &state->paint() : NULL, dbmrFlags);
     }
 }
diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp
index a90a3ac..f646bab 100644
--- a/src/pipe/SkGPipeWrite.cpp
+++ b/src/pipe/SkGPipeWrite.cpp
@@ -231,7 +231,7 @@
     virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
                             const SkPaint*) SK_OVERRIDE;
     virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
-                                      const SkRect& dst, const SkPaint* paint, 
+                                      const SkRect& dst, const SkPaint* paint,
                                       DrawBitmapRectFlags flags) SK_OVERRIDE;
     virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
                                   const SkPaint*) SK_OVERRIDE;
diff --git a/src/ports/SkFontHost_win_dw.cpp b/src/ports/SkFontHost_win_dw.cpp
index b17195d..529789a 100644
--- a/src/ports/SkFontHost_win_dw.cpp
+++ b/src/ports/SkFontHost_win_dw.cpp
@@ -1908,4 +1908,3 @@
 
     return SkNEW_ARGS(SkFontMgr_DirectWrite, (sysFontCollection.get(), localeName, localeNameLen));
 }
-
diff --git a/src/utils/SkPictureUtils.cpp b/src/utils/SkPictureUtils.cpp
index 31d9fc7..87a4057 100644
--- a/src/utils/SkPictureUtils.cpp
+++ b/src/utils/SkPictureUtils.cpp
@@ -108,7 +108,7 @@
     }
     virtual void drawBitmapRect(const SkDraw&, const SkBitmap& bitmap,
                                 const SkRect* srcOrNull, const SkRect& dst,
-                                const SkPaint&, 
+                                const SkPaint&,
                                 SkCanvas::DrawBitmapRectFlags flags) SK_OVERRIDE {
         this->addBitmap(bitmap);
     }
diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp
index dae5f33..bf81983 100644
--- a/src/utils/debugger/SkDebugCanvas.cpp
+++ b/src/utils/debugger/SkDebugCanvas.cpp
@@ -281,7 +281,7 @@
 }
 
 void SkDebugCanvas::drawBitmapRectToRect(const SkBitmap& bitmap,
-                                         const SkRect* src, const SkRect& dst, 
+                                         const SkRect* src, const SkRect& dst,
                                          const SkPaint* paint,
                                          SkCanvas::DrawBitmapRectFlags flags) {
     addDrawCommand(new SkDrawBitmapRectCommand(bitmap, src, dst, paint, flags));
