// File: Kei18[P]pibt/./src/solver/pps.cpp
// Function: PPS::update()
void PPS::update() {
  M.clear();  // l.3

  for (auto s : swapers) {  // l.4
    H.clear();
    if (CHECK_SWAPER(s) == CHECK::VALID) {  // check valid s
      if (SWAP(s) == RES::FAIL) {  // l.5
        status = false;
        return;
      }
    }
  }

  for (auto p : A) {  // l.6, push
    H.clear();
    if (CHECK_PUSHER(p) == CHECK::VALID) {
      PUSH(p, false);  // l.8
    }
  }

  // goal check
  for (auto a : A) {
    if (inArray(a, U)) {
      if (CHECK_GOAL(a) == CHECK::INVALID) {
        auto itrU = std::find(U.begin(), U.end(), a);
        U.erase(itrU);
      }
    } else {
      if (CHECK_GOAL(a) == CHECK::VALID) {
        U.push_back(a);  //l.9
      }
    }
  }

  // change pushers & swapers
  for (auto a : pusherToSwaper) {
    auto itr = std::find(pushers.begin(), pushers.end(), a);
    if (itr != pushers.end()) pushers.erase(itr);
  }
  pusherToSwaper.clear();

  for (auto a : swaperToPusher) {
    if (!inS(a)) pushers.push_back(a);  // check other's registration
  }
  swaperToPusher.clear();

  for (auto s : doneSwapers) {
    auto itr = std::find(swapers.begin(), swapers.end(), s);
    swapers.erase(itr);
    delete s;
  }
  doneSwapers.clear();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x150(%rbp)
addq $0xe0, %rdi
callq 0x577d0
movq -0x150(%rbp), %rax
addq $0x80, %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x96ce0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
callq 0x96d10
movq %rax, -0x20(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x96d40
testb $0x1, %al
jne 0x8e2f4
jmp 0x8e366
leaq -0x18(%rbp), %rdi
callq 0x96d80
movq -0x150(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x28(%rbp)
addq $0x128, %rdi            # imm = 0x128
callq 0x577d0
movq -0x150(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x8e8c0
cmpl $0x0, %eax
jne 0x8e356
movq -0x150(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x8eda0
cmpl $0x1, %eax
jne 0x8e354
movq -0x150(%rbp), %rax
movb $0x0, 0x140(%rax)
jmp 0x8e8ab
jmp 0x8e356
jmp 0x8e358
leaq -0x18(%rbp), %rdi
callq 0x96da0
jmp 0x8e2e1
movq -0x150(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
callq 0x39b60
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
callq 0x399f0
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x51bd0
testb $0x1, %al
jne 0x8e3a2
jmp 0x8e3f9
leaq -0x38(%rbp), %rdi
callq 0x51c10
movq -0x150(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x48(%rbp)
addq $0x128, %rdi            # imm = 0x128
callq 0x577d0
movq -0x150(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x8f330
cmpl $0x0, %eax
jne 0x8e3ec
movq -0x150(%rbp), %rdi
movq -0x48(%rbp), %rsi
xorl %edx, %edx
callq 0x8f3a0
jmp 0x8e3ee
leaq -0x38(%rbp), %rdi
callq 0x51c30
jmp 0x8e38f
movq -0x150(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0x39b60
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rdi
callq 0x399f0
movq %rax, -0x60(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x51bd0
testb $0x1, %al
jne 0x8e438
jmp 0x8e545
leaq -0x58(%rbp), %rdi
callq 0x51c10
movq -0x150(%rbp), %rsi
movq (%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rdi
addq $0xf8, %rsi
callq 0x8f430
testb $0x1, %al
jne 0x8e468
jmp 0x8e507
movq -0x150(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0x8f4a0
cmpl $0x1, %eax
jne 0x8e505
movq -0x150(%rbp), %rdi
addq $0xf8, %rdi
callq 0x39b60
movq -0x150(%rbp), %rdi
movq %rax, -0x78(%rbp)
addq $0xf8, %rdi
callq 0x399f0
movq %rax, -0x80(%rbp)
movq -0x78(%rbp), %rdi
movq -0x80(%rbp), %rsi
leaq -0x68(%rbp), %rdx
callq 0x8be30
movq %rax, %rcx
movq -0x150(%rbp), %rax
movq %rcx, -0x70(%rbp)
addq $0xf8, %rax
movq %rax, -0x158(%rbp)
leaq -0x88(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x628b0
movq -0x158(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0x8bf70
movq %rax, -0x90(%rbp)
jmp 0x8e535
movq -0x150(%rbp), %rdi
movq -0x68(%rbp), %rsi
callq 0x8f4a0
cmpl $0x0, %eax
jne 0x8e533
movq -0x150(%rbp), %rdi
addq $0xf8, %rdi
leaq -0x68(%rbp), %rsi
callq 0xdab0
jmp 0x8e535
jmp 0x8e537
leaq -0x58(%rbp), %rdi
callq 0x51c30
jmp 0x8e422
movq -0x150(%rbp), %rax
addq $0x98, %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rdi
callq 0x39b60
movq %rax, -0xa0(%rbp)
movq -0x98(%rbp), %rdi
callq 0x399f0
movq %rax, -0xa8(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x51bd0
testb $0x1, %al
jne 0x8e59b
jmp 0x8e682
leaq -0xa0(%rbp), %rdi
callq 0x51c10
movq -0x150(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0xb0(%rbp)
addq $0x68, %rdi
callq 0x39b60
movq -0x150(%rbp), %rdi
movq %rax, -0xc0(%rbp)
addq $0x68, %rdi
callq 0x399f0
movq %rax, -0xc8(%rbp)
movq -0xc0(%rbp), %rdi
movq -0xc8(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0x8be30
movq -0x150(%rbp), %rdi
movq %rax, -0xb8(%rbp)
addq $0x68, %rdi
callq 0x399f0
movq %rax, -0xd0(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x51bd0
testb $0x1, %al
jne 0x8e630
jmp 0x8e66f
movq -0x150(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x160(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x628b0
movq -0x160(%rbp), %rdi
movq -0xd8(%rbp), %rsi
callq 0x8bf70
movq %rax, -0xe0(%rbp)
jmp 0x8e671
leaq -0xa0(%rbp), %rdi
callq 0x51c30
jmp 0x8e57f
movq -0x150(%rbp), %rdi
addq $0x98, %rdi
callq 0x577d0
movq -0x150(%rbp), %rax
addq $0xb0, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x39b60
movq %rax, -0xf0(%rbp)
movq -0xe8(%rbp), %rdi
callq 0x399f0
movq %rax, -0xf8(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x51bd0
testb $0x1, %al
jne 0x8e6e8
jmp 0x8e73c
leaq -0xf0(%rbp), %rdi
callq 0x51c10
movq -0x150(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rsi
callq 0x8f510
testb $0x1, %al
jne 0x8e72c
movq -0x150(%rbp), %rdi
addq $0x68, %rdi
leaq -0x100(%rbp), %rsi
callq 0xdab0
jmp 0x8e72e
leaq -0xf0(%rbp), %rdi
callq 0x51c30
jmp 0x8e6cf
movq -0x150(%rbp), %rdi
addq $0xb0, %rdi
callq 0x577d0
movq -0x150(%rbp), %rax
addq $0xc8, %rax
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rdi
callq 0x96ce0
movq %rax, -0x110(%rbp)
movq -0x108(%rbp), %rdi
callq 0x96d10
movq %rax, -0x118(%rbp)
leaq -0x110(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x96d40
testb $0x1, %al
jne 0x8e7a5
jmp 0x8e898
leaq -0x110(%rbp), %rdi
callq 0x96d80
movq -0x150(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x120(%rbp)
addq $0x80, %rdi
callq 0x96ce0
movq -0x150(%rbp), %rdi
movq %rax, -0x130(%rbp)
addq $0x80, %rdi
callq 0x96d10
movq %rax, -0x138(%rbp)
movq -0x130(%rbp), %rdi
movq -0x138(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0x96dc0
movq %rax, %rcx
movq -0x150(%rbp), %rax
movq %rcx, -0x128(%rbp)
addq $0x80, %rax
movq %rax, -0x170(%rbp)
leaq -0x140(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x96e80
movq -0x170(%rbp), %rdi
movq -0x140(%rbp), %rsi
callq 0x96e10
movq %rax, -0x148(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0x168(%rbp)
cmpq $0x0, %rax
je 0x8e885
movq -0x168(%rbp), %rdi
callq 0x96ec0
movq -0x168(%rbp), %rdi
movl $0x80, %esi
callq 0x84f0
jmp 0x8e887
leaq -0x110(%rbp), %rdi
callq 0x96da0
jmp 0x8e789
movq -0x150(%rbp), %rdi
addq $0xc8, %rdi
callq 0x96f00
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq
nopw %cs:(%rax,%rax)