// File: Chrom3D[P]Chrom3D/src/Model.cpp
// Function: Model::interactionSpecifiedSymmetricly(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>&)
bool Model::interactionSpecifiedSymmetricly(std::vector<std::pair<std::string,std::string> > &interactionVector) {
  std::vector<std::pair<std::string,std::string> > tmpVec;
  string left,right;
  for(std::vector<std::pair<std::string,std::string> >::iterator it = interactionVector.begin(); it != interactionVector.end(); it++) {
    if(it->first < it->second) {
      tmpVec.push_back(*it);     
    }
    else {
      left = it->first;
      right = it->second;
      tmpVec.push_back(make_pair(right,left));
    }
  }
  int num_interactions;
  for(std::vector<std::pair<std::string,std::string> >::iterator it = tmpVec.begin(); it != tmpVec.end(); it++) {    
      num_interactions = std::count(tmpVec.begin(), tmpVec.end(), *it);
      if (num_interactions != 2) {
	return false;
      }
  }
  return true;
}

// Assembly:
subq $0x128, %rsp            # imm = 0x128
movq %rdi, 0x118(%rsp)
movq %rsi, 0x110(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0x28e00
leaq 0xd8(%rsp), %rdi
callq 0x8670
leaq 0xb8(%rsp), %rdi
callq 0x8670
movq 0x110(%rsp), %rdi
callq 0x29680
movq %rax, 0xb0(%rsp)
movq 0x110(%rsp), %rdi
callq 0x296b0
movq %rax, 0xa8(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x29970
testb $0x1, %al
jne 0x26136
jmp 0x26265
leaq 0xb0(%rsp), %rdi
callq 0x29a60
movq %rax, 0x10(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x29a60
movq 0x10(%rsp), %rdi
movq %rax, %rsi
addq $0x20, %rsi
callq 0x12f90
testb $0x1, %al
jne 0x2616c
jmp 0x261a9
leaq 0xb0(%rsp), %rdi
callq 0x299e0
movq %rax, %rsi
leaq 0xf8(%rsp), %rdi
callq 0x296e0
jmp 0x2618b
jmp 0x2624a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
jmp 0x2636a
leaq 0xb0(%rsp), %rdi
callq 0x29a60
movq %rax, %rsi
leaq 0xd8(%rsp), %rdi
callq 0x8060
jmp 0x261c8
leaq 0xb0(%rsp), %rdi
callq 0x29a60
movq %rax, %rsi
addq $0x20, %rsi
leaq 0xb8(%rsp), %rdi
callq 0x8060
jmp 0x261eb
leaq 0x58(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x295a0
jmp 0x26207
leaq 0xf8(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x29c80
jmp 0x2621b
leaq 0x58(%rsp), %rdi
callq 0x28070
jmp 0x2624a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xa0(%rsp)
movl %eax, 0x9c(%rsp)
leaq 0x58(%rsp), %rdi
callq 0x28070
jmp 0x2636a
jmp 0x2624c
leaq 0xb0(%rsp), %rdi
xorl %esi, %esi
callq 0x29a70
movq %rax, 0x50(%rsp)
jmp 0x26103
leaq 0xf8(%rsp), %rdi
callq 0x29680
movq %rax, 0x40(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0x296b0
movq %rax, 0x38(%rsp)
leaq 0x40(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x29970
testb $0x1, %al
jne 0x262a1
jmp 0x26322
leaq 0xf8(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x29680
movq (%rsp), %rdi
movq %rax, 0x30(%rsp)
callq 0x296b0
movq %rax, 0x28(%rsp)
leaq 0x40(%rsp), %rdi
callq 0x299e0
movq %rax, %rdx
movq 0x30(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x29cb0
movq %rax, 0x8(%rsp)
jmp 0x262e8
movq 0x8(%rsp), %rax
movl %eax, 0x4c(%rsp)
cmpl $0x2, 0x4c(%rsp)
je 0x2630a
movb $0x0, 0x127(%rsp)
movl $0x1, 0x24(%rsp)
jmp 0x26332
jmp 0x2630c
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x29a70
movq %rax, 0x18(%rsp)
jmp 0x26277
movb $0x1, 0x127(%rsp)
movl $0x1, 0x24(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x8998
leaq 0xd8(%rsp), %rdi
callq 0x8998
leaq 0xf8(%rsp), %rdi
callq 0x29c10
movb 0x127(%rsp), %al
andb $0x1, %al
addq $0x128, %rsp            # imm = 0x128
retq
leaq 0xb8(%rsp), %rdi
callq 0x8998
leaq 0xd8(%rsp), %rdi
callq 0x8998
leaq 0xf8(%rsp), %rdi
callq 0x29c10
movq 0xa0(%rsp), %rdi
callq 0x8870
nop