// File: gpertea[P]gclib/./wyhash.h
// Function: wyhash(void const*, unsigned long, unsigned long, unsigned long const*)
static inline uint64_t wyhash(const void *key, size_t len, uint64_t seed, const uint64_t *secret){
  const uint8_t *p=(const uint8_t *)key; seed^=*secret;	uint64_t	a,	b;
  if(_likely_(len<=16)){
    if(_likely_(len>=4)){ a=(_wyr4(p)<<32)|_wyr4(p+((len>>3)<<2)); b=(_wyr4(p+len-4)<<32)|_wyr4(p+len-4-((len>>3)<<2)); }
    else if(_likely_(len>0)){ a=_wyr3(p,len); b=0;}
    else a=b=0;
  }
  else{
    size_t i=len; 
    if(_unlikely_(i>48)){
      uint64_t see1=seed, see2=seed;
      do{
        seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed);
        see1=_wymix(_wyr8(p+16)^secret[2],_wyr8(p+24)^see1);
        see2=_wymix(_wyr8(p+32)^secret[3],_wyr8(p+40)^see2);
        p+=48; i-=48;
      }while(_likely_(i>48));
      seed^=see1^see2;
    }
    while(_unlikely_(i>16)){  seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed);  i-=16; p+=16;  }
    a=_wyr8(p+i-16);  b=_wyr8(p+i-8);
  }
  return _wymix(secret[1]^len,_wymix(a^secret[1],b^seed));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
xorq -0x18(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpq $0x10, -0x10(%rbp)
ja 0xfbc6
cmpq $0x4, -0x10(%rbp)
jb 0xfb8d
movq -0x28(%rbp), %rdi
callq 0xfd90
shlq $0x20, %rax
movq %rax, -0x60(%rbp)
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
shrq $0x3, %rax
shlq $0x2, %rax
addq %rax, %rdi
callq 0xfd90
movq %rax, %rcx
movq -0x60(%rbp), %rax
orq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rdi
addq -0x10(%rbp), %rdi
addq $-0x4, %rdi
callq 0xfd90
shlq $0x20, %rax
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rdi
addq -0x10(%rbp), %rdi
addq $-0x4, %rdi
movq -0x10(%rbp), %rcx
shrq $0x3, %rcx
shlq $0x2, %rcx
xorl %eax, %eax
subq %rcx, %rax
addq %rax, %rdi
callq 0xfd90
movq %rax, %rcx
movq -0x58(%rbp), %rax
orq %rcx, %rax
movq %rax, -0x38(%rbp)
jmp 0xfbc1
cmpq $0x0, -0x10(%rbp)
jbe 0xfbaf
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xfdb0
movq %rax, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
jmp 0xfbbf
movq $0x0, -0x38(%rbp)
movq $0x0, -0x30(%rbp)
jmp 0xfbc1
jmp 0xfd49
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
cmpq $0x30, -0x40(%rbp)
jbe 0xfcc6
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rdi
callq 0xfe30
movq -0x20(%rbp), %rcx
xorq 0x8(%rcx), %rax
movq %rax, -0x78(%rbp)
movq -0x28(%rbp), %rdi
addq $0x8, %rdi
callq 0xfe30
movq -0x78(%rbp), %rdi
movq %rax, %rsi
xorq -0x18(%rbp), %rsi
callq 0xfe00
movq %rax, -0x18(%rbp)
movq -0x28(%rbp), %rdi
addq $0x10, %rdi
callq 0xfe30
movq -0x20(%rbp), %rcx
xorq 0x10(%rcx), %rax
movq %rax, -0x70(%rbp)
movq -0x28(%rbp), %rdi
addq $0x18, %rdi
callq 0xfe30
movq -0x70(%rbp), %rdi
movq %rax, %rsi
xorq -0x48(%rbp), %rsi
callq 0xfe00
movq %rax, -0x48(%rbp)
movq -0x28(%rbp), %rdi
addq $0x20, %rdi
callq 0xfe30
movq -0x20(%rbp), %rcx
xorq 0x18(%rcx), %rax
movq %rax, -0x68(%rbp)
movq -0x28(%rbp), %rdi
addq $0x28, %rdi
callq 0xfe30
movq -0x68(%rbp), %rdi
movq %rax, %rsi
xorq -0x50(%rbp), %rsi
callq 0xfe00
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rax
addq $0x30, %rax
movq %rax, -0x28(%rbp)
movq -0x40(%rbp), %rax
subq $0x30, %rax
movq %rax, -0x40(%rbp)
cmpq $0x30, -0x40(%rbp)
ja 0xfbe9
movq -0x48(%rbp), %rax
xorq -0x50(%rbp), %rax
xorq -0x18(%rbp), %rax
movq %rax, -0x18(%rbp)
jmp 0xfcc8
cmpq $0x10, -0x40(%rbp)
jbe 0xfd1f
movq -0x28(%rbp), %rdi
callq 0xfe30
movq -0x20(%rbp), %rcx
xorq 0x8(%rcx), %rax
movq %rax, -0x80(%rbp)
movq -0x28(%rbp), %rdi
addq $0x8, %rdi
callq 0xfe30
movq -0x80(%rbp), %rdi
movq %rax, %rsi
xorq -0x18(%rbp), %rsi
callq 0xfe00
movq %rax, -0x18(%rbp)
movq -0x40(%rbp), %rax
subq $0x10, %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x28(%rbp)
jmp 0xfcc8
movq -0x28(%rbp), %rdi
addq -0x40(%rbp), %rdi
addq $-0x10, %rdi
callq 0xfe30
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rdi
addq -0x40(%rbp), %rdi
addq $-0x8, %rdi
callq 0xfe30
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
xorq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
xorq 0x8(%rax), %rdi
movq -0x38(%rbp), %rsi
xorq -0x18(%rbp), %rsi
callq 0xfe00
movq -0x88(%rbp), %rdi
movq %rax, %rsi
callq 0xfe00
addq $0x90, %rsp
popq %rbp
retq
nopl (%rax)