anchor.diff:                                             JpegComponent component) {
       int blocksPerLine = component.blocksPerLine;
       int blocksPerColumn = component.blocksPerColumn;
  -    int samplesPerLine = (blocksPerLine << 3);
  +    int samplesPerLine = _shiftL(blocksPerLine, 3);
       Int32List R = new Int32List(64);
       Uint8List r = new Uint8List(64);
       List<Uint8List> lines = new List(blocksPerColumn * 8);
   
       int l = 0;
       for (int blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
  -      int scanLine = blockRow << 3;
  +      int scanLine = _shiftL(blockRow, 3);
         for (int i = 0; i < 8; i++) {
           lines[l++] = new Uint8List(samplesPerLine);
         }
  
positive.code:           p[5 + row] == 0 &&
            p[6 + row] == 0 &&
            p[7 + row] == 0) {
          int t = ((Jpeg.dctSqrt2 * p[0 + row] + 512) >> 10);
          p.fillRange(row, row + 8, t);
          continue;
        }
  
        // stage 4
        int v0 = ((Jpeg.dctSqrt2 * p[0 + row] + 128) >> 8);
        int v1 = ((Jpeg.dctSqrt2 * p[4 + row] + 128) >> 8);
        int v2 = p[2 + row];
        int v3 = p[6 + row];
        int v4 = ((Jpeg.dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8);
        int v7 = ((Jpeg.dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8);
        int v5 = (p[3 + row] << 4);
        int v6 = (p[5 + row] << 4);
  
        // stage 3
        int t = ((v0 - v1+ 1) >> 1);
        v0 = ((v0 + v1 + 1) >> 1);
        v1 = t;
        t = ((v2 * Jpeg.dctSin6 + v3 * Jpeg.dctCos6 + 128) >> 8);
        v2 = ((v2 * Jpeg.dctCos6 - v3 * Jpeg.dctSin6 + 128) >> 8);
        v3 = t;
        t = ((v4 - v6 + 1) >> 1);
        v4 = ((v4 + v6 + 1) >> 1);
        v6 = t;
        t = ((v7 + v5 + 1) >> 1);
        v5 = ((v7 - v5 + 1) >> 1);
        v7 = t;
  
        // stage 2
        t = ((v0 - v3 + 1) >> 1);
        v0 = ((v0 + v3 + 1) >> 1);
        v3 = t;
        t = ((v1 - v2 + 1) >> 1);
        v1 = ((v1 + v2 + 1) >> 1);
        v2 = t;
        t = ((v4 * Jpeg.dctSin3 + v7 * Jpeg.dctCos3 + 2048) >> 12);
        v4 = ((v4 * Jpeg.dctCos3 - v7 * Jpeg.dctSin3 + 2048) >> 12);
        v7 = t;
        t = ((v5 * Jpeg.dctSin1 + v6 * Jpeg.dctCos1 + 2048) >> 12);
        v5 = ((v5 * Jpeg.dctCos1 - v6 * Jpeg.dctSin1 + 2048) >> 12);
        v6 = t;
  
        // stage 1
  
negative.code:           appData[4] == 0x65 && appData[5] == 0) {
          adobe = new JpegAdobe();
          adobe.version = appData[6];
          adobe.flags0 = _shiftL(appData[7], 8) | appData[8];
          adobe.flags1 = _shiftL(appData[9], 8) | appData[10];
          adobe.transformCode = appData[11];
        }
      }
  