Disassembly: 
  L1: 8b ff ?? mov edi, edi
   55 ?? push ebp
   8b ec ?? mov ebp, esp
   51 ?? push ecx
   51 ?? push ecx
   83 65 fc 00 ?? and dword ss:[ebp + 0xfc<252,-4>], 0
   53 ?? push ebx
   56 ?? push esi
   57 ?? push edi
   8b 7d 0c ?? mov edi, dword ss:[ebp + 12]
   4f ?? dec edi
   8d 4f 01 ?? lea ecx, ds:[edi + 1]
   8b c1 ?? mov eax, ecx
   99 ?? cdq
   83 e2 1f ?? and edx, 0x1f<31>
   03 c2 ?? add eax, edx
   8b d8 ?? mov ebx, eax
   8b c1 ?? mov eax, ecx
   c1 fb 05 ?? sar ebx, 5
   25 1f 00 00 80 ?? and eax, 0x8000001f
   79 05 ?? jns basic block L3
  
  L2: 48 ?? dec eax
   83 c8 e0 ?? or eax, 0xe0<224,-32>
   40 ?? inc eax
  
  L3: 8b 75 08 ?? mov esi, dword ss:[ebp + 8]
   6a 1f ?? push 0x1f<31>
   59 ?? pop ecx
   2b c8 ?? sub ecx, eax
   33 c0 ?? xor eax, eax
   40 ?? inc eax
   d3 e0 ?? shl eax, cl
   89 4d f8 ?? mov dword ss:[ebp + 0xf8<248,-8>], ecx
   85 04 9e ?? test dword ds:[esi + ebx * 4], eax
   0f 84 81 00 00 00 ?? je basic block L22
  
  L4: 83 ca ff ?? or edx, 0xff<255,-1>
   d3 e2 ?? shl edx, cl
   8b c3 ?? mov eax, ebx
   f7 d2 ?? not edx
   85 14 86 ?? test dword ds:[esi + eax * 4], edx
   eb 04 ?? jmp basic block L6
  
  L5: 83 3c 86 00 ?? cmp dword ds:[esi + eax * 4], 0
  
  L6: 75 08 ?? jne basic block L9
  
  L7: 40 ?? inc eax
   83 f8 03 ?? cmp eax, 3
   7c f4 ?? jl basic block L5
  
  L8: eb 65 ?? jmp basic block L22
  
  L9: 8b c7 ?? mov eax, edi
   99 ?? cdq
   6a 1f ?? push 0x1f<31>
   59 ?? pop ecx
   23 d1 ?? and edx, ecx
   03 c2 ?? add eax, edx
   c1 f8 05 ?? sar eax, 5
   81 e7 1f 00 00 80 ?? and edi, 0x8000001f
   79 05 ?? jns basic block L11
  
  L10: 4f ?? dec edi
   83 cf e0 ?? or edi, 0xe0<224,-32>
   47 ?? inc edi
  
  L11: 83 65 0c 00 ?? and dword ss:[ebp + 12], 0
   33 d2 ?? xor edx, edx
   2b cf ?? sub ecx, edi
   42 ?? inc edx
   d3 e2 ?? shl edx, cl
   8b 0c 86 ?? mov ecx, dword ds:[esi + eax * 4]
   8d 3c 11 ?? lea edi, ds:[ecx + edx]
   3b f9 ?? cmp edi, ecx
   72 04 ?? jb basic block L13
  
  L12: 3b fa ?? cmp edi, edx
   73 07 ?? jae basic block L14
  
  L13: c7 45 0c 01 00 00 00 ?? mov dword ss:[ebp + 12], 1
  
  L14: 8b 4d 0c ?? mov ecx, dword ss:[ebp + 12]
   89 3c 86 ?? mov dword ds:[esi + eax * 4], edi
   eb 1d ?? jmp basic block L20
  
  L15: 85 c9 ?? test ecx, ecx
   74 1c ?? je basic block L21
  
  L16: 8b 0c 86 ?? mov ecx, dword ds:[esi + eax * 4]
   8d 51 01 ?? lea edx, ds:[ecx + 1]
   33 ff ?? xor edi, edi
   3b d1 ?? cmp edx, ecx
   72 05 ?? jb basic block L18
  
  L17: 83 fa 01 ?? cmp edx, 1
   73 03 ?? jae basic block L19
  
  L18: 33 ff ?? xor edi, edi
   47 ?? inc edi
  
  L19: 89 14 86 ?? mov dword ds:[esi + eax * 4], edx
   8b cf ?? mov ecx, edi
  
  L20: 48 ?? dec eax
   79 e0 ?? jns basic block L15
  
  L21: 89 4d fc ?? mov dword ss:[ebp + 0xfc<252,-4>], ecx
  
  L22: 8b 4d f8 ?? mov ecx, dword ss:[ebp + 0xf8<248,-8>]
   83 c8 ff ?? or eax, 0xff<255,-1>
   d3 e0 ?? shl eax, cl
   6a 03 ?? push 3
   59 ?? pop ecx
   21 04 9e ?? and dword ds:[esi + ebx * 4], eax
   43 ?? inc ebx
   3b d9 ?? cmp ebx, ecx
   7d 0b ?? jge basic block L24
  
  L23: 8d 34 9e ?? lea esi, ds:[esi + ebx * 4]
   2b cb ?? sub ecx, ebx
   33 c0 ?? xor eax, eax
   8b fe ?? mov edi, esi
   f3 ab ?? rep_stosd
  
  L24: 8b 45 fc ?? mov eax, dword ss:[ebp + 0xfc<252,-4>]
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   c9 ?? leave
   c3 ?? ret
  
  